Index: libempathy-gtk/empathy-contact-list-view.c
===================================================================
--- libempathy-gtk/empathy-contact-list-view.c	(revision 525)
+++ libempathy-gtk/empathy-contact-list-view.c	(working copy)
@@ -263,6 +263,7 @@
 	"  </popup>"
 	"  <popup name='Group'>"
 	"    <menuitem action='Rename'/>"
+	"    <menuitem action='Remove'/>"
 	"  </popup>"
 	"</ui>";
 
@@ -1428,7 +1429,13 @@
 	}
 	else if (group && strcmp (name, "Rename") == 0) {
 	}
+	else if (group && strcmp (name, "Remove") == 0) {
+		EmpathyContactList *list;
 
+		list = empathy_contact_list_store_get_list_iface (priv->store);
+		empathy_contact_list_remove_group (list, group);
+	}
+
 	g_free (group);
 	if (contact) {
 		g_object_unref (contact);
Index: libempathy/empathy-contact-manager.c
===================================================================
--- libempathy/empathy-contact-manager.c	(revision 525)
+++ libempathy/empathy-contact-manager.c	(working copy)
@@ -482,7 +482,28 @@
 			      &data);
 }
 
+static void contact_manager_remove_group_foreach (McAccount	*account,
+						  EmpathyTpContactList *list,
+						  const gchar *group)
+{
+	empathy_contact_list_remove_group (EMPATHY_CONTACT_LIST (list),
+					   group);
+}
+
 static void
+contact_manager_remove_group (EmpathyContactList *manager,
+			      const gchar *group)
+{
+	EmpathyContactManagerPriv *priv = GET_PRIV (manager);
+	
+	g_return_if_fail (EMPATHY_IS_CONTACT_MANAGER (manager));
+
+	g_hash_table_foreach (priv->lists,
+			      (GHFunc) contact_manager_remove_group_foreach,
+			      (gpointer) group);
+}
+
+static void
 contact_manager_iface_init (EmpathyContactListIface *iface)
 {
 	iface->add               = contact_manager_add;
@@ -494,5 +515,6 @@
 	iface->add_to_group      = contact_manager_add_to_group;
 	iface->remove_from_group = contact_manager_remove_from_group;
 	iface->rename_group      = contact_manager_rename_group;
+	iface->remove_group	 = contact_manager_remove_group;
 }
 
Index: libempathy/empathy-tp-contact-list.c
===================================================================
--- libempathy/empathy-tp-contact-list.c	(revision 525)
+++ libempathy/empathy-tp-contact-list.c	(working copy)
@@ -981,6 +981,33 @@
 }
 
 static void
+tp_contact_list_remove_group (EmpathyContactList *list,
+			      const gchar *group)
+{
+	EmpathyTpGroup *tp_group;
+	GList	       *members;
+
+	g_return_if_fail (EMPATHY_IS_TP_CONTACT_LIST (list));
+
+	tp_group = tp_contact_list_find_group (EMPATHY_TP_CONTACT_LIST (list),
+					       group);
+	
+	if (!tp_group) {
+		return;
+	}
+
+	empathy_debug (DEBUG_DOMAIN, "remove group %s", group);
+
+	/* Remove all members of the group */
+	members = empathy_tp_group_get_members (tp_group);
+	empathy_tp_group_remove_members (tp_group, members, "");
+	empathy_tp_group_close (tp_group);
+
+	g_list_foreach (members, (GFunc) g_object_unref, NULL);
+	g_list_free (members);
+}
+
+static void
 tp_contact_list_iface_init (EmpathyContactListIface *iface)
 {
 	iface->add               = tp_contact_list_add;
@@ -992,5 +1019,6 @@
 	iface->add_to_group      = tp_contact_list_add_to_group;
 	iface->remove_from_group = tp_contact_list_remove_from_group;
 	iface->rename_group      = tp_contact_list_rename_group;
+	iface->remove_group	 = tp_contact_list_remove_group;
 }
 
Index: libempathy/empathy-contact-list.c
===================================================================
--- libempathy/empathy-contact-list.c	(revision 525)
+++ libempathy/empathy-contact-list.c	(working copy)
@@ -203,3 +203,15 @@
 	}
 }
 
+void
+empathy_contact_list_remove_group (EmpathyContactList *list,
+				   const gchar *group)
+{
+	g_return_if_fail (EMPATHY_IS_CONTACT_LIST (list));
+	g_return_if_fail (group != NULL);
+
+	if (EMPATHY_CONTACT_LIST_GET_IFACE (list)->remove_group) {
+		EMPATHY_CONTACT_LIST_GET_IFACE (list)->remove_group (list, group);
+	}
+}
+
Index: libempathy/empathy-contact-list.h
===================================================================
--- libempathy/empathy-contact-list.h	(revision 525)
+++ libempathy/empathy-contact-list.h	(working copy)
@@ -61,6 +61,8 @@
 	void             (*rename_group)      (EmpathyContactList *list,
 					       const gchar        *old_group,
 					       const gchar        *new_group);
+	void		 (*remove_group)      (EmpathyContactList *list,
+					       const gchar	  *group);
 };
 
 GType    empathy_contact_list_get_type          (void) G_GNUC_CONST;
@@ -84,6 +86,8 @@
 void     empathy_contact_list_rename_group      (EmpathyContactList *list,
 						 const gchar        *old_group,
 						 const gchar        *new_group);
+void	 empathy_contact_list_remove_group	(EmpathyContactList *list,
+						 const gchar	    *group);
 
 G_END_DECLS
 
