diff --git a/ats-pkg.cabal b/ats-pkg.cabal
--- a/ats-pkg.cabal
+++ b/ats-pkg.cabal
@@ -1,5 +1,5 @@
 name:                ats-pkg
-version:             0.2.0.0
+version:             0.2.0.1
 synopsis:            Package manager for ATS
 description:         A collection of scripts to make building ATS projects easy.
 homepage:            https://github.com/vmchale/ats-pkg#readme
@@ -28,6 +28,7 @@
                      , Language.ATS.Package.Exec
                      , Language.ATS.Package.Contents
                      , Language.ATS.Package.Type
+                     , Language.ATS.Package.Dependency
   build-depends:       base >= 4.7 && < 5
                      , http-client
                      , filemanip
@@ -40,10 +41,11 @@
                      , directory
                      , optparse-applicative
                      , process
+                     , parallel-io
                      , unix
                      , dhall
                      , mtl
-                     , shake-ext >= 0.4.1.0
+                     , shake-ext >= 0.4.2.0
                      , composition-prelude >= 1.1.0.1
   default-language:    Haskell2010
   if flag(development)
diff --git a/src/Language/ATS/Package/Dependency.hs b/src/Language/ATS/Package/Dependency.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/ATS/Package/Dependency.hs
@@ -0,0 +1,58 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Language.ATS.Package.Dependency ( fetchDeps
+                                       , fetchFastArithmeticDeps
+                                       ) where
+
+import qualified Codec.Archive.Tar                    as Tar
+import           Codec.Compression.GZip               (decompress)
+import           Control.Concurrent.ParallelIO.Global
+import           Control.Monad
+import           Network.HTTP.Client                  hiding (decompress)
+import           Network.HTTP.Client.TLS              (tlsManagerSettings)
+import           System.Directory
+
+data Dependency = Dependency String FilePath String
+
+atsPrelude :: Dependency
+atsPrelude = Dependency "ats2-postiats-0.3.8-prelude" ".atspkg/prelude" "https://downloads.sourceforge.net/project/ats2-lang/ats2-lang/ats2-postiats-0.3.8/ATS2-Postiats-include-0.3.8.tgz"
+
+atsIntinf :: Dependency
+atsIntinf = Dependency "atscntrb-hs-intinf-1.0.6" ".atspkg/contrib/atscntrb-hx-intinf" "https://registry.npmjs.org/atscntrb-hx-intinf/-/atscntrb-hx-intinf-1.0.6.tgz"
+
+atsGMP :: Dependency
+atsGMP = Dependency "atscntrb-libgmp-1.0.4" ".atspkg/contrib/atscntrb-libgmp" "https://registry.npmjs.org/atscntrb-libgmp/-/atscntrb-libgmp-1.0.4.tgz"
+
+fetchFastArithmeticDeps :: IO ()
+fetchFastArithmeticDeps = fetchDeps [atsPrelude, atsIntinf, atsGMP]
+
+fetchDeps :: [Dependency] -> IO ()
+fetchDeps deps = do
+
+    putStrLn "Setting up ATS dependencies..."
+
+    let libs = fmap buildHelper deps
+
+    parallel_ libs >> stopGlobalPool
+
+buildHelper :: Dependency -> IO ()
+buildHelper (Dependency libName dirName url) = do
+
+    needsSetup <- not <$> doesDirectoryExist dirName
+
+    when needsSetup $ do
+
+        putStrLn ("Fetching library " ++ libName ++ "...")
+        manager <- newManager tlsManagerSettings
+        initialRequest <- parseRequest url
+        response <- responseBody <$> httpLbs (initialRequest { method = "GET" }) manager
+
+        putStrLn ("Unpacking library " ++ libName ++ "...")
+        Tar.unpack dirName . Tar.read . decompress $ response
+
+        putStrLn ("Setting up library " ++ libName ++ "...")
+        needsMove <- doesDirectoryExist (dirName ++ "/package")
+        when needsMove $ do
+            renameDirectory (dirName ++ "/package") "tempdir"
+            removeDirectoryRecursive dirName
+            renameDirectory "tempdir" dirName
diff --git a/src/Language/ATS/Package/Type.hs b/src/Language/ATS/Package/Type.hs
--- a/src/Language/ATS/Package/Type.hs
+++ b/src/Language/ATS/Package/Type.hs
@@ -88,9 +88,9 @@
         (Just m) -> want (asTarget m : bins)
         Nothing  -> want bins
 
-    where g (Bin s t ls) = atsBin (TL.unpack <$> ls) (TL.unpack s) (TL.unpack t)
+    where g (Bin s t ls gc') = atsBin gc' (TL.unpack <$> ls) (TL.unpack s) (TL.unpack t)
 
-data Bin = Bin { src :: Text, target :: Text, libs :: [Text] }
+data Bin = Bin { src :: Text, target :: Text, libs :: [Text], gc :: Bool }
     deriving (Show, Eq, Generic, Interpret)
 
 data Pkg = Pkg { bin :: [Bin], test :: [Bin], man :: Maybe Text }
