diff --git a/CHANGES.txt b/CHANGES.txt
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,7 @@
 Changelog for record-dot-preprocessor
 
+0.2.5, released 2020-05-06
+    #28, deal with kind signatures on data types
 0.2.4, released 2020-05-04
     #3, emit more LINE declarations
 0.2.3, released 2020-04-01
diff --git a/examples/Both.hs b/examples/Both.hs
--- a/examples/Both.hs
+++ b/examples/Both.hs
@@ -1,14 +1,14 @@
 -- Test for everything that is supported by both the plugin and the preprocessor
 
 {-# OPTIONS_GHC -Werror -Wall -Wno-type-defaults -Wno-partial-type-signatures #-} -- can we produce -Wall clean code
-{-# LANGUAGE PartialTypeSignatures, GADTs, StandaloneDeriving, DataKinds #-} -- also tests we put language extensions before imports
+{-# LANGUAGE PartialTypeSignatures, GADTs, StandaloneDeriving, DataKinds, KindSignatures #-} -- also tests we put language extensions before imports
 
 import Control.Exception
 import Data.Version
 import Data.Proxy
 
 main :: IO ()
-main = test1 >> test2 >> test3 >> test4 >> test5 >> test6 >> putStrLn "All worked"
+main = test1 >> test2 >> test3 >> test4 >> test5 >> test6 >> test7 >> putStrLn "All worked"
 
 (===) :: (Show a, Eq a) => a -> a -> IO ()
 a === b = if a == b then pure () else fail $ "Mismatch, " ++ show a ++ " /= " ++ show b
@@ -172,3 +172,13 @@
 test6 = do
     _ <- evaluate typeProxy
     return ()
+
+
+-- ---------------------------------------------------------------------
+-- Deal with kind signatures
+
+data UserF (f :: * -> *) = UserF { userf_name :: String }
+
+test7 :: IO ()
+test7 = do
+    (UserF "test").userf_name === "test"
diff --git a/preprocessor/Edit.hs b/preprocessor/Edit.hs
--- a/preprocessor/Edit.hs
+++ b/preprocessor/Edit.hs
@@ -188,8 +188,13 @@
         whole xs
             | PL typeName : xs <- xs
             , (typeArgs, _:xs) <- break (isPL "=" ||^ isPL "where") xs
-            = Just $ Record typeName [x | PL x <- typeArgs] $ nubOrd $ ctor xs
+            = Just $ Record typeName (mapMaybe typeArg typeArgs) $ nubOrd $ ctor xs
         whole _ = Nothing
+
+        -- some types are raw, some are in brackets (with a kind signature)
+        typeArg (PL x) = Just x
+        typeArg (Paren _ (x:_) _) = typeArg x
+        typeArg _ = Nothing
 
         ctor xs
             | xs <- dropContext xs
diff --git a/record-dot-preprocessor.cabal b/record-dot-preprocessor.cabal
--- a/record-dot-preprocessor.cabal
+++ b/record-dot-preprocessor.cabal
@@ -1,7 +1,7 @@
 cabal-version:      >= 1.18
 build-type:         Simple
 name:               record-dot-preprocessor
-version:            0.2.4
+version:            0.2.5
 license:            BSD3
 x-license:          BSD-3-Clause OR Apache-2.0
 license-file:       LICENSE
diff --git a/test/PluginExample.hs b/test/PluginExample.hs
--- a/test/PluginExample.hs
+++ b/test/PluginExample.hs
@@ -17,7 +17,7 @@
 
 {-# OPTIONS_GHC -fplugin=RecordDotPreprocessor -w #-}
 {-# LANGUAGE DuplicateRecordFields, TypeApplications, FlexibleContexts, DataKinds, MultiParamTypeClasses, TypeSynonymInstances, FlexibleInstances #-}
-{-# LANGUAGE PartialTypeSignatures, GADTs, StandaloneDeriving #-} -- because it's now treated as a comment
+{-# LANGUAGE PartialTypeSignatures, GADTs, StandaloneDeriving, KindSignatures #-} -- because it's now treated as a comment
 module PluginExample where
 #include "../examples/Both.hs"
 
