diff --git a/CHANGES.txt b/CHANGES.txt
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,7 @@
 Changelog for Derive
 
+2.5.25
+    #14, further GHC 8.0.1 updates
 2.5.24
     #14, update to GHC 8.0.1
     #15, move all the source files under src to speed up building
diff --git a/derive.cabal b/derive.cabal
--- a/derive.cabal
+++ b/derive.cabal
@@ -1,7 +1,7 @@
 cabal-version:  >= 1.8
 build-type:     Default
 name:           derive
-version:        2.5.24
+version:        2.5.25
 build-type:     Simple
 copyright:      Neil Mitchell 2006-2016
 author:         Neil Mitchell <ndmitchell@gmail.com>
diff --git a/src/Language/Haskell/Convert.hs b/src/Language/Haskell/Convert.hs
--- a/src/Language/Haskell/Convert.hs
+++ b/src/Language/Haskell/Convert.hs
@@ -4,6 +4,7 @@
 
 import Language.Haskell as HS
 import Language.Haskell.TH.Syntax as TH
+import Language.Haskell.TH.Compat
 import Control.Exception
 import Data.Typeable
 import System.IO.Unsafe
@@ -106,7 +107,7 @@
 
 
 instance Convert HS.Decl TH.Dec where
-    conv (InstDecl _ _ _ cxt nam typ ds) = InstanceD (c cxt) (c $ tyApp (TyCon nam) typ) [c d | InsDecl d <- ds]
+    conv (InstDecl _ _ _ cxt nam typ ds) = instanceD (c cxt) (c $ tyApp (TyCon nam) typ) [c d | InsDecl d <- ds]
     conv (FunBind ms@(HS.Match _ nam _ _ _ _:_)) = FunD (c nam) (c ms)
     conv (PatBind _ p bod ds) = ValD (c p) (c bod) (c ds)
     conv (TypeSig _ [nam] typ) = SigD (c nam) (c $ foralls typ)
diff --git a/src/Language/Haskell/TH/Compat.hs b/src/Language/Haskell/TH/Compat.hs
--- a/src/Language/Haskell/TH/Compat.hs
+++ b/src/Language/Haskell/TH/Compat.hs
@@ -15,6 +15,11 @@
 fromTyVar v = v
 #endif
 
+#if __GLASGOW_HASKELL__ >= 800
+instanceD = InstanceD Nothing
+#else
+instanceD = InstanceD
+#endif
 
 dataDefinitionTypeArgs :: Dec -> [Name]
 #if __GLASGOW_HASKELL__ >= 800
diff --git a/src/Language/Haskell/TH/Helper.hs b/src/Language/Haskell/TH/Helper.hs
--- a/src/Language/Haskell/TH/Helper.hs
+++ b/src/Language/Haskell/TH/Helper.hs
@@ -56,7 +56,7 @@
 instance_default n = instance_context [n] n
 
 instance_context :: [String] -> String -> DataDef -> [Dec] -> Dec
-instance_context req cls dat defs = InstanceD ctx hed defs
+instance_context req cls dat defs = instanceD ctx hed defs
     where
         vrs = vars 't' (dataArity dat)
         hed = l1 cls (lK (dataName dat) vrs)
@@ -70,7 +70,7 @@
 
 -- | Build an instance of a class for a data type, using the class at the given types
 generic_instance :: String -> DataDef -> [Type] -> [Dec] -> [Dec]
-generic_instance cls dat ctxTypes defs = [InstanceD ctx hed defs]
+generic_instance cls dat ctxTypes defs = [instanceD ctx hed defs]
     where
         vrs = vars 't' (dataArity dat)
         hed = l1 cls (lK (dataName dat) vrs)
diff --git a/src/Language/Haskell/TH/Peephole.hs b/src/Language/Haskell/TH/Peephole.hs
--- a/src/Language/Haskell/TH/Peephole.hs
+++ b/src/Language/Haskell/TH/Peephole.hs
@@ -1,5 +1,19 @@
 {-# LANGUAGE PatternGuards #-}
 
+{-# OPTIONS_GHC -Wwarn #-}
+{-
+Otherwise I get:
+
+src/Language/Haskell/TH/Peephole.hs:64:1: warning:
+    Pattern match checker exceeded (2000000) iterations in
+    an equation for ‘peep’. (Use -fmax-pmcheck-iterations=n
+    to set the maximun number of iterations to n)
+
+Seriously. Your warning checker is crap. My code is fine.
+Don't produce warnings about code I can't possibly fix.
+Especially not by default.
+-}
+
 module Language.Haskell.TH.Peephole(peephole, replaceVar, replaceVars) where
 
 import Language.Haskell.TH.Syntax
