diff --git a/configure.ac b/configure.ac
index 5a96f68..e3c065e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -38,7 +38,7 @@ PKG_CHECK_MODULES(FFI, libffi >= 3.0)
 
 # GNOME
 PKG_CHECK_MODULES(GNOME,
-	glib-2.0 >= 2.22
+	glib-2.0 >= 2.20
 	gobject-introspection-1.0 >= 0.6.4
 	pygobject-2.0 >= 2.20
 )
diff --git a/gi/pygi-private.h b/gi/pygi-private.h
index 97e2f0d..3ec736f 100644
--- a/gi/pygi-private.h
+++ b/gi/pygi-private.h
@@ -43,6 +43,25 @@ G_BEGIN_DECLS
     } \
 } G_STMT_END
 
+#if GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION == 20
+/* Private stuff copied from glib-2.20.x sources */
+struct _GRealArray
+{
+    guint8 *data;
+    guint   len;
+    guint   alloc;
+    guint   elt_size;
+    guint   zero_terminated : 1;
+    guint   clear : 1;
+};
+
+static inline guint
+g_array_get_element_size (GArray *array)
+{
+    struct _GRealArray *rarray = (struct _GRealArray*) array;
+    return rarray->elt_size;
+}
+#endif
 
 /* Redefine g_array_index because we want it to return the i-th element, casted
  * to the type t, of the array a, and not the i-th element of the array a
