diff --git a/libempathy-gtk/empathy-contact-widget.c b/libempathy-gtk/empathy-contact-widget.c
index 82a5ac7..8eb3d1b 100644
--- a/libempathy-gtk/empathy-contact-widget.c
+++ b/libempathy-gtk/empathy-contact-widget.c
@@ -872,18 +872,46 @@ widget_avatar_button_press_event_cb (GtkWidget *widget,
 }
 
 static void
+set_avatar_cb (GObject *source,
+    GAsyncResult *res,
+    gpointer user_data)
+{
+  GError *error = NULL;
+
+  if (!tp_account_set_avatar_finish (TP_ACCOUNT (source), res, &error)) {
+      DEBUG ("Failed to set Account.Avatar: %s", error->message);
+      g_error_free (error);
+  }
+}
+
+static void
+set_avatar_on_account (TpAccount *account,
+    const gchar *data,
+    gsize size,
+    const gchar *mime_type)
+{
+  DEBUG ("%s Account.Avatar on %s", size > 0 ? "Set": "Clear",
+      tp_proxy_get_object_path (account));
+
+  tp_account_set_avatar_async (account, (const guchar *) data, size,
+      mime_type, set_avatar_cb, NULL);
+}
+
+static void
 contact_widget_avatar_changed_cb (EmpathyAvatarChooser *chooser,
                                   EmpathyContactWidget *information)
 {
   const gchar *data;
   gsize size;
   const gchar *mime_type;
+  TpAccount *account;
 
   empathy_avatar_chooser_get_image_data (
       EMPATHY_AVATAR_CHOOSER (information->widget_avatar),
       &data, &size, &mime_type);
-  empathy_tp_contact_factory_set_avatar (information->factory,
-      data, size, mime_type);
+
+  account = empathy_contact_get_account (information->contact);
+  set_avatar_on_account (account, data, size, mime_type);
 }
 
 static gboolean
diff --git a/libempathy/empathy-tp-contact-factory.c b/libempathy/empathy-tp-contact-factory.c
index 4d5a729..7139ae7 100644
--- a/libempathy/empathy-tp-contact-factory.c
+++ b/libempathy/empathy-tp-contact-factory.c
@@ -146,29 +146,6 @@ tp_contact_factory_set_location_cb (TpConnection *tp_conn,
 }
 
 static void
-tp_contact_factory_set_avatar_cb (TpConnection *connection,
-				  const gchar  *token,
-				  const GError *error,
-				  gpointer      user_data,
-				  GObject      *tp_factory)
-{
-	if (error) {
-		DEBUG ("Error: %s", error->message);
-	}
-}
-
-static void
-tp_contact_factory_clear_avatar_cb (TpConnection *connection,
-				    const GError *error,
-				    gpointer      user_data,
-				    GObject      *tp_factory)
-{
-	if (error) {
-		DEBUG ("Error: %s", error->message);
-	}
-}
-
-static void
 tp_contact_factory_avatar_retrieved_cb (TpConnection *connection,
 					guint         handle,
 					const gchar  *token,
@@ -1278,44 +1255,6 @@ empathy_tp_contact_factory_set_alias (EmpathyTpContactFactory *tp_factory,
 }
 
 void
-empathy_tp_contact_factory_set_avatar (EmpathyTpContactFactory *tp_factory,
-				       const gchar             *data,
-				       gsize                    size,
-				       const gchar             *mime_type)
-{
-	EmpathyTpContactFactoryPriv *priv = GET_PRIV (tp_factory);
-
-	g_return_if_fail (EMPATHY_IS_TP_CONTACT_FACTORY (tp_factory));
-
-	if (data && size > 0 && size < G_MAXUINT) {
-		GArray avatar;
-
-		avatar.data = (gchar *) data;
-		avatar.len = size;
-
-		DEBUG ("Setting avatar on connection %s",
-			tp_proxy_get_object_path (TP_PROXY (priv->connection)));
-
-		tp_cli_connection_interface_avatars_call_set_avatar (priv->connection,
-								     -1,
-								     &avatar,
-								     mime_type,
-								     tp_contact_factory_set_avatar_cb,
-								     NULL, NULL,
-								     G_OBJECT (tp_factory));
-	} else {
-		DEBUG ("Clearing avatar on connection %s",
-			tp_proxy_get_object_path (TP_PROXY (priv->connection)));
-
-		tp_cli_connection_interface_avatars_call_clear_avatar (priv->connection,
-								       -1,
-								       tp_contact_factory_clear_avatar_cb,
-								       NULL, NULL,
-								       G_OBJECT (tp_factory));
-	}
-}
-
-void
 empathy_tp_contact_factory_set_location (EmpathyTpContactFactory *tp_factory,
 					 GHashTable              *location)
 {
diff --git a/libempathy/empathy-tp-contact-factory.h b/libempathy/empathy-tp-contact-factory.h
index ed11bf7..4cce6ec 100644
--- a/libempathy/empathy-tp-contact-factory.h
+++ b/libempathy/empathy-tp-contact-factory.h
@@ -104,10 +104,6 @@ void                     empathy_tp_contact_factory_get_from_handle  (EmpathyTpC
 void                     empathy_tp_contact_factory_set_alias        (EmpathyTpContactFactory *tp_factory,
 								      EmpathyContact          *contact,
 								      const gchar             *alias);
-void                     empathy_tp_contact_factory_set_avatar       (EmpathyTpContactFactory *tp_factory,
-								      const gchar             *data,
-								      gsize                    size,
-								      const gchar             *mime_type);
 void                     empathy_tp_contact_factory_set_location     (EmpathyTpContactFactory *tp_factory,
 								      GHashTable              *location);
 G_END_DECLS
