diff --git a/Gtk2HsSetup.hs b/Gtk2HsSetup.hs
--- a/Gtk2HsSetup.hs
+++ b/Gtk2HsSetup.hs
@@ -56,7 +56,8 @@
 import Distribution.Verbosity
 import Control.Monad (when, unless, filterM, liftM, forM, forM_)
 import Data.Maybe ( isJust, isNothing, fromMaybe, maybeToList, catMaybes )
-import Data.List (isPrefixOf, isSuffixOf, stripPrefix, nub, tails )
+import Data.List (isPrefixOf, isSuffixOf, nub, minimumBy, stripPrefix, tails )
+import Data.Ord as Ord (comparing)
 import Data.Char (isAlpha, isNumber)
 import qualified Data.Map as M
 import qualified Data.Set as S
@@ -113,9 +114,16 @@
 fixLibs :: [FilePath] -> [String] -> [String]
 fixLibs dlls = concatMap $ \ lib ->
     case filter (isLib lib) dlls of
-                dll:_ -> [dropExtension dll]
-                _     -> if lib == "z" then [] else [lib]
+                dlls@(_:_) -> [dropExtension (pickDll dlls)]
+                _          -> if lib == "z" then [] else [lib]
   where
+    -- If there are several .dll files matching the one we're after then we
+    -- just have to guess. For example for recent Windows cairo builds we get
+    -- libcairo-2.dll libcairo-gobject-2.dll libcairo-script-interpreter-2.dll
+    -- Our heuristic is to pick the one with the shortest name.
+    -- Yes this is a hack but the proper solution is hard: we would need to
+    -- parse the .a file and see which .dll file(s) it needed to link to.
+    pickDll = minimumBy (Ord.comparing length)
     isLib lib dll =
         case stripPrefix ("lib"++lib) dll of
             Just ('.':_)                -> True
@@ -154,9 +162,9 @@
 register :: PackageDescription -> LocalBuildInfo
          -> RegisterFlags -- ^Install in the user's database?; verbose
          -> IO ()
-register pkg@(library       -> Just lib )
-         lbi@(libraryConfig -> Just clbi) regFlags
+register pkg@PackageDescription { library       = Just lib  } lbi regFlags
   = do
+    let clbi = LBI.getComponentLocalBuildInfo lbi LBI.CLibName
 
     installedPkgInfoRaw <- generateRegistrationInfo
                            verbosity pkg lib lbi clbi inplace distPref
@@ -168,7 +176,7 @@
 
      -- Three different modes:
     case () of
-     _ | modeGenerateRegFile   -> die "Generate Reg File not supported"
+     _ | modeGenerateRegFile   -> writeRegistrationFile installedPkgInfo
        | modeGenerateRegScript -> die "Generate Reg Script not supported"
        | otherwise             -> registerPackage verbosity
                                     installedPkgInfo pkg lbi inplace
@@ -180,6 +188,8 @@
 
   where
     modeGenerateRegFile = isJust (flagToMaybe (regGenPkgConf regFlags))
+    regFile             = fromMaybe (display (packageId pkg) <.> "conf")
+                                    (fromFlag (regGenPkgConf regFlags))
     modeGenerateRegScript = fromFlag (regGenScript regFlags)
     inplace   = fromFlag (regInPlace regFlags)
     packageDbs = nub $ withPackageDB lbi
@@ -187,6 +197,10 @@
     packageDb = registrationPackageDB packageDbs
     distPref  = fromFlag (regDistPref regFlags)
     verbosity = fromFlag (regVerbosity regFlags)
+
+    writeRegistrationFile installedPkgInfo = do
+      notice verbosity ("Creating package registration file: " ++ regFile)
+      writeUTF8File regFile (showInstalledPackageInfo installedPkgInfo)
 
 register _ _ regFlags = notice verbosity "No package to register"
   where
diff --git a/SetupWrapper.hs b/SetupWrapper.hs
--- a/SetupWrapper.hs
+++ b/SetupWrapper.hs
@@ -9,7 +9,7 @@
 import Distribution.Simple.Program
 import Distribution.Simple.Compiler
 import Distribution.Simple.BuildPaths (exeExtension)
-import Distribution.Simple.Configure (configCompiler)
+import Distribution.Simple.Configure (configCompilerEx)
 import Distribution.Simple.GHC (getInstalledPackages)
 import qualified Distribution.Simple.PackageIndex as PackageIndex
 import Distribution.Version
@@ -115,7 +115,7 @@
       when outOfDate $ do
         debug verbosity "Setup script is out of date, compiling..."
 
-        (comp, conf)    <- configCompiler (Just GHC) Nothing Nothing
+        (comp, _, conf) <- configCompilerEx (Just GHC) Nothing Nothing
                              defaultProgramConfiguration verbosity
         cabalLibVersion <- cabalLibVersionToUse comp conf
         let cabalPkgid = PackageIdentifier (PackageName "Cabal") cabalLibVersion
diff --git a/hsjscore.h b/hsjscore.h
--- a/hsjscore.h
+++ b/hsjscore.h
@@ -17,6 +17,9 @@
  * Boston, MA 02110-1301, USA.
  */
 
+#ifdef __BLOCKS__
+#undef __BLOCKS__
+#endif
 #ifndef HS_WEBKITJAVASCRIPTCORE_H
 #define HS_WEBKITJAVASCRIPTCORE_H
 /* to avoid stdbool.h error in JavaScriptCore/JSBase.h*/
@@ -35,7 +38,7 @@
 
 typedef JSStaticValue* JSStaticValueRef;
 
-typedef JSStaticFunction* JSStaticFunctionRef; 
+typedef JSStaticFunction* JSStaticFunctionRef;
 
-typedef JSClassDefinition* JSClassDefinitionRef; 
+typedef JSClassDefinition* JSClassDefinitionRef;
 #endif
diff --git a/marshal.list b/marshal.list
--- a/marshal.list
+++ b/marshal.list
@@ -14,8 +14,8 @@
 #   FLAGS       for flag enumeration types (guint)
 #   FLOAT       for single-precision float types (gfloat)
 #   DOUBLE      for double-precision float types (gdouble)
-#   STRING      for string types (gchar*)
-#   MSTRING     for string types (gchar*) that could be NUL
+#   GLIBSTRING  for string types (gchar*)
+#   MGLIBSTRING for string types (gchar*) that could be NUL
 #   BOXED       for boxed (anonymous but reference counted) types (GBoxed*)
 #   POINTER     for anonymous pointer types (gpointer)
 #   NONE        deprecated alias for VOID
@@ -43,25 +43,3 @@
 # If you add a new signal type, please check that it actually works!
 # If it is a Boxed type check that the reference counting is right.
 
-VOID:POINTER,POINTER
-BOOLEAN:TOBJECT
-BOOLEAN:TOBJECT,STRING,BOXED
-POINTER:TOBJECT
-BOOLEAN:INT,INT,STRING
-BOOLEAN:STRING,STRING,INT,STRING
-BOOLEAN:TOBJECT,STRING
-BOOLEAN:TOBJECT,STRING,STRING
-BOOLEAN:TOBJECT,TOBJECT,TOBJECT,TOBJECT
-BOOLEAN:TOBJECT,TOBJECT,STRING,TOBJECT
-NONE:TOBJECT,TOBJECT,TOBJECT,TOBJECT
-NONE:TOBJECT,TOBJECT,MTOBJECT,MTOBJECT
-BOOLEAN:ENUM,INT
-BOOLEAN:NONE
-NONE:NONE
-NONE:MSTRING,MSTRING
-NONE:TOBJECT,STRING
-NONE:TOBJECT,TOBJECT
-NONE:STRING,STRING
-NONE:TOBJECT
-NONE:INT
-NONE:STRING
diff --git a/webkit-javascriptcore.cabal b/webkit-javascriptcore.cabal
--- a/webkit-javascriptcore.cabal
+++ b/webkit-javascriptcore.cabal
@@ -1,5 +1,5 @@
 Name:		webkit-javascriptcore
-Version:	0.12.5.1
+Version:	0.13.0.0
 Synopsis:       JavaScriptCore FFI from webkitgtk
 Description: 	FFI for JavaScriptCore module from webkitgtk
 License: 	BSD3
@@ -27,9 +27,9 @@
 Library
         hs-source-dirs: src
         build-depends:  base >= 4 && < 5,
-                        glib
+                        glib >=0.13.0.0 && <0.14
 						
-        build-tools:    gtk2hsC2hs >= 0.13.8,
+        build-tools:    gtk2hsC2hs >= 0.13.11,
                         gtk2hsHookGenerator, gtk2hsTypeGen
 						
         exposed-modules:
@@ -52,10 +52,6 @@
         x-Signals-Import: Graphics.UI.GtkInternals
 		
         include-dirs: .
-                      include
-                      -- /usr/include/webkitgtk-1.0
-                      -- /usr/include/glib-2.0
-                      -- /usr/lib/x86_64-linux-gnu/glib-2.0/include
         x-c2hs-Header:  hsjscore.h
         pkgconfig-depends: webkit-1.0 >=1.1.15
-        build-depends:     gtk >=0.12.5.4 && <0.13, webkit >= 0.12.5
+        build-depends:     gtk >=0.13.0.0 && <0.14, webkit >=0.13.0.0 && <0.14
