diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,11 +1,10 @@
 {-# OPTIONS_GHC -Wall -Wincomplete-uni-patterns -Wincomplete-record-updates -Wcompat #-}
 
-import           Data.Bool                                    (bool)
+import           Data.Bool                       (bool)
 import           Distribution.CommandLine
 import           Distribution.PackageDescription
 import           Distribution.Simple
 import           Distribution.Simple.Setup
-import           Distribution.Types.GenericPackageDescription
 
 installActions :: IO ()
 installActions = sequence_
diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -4,7 +4,6 @@
             ) where
 
 import           Control.Composition
-import           Control.Lens               hiding (List, argument)
 import           Data.Bool                  (bool)
 import           Data.Maybe                 (fromMaybe)
 import           Data.Semigroup             (Semigroup (..))
@@ -13,6 +12,7 @@
 import           Development.Shake.ATS
 import           Development.Shake.FilePath
 import           Language.ATS.Package
+import           Lens.Micro
 import           Options.Applicative
 import           System.Directory
 import           System.IO.Temp             (withSystemTempDirectory)
@@ -53,8 +53,8 @@
              | Check { _filePath :: String, _details :: Bool }
              | List
 
-command' :: Parser Command
-command' = hsubparser
+userCmd :: Parser Command
+userCmd = hsubparser
     (command "install" (info install (progDesc "Install all binaries to $HOME/.local/bin"))
     <> command "clean" (info (pure Clean) (progDesc "Clean current project directory"))
     <> command "remote" (info fetch (progDesc "Fetch and install a binary package"))
@@ -66,6 +66,14 @@
     <> command "run" (info run' (progDesc "Run generated binaries"))
     <> command "check" (info check' (progDesc "Audit a package set to ensure it is well-typed."))
     <> command "list" (info (pure List) (progDesc "List available packages"))
+    )
+
+command' :: Parser Command
+command' = userCmd <|> internalCmd
+
+internalCmd :: Parser Command
+internalCmd = subparser
+    (internal
     <> command "pack" (info pack (progDesc "Make a tarball for distributing the compiler"))
     )
 
diff --git a/ats-pkg.cabal b/ats-pkg.cabal
--- a/ats-pkg.cabal
+++ b/ats-pkg.cabal
@@ -1,6 +1,6 @@
 cabal-version: 1.18
 name: ats-pkg
-version: 2.7.1.1
+version: 2.7.1.2
 license: BSD3
 license-file: LICENSE
 copyright: Copyright: (c) 2018 Vanessa McHale
@@ -79,12 +79,13 @@
         text -any,
         directory -any,
         process -any,
-        hashable,
+        hashable -any,
         containers -any,
         parallel-io -any,
         unix -any,
-        lens -any,
-        mtl,
+        microlens -any,
+        microlens-th -any,
+        mtl -any,
         dhall >=1.10.0,
         ansi-wl-pprint -any,
         shake-ats >=1.3.0.0,
@@ -113,7 +114,7 @@
             base -any,
             ats-pkg -any,
             optparse-applicative -any,
-            lens -any,
+            microlens -any,
             shake-ats -any,
             temporary -any,
             directory -any,
diff --git a/man/atspkg.1 b/man/atspkg.1
--- a/man/atspkg.1
+++ b/man/atspkg.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pandoc 2.1.2
+.\" Automatically generated by Pandoc 2.1.3
 .\"
 .TH "atspkg (1)" "" "" "" ""
 .hy
@@ -44,6 +44,9 @@
 \f[B]check\f[] \- Check a package set to make sure it is well\-typed.
 .PP
 \f[B]list\f[] \- List all available packages in current package set.
+.PP
+\f[B]pack\f[] \- Create a tarball suitable for packaging the compiler.
+Takes as an argument a directory containing the unpacked compiler.
 .SH OPTIONS
 .TP
 .B \f[B]\-h\f[] \f[B]\-\-help\f[]
diff --git a/src/Language/ATS/Package/Build/C.hs b/src/Language/ATS/Package/Build/C.hs
--- a/src/Language/ATS/Package/Build/C.hs
+++ b/src/Language/ATS/Package/Build/C.hs
@@ -27,14 +27,14 @@
 
     -- Find configure script and make it executable
     subdirs <- allSubdirs p
-    configurePath <- fromMaybe (p <> "/configure") <$> findFile subdirs "configure"
-    setFileMode configurePath ownerModes
+    configurePath <- findFile (p:subdirs) "configure"
+    fold (setFileMode <$> configurePath <*> pure ownerModes)
 
     -- Set environment variables for configure script
     h <- pkgHome cc'
     let procEnv = Just [("CC", ccToString cc'), ("CFLAGS" :: String, "-I" <> h <> "include"), ("PATH", "/usr/bin:/bin")]
 
-    biaxe [configure h configurePath procEnv, make, install] lib' p
+    biaxe [fold (configure h <$> configurePath <*> pure procEnv), make, install] lib' p
 
 configure :: FilePath -> FilePath -> Maybe [(String, String)] -> String -> FilePath -> IO ()
 configure prefixPath configurePath procEnv lib' p =
@@ -44,7 +44,7 @@
 make :: String -> FilePath -> IO ()
 make lib' p =
     putStrLn ("building " ++ lib' ++ "...") >>
-    silentCreateProcess ((proc "make" []) { cwd = Just p })
+    silentCreateProcess ((proc "make" ["-j4"]) { cwd = Just p })
 
 install :: String -> FilePath -> IO ()
 install lib' p =
diff --git a/src/Quaalude.hs b/src/Quaalude.hs
--- a/src/Quaalude.hs
+++ b/src/Quaalude.hs
@@ -1,5 +1,3 @@
-{-# LANGUAGE CPP #-}
-
 module Quaalude ( hex
                 , bool
                 , intersperse
@@ -9,6 +7,7 @@
                 , unless
                 , when
                 , join
+                , fold
                 , zipWithM_
                 , zipWithM
                 , filterM
@@ -113,24 +112,25 @@
                 , (%~)
                 ) where
 
-#if __GLASGOW_HASKELL__ < 804
-import           Data.Semigroup
-#endif
 import           Control.Arrow                hiding ((<+>))
 import           Control.Composition
-import           Control.Lens                 hiding (both)
 import           Control.Monad
 import           Control.Monad.IO.Class
 import           Data.Binary
 import           Data.Bool                    (bool)
 import           Data.ByteString.Lazy         (ByteString)
+import           Data.Foldable
 import           Data.List
 import           Data.Maybe                   (fromMaybe)
+import           Data.Semigroup
 import           Data.Text.Lazy               (pack, unpack)
 import           Data.Version                 (showVersion)
 import           Development.Shake            hiding (getEnv)
 import           Development.Shake.FilePath
 import           Dhall                        hiding (bool)
+import           Lens.Micro                   hiding (both)
+import           Lens.Micro.Extras
+import           Lens.Micro.TH
 import           Network.HTTP.Client
 import           Network.HTTP.Client.TLS      (tlsManagerSettings)
 import           Numeric                      (showHex)
