diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+2.2.2
+-----
+
+* Add `ToSchema Version` instance
+* Use base-compat-batteries (0.10)
+* PVP bounds
+
 2.2.1
 -----
 
diff --git a/src/Data/Swagger/Declare.hs b/src/Data/Swagger/Declare.hs
--- a/src/Data/Swagger/Declare.hs
+++ b/src/Data/Swagger/Declare.hs
@@ -29,7 +29,6 @@
 import Control.Monad.Trans.Writer.Lazy as Lazy
 import Control.Monad.Trans.Writer.Strict as Strict
 import Data.Functor.Identity
-import Data.Monoid
 
 -- | A declare monad transformer parametrized by:
 --
@@ -50,15 +49,15 @@
   pure x = DeclareT (\_ -> pure (mempty, x))
   DeclareT df <*> DeclareT dx = DeclareT $ \d -> do
     ~(d',  f) <- df d
-    ~(d'', x) <- dx (d <> d')
-    return (d' <> d'', f x)
+    ~(d'', x) <- dx (mappend d d')
+    return (mappend d' d'', f x)
 
 instance (Applicative m, Monad m, Monoid d) => Monad (DeclareT d m) where
   return x = DeclareT (\_ -> pure (mempty, x))
   DeclareT dx >>= f = DeclareT $ \d -> do
     ~(d',  x) <- dx d
-    ~(d'', y) <- runDeclareT (f x) (d <> d')
-    return (d' <> d'', y)
+    ~(d'', y) <- runDeclareT (f x) (mappend d d')
+    return (mappend d' d'', y)
 
 instance Monoid d => MonadTrans (DeclareT d) where
   lift m = DeclareT (\_ -> (,) mempty `liftM` m)
diff --git a/src/Data/Swagger/Internal.hs b/src/Data/Swagger/Internal.hs
--- a/src/Data/Swagger/Internal.hs
+++ b/src/Data/Swagger/Internal.hs
@@ -33,7 +33,7 @@
 import           Data.Map                 (Map)
 import qualified Data.Map                 as Map
 import           Data.Monoid              (Monoid (..))
-import           Data.Semigroup           (Semigroup (..))
+import           Data.Semigroup.Compat    (Semigroup (..))
 import           Data.Scientific          (Scientific)
 import           Data.Set                 (Set)
 import           Data.String              (IsString(..))
diff --git a/src/Data/Swagger/Internal/AesonUtils.hs b/src/Data/Swagger/Internal/AesonUtils.hs
--- a/src/Data/Swagger/Internal/AesonUtils.hs
+++ b/src/Data/Swagger/Internal/AesonUtils.hs
@@ -47,7 +47,6 @@
 
 #if MIN_VERSION_aeson(0,10,0)
 import Data.Aeson (Encoding, pairs, (.=), Series)
-import Data.Monoid ((<>))
 #endif
 
 -------------------------------------------------------------------------------
diff --git a/src/Data/Swagger/Internal/ParamSchema.hs b/src/Data/Swagger/Internal/ParamSchema.hs
--- a/src/Data/Swagger/Internal/ParamSchema.hs
+++ b/src/Data/Swagger/Internal/ParamSchema.hs
@@ -39,7 +39,8 @@
 import qualified Data.Vector.Primitive as VP
 import qualified Data.Vector.Storable as VS
 import qualified Data.Vector.Unboxed as VU
-import Numeric.Natural
+import Data.Version (Version)
+import Numeric.Natural.Compat (Natural)
 import Data.Word
 import Data.UUID.Types (UUID)
 
@@ -217,6 +218,11 @@
 
 instance ToParamSchema TL.Text where
   toParamSchema _ = toParamSchema (Proxy :: Proxy String)
+
+instance ToParamSchema Version where
+  toParamSchema _ = mempty
+    & type_ .~ SwaggerString
+    & pattern ?~ "^\\d+(\\.\\d+)*$"
 
 #if __GLASGOW_HASKELL__ < 800
 #else
diff --git a/src/Data/Swagger/Internal/Schema.hs b/src/Data/Swagger/Internal/Schema.hs
--- a/src/Data/Swagger/Internal/Schema.hs
+++ b/src/Data/Swagger/Internal/Schema.hs
@@ -44,7 +44,7 @@
 import Data.Int
 import Data.IntSet (IntSet)
 import Data.IntMap (IntMap)
-import Data.List.NonEmpty (NonEmpty)
+import Data.List.NonEmpty.Compat (NonEmpty)
 import Data.Map (Map)
 import Data.Proxy
 import Data.Scientific (Scientific)
@@ -57,7 +57,8 @@
 import qualified Data.Vector.Primitive as VP
 import qualified Data.Vector.Storable as VS
 import qualified Data.Vector.Unboxed as VU
-import Numeric.Natural
+import Data.Version (Version)
+import Numeric.Natural.Compat (Natural)
 import Data.Word
 import GHC.Generics
 import qualified Data.UUID.Types as UUID
@@ -497,6 +498,8 @@
 
 instance ToSchema T.Text where declareNamedSchema = plain . paramSchemaToSchema
 instance ToSchema TL.Text where declareNamedSchema = plain . paramSchemaToSchema
+
+instance ToSchema Version where declareNamedSchema = plain . paramSchemaToSchema
 
 #if __GLASGOW_HASKELL__ < 800
 #else
diff --git a/src/Data/Swagger/Internal/Utils.hs b/src/Data/Swagger/Internal/Utils.hs
--- a/src/Data/Swagger/Internal/Utils.hs
+++ b/src/Data/Swagger/Internal/Utils.hs
@@ -21,7 +21,6 @@
 import Data.HashMap.Strict.InsOrd (InsOrdHashMap)
 import qualified Data.HashMap.Strict.InsOrd as InsOrdHashMap
 import Data.Map (Map)
-import Data.Monoid
 import Data.Set (Set)
 import Data.Text (Text)
 import GHC.Generics
diff --git a/src/Data/Swagger/Operation.hs b/src/Data/Swagger/Operation.hs
--- a/src/Data/Swagger/Operation.hs
+++ b/src/Data/Swagger/Operation.hs
@@ -37,7 +37,6 @@
 import Data.Data.Lens
 import Data.List.Compat
 import Data.Maybe (mapMaybe)
-import Data.Monoid
 import qualified Data.Set as Set
 
 import Data.Swagger.Declare
diff --git a/swagger2.cabal b/swagger2.cabal
--- a/swagger2.cabal
+++ b/swagger2.cabal
@@ -1,11 +1,14 @@
+cabal-version:       >=1.10
 name:                swagger2
-version:             2.2.1
+version:             2.2.2
+
 synopsis:            Swagger 2.0 data model
 description:
   This library is inteded to be used for decoding and encoding Swagger 2.0 API
   specifications as well as manipulating them.
   .
   The original Swagger 2.0 specification is available at http://swagger.io/specification/.
+
 homepage:            https://github.com/GetShopTV/swagger2
 bug-reports:         https://github.com/GetShopTV/swagger2/issues
 license:             BSD3
@@ -20,7 +23,6 @@
   , CHANGELOG.md
   , examples/*.hs
   , include/overlapping-compat.h
-cabal-version:       >=1.10
 tested-with:         GHC==7.8.4, GHC==7.10.3, GHC==8.0.2, GHC==8.2.2, GHC==8.4.1
 
 custom-setup
@@ -48,60 +50,73 @@
     Data.Swagger.Internal.Utils
     Data.Swagger.Internal.AesonUtils
     Data.Swagger.Internal.TypeShape
-  build-depends:       base        >=4.7   && <4.12
-                     , base-compat >=0.9.1 && <0.10
-                     , aeson       >=0.11.2.1
-                     , bytestring
-                     , containers
-                     , hashable
-                     , generics-sop >=0.2 && <0.4
-                     , http-media
-                     , insert-ordered-containers >=0.1.0.0 && <0.3
-                     , lens
-                     , mtl
-                     , network
-                     , scientific
-                     , text
-                     , template-haskell
-                     , time
-                     , transformers
-                     , transformers-compat >= 0.3
-                     , unordered-containers
-                     , vector
-                     , uuid-types >=1.0.2 && <1.1
-  if !impl(ghc >= 7.10)
-     build-depends:    nats >=1.1.1 && <1.2
-  if !impl(ghc >= 8.0)
-     build-depends:    semigroups >= 0.18.3 && <0.19
+
+  -- GHC boot libraries
+  build-depends:
+      base             >=4.7     && <4.12
+    , bytestring       >=0.10.4  && <0.11
+    , containers       >=0.5.5.1 && <0.6
+    , template-haskell >=2.9.0.0 && <2.14
+    , time             >=1.4.2   && <1.9
+    , transformers     >=0.3.0.0 && <0.6
+
+  build-depends:
+      mtl              >=2.1     && <2.3
+    , text             >=1.2.3.0 && <1.3
+
+  -- other dependencies
+  build-depends:
+      base-compat-batteries     >=0.10.1   && <0.11
+    , aeson                     >=1.0.0.0  && <1.4
+    , generics-sop              >=0.3.2.0  && <0.4
+    , hashable                  >=1.2.7.0  && <1.3
+    , http-media                >=0.7.1.2  && <0.8
+    , insert-ordered-containers >=0.1.0.0  && <0.3
+    , lens                      >=4.16.1   && <4.17
+    , network                   >=2.6.3.5  && <2.7
+    , scientific                >=0.3.5.3  && <0.4
+    , transformers-compat       >=0.3      && <0.7
+    , unordered-containers      >=0.2.9.0  && <0.3
+    , uuid-types                >=1.0.2    && <1.1
+    , vector                    >=0.12.0.1 && <0.13
+
   default-language:    Haskell2010
 
 test-suite spec
   type:             exitcode-stdio-1.0
   hs-source-dirs:   test
   main-is:          Spec.hs
+
+  -- From library parat
  -- We need aeson's toEncoding for doctests too
-  build-depends:    base
-                  , base-compat
-                  , aeson >=0.10.0.0
-                  , aeson-qq
-                  , bytestring
-                  , containers
-                  , hashable
-                  , hspec
-                  , insert-ordered-containers
-                  , HUnit
-                  , mtl
-                  , QuickCheck >=2.8.2
-                  , quickcheck-instances
-                  , swagger2
-                  , text
-                  , time
-                  , unordered-containers
-                  , vector
-                  , lens
-  if !impl(ghc >= 8.0)
-     build-depends:    semigroups
+  build-depends: 
+      base
+    , swagger2
+    , aeson
+    , base-compat-batteries
+    , bytestring
+    , containers
+    , hashable
+    , insert-ordered-containers
+    , lens
+    , mtl
+    , text
+    , time
+    , unordered-containers
+    , vector
 
+  -- test-suite only dependencies
+  build-depends:
+      aeson-qq             >=0.8.2   && <0.9
+    , hspec                >=2.4.8   && <2.6
+    , HUnit                >=1.6.0.0 && <1.7
+    , QuickCheck           >=2.10.1  && <2.12
+    , quickcheck-instances >=0.3.18  && <0.14
+
+  -- https://github.com/haskell/cabal/issues/3708
+  build-tool-depends:
+    hspec-discover:hspec-discover >=2.4.8 && <2.6
+
   other-modules:
     SpecCommon
     Data.SwaggerSpec
@@ -110,9 +125,6 @@
     Data.Swagger.SchemaSpec
     Data.Swagger.Schema.ValidationSpec
   default-language: Haskell2010
-  -- https://github.com/haskell/cabal/issues/3708
-  build-tool-depends:
-    hspec-discover:hspec-discover
 
 test-suite doctests
   -- See QuickCheck note in https://github.com/phadej/cabal-doctest#notes
diff --git a/test/Data/Swagger/Schema/ValidationSpec.hs b/test/Data/Swagger/Schema/ValidationSpec.hs
--- a/test/Data/Swagger/Schema/ValidationSpec.hs
+++ b/test/Data/Swagger/Schema/ValidationSpec.hs
@@ -16,13 +16,14 @@
 import qualified "unordered-containers" Data.HashSet as HashSet
 import Data.HashMap.Strict (HashMap)
 import qualified Data.HashMap.Strict as HashMap
-import Data.List.NonEmpty (NonEmpty(..), nonEmpty)
+import Data.List.NonEmpty.Compat (NonEmpty(..), nonEmpty)
 import Data.Map (Map)
 import Data.Monoid (mempty)
 import Data.Proxy
 import Data.Time
 import qualified Data.Text as T
 import qualified Data.Text.Lazy as TL
+import Data.Version (Version)
 import Data.Set (Set)
 import Data.Word
 import GHC.Generics
@@ -90,6 +91,7 @@
     prop "MyRoseTree" $ shouldValidate (Proxy :: Proxy MyRoseTree)
     prop "Light" $ shouldValidate (Proxy :: Proxy Light)
     prop "ButtonImages" $ shouldValidate (Proxy :: Proxy ButtonImages)
+    prop "Version" $ shouldValidate (Proxy :: Proxy Version)
 
   describe "invalid cases" $ do
     prop "invalidPersonToJSON"        $ shouldNotValidate invalidPersonToJSON
