diff --git a/flexible-defaults.cabal b/flexible-defaults.cabal
--- a/flexible-defaults.cabal
+++ b/flexible-defaults.cabal
@@ -1,6 +1,6 @@
 name:                   flexible-defaults
-version:                0.0.0.2
-stability:              experimental
+version:                0.0.0.3
+stability:              provisional
 
 cabal-version:          >= 1.6
 build-type:             Simple
@@ -28,21 +28,15 @@
                         when multiple possible choices could be made, the
                         library can choose the \"best\" one.
                         .
+                        Changes in v0.0.0.3:  Added a hack to fix under GHC 7.2.
+                        .
                         Changes in v0.0.0.2:  Nothing at all except setting 
                         'buildable: False' under GHC 7.2.1.
-                        Technically it builds on 7.2.1, but it doesn't actually generate
-                        correct code due to http://hackage.haskell.org/trac/ghc/ticket/5410
-                        which has been patched and will almost certainly be fixed in the next
-                        GHC release.  AFAIK 7.2.1 is the only release where this bug actually
-                        caused problems.  I'm sure it could be worked around, but it's a 
-                        whole lot easier to just say "wait for 7.2.2/7.4".  If anyone 
-                        desperately needs this package under 7.2.1, let me know and I'll
-                        see what I can do.
 
 extra-source-files:     examples/*.hs
 
-tested-with:            GHC == 6.8.3, GHC == 6.10.4, GHC == 6.12.1,
-                        GHC == 6.12.3, GHC == 7.0.1, GHC == 7.0.2
+tested-with:            GHC == 6.8.3, GHC == 6.10.4, GHC == 6.12.3,
+                        GHC == 7.0.4, GHC == 7.2.1, GHC == 7.2.2
 
 source-repository head
   type:                 git
@@ -57,6 +51,5 @@
   build-depends:        base >= 3 && <5,
                         containers,
                         template-haskell,
+                        th-extras,
                         transformers
-  if impl(ghc == 7.2.1)
-    buildable:          False
diff --git a/src/Language/Haskell/TH/FlexibleDefaults.hs b/src/Language/Haskell/TH/FlexibleDefaults.hs
--- a/src/Language/Haskell/TH/FlexibleDefaults.hs
+++ b/src/Language/Haskell/TH/FlexibleDefaults.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE CPP #-}
 -- |A code-generation system for complex typeclass default-implementation
 -- configurations.  There are usage examples in this package's source 
 -- distribution[1] and in the random-source package[2].
@@ -30,41 +29,21 @@
 import qualified Data.Map as M
 import qualified Data.Set as S
 import Language.Haskell.TH
+import Language.Haskell.TH.Extras
 import Language.Haskell.TH.FlexibleDefaults.DSL
 import Language.Haskell.TH.FlexibleDefaults.Solve
 
-declaredValueNames :: Dec -> [Name]
-declaredValueNames (FunD n _)    = [n]
-declaredValueNames (ValD p _ _)  = matchedNames p
-declaredValueNames _ = []
-
-matchedNames :: Pat -> [Name]
-matchedNames (VarP n)           = [n]
-matchedNames (TupP ps)          = concatMap matchedNames ps
-matchedNames (InfixP p1 _ p2)   = matchedNames p1 ++ matchedNames p2
-matchedNames (TildeP p)         = matchedNames p
-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 612
-matchedNames (BangP p)          = matchedNames p
-#endif
-matchedNames (AsP n p)          = n : matchedNames p
-matchedNames (RecP _ fs)        = concatMap (matchedNames . snd) fs
-matchedNames (ListP ps)         = concatMap matchedNames ps
-matchedNames (SigP p _)         = matchedNames p
-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 700
-matchedNames (ViewP _ p)        = matchedNames p
-#endif
-matchedNames _                  = []
-
 deleteKeys :: Ord k => S.Set k -> M.Map k v -> M.Map k v
 deleteKeys ks m = m M.\\ M.fromDistinctAscList [(k,()) | k <- S.toAscList ks]
 
 -- |Given a partial list of function declarations, complete that list based on
 -- the 'Defaults' specification given.
 implementDefaults :: (Ord s, Monoid s) => Defaults s () -> [Dec] -> Q [Dec]
-implementDefaults defs decs = do
-    let prob = toProblem defs
+implementDefaults defs futzedDecs = do
+    let decs = genericalizeDecs futzedDecs
+        prob = toProblem defs
         
-        implemented = S.fromList (map nameBase (concatMap declaredValueNames decs))
+        implemented = S.fromList (map nameBase (concatMap namesBoundInDec decs))
         unimplemented = deleteKeys implemented prob
         
         solutions = chooseImplementations unimplemented
