diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,7 @@
+0.6.0
+-----
+* Support cabal 2.0
+
 0.5.0
 -----
 * Add 'findNewDistDir', 'findDistDir' and 'findPackageDB' now return absolute paths
diff --git a/cabal-lenses.cabal b/cabal-lenses.cabal
--- a/cabal-lenses.cabal
+++ b/cabal-lenses.cabal
@@ -1,5 +1,5 @@
 name: cabal-lenses
-version: 0.5.0
+version: 0.6.0
 cabal-version: >=1.9.2
 build-type: Simple
 license: BSD3
@@ -36,7 +36,7 @@
         base >=3 && <5,
         lens >=4.0.1 && <4.16,
         unordered-containers >=0.2.3.3 && <0.3,
-        Cabal >=1.16.0 && <1.25,
+        Cabal >=2.0.0.2 && <2.1,
         either >=4.1.1 && <4.5,
         system-filepath >=0.4.9 && <0.5,
         system-fileio >=0.3.12 && <0.4,
diff --git a/lib/CabalLenses/CondVars.hs b/lib/CabalLenses/CondVars.hs
--- a/lib/CabalLenses/CondVars.hs
+++ b/lib/CabalLenses/CondVars.hs
@@ -13,7 +13,7 @@
 import qualified Distribution.System as S
 import Distribution.System (OS(..), Arch(..))
 import Distribution.Compiler (CompilerFlavor(..), buildCompilerFlavor)
-import Distribution.Version (Version(..), withinRange)
+import Distribution.Version (Version, withinRange)
 import qualified Data.HashMap.Strict as HM
 import Control.Lens
 
@@ -49,8 +49,8 @@
    where
       flags = HM.fromList $ map nameWithDflt (PD.genPackageFlags pkgDescrp)
 
-      nameWithDflt PD.MkFlag { PD.flagName = PD.FlagName name, PD.flagDefault = dflt } =
-         (name, dflt)
+      nameWithDflt PD.MkFlag { PD.flagName = name, PD.flagDefault = dflt } =
+         (PD.unFlagName name, dflt)
 
 
 -- | Enable the given flag in 'CondVars'.
@@ -84,8 +84,8 @@
          | otherwise
          = cflavor == compilerFlavor condVars
 
-      hasVar (PD.Flag (PD.FlagName name))
-         | Just v <- HM.lookup name (flags condVars)
+      hasVar (PD.Flag name)
+         | Just v <- HM.lookup (PD.unFlagName name) (flags condVars)
          = v
 
          | otherwise
diff --git a/lib/CabalLenses/Package.hs b/lib/CabalLenses/Package.hs
--- a/lib/CabalLenses/Package.hs
+++ b/lib/CabalLenses/Package.hs
@@ -6,7 +6,8 @@
 
 module CabalLenses.Package where
 
-import Distribution.Package (PackageName(..) , PackageIdentifier(..) , Dependency(..))
+import Distribution.Package (PackageIdentifier(..) , Dependency(..))
+import Distribution.Types.PackageName
 import Distribution.Version (VersionRange)
 import Control.Lens
 
@@ -19,9 +20,9 @@
 instance (t ~ PackageName) => Rewrapped PackageName t
 instance Wrapped PackageName where
   type Unwrapped PackageName = String
-  _Wrapped' = iso getPackageName PackageName
+  _Wrapped' = iso getPackageName mkPackageName
      where
-        getPackageName (PackageName n) = n
+        getPackageName pkg = unPackageName pkg
   {-# INLINE _Wrapped' #-}
 
 
diff --git a/lib/CabalLenses/Section.hs b/lib/CabalLenses/Section.hs
--- a/lib/CabalLenses/Section.hs
+++ b/lib/CabalLenses/Section.hs
@@ -5,6 +5,7 @@
    ) where
 
 import Distribution.PackageDescription (GenericPackageDescription(..))
+import Distribution.Types.UnqualComponentName (unUnqualComponentName)
 
 type Name = String
 
@@ -20,7 +21,7 @@
 allSections :: GenericPackageDescription -> [Section]
 allSections pkgDescr =
    concat [ maybe [] (const [Library]) (condLibrary pkgDescr)
-          , map (Executable . fst) (condExecutables pkgDescr)
-          , map (TestSuite . fst) (condTestSuites pkgDescr)
-          , map (Benchmark . fst) (condBenchmarks pkgDescr)
+          , map (Executable . unUnqualComponentName . fst) (condExecutables pkgDescr)
+          , map (TestSuite . unUnqualComponentName . fst) (condTestSuites pkgDescr)
+          , map (Benchmark . unUnqualComponentName . fst) (condBenchmarks pkgDescr)
           ]
diff --git a/lib/CabalLenses/Traversals/BuildInfo.hs b/lib/CabalLenses/Traversals/BuildInfo.hs
--- a/lib/CabalLenses/Traversals/BuildInfo.hs
+++ b/lib/CabalLenses/Traversals/BuildInfo.hs
@@ -13,13 +13,16 @@
 import Control.Lens
 import Control.Applicative ((<$>), (<*>), pure)
 import Distribution.PackageDescription (GenericPackageDescription(GenericPackageDescription), BuildInfo)
+import Distribution.Types.UnqualComponentName (unUnqualComponentName)
 
 -- | A traversal for all 'BuildInfo' of all 'Section'
 allBuildInfo :: Traversal' GenericPackageDescription BuildInfo
-allBuildInfo f (GenericPackageDescription descrp flags lib exes tests benchs) =
+allBuildInfo f (GenericPackageDescription descrp flags lib subLibs foreignLibs exes tests benchs) =
    GenericPackageDescription <$> pure descrp
                              <*> pure flags
                              <*> (_Just . traverseData . libBuildInfoL) f lib
+                             <*> pure subLibs
+                             <*> pure foreignLibs
                              <*> (traverse . _2 . traverseData . buildInfoL) f exes
                              <*> (traverse . _2 . traverseData . testBuildInfoL) f tests
                              <*> (traverse . _2 . traverseData . benchmarkBuildInfoL) f benchs
@@ -40,4 +43,4 @@
 buildInfoIf condVars (Benchmark name)  = condBenchmarksL . traverse . having name . _2 . traverseDataIf condVars . benchmarkBuildInfoL
 
 
-having name = filtered ((== name) . fst)
+having name = filtered ((== name) . unUnqualComponentName . fst)
diff --git a/lib/CabalLenses/Traversals/Dependency.hs b/lib/CabalLenses/Traversals/Dependency.hs
--- a/lib/CabalLenses/Traversals/Dependency.hs
+++ b/lib/CabalLenses/Traversals/Dependency.hs
@@ -15,14 +15,17 @@
 import Control.Applicative ((<$>), (<*>), pure)
 import Distribution.PackageDescription (GenericPackageDescription(GenericPackageDescription))
 import Distribution.Package (Dependency)
+import Distribution.Types.UnqualComponentName (unUnqualComponentName)
 
 
 -- | A traversal for all 'Dependency' of all 'Section'.
 allDependency :: Traversal' GenericPackageDescription Dependency
-allDependency f (GenericPackageDescription descrp flags lib exes tests benchs) =
+allDependency f (GenericPackageDescription descrp flags lib subLibs foreignLibs exes tests benchs) =
    GenericPackageDescription <$> pure descrp
                              <*> pure flags
                              <*> (_Just . traverseDependency) f lib
+                             <*> pure subLibs
+                             <*> pure foreignLibs
                              <*> (traverse . _2 . traverseDependency) f exes
                              <*> (traverse . _2 . traverseDependency) f tests
                              <*> (traverse . _2 . traverseDependency) f benchs
@@ -30,10 +33,12 @@
 
 -- | A traversal for all 'Dependency' of all 'Section' that match 'CondVars'.
 allDependencyIf :: CondVars -> Traversal' GenericPackageDescription Dependency
-allDependencyIf condVars f (GenericPackageDescription descrp flags lib exes tests benchs) =
+allDependencyIf condVars f (GenericPackageDescription descrp flags lib subLibs foreignLibs exes tests benchs) =
    GenericPackageDescription <$> pure descrp
                              <*> pure flags
                              <*> (_Just . traverseDependencyIf condVars) f lib
+                             <*> pure subLibs
+                             <*> pure foreignLibs
                              <*> (traverse . _2 . traverseDependencyIf condVars) f exes
                              <*> (traverse . _2 . traverseDependencyIf condVars) f tests
                              <*> (traverse . _2 . traverseDependencyIf condVars) f benchs
@@ -55,4 +60,4 @@
 dependencyIf condVars (Benchmark name)  = condBenchmarksL . traverse . having name . _2 . traverseDependencyIf condVars
 
 
-having name = filtered ((== name) . fst)
+having name = filtered ((== name) . unUnqualComponentName . fst)
diff --git a/lib/CabalLenses/Traversals/Internal.hs b/lib/CabalLenses/Traversals/Internal.hs
--- a/lib/CabalLenses/Traversals/Internal.hs
+++ b/lib/CabalLenses/Traversals/Internal.hs
@@ -9,10 +9,11 @@
 
 import CabalLenses.CondVars (CondVars)
 import qualified CabalLenses.CondVars as CV
-import Distribution.PackageDescription (CondTree(..), ConfVar)
+import Distribution.Types.CondTree (CondTree(..), CondBranch(..))
+import Distribution.PackageDescription (ConfVar)
 import Distribution.Package (Dependency(..))
-import Data.Traversable (traverse)
-import Control.Applicative (pure, (<$>), (<*>))
+import Data.Traversable
+import Control.Applicative
 import Control.Lens (Traversal')
 
 type CondTree' a = CondTree ConfVar [Dependency] a
@@ -23,10 +24,10 @@
 traverseDataIf condVars f (CondNode dat constr comps) =
    CondNode <$> f dat
             <*> pure constr
-            <*> (traverse . traverseCompIf condVars) f comps  
+            <*> (traverse . traverseCompIf condVars) f comps
    where
-      traverseCompIf condVars f (cond, ifComp, elseComp) =
-         (,,) <$> pure cond <*> ifComp' <*> elseComp'
+      traverseCompIf condVars f (CondBranch cond ifComp elseComp) =
+         CondBranch <$> pure cond <*> ifComp' <*> elseComp'
          where
             ifComp' | condMatches = traverseDataIf condVars f ifComp
                     | otherwise   = pure ifComp
@@ -44,8 +45,10 @@
             <*> pure constr
             <*> (traverse . traverseComp) f comps
    where
-      traverseComp f (cond, ifComp, elseComp) =
-         (,,) <$> pure cond <*> traverseData f ifComp <*> (traverse . traverseData) f elseComp
+      traverseComp f (CondBranch cond ifComp elseComp) =
+         CondBranch <$> pure cond
+                    <*> traverseData f ifComp
+                    <*> (traverse . traverseData) f elseComp
 
 
 -- | A traversal for all 'condTreeConstraints' of 'CondTree' that match 'CondVars'.
@@ -53,10 +56,10 @@
 traverseDependencyIf condVars f (CondNode dat constr comps) =
    CondNode <$> pure dat
             <*> traverse f constr
-            <*> (traverse . traverseCompIf condVars) f comps  
+            <*> (traverse . traverseCompIf condVars) f comps
    where
-      traverseCompIf condVars f (cond, ifComp, elseComp) =
-         (,,) <$> pure cond <*> ifComp' <*> elseComp'
+      traverseCompIf condVars f (CondBranch cond ifComp elseComp) =
+         CondBranch <$> pure cond <*> ifComp' <*> elseComp'
          where
             ifComp' | condMatches = traverseDependencyIf condVars f ifComp
                     | otherwise   = pure ifComp
@@ -74,5 +77,7 @@
             <*> traverse f constr
             <*> (traverse . traverseComp) f comps
    where
-      traverseComp f (cond, ifComp, elseComp) =
-         (,,) <$> pure cond <*> traverseDependency f ifComp <*> (traverse . traverseDependency) f elseComp
+      traverseComp f (CondBranch cond ifComp elseComp) =
+         CondBranch <$> pure cond
+                    <*> traverseDependency f ifComp
+                    <*> (traverse . traverseDependency) f elseComp
diff --git a/lib/CabalLenses/Utils.hs b/lib/CabalLenses/Utils.hs
--- a/lib/CabalLenses/Utils.hs
+++ b/lib/CabalLenses/Utils.hs
@@ -1,4 +1,4 @@
-{-# Language CPP #-}
+{-# Language CPP, PatternGuards #-}
 
 module CabalLenses.Utils
    ( findCabalFile
diff --git a/lib/CabalLenses/Version.hs b/lib/CabalLenses/Version.hs
--- a/lib/CabalLenses/Version.hs
+++ b/lib/CabalLenses/Version.hs
@@ -12,9 +12,8 @@
 import Control.Applicative ((<$>))
 
 
-makeLensesFor [ ("versionBranch", "versionBranchL")
-              , ("versionTags"  , "versionTagsL")
-              ] ''Version
+versionBranchL :: Iso' Version [Int]
+versionBranchL = iso versionNumbers mkVersion
 
 
 intervals :: Iso' VersionRange [VersionInterval]
@@ -47,4 +46,4 @@
 
 
 noLowerBound :: LowerBound
-noLowerBound = LowerBound (Version [0] []) InclusiveBound
+noLowerBound = LowerBound (mkVersion [0]) InclusiveBound
