diff --git a/jose.cabal b/jose.cabal
--- a/jose.cabal
+++ b/jose.cabal
@@ -1,5 +1,5 @@
 name:                jose
-version:             0.6.0.2
+version:             0.6.0.3
 synopsis:
   Javascript Object Signing and Encryption and JSON Web Token library
 description:
@@ -30,6 +30,8 @@
 category:            Cryptography
 build-type:          Simple
 cabal-version:       >= 1.8
+tested-with:
+  GHC==7.10.3, GHC==8.0.1, GHC==8.0.2, GHC==8.2.1
 
 library
   exposed-modules:
@@ -55,7 +57,7 @@
     Crypto.JOSE.Types.Orphans
 
   build-depends:
-    base == 4.*
+    base >= 4.8 && < 5
     , attoparsec
     , base64-bytestring == 1.0.*
     , concise >= 0.1
@@ -65,6 +67,7 @@
     , memory >= 0.7
     , monad-time >= 0.1
     , mtl >= 2
+    , semigroups >= 0.15
     , template-haskell >= 2.4
     , safe >= 0.3
     , aeson >= 0.8.0.1
@@ -78,14 +81,7 @@
     , x509 >= 1.4
     , vector
 
-  if impl(ghc < 7.10)
-    build-depends:
-        bifunctors >= 4.0
-  if impl(ghc < 8)
-    build-depends:
-        semigroups >= 0.15
-
-  ghc-options:    -Wall -O2
+  ghc-options:    -Wall
   hs-source-dirs: src
 
 source-repository head
@@ -114,6 +110,7 @@
     , memory
     , monad-time
     , mtl
+    , semigroups
     , template-haskell
     , safe
     , aeson
@@ -134,13 +131,6 @@
     , hspec
     , QuickCheck
     , quickcheck-instances
-
-  if impl(ghc < 7.10)
-    build-depends:
-        bifunctors >= 4.0
-  if impl(ghc < 8)
-    build-depends:
-        semigroups >= 0.15
 
 executable example
   hs-source-dirs: example
diff --git a/src/Crypto/JOSE/TH.hs b/src/Crypto/JOSE/TH.hs
--- a/src/Crypto/JOSE/TH.hs
+++ b/src/Crypto/JOSE/TH.hs
@@ -102,8 +102,10 @@
   in
 #if ! MIN_VERSION_template_haskell(2,11,0)
     dataD (cxt []) (mkName s) [] (map conQ vs) derive
-#else
+#elif ! MIN_VERSION_template_haskell(2,12,0)
     dataD (cxt []) (mkName s) [] Nothing (map conQ vs) (mapM conT derive)
+#else
+    dataD (cxt []) (mkName s) [] Nothing (map conQ vs) [return (DerivClause Nothing (map ConT derive))]
 #endif
   , instanceD (cxt []) (aesonInstance s ''FromJSON) [parseJSONFun vs]
   , instanceD (cxt []) (aesonInstance s ''ToJSON) [toJSONFun vs]
