diff --git a/avro.cabal b/avro.cabal
--- a/avro.cabal
+++ b/avro.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 639a04c94ec3749a4ac9ddc59885f5313d5d0a1220120baff521a3e36fc8d362
+-- hash: 6ce25074d44e607f3bbf1f81921a61fe9d8ea37a5cbde2000d26607b4d04d85a
 
 name:           avro
-version:        0.3.1.1
+version:        0.3.1.2
 synopsis:       Avro serialization support for Haskell
 description:    Avro serialization and deserialization support for Haskell
 category:       Data
diff --git a/src/Data/Avro/Deriving.hs b/src/Data/Avro/Deriving.hs
--- a/src/Data/Avro/Deriving.hs
+++ b/src/Data/Avro/Deriving.hs
@@ -47,6 +47,7 @@
 import qualified Data.ByteString.Lazy          as LBS
 import qualified Data.ByteString.Lazy.Char8    as LBSC8
 import qualified Data.HashMap.Strict           as HM
+import qualified Data.Set                      as S
 import           Data.Text                     (Text)
 import qualified Data.Text                     as T
 import qualified Data.Vector                   as V
@@ -55,18 +56,18 @@
 -- Generates data types, FromAvro and ToAvro instances.
 data DeriveOptions = DeriveOptions
   { -- | How to build field names for generated data types
-    doFieldNameBuilder :: TypeName -> Field -> Name
-  }
+    fieldNameBuilder :: TypeName -> Field -> T.Text
+  } deriving Generic
 
 -- | Default deriving options
 --
 -- @
 -- defaultDeriveOptions = 'DeriveOptions'
---   { doFieldNameBuilder = 'mkPrefixedFieldName'
+--   { fieldNameBuilder = 'mkPrefixedFieldName'
 --   }
 -- @
 defaultDeriveOptions = DeriveOptions
-  { doFieldNameBuilder = mkPrefixedFieldName
+  { fieldNameBuilder = mkPrefixedFieldName
   }
 
 -- | Generates a field name that is prefixed with the type name.
@@ -77,8 +78,8 @@
 -- @
 -- Person { personFirstName :: Text }
 -- @
-mkPrefixedFieldName :: TypeName -> Field -> Name
-mkPrefixedFieldName (TN dn) fld = mkTextName . sanitiseName $
+mkPrefixedFieldName :: TypeName -> Field -> T.Text
+mkPrefixedFieldName (TN dn) fld = sanitiseName $
   updateFirst T.toLower dn <> updateFirst T.toUpper (fldName fld)
 
 -- | Generates a field name that matches the field name in schema
@@ -92,8 +93,8 @@
 -- @
 -- You may want to enable 'DuplicateRecordFields' if you want to use this method.
 
-mkAsIsFieldName :: TypeName -> Field -> Name
-mkAsIsFieldName _ = mkTextName . sanitiseName . updateFirst T.toLower . fldName
+mkAsIsFieldName :: TypeName -> Field -> Text
+mkAsIsFieldName _ = sanitiseName . updateFirst T.toLower . fldName
 
 -- | Generates Haskell classes and 'FromAvro' and 'ToAvro' instances
 -- given the Avro schema file
@@ -221,7 +222,7 @@
             toAvro = $(genToAvroFieldsExp sname)
       |]
     genToAvroFieldsExp sname = [| \r -> record $(varE sname)
-        $(let assign fld = [| T.pack $(mkTextLit (fldName fld)) .= $(varE $ (doFieldNameBuilder opts) n fld) r |]
+        $(let assign fld = [| T.pack $(mkTextLit (fldName fld)) .= $(varE $ mkTextName $ (fieldNameBuilder opts) n fld) r |]
           in listE $ assign <$> fs
         )
       |]
@@ -404,7 +405,7 @@
 mkField :: DeriveOptions -> TypeName -> Field -> Q VarStrictType
 mkField opts prefix field = do
   ftype <- mkFieldTypeName (fldType field)
-  let fName = (doFieldNameBuilder opts) prefix field
+  let fName = mkTextName $ (fieldNameBuilder opts) prefix field
   pure (fName, defaultStrictness, ftype)
 
 genNewtype :: Name -> Q Dec
