diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c
index de6da55168e2fe4da232483678d6fa57fd343a69..5520d25e5d54301ae5ec04799b5cc5048b127fe3 100644
--- a/sflphone-client-gnome/src/actions.c
+++ b/sflphone-client-gnome/src/actions.c
@@ -139,7 +139,7 @@ sflphone_ringing(callable_obj_t * c )
 sflphone_hung_up( callable_obj_t * c)
 {
     calllist_remove( current_calls, c->_callID);
-    calltree_remove_call(current_calls, c);
+    calltree_remove_call(current_calls, c, NULL);
     c->_state = CALL_STATE_DIALING;
     update_menus();
 #if GTK_CHECK_VERSION(2,10,0)
diff --git a/sflphone-client-gnome/src/contacts/calllist.c b/sflphone-client-gnome/src/contacts/calllist.c
index b44c9dfd5d950f953a839390ce3667bc4ed0bc19..2e635c4a34e445c9633048f1e995ed9b6e8c4869 100644
--- a/sflphone-client-gnome/src/contacts/calllist.c
+++ b/sflphone-client-gnome/src/contacts/calllist.c
@@ -112,7 +112,7 @@ calllist_clean_history( void )
     callable_obj_t* c = calllist_get_nth( history , i );
     // Delete the call from the call tree
     DEBUG("Delete calls");
-    calltree_remove_call(history , c);
+    calltree_remove_call(history, c, NULL);
   }
   calllist_reset( history );
 }
@@ -122,7 +122,7 @@ void
 calllist_remove_from_history( callable_obj_t* c )
 {
   calllist_remove( history, c->_callID );
-  calltree_remove_call( history, c );
+  calltree_remove_call(history, c, NULL);
   DEBUG("Size of history = %i" , calllist_get_size( history ));
 }
 
diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c
index ac30bc84269c23e5f9dc9efbdb9e5d8437e9fcf2..28d9cf6b27f0937f22ec4e8b3856d3a4bae64b50 100644
--- a/sflphone-client-gnome/src/contacts/calltree.c
+++ b/sflphone-client-gnome/src/contacts/calltree.c
@@ -314,19 +314,24 @@ calltree_create (calltab_t* tab, gboolean searchbar_type)
 }
 
     void
-calltree_remove_call (calltab_t* tab, callable_obj_t * c)
+    calltree_remove_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent)
 {
     GtkTreeIter iter;
     GValue val;
     callable_obj_t * iterCall;
     GtkTreeStore* store = tab->store;
 
-    int nbChild = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), NULL);
+    int nbChild = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), parent);
     int i;
     for( i = 0; i < nbChild; i++)
     {
-        if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter, NULL, i))
+        if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter, parent, i))
         {
+	    if(gtk_tree_model_iter_has_child(GTK_TREE_MODEL(store), &iter))
+	    {
+		calltree_remove_call (tab, c, &iter);
+	    }
+
             val.g_type = 0;
             gtk_tree_model_get_value (GTK_TREE_MODEL(store), &iter, 2, &val);
 
@@ -700,7 +705,7 @@ void calltree_add_conference (calltab_t* tab, const conference_obj_t* conf)
 	    call = calllist_get (tab, call_id);
 	    // create_new_call_from_details (conf_id, conference_details, &c);
 
-	    calltree_remove_call(tab, call);
+	    calltree_remove_call(tab, call, NULL);
 	    calltree_add_call (tab, call, &iter);
 	}
     }
@@ -739,8 +744,7 @@ void calltree_remove_conference (calltab_t* tab, const conference_obj_t* conf)
 
     int nbParticipant;
 
-    int i;
-    int j;
+    int i, j;
     for( i = 0; i < nbChild; i++)
     {
         if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter_parent, NULL, i))
diff --git a/sflphone-client-gnome/src/contacts/calltree.h b/sflphone-client-gnome/src/contacts/calltree.h
index 111fc519d227a1f1e49a7a4d50c0284833480270..c2ba938c930820f8d344bb0253adcaa99a31794f 100644
--- a/sflphone-client-gnome/src/contacts/calltree.h
+++ b/sflphone-client-gnome/src/contacts/calltree.h
@@ -54,7 +54,7 @@ calltree_update_call (calltab_t* ct, callable_obj_t * c, GtkTreeIter *parent);
  * @param c The call to remove
  */
 void
-calltree_remove_call (calltab_t* ct, callable_obj_t * c);
+calltree_remove_call (calltab_t* ct, callable_obj_t * c, GtkTreeIter *parent);
 
 void
 calltree_add_conference (calltab_t* tab, const conference_obj_t* conf);