diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,12 @@
+0.16.1.3
+========
+
+_Andreas Abel, 2023-08-03_
+
+- Support template-haskell-2.21
+  ([#162](https://github.com/acid-state/acid-state/pull/162))
+- Tested with GHC 7.8 - 9.8.1-alpha1
+
 0.16.1.2
 ========
 
diff --git a/acid-state.cabal b/acid-state.cabal
--- a/acid-state.cabal
+++ b/acid-state.cabal
@@ -1,5 +1,5 @@
 Name:                acid-state
-Version:             0.16.1.2
+Version:             0.16.1.3
 Synopsis:            Add ACID guarantees to any serializable Haskell data structure.
 Description:         Use regular Haskell data structures as your database and get stronger ACID guarantees than most RDBMS offer.
 Homepage:            https://github.com/acid-state/acid-state
@@ -12,9 +12,9 @@
 Cabal-version:       >=1.10
 
 tested-with:
-  GHC == 9.6.1
-  GHC == 9.4.4
-  GHC == 9.2.7
+  GHC == 9.6.2
+  GHC == 9.4.5
+  GHC == 9.2.8
   GHC == 9.0.2
   GHC == 8.10.7
   GHC == 8.8.4
@@ -71,7 +71,7 @@
                        mtl,
                        network < 3.2,
                        network-bsd,
-                       template-haskell < 2.21,
+                       template-haskell < 2.22,
                        th-expand-syns
 
   if os(windows)
diff --git a/src/Data/Acid/TemplateHaskell.hs b/src/Data/Acid/TemplateHaskell.hs
--- a/src/Data/Acid/TemplateHaskell.hs
+++ b/src/Data/Acid/TemplateHaskell.hs
@@ -88,20 +88,36 @@
          case stateInfo of
            TyConI tycon
              ->case tycon of
+
 #if MIN_VERSION_template_haskell(2,11,0)
                  DataD _cxt _name tyvars _kind constructors _derivs
 #else
                  DataD _cxt _name tyvars constructors _derivs
 #endif
+#if MIN_VERSION_template_haskell(2,21,0)
+                   -> makeAcidic' ss eventNames stateName (map void tyvars) constructors
+#else
                    -> makeAcidic' ss eventNames stateName tyvars constructors
+#endif
+
 #if MIN_VERSION_template_haskell(2,11,0)
                  NewtypeD _cxt _name tyvars _kind constructor _derivs
 #else
                  NewtypeD _cxt _name tyvars constructor _derivs
 #endif
+#if MIN_VERSION_template_haskell(2,21,0)
+                   -> makeAcidic' ss eventNames stateName (map void tyvars) [constructor]
+#else
                    -> makeAcidic' ss eventNames stateName tyvars [constructor]
+#endif
+
                  TySynD _name tyvars _ty
+#if MIN_VERSION_template_haskell(2,21,0)
+                   -> makeAcidic' ss eventNames stateName (map void tyvars) []
+#else
                    -> makeAcidic' ss eventNames stateName tyvars []
+#endif
+
                  _ -> error "Data.Acid.TemplateHaskell: Unsupported state type. Only 'data', 'newtype' and 'type' are supported."
            _ -> error "Data.Acid.TemplateHaskell: Given state is not a type."
 
@@ -325,7 +341,10 @@
              cxt = [''Typeable]
 #endif
          case args of
-#if MIN_VERSION_template_haskell(2,11,0)
+#if MIN_VERSION_template_haskell(2,21,0)
+          [_] -> newtypeD (return []) eventStructName (map (BndrReq <$) tyvars) Nothing con cxt
+          _   -> dataD (return []) eventStructName (map (BndrReq <$) tyvars) Nothing [con] cxt
+#elif MIN_VERSION_template_haskell(2,11,0)
           [_] -> newtypeD (return []) eventStructName tyvars Nothing con cxt
           _   -> dataD (return []) eventStructName tyvars Nothing [con] cxt
 #else
diff --git a/test-state/OldStateTest1/events-0000000681.log b/test-state/OldStateTest1/events-0000000681.log
new file mode 100644
--- /dev/null
+++ b/test-state/OldStateTest1/events-0000000681.log
diff --git a/test-state/OldStateTest2/events-0000000149.log b/test-state/OldStateTest2/events-0000000149.log
new file mode 100644
--- /dev/null
+++ b/test-state/OldStateTest2/events-0000000149.log
diff --git a/test-state/OldStateTest3/events-0000000100.log b/test-state/OldStateTest3/events-0000000100.log
new file mode 100644
--- /dev/null
+++ b/test-state/OldStateTest3/events-0000000100.log
