diff --git a/gi/pygi-argument.c b/gi/pygi-argument.c
index ec0fd5f..f33074e 100644
--- a/gi/pygi-argument.c
+++ b/gi/pygi-argument.c
@@ -188,6 +188,7 @@ _pygi_g_type_interface_check_object (GIBaseInfo *info,
                     for (i = 0; i < g_enum_info_get_n_values (info); i++) {
                         GIValueInfo *value_info = g_enum_info_get_value (info, i);
                         glong enum_value = g_value_info_get_value (value_info);
+                        g_base_info_unref (value_info);
                         if (value == enum_value) {
                             retval = 1;
                             break;
diff --git a/gi/pygi-closure.c b/gi/pygi-closure.c
index 0425c99..33a8d81 100644
--- a/gi/pygi-closure.c
+++ b/gi/pygi-closure.c
@@ -245,6 +245,7 @@ _pygi_closure_convert_arguments (GICallableInfo *callable_info, void **args,
     if (_PyTuple_Resize (py_args, n_in_args) == -1)
         goto error;
 
+    g_free (g_args);
     return TRUE;
 
 error:
@@ -355,6 +356,8 @@ _pygi_closure_handle (ffi_cif *cif,
     _pygi_closure_set_out_arguments (closure->info, retval, out_args, result);
 
 end:
+    if (out_args != NULL)
+        g_free (out_args);
     g_base_info_unref ( (GIBaseInfo*) return_type);
 
     PyGILState_Release (state);
