diff --git a/mock_dbus_interface.h b/mock_dbus_interface.h
index 781b3f3..02a4bfc 100644
--- a/mock_dbus_interface.h
+++ b/mock_dbus_interface.h
@@ -13,37 +13,25 @@
 
 class MockDbusGlib : public DbusGlibInterface {
  public:
-  MOCK_METHOD5(ProxyNewForNameOwner, DBusGProxy*(DBusGConnection *connection,
-                                                 const char *name,
-                                                 const char *path,
-                                                 const char *interface,
-                                                 GError **error));
+  MOCK_METHOD4(ProxyNewForName, DBusGProxy*(DBusGConnection *connection,
+                                            const char *name,
+                                            const char *path,
+                                            const char *interface));
 
   MOCK_METHOD1(ProxyUnref, void(DBusGProxy* proxy));
 
   MOCK_METHOD2(BusGet, DBusGConnection*(DBusBusType type, GError **error));
 
-  MOCK_METHOD7(ProxyCall, gboolean(DBusGProxy *proxy,
-                                   const char *method,
-                                   GError **error,
-                                   GType first_arg_type,
-                                   GType var_arg1,
-                                   GHashTable** var_arg2,
-                                   GType var_arg3));
-  MOCK_METHOD10(ProxyCall, gboolean(DBusGProxy* proxy,
-                                    const char* method,
-                                    GError** error,
-                                    GType var_arg1, const char* var_arg2,
-                                    GType var_arg3,
-                                    GType var_arg4, gchar** var_arg5,
-                                    GType var_arg6, GArray** var_arg7));
-  MOCK_METHOD10(ProxyCall, gboolean(DBusGProxy* proxy,
-                                    const char* method,
-                                    GError** error,
-                                    GType var_arg1, const char* var_arg2,
-                                    GType var_arg3, const char* var_arg4,
-                                    GType var_arg5, const char* var_arg6,
-                                    GType var_arg7));
+  MOCK_METHOD4(ProxyCall_0_1, gboolean(DBusGProxy *proxy,
+                                       const char *method,
+                                       GError **error,
+                                       GHashTable** out1));
+  MOCK_METHOD6(ProxyCall_3_0, gboolean(DBusGProxy* proxy,
+                                       const char* method,
+                                       GError** error,
+                                       const char* in1,
+                                       const char* in2,
+                                       const char* in3));
 
   MOCK_METHOD1(ConnectionGetConnection, DBusConnection*(DBusGConnection* gbus));
 
@@ -66,49 +54,11 @@
                                                 const char* interface,
                                                 const char* signal_name));
 
-  MOCK_METHOD9(DbusMessageGetArgs, dbus_bool_t(
-      DBusMessage* message,
-      DBusError* error,
-      GType var_arg1, char** var_arg2,
-      GType var_arg3, char** var_arg4,
-      GType var_arg5, char** var_arg6,
-      GType var_arg7));
-
-  // Since gmock only supports mocking functions up to 10 args, we
-  // take the 11-arg function we'd like to mock, drop the last arg
-  // and call the 10-arg version. Dropping the last arg isn't ideal,
-  // but this is a lot better than nothing.
-  gboolean ProxyCall(DBusGProxy* proxy,
-                     const char* method,
-                     GError** error,
-                     GType var_arg1, const char* var_arg2,
-                     GType var_arg3,
-                     GType var_arg4, gchar** var_arg5,
-                     GType var_arg6, GArray** var_arg7,
-                     GType var_arg8) {
-    return ProxyCall(proxy,
-                     method,
-                     error,
-                     var_arg1, var_arg2,
-                     var_arg3,
-                     var_arg4, var_arg5,
-                     var_arg6, var_arg7);
-  }
-  gboolean ProxyCall(DBusGProxy* proxy,
-                     const char* method,
-                     GError** error,
-                     GType var_arg1, const char* var_arg2,
-                     GType var_arg3, const char* var_arg4,
-                     GType var_arg5, const char* var_arg6,
-                     GType var_arg7, GType var_arg8) {
-    return ProxyCall(proxy,
-                     method,
-                     error,
-                     var_arg1, var_arg2,
-                     var_arg3,
-                     var_arg4, var_arg5,
-                     var_arg6, var_arg7);
-  }
+  MOCK_METHOD5(DbusMessageGetArgs_3, dbus_bool_t(DBusMessage* message,
+                                                 DBusError* error,
+                                                 char** out1,
+                                                 char** out2,
+                                                 char** out3));
 };
 
 }  // namespace chromeos_update_engine
