diff --git a/random-source.cabal b/random-source.cabal
--- a/random-source.cabal
+++ b/random-source.cabal
@@ -1,5 +1,5 @@
 name:                   random-source
-version:                0.3
+version:                0.3.0.2
 stability:              provisional
 
 cabal-version:          >= 1.6
@@ -18,16 +18,22 @@
                         \"completing\" partial implementations, making it
                         easy to define new entropy sources in a way that
                         is naturally forward-compatible.
+                        .
+                        Changes in 0.3.0.2: Fixes for GHC 7.2.*'s crazy
+                        Template Haskell changes.
+                        .
+                        Changes in 0.3.0.1: None except setting dependency
+                        on flexible-defaults >= 0.0.0.2.
 
-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
   location:             https://github.com/mokus0/random-fu.git
   subdir:               random-source
 
-Flag splitBase
+Flag base4
     Description:        base-4 and above do not include syb
 
 Flag mtl2
@@ -63,16 +69,17 @@
   else
     build-depends:      mtl == 1.*
   
-  if flag(splitBase)
+  if flag(base4)
     build-depends:      base >= 4 && <5, syb
   else
     build-depends:      base >= 3 && <4
   
-  build-depends:        flexible-defaults,
+  build-depends:        flexible-defaults >= 0.0.0.2,
                         mersenne-random-pure64,
                         random,
                         stateref >= 0.3 && < 0.4,
-                        template-haskell
+                        template-haskell,
+                        th-extras
 
   if os(Windows)
     cpp-options:        -Dwindows
diff --git a/src/Data/Random/Internal/TH.hs b/src/Data/Random/Internal/TH.hs
--- a/src/Data/Random/Internal/TH.hs
+++ b/src/Data/Random/Internal/TH.hs
@@ -10,6 +10,7 @@
 import Data.Random.Internal.Source (Prim(..), MonadRandom(..), RandomSource(..))
 import Data.Random.Internal.Words
 import Language.Haskell.TH
+import Language.Haskell.TH.Extras
 import qualified Language.Haskell.TH.FlexibleDefaults as FD
 
 import Control.Monad.Reader
@@ -105,9 +106,6 @@
 noinline :: ReaderT Context (FD.Implementation s) ()
 noinline = lift FD.noinline
 
-replace :: (a -> Maybe a) -> (a -> a)
-replace = ap fromMaybe
-
 replaceMethodName :: (Method -> Name) -> Name -> Name
 replaceMethodName f = replace (fmap f . nameToMethod Generic)
 
@@ -117,7 +115,8 @@
 -- map all occurrences of generic method names to the proper local ones
 -- and introduce a 'src' parameter where needed if the Context is RandomSource
 specialize :: Monad m => Q [Dec] -> ReaderT Context m (Q [Dec])
-specialize decQ = do
+specialize futzedDecsQ = do
+    let decQ = fmap genericalizeDecs futzedDecsQ
     c <- ask
     let specializeDec = everywhere (mkT (changeContext Generic c))
     if c == RandomSource
@@ -166,9 +165,6 @@
 getWord64           = dummy GetWord64
 getDouble           = dummy GetDouble
 getNByteInteger     = dummy GetNByteInteger
-
-intIs64 :: Bool
-intIs64 = toInteger (maxBound :: Int) > 2^32
 
 -- The defaulting rules for RandomSource and MonadRandom.  Costs are rates of
 -- entropy waste (bits discarded per bit requested) plus the occasional ad-hoc
