diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,11 @@
 # Revision history for staversion
 
+## 0.2.1.1  -- 2017-07-29
+
+* Support `megaparsec-6.0`, with compatibility wrapper "Staversion.Internal.Megaparsec".
+* Support `Cabal-2.0`, with compatibility wrapper "Staversion.Internal.Version".
+
+
 ## 0.2.1.0  -- 2017-06-18
 
 * Add `--format-version` option.
diff --git a/src/Staversion/Internal/Aggregate.hs b/src/Staversion/Internal/Aggregate.hs
--- a/src/Staversion/Internal/Aggregate.hs
+++ b/src/Staversion/Internal/Aggregate.hs
@@ -35,17 +35,17 @@
 import qualified Data.List.NonEmpty as NL
 import Data.Text (unpack)
 import Data.Traversable (traverse)
-import Data.Version (Version, makeVersion)
-import Distribution.Version (VersionRange)
 import qualified Distribution.Text as DT
-import qualified Distribution.Version as V
 import qualified Text.PrettyPrint as Pretty
 
 import Staversion.Internal.Cabal (Target(..))
 import Staversion.Internal.Query (PackageName, ErrorMsg)
 import Staversion.Internal.Log (LogEntry(..), LogLevel(..))
 import Staversion.Internal.Result (Result(..), AggregatedResult(..), ResultBody, ResultBody'(..), resultSourceDesc)
+import Staversion.Internal.Version (Version, mkVersion, VersionRange)
+import qualified Staversion.Internal.Version as V
 
+
 -- | Aggregate some 'Version's into a 'VersionRange'.
 type Aggregator = NonEmpty Version -> VersionRange
 
@@ -94,8 +94,8 @@
 aggPvpGeneral :: ([Int] -> [Int]) -> Aggregator
 aggPvpGeneral makeUpper = V.simplifyVersionRange . foldr1 V.unionVersionRanges . fmap toRange . NL.nub . NL.sort where
   toRange v = fromJust $ fmap V.fromVersionIntervals $ V.mkVersionIntervals [(V.LowerBound norm_v V.InclusiveBound, V.UpperBound vu V.ExclusiveBound)] where
-    norm_v = makeVersion $ normalizeTralingZeroes $ V.versionBranch v
-    vu = makeVersion $ makeUpper $ V.versionBranch norm_v
+    norm_v = V.mkVersion $ normalizeTralingZeroes $ V.versionNumbers v
+    vu = V.mkVersion $ makeUpper $ V.versionNumbers norm_v
 
 normalizeTralingZeroes :: [Int] -> [Int]
 normalizeTralingZeroes [] = []
diff --git a/src/Staversion/Internal/BuildPlan.hs b/src/Staversion/Internal/BuildPlan.hs
--- a/src/Staversion/Internal/BuildPlan.hs
+++ b/src/Staversion/Internal/BuildPlan.hs
@@ -34,7 +34,6 @@
 import Data.Monoid (Monoid, (<>), mconcat)
 import Data.Text (Text, unpack)
 import Data.Traversable (Traversable(traverse))
-import Data.Version (Version)
 import Data.Word (Word)
 import qualified Data.Yaml as Yaml
 import System.FilePath ((</>), (<.>))
@@ -62,6 +61,8 @@
     fetchBuildPlanYAML
   )
 import Staversion.Internal.BuildPlan.Version (unVersionJSON)
+import Staversion.Internal.Version (Version)
+
 
 -- | A data structure that keeps a map between package names and their
 -- versions.
diff --git a/src/Staversion/Internal/BuildPlan/Hackage.hs b/src/Staversion/Internal/BuildPlan/Hackage.hs
--- a/src/Staversion/Internal/BuildPlan/Hackage.hs
+++ b/src/Staversion/Internal/BuildPlan/Hackage.hs
@@ -19,11 +19,11 @@
 import qualified Data.ByteString.Lazy as BSL
 import Data.List (sort, reverse)
 import Data.Text (unpack)
-import Data.Version (Version)
 
 import Staversion.Internal.BuildPlan.Version (unVersionJSON)
 import Staversion.Internal.Query (ErrorMsg, PackageName)
 import Staversion.Internal.HTTP (Manager, fetchURL, OurHttpException)
+import Staversion.Internal.Version (Version)
 
 data RegisteredVersions = RegisteredVersions { regPreferredVersions :: [Version]
                                                -- ^ Sorted list of preferred versions of the package.
diff --git a/src/Staversion/Internal/BuildPlan/Version.hs b/src/Staversion/Internal/BuildPlan/Version.hs
--- a/src/Staversion/Internal/BuildPlan/Version.hs
+++ b/src/Staversion/Internal/BuildPlan/Version.hs
@@ -13,14 +13,8 @@
 import Data.Aeson (FromJSON(..), Value(..))
 import Data.Maybe (listToMaybe)
 import Data.Text (Text, unpack)
-import Data.Version (Version, parseVersion)
-import Text.ParserCombinators.ReadP (readP_to_S)
 
--- | Parse a version text. There must not be any trailing characters
--- after a valid version text.
-parseVersionText :: Text -> Maybe Version
-parseVersionText = extractResult . (readP_to_S parseVersion) . unpack where
-  extractResult = listToMaybe . map fst . filter (\pair -> snd pair == "")
+import Staversion.Internal.Version (parseVersionText, Version)
 
 -- | a wrapper around 'Version' for JSON I/F
 newtype VersionJSON = VersionJSON { unVersionJSON :: Version } deriving (Show,Eq,Ord)
diff --git a/src/Staversion/Internal/Cabal.hs b/src/Staversion/Internal/Cabal.hs
--- a/src/Staversion/Internal/Cabal.hs
+++ b/src/Staversion/Internal/Cabal.hs
@@ -21,9 +21,8 @@
 import Data.Text (pack, Text)
 import qualified Data.Text as T
 import qualified Data.Text.IO as TIO
-import qualified Text.Megaparsec as P
-import qualified Text.Megaparsec.Text as P
 
+import qualified Staversion.Internal.Megaparsec as P
 import Staversion.Internal.Query
   ( PackageName, ErrorMsg
   )
diff --git a/src/Staversion/Internal/Command.hs b/src/Staversion/Internal/Command.hs
--- a/src/Staversion/Internal/Command.hs
+++ b/src/Staversion/Internal/Command.hs
@@ -14,7 +14,6 @@
 import Data.Function (on)
 import Data.Monoid (mconcat, (<>))
 import Data.Text (pack)
-import Data.Version (showVersion)
 import qualified Options.Applicative as Opt
 import qualified Paths_staversion as MyInfo
 import System.Directory (getHomeDirectory)
@@ -35,6 +34,7 @@
     parseQuery,
     PackageSource(..)
   )
+import Staversion.Internal.Version (showBaseVersion)
 
 -- | Command from the user.
 data Command =
@@ -203,7 +203,7 @@
               Opt.progDesc ( "Look for version numbers for Haskell packages in specific stackage resolvers"
                              ++ " (or possibly other package sources)"
                            ),
-              Opt.footer ("Version: " ++ (showVersion MyInfo.version))
+              Opt.footer ("Version: " ++ (showBaseVersion MyInfo.version))
             ]
 
 parseCommandArgs :: IO Command
diff --git a/src/Staversion/Internal/Format.hs b/src/Staversion/Internal/Format.hs
--- a/src/Staversion/Internal/Format.hs
+++ b/src/Staversion/Internal/Format.hs
@@ -23,8 +23,6 @@
 import qualified Data.Text as Text
 import qualified Data.Text.Lazy as TL
 import Data.Text.Lazy.Builder (Builder, toLazyText, fromText, fromString)
-import Distribution.Version (VersionRange)
-import qualified Distribution.Version as V
 
 import Staversion.Internal.Aggregate
   ( groupAllPreservingOrderBy,
@@ -41,7 +39,10 @@
   )
 import Staversion.Internal.Cabal (Target(..))
 import Staversion.Internal.Log (LogEntry)
+import Staversion.Internal.Version (VersionRange)
+import qualified Staversion.Internal.Version as V
 
+
 -- | Format for 'VersionRange'.
 type FormatVersion = VersionRange -> Text
 
@@ -62,11 +63,11 @@
     else fallback
   _ -> fallback
   where
-    formatV v = pack $ concat $ intersperse "." $ map show $ V.versionBranch v
+    formatV v = pack $ concat $ intersperse "." $ map show $ V.versionNumbers v
     fallback = formatVersionCabal $ V.fromVersionIntervals $ fromJust $ V.mkVersionIntervals [vi]
 
 isCaretOK :: V.Version -> V.Version -> Bool
-isCaretOK inc_lv exc_uv = isCaretOK' (V.versionBranch inc_lv) (V.versionBranch exc_uv) where
+isCaretOK inc_lv exc_uv = isCaretOK' (V.versionNumbers inc_lv) (V.versionNumbers exc_uv) where
   isCaretOK' [] uv'          = uv' == [0,1]
   isCaretOK' [x] uv'         = uv' == [x,1]
   isCaretOK' (x : y : _) uv' = uv' == [x,y+1]
diff --git a/src/Staversion/Internal/Megaparsec.hs b/src/Staversion/Internal/Megaparsec.hs
new file mode 100644
--- /dev/null
+++ b/src/Staversion/Internal/Megaparsec.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE CPP #-}
+-- |
+-- Module: Staversion.Internal.Megaparsec
+-- Description: Megaparsec compatibility wrapper
+-- Maintainer: Toshio Ito <debug.ito@gmail.com>
+--
+-- __This is an internal module. End-users should not use it.__
+module Staversion.Internal.Megaparsec
+       ( module Text.Megaparsec,
+         Parser,
+
+#if MIN_VERSION_megaparsec(6,0,0)
+         module Text.Megaparsec.Char,
+         string,
+         string'
+#endif
+       ) where
+
+import Text.Megaparsec
+
+#if MIN_VERSION_megaparsec(6,0,0)
+import Data.Text (Text, pack, unpack)
+import Data.Void (Void)
+import Text.Megaparsec.Char hiding (string, string')
+import qualified Text.Megaparsec.Char as MC
+
+-- | See: https://github.com/fpco/stackage/issues/2666#issuecomment-318472919
+type Parser = Parsec (ErrorFancy Void) Text
+
+liftToString :: Monad m => (Text -> m Text) -> String -> m String
+liftToString f = fmap unpack . f . pack
+
+-- | 'string' combatible with Megaparsec 5. In Megaparsec 6, 'string'
+-- function takes and produces 'Text' if we use 'Text' as the 'Stream'
+-- type, probably for better performance.
+string :: String -> Parser String
+string = liftToString MC.string
+
+-- | 'string'' combatible with Megaparsec 5.
+string' :: String -> Parser String
+string' = liftToString MC.string'
+
+#else
+
+import Data.Text (Text)
+
+-- | From "Text.Megaparsec.Text".
+type Parser = Parsec Dec Text
+
+#endif
+
diff --git a/src/Staversion/Internal/Result.hs b/src/Staversion/Internal/Result.hs
--- a/src/Staversion/Internal/Result.hs
+++ b/src/Staversion/Internal/Result.hs
@@ -17,13 +17,12 @@
 import Data.List.NonEmpty (NonEmpty(..))
 import Data.Monoid ((<>))
 import Data.Text (Text)
-import Data.Version (Version)
-import Distribution.Version (VersionRange, thisVersion)
 import Staversion.Internal.Query
   ( Query, PackageSource, ErrorMsg, PackageName,
     sourceDesc
   )
 import Staversion.Internal.Cabal (Target)
+import Staversion.Internal.Version (Version, VersionRange, thisVersion)
 
 -- | Result for a query.
 data Result = Result { resultIn :: ResultSource,
diff --git a/src/Staversion/Internal/Version.hs b/src/Staversion/Internal/Version.hs
new file mode 100644
--- /dev/null
+++ b/src/Staversion/Internal/Version.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE CPP #-}
+-- |
+-- Module: Staversion.Internal.Version
+-- Description: Compatibility wrapper for Distribution.Version
+-- Maintainer: Toshio Ito <debug.ito@gmail.com>
+--
+-- __This is an internal module. End-users should not use it.__
+module Staversion.Internal.Version
+       ( -- * Re-exports
+         V.Version,
+         V.VersionRange,
+         V.LowerBound(..),
+         V.UpperBound(..),
+         V.Bound(..),
+         V.VersionInterval,
+         V.thisVersion,
+         V.unionVersionRanges,
+         V.simplifyVersionRange,
+         V.fromVersionIntervals,
+         V.mkVersionIntervals,
+         V.asVersionIntervals,
+         -- * Compatibility
+         mkVersion,
+         versionNumbers,
+         -- * Util
+         BaseVersion,
+         showBaseVersion,
+         parseVersionText
+       ) where
+
+import Data.Maybe (listToMaybe)
+import Data.Text (Text, unpack)
+import qualified Distribution.Version as V
+import Data.Version (parseVersion)
+import qualified Data.Version as BaseV
+import Text.ParserCombinators.ReadP (readP_to_S)
+
+-- | A Version type by "Data.Version".
+type BaseVersion = BaseV.Version
+
+showBaseVersion :: BaseVersion -> String
+showBaseVersion = BaseV.showVersion
+
+baseVToV :: BaseV.Version -> V.Version
+baseVToV = mkVersion . BaseV.versionBranch
+
+-- | Parse a version text. There must not be any trailing characters
+-- after a valid version text.
+parseVersionText :: Text -> Maybe V.Version
+parseVersionText = extractResult . (readP_to_S parseVersion) . unpack where
+  extractResult = fmap baseVToV . listToMaybe . map fst . filter (\pair -> snd pair == "")
+
+#if MIN_VERSION_Cabal(2,0,0)
+mkVersion :: [Int] -> V.Version
+mkVersion = V.mkVersion
+
+versionNumbers :: V.Version -> [Int]
+versionNumbers = V.versionNumbers
+
+#else
+
+mkVersion :: [Int] -> V.Version
+mkVersion vs = V.Version vs []
+
+versionNumbers :: V.Version -> [Int]
+versionNumbers = V.versionBranch
+
+#endif
diff --git a/staversion.cabal b/staversion.cabal
--- a/staversion.cabal
+++ b/staversion.cabal
@@ -1,5 +1,5 @@
 name:                   staversion
-version:                0.2.1.0
+version:                0.2.1.1
 author:                 Toshio Ito <debug.ito@gmail.com>
 maintainer:             Toshio Ito <debug.ito@gmail.com>
 license:                BSD3
@@ -42,9 +42,11 @@
                         Staversion.Internal.Log,
                         Staversion.Internal.Exec,
                         Staversion.Internal.Format,
-                        Staversion.Internal.Aggregate
+                        Staversion.Internal.Aggregate,
+                        Staversion.Internal.Version
   other-modules:        Paths_staversion,
-                        Staversion.Internal.HTTP
+                        Staversion.Internal.HTTP,
+                        Staversion.Internal.Megaparsec
   build-depends:        base >=4.8 && <4.10,
                         unordered-containers >=0.2.3 && <0.3,
                         aeson >=0.8.0 && <1.3,
@@ -60,9 +62,9 @@
                         http-types >=0.8.6 && <0.10,
                         transformers >=0.3.0 && <0.6,
                         transformers-compat >=0.4.0 && <0.6,
-                        megaparsec >=4.2.0 && <5.4,
+                        megaparsec >=4.2.0 && <6.1,
                         semigroups >=0.18.0.1 && <0.19,
-                        Cabal >=1.22.6.0 && <1.25,
+                        Cabal >=1.22.6.0 && <2.1,
                         pretty >=1.1.2.0 && <1.2,
                         ansi-wl-pprint >=0.6.7.3 && <0.7
 
diff --git a/test/Staversion/Internal/AggregateSpec.hs b/test/Staversion/Internal/AggregateSpec.hs
--- a/test/Staversion/Internal/AggregateSpec.hs
+++ b/test/Staversion/Internal/AggregateSpec.hs
@@ -5,7 +5,6 @@
 import Data.List.NonEmpty (NonEmpty(..))
 import qualified Data.List.NonEmpty as NL
 import Data.Monoid (All(..))
-import qualified Distribution.Version as V
 import Test.Hspec
 
 import Staversion.Internal.Aggregate
@@ -32,6 +31,7 @@
     vors, vors',
     vint
   )
+import qualified Staversion.Internal.Version as V
 
 main :: IO ()
 main = hspec spec
diff --git a/test/Staversion/Internal/BuildPlan/VersionSpec.hs b/test/Staversion/Internal/BuildPlan/VersionSpec.hs
--- a/test/Staversion/Internal/BuildPlan/VersionSpec.hs
+++ b/test/Staversion/Internal/BuildPlan/VersionSpec.hs
@@ -1,9 +1,9 @@
 module Staversion.Internal.BuildPlan.VersionSpec (main,spec) where
 
 import Data.Text (pack)
-import Data.Version (Version(..))
 import Test.Hspec
 
+import Staversion.Internal.Version (Version, mkVersion)
 import Staversion.Internal.BuildPlan.Version (parseVersionText)
 
 main :: IO ()
@@ -14,8 +14,8 @@
 
 parseVersionText_spec :: Spec
 parseVersionText_spec = describe "parseVersionText" $ do
-  spec_v "0.1.0.6" $ Just (Version [0,1,0,6] [])
-  spec_v "10.11" $ Just (Version [10,11] [])
+  spec_v "0.1.0.6" $ Just (mkVersion [0,1,0,6])
+  spec_v "10.11" $ Just (mkVersion [10,11])
   where
     spec_v input_v expected = specify input_v $ do
       parseVersionText (pack input_v) `shouldBe` expected
diff --git a/test/Staversion/Internal/BuildPlanSpec.hs b/test/Staversion/Internal/BuildPlanSpec.hs
--- a/test/Staversion/Internal/BuildPlanSpec.hs
+++ b/test/Staversion/Internal/BuildPlanSpec.hs
@@ -1,7 +1,6 @@
 module Staversion.Internal.BuildPlanSpec (main,spec) where
 
 import Data.Text (Text, pack)
-import Data.Version (Version(..))
 import Data.Word (Word)
 import System.FilePath ((</>), (<.>))
 import Test.Hspec
@@ -18,7 +17,11 @@
     loadBuildPlan,
     buildPlanSource
   )
+import Staversion.Internal.Version (Version)
 
+import Staversion.Internal.TestUtil (ver)
+
+
 main :: IO ()
 main = hspec spec
 
@@ -31,19 +34,19 @@
 packageVersion_spec = describe "packageVersion" $ do
   forBuildPlanMap "conpact_build_plan" $ \loader -> do
     specify "drawille -> 0.1.0.6" $ do
-      loadVersion "drawille" loader `shouldReturn` Just (Version [0,1,0,6] [])
+      loadVersion "drawille" loader `shouldReturn` Just (ver [0,1,0,6])
     specify "unknown -> Nothing" $ do
       loadVersion "unknown" loader `shouldReturn` Nothing
     specify "ghc -> 7.10.3" $ do
-      loadVersion "ghc" loader `shouldReturn` Just (Version [7,10,3] [])
+      loadVersion "ghc" loader `shouldReturn` Just (ver [7,10,3])
     specify "base -> 4.8.2.0" $ do
-      loadVersion "base" loader `shouldReturn` Just (Version [4,8,2,0] [])
+      loadVersion "base" loader `shouldReturn` Just (ver [4,8,2,0])
 
   forBuildPlanMap "lts-4.2" $ \loader -> do
     specify "conduit -> 1.2.6.1" $ do
-      loadVersion "conduit" loader `shouldReturn` Just (Version [1,2,6,1] [])
+      loadVersion "conduit" loader `shouldReturn` Just (ver [1,2,6,1])
     specify "transformers -> 0.4.2.0" $ do
-      loadVersion "transformers" loader `shouldReturn` Just (Version [0,4,2,0] [])
+      loadVersion "transformers" loader `shouldReturn` Just (ver [0,4,2,0])
 
 
 forBuildPlanMap :: String -> (IO BuildPlanMap -> Spec) -> Spec
@@ -70,5 +73,5 @@
   it "reads local file after disambiguation" $ do
     bp_man <- mockBuildPlanManager 4 2
     bp <- either (\e -> error ("Error: " ++ e)) return =<< loadBuildPlan bp_man [] (SourceStackage "lts")
-    packageVersion bp "base" `shouldBe` (Just $ Version [4,8,2,0] [])
+    packageVersion bp "base" `shouldBe` (Just $ ver [4,8,2,0])
     buildPlanSource bp `shouldBe` SourceStackage "lts-4.2"
diff --git a/test/Staversion/Internal/ExecSpec.hs b/test/Staversion/Internal/ExecSpec.hs
--- a/test/Staversion/Internal/ExecSpec.hs
+++ b/test/Staversion/Internal/ExecSpec.hs
@@ -1,6 +1,5 @@
 module Staversion.Internal.ExecSpec (main,spec) where
 
-import Data.Version (Version(Version))
 import Data.Either (isLeft)
 import Data.IORef (readIORef)
 import Data.List (isInfixOf)
@@ -26,6 +25,8 @@
   )
 import Staversion.Internal.Log (defaultLogger, _mockLogger, Logger(loggerThreshold), LogLevel(..), LogEntry(..))
 import Staversion.Internal.Cabal (Target(..))
+import Staversion.Internal.Version (Version)
+
 
 import Staversion.Internal.TestUtil (ver, simpleResultBody, verPairs)
 
diff --git a/test/Staversion/Internal/TestUtil.hs b/test/Staversion/Internal/TestUtil.hs
--- a/test/Staversion/Internal/TestUtil.hs
+++ b/test/Staversion/Internal/TestUtil.hs
@@ -8,14 +8,15 @@
        ) where
 
 import Data.Maybe (fromJust)
-import Data.Version (Version(..))
-import qualified Distribution.Version as V
 import Staversion.Internal.Query ( PackageName
                                  )
 import Staversion.Internal.Result (ResultBody, ResultBody'(..))
+import Staversion.Internal.Version (Version)
+import qualified Staversion.Internal.Version as V
 
+
 ver :: [Int] -> Version
-ver vs = Version vs []
+ver = V.mkVersion
 
 verMaybe :: [Int] -> Maybe Version
 verMaybe [] = Nothing
