diff -r 3a3916dbdec0 gi/pygi-argument.c
--- a/gi/pygi-argument.c	Sat Jan 14 14:24:23 2012 +0100
+++ b/gi/pygi-argument.c	Sun Jan 22 21:47:54 2012 +0100
@@ -1330,7 +1330,8 @@
     type_tag = g_type_info_get_tag (type_info);
     switch (type_tag) {
         case GI_TYPE_TAG_VOID:
-            if (g_type_info_is_pointer (type_info)) {
+            if (g_type_info_is_pointer (type_info) &&
+                    (arg->v_pointer != NULL)) {
                 /* Raw Python objects are passed to void* args */
                 g_warn_if_fail (transfer == GI_TRANSFER_NOTHING);
                 object = arg->v_pointer;
diff -r 3a3916dbdec0 gi/pygi-info.c
--- a/gi/pygi-info.c	Sat Jan 14 14:24:23 2012 +0100
+++ b/gi/pygi-info.c	Sun Jan 22 21:47:54 2012 +0100
@@ -1371,6 +1371,19 @@
         }
 
         g_base_info_unref (info);
+    } else if (g_type_info_is_pointer (field_type_info)
+            && g_type_info_get_tag (field_type_info) == GI_TYPE_TAG_VOID) {
+        int offset;
+
+        offset = g_field_info_get_offset ((GIFieldInfo *) self->info);
+        value = _pygi_argument_from_object (py_value, field_type_info, GI_TRANSFER_NOTHING);
+
+        Py_XDECREF(G_STRUCT_MEMBER (gpointer, pointer, offset));
+        G_STRUCT_MEMBER (gpointer, pointer, offset) = (gpointer)value.v_pointer;
+        Py_XINCREF(py_value);
+
+        retval = Py_None;
+        goto out;
     }
 
     value = _pygi_argument_from_object (py_value, field_type_info, GI_TRANSFER_EVERYTHING);
