diff --git a/fclabels.cabal b/fclabels.cabal
--- a/fclabels.cabal
+++ b/fclabels.cabal
@@ -1,5 +1,5 @@
 Name:          fclabels
-Version:       2.0.0.1
+Version:       2.0.0.2
 Author:        Sebastiaan Visser, Erik Hesselink, Chris Eidhof, Sjoerd Visscher
                with lots of help and feedback from others.
 Synopsis:      First class accessor labels implemented as lenses.
@@ -47,9 +47,9 @@
                See "Data.Label.Base" and "Data.Label.Monadic" for more
                information.
                .
-               * /Changelog from 2.0 to 2.0.0.1/
+               * /Changelog from 2.0.0.1 to 2.0.0.2/
                .
-               >   - Remove warnings on generated labels with OverloadedStrings.
+               >   - Fix deriving with data types with more than 24 fields.
 
 Maintainer:    Sebastiaan Visser <code@fvisser.nl>
 Homepage:      https://github.com/sebastiaanvisser/fclabels
diff --git a/src/Data/Label/Derive.hs b/src/Data/Label/Derive.hs
--- a/src/Data/Label/Derive.hs
+++ b/src/Data/Label/Derive.hs
@@ -438,7 +438,7 @@
       RecC    c fs  -> let s = take (length fs) in (conP c (s pats), var)
       InfixC  _ c _ -> (infixP (pats !! 0) c (pats !! 1), var)
       ForallC _ _ c -> case1 i c
-    where fresh = mkName . pure <$> delete 'f' ['a'..'z']
+    where fresh = mkName <$> delete "f" freshNames
           pats1 = varP <$> fresh
           pats  = replicate i wildP ++ [pats1 !! i] ++ repeat wildP
           var   = varE (fresh !! i)
@@ -463,13 +463,16 @@
                        , infixE (Just (vars !! 0)) (conE c) (Just (vars !! 1))
                        )
       ForallC _ _ c -> case1 i c
-    where fresh     = mkName . pure <$> delete 'f' (delete 'v' ['a'..'z'])
+    where fresh     = mkName <$> delete "f" (delete "v" freshNames)
           pats1     = varP <$> fresh
           pats      = take i pats1 ++ [wildP] ++ drop (i + 1) pats1
           vars1     = varE <$> fresh
           v         = varE (mkName "v")
           vars      = take i vars1 ++ [v] ++ drop (i + 1) vars1
           apps f as = foldl appE f as
+
+freshNames :: [String]
+freshNames = map pure ['a'..'z'] ++ map (('a':) . show) [0 :: Integer ..]
 
 -------------------------------------------------------------------------------
 
