diff --git a/giscanner/annotationparser.py b/giscanner/annotationparser.py
index 003ff2c..2f08132 100644
--- a/giscanner/annotationparser.py
+++ b/giscanner/annotationparser.py
@@ -285,6 +285,7 @@ class AnnotationApplier(object):
         block = self._blocks.get(interface.type_name)
         self._parse_version(interface, block)
         self._parse_methods(interface.methods)
+        self._parse_methods(interface.static_methods)
         self._parse_properties(interface, interface.properties)
         self._parse_signals(interface, interface.signals)
         self._parse_fields(interface, interface.fields)
diff --git a/giscanner/ast.py b/giscanner/ast.py
index ff65312..671bd9e 100644
--- a/giscanner/ast.py
+++ b/giscanner/ast.py
@@ -432,6 +432,7 @@ class Interface(Node):
         Node.__init__(self, name)
         self.parent = parent
         self.methods = []
+        self.static_methods = []
         self.properties = []
         self.fields = []
         self.prerequisites = []
diff --git a/giscanner/girwriter.py b/giscanner/girwriter.py
index 116681a..c43ec36 100644
--- a/giscanner/girwriter.py
+++ b/giscanner/girwriter.py
@@ -335,6 +335,7 @@ and/or use gtk-doc annotations. ''')
             if isinstance(node, Class):
                 for method in node.constructors:
                     self._write_constructor(method)
+            if isinstance(node, (Class, Interface)):
                 for method in node.static_methods:
                     self._write_static_method(method)
             for method in node.methods:
diff --git a/giscanner/glibtransformer.py b/giscanner/glibtransformer.py
index f05ce65..6c2d6ee 100644
--- a/giscanner/glibtransformer.py
+++ b/giscanner/glibtransformer.py
@@ -386,7 +386,7 @@ class GLibTransformer(object):
             prefix_components = '_'.join(components[0:-i])
             methname = '_'.join(components[-i:])
             target_klass = self._uscore_type_names.get(prefix_components)
-            if target_klass and isinstance(target_klass, GLibObject):
+            if target_klass and isinstance(target_klass, (GLibObject, GLibInterface)):
                 break
             target_klass = None
         if not target_klass:
@@ -794,6 +794,7 @@ class GLibTransformer(object):
     def _resolve_glib_interface(self, node):
         node.parent = self._force_resolve(node.parent)
         self._resolve_methods(node.methods)
+        self._resolve_methods(node.static_methods)
         self._resolve_properties(node.properties, node)
         self._resolve_signals(node.signals)
         node.prerequisites = filter(None,
