diff --git a/Lens/Family/TH.hs b/Lens/Family/TH.hs
--- a/Lens/Family/TH.hs
+++ b/Lens/Family/TH.hs
@@ -5,16 +5,20 @@
 -- Example usage:
 -- 
 -- 
--- > {-# LANGUAGE TemplateHaskell -#}
+-- > {-# LANGUAGE TemplateHaskell #-}
 -- > 
 -- > import Lens.Family
 -- > import Lens.Family.TH
 -- > 
 -- > data Foo a = Foo { _bar :: Int, _baz :: a }
--- >            deriving (Show, Read, Eq, ord)
+-- >            deriving (Show, Read, Eq, Ord)
 -- > $(mkLenses ''Foo)
 -- 
-module Lens.Family.TH (mkLenses, mkLensesBy) where
+module Lens.Family.TH (
+    mkLenses
+  , mkLensesBy
+  , mkLensesFor
+  ) where
 
 import Language.Haskell.TH
 import Lens.Family.THCore
@@ -23,12 +27,35 @@
 -- | Derive lenses for the record selectors in 
 -- a single-constructor data declaration,
 -- or for the record selector in a newtype declaration.
+-- Lenses will only be generated for record fields which
+-- are prefixed with an underscore.
+-- 
+-- Example usage:
+-- 
+-- $(mkLenses ''Foo)
 mkLenses :: Name -> Q [Dec]
 mkLenses = mkLensesBy defaultNameTransform
 
--- | Derive lenses with the provided name transformation function.
-mkLensesBy :: (String -> String) -> Name -> Q [Dec]
+
+-- | Derive lenses with the provided name transformation
+-- and filtering function. Produce @Just lensName@ to generate a lens
+-- of the resultant name, or @Nothing@ to not generate a lens
+-- for the input record name.
+-- 
+-- Example usage:
+-- 
+-- > $(mkLensesBy (\n -> Just (n ++ "L")) ''Foo)
+mkLensesBy :: (String -> Maybe String) -> Name -> Q [Dec]
 mkLensesBy = deriveLenses deriveLensSig
+
+
+-- | Derive lenses, specifying explicit pairings of @(fieldName, lensName)@.
+-- 
+-- Example usage:
+-- 
+-- > $(mkLensesFor [("_foo", "fooLens"), ("bar", "lbar")] ''Foo)
+mkLensesFor :: [(String, String)] -> Name -> Q [Dec]
+mkLensesFor fields = mkLensesBy (`lookup` fields)
 
 
 -- TODO
diff --git a/Lens/Family/THCore.hs b/Lens/Family/THCore.hs
--- a/Lens/Family/THCore.hs
+++ b/Lens/Family/THCore.hs
@@ -13,11 +13,12 @@
 
 -- | By default, if the field name begins with an underscore,
 -- then the underscore will simply be removed (and the new first character
--- lowercased if necessary). Otherwise, the suffix "Lens" will be added.
-defaultNameTransform :: String -> String
-defaultNameTransform ('_':c:rest) = toLower c : rest
-defaultNameTransform n = n ++ "Lens"
+-- lowercased if necessary).
+defaultNameTransform :: String -> Maybe String
+defaultNameTransform ('_':c:rest) = Just $ toLower c : rest
+defaultNameTransform _ = Nothing
 
+
 -- | Information about the larger type the lens will operate on.
 type LensTypeInfo = (Name, [TyVarBndr])
 
@@ -27,11 +28,12 @@
 
 -- | The true workhorse of lens derivation. This macro is parameterized
 -- by a macro that derives signatures, as well as a function that
--- transforms names.
+-- filters and transforms names. Producing Nothing means that
+-- a lens should not be generated for the provided name.
 deriveLenses ::
      (Name -> LensTypeInfo -> ConstructorFieldInfo -> Q [Dec])
      -- ^ the signature deriver
-  -> (String -> String)
+  -> (String -> Maybe String)
      -- ^ the name transformer
   -> Name -> Q [Dec]
 deriveLenses sigDeriver nameTransform datatype = do
@@ -75,15 +77,18 @@
 -- Derive a lens for the given record selector
 -- using the given name transformation function.
 deriveLens :: (Name -> LensTypeInfo -> ConstructorFieldInfo -> Q [Dec])
-           -> (String -> String)
+           -> (String -> Maybe String)
            -> LensTypeInfo -> ConstructorFieldInfo -> Q [Dec]
 deriveLens sigDeriver nameTransform ty field = do
   let (fieldName, _fieldStrict, _fieldType) = field
       (_tyName, _tyVars) = ty  -- just to clarify what's here
-      lensName = mkName $ nameTransform $ nameBase fieldName
-  sig <- sigDeriver lensName ty field
-  body <- deriveLensBody lensName fieldName
-  return $ sig ++ [body]
+  case nameTransform (nameBase fieldName) of
+    Nothing       -> return []
+    Just lensNameStr -> do
+      let lensName = mkName lensNameStr
+      sig  <- sigDeriver lensName ty field
+      body <- deriveLensBody lensName fieldName
+      return $ sig ++ [body]
 
 
 -- Given a record field name,
diff --git a/Lens/Family2/TH.hs b/Lens/Family2/TH.hs
--- a/Lens/Family2/TH.hs
+++ b/Lens/Family2/TH.hs
@@ -5,16 +5,20 @@
 -- Example usage:
 -- 
 -- 
--- > {-# LANGUAGE TemplateHaskell, Rank2Types -#}
+-- > {-# LANGUAGE TemplateHaskell, Rank2Types #-}
 -- > 
 -- > import Lens.Family2
 -- > import Lens.Family2.TH
 -- > 
 -- > data Foo a = Foo { _bar :: Int, _baz :: a }
--- >            deriving (Show, Read, Eq, ord)
+-- >            deriving (Show, Read, Eq, Ord)
 -- > $(mkLenses ''Foo)
 -- 
-module Lens.Family2.TH (mkLenses, mkLensesBy) where
+module Lens.Family2.TH (
+    mkLenses
+  , mkLensesBy
+  , mkLensesFor
+  ) where
 
 import Language.Haskell.TH
 import Lens.Family.THCore
@@ -23,12 +27,35 @@
 -- | Derive lenses for the record selectors in 
 -- a single-constructor data declaration,
 -- or for the record selector in a newtype declaration.
+-- Lenses will only be generated for record fields which
+-- are prefixed with an underscore.
+-- 
+-- Example usage:
+-- 
+-- $(mkLenses ''Foo)
 mkLenses :: Name -> Q [Dec]
 mkLenses = mkLensesBy defaultNameTransform
 
--- | Derive lenses with the provided name transformation function.
-mkLensesBy :: (String -> String) -> Name -> Q [Dec]
+
+-- | Derive lenses with the provided name transformation
+-- and filtering function. Produce @Just lensName@ to generate a lens
+-- of the resultant name, or @Nothing@ to not generate a lens
+-- for the input record name.
+-- 
+-- Example usage:
+-- 
+-- > $(mkLensesBy (\n -> Just (n ++ "L")) ''Foo)
+mkLensesBy :: (String -> Maybe String) -> Name -> Q [Dec]
 mkLensesBy = deriveLenses deriveLensSig
+
+
+-- | Derive lenses, specifying explicit pairings of @(fieldName, lensName)@.
+-- 
+-- Example usage:
+-- 
+-- > $(mkLensesFor [("_foo", "fooLens"), ("bar", "lbar")] ''Foo)
+mkLensesFor :: [(String, String)] -> Name -> Q [Dec]
+mkLensesFor fields = mkLensesBy (`lookup` fields)
 
 
 -- TODO
diff --git a/lens-family-th.cabal b/lens-family-th.cabal
--- a/lens-family-th.cabal
+++ b/lens-family-th.cabal
@@ -1,33 +1,35 @@
 name:                lens-family-th
-version:             0.1.0.0
-synopsis:            Template Haskell to generate lenses for
-                     lens-family and lens-family-core
+version:             0.2.0.0
+synopsis:            Generate lens-family style lenses
 
 description:
   Due to a cabal/hackage defect, curly braces cannot be
   adequately displayed here. Please see
   <http://github.com/DanBurton/lens-family-th#readme>
-  for a proper description.
+  for a proper description of this package.
   .
   (See <https://github.com/haskell/cabal/issues/968>
   for the ticket I created regarding the defect.)
 
-
-homepage:            http://github.com/DanBurton/lens-family-th
 license:             BSD3
 license-file:        LICENSE
 author:              Dan Burton
-maintainer:          danburton.email@gmail.com
 copyright:           (c) Dan Burton 2012
 
+homepage:            http://github.com/DanBurton/lens-family-th#readme
+bug-reports:         http://github.com/DanBurton/lens-family-th/issues
+maintainer:          danburton.email@gmail.com
+
+
 category:            Data
 build-type:          Simple
 cabal-version:       >=1.8
 
 library
   exposed-modules:     Lens.Family.TH, Lens.Family2.TH, Lens.Family.THCore
-  build-depends:       base ==4.*, template-haskell ==2.7.*
+  build-depends:       base ==4.*, template-haskell >= 2.5 && < 2.8
 
+
 source-repository head
   type:      git
   location:  git://github.com/DanBurton/lens-family-th.git
@@ -35,4 +37,4 @@
 source-repository this
   type:      git
   location:  git://github.com/DanBurton/lens-family-th.git
-  tag:       lens-family-th-0.1.0.0
+  tag:       lens-family-th-0.2.0.0
