diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -13,7 +13,7 @@
       disclaimer in the documentation and/or other materials provided
       with the distribution.
 
-    * Neither the name of Author name here nor the names of other
+    * Neither the name of Alexander Krupenkin here nor the names of other
       contributors may be used to endorse or promote products derived
       from this software without specific prior written permission.
 
diff --git a/rosmsg.cabal b/rosmsg.cabal
--- a/rosmsg.cabal
+++ b/rosmsg.cabal
@@ -1,5 +1,5 @@
 name:                rosmsg
-version:             0.4.3.3
+version:             0.4.4.0
 synopsis:            ROS message parser, render, TH
 description:         Please see README.md
 homepage:            https://github.com/RoboticsHS/rosmsg#readme
@@ -27,7 +27,7 @@
                      , bytestring           >= 0.10   && < 1
                      , lens-family          >= 1.2    && < 2
                      , data-default         >= 0.5    && < 1
-                     , template-haskell     >= 2.10   && < 2.11
+                     , template-haskell     >= 2.10   && < 2.12
 
   other-modules:       Robotics.ROS.Msg.ROSArray
   default-language:    Haskell2010
diff --git a/src/Robotics/ROS/Msg/TH.hs b/src/Robotics/ROS/Msg/TH.hs
--- a/src/Robotics/ROS/Msg/TH.hs
+++ b/src/Robotics/ROS/Msg/TH.hs
@@ -10,6 +10,7 @@
 -- Template Haskell driven code generator from ROS message language
 -- to Haskell native representation.
 --
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE QuasiQuotes #-}
 {-# LANGUAGE KindSignatures #-}
@@ -189,6 +190,15 @@
 instanceD' name insType insDecs =
     instanceD (cxt []) (appT insType (conT name)) insDecs
 
+-- | Simple data type declaration with one constructor
+dataD' :: Name -> ConQ -> [Name] -> DecQ
+dataD' name rec derive =
+#if __GLASGOW_HASKELL__ < 800
+    dataD (cxt []) name [] [rec] derive
+#else
+    dataD (cxt []) name [] Nothing [rec] $ cxt (conT <$> derive)
+#endif
+
 -- | Simple function declaration
 funD' :: String -> [PatQ] -> ExpQ -> DecQ
 funD' name p f = funD (mkName name) [clause p (normalB f) []]
@@ -201,7 +211,7 @@
 -- | Data type declaration
 mkData :: Name -> MsgDefinition -> [DecQ]
 mkData name msg = pure $
-    dataD (cxt []) name [] [recs] derivingD
+    dataD' name recs derivingD
   where
     fields     = sanitizeField <$> msg
     recs       = recC name (catMaybes (fieldQ <$> fields))
