diff --git a/composite-opaleye.cabal b/composite-opaleye.cabal
--- a/composite-opaleye.cabal
+++ b/composite-opaleye.cabal
@@ -1,9 +1,11 @@
--- This file has been generated from package.yaml by hpack version 0.18.1.
+-- This file has been generated from package.yaml by hpack version 0.20.0.
 --
 -- see: https://github.com/sol/hpack
+--
+-- hash: 2d6f4b51d74138272d878e82f39a9ea1283df0b56f9264b5e60ce877d44f51f6
 
 name:           composite-opaleye
-version:        0.5.3.0
+version:        0.5.4.0
 synopsis:       Opaleye SQL for Frames records
 description:    Integration between Frames records and Opaleye SQL, allowing records to be stored, retrieved, and queried from PostgreSQL.
 category:       Records
@@ -21,17 +23,17 @@
   default-extensions: DataKinds FlexibleContexts FlexibleInstances LambdaCase MultiParamTypeClasses OverloadedStrings PatternSynonyms PolyKinds ScopedTypeVariables StrictData TemplateHaskell TypeFamilies TypeOperators ViewPatterns
   ghc-options: -Wall -O2
   build-depends:
-      base >= 4.7 && < 5
-    , bytestring
-    , composite-base
-    , lens
-    , opaleye
-    , postgresql-simple
-    , product-profunctors
-    , profunctors
-    , template-haskell
-    , text
-    , vinyl
+      base >=4.7 && <5
+    , bytestring >=0.10.8.1 && <0.11
+    , composite-base >=0.5.3.0 && <0.6
+    , lens >=4.15.4 && <4.17
+    , opaleye >=0.5.4.0 && <0.7
+    , postgresql-simple >=0.5.3.0 && <0.6
+    , product-profunctors >=0.8.0.3 && <0.10
+    , profunctors >=5.2.1 && <5.3
+    , template-haskell >=2.11.1.0 && <2.13
+    , text >=1.2.2.2 && <1.3
+    , vinyl >=0.5.3 && <0.8
   exposed-modules:
       Composite.Opaleye
       Composite.Opaleye.ProductProfunctors
@@ -51,20 +53,21 @@
   default-extensions: DataKinds FlexibleContexts FlexibleInstances LambdaCase MultiParamTypeClasses OverloadedStrings PatternSynonyms PolyKinds ScopedTypeVariables StrictData TemplateHaskell TypeFamilies TypeOperators ViewPatterns
   ghc-options: -Wall -O2 -threaded -rtsopts -with-rtsopts=-N -fno-warn-orphans
   build-depends:
-      base >= 4.7 && < 5
-    , bytestring
-    , composite-base
-    , lens
-    , opaleye
-    , postgresql-simple
-    , product-profunctors
-    , profunctors
-    , template-haskell
-    , text
-    , vinyl
-    , QuickCheck
+      QuickCheck
+    , base >=4.7 && <5
+    , bytestring >=0.10.8.1 && <0.11
+    , composite-base >=0.5.3.0 && <0.6
     , composite-opaleye
     , hspec
+    , lens >=4.15.4 && <4.17
+    , opaleye >=0.5.4.0 && <0.7
+    , postgresql-simple >=0.5.3.0 && <0.6
+    , product-profunctors >=0.8.0.3 && <0.10
+    , profunctors >=5.2.1 && <5.3
+    , template-haskell >=2.11.1.0 && <2.13
+    , text >=1.2.2.2 && <1.3
+    , vinyl >=0.5.3 && <0.8
   other-modules:
       UpdateSpec
+      Paths_composite_opaleye
   default-language: Haskell2010
diff --git a/src/Composite/Opaleye/RecordTable.hs b/src/Composite/Opaleye/RecordTable.hs
--- a/src/Composite/Opaleye/RecordTable.hs
+++ b/src/Composite/Opaleye/RecordTable.hs
@@ -7,7 +7,8 @@
 import qualified Data.Profunctor.Product as PP
 import Data.Proxy (Proxy(Proxy))
 import GHC.TypeLits (KnownSymbol, symbolVal)
-import Opaleye (Column, TableProperties, required, optional)
+import Opaleye (Column, required, optional)
+import Opaleye.Internal.Table (TableProperties)
 
 -- |Helper typeclass which picks which of 'required' or 'optional' to use for a pair of write column type and read column type.
 --
diff --git a/src/Composite/Opaleye/TH.hs b/src/Composite/Opaleye/TH.hs
--- a/src/Composite/Opaleye/TH.hs
+++ b/src/Composite/Opaleye/TH.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 module Composite.Opaleye.TH where
 
 import Composite.Opaleye.Util (constantColumnUsing)
@@ -98,7 +99,18 @@
   let conPairs = nullaryCons <&> \ conName ->
         (conName, fromMaybe (nameBase conName) (hsConToSqlValue (nameBase conName)))
 
-  sqlTypeDecl <- dataD (cxt []) sqlTypeName [] Nothing [] (cxt [])
+  sqlTypeDecl <-
+    dataD
+      (cxt [])
+      sqlTypeName
+      []
+      Nothing
+      []
+#if MIN_VERSION_template_haskell(2,12,0)
+      []
+#else
+      (cxt [])
+#endif
 
   fromFieldInst <- instanceD (cxt []) [t| FromField $hsType |] . (:[]) $ do
     field <- newName "field"
