diff --git a/Distribution/Cab/GenPaths.hs b/Distribution/Cab/GenPaths.hs
--- a/Distribution/Cab/GenPaths.hs
+++ b/Distribution/Cab/GenPaths.hs
@@ -6,9 +6,9 @@
 import Control.Exception
 import Control.Monad
 import Data.List (isSuffixOf)
-import Distribution.Package
+import Distribution.Cab.Utils (readGenericPackageDescription, unPackageName)
+import Distribution.Package (pkgName, pkgVersion)
 import Distribution.PackageDescription
-import Distribution.PackageDescription.Parse (readPackageDescription)
 import Distribution.Verbosity (silent)
 import Distribution.Version
 import System.Directory
@@ -31,9 +31,9 @@
 
 getNameVersion :: FilePath -> IO (String,Version)
 getNameVersion file = do
-    desc <- readPackageDescription silent file
+    desc <- readGenericPackageDescription silent file
     let pkg = package . packageDescription $ desc
-        PackageName nm = pkgName pkg
+        nm = unPackageName $ pkgName pkg
         name = map (trans '-' '_') nm
         version = pkgVersion pkg
     return (name, version)
diff --git a/Distribution/Cab/PkgDB.hs b/Distribution/Cab/PkgDB.hs
--- a/Distribution/Cab/PkgDB.hs
+++ b/Distribution/Cab/PkgDB.hs
@@ -21,13 +21,13 @@
   , verOfPkgInfo
   ) where
 
-import Distribution.Cab.Utils (fromDotted, installedUnitId)
+import Distribution.Cab.Utils
+    (fromDotted, installedUnitId, mkPackageName, unPackageName)
 import Distribution.Cab.Version
 import Distribution.Cab.VerDB (PkgName)
-import Distribution.Version (Version(..))
 import Distribution.InstalledPackageInfo
     (InstalledPackageInfo, sourcePackageId)
-import Distribution.Package (PackageName(..), PackageIdentifier(..))
+import Distribution.Package (PackageIdentifier(..))
 import Distribution.Simple.Compiler (PackageDB(..))
 import Distribution.Simple.GHC (configure, getInstalledPackages, getPackageDBContents)
 import Distribution.Simple.PackageIndex
@@ -93,7 +93,7 @@
 -- > pkgdb <- getGlobalPkgDB
 -- > lookupByName "base" pkgdb
 lookupByName :: PkgName -> PkgDB -> [PkgInfo]
-lookupByName name db = concatMap snd $ lookupPackageName db (PackageName name)
+lookupByName name db = concatMap snd $ lookupPackageName db (mkPackageName name)
 
 -- |
 --
@@ -103,11 +103,8 @@
 lookupByVersion name ver db = lookupSourcePackageId db src
   where
     src = PackageIdentifier {
-        pkgName = PackageName name
-      , pkgVersion = Version {
-          versionBranch = fromDotted ver
-        , versionTags = []
-        }
+        pkgName = mkPackageName name
+      , pkgVersion = toVersion $ fromDotted ver
       }
 
 ----------------------------------------------------------------
@@ -118,9 +115,7 @@
 ----------------------------------------------------------------
 
 nameOfPkgInfo :: PkgInfo -> PkgName
-nameOfPkgInfo = toString . pkgName . sourcePackageId
-  where
-    toString (PackageName x) = x
+nameOfPkgInfo = unPackageName . pkgName . sourcePackageId
 
 fullNameOfPkgInfo :: PkgInfo -> String
 fullNameOfPkgInfo pkgi = nameOfPkgInfo pkgi ++ " " ++ verToString (verOfPkgInfo pkgi)
diff --git a/Distribution/Cab/Utils.hs b/Distribution/Cab/Utils.hs
--- a/Distribution/Cab/Utils.hs
+++ b/Distribution/Cab/Utils.hs
@@ -4,10 +4,15 @@
 import Data.List
 
 import Distribution.InstalledPackageInfo (InstalledPackageInfo)
+import Distribution.Package (PackageName)
+import Distribution.PackageDescription (GenericPackageDescription)
+import Distribution.Simple.PackageIndex (PackageIndex)
+import Distribution.Verbosity (Verbosity)
+
 #if MIN_VERSION_Cabal(1,21,0) && !(MIN_VERSION_Cabal(1,23,0))
 import Distribution.Package (PackageInstalled)
 #endif
-import Distribution.Simple.PackageIndex (PackageIndex)
+
 #if MIN_VERSION_Cabal(1,23,0)
 import qualified Distribution.InstalledPackageInfo as Cabal
     (installedUnitId)
@@ -22,6 +27,17 @@
     (lookupInstalledPackageId)
 #endif
 
+#if MIN_VERSION_Cabal(2,0,0)
+import qualified Distribution.Package as Cabal
+    (mkPackageName, unPackageName)
+import qualified Distribution.PackageDescription.Parse as Cabal
+    (readGenericPackageDescription)
+#else
+import qualified Distribution.Package as Cabal (PackageName(..))
+import qualified Distribution.PackageDescription.Parse as Cabal
+    (readPackageDescription)
+#endif
+
 -- |
 -- >>> fromDotted "1.2.3"
 -- [1,2,3]
@@ -37,6 +53,8 @@
 toDotted :: [Int] -> String
 toDotted = intercalate "." . map show
 
+-- UnitIds
+
 #if MIN_VERSION_Cabal(1,23,0)
 type UnitId = Cabal.UnitId
 #else
@@ -59,4 +77,29 @@
 #else
 lookupUnitId :: PackageIndex -> UnitId -> Maybe InstalledPackageInfo
 lookupUnitId = Cabal.lookupInstalledPackageId
+#endif
+
+-- PackageNames
+
+mkPackageName :: String -> PackageName
+#if MIN_VERSION_Cabal(2,0,0)
+mkPackageName = Cabal.mkPackageName
+#else
+mkPackageName = Cabal.PackageName
+#endif
+
+unPackageName :: PackageName -> String
+#if MIN_VERSION_Cabal(2,0,0)
+unPackageName = Cabal.unPackageName
+#else
+unPackageName (Cabal.PackageName s) = s
+#endif
+
+-- GenericPackageDescription
+
+readGenericPackageDescription :: Verbosity -> FilePath -> IO GenericPackageDescription
+#if MIN_VERSION_Cabal(2,0,0)
+readGenericPackageDescription = Cabal.readGenericPackageDescription
+#else
+readGenericPackageDescription = Cabal.readPackageDescription
 #endif
diff --git a/Distribution/Cab/Version.hs b/Distribution/Cab/Version.hs
--- a/Distribution/Cab/Version.hs
+++ b/Distribution/Cab/Version.hs
@@ -1,13 +1,15 @@
+{-# LANGUAGE CPP #-}
 module Distribution.Cab.Version (
     Ver
   , toVer
+  , toVersion
   , verToString
   , version
   , versionToString
   ) where
 
 import Distribution.Cab.Utils
-import Distribution.Version (Version(..))
+import Distribution.Version
 
 -- | Package version.
 newtype Ver = Ver [Int] deriving (Eq,Ord,Read,Show)
@@ -19,6 +21,14 @@
 toVer :: [Int] -> Ver
 toVer is = Ver is
 
+-- | Creating 'Version' in Cabal.
+toVersion :: [Int] -> Version
+#if MIN_VERSION_Cabal(2,0,0)
+toVersion is = mkVersion is
+#else
+toVersion is = Version is []
+#endif
+
 -- | From 'Version' to 'String'
 --
 -- >>> verToString $ toVer [1,2,3]
@@ -28,16 +38,18 @@
 
 -- | From 'Version' in Cabal to 'Ver'.
 --
--- >>> version $ Version [1,2,3] []
+-- >>> version $ toVersion [1,2,3]
 -- Ver [1,2,3]
 version :: Version -> Ver
+#if MIN_VERSION_Cabal(2,0,0)
+version = Ver . versionNumbers
+#else
 version = Ver . versionBranch
+#endif
 
 -- | From 'Version' in Cabal to 'String'.
 --
--- >>> versionToString $ Version [1,2,3] []
+-- >>> versionToString $ toVersion [1,2,3]
 -- "1.2.3"
 versionToString :: Version -> String
 versionToString = verToString . version
-
-
diff --git a/cab.cabal b/cab.cabal
--- a/cab.cabal
+++ b/cab.cabal
@@ -1,5 +1,5 @@
 Name:                   cab
-Version:                0.2.16
+Version:                0.2.17
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
@@ -21,7 +21,7 @@
   Default-Language:     Haskell2010
   GHC-Options:          -Wall
   Build-Depends:        base >= 4.0 && < 5
-                      , Cabal >= 1.18 && < 1.25
+                      , Cabal >= 1.18 && < 2.1
                       , attoparsec >= 0.10
                       , bytestring
                       , conduit >= 1.1
