diff --git a/GI/JavaScriptCore.hs b/GI/JavaScriptCore.hs
deleted file mode 100644
--- a/GI/JavaScriptCore.hs
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-{- |
-Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
-License    : LGPL-2.1
-Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
--}
-
-module GI.JavaScriptCore
-    (     module GI.JavaScriptCore.Callbacks      ,
-    module GI.JavaScriptCore.Structs        ,
-
-
-
-    module Data.GI.Base                     ,
-
-
-    ) where
-
-import GI.JavaScriptCore.Callbacks
-import GI.JavaScriptCore.Structs
-
-import Data.GI.Base.ShortPrelude
-
-import qualified Data.GI.Base.Attributes as GI.Attributes
-import qualified Data.Text as T
-import qualified Data.ByteString.Char8 as B
-import qualified Data.Map as Map
-
-import GI.JavaScriptCore.Types
-import GI.JavaScriptCore.Callbacks
-
-import Data.GI.Base
-
diff --git a/GI/JavaScriptCore/Callbacks.hs b/GI/JavaScriptCore/Callbacks.hs
deleted file mode 100644
--- a/GI/JavaScriptCore/Callbacks.hs
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-{- |
-Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
-License    : LGPL-2.1
-Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
--}
-
-module GI.JavaScriptCore.Callbacks () where
-
-import Data.GI.Base.ShortPrelude
-
-import qualified Data.GI.Base.Attributes as GI.Attributes
-import qualified Data.Text as T
-import qualified Data.ByteString.Char8 as B
-import qualified Data.Map as Map
-
-import GI.JavaScriptCore.Types
-
-
-
diff --git a/GI/JavaScriptCore/Structs.hs b/GI/JavaScriptCore/Structs.hs
deleted file mode 100644
--- a/GI/JavaScriptCore/Structs.hs
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-{- |
-Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
-License    : LGPL-2.1
-Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
--}
-
-module GI.JavaScriptCore.Structs
-    (     module GI.JavaScriptCore.Structs.GlobalContext,
-    module GI.JavaScriptCore.Structs.Value  ,
-
-
-    ) where
-
-import GI.JavaScriptCore.Structs.GlobalContext
-import GI.JavaScriptCore.Structs.Value
-
-import Data.GI.Base.ShortPrelude
-
-import qualified Data.GI.Base.Attributes as GI.Attributes
-import qualified Data.Text as T
-import qualified Data.ByteString.Char8 as B
-import qualified Data.Map as Map
-
-import GI.JavaScriptCore.Types
-import GI.JavaScriptCore.Callbacks
-
-
diff --git a/GI/JavaScriptCore/Structs/GlobalContext.hs b/GI/JavaScriptCore/Structs/GlobalContext.hs
deleted file mode 100644
--- a/GI/JavaScriptCore/Structs/GlobalContext.hs
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-{- |
-Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
-License    : LGPL-2.1
-Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
--}
-
-module GI.JavaScriptCore.Structs.GlobalContext
-    ( 
-
--- * Exported types
-    GlobalContext(..)                       ,
-    noGlobalContext                         ,
-
-
-    ) where
-
-import Data.GI.Base.ShortPrelude
-
-import qualified Data.GI.Base.Attributes as GI.Attributes
-import qualified Data.Text as T
-import qualified Data.ByteString.Char8 as B
-import qualified Data.Map as Map
-
-import GI.JavaScriptCore.Types
-import GI.JavaScriptCore.Callbacks
-
-newtype GlobalContext = GlobalContext (ForeignPtr GlobalContext)
--- XXX Wrapping a foreign struct/union with no known destructor or size, leak?
-instance WrappedPtr GlobalContext where
-    wrappedPtrCalloc = return nullPtr
-    wrappedPtrCopy = return
-    wrappedPtrFree = Nothing
-
-noGlobalContext :: Maybe GlobalContext
-noGlobalContext = Nothing
-
-
-type instance AttributeList GlobalContext = GlobalContextAttributeList
-type GlobalContextAttributeList = ('[ ] :: [(Symbol, *)])
-
-type family ResolveGlobalContextMethod (t :: Symbol) (o :: *) :: * where
-    ResolveGlobalContextMethod l o = MethodResolutionFailed l o
-
-instance (info ~ ResolveGlobalContextMethod t GlobalContext, MethodInfo info GlobalContext p) => IsLabelProxy t (GlobalContext -> p) where
-    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
-
-#if MIN_VERSION_base(4,9,0)
-instance (info ~ ResolveGlobalContextMethod t GlobalContext, MethodInfo info GlobalContext p) => IsLabel t (GlobalContext -> p) where
-    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
-#endif
-
-
diff --git a/GI/JavaScriptCore/Structs/GlobalContext.hs-boot b/GI/JavaScriptCore/Structs/GlobalContext.hs-boot
deleted file mode 100644
--- a/GI/JavaScriptCore/Structs/GlobalContext.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-module GI.JavaScriptCore.Structs.GlobalContext where
-
-import Data.GI.Base.ShortPrelude
-
-import qualified Data.GI.Base.Attributes as GI.Attributes
-import qualified Data.Text as T
-import qualified Data.ByteString.Char8 as B
-import qualified Data.Map as Map
-
-newtype GlobalContext = GlobalContext (ForeignPtr GlobalContext)
-instance WrappedPtr GlobalContext where
diff --git a/GI/JavaScriptCore/Structs/Value.hs b/GI/JavaScriptCore/Structs/Value.hs
deleted file mode 100644
--- a/GI/JavaScriptCore/Structs/Value.hs
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-{- |
-Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
-License    : LGPL-2.1
-Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
--}
-
-module GI.JavaScriptCore.Structs.Value
-    ( 
-
--- * Exported types
-    Value(..)                               ,
-    noValue                                 ,
-
-
-    ) where
-
-import Data.GI.Base.ShortPrelude
-
-import qualified Data.GI.Base.Attributes as GI.Attributes
-import qualified Data.Text as T
-import qualified Data.ByteString.Char8 as B
-import qualified Data.Map as Map
-
-import GI.JavaScriptCore.Types
-import GI.JavaScriptCore.Callbacks
-
-newtype Value = Value (ForeignPtr Value)
--- XXX Wrapping a foreign struct/union with no known destructor or size, leak?
-instance WrappedPtr Value where
-    wrappedPtrCalloc = return nullPtr
-    wrappedPtrCopy = return
-    wrappedPtrFree = Nothing
-
-noValue :: Maybe Value
-noValue = Nothing
-
-
-type instance AttributeList Value = ValueAttributeList
-type ValueAttributeList = ('[ ] :: [(Symbol, *)])
-
-type family ResolveValueMethod (t :: Symbol) (o :: *) :: * where
-    ResolveValueMethod l o = MethodResolutionFailed l o
-
-instance (info ~ ResolveValueMethod t Value, MethodInfo info Value p) => IsLabelProxy t (Value -> p) where
-    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
-
-#if MIN_VERSION_base(4,9,0)
-instance (info ~ ResolveValueMethod t Value, MethodInfo info Value p) => IsLabel t (Value -> p) where
-    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
-#endif
-
-
diff --git a/GI/JavaScriptCore/Structs/Value.hs-boot b/GI/JavaScriptCore/Structs/Value.hs-boot
deleted file mode 100644
--- a/GI/JavaScriptCore/Structs/Value.hs-boot
+++ /dev/null
@@ -1,11 +0,0 @@
-module GI.JavaScriptCore.Structs.Value where
-
-import Data.GI.Base.ShortPrelude
-
-import qualified Data.GI.Base.Attributes as GI.Attributes
-import qualified Data.Text as T
-import qualified Data.ByteString.Char8 as B
-import qualified Data.Map as Map
-
-newtype Value = Value (ForeignPtr Value)
-instance WrappedPtr Value where
diff --git a/GI/JavaScriptCore/Types.hs b/GI/JavaScriptCore/Types.hs
deleted file mode 100644
--- a/GI/JavaScriptCore/Types.hs
+++ /dev/null
@@ -1,12 +0,0 @@
-module GI.JavaScriptCore.Types
-    (     module GI.JavaScriptCore.Structs.GlobalContext,
-    module GI.JavaScriptCore.Structs.Value  ,
-
-
-    ) where
-
-
-import {-# SOURCE #-} GI.JavaScriptCore.Structs.GlobalContext
-import {-# SOURCE #-} GI.JavaScriptCore.Structs.Value
-
-
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,3 +1,12 @@
-#!/usr/bin/env runhaskell
-import Distribution.Simple
-main = defaultMain
+{-# LANGUAGE OverloadedStrings #-}
+
+import Distribution.Simple (defaultMainWithHooks)
+import Data.GI.CodeGen.CabalHooks (simpleHaskellGIHooks)
+
+main = defaultMainWithHooks (simpleHaskellGIHooks name version verbose
+                             overridesFile outputDir)
+    where name = "JavaScriptCore"
+          version = "3.0"
+          verbose = False
+          overridesFile = Nothing
+          outputDir = Nothing
diff --git a/gi-javascriptcore.cabal b/gi-javascriptcore.cabal
--- a/gi-javascriptcore.cabal
+++ b/gi-javascriptcore.cabal
@@ -1,6 +1,5 @@
--- Autogenerated, do not edit.
 name:               gi-javascriptcore
-version:            0.2.12.15
+version:            3.0.1
 synopsis:           JavaScriptCore bindings
 description:        Bindings for JavaScriptCore, autogenerated by haskell-gi.
 homepage:           https://github.com/haskell-gi/haskell-gi
@@ -9,24 +8,24 @@
 author:             Will Thompson, Iñaki García Etxebarria and Jonas Platte
 maintainer:         Iñaki García Etxebarria (garetxe@gmail.com)
 category:           Bindings
-build-type:         Simple
-cabal-version:      >=1.10
+build-type:         Custom
+cabal-version:      >= 1.24
 
+custom-setup
+  setup-depends: base >= 4.7,
+                 Cabal >= 1.24,
+                 haskell-gi >= 0.15
+
 library
     default-language:   Haskell2010
     default-extensions: NoImplicitPrelude, ScopedTypeVariables, CPP, OverloadedStrings, NegativeLiterals, ConstraintKinds, TypeFamilies, MultiParamTypeClasses, KindSignatures, FlexibleInstances, UndecidableInstances, DataKinds, FlexibleContexts
     other-extensions:   PatternSynonyms ViewPatterns
     ghc-options:        -fno-warn-unused-imports -fno-warn-warnings-deprecations
-    exposed-modules:    GI.JavaScriptCore.Types
-                        GI.JavaScriptCore
-                        GI.JavaScriptCore.Callbacks
-                        GI.JavaScriptCore.Structs
-                        GI.JavaScriptCore.Structs.GlobalContext
-                        GI.JavaScriptCore.Structs.Value
-    pkgconfig-depends:  javascriptcoregtk-4.0 >= 2.12
+
+    pkgconfig-depends:  javascriptcoregtk-3.0
     build-depends: base >= 4.7 && <5,
         haskell-gi-base >= 0.15 && < 1,
         bytestring >= 0.10,
         containers >= 0.5,
         text >= 1.0,
-        transformers >= 0.3
+        transformers >= 0.5
