diff --git a/Data/Derive/Arbitrary.hs b/Data/Derive/Arbitrary.hs
--- a/Data/Derive/Arbitrary.hs
+++ b/Data/Derive/Arbitrary.hs
@@ -23,7 +23,6 @@
 -}
 
 import Data.Derive.DSL.HSE
-import qualified Language.Haskell as H
 import Data.List
 import Data.Generics.Uniplate.DataOnly
 
diff --git a/Data/Derive/DSL/HSE.hs b/Data/Derive/DSL/HSE.hs
--- a/Data/Derive/DSL/HSE.hs
+++ b/Data/Derive/DSL/HSE.hs
@@ -3,7 +3,6 @@
 module Data.Derive.DSL.HSE(module Data.Derive.DSL.HSE, module Language.Haskell) where
 
 import Language.Haskell hiding (List, App, String, Int)
-import qualified Language.Haskell.Exts as H
 import Data.Data
 import Data.Generics.Uniplate.DataOnly
 import Data.Maybe
diff --git a/Data/Derive/Internal/Traversal.hs b/Data/Derive/Internal/Traversal.hs
--- a/Data/Derive/Internal/Traversal.hs
+++ b/Data/Derive/Internal/Traversal.hs
@@ -71,8 +71,8 @@
         }
 
 data RequiredInstance = RequiredInstance
-        { requiredDataArg  :: String -- ^ What argument of the current data type?
-        , requiredPosition :: Int    -- ^ What argument position of that type?
+        { _requiredDataArg  :: String -- ^ What argument of the current data type?
+        , _requiredPosition :: Int    -- ^ What argument position of that type?
         }
       deriving (Eq, Ord)
 
diff --git a/Data/Derive/Read.hs b/Data/Derive/Read.hs
--- a/Data/Derive/Read.hs
+++ b/Data/Derive/Read.hs
@@ -71,7 +71,6 @@
             , (x2, r3) <- readsPrec 11 r2]) r
 
 -}
-import Data.List
 import Data.Derive.DSL.HSE
 import qualified Language.Haskell as H
 
diff --git a/Data/Derive/Ref.hs b/Data/Derive/Ref.hs
--- a/Data/Derive/Ref.hs
+++ b/Data/Derive/Ref.hs
@@ -23,8 +23,6 @@
 
 import Language.Haskell
 import Data.Derive.Internal.Derivation
-import Data.List
-import Data.Char
 
 
 makeRef :: Derivation
diff --git a/Data/Derive/UniplateDirect.hs b/Data/Derive/UniplateDirect.hs
--- a/Data/Derive/UniplateDirect.hs
+++ b/Data/Derive/UniplateDirect.hs
@@ -99,7 +99,7 @@
 
 make :: Bool -> (String -> DataDecl) -> Type -> Type -> Either String [Decl]
 make uni grab from to = Right [InstDecl sl [] (UnQual $ Ident $ if uni then "Uniplate" else "Biplate") (from : [to | not uni])
-        [InsInline sl True AlwaysActive (qname $ if uni then "uniplate" else "biplate"), InsDecl ms]]
+        [InsDecl $ InlineSig sl True AlwaysActive (qname $ if uni then "uniplate" else "biplate"), InsDecl ms]]
     where
         ty = grab $ tyRoot from
         match pat bod = Match sl (Ident $ if uni then "uniplate" else "biplate") [pat] Nothing (UnGuardedRhs bod) (BDecls [])
diff --git a/Derive/Test.hs b/Derive/Test.hs
--- a/Derive/Test.hs
+++ b/Derive/Test.hs
@@ -10,7 +10,6 @@
 import System.Cmd
 import System.Exit
 import Control.Arrow
-import Data.Char
 import Data.Derive.All
 import Data.Derive.Internal.Derivation
 
diff --git a/Derive/Utils.hs b/Derive/Utils.hs
--- a/Derive/Utils.hs
+++ b/Derive/Utils.hs
@@ -8,7 +8,6 @@
 import System.IO
 import System.FilePath
 import Control.Monad
-import Data.Char
 import Data.Maybe
 
 
diff --git a/Language/Haskell/Convert.hs b/Language/Haskell/Convert.hs
--- a/Language/Haskell/Convert.hs
+++ b/Language/Haskell/Convert.hs
@@ -88,6 +88,27 @@
     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)
+    conv (DataDecl _ DataType ctx nam typ cs ds) =
+      DataD (c ctx) (c nam) (c typ) (c cs) (c (map fst ds))
+    conv (DataDecl _ NewType ctx nam typ [con] ds) =
+      NewtypeD (c ctx) (c nam) (c typ) (c con) (c (map fst ds))
+
+instance Convert HS.QualConDecl TH.Con where
+    conv (QualConDecl _ [] [] con) = c con
+    conv (QualConDecl _ vs cx con) = ForallC (c vs) (c cx) (c con)
+
+instance Convert HS.ConDecl TH.Con where
+    conv (ConDecl nam typ) = NormalC (c nam) (c typ)
+    conv (InfixConDecl l nam r) = InfixC (c l) (c nam) (c r)
+    conv (RecDecl nam fs) = RecC (c nam) (concatMap c fs)
+
+instance Convert HS.BangType TH.StrictType where
+    conv (BangedTy t) = (IsStrict,c t)
+    conv (UnBangedTy t) = (NotStrict,c t)
+
+instance Convert ([HS.Name],HS.BangType) [TH.VarStrictType] where
+    conv (names,bt) = [(c name,s,t) | name <- names]
+     where (s,t) = c bt
 
 instance Convert HS.Asst TH.Type where
     conv (InfixA x y z) = c $ ClassA y [x,z]
diff --git a/derive.cabal b/derive.cabal
--- a/derive.cabal
+++ b/derive.cabal
@@ -1,7 +1,7 @@
 Cabal-Version:  >= 1.6
 Build-Type:     Default
 Name:           derive
-Version:        2.3.0
+Version:        2.3.0.1
 build-type:     Simple
 Copyright:      2006-2010, Neil Mitchell
 Maintainer:     ndmitchell@gmail.com
@@ -35,7 +35,7 @@
 
 Library
     Build-Depends:
-        haskell-src-exts == 1.6.*, filepath, mtl,
+        haskell-src-exts == 1.8.*, filepath, mtl,
         base == 4.*, syb, template-haskell, uniplate == 1.4.*, containers,
         pretty
 
