diff --git a/Media/Streaming/GStreamer/Core/Hierarchy.chs b/Media/Streaming/GStreamer/Core/Hierarchy.chs
--- a/Media/Streaming/GStreamer/Core/Hierarchy.chs
+++ b/Media/Streaming/GStreamer/Core/Hierarchy.chs
@@ -167,12 +167,8 @@
   ) where
 
 import Foreign.ForeignPtr (ForeignPtr, castForeignPtr, unsafeForeignPtrToPtr)
-#if __GLASGOW_HASKELL__>=704
 import Foreign.C.Types    (CULong(..), CUInt(..))
-#else
-import Foreign.C.Types    (CULong, CUInt)
-#endif
-import System.Glib.GType	(GType, typeInstanceIsA)
+import System.Glib.GType  (GType, typeInstanceIsA)
 {#import System.Glib.GObject#}
 
 {# context lib="gstreamer" prefix="gtk" #}
diff --git a/Media/Streaming/GStreamer/Core/Init.chs b/Media/Streaming/GStreamer/Core/Init.chs
--- a/Media/Streaming/GStreamer/Core/Init.chs
+++ b/Media/Streaming/GStreamer/Core/Init.chs
@@ -49,13 +49,21 @@
 import Prelude hiding        ( init )
 import System.Glib.FFI
 import System.Glib.GError
-import System.Glib.UTFString ( peekUTFString )
+import System.Glib.UTFString ( peekUTFString, withUTFString )
+import Control.Applicative
+import System.Environment
 
 {# context lib = "gstreamer" prefix = "gst" #}
 
 init :: IO ()
-init =
-    {# call init #} nullPtr nullPtr
+init = do
+  allArgs <- (:) <$> getProgName <*> getArgs
+  withMany withUTFString allArgs $ \addrs ->
+    withArrayLen addrs $ \argc argv ->
+    with argv $ \argvp ->
+    with argc $ \argcp -> do
+      {# call init #} (castPtr argcp) (castPtr argvp)
+
 
 initCheck :: IO ()
 initCheck =
diff --git a/Media/Streaming/GStreamer/Core/Iterator.chs b/Media/Streaming/GStreamer/Core/Iterator.chs
--- a/Media/Streaming/GStreamer/Core/Iterator.chs
+++ b/Media/Streaming/GStreamer/Core/Iterator.chs
@@ -94,7 +94,7 @@
                                          -> accumT
                                          -> IO (Maybe accumT) -}
 type CIteratorFoldFunction =  {# type gpointer #}
-                           -> GValue
+                           -> Ptr GValue
                            -> {# type gpointer #}
                            -> IO {# type gboolean #}
 marshalIteratorFoldFunction :: Iterable itemT
diff --git a/Media/Streaming/GStreamer/Core/MiniHierarchy.chs b/Media/Streaming/GStreamer/Core/MiniHierarchy.chs
--- a/Media/Streaming/GStreamer/Core/MiniHierarchy.chs
+++ b/Media/Streaming/GStreamer/Core/MiniHierarchy.chs
@@ -55,12 +55,8 @@
   ) where
 
 import Foreign.ForeignPtr (ForeignPtr, castForeignPtr, unsafeForeignPtrToPtr)
-#if __GLASGOW_HASKELL__>=704
 import Foreign.C.Types    (CULong(..), CUInt(..))
-#else
-import Foreign.C.Types    (CULong, CUInt)
-#endif
-import System.Glib.GType	(GType, typeInstanceIsA)
+import System.Glib.GType  (GType, typeInstanceIsA)
 {#import Media.Streaming.GStreamer.Core.MiniHierarchyBase#}
 
 {# context lib="gstreamer" prefix="gst" #}
diff --git a/gstreamer.cabal b/gstreamer.cabal
--- a/gstreamer.cabal
+++ b/gstreamer.cabal
@@ -1,5 +1,5 @@
 Name:           gstreamer
-Version:        0.12.1.1
+Version:        0.12.1.2
 License:        LGPL-2.1
 License-file:   COPYING
 Copyright:      (c) 2001-2010 The Gtk2Hs Team
