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:             1.4.0.6
+version:             2.0.0.2
 synopsis:            Package manager for ATS
 description:         A collection of scripts to make building ATS projects easy.
 homepage:            https://github.com/vmchale/ats-pkg#readme
@@ -50,7 +50,7 @@
                      , unix
                      , lens
                      , dhall
-                     , shake-ats
+                     , shake-ats >= 0.3.0.3
                      , shake-ext >= 1.4.0.2
                      , composition-prelude >= 1.1.0.2
                      , optparse-applicative
diff --git a/src/Language/ATS/Package/Build.hs b/src/Language/ATS/Package/Build.hs
--- a/src/Language/ATS/Package/Build.hs
+++ b/src/Language/ATS/Package/Build.hs
@@ -21,6 +21,7 @@
 import           Language.ATS.Package.Type
 import           System.Directory                     (getCurrentDirectory)
 
+-- TODO clean generated ATS
 mkClean :: Rules ()
 mkClean =
     "clean" ~> do
@@ -87,11 +88,14 @@
     mkInstall >>
     (pkgToAction rs =<< getConfig)
 
+asTuple :: TargetPair -> (Text, Text)
+asTuple (TargetPair s t) = (s, t)
+
 -- TODO infer dependencies on gc/atomic gc based on boolean flag.
 pkgToAction :: [String] -> Pkg -> Rules ()
 pkgToAction rs (Pkg bs ts mt v v' ds cds cc cf as cdir) = do
     unless (rs == ["clean"]) $
-        let cdps = if any gc bs then libcAtomicOps : libcGC : cds else cds in
+        let cdps = if any gc bs then libcAtomicOps : libcGC (Version [7,6,4]) : cds else cds in
         liftIO $ fetchDeps False ds cdps >> stopGlobalPool
     action (need ["atspkg.dhall"])
     mapM_ g (bs ++ ts)
@@ -103,7 +107,7 @@
             (Just m) -> want (bool bins (manTarget m : bins) pa)
             Nothing  -> want bins
 
-    where g (Bin s t ls gc') = atsBin (TL.unpack cc) (TL.unpack <$> cf) v v' gc' (TL.unpack <$> ls) (TL.unpack s) (TL.unpack t)
+    where g (Bin s t ls hs' atg gc') = atsBin (TL.unpack cc) (TL.unpack <$> cf) v v' gc' (TL.unpack <$> ls) (TL.unpack s) (TL.unpack <$> hs') (both TL.unpack . asTuple <$> atg) (TL.unpack t)
           cDeps = unless (null as) $ do
             let cedar = TL.unpack cdir
                 atsSourceDirs = nub (takeDirectory . TL.unpack <$> as)
diff --git a/src/Language/ATS/Package/Dependency.hs b/src/Language/ATS/Package/Dependency.hs
--- a/src/Language/ATS/Package/Dependency.hs
+++ b/src/Language/ATS/Package/Dependency.hs
@@ -31,8 +31,9 @@
 libcAtomicOps :: Dependency
 libcAtomicOps = Dependency "atomic-ops" "atomic-ops-7.6.2" "https://github.com/ivmai/libatomic_ops/releases/download/v7.6.2/libatomic_ops-7.6.2.tar.gz" (Version [7,6,2])
 
-libcGC :: Dependency
-libcGC = Dependency "gc" "gc-7.4.10" "https://github.com/ivmai/bdwgc/releases/download/v7.4.10/gc-7.4.10.tar.gz" (Version [7,4,10])
+libcGC :: Version -> Dependency
+libcGC v = Dependency "gc" ("gc-" <> g v) ("https://github.com/ivmai/bdwgc/releases/download/v" <> g v <> "/gc-" <> g v <> ".tar.gz") v
+    where g = TL.pack . show
 
 fetchDeps :: Bool -- ^ Set to 'False' if unsure.
           -> [Dependency] -- ^ ATS dependencies
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
@@ -15,6 +15,7 @@
                                  , Bin (..)
                                  , Version (..)
                                  , Constraint (..)
+                                 , TargetPair (..)
                                  -- * Lenses
                                  , dirLens
                                  ) where
@@ -44,9 +45,15 @@
 
 makeLensesFor [("dir", "dirLens")] ''Dependency
 
+data TargetPair = TargetPair { hs  :: Text
+                             , ats :: Text
+                             } deriving (Eq, Show, Generic, Interpret)
+
 data Bin = Bin { src    :: Text -- ^ Source file (should end with @.dats@)
                , target :: Text -- ^ Binary to be built
                , libs   :: [Text] -- ^ Libraries to link against (e.g. @[ "pthread" ]@)
+               , hsDeps :: [Text] -- ^ Haskell source files to link against final generated ATS
+               , hs2ats :: [TargetPair] -- ^ List of sources and targets for @hs2ats@
                , gc     :: Bool -- ^ Whether to use the garbage collector
                }
          deriving (Show, Eq, Generic, Interpret)
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -3,11 +3,12 @@
 packages:
   - '.'
 extra-deps:
-  - shake-ext-1.4.0.3
-  - shake-ats-0.2.0.4
+  - shake-ext-1.4.0.8
+  - shake-ats-0.3.0.3
   - composition-prelude-1.1.0.2
-  - language-ats-0.1.1.5
+  - language-ats-0.1.1.8
   - cli-setup-0.1.0.3
+  - hs2ats-0.1.0.1
 flags:
   ats-pkg:
     development: false
