diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Changelog
 
+#### 0.7.4.2
+
+* Add `base-compat-batteries` dependency, and remove test dependency on `aeson-utils`.
+
 #### 0.7.4.1
 
 * aeson-0.10 produces new error messages so the test-suite was updated to reflect this.
diff --git a/examples/Example.hs b/examples/Example.hs
--- a/examples/Example.hs
+++ b/examples/Example.hs
@@ -4,8 +4,9 @@
   #-}
 module Example where
 
-import Control.Applicative
-import Control.Monad
+import Prelude.Compat
+
+import Control.Monad.Compat
 import Data.Aeson hiding (Object)
 import Data.Text (Text)
 import GHC.Generics
diff --git a/json-schema.cabal b/json-schema.cabal
--- a/json-schema.cabal
+++ b/json-schema.cabal
@@ -1,5 +1,5 @@
 name:                json-schema
-version:             0.7.4.1
+version:             0.7.4.2
 synopsis:            Types and type classes for defining JSON schemas.
 description:         Types and type classes for defining JSON schemas.
                      .
@@ -13,7 +13,14 @@
 maintainer:          code@silk.co
 category:            Data
 build-type:          Simple
-cabal-version:       >=1.8
+cabal-version:       >=1.10
+tested-with:
+    GHC == 7.6.3
+  , GHC == 7.8.4
+  , GHC == 7.10.3
+  , GHC == 8.0.2
+  , GHC == 8.2.2
+  , GHC == 8.4.3
 
 extra-source-files:
   CHANGELOG.md
@@ -25,8 +32,10 @@
   location:          https://github.com/silkapp/json-schema.git
 
 library
-  ghc-options:       -Wall
-  hs-source-dirs:    src
+  ghc-options:        -Wall
+  hs-source-dirs:     src
+  default-extensions: NoImplicitPrelude
+  default-language:   Haskell2010
   exposed-modules:
     Data.JSON.Schema
     Data.JSON.Schema.Combinators
@@ -35,46 +44,39 @@
     Data.JSON.Schema.Validate
   build-depends:
       base >= 4.4 && < 5
-    , aeson >= 0.7 && < 0.11
+    , base-compat-batteries == 0.10.*
+    , aeson >= 0.7 && < 1.5
     , containers >= 0.3 && < 0.6
     , generic-aeson == 0.2.*
-    , generic-deriving >= 1.6 && < 1.10
+    , generic-deriving >= 1.6 && < 1.13
     , mtl >= 2.1 && < 2.3
     , scientific == 0.3.*
     , text >= 0.10 && < 1.3
-    , time >= 1.2 && < 1.6
+    , time >= 1.2 && < 1.9
     , unordered-containers == 0.2.*
-    , vector >= 0.10 && < 0.12
-  -- Data.Proxy.Proxy
-  if impl(ghc < 7.8)
-    build-depends: tagged >= 0.2 && < 0.9
-  -- GHC Generics
-  if impl(ghc < 7.6)
-    build-depends: ghc-prim == 0.2.*
+    , vector >= 0.10 && < 0.13
 
 test-suite json-schema-generic-aeson-tests
-  ghc-options:       -Wall
-  hs-source-dirs:    tests, examples
-  main-is:           Main.hs
-  type:              exitcode-stdio-1.0
+  ghc-options:        -Wall
+  default-extensions: NoImplicitPrelude
+  default-language:   Haskell2010
+  hs-source-dirs:     tests, examples
+  main-is:            Main.hs
+  type:               exitcode-stdio-1.0
   other-modules:
     Example
     Test.Util
     Test.Validate
   build-depends:
       base >= 4.4 && < 5
-    , aeson >= 0.7 && < 0.11
-    , aeson-utils >= 0.2 && < 0.4
+    , base-compat-batteries == 0.10.*
+    , aeson >= 0.9 && < 1.5
     , attoparsec >= 0.10 && < 0.14
     , bytestring >= 0.10 && < 0.12
     , generic-aeson == 0.2.*
     , json-schema
-    , tasty >= 0.10 && < 0.12
-    , tasty-hunit == 0.9.*
+    , tasty >= 0.10 && < 1.2
+    , tasty-hunit >= 0.9 && < 0.11
     , tasty-th == 0.1.*
     , text >= 0.10 && < 1.3
-    , vector >= 0.10 && < 0.12
-  if impl(ghc < 7.8)
-    build-depends: tagged >= 0.2 && < 0.9
-  if impl(ghc < 7.6)
-    build-depends: ghc-prim == 0.2.*
+    , vector >= 0.10 && < 0.13
diff --git a/src/Data/JSON/Schema.hs b/src/Data/JSON/Schema.hs
--- a/src/Data/JSON/Schema.hs
+++ b/src/Data/JSON/Schema.hs
@@ -6,4 +6,4 @@
 
 import Data.JSON.Schema.Generic
 import Data.JSON.Schema.Types
-import Data.Proxy
+import Data.Proxy.Compat
diff --git a/src/Data/JSON/Schema/Combinators.hs b/src/Data/JSON/Schema/Combinators.hs
--- a/src/Data/JSON/Schema/Combinators.hs
+++ b/src/Data/JSON/Schema/Combinators.hs
@@ -17,6 +17,8 @@
   , nullable
   ) where
 
+import Prelude.Compat
+
 import Data.JSON.Schema.Types
 import Data.Text (Text)
 import qualified Data.Aeson as Aeson
diff --git a/src/Data/JSON/Schema/Generic.hs b/src/Data/JSON/Schema/Generic.hs
--- a/src/Data/JSON/Schema/Generic.hs
+++ b/src/Data/JSON/Schema/Generic.hs
@@ -17,11 +17,12 @@
   , gSchemaWithSettings
   ) where
 
-import Control.Applicative hiding (empty, (<|>))
+import Prelude.Compat
+
 import Data.JSON.Schema.Combinators
 import Data.JSON.Schema.Types
 import Data.Maybe
-import Data.Proxy
+import Data.Proxy.Compat
 import Data.Text (Text)
 import GHC.Generics
 import Generics.Deriving.ConNames
diff --git a/src/Data/JSON/Schema/Types.hs b/src/Data/JSON/Schema/Types.hs
--- a/src/Data/JSON/Schema/Types.hs
+++ b/src/Data/JSON/Schema/Types.hs
@@ -15,16 +15,18 @@
   , unboundedLength
   ) where
 
+import Prelude.Compat
+
 import Data.Fixed
 import Data.Int
 import Data.Maybe
-import Data.Proxy
+import Data.Proxy.Compat
 import Data.Scientific
-import Data.String
+import Data.String.Compat
 import Data.Text (Text)
 import Data.Time.Clock (UTCTime)
 import Data.Vector (Vector)
-import Data.Word
+import Data.Word.Compat
 import qualified Data.Aeson.Types    as Aeson
 import qualified Data.HashMap.Strict as H
 import qualified Data.Map            as M
diff --git a/src/Data/JSON/Schema/Validate.hs b/src/Data/JSON/Schema/Validate.hs
--- a/src/Data/JSON/Schema/Validate.hs
+++ b/src/Data/JSON/Schema/Validate.hs
@@ -9,8 +9,10 @@
   , ErrorType (..)
   ) where
 
-import Control.Applicative
-import Control.Monad.RWS.Strict
+import Prelude.Compat
+
+import Control.Monad.Compat
+import Control.Monad.RWS.Strict (MonadReader, MonadWriter, RWS, ask, local, runRWS, tell)
 import Data.Aeson (Value)
 import Data.HashMap.Strict (HashMap)
 import Data.Scientific
diff --git a/tests/Main.hs b/tests/Main.hs
--- a/tests/Main.hs
+++ b/tests/Main.hs
@@ -9,8 +9,10 @@
   #-}
 module Main (main) where
 
+import Prelude.Compat
+
 import Data.Aeson hiding (Result)
-import Data.Proxy
+import Data.Proxy.Compat
 import GHC.Generics (Generic)
 import Generics.Generic.Aeson
 import Test.Tasty
diff --git a/tests/Test/Util.hs b/tests/Test/Util.hs
--- a/tests/Test/Util.hs
+++ b/tests/Test/Util.hs
@@ -6,14 +6,15 @@
   #-}
 module Test.Util where
 
+import Prelude.Compat
+
 import Data.Aeson hiding (Result)
 import Data.Aeson.Parser ()
-import Data.Aeson.Utils (eitherDecodeV)
 import Data.Attoparsec.Lazy
 import Data.ByteString.Lazy (ByteString)
 import Data.ByteString.Lazy.Char8 (unpack)
-import Data.List (intersperse)
-import Data.Proxy
+import Data.List.Compat (intersperse)
+import Data.Proxy.Compat
 import Test.Tasty.HUnit
 import qualified Data.Aeson.Parser as A
 import qualified Data.Aeson.Types  as A
@@ -25,7 +26,7 @@
 -- | Serializes a value to an aeson Value and validates that against the type's schema
 valid :: forall a . (Show a, ToJSON a, FromJSON a, JSONSchema a) => a -> Assertion
 valid v = do
-  case eitherDecodeV (encode v) of
+  case eitherDecode (encode v) of
     Left err -> error err
     Right r  -> case V.toList $ validate sch r of
       []   -> assertBool "x" True
diff --git a/tests/Test/Validate.hs b/tests/Test/Validate.hs
--- a/tests/Test/Validate.hs
+++ b/tests/Test/Validate.hs
@@ -5,9 +5,10 @@
   #-}
 module Test.Validate (tests) where
 
+import Prelude.Compat
+
 import Data.ByteString.Lazy
 import Data.Vector as V
-
 import Test.Tasty
 import Test.Tasty.HUnit
 import Test.Tasty.TH
