diff --git a/real_dbus_wrapper.h b/real_dbus_wrapper.h
index 4d31651..22dddde 100644
--- a/real_dbus_wrapper.h
+++ b/real_dbus_wrapper.h
@@ -7,6 +7,7 @@
 
 // A mockable interface for DBus.
 
+#include <base/macros.h>
 #include <dbus/dbus-glib-lowlevel.h>
 #include <dbus/dbus-glib.h>
 
@@ -18,25 +19,25 @@
   virtual DBusGProxy* ProxyNewForName(DBusGConnection* connection,
                                       const char* name,
                                       const char* path,
-                                      const char* interface) {
+                                      const char* interface) OVERRIDE {
     return dbus_g_proxy_new_for_name(connection,
                                      name,
                                      path,
                                      interface);
   }
 
-  virtual void ProxyUnref(DBusGProxy* proxy) {
+  virtual void ProxyUnref(DBusGProxy* proxy) OVERRIDE {
     g_object_unref(proxy);
   }
 
-  virtual DBusGConnection* BusGet(DBusBusType type, GError** error) {
+  virtual DBusGConnection* BusGet(DBusBusType type, GError** error) OVERRIDE {
     return dbus_g_bus_get(type, error);
   }
 
   virtual gboolean ProxyCall_0_1(DBusGProxy* proxy,
                                  const char* method,
                                  GError** error,
-                                 GHashTable** out1) {
+                                 GHashTable** out1) OVERRIDE {
     return dbus_g_proxy_call(proxy, method, error, G_TYPE_INVALID,
                              dbus_g_type_get_map("GHashTable",
                                                  G_TYPE_STRING,
@@ -44,12 +45,21 @@
                              out1, G_TYPE_INVALID);
   }
 
+  virtual gboolean ProxyCall_1_0(DBusGProxy* proxy,
+                                 const char* method,
+                                 GError** error,
+                                 gint in1) OVERRIDE {
+    return dbus_g_proxy_call(proxy, method, error,
+                             G_TYPE_INT, in1,
+                             G_TYPE_INVALID, G_TYPE_INVALID);
+  }
+
   virtual gboolean ProxyCall_3_0(DBusGProxy* proxy,
                                  const char* method,
                                  GError** error,
                                  const char* in1,
                                  const char* in2,
-                                 const char* in3) {
+                                 const char* in3) OVERRIDE {
     return dbus_g_proxy_call(
         proxy, method, error,
         G_TYPE_STRING, in1, G_TYPE_STRING, in2, G_TYPE_STRING, in3,
@@ -59,7 +69,7 @@
   virtual void ProxyAddSignal_2(DBusGProxy* proxy,
                                 const char* signal_name,
                                 GType type1,
-                                GType type2) {
+                                GType type2) OVERRIDE {
     dbus_g_proxy_add_signal(proxy, signal_name, type1, type2, G_TYPE_INVALID);
   }
 
@@ -67,7 +77,7 @@
                                   const char* signal_name,
                                   GCallback handler,
                                   void* data,
-                                  GClosureNotify free_data_func) {
+                                  GClosureNotify free_data_func) OVERRIDE {
     dbus_g_proxy_connect_signal(proxy, signal_name, handler, data,
                                 free_data_func);
   }
@@ -75,17 +85,18 @@
   virtual void ProxyDisconnectSignal(DBusGProxy* proxy,
                                      const char* signal_name,
                                      GCallback handler,
-                                     void* data) {
+                                     void* data) OVERRIDE {
     dbus_g_proxy_disconnect_signal(proxy, signal_name, handler, data);
   }
 
-  virtual DBusConnection* ConnectionGetConnection(DBusGConnection* gbus) {
+  virtual DBusConnection* ConnectionGetConnection(
+      DBusGConnection* gbus) OVERRIDE {
     return dbus_g_connection_get_connection(gbus);
   }
 
   virtual void DBusBusAddMatch(DBusConnection* connection,
                                const char* rule,
-                               DBusError* error) {
+                               DBusError* error) OVERRIDE {
     dbus_bus_add_match(connection, rule, error);
   }
 
@@ -93,7 +104,7 @@
       DBusConnection* connection,
       DBusHandleMessageFunction function,
       void* user_data,
-      DBusFreeFunction free_data_function) {
+      DBusFreeFunction free_data_function) OVERRIDE {
     return dbus_connection_add_filter(connection,
                                       function,
                                       user_data,
@@ -102,13 +113,13 @@
 
   virtual void DBusConnectionRemoveFilter(DBusConnection* connection,
                                           DBusHandleMessageFunction function,
-                                          void* user_data) {
+                                          void* user_data) OVERRIDE {
     dbus_connection_remove_filter(connection, function, user_data);
   }
 
   dbus_bool_t DBusMessageIsSignal(DBusMessage* message,
                                   const char* interface,
-                                  const char* signal_name) {
+                                  const char* signal_name) OVERRIDE {
     return dbus_message_is_signal(message, interface, signal_name);
   }
 
@@ -116,7 +127,7 @@
                                            DBusError* error,
                                            char** out1,
                                            char** out2,
-                                           char** out3) {
+                                           char** out3) OVERRIDE {
     return dbus_message_get_args(message, error,
                                  DBUS_TYPE_STRING, out1,
                                  DBUS_TYPE_STRING, out2,
