diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,15 @@
 # Revision history for stackage-query
 
-## 0.1.0.0  -- YYYY-mm-dd
+## 0.1.1  -- 2017-07-02
 
-* First version. Released on an unsuspecting world.
+* new commands for `constraints`, `dependencies`, `executables`, and `modules`
+* `tools` command can now take optional package arg
+* `latest` command now git pulls
+* `update` command shows new shortlog
+* git pull is now quiet
+* add --version option
+
+## 0.1.0  -- 2017-04-24
+
+* initial release on Hackage with commands to query package versions,
+  reverse deps, Stackage owners, latest snapshots, and no of consumers.
diff --git a/Main.hs b/Main.hs
--- a/Main.hs
+++ b/Main.hs
@@ -3,7 +3,7 @@
 import Control.Monad
 import Data.Char (isDigit)
 import Data.List
-import qualified Data.Map.Strict (assocs, lookup)
+import qualified Data.Map.Strict (assocs, keys, lookup)
 import Data.Maybe
 import Data.Monoid
 import qualified Data.Set as Set
@@ -20,7 +20,10 @@
 import Data.Foldable (traverse_)
 import Data.Yaml hiding (Parser)
 import Distribution.Package (PackageName(..), unPackageName)
+import Distribution.Text (disp)
 
+import Paths_stackage_query (version)
+
 newtype Args = Args Command
 
 newtype ConsumerOption = ConsumerOption {threshold :: Int}
@@ -59,15 +62,21 @@
   readsPrec _ "nightly" = [(Nightly,"")]
   readsPrec _ _ = []
 
+type Pkg = String
+
 data Command = Config Snapshot
              | Ghc Snapshot
              | Core Snapshot
-             | Tools Snapshot
+             | Tools Snapshot (Maybe Pkg)
              | Packages Snapshot
              | Consumers ConsumerOption Snapshot
-             | Package Snapshot String
-             | Users Snapshot String
-             | Github Snapshot String
+             | Package Snapshot Pkg
+             | Users Snapshot Pkg
+             | Github Snapshot Pkg
+             | Constraints Snapshot Pkg
+             | Dependencies Snapshot Pkg
+             | Executables Snapshot Pkg
+             | Modules Snapshot Pkg
              | Latest Project
              | Update Project
 
@@ -75,8 +84,8 @@
 consumeParser = ConsumerOption <$> option auto
   (long "minimum" <> short 'm' <> metavar "THRESHOLD" <> value 5 <> help "Show packages with at least THRESHOLD consumers (default 5)")
 
-parseString :: String -> Parser String
-parseString lbl = strArgument $ metavar lbl
+parsePkg :: Pkg -> Parser Pkg
+parsePkg lbl = strArgument $ metavar lbl
 
 parseSnap :: Parser Snapshot
 parseSnap = argument auto $ metavar "SNAP"
@@ -87,15 +96,27 @@
 commandParser :: Parser Command
 commandParser =
   subparser $
-  command "package" (info (Package <$> parseSnap <*> parseString "PKG")
+  command "package" (info (Package <$> parseSnap <*> parsePkg "PKG")
                       (progDesc "Show version of PKG in SNAP"))
   <>
-  command "users" (info (Users <$> parseSnap <*> parseString "PKG")
+  command "users" (info (Users <$> parseSnap <*> (parsePkg "PKG"))
                     (progDesc "Revdeps for PKG in SNAP"))
   <>
-  command "github" (info (Github <$> parseSnap <*> parseString "PKG")
+  command "github" (info (Github <$> parseSnap <*> parsePkg "PKG")
                      (progDesc "Stackage owners for PKG in SNAP"))
   <>
+  command "constraints" (info (Constraints <$> parseSnap <*> parsePkg "PKG")
+                         (progDesc "Stackage constraints for PKG in SNAP"))
+  <>
+  command "dependencies" (info (Dependencies <$> parseSnap <*> parsePkg "PKG")
+                          (progDesc "Dependencies for PKG in SNAP"))
+  <>
+  command "executables" (info (Executables <$> parseSnap <*> parsePkg "PKG")
+                          (progDesc "Executables of PKG in SNAP"))
+  <>
+  command "modules" (info (Modules <$> parseSnap <*> parsePkg "PKG")
+                          (progDesc "Modules of PKG in SNAP"))
+  <>
   command "latest" (info (Latest <$> parseProject)
                      (progDesc "Latest snap for PROJECT (nightly or lts)"))
   <>
@@ -108,7 +129,7 @@
   command "core" (info (Core <$> parseSnap)
                    (progDesc "GHC core libraries for SNAP"))
   <>
-  command "tools" (info (Tools <$> parseSnap)
+  command "tools" (info (Tools <$> parseSnap <*> optional (parsePkg "PKG"))
                     (progDesc "Tools for SNAP"))
   <>
   command "packages" (info (Packages <$> parseSnap)
@@ -126,7 +147,7 @@
 main :: IO ()
 main = do
   cmd <- customExecParser (prefs showHelpOnEmpty)
-         (info (helper <*> argsParser) $ progDesc "Stackage query tool")
+         (info (helper <*> versionOption <*> argsParser) $ progDesc "Stackage query tool")
   run cmd
   where
     run (Args cmd) =
@@ -134,15 +155,24 @@
         Config s -> stackageConfig s
         Ghc s -> buildplanGHC s
         Core s -> buildplanCore s
-        Tools s -> buildplanTools s
+        Tools s mpkg -> buildplanTools s mpkg
         Packages s -> buildplanPackages s
         Consumers opts s -> buildplanConsumers opts s
         Package s pkg -> buildplanPackage s pkg
-        Users s pkg -> buildplanUsers s pkg
+        Users s pkgs -> buildplanUsers s pkgs
         Github s pkg -> buildplanGithub s pkg
+        Constraints s pkg -> buildplanConstraints s pkg
+        Dependencies s pkg -> buildplanDependencies s pkg
+        Executables s pkg -> buildplanExecutables s pkg
+        Modules s pkg -> buildplanModules s pkg
         Latest prj -> buildplanLatest prj
         Update prj -> buildplanUpdate prj
 
+    versionOption =
+        infoOption
+            (showVersion version)
+            (long "version" <> help "Show version")
+
 topurl :: String
 topurl = "https://www.stackage.org/"
 
@@ -166,14 +196,15 @@
   unless haveProj $ cloneProject configDir project
   return projectDir
 
-findBuildPlanYaml :: Snapshot -> IO FilePath
-findBuildPlanYaml snap = do
-  projectDir <- getProjectDir $ snapProject snap
-  findSnap True projectDir snap
+findBuildPlanYaml :: Bool -> Snapshot -> IO FilePath
+findBuildPlanYaml update snap = do
+  dir <- getProjectDir $ snapProject snap
+  when update $ updateProject False dir
+  findSnap True dir snap
 
 getBuildPlan :: Snapshot -> IO BuildPlan
 getBuildPlan snap = do
-  ebp <- findBuildPlanYaml snap >>= decodeFileEither
+  ebp <- findBuildPlanYaml False snap >>= decodeFileEither
   either (error . prettyPrintParseException) return ebp
 
 snapProject :: Snapshot -> Project
@@ -189,7 +220,7 @@
     then
     if update
       then do
-      updateProject dir
+      updateProject False dir
       findSnap False dir snap
       else
       error $ "Snap " ++ show snap ++ " not found"
@@ -242,12 +273,12 @@
   putStrLn $ "Cloning " ++ url
   git_ dir "clone" [url]
 
-updateProject :: FilePath -> IO ()
-updateProject dir = do
+updateProject :: Bool -> FilePath -> IO ()
+updateProject verbose dir = do
   msg <- shortLog
-  _ <- git dir "pull" []
+  _ <- git dir "pull" ["-q"]
   msg' <- shortLog
-  when (msg /= msg') $ putStrLn $ msg ++ " -> " ++ msg'
+  when (verbose && msg /= msg') $ putStrLn $ msg ++ " -> " ++ msg'
   where
     shortLog =
       removePrefix "Checking in " . unwords . tail . words <$> git dir "log" ["--oneline", "-1"]
@@ -267,10 +298,10 @@
   let si = bpSystemInfo bp
   traverse_ (putStrLn . showPkgVer) $ (Data.Map.Strict.assocs . siCorePackages) si
 
-buildplanTools :: Snapshot -> IO ()
-buildplanTools snap = do
+buildplanTools :: Snapshot -> Maybe Pkg -> IO ()
+buildplanTools snap mpkg = do
   bp <- getBuildPlan snap
-  traverse_ (putStrLn . showPkgVer) $ bpTools bp
+  maybe (traverse_ (putStrLn . showPkgVer) $ bpTools bp) (buildplanPkgTools snap) mpkg
 
 buildplanPackages :: Snapshot -> IO ()
 buildplanPackages snap = do
@@ -288,21 +319,21 @@
       when (n >= threshold opts) $
         putStrLn $ show n ++ " " ++ unPackageName p
 
-evalPackageBuildPlan :: Snapshot -> String -> (PackagePlan -> String) -> IO ()
+evalPackageBuildPlan :: Snapshot -> Pkg -> (PackagePlan -> String) -> IO ()
 evalPackageBuildPlan snap pkg expr = do
   bp <- getBuildPlan snap
   let mpkgplan = Data.Map.Strict.lookup (PackageName pkg) $ bpPackages bp
   putStrLn $ maybe "Package not found" expr mpkgplan
 
-buildplanPackage :: Snapshot -> String -> IO ()
+buildplanPackage :: Snapshot -> Pkg -> IO ()
 buildplanPackage snap pkg =
   evalPackageBuildPlan snap pkg (showVersion . ppVersion)
 
-buildplanUsers :: Snapshot -> String -> IO ()
+buildplanUsers :: Snapshot -> Pkg -> IO ()
 buildplanUsers snap pkg =
   evalPackageBuildPlan snap pkg (unwords . Set.elems . Set.map unPackageName . ppUsers)
 
-buildplanGithub :: Snapshot -> String -> IO ()
+buildplanGithub :: Snapshot -> Pkg -> IO ()
 buildplanGithub snap pkg =
   evalPackageBuildPlan snap pkg (unwords . Set.elems . Set.map T.unpack . ppGithubPings)
 
@@ -312,9 +343,30 @@
 
 buildplanLatest :: Project -> IO ()
 buildplanLatest prj = do
-  latest <- takeBaseName <$> findBuildPlanYaml (projectToSnap prj)
-  putStrLn latest
+  latest <- findBuildPlanYaml True (projectToSnap prj)
+  putStrLn $ takeBaseName latest
 
 buildplanUpdate :: Project -> IO ()
 buildplanUpdate project =
-  getProjectDir project >>= updateProject
+  getProjectDir project >>= updateProject True
+
+buildplanConstraints :: Snapshot -> Pkg -> IO ()
+buildplanConstraints snap pkg =
+  evalPackageBuildPlan snap pkg (show . disp . pcVersionRange . ppConstraints)
+
+buildplanDependencies :: Snapshot -> Pkg -> IO ()
+buildplanDependencies snap pkg =
+  evalPackageBuildPlan snap pkg (unlines . map unPackageName . Data.Map.Strict.keys . sdPackages . ppDesc)
+
+buildplanExecutables :: Snapshot -> Pkg -> IO ()
+buildplanExecutables snap pkg =
+  evalPackageBuildPlan snap pkg (unlines . map (T.unpack . unExeName) . Set.toList. sdProvidedExes . ppDesc)
+
+buildplanPkgTools :: Snapshot -> Pkg -> IO ()
+buildplanPkgTools snap pkg =
+  evalPackageBuildPlan snap pkg (unlines . map (T.unpack . unExeName) . Data.Map.Strict.keys . sdTools . ppDesc)
+
+buildplanModules :: Snapshot -> Pkg -> IO ()
+buildplanModules snap pkg =
+  evalPackageBuildPlan snap pkg (unlines . map T.unpack . Set.toList. sdModules . ppDesc)
+
diff --git a/stackage-query.cabal b/stackage-query.cabal
--- a/stackage-query.cabal
+++ b/stackage-query.cabal
@@ -1,14 +1,14 @@
 name:                stackage-query
-version:             0.1.0
+version:             0.1.1
 synopsis:            Stackage package query
-description:         Tool to query package versions in Stackage
+description:         Tool to query package metadata in Stackage
 license:             MIT
 license-file:        LICENSE
 homepage:            https://github.com/juhp/stackage-query
 bug-reports:         https://github.com/juhp/stackage-query/issues
-author:              Jens Petersen
-maintainer:          juhpetersen@gmail.com
-copyright:           Jens Petersen
+author:              Jens Petersen <juhpetersen@gmail.com>
+maintainer:          Jens Petersen <juhpetersen@gmail.com>
+copyright:           2017 Jens Petersen <juhpetersen@gmail.com>
 category:            Distribution
 build-type:          Simple
 extra-source-files:  ChangeLog.md
