diff --git a/Graphics/UI/Gtk/SourceView/Signals.chs b/Graphics/UI/Gtk/SourceView/Signals.chs
--- a/Graphics/UI/Gtk/SourceView/Signals.chs
+++ b/Graphics/UI/Gtk/SourceView/Signals.chs
@@ -28,7 +28,7 @@
 -- The object system in the second version of GTK is based on GObject from
 -- GLIB. This base class is rather primitive in that it only implements
 -- ref and unref methods (and others that are not interesting to us). If
--- the marshall list mentions OBJECT it refers to an instance of this 
+-- the marshall list mentions OBJECT it refers to an instance of this
 -- GObject which is automatically wrapped with a ref and unref call.
 -- Structures which are not derived from GObject have to be passed as
 -- BOXED which gives the signal connect function a possibility to do the
@@ -55,9 +55,10 @@
 
 import System.Glib.FFI
 import System.Glib.UTFString   (peekUTFString,maybePeekUTFString)
+import qualified System.Glib.UTFString as Glib
 import System.Glib.GError      (failOnGError)
 {#import System.Glib.Signals#}
-{#import System.Glib.GObject#} 
+{#import System.Glib.GObject#}
 
 
 {#context lib="gtk" prefix="gtk" #}
diff --git a/Graphics/UI/Gtk/SourceView/SourceBuffer.chs b/Graphics/UI/Gtk/SourceView/SourceBuffer.chs
--- a/Graphics/UI/Gtk/SourceView/SourceBuffer.chs
+++ b/Graphics/UI/Gtk/SourceView/SourceBuffer.chs
@@ -30,11 +30,11 @@
 -- | The 'SourceBuffer' object is the model for 'SourceView' widgets. It extends the 'TextBuffer'
 -- object by adding features useful to display and edit source code as syntax highlighting and bracket
 -- matching. It also implements support for undo/redo operations.
--- 
+--
 -- To create a 'SourceBuffer' use 'sourceBufferNew' or
 -- 'sourceBufferNewWithLanguage'. The second form is just a convenience function which allows
 -- you to initially set a 'SourceLanguage'.
--- 
+--
 -- By default highlighting is enabled, but you can disable it with
 -- 'sourceBufferSetHighlightSyntax'.
 
@@ -93,6 +93,7 @@
 import Graphics.UI.Gtk.Abstract.Object	(makeNewObject)
 import System.Glib.Attributes
 import System.Glib.FFI
+import System.Glib.UTFString
 import System.Glib.GList
 import System.Glib.GObject              (wrapNewGObject, makeNewGObject)
 
@@ -111,7 +112,7 @@
 --
 sourceBufferNew :: Maybe TextTagTable -> IO SourceBuffer
 sourceBufferNew tt = wrapNewGObject mkSourceBuffer $
-  {#call unsafe source_buffer_new#} 
+  {#call unsafe source_buffer_new#}
   (fromMaybe (TextTagTable nullForeignPtr) tt)
 
 -- | Create a new 'SourceBuffer'
@@ -126,37 +127,37 @@
 -- 'sourceBufferSetLanguage'. If highlight is 'False', syntax highlighting is disabled and all the
 -- 'TextTag' objects that have been added by the syntax highlighting engine are removed from the
 -- buffer.
-sourceBufferSetHighlightSyntax :: SourceBufferClass buffer => buffer  -- ^ @buffer@    a 'SourceBuffer'.                                       
-                               -> Bool  -- ^ @highlight@ 'True' to enable syntax highlighting, 'False' to disable it. 
+sourceBufferSetHighlightSyntax :: SourceBufferClass buffer => buffer  -- ^ @buffer@    a 'SourceBuffer'.
+                               -> Bool  -- ^ @highlight@ 'True' to enable syntax highlighting, 'False' to disable it.
                                -> IO ()
 sourceBufferSetHighlightSyntax sb newVal =
-  {#call unsafe source_buffer_set_highlight_syntax#} 
-    (toSourceBuffer sb) 
+  {#call unsafe source_buffer_set_highlight_syntax#}
+    (toSourceBuffer sb)
     (fromBool newVal)
-  
+
 -- | Determines whether syntax highlighting is activated in the source buffer.
-sourceBufferGetHighlightSyntax :: SourceBufferClass buffer => buffer 
-                               -> IO Bool  -- ^ returns 'True' if syntax highlighting is enabled, 'False' otherwise. 
+sourceBufferGetHighlightSyntax :: SourceBufferClass buffer => buffer
+                               -> IO Bool  -- ^ returns 'True' if syntax highlighting is enabled, 'False' otherwise.
 sourceBufferGetHighlightSyntax sb = liftM toBool $
-  {#call unsafe source_buffer_get_highlight_syntax#} 
+  {#call unsafe source_buffer_get_highlight_syntax#}
     (toSourceBuffer sb)
 
 -- | Associate a 'SourceLanguage' with the source buffer. If language is not-'Nothing' and syntax
 -- highlighting is enabled (see 'sourceBufferSetHighlightSyntax', the syntax patterns defined
 -- in language will be used to highlight the text contained in the buffer. If language is 'Nothing', the
 -- text contained in the buffer is not highlighted.
-sourceBufferSetLanguage :: SourceBufferClass buffer => buffer 
-                        -> Maybe SourceLanguage  -- ^ @language@ a 'SourceLanguage' to set, or 'Nothing'. 
+sourceBufferSetLanguage :: SourceBufferClass buffer => buffer
+                        -> Maybe SourceLanguage  -- ^ @language@ a 'SourceLanguage' to set, or 'Nothing'.
                         -> IO ()
 sourceBufferSetLanguage sb lang =
-  {#call unsafe source_buffer_set_language#} 
-    (toSourceBuffer sb) 
+  {#call unsafe source_buffer_set_language#}
+    (toSourceBuffer sb)
     (fromMaybe (SourceLanguage nullForeignPtr) lang)
-  
--- | Returns the 'SourceLanguage' associated with the buffer, see 'sourceBufferSetLanguage'. 
-sourceBufferGetLanguage :: SourceBufferClass buffer => buffer 
-                        -> IO (Maybe SourceLanguage) -- ^ returns 'SourceLanguage' associated with the buffer, or 'Nothing'. 
-sourceBufferGetLanguage sb = 
+
+-- | Returns the 'SourceLanguage' associated with the buffer, see 'sourceBufferSetLanguage'.
+sourceBufferGetLanguage :: SourceBufferClass buffer => buffer
+                        -> IO (Maybe SourceLanguage) -- ^ returns 'SourceLanguage' associated with the buffer, or 'Nothing'.
+sourceBufferGetLanguage sb =
   maybeNull (makeNewGObject mkSourceLanguage) $
   {#call unsafe source_buffer_get_language#} (toSourceBuffer sb)
 
@@ -164,78 +165,78 @@
 -- cursor over a bracket character (a parenthesis, a square bracket, etc.) the matching opening or
 -- closing bracket character will be highlighted. You can specify the style with the
 -- 'sourceBufferSetBracketMatchStyle' function.
-sourceBufferSetHighlightMatchingBrackets :: SourceBufferClass buffer => buffer 
-                                         -> Bool  -- ^ @highlight@ 'True' if you want matching brackets highlighted. 
+sourceBufferSetHighlightMatchingBrackets :: SourceBufferClass buffer => buffer
+                                         -> Bool  -- ^ @highlight@ 'True' if you want matching brackets highlighted.
                                          -> IO ()
 sourceBufferSetHighlightMatchingBrackets sb newVal =
   {#call unsafe source_buffer_set_highlight_matching_brackets#} (toSourceBuffer sb) (fromBool newVal)
-  
+
 -- | Determines whether bracket match highlighting is activated for the source buffer.
-sourceBufferGetHighlightMatchingBrackets :: SourceBufferClass buffer => buffer 
-                                         -> IO Bool  -- ^ returns 'True' if the source buffer will highlight matching brackets. 
+sourceBufferGetHighlightMatchingBrackets :: SourceBufferClass buffer => buffer
+                                         -> IO Bool  -- ^ returns 'True' if the source buffer will highlight matching brackets.
 sourceBufferGetHighlightMatchingBrackets sb = liftM toBool $
   {#call unsafe source_buffer_get_highlight_matching_brackets#} (toSourceBuffer sb)
 
 -- | Sets style scheme used by the buffer. If scheme is 'Nothing' no style scheme is used.
-sourceBufferSetStyleScheme :: SourceBufferClass buffer => buffer 
-                           -> Maybe SourceStyleScheme  -- ^ @scheme@ style scheme.      
+sourceBufferSetStyleScheme :: SourceBufferClass buffer => buffer
+                           -> Maybe SourceStyleScheme  -- ^ @scheme@ style scheme.
                            -> IO ()
 sourceBufferSetStyleScheme sb scheme =
-    {#call unsafe source_buffer_set_style_scheme#} 
-      (toSourceBuffer sb)  
+    {#call unsafe source_buffer_set_style_scheme#}
+      (toSourceBuffer sb)
       (fromMaybe (SourceStyleScheme nullForeignPtr) scheme)
 
 -- | Returns the 'SourceStyleScheme' currently used in buffer.
-sourceBufferGetStyleScheme :: SourceBufferClass buffer => buffer 
+sourceBufferGetStyleScheme :: SourceBufferClass buffer => buffer
                            -> IO (Maybe SourceStyleScheme) -- ^ returns the 'SourceStyleScheme' set by 'sourceBufferSetStyleScheme', or 'Nothing'.
-sourceBufferGetStyleScheme sb = 
+sourceBufferGetStyleScheme sb =
     maybeNull (makeNewGObject mkSourceStyleScheme) $
     {#call unsafe source_buffer_get_style_scheme#} (toSourceBuffer sb)
 
 -- | Sets the number of undo levels for user actions the buffer will track. If the number of user actions
 -- exceeds the limit set by this function, older actions will be discarded.
--- 
+--
 -- If @maxUndoLevels@ is -1, no limit is set.
--- 
+--
 -- A new action is started whenever the function 'textBufferBeginUserAction' is called. In
 -- general, this happens whenever the user presses any key which modifies the buffer, but the undo
 -- manager will try to merge similar consecutive actions, such as multiple character insertions into
 -- one action. But, inserting a newline does start a new action.
-sourceBufferSetMaxUndoLevels :: SourceBufferClass buffer => buffer 
-                             -> Int  -- ^ @maxUndoLevels@ the desired maximum number of undo levels. 
+sourceBufferSetMaxUndoLevels :: SourceBufferClass buffer => buffer
+                             -> Int  -- ^ @maxUndoLevels@ the desired maximum number of undo levels.
                              -> IO ()
 sourceBufferSetMaxUndoLevels sb newVal =
   {#call unsafe source_buffer_set_max_undo_levels#} (toSourceBuffer sb) (fromIntegral newVal)
-  
+
 -- | Determines the number of undo levels the buffer will track for buffer edits.
-sourceBufferGetMaxUndoLevels :: SourceBufferClass buffer => buffer 
+sourceBufferGetMaxUndoLevels :: SourceBufferClass buffer => buffer
                              -> IO Int -- ^ returns the maximum number of possible undo levels or -1 if no limit is set.
 sourceBufferGetMaxUndoLevels sb = liftM fromIntegral $
   {#call unsafe source_buffer_get_max_undo_levels#} (toSourceBuffer sb)
 
 -- | Determines whether a source buffer can undo the last action.
-sourceBufferGetCanUndo :: SourceBufferClass buffer => buffer 
-                       -> IO Bool -- ^ returns 'True' if it's possible to undo the last action. 
+sourceBufferGetCanUndo :: SourceBufferClass buffer => buffer
+                       -> IO Bool -- ^ returns 'True' if it's possible to undo the last action.
 sourceBufferGetCanUndo sb = liftM toBool $
   {#call unsafe source_buffer_can_undo#} (toSourceBuffer sb)
-  
+
 -- | Determines whether a source buffer can redo the last action (i.e. if the last operation was an
 -- undo).
-sourceBufferGetCanRedo :: SourceBufferClass buffer => buffer 
-                       -> IO Bool -- ^ returns 'True' if a redo is possible. 
+sourceBufferGetCanRedo :: SourceBufferClass buffer => buffer
+                       -> IO Bool -- ^ returns 'True' if a redo is possible.
 sourceBufferGetCanRedo sb = liftM toBool $
   {#call unsafe source_buffer_can_redo#} (toSourceBuffer sb)
 
 -- | Undoes the last user action which modified the buffer. Use 'sourceBufferCanUndo' to check
 -- whether a call to this function will have any effect.
--- 
+--
 -- Actions are defined as groups of operations between a call to 'textBufferBeginUserAction'
 -- and 'textBufferEndUserAction' on the
 -- same line.
 sourceBufferUndo :: SourceBufferClass buffer => buffer -> IO ()
 sourceBufferUndo sb =
   {#call source_buffer_undo#} (toSourceBuffer sb)
-  
+
 -- | Redoes the last undo operation. Use 'sourceBufferCanRedo' to check whether a call to this
 -- function will have any effect.
 sourceBufferRedo :: SourceBufferClass buffer => buffer -> IO ()
@@ -245,13 +246,13 @@
 -- | Marks the beginning of a not undoable action on the buffer, disabling the undo manager. Typically
 -- you would call this function before initially setting the contents of the buffer (e.g. when loading
 -- a file in a text editor).
--- 
+--
 -- You may nest 'sourceBufferBeginNotUndoableAction' /
 -- 'sourceBufferEndNotUndoableAction' blocks.
 sourceBufferBeginNotUndoableAction :: SourceBufferClass buffer => buffer -> IO ()
 sourceBufferBeginNotUndoableAction sb =
   {#call source_buffer_begin_not_undoable_action#} (toSourceBuffer sb)
-  
+
 -- | Marks the end of a not undoable action on the buffer. When the last not undoable block is closed
 -- through the call to this function, the list of undo actions is cleared and the undo manager is
 -- re-enabled.
@@ -282,26 +283,26 @@
 --    passed name is @Nothing@.  Also, the buffer owns the markers so you
 --    shouldn't unreference it.
 
-sourceBufferCreateSourceMark :: SourceBufferClass buffer => buffer -- the buffer
-                         -> Maybe String -- the name of the mark
-                         -> String -- the category of the mark
+sourceBufferCreateSourceMark :: (SourceBufferClass buffer, GlibString string) => buffer -- the buffer
+                         -> Maybe string -- the name of the mark
+                         -> string -- the category of the mark
                          -> TextIter -> IO SourceMark
 sourceBufferCreateSourceMark sb name category iter =
   makeNewGObject mkSourceMark $
-  maybeWith withCString name       $ \strPtr1 ->
-  withCString category $ \strPtr2 ->
+  maybeWith withUTFString name $ \strPtr1 ->
+  withUTFString category $ \strPtr2 ->
   {#call source_buffer_create_source_mark#} (toSourceBuffer sb) strPtr1 strPtr2 iter
 
 -- | Returns the list of marks of the given category at line. If category is empty, all marks at line are
 -- returned.
-sourceBufferGetSourceMarksAtLine :: SourceBufferClass buffer => buffer  -- ^ @buffer@   a 'SourceBuffer'.             
-                                 -> Int -- ^ @line@     a line number.                 
-                                 -> String -- ^ @category@ category to search for or empty 
+sourceBufferGetSourceMarksAtLine :: (SourceBufferClass buffer, GlibString string) => buffer  -- ^ @buffer@   a 'SourceBuffer'.
+                                 -> Int -- ^ @line@     a line number.
+                                 -> string -- ^ @category@ category to search for or empty
                                  -> IO [SourceMark]
-sourceBufferGetSourceMarksAtLine buffer line category = 
-  withCString category $ \categoryPtr ->
+sourceBufferGetSourceMarksAtLine buffer line category =
+  withUTFString category $ \categoryPtr ->
   {#call gtk_source_buffer_get_source_marks_at_line #}
-    (toSourceBuffer buffer) 
+    (toSourceBuffer buffer)
     (fromIntegral line)
     categoryPtr
   >>= readGSList
@@ -309,12 +310,12 @@
 
 -- | Returns the list of marks of the given category at iter. If category is empty it returns all marks at
 -- iter.
-sourceBufferGetSourceMarksAtIter :: SourceBufferClass buffer => buffer -- ^ @buffer@   a 'SourceBuffer'.             
-                                 -> TextIter -- ^ @iter@     an iterator.                   
-                                 -> String -- ^ @category@ category to search for or empty
+sourceBufferGetSourceMarksAtIter :: (SourceBufferClass buffer, GlibString string) => buffer -- ^ @buffer@   a 'SourceBuffer'.
+                                 -> TextIter -- ^ @iter@     an iterator.
+                                 -> string -- ^ @category@ category to search for or empty
                                  -> IO [SourceMark]
 sourceBufferGetSourceMarksAtIter buffer iter category =
-  withCString category $ \categoryPtr ->
+  withUTFString category $ \categoryPtr ->
   {#call gtk_source_buffer_get_source_marks_at_iter #}
     (toSourceBuffer buffer)
     iter
@@ -324,13 +325,13 @@
 
 -- | Remove all marks of category between start and end from the buffer. If category is empty, all marks
 -- in the range will be removed.
-sourceBufferRemoveSourceMarks :: SourceBufferClass buffer => buffer -- ^ @buffer@   a 'SourceBuffer'.             
-                              -> TextIter -- ^ @start@    a 'TextIter'                  
-                              -> TextIter -- ^ @end@      a 'TextIter'                  
-                              -> String -- ^ @category@ category to search for or empty
+sourceBufferRemoveSourceMarks :: (SourceBufferClass buffer, GlibString string) => buffer -- ^ @buffer@   a 'SourceBuffer'.
+                              -> TextIter -- ^ @start@    a 'TextIter'
+                              -> TextIter -- ^ @end@      a 'TextIter'
+                              -> string -- ^ @category@ category to search for or empty
                               -> IO ()
 sourceBufferRemoveSourceMarks buffer start end category =
-  withCString category $ \categoryPtr ->
+  withUTFString category $ \categoryPtr ->
   {#call gtk_source_buffer_remove_source_marks #}
      (toSourceBuffer buffer)
      start
@@ -339,13 +340,13 @@
 
 -- | Moves iter to the position of the next 'SourceMark' of the given category. Returns 'True' if iter was
 -- moved. If category is empty, the next source mark can be of any category.
-sourceBufferForwardIterToSourceMark :: SourceBufferClass buffer => buffer -- ^ @buffer@   a 'SourceBuffer'.             
-                                    -> TextIter -- ^ @iter@     an iterator.                   
-                                    -> String -- ^ @category@ category to search for or emtpy
-                                    -> IO Bool -- ^ returns  whether iter moved.            
+sourceBufferForwardIterToSourceMark :: (SourceBufferClass buffer, GlibString string) => buffer -- ^ @buffer@   a 'SourceBuffer'.
+                                    -> TextIter -- ^ @iter@     an iterator.
+                                    -> string -- ^ @category@ category to search for or emtpy
+                                    -> IO Bool -- ^ returns  whether iter moved.
 sourceBufferForwardIterToSourceMark buffer iter category =
   liftM toBool $
-  withCString category $ \categoryPtr ->
+  withUTFString category $ \categoryPtr ->
   {#call gtk_source_buffer_forward_iter_to_source_mark #}
     (toSourceBuffer buffer)
     iter
@@ -353,68 +354,68 @@
 
 -- | Moves iter to the position of the previous 'SourceMark' of the given category. Returns 'True' if iter
 -- was moved. If category is empty, the previous source mark can be of any category.
-sourceBufferBackwardIterToSourceMark :: SourceBufferClass buffer => buffer  -- ^ @buffer@   a 'SourceBuffer'.             
-                                     -> TextIter -- ^ @iter@     an iterator.                   
-                                     -> String -- ^ @category@ category to search for or emtpy
-                                     -> IO Bool -- ^ returns  whether iter moved.            
+sourceBufferBackwardIterToSourceMark :: (SourceBufferClass buffer, GlibString string) => buffer  -- ^ @buffer@   a 'SourceBuffer'.
+                                     -> TextIter -- ^ @iter@     an iterator.
+                                     -> string -- ^ @category@ category to search for or emtpy
+                                     -> IO Bool -- ^ returns  whether iter moved.
 sourceBufferBackwardIterToSourceMark buffer iter category =
   liftM toBool $
-  withCString category $ \categoryPtr ->
+  withUTFString category $ \categoryPtr ->
   {#call gtk_source_buffer_backward_iter_to_source_mark #}
     (toSourceBuffer buffer)
     iter
     categoryPtr
 
 -- | Forces buffer to analyze and highlight the given area synchronously.
--- 
+--
 -- Note
--- 
+--
 -- This is a potentially slow operation and should be used only when you need to make sure that some
 -- text not currently visible is highlighted, for instance before printing.
-sourceBufferEnsureHighlight :: SourceBufferClass buffer => buffer 
-                            -> TextIter  -- ^ @start@  start of the area to highlight. 
-                            -> TextIter  -- ^ @end@    end of the area to highlight.   
+sourceBufferEnsureHighlight :: SourceBufferClass buffer => buffer
+                            -> TextIter  -- ^ @start@  start of the area to highlight.
+                            -> TextIter  -- ^ @end@    end of the area to highlight.
                             -> IO ()
 sourceBufferEnsureHighlight sb start end =
     {#call source_buffer_ensure_highlight#} (toSourceBuffer sb) start end
 
 -- | Whether Redo operation is possible.
--- 
+--
 -- Default value: 'False'
--- 
+--
 sourceBufferCanRedo :: SourceBufferClass buffer => ReadAttr buffer Bool
 sourceBufferCanRedo = readAttrFromBoolProperty "can-redo"
 
 -- | Whether Undo operation is possible.
--- 
+--
 -- Default value: 'False'
 sourceBufferCanUndo :: SourceBufferClass buffer => ReadAttr buffer Bool
 sourceBufferCanUndo = readAttrFromBoolProperty "can-undo"
 
 -- | Whether to highlight matching brackets in the buffer.
--- 
+--
 -- Default value: 'True'
 --
 sourceBufferHighlightMatchingBrackets :: SourceBufferClass buffer => Attr buffer Bool
 sourceBufferHighlightMatchingBrackets = newAttrFromBoolProperty "highlight-matching-brackets"
 
 -- | Whether to highlight syntax in the buffer.
--- 
+--
 -- Default value: 'True'
 --
 sourceBufferHighlightSyntax :: SourceBufferClass buffer => Attr buffer Bool
 sourceBufferHighlightSyntax = newAttrFromBoolProperty "highlight-matching-brackets"
 
 -- | Language object to get highlighting patterns from.
--- 
+--
 sourceBufferLanguage :: SourceBufferClass buffer => Attr buffer (Maybe SourceLanguage)
 sourceBufferLanguage = newAttrFromMaybeObjectProperty "language" gTypeSourceLanguage
 
 -- | Number of undo levels for the buffer. -1 means no limit. This property will only affect the default
 -- undo manager.
--- 
+--
 -- Allowed values: >= GMaxulong
--- 
+--
 -- Default value: 1000
 --
 sourceBufferMaxUndoLevels :: SourceBufferClass buffer => Attr buffer Int
@@ -422,7 +423,7 @@
 
 -- | Style scheme. It contains styles for syntax highlighting, optionally foreground, background, cursor
 -- color, current line color, and matching brackets style.
--- 
+--
 sourceBufferSourceStyleScheme :: SourceBufferClass buffer => Attr buffer (Maybe SourceStyleScheme)
 sourceBufferSourceStyleScheme = newAttrFromMaybeObjectProperty "style-scheme" gTypeSourceStyleScheme
 
@@ -450,4 +451,4 @@
 -- buffer.
 --
 sourceBufferSourceMarkUpdated :: SourceBufferClass buffer => Signal buffer (TextMark -> IO ())
-sourceBufferSourceMarkUpdated = Signal $ connect_OBJECT__NONE "source-mark-updated" 
+sourceBufferSourceMarkUpdated = Signal $ connect_OBJECT__NONE "source-mark-updated"
diff --git a/Graphics/UI/Gtk/SourceView/SourceCompletionItem.chs b/Graphics/UI/Gtk/SourceView/SourceCompletionItem.chs
--- a/Graphics/UI/Gtk/SourceView/SourceCompletionItem.chs
+++ b/Graphics/UI/Gtk/SourceView/SourceCompletionItem.chs
@@ -58,86 +58,89 @@
 -- | Create a new 'SourceCompletionItem' with label label, icon icon and extra information info. Both
 -- icon and info can be 'Nothing' in which case there will be no icon shown and no extra information
 -- available.
-sourceCompletionItemNew :: String -- ^ @label@   The item label                   
-                        -> String -- ^ @text@    The item text                    
+sourceCompletionItemNew :: GlibString string
+                        => string -- ^ @label@   The item label
+                        -> string -- ^ @text@    The item text
                         -> Maybe Pixbuf -- ^ @icon@    The item icon or 'Nothing'
-                        -> String -- ^ @info@    The item extra information       
+                        -> string -- ^ @info@    The item extra information
                         -> IO SourceCompletionItem
 sourceCompletionItemNew label text icon info =
   wrapNewGObject mkSourceCompletionItem $
-  withUTFString label $ \ labelPtr -> 
-  withUTFString text $ \ textPtr -> 
-  withUTFString info $ \ infoPtr -> 
+  withUTFString label $ \ labelPtr ->
+  withUTFString text $ \ textPtr ->
+  withUTFString info $ \ infoPtr ->
   {#call gtk_source_completion_item_new #}
     labelPtr
     textPtr
     (fromMaybe (Pixbuf nullForeignPtr) icon)
     infoPtr
-  
-  
+
+
 -- | Create a new 'SourceCompletionItem' with markup label markup, icon icon and extra information
 -- info. Both icon and info can be 'Nothing' in which case there will be no icon shown and no extra
 -- information available.
-sourceCompletionItemNewWithMarkup :: String
-                                  -> String
+sourceCompletionItemNewWithMarkup :: GlibString string
+                                  => string
+                                  -> string
                                   -> Maybe Pixbuf
-                                  -> String
+                                  -> string
                                   -> IO SourceCompletionItem
-sourceCompletionItemNewWithMarkup markup text icon info = 
-  wrapNewGObject mkSourceCompletionItem $ 
-  withUTFString markup $ \ markupPtr -> 
-  withUTFString text $ \ textPtr -> 
-  withUTFString info $ \ infoPtr -> 
+sourceCompletionItemNewWithMarkup markup text icon info =
+  wrapNewGObject mkSourceCompletionItem $
+  withUTFString markup $ \ markupPtr ->
+  withUTFString text $ \ textPtr ->
+  withUTFString info $ \ infoPtr ->
   {#call gtk_source_completion_item_new_with_markup #}
     markupPtr
     textPtr
     (fromMaybe (Pixbuf nullForeignPtr) icon)
     infoPtr
-  
+
 -- | Creates a new 'SourceCompletionItem' from a stock item. If label is 'Nothing', the stock label will be
 -- used.
-sourceCompletionItemNewFromStock :: Maybe String -- ^ @label@   The item label or 'Nothing'
-                                 -> String -- ^ @text@    The item text                                  
-                                 -> String -- ^ @stock@   The stock icon                                 
-                                 -> String -- ^ @info@    The item extra information                     
+sourceCompletionItemNewFromStock :: GlibString string
+                                 => Maybe string -- ^ @label@   The item label or 'Nothing'
+                                 -> string -- ^ @text@    The item text
+                                 -> string -- ^ @stock@   The stock icon
+                                 -> string -- ^ @info@    The item extra information
                                  -> IO SourceCompletionItem
 sourceCompletionItemNewFromStock label text stock info =
   wrapNewGObject mkSourceCompletionItem $
-  maybeWith withUTFString label $ \ labelPtr -> 
-  withUTFString text $ \ textPtr -> 
-  withUTFString stock $ \ stockPtr -> 
-  withUTFString info $ \ infoPtr -> 
+  maybeWith withUTFString label $ \ labelPtr ->
+  withUTFString text $ \ textPtr ->
+  withUTFString stock $ \ stockPtr ->
+  withUTFString info $ \ infoPtr ->
   {#call gtk_source_completion_item_new_from_stock #}
     labelPtr
     textPtr
     stockPtr
     infoPtr
-   
+
 -- | Icon to be shown for this proposal.
 sourceCompletionItemIcon :: SourceCompletionItemClass item => Attr item Pixbuf
 sourceCompletionItemIcon = newAttrFromObjectProperty "icon"
                            {# call pure unsafe gdk_pixbuf_get_type #}
 
 -- | Optional extra information to be shown for this proposal.
--- 
+--
 -- Default value: \"\"
-sourceCompletionItemInfo :: SourceCompletionItemClass item => Attr item String
+sourceCompletionItemInfo :: (SourceCompletionItemClass item, GlibString string) => Attr item string
 sourceCompletionItemInfo = newAttrFromStringProperty "info"
 
 -- | Optional extra labelrmation to be shown for this proposal.
--- 
+--
 -- Default value: \"\"
-sourceCompletionItemLabel :: SourceCompletionItemClass item => Attr item String
+sourceCompletionItemLabel :: (SourceCompletionItemClass item, GlibString string) => Attr item string
 sourceCompletionItemLabel = newAttrFromStringProperty "label"
 
 -- | Optional extra markuprmation to be shown for this proposal.
--- 
+--
 -- Default value: \"\"
-sourceCompletionItemMarkup :: SourceCompletionItemClass item => Attr item String
+sourceCompletionItemMarkup :: (SourceCompletionItemClass item, GlibString string) => Attr item string
 sourceCompletionItemMarkup = newAttrFromStringProperty "markup"
 
 -- | Optional extra textrmation to be shown for this proposal.
--- 
+--
 -- Default value: \"\"
-sourceCompletionItemText :: SourceCompletionItemClass item => Attr item String
+sourceCompletionItemText :: (SourceCompletionItemClass item, GlibString string) => Attr item string
 sourceCompletionItemText = newAttrFromStringProperty "text"
diff --git a/Graphics/UI/Gtk/SourceView/SourceCompletionProposal.chs b/Graphics/UI/Gtk/SourceView/SourceCompletionProposal.chs
--- a/Graphics/UI/Gtk/SourceView/SourceCompletionProposal.chs
+++ b/Graphics/UI/Gtk/SourceView/SourceCompletionProposal.chs
@@ -62,8 +62,8 @@
 -- | Gets the label of proposal. The label is shown in the list of proposals as plain text. If you need
 -- any markup (such as bold or italic text), you have to implement
 -- 'sourceCompletionProposalGetMarkup'.
-sourceCompletionProposalGetLabel :: SourceCompletionProposalClass scp => scp
-                                 -> IO String -- ^ returns  A new string containing the label of proposal. 
+sourceCompletionProposalGetLabel :: (SourceCompletionProposalClass scp, GlibString string) => scp
+                                 -> IO string -- ^ returns  A new string containing the label of proposal.
 sourceCompletionProposalGetLabel scp =
   {#call gtk_source_completion_proposal_get_label #}
     (toSourceCompletionProposal scp)
@@ -71,8 +71,8 @@
 
 -- | Gets the label of proposal with markup. The label is shown in the list of proposals and may contain
 -- markup. This will be used instead of 'sourceCompletionProposalGetLabel' if implemented.
-sourceCompletionProposalGetMarkup :: SourceCompletionProposalClass scp => scp
-                                  -> IO String -- ^ returns  A new string containing the label of proposal with markup. 
+sourceCompletionProposalGetMarkup :: (SourceCompletionProposalClass scp, GlibString string) => scp
+                                  -> IO string -- ^ returns  A new string containing the label of proposal with markup.
 sourceCompletionProposalGetMarkup scp =
   {#call gtk_source_completion_proposal_get_markup #}
     (toSourceCompletionProposal scp)
@@ -81,8 +81,8 @@
 -- | Gets the text of proposal. The text that is inserted into the text buffer when the proposal is
 -- activated by the default activation. You are free to implement a custom activation handler in the
 -- provider and not implement this function.
-sourceCompletionProposalGetText :: SourceCompletionProposalClass scp => scp
-                                -> IO String -- ^ returns  A new string containing the text of proposal. 
+sourceCompletionProposalGetText :: (SourceCompletionProposalClass scp, GlibString string) => scp
+                                -> IO string -- ^ returns  A new string containing the text of proposal.
 sourceCompletionProposalGetText scp =
   {#call gtk_source_completion_proposal_get_text #}
     (toSourceCompletionProposal scp)
@@ -90,7 +90,7 @@
 
 -- | Gets the icon of proposal.
 sourceCompletionProposalGetIcon :: SourceCompletionProposalClass scp => scp
-                                -> IO Pixbuf -- ^ returns  The icon of proposal.         
+                                -> IO Pixbuf -- ^ returns  The icon of proposal.
 sourceCompletionProposalGetIcon scp =
   wrapNewGObject mkPixbuf $
   {#call gtk_source_completion_proposal_get_icon #}
@@ -98,28 +98,28 @@
 
 -- | Gets extra information associated to the proposal. This information will be used to present the user
 -- with extra, detailed information about the selected proposal.
-sourceCompletionProposalGetInfo :: SourceCompletionProposalClass scp => scp
-                                -> IO String -- ^ returns  A new string containing extra information of proposal or empty if no extra information is associated to proposal.
+sourceCompletionProposalGetInfo :: (SourceCompletionProposalClass scp, GlibString string) => scp
+                                -> IO string -- ^ returns  A new string containing extra information of proposal or empty if no extra information is associated to proposal.
 sourceCompletionProposalGetInfo scp =
   {#call gtk_source_completion_proposal_get_info #}
     (toSourceCompletionProposal scp)
   >>= peekUTFString
 
 -- | Get the hash value of proposal. This is used to (together with 'sourceCompletionProposalEqual')
--- to match proposals in the completion model. 
+-- to match proposals in the completion model.
 sourceCompletionProposalHash :: SourceCompletionProposalClass scp => scp
-                             -> IO Int  -- ^ returns  The hash value of proposal    
+                             -> IO Int  -- ^ returns  The hash value of proposal
 sourceCompletionProposalHash scp =
   liftM fromIntegral $
   {#call gtk_source_completion_proposal_hash #}
     (toSourceCompletionProposal scp)
 
 -- | Get whether two proposal objects are the same. This is used to (together with
--- 'sourceCompletionProposalHash') to match proposals in the completion model. 
-sourceCompletionProposalEqual :: (SourceCompletionProposalClass scp1, SourceCompletionProposalClass scp2) 
+-- 'sourceCompletionProposalHash') to match proposals in the completion model.
+sourceCompletionProposalEqual :: (SourceCompletionProposalClass scp1, SourceCompletionProposalClass scp2)
                               => scp1
                               -> scp2
-                              -> IO Bool  -- ^ returns  'True' if proposal and object are the same proposal 
+                              -> IO Bool  -- ^ returns  'True' if proposal and object are the same proposal
 sourceCompletionProposalEqual scp1 scp2 =
     liftM toBool $
     {#call gtk_source_completion_proposal_equal #}
diff --git a/Graphics/UI/Gtk/SourceView/SourceCompletionProvider.chs b/Graphics/UI/Gtk/SourceView/SourceCompletionProvider.chs
--- a/Graphics/UI/Gtk/SourceView/SourceCompletionProvider.chs
+++ b/Graphics/UI/Gtk/SourceView/SourceCompletionProvider.chs
@@ -27,7 +27,7 @@
 -- * Description
 -- | You must implement this interface to provide proposals to 'SourceCompletion'
 
--- * Types  
+-- * Types
    SourceCompletionProvider,
    SourceCompletionProviderClass,
 
@@ -61,16 +61,16 @@
 {# context lib="gtk" prefix="gtk" #}
 
 -- | Get the name of the provider. This should be a translatable name for display to the user. For
--- example: _("Document word completion provider"). 
-sourceCompletionProviderGetName :: SourceCompletionProviderClass scp => scp 
-                                -> IO String -- ^ returns  A new string containing the name of the provider. 
+-- example: _("Document word completion provider").
+sourceCompletionProviderGetName :: (SourceCompletionProviderClass scp, GlibString string) => scp
+                                -> IO string -- ^ returns  A new string containing the name of the provider.
 sourceCompletionProviderGetName scp =
   {#call gtk_source_completion_provider_get_name #}
     (toSourceCompletionProvider scp)
   >>= peekUTFString
 
 -- | Get the icon of the provider.
-sourceCompletionProviderGetIcon :: SourceCompletionProviderClass scp => scp 
+sourceCompletionProviderGetIcon :: SourceCompletionProviderClass scp => scp
                                 -> IO (Maybe Pixbuf)
 sourceCompletionProviderGetIcon scp =
   maybeNull (wrapNewGObject mkPixbuf) $
@@ -79,8 +79,8 @@
 
 -- | Get the delay in milliseconds before starting interactive completion for this provider. A value of
 -- -1 indicates to use the default value as set by 'autoCompleteDelay'.
-sourceCompletionProviderGetInteractiveDelay :: SourceCompletionProviderClass scp => scp 
-                                            -> IO Int -- ^ returns  the interactive delay in milliseconds. 
+sourceCompletionProviderGetInteractiveDelay :: SourceCompletionProviderClass scp => scp
+                                            -> IO Int -- ^ returns  the interactive delay in milliseconds.
 sourceCompletionProviderGetInteractiveDelay scp =
   liftM fromIntegral $
   {#call gtk_source_completion_provider_get_interactive_delay #}
@@ -88,13 +88,13 @@
 
 -- | Get the provider priority. The priority determines the order in which proposals appear in the
 -- completion popup. Higher priorities are sorted before lower priorities. The default priority is 0.
-sourceCompletionProviderGetPriority :: SourceCompletionProviderClass scp => scp 
-                                    -> IO Int -- ^ returns  the provider priority.          
+sourceCompletionProviderGetPriority :: SourceCompletionProviderClass scp => scp
+                                    -> IO Int -- ^ returns  the provider priority.
 sourceCompletionProviderGetPriority scp =
   liftM fromIntegral $
   {#call gtk_source_completion_provider_get_priority #}
     (toSourceCompletionProvider scp)
-  
+
 -- | Get a customized info widget to show extra information of a proposal. This allows for customized
 -- widgets on a proposal basis, although in general providers will have the same custom widget for all
 -- their proposals and proposal can be ignored.  The implementation of this function is optional. If
@@ -102,8 +102,8 @@
 -- implemented, the default 'sourceCompletionProposalGetInfo' will be used to display extra
 -- information about a 'SourceCompletionProposal'.
 sourceCompletionProviderGetInfoWidget :: SourceCompletionProviderClass scp => scp
-                                      -> SourceCompletionProposal -- ^ @proposal@ The currently selected 'SourceCompletionProposal'           
-                                     -> IO Widget -- ^ returns  a custom 'Widget' to show extra information about proposal. 
+                                      -> SourceCompletionProposal -- ^ @proposal@ The currently selected 'SourceCompletionProposal'
+                                     -> IO Widget -- ^ returns  a custom 'Widget' to show extra information about proposal.
 sourceCompletionProviderGetInfoWidget scp proposal =
   makeNewObject mkWidget $
   {#call gtk_source_completion_provider_get_info_widget #}
@@ -132,7 +132,7 @@
                 context
                 proposal
                 iter
-  if success 
+  if success
      then return (Just iter)
      else return Nothing
 
diff --git a/Graphics/UI/Gtk/SourceView/SourceIter.chs b/Graphics/UI/Gtk/SourceView/SourceIter.chs
--- a/Graphics/UI/Gtk/SourceView/SourceIter.chs
+++ b/Graphics/UI/Gtk/SourceView/SourceIter.chs
@@ -61,16 +61,16 @@
 -- match and @matchEnd@ to the first character after the match. The search will not continue past
 -- limit. Note that a search is a linear or O(n) operation, so you may wish to use limit to avoid
 -- locking up your UI on large buffers.
--- 
+--
 -- If the 'SourceSearchVisibleOnly' flag is present, the match may have invisible text
 -- interspersed in str. i.e. str will be a possibly-noncontiguous subsequence of the matched
 -- range. similarly, if you specify 'SourceSearchTextOnly', the match may have pixbufs or child
 -- widgets mixed inside the matched range. If these flags are not given, the match must be exact; the
 -- special 0xFFFC character in str will match embedded pixbufs or child widgets. If you specify the
 -- 'SourceSearchCaseInsensitive' flag, the text will be matched regardless of what case it is in.
--- 
+--
 -- Same as 'textIterForwardSearch', but supports case insensitive searching.
-sourceIterForwardSearch :: TextIter -> String -> [SourceSearchFlags] -> 
+sourceIterForwardSearch :: GlibString string => TextIter -> string -> [SourceSearchFlags] ->
                            Maybe TextIter -> IO (Maybe (TextIter, TextIter))
 sourceIterForwardSearch ti str flags limit = do
    start  <- makeEmptyTextIter
@@ -84,7 +84,7 @@
 -- | same as 'textIterForwardSearch' but allows
 -- case insensitive search and possibly in the future regular expressions.
 --
-sourceIterBackwardSearch :: TextIter -> String -> [SourceSearchFlags] -> 
+sourceIterBackwardSearch :: GlibString string => TextIter -> string -> [SourceSearchFlags] ->
                            Maybe TextIter -> IO (Maybe (TextIter, TextIter))
 sourceIterBackwardSearch ti str flags limit = do
    start  <- makeEmptyTextIter
diff --git a/Graphics/UI/Gtk/SourceView/SourceLanguage.chs b/Graphics/UI/Gtk/SourceView/SourceLanguage.chs
--- a/Graphics/UI/Gtk/SourceView/SourceLanguage.chs
+++ b/Graphics/UI/Gtk/SourceView/SourceLanguage.chs
@@ -71,38 +71,38 @@
 
 -- | Returns the ID of the language. The ID is not locale-dependent.
 --
-sourceLanguageGetId :: SourceLanguageClass sl => sl
-                    -> IO String -- ^ returns  the ID of language. The returned string is owned by language and should not be freed or modified.
+sourceLanguageGetId :: (SourceLanguageClass sl, GlibString string) => sl
+                    -> IO string -- ^ returns  the ID of language. The returned string is owned by language and should not be freed or modified.
 sourceLanguageGetId sl =
   {#call unsafe source_language_get_id#} (toSourceLanguage sl) >>= peekUTFString
 
 -- | Returns the localized name of the language.
 --
-sourceLanguageGetName :: SourceLanguageClass sl => sl 
-                      -> IO String -- ^ returns  the name of language. The returned string is owned by language and should not be freed or modified.
+sourceLanguageGetName :: (SourceLanguageClass sl, GlibString string) => sl
+                      -> IO string -- ^ returns  the name of language. The returned string is owned by language and should not be freed or modified.
 sourceLanguageGetName sl =
   {#call unsafe source_language_get_name#} (toSourceLanguage sl) >>= peekUTFString
 
 -- | Returns the localized section of the language. Each language belong to a section (ex. HTML belogs to
 -- the Markup section).
 --
-sourceLanguageGetSection :: SourceLanguageClass sl => sl 
-                         -> IO String -- ^ returns  the section of language. The returned string is owned by language and should not be freed or modified.
+sourceLanguageGetSection :: (SourceLanguageClass sl, GlibString string) => sl
+                         -> IO string -- ^ returns  the section of language. The returned string is owned by language and should not be freed or modified.
 sourceLanguageGetSection sl =
   {#call unsafe source_language_get_section#} (toSourceLanguage sl) >>= peekUTFString
 
 -- | Returns whether the language should be hidden from the user.
 --
-sourceLanguageGetHidden :: SourceLanguageClass sl => sl 
-                        -> IO Bool -- ^ returns  'True' if the language should be hidden, 'False' otherwise. 
+sourceLanguageGetHidden :: SourceLanguageClass sl => sl
+                        -> IO Bool -- ^ returns  'True' if the language should be hidden, 'False' otherwise.
 sourceLanguageGetHidden sl = liftM toBool $
   {#call unsafe source_language_get_hidden#} (toSourceLanguage sl)
 
 -- |
 --
-sourceLanguageGetMetadata :: SourceLanguageClass sl => sl 
-                          -> String  -- ^ @name@     metadata property name.
-                          -> IO String -- ^ returns  value of property name stored in the metadata of language or empty if language doesn't contain that metadata
+sourceLanguageGetMetadata :: (SourceLanguageClass sl, GlibString string) => sl
+                          -> string  -- ^ @name@     metadata property name.
+                          -> IO string -- ^ returns  value of property name stored in the metadata of language or empty if language doesn't contain that metadata
 sourceLanguageGetMetadata sl name = do
   withUTFString name ({#call unsafe source_language_get_metadata#} (toSourceLanguage sl)) >>= peekUTFString
 
@@ -110,8 +110,8 @@
 -- 'sourceLanguageGetMetadata ' to retrieve the "mimetypes" metadata property and split it into
 -- an array.
 --
-sourceLanguageGetMimeTypes :: SourceLanguageClass sl => sl 
-                           -> IO [String] -- ^ returns  an array containing the mime types or empty if no mime types are found. The        
+sourceLanguageGetMimeTypes :: (SourceLanguageClass sl, GlibString string) => sl
+                           -> IO [string] -- ^ returns  an array containing the mime types or empty if no mime types are found. The
 sourceLanguageGetMimeTypes sl = do
   mimeTypesArray <- {#call unsafe source_language_get_mime_types#} (toSourceLanguage sl)
   mimeTypes <- liftM (fromMaybe []) $ maybePeek peekUTFStringArray0 mimeTypesArray
@@ -122,8 +122,8 @@
 -- 'sourceLanguageGetMetadata' to retrieve the "globs" metadata property and split it into an
 -- array.
 --
-sourceLanguageGetGlobs :: SourceLanguageClass sl => sl 
-                       -> IO [String] -- ^ returns  an array containing the globs or empty if no globs are found. 
+sourceLanguageGetGlobs :: (SourceLanguageClass sl, GlibString string) => sl
+                       -> IO [string] -- ^ returns  an array containing the globs or empty if no globs are found.
 sourceLanguageGetGlobs sl = do
   globsArray <- {#call unsafe source_language_get_globs#} (toSourceLanguage sl)
   globs <- liftM (fromMaybe []) $ maybePeek peekUTFStringArray0 globsArray
@@ -131,9 +131,9 @@
   return globs
 
 -- | Returns the name of the style with ID @styleId@ defined by this language.
-sourceLanguageGetStyleName :: SourceLanguageClass sl => sl 
-                           -> String -- ^ @styleId@ a style ID
-                           -> IO String  -- ^ returns the name of the style with ID @styleId@ defined by this language or empty if the style has no name or there is no style with ID @styleId@ defined by this language. The returned string is owned by the language and must not be modified.
+sourceLanguageGetStyleName :: (SourceLanguageClass sl, GlibString string) => sl
+                           -> string -- ^ @styleId@ a style ID
+                           -> IO string  -- ^ returns the name of the style with ID @styleId@ defined by this language or empty if the style has no name or there is no style with ID @styleId@ defined by this language. The returned string is owned by the language and must not be modified.
 sourceLanguageGetStyleName sl styleId =
     withUTFString styleId $ \styleIdPtr ->
     {#call gtk_source_language_get_style_name#}
@@ -142,8 +142,8 @@
     >>= peekUTFString
 
 -- | Returns the ids of the styles defined by this language.
-sourceLanguageGetStyleIds :: SourceLanguageClass sl => sl 
-                          -> IO [String] -- ^ returns  an array containing ids of the styles defined by this language or empty if no style is defined. 
+sourceLanguageGetStyleIds :: (SourceLanguageClass sl, GlibString string) => sl
+                          -> IO [string] -- ^ returns  an array containing ids of the styles defined by this language or empty if no style is defined.
 sourceLanguageGetStyleIds sl = do
   globsArray <- {#call gtk_source_language_get_style_ids#} (toSourceLanguage sl)
   globs <- liftM (fromMaybe []) $ maybePeek peekUTFStringArray0 globsArray
@@ -151,29 +151,29 @@
   return globs
 
 -- | Whether the language should be hidden from the user.
--- 
+--
 -- Default value: 'False'
 --
 sourceLanguageHidden :: SourceLanguageClass sl => ReadAttr sl Bool
 sourceLanguageHidden = readAttrFromBoolProperty "hidden"
 
 -- | Language id.
--- 
+--
 -- Default value: \"\"
 --
-sourceLanguageId :: SourceLanguageClass sl => ReadAttr sl String
+sourceLanguageId :: (SourceLanguageClass sl, GlibString string) => ReadAttr sl string
 sourceLanguageId = readAttrFromStringProperty "id"
 
 -- | Language name.
--- 
+--
 -- Default value: \"\"
 --
-sourceLanguageName :: SourceLanguageClass sl => ReadAttr sl String
+sourceLanguageName :: (SourceLanguageClass sl, GlibString string) => ReadAttr sl string
 sourceLanguageName = readAttrFromStringProperty "name"
 
 -- | Language section.
--- 
+--
 -- Default value: \"\"
 --
-sourceLanguageSection :: SourceLanguageClass sl => ReadAttr sl String
+sourceLanguageSection :: (SourceLanguageClass sl, GlibString string) => ReadAttr sl string
 sourceLanguageSection = readAttrFromStringProperty "section"
diff --git a/Graphics/UI/Gtk/SourceView/SourceLanguageManager.chs b/Graphics/UI/Gtk/SourceView/SourceLanguageManager.chs
--- a/Graphics/UI/Gtk/SourceView/SourceLanguageManager.chs
+++ b/Graphics/UI/Gtk/SourceView/SourceLanguageManager.chs
@@ -80,37 +80,37 @@
 
 -- | Sets the list of directories where the lm looks for language files. If dirs is 'Nothing', the search path
 -- is reset to default.
--- 
+--
 -- Note
--- 
+--
 -- At the moment this function can be called only before the language files are loaded for the first
 -- time. In practice to set a custom search path for a 'SourceLanguageManager', you have to call this
 -- function right after creating it.
 --
-sourceLanguageManagerSetSearchPath :: SourceLanguageManagerClass slm => slm -> Maybe [String] -> IO ()
+sourceLanguageManagerSetSearchPath :: (SourceLanguageManagerClass slm, GlibFilePath fp) => slm -> Maybe [fp] -> IO ()
 sourceLanguageManagerSetSearchPath slm dirs =
-  maybeWith withUTFStringArray0 dirs $ \dirsPtr -> do
+  maybeWith withUTFFilePathArray0 dirs $ \dirsPtr -> do
     {#call unsafe source_language_manager_set_search_path#} (toSourceLanguageManager slm) dirsPtr
 
 -- | Gets the list directories where lm looks for language files.
 --
-sourceLanguageManagerGetSearchPath :: SourceLanguageManagerClass slm => slm -> IO [String]
+sourceLanguageManagerGetSearchPath :: (SourceLanguageManagerClass slm, GlibFilePath fp) => slm -> IO [fp]
 sourceLanguageManagerGetSearchPath slm = do
   dirsPtr <- {#call unsafe source_language_manager_get_search_path#} (toSourceLanguageManager slm)
-  liftM (fromMaybe []) $ maybePeek peekUTFStringArray0 dirsPtr
+  liftM (fromMaybe []) $ maybePeek peekUTFFilePathArray0 dirsPtr
 
 -- | Returns the ids of the available languages.
 --
-sourceLanguageManagerGetLanguageIds :: SourceLanguageManagerClass slm => slm -> IO [String]
+sourceLanguageManagerGetLanguageIds :: (SourceLanguageManagerClass slm, GlibString string) => slm -> IO [string]
 sourceLanguageManagerGetLanguageIds slm = do
   idsPtr <- {#call unsafe source_language_manager_get_language_ids#} (toSourceLanguageManager slm)
   liftM (fromMaybe []) $ maybePeek peekUTFStringArray0 idsPtr
 
 -- | Gets the 'SourceLanguage' identified by the given id in the language manager.
 --
-sourceLanguageManagerGetLanguage :: SourceLanguageManagerClass slm => slm 
-                                 -> String  -- ^ @id@      a language id.
-                                 -> IO (Maybe SourceLanguage) -- ^ returns a 'SourceLanguage', or 'Nothing' if there is no language identified by the given id. 
+sourceLanguageManagerGetLanguage :: (SourceLanguageManagerClass slm, GlibString string) => slm
+                                 -> string  -- ^ @id@      a language id.
+                                 -> IO (Maybe SourceLanguage) -- ^ returns a 'SourceLanguage', or 'Nothing' if there is no language identified by the given id.
 sourceLanguageManagerGetLanguage slm id = do
   slPtr <- liftM castPtr $
     withUTFString id ({#call unsafe source_language_manager_get_language#} (toSourceLanguageManager slm))
@@ -121,12 +121,12 @@
 -- | Picks a 'SourceLanguage' for given file name and content type, according to the information in lang
 -- files. Either filename or @contentType@ may be 'Nothing'.
 --
-sourceLanguageManagerGuessLanguage :: SourceLanguageManagerClass slm => slm 
-                                   -> Maybe String  -- ^ @filename@     a filename in Glib filename encoding, or 'Nothing'.
-                                   -> Maybe String  -- ^ @contentType@ a content type (as in GIO API), or 'Nothing'.
-                                   -> IO (Maybe SourceLanguage) -- ^ returns      a 'SourceLanguage', or 'Nothing' if there is no suitable language for given filename and/or @contentType@. 
+sourceLanguageManagerGuessLanguage :: (SourceLanguageManagerClass slm, GlibFilePath fp, GlibString string) => slm
+                                   -> Maybe fp      -- ^ @filename@     a filename in Glib filename encoding, or 'Nothing'.
+                                   -> Maybe string  -- ^ @contentType@ a content type (as in GIO API), or 'Nothing'.
+                                   -> IO (Maybe SourceLanguage) -- ^ returns      a 'SourceLanguage', or 'Nothing' if there is no suitable language for given filename and/or @contentType@.
 sourceLanguageManagerGuessLanguage slm filename contentType =
-  maybeWith withUTFString filename $ \cFilename ->
+  maybeWith withUTFFilePath filename $ \cFilename ->
   maybeWith withUTFString contentType $ \cContentType -> do
     slPtr <- liftM castPtr $
       {#call unsafe source_language_manager_guess_language#} (toSourceLanguageManager slm) cFilename cContentType
@@ -136,14 +136,14 @@
 
 -- | List of the ids of the available languages.
 --
-sourceLanguageManagerLanguageIds :: SourceLanguageManagerClass slm => ReadAttr slm [String]
+sourceLanguageManagerLanguageIds :: (SourceLanguageManagerClass slm, GlibString string) => ReadAttr slm [string]
 sourceLanguageManagerLanguageIds =
   readAttrFromBoxedOpaqueProperty (liftM (fromMaybe []) . maybePeek peekUTFStringArray0 . castPtr)
                                   "language-ids" {#call pure g_strv_get_type#}
 
 -- | List of directories where the language specification files (.lang) are located.
 --
-sourceLanguageManagerSearchPath :: SourceLanguageManagerClass slm => ReadWriteAttr slm [String] (Maybe [String])
+sourceLanguageManagerSearchPath :: (SourceLanguageManagerClass slm, GlibString string) => ReadWriteAttr slm [string] (Maybe [string])
 sourceLanguageManagerSearchPath =
   newAttr (objectGetPropertyBoxedOpaque (peekUTFStringArray0 . castPtr) gtype "search-path")
           (objectSetPropertyBoxedOpaque (\dirs f -> maybeWith withUTFStringArray0 dirs (f . castPtr)) gtype "search-path")
diff --git a/Graphics/UI/Gtk/SourceView/SourceMark.chs b/Graphics/UI/Gtk/SourceView/SourceMark.chs
--- a/Graphics/UI/Gtk/SourceView/SourceMark.chs
+++ b/Graphics/UI/Gtk/SourceView/SourceMark.chs
@@ -29,7 +29,7 @@
 -- * Description
 -- | A 'SourceMark' marks a position in the text where you want to display additional info. It is based
 -- on 'TextMark' and thus is still valid after the text has changed though its position may change.
--- 
+--
 -- 'SourceMarks' are organised in categories which you have to set when you create the mark. Each
 -- category can have a pixbuf and a priority associated using @gtkSourceViewSetMarkCategoryPixbuf@
 -- and @gtkSourceViewSetMarkCategoryPriority@. The pixbuf will be displayed in the margin at the
@@ -70,10 +70,11 @@
 -- is anonymous; otherwise, the mark can be retrieved by name using
 -- 'textBufferGetMark'. Normally marks are created using the utility function
 -- 'sourceBufferCreateMark'.
-sourceMarkNew :: Maybe String -- ^ @name@     Name of the 'SourceMark', can be 'Nothing' when not using a name
-              -> String  -- ^ @category@ is used to classify marks according to common characteristics (e.g. all the marks representing a bookmark could  
+sourceMarkNew :: GlibString string
+              => Maybe string -- ^ @name@     Name of the 'SourceMark', can be 'Nothing' when not using a name
+              -> string  -- ^ @category@ is used to classify marks according to common characteristics (e.g. all the marks representing a bookmark could
               -> IO SourceMark
-sourceMarkNew name category = 
+sourceMarkNew name category =
   wrapNewGObject mkSourceMark $
   maybeWith withUTFString name $ \namePtr ->
   withUTFString category $ \categoryPtr ->
@@ -82,9 +83,9 @@
     categoryPtr
 
 -- | Returns the mark category
--- 
-sourceMarkGetCategory :: SourceMarkClass mark => mark
-                      -> IO String -- ^ returns the category of the 'SourceMark' 
+--
+sourceMarkGetCategory :: (SourceMarkClass mark, GlibString string) => mark
+                      -> IO string -- ^ returns the category of the 'SourceMark'
 sourceMarkGetCategory mark = do
   strPtr <- {#call unsafe source_mark_get_category#} (toSourceMark mark)
   markType <- peekUTFString strPtr
@@ -93,25 +94,25 @@
 
 -- | Returns the next 'SourceMark' in the buffer or 'Nothing' if the mark was not added to a buffer. If there
 -- is no next mark, 'Nothing' will be returned.
--- 
+--
 -- If category is 'Nothing', looks for marks of any category
--- 
-sourceMarkNext :: SourceMarkClass mark => mark 
-               -> Maybe String  -- ^ @category@ a string specifying the mark category or 'Nothing' 
-               -> IO (Maybe SourceMark) -- ^ returns  the next 'SourceMark' or 'Nothing'                
-sourceMarkNext mark category = 
+--
+sourceMarkNext :: (SourceMarkClass mark, GlibString string) => mark
+               -> Maybe string  -- ^ @category@ a string specifying the mark category or 'Nothing'
+               -> IO (Maybe SourceMark) -- ^ returns  the next 'SourceMark' or 'Nothing'
+sourceMarkNext mark category =
     maybeNull (makeNewGObject mkSourceMark) $
     maybeWith withUTFString category $ {#call unsafe source_mark_next#} (toSourceMark mark)
 
 -- | Returns the previous 'SourceMark' in the buffer or 'Nothing' if the mark was not added to a buffer. If
 -- there is no previous mark, 'Nothing' is returned.
--- 
+--
 -- If category is 'Nothing', looks for marks of any category
--- 
-sourceMarkPrev :: SourceMarkClass mark => mark 
-               -> Maybe String  -- ^ @category@ a string specifying the mark category or 'Nothing' 
-               -> IO (Maybe SourceMark) -- ^ returns  the previous 'SourceMark' or 'Nothing'            
-sourceMarkPrev mark category = 
+--
+sourceMarkPrev :: (SourceMarkClass mark, GlibString string) => mark
+               -> Maybe string  -- ^ @category@ a string specifying the mark category or 'Nothing'
+               -> IO (Maybe SourceMark) -- ^ returns  the previous 'SourceMark' or 'Nothing'
+sourceMarkPrev mark category =
     maybeNull (makeNewGObject mkSourceMark) $
     maybeWith withUTFString category $ {#call unsafe source_mark_prev#} (toSourceMark mark)
 
@@ -119,5 +120,5 @@
 -- which priority it is drawn.
 -- Default value: \"\"
 --
-sourceMarkCategory :: SourceMarkClass mark => Attr mark String
+sourceMarkCategory :: (SourceMarkClass mark, GlibString string) => Attr mark string
 sourceMarkCategory = newAttrFromStringProperty "category"
diff --git a/Graphics/UI/Gtk/SourceView/SourceStyle.hs b/Graphics/UI/Gtk/SourceView/SourceStyle.hs
--- a/Graphics/UI/Gtk/SourceView/SourceStyle.hs
+++ b/Graphics/UI/Gtk/SourceView/SourceStyle.hs
@@ -28,13 +28,15 @@
   SourceStyle(..),
   ) where
 
+import Data.Text (Text)
+
 data SourceStyle =
   SourceStyle
-  { sourceStyleBackground     :: Maybe String
+  { sourceStyleBackground     :: Maybe Text
   , sourceStyleBold           :: Maybe Bool
-  , sourceStyleForeground     :: Maybe String
+  , sourceStyleForeground     :: Maybe Text
   , sourceStyleItalic         :: Maybe Bool
-  , sourceStyleLineBackground :: Maybe String
+  , sourceStyleLineBackground :: Maybe Text
   , sourceStyleStrikethrough  :: Maybe Bool
   , sourceStyleUnderline      :: Maybe Bool
   }
diff --git a/Graphics/UI/Gtk/SourceView/SourceStyleScheme.chs b/Graphics/UI/Gtk/SourceView/SourceStyleScheme.chs
--- a/Graphics/UI/Gtk/SourceView/SourceStyleScheme.chs
+++ b/Graphics/UI/Gtk/SourceView/SourceStyleScheme.chs
@@ -29,7 +29,7 @@
 -- | 'SourceStyleScheme' contains all the text styles to be used in 'SourceView' and
 -- 'SourceBuffer'. For instance, it contains text styles for syntax highlighting, it may contain
 -- foreground and background color for non-highlighted text, color for the line numbers, etc.
--- 
+--
 -- Style schemes are stored in XML files. The format of a scheme file is the documented in the style
 -- scheme reference.
 
@@ -37,7 +37,7 @@
   SourceStyleScheme,
   SourceStyleSchemeClass,
 
--- * Methods  
+-- * Methods
   castToSourceStyleScheme,
   sourceStyleSchemeGetId,
   sourceStyleSchemeGetName,
@@ -46,7 +46,7 @@
   sourceStyleSchemeGetFilename,
   sourceStyleSchemeGetStyle,
 
--- * Attributes  
+-- * Attributes
   sourceStyleSchemeDescription,
   sourceStyleSchemeFilename,
   sourceStyleSchemeId,
@@ -69,45 +69,45 @@
 
 -- methods
 
--- | 
--- 
-sourceStyleSchemeGetId :: SourceStyleSchemeClass sss => sss
-                       -> IO String -- ^ returns scheme id.              
+-- |
+--
+sourceStyleSchemeGetId :: (SourceStyleSchemeClass sss, GlibString string) => sss
+                       -> IO string -- ^ returns scheme id.
 sourceStyleSchemeGetId ss =
   {#call source_style_scheme_get_id#} (toSourceStyleScheme ss) >>= peekUTFString
 
--- | 
--- 
-sourceStyleSchemeGetName :: SourceStyleSchemeClass sss => sss 
-                         -> IO String -- ^ returns scheme name.            
+-- |
+--
+sourceStyleSchemeGetName :: (SourceStyleSchemeClass sss, GlibString string) => sss
+                         -> IO string -- ^ returns scheme name.
 sourceStyleSchemeGetName ss =
   {#call source_style_scheme_get_name#} (toSourceStyleScheme ss) >>= peekUTFString
 
--- | 
--- 
-sourceStyleSchemeGetDescription :: SourceStyleSchemeClass sss => sss 
-                                -> IO String -- ^ returns scheme description (if defined) or empty. 
+-- |
+--
+sourceStyleSchemeGetDescription :: (SourceStyleSchemeClass sss, GlibString string) => sss
+                                -> IO string -- ^ returns scheme description (if defined) or empty.
 sourceStyleSchemeGetDescription ss =
   {#call source_style_scheme_get_description#} (toSourceStyleScheme ss) >>= peekUTFString
 
 -- |
 --
-sourceStyleSchemeGetAuthors :: SourceStyleSchemeClass sss => sss 
-                            -> IO [String] -- ^ returns an array containing the scheme authors or empty if no author is specified by the style scheme.
+sourceStyleSchemeGetAuthors :: (SourceStyleSchemeClass sss, GlibString string) => sss
+                            -> IO [string] -- ^ returns an array containing the scheme authors or empty if no author is specified by the style scheme.
 sourceStyleSchemeGetAuthors ss =
   {#call source_style_scheme_get_authors#} (toSourceStyleScheme ss) >>= peekUTFStringArray0
 
--- | 
--- 
-sourceStyleSchemeGetFilename :: SourceStyleSchemeClass sss => sss 
-                             -> IO String -- ^ returns scheme file name if the scheme was created parsing a style scheme file or empty in the other cases.
+-- |
+--
+sourceStyleSchemeGetFilename :: (SourceStyleSchemeClass sss, GlibString string) => sss
+                             -> IO string -- ^ returns scheme file name if the scheme was created parsing a style scheme file or empty in the other cases.
 sourceStyleSchemeGetFilename ss =
   {#call source_style_scheme_get_filename#} (toSourceStyleScheme ss) >>= peekUTFString
 
--- | 
--- 
-sourceStyleSchemeGetStyle :: SourceStyleSchemeClass sss => sss 
-                          -> String  -- ^ @styleId@ id of the style to retrieve.
+-- |
+--
+sourceStyleSchemeGetStyle :: (SourceStyleSchemeClass sss, GlibString string) => sss
+                          -> string  -- ^ @styleId@ id of the style to retrieve.
                           -> IO SourceStyle -- ^ returns  style which corresponds to @styleId@ in the scheme
 sourceStyleSchemeGetStyle ss id = do
   styleObj <- makeNewGObject mkSourceStyleObject $
@@ -115,29 +115,29 @@
   sourceStyleFromObject styleObj
 
 -- | Style scheme description.
--- 
+--
 -- Default value: \"\"
 --
-sourceStyleSchemeDescription :: SourceStyleSchemeClass sss => ReadAttr sss String
+sourceStyleSchemeDescription :: (SourceStyleSchemeClass sss, GlibString string) => ReadAttr sss string
 sourceStyleSchemeDescription = readAttrFromStringProperty "description"
 
 -- | Style scheme filename or 'Nothing'.
--- 
+--
 -- Default value: \"\"
 --
-sourceStyleSchemeFilename :: SourceStyleSchemeClass sss => ReadAttr sss FilePath
-sourceStyleSchemeFilename = readAttrFromStringProperty "filename"
+sourceStyleSchemeFilename :: (SourceStyleSchemeClass sss, GlibFilePath fp) => ReadAttr sss fp
+sourceStyleSchemeFilename = readAttrFromFilePathProperty "filename"
 
 -- | Style scheme id, a unique string used to identify the style scheme in 'SourceStyleSchemeManager'.
--- 
+--
 -- Default value: \"\"
 --
-sourceStyleSchemeId :: SourceStyleSchemeClass sss => ReadAttr sss String
+sourceStyleSchemeId :: (SourceStyleSchemeClass sss, GlibString string) => ReadAttr sss string
 sourceStyleSchemeId = readAttrFromStringProperty "id"
 
 -- | Style scheme name, a translatable string to present to user.
--- 
+--
 -- Default value: \"\"
 --
-sourceStyleSchemeName :: SourceStyleSchemeClass sss => ReadAttr sss String
+sourceStyleSchemeName :: (SourceStyleSchemeClass sss, GlibString string) => ReadAttr sss string
 sourceStyleSchemeName = readAttrFromStringProperty "name"
diff --git a/Graphics/UI/Gtk/SourceView/SourceStyleSchemeManager.chs b/Graphics/UI/Gtk/SourceView/SourceStyleSchemeManager.chs
--- a/Graphics/UI/Gtk/SourceView/SourceStyleSchemeManager.chs
+++ b/Graphics/UI/Gtk/SourceView/SourceStyleSchemeManager.chs
@@ -29,7 +29,7 @@
   SourceStyleSchemeManager,
   SourceStyleSchemeManagerClass,
 
--- * Methods  
+-- * Methods
   sourceStyleSchemeManagerNew,
   sourceStyleSchemeManagerGetDefault,
   sourceStyleSchemeManagerSetSearchPath,
@@ -75,49 +75,49 @@
 -- | Sets the list of directories where the manager looks for style scheme files. If dirs is 'Nothing', the
 -- search path is reset to default.
 --
-sourceStyleSchemeManagerSetSearchPath :: SourceStyleSchemeManagerClass sssm => sssm -> Maybe [String] -> IO ()
+sourceStyleSchemeManagerSetSearchPath :: (SourceStyleSchemeManagerClass sssm, GlibFilePath fp) => sssm -> Maybe [fp] -> IO ()
 sourceStyleSchemeManagerSetSearchPath ssm dirs =
-  maybeWith withUTFStringArray0 dirs $ \dirsPtr -> do
+  maybeWith withUTFFilePathArray0 dirs $ \dirsPtr -> do
     {#call unsafe source_style_scheme_manager_set_search_path#} (toSourceStyleSchemeManager ssm) dirsPtr
 
 -- | Appends path to the list of directories where the manager looks for style scheme files. See
 -- 'sourceStyleSchemeManagerSetSearchPath' for details.
 --
-sourceStyleSchemeManagerAppendSearchPath :: SourceStyleSchemeManagerClass sssm => sssm 
-                                         -> String  -- ^ @path@    a directory or a filename.     
+sourceStyleSchemeManagerAppendSearchPath :: (SourceStyleSchemeManagerClass sssm, GlibFilePath fp) => sssm
+                                         -> fp  -- ^ @path@    a directory or a filename.
                                          -> IO ()
 sourceStyleSchemeManagerAppendSearchPath ssm dir =
-  withUTFString dir $ {#call unsafe source_style_scheme_manager_append_search_path#} (toSourceStyleSchemeManager ssm)
+  withUTFFilePath dir $ {#call unsafe source_style_scheme_manager_append_search_path#} (toSourceStyleSchemeManager ssm)
 
 -- | Prepends path to the list of directories where the manager looks for style scheme files. See
 -- 'sourceStyleSchemeManagerSetSearchPath' for details.
 --
-sourceStyleSchemeManagerPrependSearchPath :: SourceStyleSchemeManagerClass sssm => sssm 
-                                          -> String  -- ^ @path@    a directory or a filename.     
+sourceStyleSchemeManagerPrependSearchPath :: (SourceStyleSchemeManagerClass sssm, GlibFilePath fp) => sssm
+                                          -> fp  -- ^ @path@    a directory or a filename.
                                           -> IO ()
 sourceStyleSchemeManagerPrependSearchPath ssm dir =
-  withUTFString dir $ {#call unsafe source_style_scheme_manager_prepend_search_path#} (toSourceStyleSchemeManager ssm)
+  withUTFFilePath dir $ {#call unsafe source_style_scheme_manager_prepend_search_path#} (toSourceStyleSchemeManager ssm)
 
 -- | Returns the current search path for the manager. See
 -- 'sourceStyleSchemeManagerSetSearchPath' for details.
 --
-sourceStyleSchemeManagerGetSearchPath :: SourceStyleSchemeManagerClass sssm => sssm 
-                                      -> IO [String]
+sourceStyleSchemeManagerGetSearchPath :: (SourceStyleSchemeManagerClass sssm, GlibFilePath fp) => sssm
+                                      -> IO [fp]
 sourceStyleSchemeManagerGetSearchPath ssm = do
   dirsPtr <- {#call unsafe source_style_scheme_manager_get_search_path#} (toSourceStyleSchemeManager ssm)
-  peekUTFStringArray0 dirsPtr
+  peekUTFFilePathArray0 dirsPtr
 
 -- | Returns the ids of the available style schemes.
 --
-sourceStyleSchemeManagerGetSchemeIds :: SourceStyleSchemeManagerClass sssm => sssm -> IO [String]
+sourceStyleSchemeManagerGetSchemeIds :: (SourceStyleSchemeManagerClass sssm, GlibString string) => sssm -> IO [string]
 sourceStyleSchemeManagerGetSchemeIds ssm = do
   idsPtr <- {#call unsafe source_style_scheme_manager_get_scheme_ids#} (toSourceStyleSchemeManager ssm)
   liftM (fromMaybe []) $ maybePeek peekUTFStringArray0 idsPtr
 
 -- | Looks up style scheme by id.
 --
-sourceStyleSchemeManagerGetScheme :: SourceStyleSchemeManagerClass sssm => sssm 
-                                  -> String  -- ^ @schemeId@ style scheme id to find
+sourceStyleSchemeManagerGetScheme :: (SourceStyleSchemeManagerClass sssm, GlibString string) => sssm
+                                  -> string  -- ^ @schemeId@ style scheme id to find
                                   -> IO SourceStyleScheme
 sourceStyleSchemeManagerGetScheme ssm id = makeNewGObject mkSourceStyleScheme $
   withUTFString id $ {#call unsafe source_style_scheme_manager_get_scheme#} (toSourceStyleSchemeManager ssm)
@@ -131,15 +131,15 @@
 
 -- | List of the ids of the available style schemes.
 --
-sourceStyleSchemeManagerStyleIds :: SourceStyleSchemeManagerClass sssm => ReadAttr sssm [String]
+sourceStyleSchemeManagerStyleIds :: (SourceStyleSchemeManagerClass sssm, GlibString string) => ReadAttr sssm [string]
 sourceStyleSchemeManagerStyleIds =
   readAttrFromBoxedOpaqueProperty (liftM (fromMaybe []) . maybePeek peekUTFStringArray0 . castPtr)
                                   "style-ids" {#call pure g_strv_get_type#}
 
 -- | List of directories and files where the style schemes are located.
 --
-sourceStyleSchemeManagerSearchPath :: SourceStyleSchemeManagerClass sssm => ReadWriteAttr sssm [String] (Maybe [String])
+sourceStyleSchemeManagerSearchPath :: (SourceStyleSchemeManagerClass sssm, GlibFilePath fp) => ReadWriteAttr sssm [fp] (Maybe [fp])
 sourceStyleSchemeManagerSearchPath =
-  newAttr (objectGetPropertyBoxedOpaque (peekUTFStringArray0 . castPtr) gtype "search-path")
-          (objectSetPropertyBoxedOpaque (\dirs f -> maybeWith withUTFStringArray0 dirs (f . castPtr)) gtype "search-path")
+  newAttr (objectGetPropertyBoxedOpaque (peekUTFFilePathArray0 . castPtr) gtype "search-path")
+          (objectSetPropertyBoxedOpaque (\dirs f -> maybeWith withUTFFilePathArray0 dirs (f . castPtr)) gtype "search-path")
   where gtype = {#call pure g_strv_get_type#}
diff --git a/Graphics/UI/Gtk/SourceView/SourceView.chs b/Graphics/UI/Gtk/SourceView/SourceView.chs
--- a/Graphics/UI/Gtk/SourceView/SourceView.chs
+++ b/Graphics/UI/Gtk/SourceView/SourceView.chs
@@ -39,7 +39,7 @@
   SourceDrawSpacesFlags(..),
   SourceViewGutterPosition (..),
 
--- * Methods  
+-- * Methods
   castToSourceView,
   sourceViewNew,
   sourceViewNewWithBuffer,
@@ -78,7 +78,7 @@
   sourceViewGetDrawSpaces,
   sourceViewGetGutter,
 
--- * Attributes  
+-- * Attributes
   sourceViewAutoIndent,
   sourceViewCompletion,
   sourceViewDrawSpaces,
@@ -121,6 +121,7 @@
 import System.Glib.GObject	(wrapNewGObject, makeNewGObject)
 import System.Glib.Attributes
 import System.Glib.FFI
+import System.Glib.UTFString
 
 {#import Graphics.UI.Gtk.SourceView.Signals#}
 {#import Graphics.UI.Gtk.SourceView.Types#}
@@ -143,41 +144,41 @@
 
 -- | If 'True' auto indentation of text is enabled.
 --
-sourceViewSetAutoIndent :: SourceViewClass sv => sv 
-                        -> Bool  -- ^ @enable@ whether to enable auto indentation. 
+sourceViewSetAutoIndent :: SourceViewClass sv => sv
+                        -> Bool  -- ^ @enable@ whether to enable auto indentation.
                         -> IO ()
 sourceViewSetAutoIndent sv enable =
   {#call source_view_set_auto_indent#} (toSourceView sv) (fromBool enable)
-  
+
 -- | Returns whether auto indentation of text is enabled.
 --
-sourceViewGetAutoIndent :: SourceViewClass sv => sv 
-                        -> IO Bool  -- ^ returns 'True' if auto indentation is enabled. 
+sourceViewGetAutoIndent :: SourceViewClass sv => sv
+                        -> IO Bool  -- ^ returns 'True' if auto indentation is enabled.
 sourceViewGetAutoIndent sv = liftM toBool $
   {#call unsafe source_view_get_auto_indent#} (toSourceView sv)
 
 -- | If 'True', when the tab key is pressed and there is a selection, the selected text is indented of one
 -- level instead of being replaced with the \t characters. Shift+Tab unindents the selection.
 --
-sourceViewSetIndentOnTab :: SourceViewClass sv => sv 
-                         -> Bool  -- ^ @enable@ whether to indent a block when tab is pressed. 
+sourceViewSetIndentOnTab :: SourceViewClass sv => sv
+                         -> Bool  -- ^ @enable@ whether to indent a block when tab is pressed.
                          -> IO ()
 sourceViewSetIndentOnTab sv enable =
   {#call source_view_set_indent_on_tab#} (toSourceView sv) (fromBool enable)
-  
+
 -- | Returns whether when the tab key is pressed the current selection should get indented instead of
 -- replaced with the \t character.
 --
-sourceViewGetIndentOnTab :: SourceViewClass sv => sv 
-                         -> IO Bool  -- ^ returns 'True' if the selection is indented when tab is pressed. 
+sourceViewGetIndentOnTab :: SourceViewClass sv => sv
+                         -> IO Bool  -- ^ returns 'True' if the selection is indented when tab is pressed.
 sourceViewGetIndentOnTab sv = liftM toBool $
   {#call unsafe source_view_get_indent_on_tab#} (toSourceView sv)
 
 -- | Sets the number of spaces to use for each step of indent. If width is -1, the value of the
 -- 'tabWidth' property will be used.
 --
-sourceViewSetIndentWidth :: SourceViewClass sv => sv 
-                         -> Int  -- ^ @width@ indent width in characters. 
+sourceViewSetIndentWidth :: SourceViewClass sv => sv
+                         -> Int  -- ^ @width@ indent width in characters.
                          -> IO ()
 sourceViewSetIndentWidth sv width =
   {#call source_view_set_indent_width#} (toSourceView sv) (fromIntegral width)
@@ -185,130 +186,130 @@
 -- | Returns the number of spaces to use for each step of indent. See 'sourceViewSetIndentWidth'
 -- for details.
 --
-sourceViewGetIndentWidth :: SourceViewClass sv => sv 
-                         -> IO Int -- ^ returns indent width.    
+sourceViewGetIndentWidth :: SourceViewClass sv => sv
+                         -> IO Int -- ^ returns indent width.
 sourceViewGetIndentWidth sv = liftM fromIntegral $
   {#call unsafe source_view_get_indent_width#} (toSourceView sv)
 
 -- | If 'True' any tabulator character inserted is replaced by a group of space characters.
 --
-sourceViewSetInsertSpacesInsteadOfTabs :: SourceViewClass sv => sv 
-                                       -> Bool  -- ^ @enable@ whether to insert spaces instead of tabs. 
+sourceViewSetInsertSpacesInsteadOfTabs :: SourceViewClass sv => sv
+                                       -> Bool  -- ^ @enable@ whether to insert spaces instead of tabs.
                                        -> IO ()
 sourceViewSetInsertSpacesInsteadOfTabs sv enable =
   {#call source_view_set_insert_spaces_instead_of_tabs#} (toSourceView sv) (fromBool enable)
-  
+
 -- | Returns whether when inserting a tabulator character it should be replaced by a group of space
 -- characters.
 --
-sourceViewGetInsertSpacesInsteadOfTabs :: SourceViewClass sv => sv 
-                                       -> IO Bool  -- ^ returns 'True' if spaces are inserted instead of tabs. 
+sourceViewGetInsertSpacesInsteadOfTabs :: SourceViewClass sv => sv
+                                       -> IO Bool  -- ^ returns 'True' if spaces are inserted instead of tabs.
 sourceViewGetInsertSpacesInsteadOfTabs sv = liftM toBool $
   {#call unsafe source_view_get_insert_spaces_instead_of_tabs#} (toSourceView sv)
 
 -- | Set the desired movement of the cursor when HOME and END keys are pressed.
 --
-sourceViewSetSmartHomeEnd :: SourceViewClass sv => sv 
-                          -> SourceSmartHomeEndType  -- ^ @smartHe@ the desired behavior among 'SourceSmartHomeEndType'. 
+sourceViewSetSmartHomeEnd :: SourceViewClass sv => sv
+                          -> SourceSmartHomeEndType  -- ^ @smartHe@ the desired behavior among 'SourceSmartHomeEndType'.
                           -> IO ()
 sourceViewSetSmartHomeEnd sv newVal =
   {#call source_view_set_smart_home_end#} (toSourceView sv) (fromIntegral $ fromEnum newVal)
-  
+
 -- | Returns a 'SourceSmartHomeEndType' end value specifying how the cursor will move when HOME and END
 -- keys are pressed.
 --
-sourceViewGetSmartHomeEnd :: SourceViewClass sv => sv 
-                          -> IO SourceSmartHomeEndType -- ^ returns a 'SourceSmartHomeEndTypeend' value. 
+sourceViewGetSmartHomeEnd :: SourceViewClass sv => sv
+                          -> IO SourceSmartHomeEndType -- ^ returns a 'SourceSmartHomeEndTypeend' value.
 sourceViewGetSmartHomeEnd sv = liftM (toEnum . fromIntegral) $
   {#call unsafe source_view_get_smart_home_end#} (toSourceView sv)
 
 -- | If show is 'True' the current line is highlighted.
 --
-sourceViewSetHighlightCurrentLine :: SourceViewClass sv => sv 
-                                  -> Bool  -- ^ @show@ whether to highlight the current line 
+sourceViewSetHighlightCurrentLine :: SourceViewClass sv => sv
+                                  -> Bool  -- ^ @show@ whether to highlight the current line
                                   -> IO ()
 sourceViewSetHighlightCurrentLine sv newVal =
   {#call source_view_set_highlight_current_line#} (toSourceView sv) (fromBool newVal)
-  
+
 -- | Returns whether the current line is highlighted
 --
-sourceViewGetHighlightCurrentLine :: SourceViewClass sv => sv 
-                                  -> IO Bool  -- ^ returns 'True' if the current line is highlighted. 
+sourceViewGetHighlightCurrentLine :: SourceViewClass sv => sv
+                                  -> IO Bool  -- ^ returns 'True' if the current line is highlighted.
 sourceViewGetHighlightCurrentLine sv = liftM toBool $
   {#call unsafe source_view_get_highlight_current_line#} (toSourceView sv)
 
 -- | If 'True' line marks will be displayed beside the text.
 --
-sourceViewSetShowLineMarks :: SourceViewClass sv => sv 
-                           -> Bool  -- ^ @show@ whether line marks should be displayed. 
+sourceViewSetShowLineMarks :: SourceViewClass sv => sv
+                           -> Bool  -- ^ @show@ whether line marks should be displayed.
                            -> IO ()
 sourceViewSetShowLineMarks sv newVal =
   {#call source_view_set_show_line_marks#} (toSourceView sv) (fromBool newVal)
-  
+
 -- | Returns whether line marks are displayed beside the text.
 --
-sourceViewGetShowLineMarks :: SourceViewClass sv => sv 
-                           -> IO Bool  -- ^ returns 'True' if the line marks are displayed. 
+sourceViewGetShowLineMarks :: SourceViewClass sv => sv
+                           -> IO Bool  -- ^ returns 'True' if the line marks are displayed.
 sourceViewGetShowLineMarks sv = liftM toBool $
   {#call unsafe source_view_get_show_line_marks#} (toSourceView sv)
 
 -- | If 'True' line numbers will be displayed beside the text.
 --
-sourceViewSetShowLineNumbers :: SourceViewClass sv => sv 
-                             -> Bool  -- ^ @show@ whether line numbers should be displayed. 
+sourceViewSetShowLineNumbers :: SourceViewClass sv => sv
+                             -> Bool  -- ^ @show@ whether line numbers should be displayed.
                              -> IO ()
 sourceViewSetShowLineNumbers sv newVal =
   {#call source_view_set_show_line_numbers#} (toSourceView sv) (fromBool newVal)
-  
+
 -- | Returns whether line numbers are displayed beside the text.
 --
-sourceViewGetShowLineNumbers :: SourceViewClass sv => sv 
-                             -> IO Bool  -- ^ returns 'True' if the line numbers are displayed. 
+sourceViewGetShowLineNumbers :: SourceViewClass sv => sv
+                             -> IO Bool  -- ^ returns 'True' if the line numbers are displayed.
 sourceViewGetShowLineNumbers sv = liftM toBool $
   {#call unsafe source_view_get_show_line_numbers#} (toSourceView sv)
 
 -- | If 'True' a right margin is displayed
 --
-sourceViewSetShowRightMargin :: SourceViewClass sv => sv 
-                             -> Bool  -- ^ @show@ whether to show a right margin. 
+sourceViewSetShowRightMargin :: SourceViewClass sv => sv
+                             -> Bool  -- ^ @show@ whether to show a right margin.
                              -> IO ()
 sourceViewSetShowRightMargin sv newVal =
   {#call source_view_set_show_right_margin#} (toSourceView sv) (fromBool newVal)
-  
+
 -- | Returns whether a right margin is displayed.
 --
-sourceViewGetShowRightMargin :: SourceViewClass sv => sv 
-                             -> IO Bool -- ^ returns 'True' if the right margin is shown. 
+sourceViewGetShowRightMargin :: SourceViewClass sv => sv
+                             -> IO Bool -- ^ returns 'True' if the right margin is shown.
 sourceViewGetShowRightMargin sv = liftM toBool $
   {#call source_view_get_show_right_margin#} (toSourceView sv)
-  
+
 -- | Sets the position of the right margin in the given view.
 --
-sourceViewSetRightMarginPosition :: SourceViewClass sv => sv 
-                                 -> Word -- ^ @pos@  the width in characters where to position the right margin.  
+sourceViewSetRightMarginPosition :: SourceViewClass sv => sv
+                                 -> Word -- ^ @pos@  the width in characters where to position the right margin.
                                  -> IO ()
 sourceViewSetRightMarginPosition sv margin =
   {#call source_view_set_right_margin_position#} (toSourceView sv) (fromIntegral margin)
-  
+
 -- | Gets the position of the right margin in the given view.
 --
-sourceViewGetRightMarginPosition :: SourceViewClass sv => sv 
-                                 -> IO Int  -- ^ returns the position of the right margin. 
+sourceViewGetRightMarginPosition :: SourceViewClass sv => sv
+                                 -> IO Int  -- ^ returns the position of the right margin.
 sourceViewGetRightMarginPosition sv = liftM fromIntegral $
   {#call unsafe source_view_get_right_margin_position#} (toSourceView sv)
 
 -- | Sets the width of tabulation in characters.
 --
-sourceViewSetTabWidth :: SourceViewClass sv => sv 
-                      -> Int  -- ^ @width@ width of tab in characters. 
+sourceViewSetTabWidth :: SourceViewClass sv => sv
+                      -> Int  -- ^ @width@ width of tab in characters.
                       -> IO ()
 sourceViewSetTabWidth sv width =
   {#call source_view_set_tab_width#} (toSourceView sv) (fromIntegral width)
-  
+
 -- | Returns the width of tabulation in characters.
 --
-sourceViewGetTabWidth :: SourceViewClass sv => sv 
-                      -> IO Int -- ^ returns width of tab.     
+sourceViewGetTabWidth :: SourceViewClass sv => sv
+                      -> IO Int -- ^ returns width of tab.
 sourceViewGetTabWidth sv = liftM fromIntegral $
   {#call unsafe source_view_get_tab_width#} (toSourceView sv)
 
@@ -318,14 +319,14 @@
                         -> SourceDrawSpacesFlags -- ^ @flags@ 'SourceDrawSpacesFlags' specifing how white spaces should be displayed
                         -> IO ()
 sourceViewSetDrawSpaces view flags =
-  {#call gtk_source_view_set_draw_spaces #}  
+  {#call gtk_source_view_set_draw_spaces #}
     (toSourceView view)
     (fromIntegral $ fromEnum flags)
 
 -- | Returns the 'SourceDrawSpacesFlags' specifying if and how spaces should be displayed for this view.
 sourceViewGetDrawSpaces :: SourceViewClass sv => sv
-                        -> IO SourceDrawSpacesFlags -- ^ returns the 'SourceDrawSpacesFlags', 0 if no spaces should be drawn. 
-sourceViewGetDrawSpaces view =                        
+                        -> IO SourceDrawSpacesFlags -- ^ returns the 'SourceDrawSpacesFlags', 0 if no spaces should be drawn.
+sourceViewGetDrawSpaces view =
   liftM (toEnum . fromIntegral) $
   {#call gtk_source_view_get_draw_spaces #}
      (toSourceView view)
@@ -334,8 +335,8 @@
 -- and 'TextWindowRight' are supported, respectively corresponding to the left and right
 -- gutter. The line numbers and mark category icons are rendered in the gutter corresponding to
 -- 'TextWindowLeft'.
-sourceViewGetGutter :: SourceViewClass sv => sv 
-                    -> TextWindowType  -- ^ @windowType@ the gutter window type 
+sourceViewGetGutter :: SourceViewClass sv => sv
+                    -> TextWindowType  -- ^ @windowType@ the gutter window type
                     -> IO SourceGutter
 sourceViewGetGutter sv windowType =
   makeNewGObject mkSourceGutter $
@@ -347,29 +348,29 @@
 -- | Set the priority for the given mark category. When there are multiple marks on the same line, marks
 -- of categories with higher priorities will be drawn on top.
 --
-sourceViewSetMarkCategoryPriority :: SourceViewClass sv => sv 
-                                  -> String  -- ^ @category@ a mark category.              
-                                  -> Int  -- ^ @priority@ the priority for the category 
+sourceViewSetMarkCategoryPriority :: (SourceViewClass sv, GlibString string) => sv
+                                  -> string  -- ^ @category@ a mark category.
+                                  -> Int  -- ^ @priority@ the priority for the category
                                   -> IO ()
-sourceViewSetMarkCategoryPriority sv markerType priority = withCString markerType $ \strPtr ->
+sourceViewSetMarkCategoryPriority sv markerType priority = withUTFString markerType $ \strPtr ->
   {#call source_view_set_mark_category_priority#} (toSourceView sv) strPtr (fromIntegral priority)
 
 -- | Gets the priority which is associated with the given category.
 --
-sourceViewGetMarkCategoryPriority :: SourceViewClass sv => sv 
-                                  -> String  -- ^ @category@ a mark category.   
+sourceViewGetMarkCategoryPriority :: (SourceViewClass sv, GlibString string) => sv
+                                  -> string  -- ^ @category@ a mark category.
                                   -> IO Int -- ^ returns  the priority or if category exists but no priority was set, it defaults to 0.
-sourceViewGetMarkCategoryPriority sv markerType = withCString markerType $ \strPtr ->
+sourceViewGetMarkCategoryPriority sv markerType = withUTFString markerType $ \strPtr ->
   liftM fromIntegral $
   {#call unsafe source_view_get_mark_category_priority#} (toSourceView sv) strPtr
 
 -- | Sets the icon to be used for category to pixbuf. If pixbuf is 'Nothing', the icon is unset.
-sourceViewSetMarkCategoryIconFromPixbuf :: SourceViewClass sv => sv
-                                        -> String -- ^ @category@ a mark category.     
-                                        -> Maybe Pixbuf -- ^ @pixbuf@   a 'Pixbuf' or 'Nothing'. 
+sourceViewSetMarkCategoryIconFromPixbuf :: (SourceViewClass sv, GlibString string) => sv
+                                        -> string -- ^ @category@ a mark category.
+                                        -> Maybe Pixbuf -- ^ @pixbuf@   a 'Pixbuf' or 'Nothing'.
                                         -> IO ()
 sourceViewSetMarkCategoryIconFromPixbuf sv category pixbuf =
-  withCString category $ \categoryPtr ->
+  withUTFString category $ \categoryPtr ->
   {#call gtk_source_view_set_mark_category_icon_from_pixbuf #}
      (toSourceView sv)
      categoryPtr
@@ -377,13 +378,13 @@
 
 -- | Sets the icon to be used for category to the stock item @stockId@. If @stockId@ is 'Nothing', the icon is
 -- unset.
-sourceViewSetMarkCategoryIconFromStock :: SourceViewClass sv => sv
-                                       -> String -- ^ @category@ a mark category.      
-                                       -> Maybe String -- ^ @stockId@ the stock id or 'Nothing'. 
+sourceViewSetMarkCategoryIconFromStock :: (SourceViewClass sv, GlibString string) => sv
+                                       -> string -- ^ @category@ a mark category.
+                                       -> Maybe string -- ^ @stockId@ the stock id or 'Nothing'.
                                        -> IO ()
 sourceViewSetMarkCategoryIconFromStock sv category stockId =
-  withCString category $ \categoryPtr ->
-  maybeWith withCString stockId $ \stockIdPtr ->
+  withUTFString category $ \categoryPtr ->
+  maybeWith withUTFString stockId $ \stockIdPtr ->
   {#call gtk_source_view_set_mark_category_icon_from_stock #}
     (toSourceView sv)
     categoryPtr
@@ -391,28 +392,28 @@
 
 -- | Sets the icon to be used for category to the named theme item name. If name is 'Nothing', the icon is
 -- unset.
-sourceViewSetMarkCategoryIconFromIconName :: SourceViewClass sv => sv
-                                       -> String -- ^ @category@ a mark category.      
-                                       -> Maybe String -- ^ @name@     the themed icon name or 'Nothing'. 
+sourceViewSetMarkCategoryIconFromIconName :: (SourceViewClass sv, GlibString string) => sv
+                                       -> string -- ^ @category@ a mark category.
+                                       -> Maybe string -- ^ @name@     the themed icon name or 'Nothing'.
                                        -> IO ()
 sourceViewSetMarkCategoryIconFromIconName sv category name =
-  withCString category $ \categoryPtr ->
-  maybeWith withCString name $ \namePtr ->
+  withUTFString category $ \categoryPtr ->
+  maybeWith withUTFString name $ \namePtr ->
   {#call gtk_source_view_set_mark_category_icon_from_icon_name #}
     (toSourceView sv)
     categoryPtr
     namePtr
 
 -- | Sets given background color for mark category. If color is 'Nothing', the background color is unset.
-sourceViewSetMarkCategoryBackground :: SourceViewClass sv => sv
-                                    -> String -- ^ @category@ a mark category.                      
-                                    -> Maybe Color  -- ^ @color@    background color or 'Nothing' to unset it. 
+sourceViewSetMarkCategoryBackground :: (SourceViewClass sv, GlibString string) => sv
+                                    -> string -- ^ @category@ a mark category.
+                                    -> Maybe Color  -- ^ @color@    background color or 'Nothing' to unset it.
                                     -> IO ()
 sourceViewSetMarkCategoryBackground sv category color =
   let withMB :: Storable a => Maybe a -> (Ptr a -> IO b) -> IO b
       withMB Nothing f = f nullPtr
       withMB (Just x) f = with x f
-  in withCString category $ \categoryPtr ->
+  in withUTFString category $ \categoryPtr ->
      withMB color $ \colorPtr ->
      {#call gtk_source_view_set_mark_category_background #}
        (toSourceView sv)
@@ -420,13 +421,13 @@
        (castPtr colorPtr)
 
 -- | Gets the background color associated with given category.
-sourceViewGetMarkCategoryBackground :: SourceViewClass sv => sv
-                                    -> String -- ^ @category@ a mark category.
+sourceViewGetMarkCategoryBackground :: (SourceViewClass sv, GlibString string) => sv
+                                    -> string -- ^ @category@ a mark category.
                                     -> Color -- ^ @dest@     destination 'Color' structure to fill in.
                                     -> IO Bool -- ^ returns  'True' if background color for category was set and dest is set to a valid color, or 'False' otherwise.
-sourceViewGetMarkCategoryBackground sv category color = 
+sourceViewGetMarkCategoryBackground sv category color =
     liftM toBool $
-    withCString category $ \ categoryPtr ->
+    withUTFString category $ \ categoryPtr ->
     with color $ \ colorPtr ->
     {#call gtk_source_view_get_mark_category_background #}
       (toSourceView sv)
@@ -435,7 +436,7 @@
 #endif
 
 -- | Whether to enable auto indentation.
--- 
+--
 -- Default value: 'False'
 --
 sourceViewAutoIndent :: SourceViewClass sv => Attr sv Bool
@@ -453,71 +454,71 @@
 sourceViewDrawSpaces = newAttrFromEnumProperty "draw-spaces" {#call fun gtk_source_draw_spaces_flags_get_type#}
 
 -- | Whether to highlight the current line.
--- 
+--
 -- Default value: 'False'
 --
 sourceViewHighlightCurrentLine :: SourceViewClass sv => Attr sv Bool
 sourceViewHighlightCurrentLine = newAttrFromBoolProperty "highlight-current-line"
 
 -- | Whether to indent the selected text when the tab key is pressed.
--- 
+--
 -- Default value: 'True'
 --
 sourceViewIndentOnTab :: SourceViewClass sv => Attr sv Bool
 sourceViewIndentOnTab = newAttrFromBoolProperty "indent-on-tab"
 
 -- | Width of an indentation step expressed in number of spaces.
--- 
+--
 -- Allowed values: [GMaxulong,32]
--- 
+--
 -- Default value: -1
 --
 sourceViewIndentWidth :: SourceViewClass sv => Attr sv Int
 sourceViewIndentWidth = newAttrFromIntProperty "indent-width"
 
 -- | Whether to insert spaces instead of tabs.
--- 
+--
 -- Default value: 'False'
 --
 sourceViewInsertSpacesInsteadOfTabs :: SourceViewClass sv => Attr sv Bool
 sourceViewInsertSpacesInsteadOfTabs = newAttrFromBoolProperty "insert-spaces-instead-of-tabs"
 
 -- | Position of the right margin.
--- 
+--
 -- Allowed values: [1,200]
--- 
+--
 -- Default value: 80
 --
 sourceViewRightMarginPosition :: SourceViewClass sv => Attr sv Int
 sourceViewRightMarginPosition = newAttrFromUIntProperty "right-margin-position"
 
 -- | Whether to display line numbers
--- 
+--
 -- Default value: 'False'
 --
 sourceViewShowLineNumbers :: SourceViewClass sv => Attr sv Bool
 sourceViewShowLineNumbers = newAttrFromBoolProperty "show-line-numbers"
 
 -- | Whether to display line mark pixbufs
--- 
+--
 -- Default value: 'False'
 --
 sourceViewShowRightMargin :: SourceViewClass sv => Attr sv Bool
 sourceViewShowRightMargin = newAttrFromBoolProperty "show-right-margin"
 
 -- | Set the behavior of the HOME and END keys.
--- 
+--
 -- Default value: 'SourceSmartHomeEndDisabled'
--- 
+--
 -- Since 2.0
 --
 sourceViewSmartHomeEnd :: SourceViewClass sv => Attr sv SourceSmartHomeEndType
 sourceViewSmartHomeEnd = newAttrFromEnumProperty "smart-home-end" {#call fun gtk_source_smart_home_end_type_get_type#}
 
 -- | Width of an tab character expressed in number of spaces.
--- 
+--
 -- Allowed values: [1,32]
--- 
+--
 -- Default value: 8
 --
 sourceViewTabWidth :: SourceViewClass sv => Attr sv Int
@@ -541,7 +542,7 @@
 
 -- | The 'showCompletion' signal is a keybinding signal which gets emitted when the user initiates a
 -- completion in default mode.
--- 
+--
 -- Applications should not connect to it, but may emit it with @gSignalEmitByName@ if they need to
 -- control the default mode completion activation.
 sourceViewShowCompletion :: SourceViewClass sv => Signal sv (IO ())
@@ -550,8 +551,8 @@
 -- | Emitted when a line mark has been activated (for instance when there was a button press in the line
 -- marks gutter). You can use iter to determine on which line the activation took place.
 sourceViewLineMarkActivated :: SourceViewClass sv => Signal sv (TextIter -> EventM EAny ())
-sourceViewLineMarkActivated = 
-  Signal (\after obj fun -> 
+sourceViewLineMarkActivated =
+  Signal (\after obj fun ->
            connect_BOXED_PTR__NONE "line-mark-activated" mkTextIterCopy after obj
                                    (\iter eventPtr -> runReaderT (fun iter) eventPtr)
          )
@@ -562,14 +563,14 @@
 -- | 'sourceViewSetMarkCategoryPixbuf' is deprecated and should not be used in newly-written
 -- code. Use 'sourceViewSetMarkCategoryIconFromPixbuf' instead
 --
-sourceViewSetMarkCategoryPixbuf :: SourceViewClass sv => sv -> String -> Pixbuf -> IO ()
-sourceViewSetMarkCategoryPixbuf sv markerType marker = withCString markerType $ \strPtr ->
+sourceViewSetMarkCategoryPixbuf :: (SourceViewClass sv, GlibString string) => sv -> string -> Pixbuf -> IO ()
+sourceViewSetMarkCategoryPixbuf sv markerType marker = withUTFString markerType $ \strPtr ->
   {#call source_view_set_mark_category_pixbuf#} (toSourceView sv) strPtr marker
 
 -- | 'sourceViewGetMarkCategoryPixbuf' is deprecated and should not be used in newly-written code.
 --
-sourceViewGetMarkCategoryPixbuf :: SourceViewClass sv => sv -> String -> IO Pixbuf
-sourceViewGetMarkCategoryPixbuf sv markerType = withCString markerType $ \strPtr ->
+sourceViewGetMarkCategoryPixbuf :: (SourceViewClass sv, GlibString string) => sv -> string -> IO Pixbuf
+sourceViewGetMarkCategoryPixbuf sv markerType = withUTFString markerType $ \strPtr ->
   wrapNewGObject mkPixbuf $
   {#call unsafe source_view_get_mark_category_pixbuf#} (toSourceView sv) strPtr
 #endif
diff --git a/Graphics/UI/Gtk/SourceView/Types.chs b/Graphics/UI/Gtk/SourceView/Types.chs
--- a/Graphics/UI/Gtk/SourceView/Types.chs
+++ b/Graphics/UI/Gtk/SourceView/Types.chs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# OPTIONS_HADDOCK hide #-}
 -- -*-haskell-*-
 -- -------------------- automatically generated file - do not edit ----------
diff --git a/Gtk2HsSetup.hs b/Gtk2HsSetup.hs
--- a/Gtk2HsSetup.hs
+++ b/Gtk2HsSetup.hs
@@ -6,9 +6,9 @@
 
 -- | Build a Gtk2hs package.
 --
-module Gtk2HsSetup ( 
-  gtk2hsUserHooks, 
-  getPkgConfigPackages, 
+module Gtk2HsSetup (
+  gtk2hsUserHooks,
+  getPkgConfigPackages,
   checkGtk2hsBuildtools,
   typeGenProgram,
   signalGenProgram,
@@ -55,8 +55,9 @@
 import Distribution.Version (Version(..))
 import Distribution.Verbosity
 import Control.Monad (when, unless, filterM, liftM, forM, forM_)
-import Data.Maybe ( isJust, isNothing, fromMaybe, maybeToList )
-import Data.List (isPrefixOf, isSuffixOf, stripPrefix, nub)
+import Data.Maybe ( isJust, isNothing, fromMaybe, maybeToList, catMaybes )
+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
@@ -188,6 +198,10 @@
     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
     verbosity = fromFlag (regVerbosity regFlags)
@@ -247,11 +261,24 @@
     = nub $
       ["-I" ++ dir | dir <- PD.includeDirs bi]
    ++ [opt | opt@('-':c:_) <- PD.cppOptions bi ++ PD.ccOptions bi, c `elem` "DIU"]
-   ++ ["-D__GLASGOW_HASKELL__="++show (ghcDefine . versionBranch . compilerVersion $ LBI.compiler lbi)]
+   ++ ["-D__GLASGOW_HASKELL__="++show (ghcDefine . ghcVersion . compilerId $ LBI.compiler lbi)]
  where
   ghcDefine (v1:v2:_) = v1 * 100 + v2
   ghcDefine _ = __GLASGOW_HASKELL__
 
+  ghcVersion :: CompilerId -> [Int]
+-- This version is nicer, but we need to know the Cabal version that includes the new CompilerId
+-- #if CABAL_VERSION_CHECK(1,19,2)
+--   ghcVersion (CompilerId GHC v _) = versionBranch v
+--   ghcVersion (CompilerId _ _ (Just c)) = ghcVersion c
+-- #else
+--   ghcVersion (CompilerId GHC v) = versionBranch v
+-- #endif
+--   ghcVersion _ = []
+-- This version should work fine for now
+  ghcVersion = concat . take 1 . map (read . (++"]") . takeWhile (/=']')) . catMaybes
+               . map (stripPrefix "CompilerId GHC (Version {versionBranch = ") . tails . show
+
 installCHI :: PackageDescription -- ^information from the .cabal file
         -> LocalBuildInfo -- ^information from the configure step
         -> Verbosity -> CopyDest -- ^flags sent to copy or install
@@ -262,11 +289,11 @@
   -- a modules that does not have a .chi file
   mFiles <- mapM (findFileWithExtension' ["chi"] [buildDir lbi] . toFilePath)
                    (PD.libModules lib)
-                 
+
   let files = [ f | Just f <- mFiles ]
   installOrdinaryFiles verbosity libPref files
 
-  
+
 installCHI _ _ _ _ = return ()
 
 ------------------------------------------------------------------------------
@@ -292,13 +319,12 @@
 
 genSynthezisedFiles :: Verbosity -> PackageDescription -> LocalBuildInfo -> IO ()
 genSynthezisedFiles verb pd lbi = do
-
   cPkgs <- getPkgConfigPackages verb lbi pd
 
   let xList = maybe [] (customFieldsBI . libBuildInfo) (library pd)
               ++customFieldsPD pd
       typeOpts :: String -> [ProgArg]
-      typeOpts tag = concat [ map (\val -> '-':'-':drop (length tag) field++'=':val) (words content)
+      typeOpts tag = concat [ map (\val -> '-':'-':drop (length tag) field ++ '=':val) (words content)
                             | (field,content) <- xList,
                               tag `isPrefixOf` field,
                               field /= (tag++"file")]
@@ -306,8 +332,9 @@
                  | PackageIdentifier name (Version (major:minor:_) _) <- cPkgs
                  , let name' = filter isAlpha (display name)
                  , tag <- name'
-                        : [ name' ++ "-" ++ show major ++ "." ++ show digit
-                          | digit <- [0,2..minor] ]
+                        :[ name' ++ "-" ++ show maj ++ "." ++ show d2
+                          | (maj, d2) <- [(maj,   d2) | maj <- [0..(major-1)], d2 <- [0,2..20]]
+                                      ++ [(major, d2) | d2 <- [0,2..minor]] ]
                  ]
 
       signalsOpts :: [ProgArg]
@@ -426,14 +453,14 @@
 
 -- Extract the dependencies of this file. This is intentionally rather naive as it
 -- ignores CPP conditionals. We just require everything which means that the
--- existance of a .chs module may not depend on some CPP condition.  
+-- existance of a .chs module may not depend on some CPP condition.
 extractDeps :: ModDep -> IO ModDep
 extractDeps md@ModDep { mdLocation = Nothing } = return md
 extractDeps md@ModDep { mdLocation = Just f } = withUTF8FileContents f $ \con -> do
   let findImports acc (('{':'#':xs):xxs) = case (dropWhile (' ' ==) xs) of
         ('i':'m':'p':'o':'r':'t':' ':ys) ->
           case simpleParse (takeWhile ('#' /=) ys) of
-            Just m -> findImports (m:acc) xxs 
+            Just m -> findImports (m:acc) xxs
             Nothing -> die ("cannot parse chs import in "++f++":\n"++
                             "offending line is {#"++xs)
          -- no more imports after the first non-import hook
@@ -467,8 +494,8 @@
                          return (programName prog, location)
                       ) programs
   let printError name = do
-        putStrLn $ "Cannot find " ++ name ++ "\n" 
+        putStrLn $ "Cannot find " ++ name ++ "\n"
                  ++ "Please install `gtk2hs-buildtools` first and check that the install directory is in your PATH (e.g. HOME/.cabal/bin)."
         exitFailure
   forM_ programInfos $ \ (name, location) ->
-    when (isNothing location) (printError name) 
+    when (isNothing location) (printError name)
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/gtksourceview2.cabal b/gtksourceview2.cabal
--- a/gtksourceview2.cabal
+++ b/gtksourceview2.cabal
@@ -1,5 +1,5 @@
 Name:           gtksourceview2
-Version:        0.12.5.0
+Version:        0.13.0.0
 License:        LGPL-2.1
 License-file:   COPYING
 Copyright:      (c) 2001-2010 The Gtk2Hs Team
@@ -9,7 +9,7 @@
 Cabal-Version:  >= 1.8
 Stability:      provisional
 homepage:       http://projects.haskell.org/gtk2hs/
-bug-reports:    http://hackage.haskell.org/trac/gtk2hs/
+bug-reports:    https://github.com/gtk2hs/gtksourceview/issues
 Synopsis:       Binding to the GtkSourceView library.
 Description:    GtkSourceView is a text widget that extends the standard GTK+ 2.x text widget
                 GtkTextView. It improves GtkTextView by implementing syntax highlighting and
@@ -40,10 +40,10 @@
   location:     https://github.com/gtk2hs/gtksourceview
 
 Library
-        build-depends:  base >= 4 && < 5, array, containers, mtl,
-                        glib  >= 0.12 && < 0.13
+        build-depends:  base >= 4 && < 5, array, containers, mtl, text,
+                        glib  >= 0.13 && < 0.14
 
-        build-tools:    gtk2hsC2hs >= 0.13.8,
+        build-tools:    gtk2hsC2hs >= 0.13.11,
                         gtk2hsHookGenerator, gtk2hsTypeGen
 
         exposed-modules:
@@ -81,4 +81,4 @@
         x-c2hs-Header:     gtksourceview2.h
         pkgconfig-depends: gtksourceview-2.0 >= 2.0.2
         x-Types-Hierarchy: hierarchy.list
-        build-depends:     gtk >=0.12.5.0 && <0.13
+        build-depends:     gtk >=0.13.0.0 && <0.14
diff --git a/gtksourceview2.h b/gtksourceview2.h
--- a/gtksourceview2.h
+++ b/gtksourceview2.h
@@ -1,3 +1,6 @@
+#ifdef __BLOCKS__
+#undef __BLOCKS__
+#endif
 #include "gtk2hs_macros.h"
 #include <gtksourceview/gtksourcebuffer.h>
 #if GTK_MAJOR_VERSION < 3
diff --git a/hierarchy.list b/hierarchy.list
--- a/hierarchy.list
+++ b/hierarchy.list
@@ -17,333 +17,27 @@
 
 
     GObject 
-		GtkSourceGutter if gtksourceview2
-		GtkSourceUndoManager if gtksourceview2
-		GtkSourceCompletionProvider if gtksourceview2
-		GtkSourceCompletionProposal if gtksourceview2
-		GtkSourceCompletionContext if gtksourceview2
-		GtkSourceCompletionItem if gtksourceview2
-        GdkDrawable 
-            GdkWindow		as DrawWindow, gdk_window_object_get_type
-#            GdkDrawableImplX11
-#                GdkWindowImplX11
-            GdkPixmap
-            GdkGLPixmap		if gtkglext
-            GdkGLWindow		if gtkglext
-        GdkColormap
-	GdkScreen		if gtk-2.2
-	GdkDisplay		if gtk-2.2
-	GdkVisual
-	GdkDevice
-        GtkSettings
+        GtkSourceGutter if gtksourceview2
+        GtkSourceUndoManager if gtksourceview2
+        GtkSourceCompletionProvider if gtksourceview2
+        GtkSourceCompletionProposal if gtksourceview2
+        GtkSourceCompletionContext if gtksourceview2
+        GtkSourceCompletionItem if gtksourceview2
+        GtkSourceCompletion if gtksourceview2
         GtkTextBuffer
-            GtkSourceBuffer	if sourceview
-            GtkSourceBuffer	if gtksourceview2
-        GtkTextTag
-            GtkSourceTag	if sourceview
-        GtkTextTagTable
-            GtkSourceTagTable	if sourceview
-        GtkStyle
-	GtkRcStyle
-        GdkDragContext
-        GdkPixbuf
-	GdkPixbufAnimation
-	    GdkPixbufSimpleAnim
-	GdkPixbufAnimationIter
-        GtkTextChildAnchor
+            GtkSourceBuffer     if gtksourceview2
         GtkTextMark
-	    GtkSourceMarker	if sourceview
             GtkSourceMark       if gtksourceview2
         GtkObject
-		    GtkSourceCompletion if gtksourceview2
             GtkWidget
-                GtkMisc
-                    GtkLabel
-                        GtkAccelLabel
-                        GtkTipsQuery	if deprecated
-                    GtkArrow
-                    GtkImage
                 GtkContainer
-                    WebKitWebView as WebView, webkit_web_view_get_type            if webkit 
                     GtkBin
-                        GtkAlignment
-                        GtkFrame
-                            GtkAspectFrame
-                        GtkButton
-                            GtkToggleButton
-                                GtkCheckButton
-                                    GtkRadioButton
-                            GtkColorButton		if gtk-2.4
-                            GtkFontButton		if gtk-2.4
-                            GtkOptionMenu		if deprecated
-                        GtkItem
-                            GtkMenuItem
-                                GtkCheckMenuItem
-                                    GtkRadioMenuItem
-                                GtkTearoffMenuItem
-                                GtkImageMenuItem
-                                GtkSeparatorMenuItem
-                            GtkListItem			if deprecated
-#			    GtkTreeItem
                         GtkWindow
-							GtkSourceCompletionInfo if gtksourceview2
-                            GtkDialog
-			    	GtkAboutDialog		if gtk-2.6
-                                GtkColorSelectionDialog
-                                GtkFileSelection
-				GtkFileChooserDialog	if gtk-2.4
-                                GtkFontSelectionDialog
-                                GtkInputDialog
-                                GtkMessageDialog
-                            GtkPlug	if plugNsocket
-                        GtkEventBox
-                        GtkHandleBox
-                        GtkScrolledWindow
-                        GtkViewport
-			GtkExpander			if gtk-2.4
-			GtkComboBox			if gtk-2.4
-			    GtkComboBoxEntry		if gtk-2.4
-			GtkToolItem			if gtk-2.4
-			    GtkToolButton		if gtk-2.4
-				GtkMenuToolButton	if gtk-2.6
-				GtkToggleToolButton	if gtk-2.4
-				    GtkRadioToolButton	if gtk-2.4
-			    GtkSeparatorToolItem	if gtk-2.4
-			GtkMozEmbed		if mozembed
-			VteTerminal as Terminal if vte
-                    GtkBox
-                        GtkButtonBox
-                            GtkHButtonBox
-                            GtkVButtonBox
-                        GtkVBox
-                            GtkColorSelection
-                            GtkFontSelection
-			    GtkFileChooserWidget	if gtk-2.4
-                        GtkHBox
-                            GtkCombo	if deprecated
-                            GtkFileChooserButton	if gtk-2.6
-                            GtkStatusbar
-                    GtkCList		if deprecated
-                        GtkCTree	if deprecated
-                    GtkFixed
-                    GtkPaned
-                        GtkHPaned
-                        GtkVPaned
-                    GtkIconView		if gtk-2.6
-                    GtkLayout
-                    GtkList		if deprecated
-                    GtkMenuShell
-                        GtkMenu
-                        GtkMenuBar
-                    GtkNotebook
-#                    GtkPacker
-                    GtkSocket		if plugNsocket
-                    GtkTable
+                            GtkSourceCompletionInfo if gtksourceview2
                     GtkTextView
-                        GtkSourceView	if sourceview
-                        GtkSourceView	if gtksourceview2
-                    GtkToolbar
-                    GtkTreeView
-                GtkCalendar
-                GtkCellView		if gtk-2.6
-		GtkDrawingArea
-                GtkEntry
-                    GtkSpinButton
-                GtkRuler
-                    GtkHRuler
-                    GtkVRuler
-                GtkRange
-                    GtkScale
-                        GtkHScale
-                        GtkVScale
-                    GtkScrollbar
-                        GtkHScrollbar
-                        GtkVScrollbar
-                GtkSeparator
-                    GtkHSeparator
-                    GtkVSeparator
-                GtkInvisible
-#                GtkOldEditable
-#                    GtkText
-                GtkPreview		if deprecated
-# Progress is deprecated, ProgressBar contains everything necessary
-#                GtkProgress
-                GtkProgressBar
-            GtkAdjustment
-            GtkIMContext
-                GtkIMMulticontext
-            GtkItemFactory		if deprecated
-            GtkTooltips
-			
-# These object were added by hand because they do not show up in the hierarchy
-# chart.
-# These are derived from GtkObject:
-	    GtkTreeViewColumn
-	    GtkCellRenderer
-		GtkCellRendererPixbuf
-		GtkCellRendererText
-		    GtkCellRendererCombo	if gtk-2.6
-		GtkCellRendererToggle
-		GtkCellRendererProgress	if gtk-2.6
-	    GtkFileFilter		if gtk-2.4
-            GtkBuilder if gtk-2.12
-# These are actually interfaces, but all objects that implement it are at
-# least GObjects.
-	GtkCellLayout			if gtk-2.4
-	GtkTreeSortable			if gtk-2.4
-	GtkTooltip				if gtk-2.12
-# These are derived from GObject:
-  	GtkStatusIcon                   if gtk-2.10
-        GtkTreeSelection
-        GtkTreeModel
-            GtkTreeStore
-            GtkListStore
-	GtkTreeModelSort
-	GtkTreeModelFilter		if gtk-2.4
-	GtkIconFactory
-	GtkIconTheme
-	GtkSizeGroup
-	GtkClipboard			if gtk-2.2
-	GtkAccelGroup
-	GtkAccelMap			if gtk-2.4
-	GtkEntryCompletion		if gtk-2.4
-	GtkAction			if gtk-2.4
-	    GtkToggleAction		if gtk-2.4
-		GtkRadioAction		if gtk-2.4
-	GtkActionGroup			if gtk-2.4
-	GtkUIManager			if gtk-2.4
-	GtkWindowGroup
-        GtkSourceLanguage		if sourceview
-        GtkSourceLanguage		if gtksourceview2
-        GtkSourceLanguagesManager	if sourceview
-        GtkSourceLanguageManager	if gtksourceview2
-	GladeXML			as GladeXML, glade_xml_get_type if libglade
-	GConfClient			as GConf if gconf
-# These ones are actualy interfaces, but interface implementations are GObjects
-	GtkEditable
-	GtkSourceStyle			as SourceStyleObject if gtksourceview2
-	GtkSourceStyleScheme		if sourceview
-	GtkSourceStyleScheme		if gtksourceview2
-	GtkSourceStyleSchemeManager	if gtksourceview2
-	GtkFileChooser			if gtk-2.4
-## This now became a GObject in version 2:
-	GdkGC				as GC, gdk_gc_get_type
-## These are Pango structures
-	PangoContext		as PangoContext, pango_context_get_type if pango
-	PangoLayout		as PangoLayoutRaw, pango_layout_get_type if pango
-	PangoFont		as Font, pango_font_get_type if pango
-	PangoFontFamily		as FontFamily, pango_font_family_get_type if pango
-	PangoFontFace		as FontFace, pango_font_face_get_type if pango
-	PangoFontMap		as FontMap, pango_font_face_get_type if pango
-	PangoFontset		as FontSet, pango_fontset_get_type if pango
-## This type is only available for PANGO_ENABLE_BACKEND compiled source
-##	    PangoFontsetSimple	as FontSetSimple, pango_fontset_simple_get_type
-
-## GtkGlExt classes
-	GdkGLContext		if gtkglext
-	GdkGLConfig		if gtkglext
-	GdkGLDrawable		if gtkglext
-
-## GnomeVFS classes
-	GnomeVFSVolume		as Volume, gnome_vfs_volume_get_type if gnomevfs
-	GnomeVFSDrive		as Drive, gnome_vfs_drive_get_type if gnomevfs
-	GnomeVFSVolumeMonitor	as VolumeMonitor, gnome_vfs_volume_monitor_get_type if gnomevfs
-
-## GIO classes
-# Note on all the "as" clauses: the prefix G is unfortunate since it leads
-# to two consecutive upper case letters which are not translated with an
-# underscore each (e.g. GConf -> gconf, GtkHButtonBox -> gtk_hbutton_box).
-#        GUnixMountMonitor		as UnixMountMonitor, g_unix_mount_monitor_get_type if gio
-        GOutputStream			as OutputStream, g_output_stream_get_type if gio
-            GFilterOutputStream		as FilterOutputStream, g_filter_output_stream_get_type if gio
-                GDataOutputStream	as DataOutputStream, g_data_output_stream_get_type if gio
-                GBufferedOutputStream   as BufferedOutputStream, g_buffered_output_stream_get_type if gio
-#            GUnixOutputStream		as UnixOutputStream, g_unix_output_stream_get_type if gio
-            GFileOutputStream           as FileOutputStream, g_file_output_stream_get_type if gio
-            GMemoryOutputStream		as MemoryOutputStream, g_memory_output_stream_get_type if gio
-        GInputStream			as InputStream, g_input_stream_get_type if gio
-#            GUnixInputStream		as UnixInputStream, g_unix_input_stream_get_type if gio
-            GMemoryInputStream		as MemoryInputStream, g_memory_input_stream_get_type if gio
-            GFilterInputStream		as FilterInputStream, g_filter_input_stream_get_type if gio
-                GBufferedInputStream	as BufferedInputStream, g_buffered_input_stream_get_type if gio
-                    GDataInputStream	as DataInputStream, g_data_input_stream_get_type if gio
-            GFileInputStream		as FileInputStream, g_file_input_stream_get_type if gio
-#        GDesktopAppInfo			as DesktopAppInfo, g_desktop_app_info_get_type if gio
-        GFileMonitor			as FileMonitor, g_file_monitor_get_type if gio
-        GVfs				as Vfs, g_vfs_get_type if gio
-        GMountOperation			as MountOperation, g_mount_operation_get_type if gio
-        GThemedIcon			as ThemedIcon, g_themed_icon_get_type if gio
-        GEmblem			as Emblem, g_emblem_get_type if gio
-        GEmblemedIcon			as EmblemedIcon, g_emblemed_icon_get_type if gio
-        GFileEnumerator			as FileEnumerator, g_file_enumerator_get_type if gio
-        GFilenameCompleter		as FilenameCompleter, g_filename_completer_get_type if gio
-        GFileIcon			as FileIcon, g_file_icon_get_type if gio
-        GVolumeMonitor			as VolumeMonitor, g_volume_monitor_get_type if gio
-        GCancellable			as Cancellable, g_cancellable_get_type if gio
-        GSimpleAsyncResult		as SimpleAsyncResult, g_async_result_get_type if gio
-        GFileInfo			as FileInfo, g_file_info_get_type if gio
-		GAppLaunchContext   as AppLaunchContext, g_app_launch_context_get_type if gio
-## these are actually GInterfaces
-        GIcon				as Icon, g_icon_get_type if gio
-        GSeekable			as Seekable, g_seekable_get_type if gio
-        GAppInfo			as AppInfo, g_app_info_get_type if gio
-        GVolume				as Volume, g_volume_get_type if gio
-        GAsyncResult			as AsyncResult, g_async_result_get_type if gio
-        GLoadableIcon			as LoadableIcon, g_loadable_icon_get_type if gio
-        GDrive				as Drive, g_drive_get_type if gio
-        GFile				noEq as File, g_file_get_type if gio
-        GMount				as Mount, g_mount_get_type if gio
-
-## GStreamer classes
-	GstObject			as Object,		gst_object_get_type			if gstreamer
-	    GstPad			as Pad,			gst_pad_get_type			if gstreamer
-	        GstGhostPad		as GhostPad,		gst_ghost_pad_get_type			if gstreamer
-	    GstPluginFeature		as PluginFeature,	gst_plugin_feature_get_type		if gstreamer
-	        GstElementFactory	as ElementFactory,	gst_element_factory_get_type		if gstreamer
-	        GstTypeFindFactory	as TypeFindFactory,	gst_type_find_factory_get_type		if gstreamer
-	        GstIndexFactory		as IndexFactory,	gst_index_factory_get_type		if gstreamer
-	    GstElement			as Element,		gst_element_get_type			if gstreamer
-	        GstBin			as Bin,			gst_bin_get_type			if gstreamer
-	            GstPipeline		as Pipeline,		gst_pipeline_get_type			if gstreamer
-	        GstImplementsInterface  as ImplementsInterface, gst_implements_interface_get_type	if gstreamer
-	        GstTagSetter            as TagSetter,           gst_tag_setter_get_type			if gstreamer
-                GstBaseSrc              as BaseSrc,             gst_base_src_get_type			if gstreamer
-                    GstPushSrc          as PushSrc,             gst_push_src_get_type                   if gstreamer
-                GstBaseSink             as BaseSink,            gst_base_sink_get_type                  if gstreamer
-                GstBaseTransform        as BaseTransform,       gst_base_transform_get_type             if gstreamer
-	    GstPlugin			as Plugin,		gst_plugin_get_type			if gstreamer
-	    GstRegistry			as Registry,		gst_registry_get_type			if gstreamer
-	    GstBus			as Bus,			gst_bus_get_type			if gstreamer
-	    GstClock			as Clock,		gst_clock_get_type			if gstreamer
-	        GstAudioClock		as AudioClock,		gst_audio_clock_get_type		if gstreamer
-	        GstSystemClock		as SystemClock,		gst_system_clock_get_type		if gstreamer
-                GstNetClientClock       as NetClientClock,      gst_net_client_clock_get_type           if gstreamer
-	    GstIndex			as Index,		gst_index_get_type			if gstreamer
-	    GstPadTemplate		as PadTemplate,		gst_pad_template_get_type		if gstreamer
-	    GstTask			as Task,		gst_task_get_type			if gstreamer
-	    GstXML			as XML,			gst_xml_get_type			if gstreamer
-	    GstChildProxy               as ChildProxy,          gst_child_proxy_get_type		if gstreamer
-            GstCollectPads              as CollectPads,         gst_collect_pads_get_type               if gstreamer
-## these are actually GInterfaces
-	GstURIHandler                   as URIHandler,          gst_uri_handler_get_type		if gstreamer
-        GstAdapter                      as Adapter,             gst_adapter_get_type                    if gstreamer
-        GstController                   as Controller,          gst_controller_get_type                 if gstreamer
-
-        WebKitWebFrame as WebFrame, webkit_web_frame_get_type          if webkit 
-        WebKitWebSettings as WebSettings, webkit_web_settings_get_type    if webkit
-        WebKitNetworkRequest as NetworkRequest, webkit_network_request_get_type  if webkit
-        WebKitNetworkResponse as NetworkResponse, webkit_network_response_get_type    if webkit
-        WebKitDownload as Download, webkit_download_get_type  if webkit
-        WebKitWebBackForwardList as WebBackForwardList, webkit_web_back_forward_list_get_type if webkit
-        WebKitWebHistoryItem as WebHistoryItem, webkit_web_history_item_get_type if webkit
-        WebKitWebInspector as WebInspector, webkit_web_inspector_get_type if webkit
-        WebKitHitTestResult as HitTestResult, webkit_hit_test_result_get_type if webkit
-        WebKitSecurityOrigin as SecurityOrigin, webkit_security_origin_get_type if webkit
-        WebKitSoupAuthDialog as SoupAuthDialog, webkit_soup_auth_dialog_get_type if webkit
-        WebKitWebDatabase as WebDatabase, webkit_web_database_get_type if webkit
-        WebKitWebDataSource as WebDataSource, webkit_web_data_source_get_type if webkit
-        WebKitWebNavigationAction as WebNavigationAction, webkit_web_navigation_action_get_type if webkit
-        WebKitWebPolicyDecision as WebPolicyDecision, webkit_web_policy_decision_get_type if webkit
-        WebKitWebResource as WebResource, webkit_web_resource_get_type if webkit
-        WebKitWebWindowFeatures as WebWindowFeatures, webkit_web_window_features_get_type if webkit
-
+                        GtkSourceView  if gtksourceview2
+        GtkSourceLanguage               if gtksourceview2
+        GtkSourceLanguageManager        if gtksourceview2
+        GtkSourceStyle                  as SourceStyleObject if gtksourceview2
+        GtkSourceStyleScheme            if gtksourceview2
+        GtkSourceStyleSchemeManager     if gtksourceview2
