diff --git a/bench/Bench.hs b/bench/Bench.hs
--- a/bench/Bench.hs
+++ b/bench/Bench.hs
@@ -6,21 +6,24 @@
 import qualified Data.Map        as M
 import qualified Data.Set        as S
 
-microlens :: Dependency
-microlens = Dependency "microlens" mempty mempty
-
 free :: Dependency
-free = Dependency "free" mempty mempty
+free = Dependency "free" mempty mempty defV
 
 comonad :: Dependency
-comonad = Dependency "comonad" mempty mempty
-
-bifunctors :: Dependency
-bifunctors = Dependency "bifunctors" mempty ["comonad"]
+comonad = Dependency "comonad" mempty mempty defV
 
 lens :: Dependency
-lens = Dependency "lens" mempty ["free", "comonad"]
+lens = Dependency "lens" mempty ["free", "comonad"] defV
 
+defV :: Version
+defV = Version [0,1,0]
+
+microlens :: Dependency
+microlens = Dependency "microlens" mempty mempty defV
+
+bifunctors :: Dependency
+bifunctors = Dependency "bifunctors" mempty ["comonad"] defV
+
 deps :: [Dependency]
 deps = [free, lens, comonad]
 
@@ -37,5 +40,5 @@
                       , bench "6" $ nf buildSequence (bifunctors : microlens : deps)
                       ]
                 , bgroup "resolveDependencies"
-                      [ bench "3" $ nf (resolveDependencies set) (buildSequence [lens]) ]
+                      [ bench "3" $ nf (resolveDependencies set) [lens] ]
                 ]
diff --git a/dependency.cabal b/dependency.cabal
--- a/dependency.cabal
+++ b/dependency.cabal
@@ -1,5 +1,5 @@
 name:                dependency
-version:             0.1.0.2
+version:             0.1.0.3
 synopsis:            Dependency resolution for package management
 description:         A library for resolving dependencies; uses a topological sort to construct a build plan and then allows choice between all compatible plans.
 license:             BSD3
diff --git a/src/Data/Dependency.hs b/src/Data/Dependency.hs
--- a/src/Data/Dependency.hs
+++ b/src/Data/Dependency.hs
@@ -18,18 +18,18 @@
 import qualified Data.Set             as S
 
 isPresent :: PackageSet Version -> Dependency -> Bool
-isPresent (PackageSet ps) (Dependency ln _ _) = g (M.lookup ln ps)
+isPresent (PackageSet ps) (Dependency ln _ _ _) = g (M.lookup ln ps)
     where g (Just x) = not (S.null x)
           g Nothing  = False
 
 latest :: (Ord a) => PackageSet a -> Dependency -> Maybe (String, a)
-latest (PackageSet ps) (Dependency ln _ _) = do
+latest (PackageSet ps) (Dependency ln _ _ _) = do
     s <- M.lookup ln ps
     (,) ln <$> S.lookupMax s
 
 buildSequence :: [Dependency] -> [[Dependency]]
 buildSequence = reverse . groupBy independent . sortDeps
-    where independent (Dependency ln _ ls) (Dependency ln' _ ls') = ln' `notElem` ls && ln `notElem` ls'
+    where independent (Dependency ln _ ls _) (Dependency ln' _ ls' _) = ln' `notElem` ls && ln `notElem` ls'
 
 saturateDeps :: PackageSet Dependency -> Dependency -> Maybe [Dependency]
 saturateDeps (PackageSet ps) dep = do
@@ -50,8 +50,8 @@
 -- 5. Specify an error if a package is not present.
 --
 -- This doesn't do any package resolution beyond versioning.
-resolveDependencies :: PackageSet Dependency -> [[Dependency]] -> Maybe [[Dependency]]
+resolveDependencies :: PackageSet Dependency -> [Dependency] -> Maybe [[Dependency]]
 resolveDependencies ps = select . getLatest <=< fmap buildSequence . saturated
     where select = fmap (fmap (fmap snd))
-          saturated dep = join . join <$> traverse (traverse (saturateDeps ps)) dep
-          getLatest = sequence . fmap (traverse (latest ps))
+          saturated dep = join <$> traverse (saturateDeps ps) dep
+          getLatest = traverse (traverse (latest ps))
diff --git a/src/Data/Dependency/Type.hs b/src/Data/Dependency/Type.hs
--- a/src/Data/Dependency/Type.hs
+++ b/src/Data/Dependency/Type.hs
@@ -93,6 +93,7 @@
 data Dependency = Dependency { _libName         :: String
                              , _libConstraint   :: Constraint Version
                              , _libDependencies :: [String]
+                             , _libVersion      :: Version
                              }
                              deriving (Show, Eq, Ord, Generic, NFData)
 
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -5,14 +5,17 @@
 import           Test.Hspec
 
 free :: Dependency
-free = Dependency "free" mempty mempty
+free = Dependency "free" mempty mempty defV
 
 comonad :: Dependency
-comonad = Dependency "comonad" mempty mempty
+comonad = Dependency "comonad" mempty mempty defV
 
 lens :: Dependency
-lens = Dependency "lens" mempty ["free", "comonad"]
+lens = Dependency "lens" mempty ["free", "comonad"] defV
 
+defV :: Version
+defV = Version [0,1,0]
+
 deps :: [Dependency]
 deps = [free, lens, comonad]
 
@@ -29,4 +32,4 @@
             buildSequence deps `shouldBe` [[free, comonad], [lens]]
     describe "resolveDependencies" $
         it "correctly resolves dependencies in a package set" $
-            resolveDependencies set (buildSequence [lens]) `shouldBe` Just [[free, comonad], [lens]]
+            resolveDependencies set [lens] `shouldBe` Just [[free, comonad], [lens]]
