diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -15,9 +15,9 @@
     case args' of
         [] -> error "Usage: stack-run-auto <file>"
         ("--help":_) -> hPutStrLn stderr usage
-        (fname:_) -> run (Options fname extras)
+        (fname:flags) -> run (Options fname extras flags)
   where
-    usage = unlines [ "Usage: stack-run-auto [--extra <pkg>...] <file>"
+    usage = unlines [ "Usage: stack-run-auto [--extra <pkg>...] <file> [<stack-flag>...]"
                     , ""
                     , "    --extra <pkg>   Adds an extra package that couldn't be resolved"
                     , ""
diff --git a/src/StackRunAuto.hs b/src/StackRunAuto.hs
--- a/src/StackRunAuto.hs
+++ b/src/StackRunAuto.hs
@@ -15,12 +15,15 @@
 import           Development.FileModules
 import           Network.Wreq                    (defaults, getWith, param,
                                                   responseBody)
+import           System.Directory
 import           System.Exit
+import           System.FilePath
 import           System.IO                       (hPutStrLn, stderr)
 import           System.Process
 
 data Options = Options { optsFileName :: FilePath
                        , optsExtras   :: [String]
+                       , optsFlags    :: [String]
                        }
 
 run :: Options -> IO ()
@@ -31,7 +34,11 @@
     let argList = map ("--package " ++)
                   (filter isValidPackage
                    (uniq (packages ++ concat allPackages ++ optsExtras)))
-        cmd = "stack runghc " ++ optsFileName ++ " " ++ join " " argList
+        cmd = unwords [ "stack runghc "
+                      , unwords optsFlags
+                      , optsFileName
+                      , unwords argList
+                      ]
     putStrLn cmd
     ph <- runCommand cmd
     waitForProcess ph >>= exitWith
@@ -56,15 +63,34 @@
 extractDependenciesVerbose :: String -> IO [String]
 extractDependenciesVerbose pkg = timed ("---> Found dependencies for " ++ pkg) $ do
     putStrLn $ "Finding dependencies for " ++ pkg ++ "..."
-    extractDependencies pkg
+    extractDependenciesCached pkg
 
+extractDependenciesCached :: String -> IO [String]
+extractDependenciesCached = cached "extract-dependencies" extractDependencies
+
 modulePackageVerbose :: String -> IO (Maybe String)
 modulePackageVerbose "" = do
     putStrLn "Skipping parse error (empty string)..."
     return Nothing
 modulePackageVerbose m = timed ("---> Found package for " ++ m) $ do
     putStrLn $ "Finding package for " ++ m ++ "..."
-    modulePackage m
+    modulePackageCached m
+
+cached name fn arg = do
+    home <- getHomeDirectory
+    let cacheDir = home </> ".stack-run-auto" </> "module-packages"
+        cachePth = cacheDir </> arg
+    createDirectoryIfMissing True cacheDir
+    exists <- doesFileExist cachePth
+    if exists
+        then read <$> readFile cachePth
+        else do
+            r <- fn arg
+            writeFile cachePth (show r)
+            return r
+
+modulePackageCached :: String -> IO (Maybe String)
+modulePackageCached = cached "module-package" modulePackage
 
 modulePackage :: String -> IO (Maybe String)
 modulePackage m = do
diff --git a/stack-run-auto.cabal b/stack-run-auto.cabal
--- a/stack-run-auto.cabal
+++ b/stack-run-auto.cabal
@@ -1,5 +1,5 @@
 name:                stack-run-auto
-version:             0.1.1.2
+version:             0.1.1.3
 synopsis:            Initial project template from stack
 description:         Please see README.md
 homepage:            http://github.com/yamadapc/stack-run-auto#readme
@@ -16,6 +16,8 @@
   hs-source-dirs:      src
   exposed-modules:     StackRunAuto
   build-depends:       base >= 4.7 && < 5
+                     , filepath
+                     , directory
                      , time
                      , process
                      , text
@@ -34,6 +36,8 @@
   main-is:             ModulePackage.hs
   ghc-options:         -threaded -rtsopts -with-rtsopts=-N
   build-depends:       base
+                     , filepath
+                     , directory
                      , time
                      , process
                      , text
@@ -53,6 +57,8 @@
   main-is:             Main.hs
   ghc-options:         -threaded -rtsopts -with-rtsopts=-N
   build-depends:       base
+                     , filepath
+                     , directory
                      , time
                      , process
                      , text
@@ -72,6 +78,8 @@
   hs-source-dirs:      test
   main-is:             Spec.hs
   build-depends:       base
+                     , filepath
+                     , directory
                      , time
                      , process
                      , text
