diff --git a/src/Language/Haskell/TH/Instances.hs b/src/Language/Haskell/TH/Instances.hs
--- a/src/Language/Haskell/TH/Instances.hs
+++ b/src/Language/Haskell/TH/Instances.hs
@@ -11,6 +11,8 @@
 #if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 704
 # define LANGUAGE_DeriveGeneric
 {-# LANGUAGE DeriveGeneric #-}
+#else
+{-# LANGUAGE TypeFamilies #-}
 #endif
 
 {-# OPTIONS_GHC -fno-warn-deprecations #-}
@@ -90,8 +92,10 @@
 import Data.Data hiding (Fixity(..))
 # endif
 
-# if defined(LANGUAGE_DeriveGeneric)
+# if __GLASGOW_HASKELL__ > 702
 import GHC.Generics (Generic)
+# else
+import qualified Generics.Deriving.TH as Generic (deriveAll)
 # endif
 #endif
 
@@ -196,6 +200,29 @@
 deriving instance Generic Stmt
 deriving instance Generic Strict
 deriving instance Generic Type
+# else
+$(Generic.deriveAll ''Body)
+$(Generic.deriveAll ''Callconv)
+$(Generic.deriveAll ''Clause)
+$(Generic.deriveAll ''Con)
+$(Generic.deriveAll ''Dec)
+$(Generic.deriveAll ''Exp)
+$(Generic.deriveAll ''Fixity)
+$(Generic.deriveAll ''FixityDirection)
+$(Generic.deriveAll ''Foreign)
+$(Generic.deriveAll ''FunDep)
+$(Generic.deriveAll ''Guard)
+$(Generic.deriveAll ''Info)
+$(Generic.deriveAll ''Lit)
+$(Generic.deriveAll ''Match)
+$(Generic.deriveAll ''Name)
+$(Generic.deriveAll ''NameSpace)
+$(Generic.deriveAll ''Pat)
+$(Generic.deriveAll ''Range)
+$(Generic.deriveAll ''Safety)
+$(Generic.deriveAll ''Stmt)
+$(Generic.deriveAll ''Strict)
+$(Generic.deriveAll ''Type)
 # endif
 
 # if MIN_VERSION_template_haskell(2,3,0)
@@ -222,6 +249,8 @@
 
 #  if defined(LANGUAGE_DeriveGeneric)
 deriving instance Generic Loc
+#  else
+$(Generic.deriveAll ''Loc)
 #  endif
 # endif
 
@@ -239,6 +268,14 @@
 deriving instance Generic Pragma
 deriving instance Generic Pred
 deriving instance Generic TyVarBndr
+#  else
+$(Generic.deriveAll ''FamFlavour)
+$(Generic.deriveAll ''ModName)
+$(Generic.deriveAll ''OccName)
+$(Generic.deriveAll ''PkgName)
+$(Generic.deriveAll ''Pragma)
+$(Generic.deriveAll ''Pred)
+$(Generic.deriveAll ''TyVarBndr)
 #  endif
 
 #  if !(MIN_VERSION_template_haskell(2,8,0))
@@ -248,6 +285,9 @@
 #   if defined(LANGUAGE_DeriveGeneric)
 deriving instance Generic InlineSpec
 deriving instance Generic Kind
+#   else
+$(Generic.deriveAll ''InlineSpec)
+$(Generic.deriveAll ''Kind)
 #   endif
 #  endif
 # endif
@@ -258,6 +298,8 @@
 
 #  if defined(LANGUAGE_DeriveGeneric)
 deriving instance Generic ClassInstance
+#  else
+$(Generic.deriveAll ''ClassInstance)
 #  endif
 # endif
 
@@ -280,6 +322,12 @@
 deriving instance Generic RuleBndr
 deriving instance Generic RuleMatch
 deriving instance Generic TyLit
+#  else
+$(Generic.deriveAll ''Inline)
+$(Generic.deriveAll ''Phases)
+$(Generic.deriveAll ''RuleBndr)
+$(Generic.deriveAll ''RuleMatch)
+$(Generic.deriveAll ''TyLit)
 #  endif
 # endif
 
@@ -303,6 +351,13 @@
 deriving instance Generic ModuleInfo
 deriving instance Generic Role
 deriving instance Generic TySynEqn
+#  else
+$(Generic.deriveAll ''AnnLookup)
+$(Generic.deriveAll ''AnnTarget)
+$(Generic.deriveAll ''Module)
+$(Generic.deriveAll ''ModuleInfo)
+$(Generic.deriveAll ''Role)
+$(Generic.deriveAll ''TySynEqn)
 #  endif
 # else
 deriving instance Show ModName
diff --git a/th-orphans.cabal b/th-orphans.cabal
--- a/th-orphans.cabal
+++ b/th-orphans.cabal
@@ -1,5 +1,5 @@
 name:               th-orphans
-version:            0.12.1
+version:            0.12.2
 cabal-version:      >= 1.10
 build-type:         Simple
 license:            BSD3
@@ -25,6 +25,10 @@
                     th-lift >= 0.7.1,
                     th-reify-many >= 0.1 && < 0.2,
                     mtl
+
+  -- Use TH to derive Generics instances instead of DeriveGeneric, for < 7.4
+  if impl(ghc < 7.4)
+    build-depends:  generic-deriving >= 1.8
 
   -- Prior to GHC 7.6, GHC generics lived in ghc-prim
   if impl(ghc >= 7.2) && impl(ghc < 7.6)
