Index: empathy-contact-list-view.c
===================================================================
--- empathy-contact-list-view.c	(revision 535)
+++ empathy-contact-list-view.c	(working copy)
@@ -185,6 +185,16 @@
 								EmpathyContactListView      *view);
 static void        contact_list_view_voip_activated            (EmpathyContactListView      *view,
 								EmpathyContact              *contact);
+static void        contact_list_edited(GtkCellRendererText *cellrenderertext, 
+								gchar *arg1,
+								gchar *arg2,
+								gpointer user_data);
+static void        contact_list_renderer_editing_started_cb(GtkCellRenderer *renderer,
+								GtkCellEditable *editable,
+								gchar *path_str,
+								gpointer user_data);
+static void 	   contact_list_renderer_editing_cancelled_cb(GtkCellRenderer *renderer, 
+								gpointer user_data);
 
 enum {
 	PROP_0,
@@ -336,6 +346,63 @@
 	g_type_class_add_private (object_class, sizeof (EmpathyContactListViewPriv));
 }
 
+void contact_list_edited(GtkCellRendererText *cellrenderertext, gchar *paths, gchar *new_text, gpointer user_data)
+{
+	EmpathyContactList *list;
+	EmpathyContactListViewPriv *priv;
+
+	g_object_set(G_OBJECT(EMPATHY_CONTACT_LIST_VIEW(user_data)->text_rend), "editable", FALSE, NULL);
+
+	gchar *old_text = empathy_contact_list_view_get_selected_group( 
+					EMPATHY_CONTACT_LIST_VIEW(user_data) );
+
+	g_return_if_fail( strcmp(old_text, new_text)!=0 );
+	g_return_if_fail( strlen(new_text)!=0 );
+
+	priv = GET_PRIV (EMPATHY_CONTACT_LIST_VIEW(user_data));
+	list = empathy_contact_list_store_get_list_iface (priv->store);
+	empathy_contact_list_rename_group ( list, old_text, new_text);
+
+	
+}
+
+static void contact_list_renderer_editing_cancelled_cb(GtkCellRenderer *renderer, gpointer user_data)
+{
+	g_object_set(G_OBJECT(EMPATHY_CONTACT_LIST_VIEW(user_data)->text_rend), "editable", FALSE, NULL);
+}
+
+static void contact_list_renderer_editing_started_cb(GtkCellRenderer *renderer,
+		GtkCellEditable *editable,
+		gchar *path_str,
+		gpointer user_data)
+{
+	empathy_debug (DEBUG_DOMAIN,"gtk_blist_renderer_editing_started_cb \n%s", path_str);
+	GtkTreeIter iter;
+	GtkTreeModel *model;
+	char *name;
+	GtkTreeSelection          *selection;
+
+	g_return_if_fail (EMPATHY_IS_CONTACT_LIST_VIEW (user_data));
+
+	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (user_data));
+	if (!gtk_tree_selection_get_selected (selection, &model, &iter)) {
+		return ;
+	}
+
+	gtk_tree_model_get (model, &iter, 
+			EMPATHY_CONTACT_LIST_STORE_COL_NAME, &name,
+			-1);
+
+	empathy_debug (DEBUG_DOMAIN,"gtk_blist_renderer_editing_started_cb \n%s", name);
+
+	if (GTK_IS_ENTRY (editable)) {
+		GtkEntry *entry = GTK_ENTRY (editable);
+		gtk_entry_set_text(entry, name);
+	}
+
+}
+
+
 static void
 empathy_contact_list_view_init (EmpathyContactListView *view)
 {
@@ -637,6 +704,13 @@
 					    "status", EMPATHY_CONTACT_LIST_STORE_COL_STATUS);
 	gtk_tree_view_column_add_attribute (col, cell,
 					    "is_group", EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP);
+	g_signal_connect(G_OBJECT(cell), 
+				"editing-started", G_CALLBACK(contact_list_renderer_editing_started_cb), view);
+	g_signal_connect(G_OBJECT(cell), 
+				"editing-canceled", G_CALLBACK(contact_list_renderer_editing_cancelled_cb), view);
+	g_signal_connect(G_OBJECT(cell), 
+				"edited", G_CALLBACK(contact_list_edited), view);
+	view->text_rend = cell;
 
 #ifdef HAVE_VOIP
 	/* Voip Capability Icon */
@@ -1426,6 +1500,26 @@
 					parent);
 	}
 	else if (group && strcmp (name, "Rename") == 0) {
+
+		GtkTreePath *path;
+		GtkTreeIter iter;
+		GtkTreeSelection *selection;
+		
+		selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(view));
+		gtk_tree_selection_get_selected     (selection,
+                                                         NULL,
+                                                         &iter);
+		path = gtk_tree_model_get_path ( gtk_tree_view_get_model (GTK_TREE_VIEW(view)) ,
+                                                         &iter);
+
+		g_object_set(G_OBJECT(view->text_rend), "editable", TRUE, NULL);
+		
+		gtk_tree_view_set_enable_search (GTK_TREE_VIEW (view), FALSE);
+		gtk_widget_grab_focus (GTK_WIDGET (view));
+		gtk_tree_view_set_cursor ( GTK_TREE_VIEW (view), path, 
+						gtk_tree_view_get_column(GTK_TREE_VIEW (view), 0),
+						TRUE);
+
 	}
 	else if (group && strcmp (name, "Remove") == 0) {
 		EmpathyContactList *list;
Index: empathy-contact-list-view.h
===================================================================
--- empathy-contact-list-view.h	(revision 535)
+++ empathy-contact-list-view.h	(working copy)
@@ -47,6 +47,7 @@
 
 struct _EmpathyContactListView {
 	GtkTreeView            parent;
+	GtkCellRenderer *text_rend;
 };
 
 struct _EmpathyContactListViewClass {
