+static gint
+contact_list_store_contact_sort (EmpathyContact *contact_a,
+ EmpathyContact *contact_b)
+{
+ TpAccount *account_a, *account_b;
+ gint ret_val;
+
+ g_return_val_if_fail (contact_a != NULL || contact_b != NULL, 0);
+
+ /* alias */
+ ret_val = g_utf8_collate (empathy_contact_get_alias (contact_a),
+ empathy_contact_get_alias (contact_b));
+
+ if (ret_val != 0)
+ goto out;
+
+ /* identifier */
+ ret_val = g_utf8_collate (empathy_contact_get_id (contact_a),
+ empathy_contact_get_id (contact_b));
+
+ if (ret_val != 0)
+ goto out;
+
+ account_a = empathy_contact_get_account (contact_a);
+ account_b = empathy_contact_get_account (contact_b);
+
+ /* protocol */
+ ret_val = strcmp (tp_account_get_protocol (account_a),
+ tp_account_get_protocol (account_b));
+
+ if (ret_val != 0)
+ goto out;
+
+ /* account ID */
+ ret_val = strcmp (tp_proxy_get_object_path (account_a),
+ tp_proxy_get_object_path (account_b));
+
+out:
+ return ret_val;
+}
+