diff --git a/jose.cabal b/jose.cabal
--- a/jose.cabal
+++ b/jose.cabal
@@ -1,5 +1,5 @@
 name:                jose
-version:             0.5.0.4
+version:             0.5.0.5
 synopsis:
   Javascript Object Signing and Encryption and JSON Web Token library
 description:
@@ -32,6 +32,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:
@@ -58,7 +60,7 @@
     Crypto.JOSE.Types.Orphans
 
   build-depends:
-    base == 4.*
+    base >= 4.8 && < 5
     , attoparsec
     , base64-bytestring == 1.0.*
     , byteable == 0.1.*
@@ -68,6 +70,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
@@ -81,14 +84,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
@@ -118,6 +114,7 @@
     , memory
     , monad-time
     , mtl
+    , semigroups
     , template-haskell
     , safe
     , aeson
@@ -135,13 +132,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]
