diff --git a/Graphics/UI/Gtk/OSX.hs b/Graphics/UI/Gtk/OSX.hs
--- a/Graphics/UI/Gtk/OSX.hs
+++ b/Graphics/UI/Gtk/OSX.hs
@@ -1,5 +1,7 @@
 module Graphics.UI.Gtk.OSX (
-	module Graphics.UI.Gtk.OSX.Application
-	) where
+    module Graphics.UI.Gtk.OSX.Application
+  , module Graphics.UI.Gtk.OSX.Window
+) where
 
 import Graphics.UI.Gtk.OSX.Application
+import Graphics.UI.Gtk.OSX.Window
diff --git a/Graphics/UI/Gtk/OSX/Signals.chs b/Graphics/UI/Gtk/OSX/Signals.chs
--- a/Graphics/UI/Gtk/OSX/Signals.chs
+++ b/Graphics/UI/Gtk/OSX/Signals.chs
@@ -48,10 +48,10 @@
   
   ) where
 
-import Control.Monad	(liftM)
+import Control.Monad    (liftM)
 
 import System.Glib.FFI
-import System.Glib.UTFString   (peekUTFString,maybePeekUTFString)
+import System.Glib.UTFString   (peekUTFString,maybePeekUTFString,newUTFString)
 import qualified System.Glib.UTFString as Glib
 import System.Glib.GError      (failOnGError)
 {#import System.Glib.Signals#}
diff --git a/Graphics/UI/Gtk/OSX/Window.chs b/Graphics/UI/Gtk/OSX/Window.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/OSX/Window.chs
@@ -0,0 +1,13 @@
+{-# LANGUAGE CPP #-}
+module Graphics.UI.Gtk.OSX.Window (
+    allowFullscreen
+) where
+
+import System.Glib.FFI
+{#import Graphics.UI.Gtk.OSX.Types#}
+
+allowFullscreen :: DrawWindowClass window => window -> IO ()
+allowFullscreen window =
+    {# call unsafe gtk2hs_osx_allow_fullscreen #}
+        (toDrawWindow window)
+
diff --git a/Graphics/UI/Gtk/OSX/extra.m b/Graphics/UI/Gtk/OSX/extra.m
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/OSX/extra.m
@@ -0,0 +1,11 @@
+#include <gtk/gtk.h>
+#include <gdk/gdkquartz.h>
+
+void gtk2hs_osx_allow_fullscreen(GdkWindow *wnd)
+{
+    if (wnd != NULL)
+    {
+        NSWindow *native = gdk_quartz_window_get_nswindow (wnd);
+        [native setCollectionBehavior: [native collectionBehavior] | NSWindowCollectionBehaviorFullScreenPrimary];
+    }
+}
diff --git a/Gtk2HsSetup.hs b/Gtk2HsSetup.hs
--- a/Gtk2HsSetup.hs
+++ b/Gtk2HsSetup.hs
@@ -429,15 +429,10 @@
   let modDeps = zipWith (ModDep True []) expMods mExpFiles++
                 zipWith (ModDep False []) othMods mOthFiles
   modDeps <- mapM extractDeps modDeps
-  let (expMods, othMods) = span mdExposed $ sortTopological modDeps
-      badOther = map (fromMaybe "<no file>" . mdLocation) $
-                 filter (not . mdExposed) expMods
-  unless (null badOther) $
-    die ("internal chs modules "++intercalate "," badOther++
-         " depend on exposed chs modules; cabal needs to build internal modules first")
+  let (othMods, expMods) = span (not . mdExposed) $ reverse $ sortTopological modDeps
   return pd { PD.library = Just lib {
-    PD.exposedModules = map mdOriginal expMods,
-    PD.libBuildInfo = bi { PD.otherModules = map mdOriginal othMods }
+    PD.exposedModules = map mdOriginal (reverse expMods),
+    PD.libBuildInfo = bi { PD.otherModules = map mdOriginal (reverse othMods) }
   }}
 
 data ModDep = ModDep {
diff --git a/SetupMain.hs b/SetupMain.hs
--- a/SetupMain.hs
+++ b/SetupMain.hs
@@ -10,4 +10,4 @@
 main = do
   checkGtk2hsBuildtools [typeGenProgram, signalGenProgram, c2hsLocal]
   defaultMainWithHooks gtk2hsUserHooks
-  
+
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
@@ -18,7 +18,7 @@
 
 import System.Environment
 import System.Process
-import System.Exit
+import System.Exit (ExitCode(..), exitWith)
 import System.FilePath
 import System.Directory
 import qualified Control.Exception as Exception
@@ -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/gtk-mac-integration.cabal b/gtk-mac-integration.cabal
--- a/gtk-mac-integration.cabal
+++ b/gtk-mac-integration.cabal
@@ -1,5 +1,5 @@
 Name:           gtk-mac-integration
-Version:        0.3.0.2
+Version:        0.3.1.1
 License:        LGPL-2.1
 License-file:   COPYING
 Copyright:      (c) 2001-2010 The Gtk2Hs Team
@@ -35,7 +35,7 @@
 
 Source-Repository head
   type:         git
-  location:     https://github.com/gtk2hs/ige-mac-integration
+  location:     https://github.com/gtk2hs/gtk-mac-integration.git
 
 Library
         build-depends:  base >= 4 && < 5, array -any, containers -any, mtl -any,
@@ -48,6 +48,7 @@
         exposed-modules:
           Graphics.UI.Gtk.OSX
           Graphics.UI.Gtk.OSX.Application
+          Graphics.UI.Gtk.OSX.Window
         other-modules:
           Graphics.UI.Gtk.OSX.Types
           Graphics.UI.Gtk.OSX.Signals
@@ -56,11 +57,12 @@
 
         include-dirs:   .
         cpp-options:    -DDISABLE_DEPRECATED -U__BLOCKS__ -D__attribute__(A)=
+        c-sources:      Graphics/UI/Gtk/OSX/extra.m
 
         x-Signals-File:  Graphics/UI/Gtk/OSX/Signals.chs
         x-Signals-Modname: Graphics.UI.Gtk.OSX.Signals
         x-Signals-Types: marshal.list
 
         x-c2hs-Header:  hs-gtk-mac-integration.h
-        pkgconfig-depends: gtk-mac-integration >=2.0.0
+        pkgconfig-depends: gtk-mac-integration-gtk2 >=2.0.0
 
diff --git a/hs-gtk-mac-integration.h b/hs-gtk-mac-integration.h
--- a/hs-gtk-mac-integration.h
+++ b/hs-gtk-mac-integration.h
@@ -3,3 +3,4 @@
 #endif
 #include <gtkosxapplication.h>
 
+void gtk2hs_osx_allow_fullscreen(GdkWindow *wnd);
