diff --git a/gnome/src/contacts/calltree.c b/gnome/src/contacts/calltree.c
index d06951613ec824ae8d9c6afcca45b534421bcbfb..90af476696dde9df5461d9598752efb80b41a3d8 100644
--- a/gnome/src/contacts/calltree.c
+++ b/gnome/src/contacts/calltree.c
@@ -68,8 +68,8 @@ static CallType calltree_source_type = A_INVALID;
 static const gchar *calltree_dest_call_id = NULL;
 static const gchar *calltree_source_call_id = NULL;
 static const gchar *calltree_source_call_id_for_drag = NULL;
-static const gchar *calltree_dest_path = NULL;
-static const gchar *calltree_source_path = NULL;
+static gchar *calltree_dest_path = NULL;
+static gchar *calltree_source_path = NULL;
 static const gchar *calltree_source_path_for_drag = NULL;
 
 static gint calltree_dest_path_depth = -1;
@@ -88,7 +88,7 @@ static void drag_end_cb(GtkWidget *, GdkDragContext *, gpointer);
 static void drag_begin_cb(GtkWidget *widget, GdkDragContext *context, gpointer data UNUSED);
 static void drag_data_received_cb(GtkWidget *, GdkDragContext *, gint, gint, GtkSelectionData *, guint, guint, gpointer);
 static void drag_history_received_cb(GtkWidget *, GdkDragContext *, gint, gint, GtkSelectionData *, guint, guint, gpointer);
-static void menuitem_response(gchar *);
+static void menuitem_response(gchar *str);
 
 enum {
     COLUMN_ACCOUNT_PIXBUF = 0,
@@ -166,6 +166,7 @@ call_selected_cb(GtkTreeSelection *sel, void* data UNUSED)
         if (calltree_source_conf) {
             calltab_select_conf(active_calltree_tab, calltree_source_conf);
             calltree_source_call_id = calltree_source_conf->_confID;
+            g_free(calltree_source_path);
             calltree_source_path = string_path;
             calltree_source_call = NULL;
 
@@ -185,6 +186,7 @@ call_selected_cb(GtkTreeSelection *sel, void* data UNUSED)
         if (calltree_source_call) {
             calltab_select_call(active_calltree_tab, calltree_source_call);
             calltree_source_call_id = calltree_source_call->_callID;
+            g_free(calltree_source_path);
             calltree_source_path = string_path;
             calltree_source_conf = NULL;
 
@@ -1236,7 +1238,7 @@ static void drag_data_get_cb(GtkTreeDragSource *drag_source UNUSED, GtkTreePath
 {
 }
 
-static void drag_begin_cb (GtkWidget *widget UNUSED, GdkDragContext *context UNUSED, gpointer data UNUSED)
+static void drag_begin_cb(GtkWidget *widget UNUSED, GdkDragContext *context UNUSED, gpointer data UNUSED)
 {
     DEBUG("CallTree: Source Drag Begin callback");
     DEBUG("CallTreeS: source_path %s, source_call_id %s, source_path_depth %d",
@@ -1254,9 +1256,9 @@ static void undo_drag_call_action(callable_obj_t *c, GtkTreePath *spath)
     if (spath && calltree_source_call_for_drag->_confID) {
         gtk_tree_path_up(spath);
         // conference for which this call is attached
-        GtkTreeIter parent_conference;
-        gtk_tree_model_get_iter(GTK_TREE_MODEL(current_calls_tab->store), &parent_conference, spath);
-        calltree_add_call(current_calls_tab, c, &parent_conference);
+        GtkTreeIter parent;
+        gtk_tree_model_get_iter(GTK_TREE_MODEL(current_calls_tab->store), &parent, spath);
+        calltree_add_call(current_calls_tab, c, &parent);
     }
     else {
         calltree_add_call(current_calls_tab, c, NULL);
@@ -1270,25 +1272,18 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context UNUSED, gpo
     if (active_calltree_tab == history_tab)
         return;
 
-    DEBUG("CallTree: Drag End callback");
-    DEBUG("CallTreeS: source_path %s, source_call_id %s, source_path_depth %d",
+    DEBUG("source_path %s, source_call_id %s, source_path_depth %d",
           calltree_source_path_for_drag, calltree_source_call_id_for_drag, calltree_source_path_depth_for_drag);
-    DEBUG("CallTree: dest path %s, dest %s, dest_path_depth %d",
+    DEBUG("dest path %s, dest %s, dest_path_depth %d",
           calltree_source_path, calltree_source_call_id, calltree_source_path_depth);
 
     GtkTreeView *treeview = GTK_TREE_VIEW(widget);
     GtkTreeModel *model = gtk_tree_view_get_model(treeview);
 
-    calltree_dest_path = calltree_source_path;
-    calltree_dest_call_id = calltree_source_call_id;
-    calltree_dest_path_depth = calltree_source_path_depth;
-
     GtkTreePath *path = gtk_tree_path_new_from_string(calltree_dest_path);
     GtkTreePath *dpath = gtk_tree_path_new_from_string(calltree_dest_path);
     GtkTreePath *spath = gtk_tree_path_new_from_string(calltree_source_path_for_drag);
 
-    GtkTreeIter iter;
-
     // Make sure drag n drop does not imply a dialing call for either source and dest call
     if (calltree_source_call && (calltree_source_type == A_CALL)) {
         DEBUG("CallTree: Selected a call");
@@ -1427,13 +1422,16 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context UNUSED, gpo
                 sflphone_detach_participant(calltree_source_call_id);
             }
         } else if (calltree_dest_path_depth == 2) {
-            DEBUG("Dragged a conference call on another conference call (same conference");
+            DEBUG("Dragged a conference call on another conference call (same conference)");
             // TODO: dragged a conference call on another conference call (different conference)
 
             gtk_tree_path_up(path);
             // conference for which this call is attached
-            GtkTreeIter parent_conference;
-            gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &parent_conference, path);
+            GtkTreeIter parent;
+            if (!gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &parent, path)) {
+                ERROR("Could not find parent conference");
+                return;
+            }
 
             gtk_tree_path_up(dpath);
             gtk_tree_path_up(spath);
@@ -1441,7 +1439,7 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context UNUSED, gpo
             if (gtk_tree_path_compare(dpath, spath) == 0) {
                 DEBUG("Dragged a call in the same conference");
                 calltree_remove_call(current_calls_tab, calltree_source_call);
-                calltree_add_call(current_calls_tab, calltree_source_call, &parent_conference);
+                calltree_add_call(current_calls_tab, calltree_source_call, &parent);
                 gtk_widget_hide(calltree_menu_items);
                 gtk_menu_popup(GTK_MENU(calltree_popupmenu), NULL, NULL, NULL, NULL,
                         0, 0);
@@ -1449,6 +1447,7 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context UNUSED, gpo
                 DEBUG("Dragged a conference call onto another conference call %s, %s", gtk_tree_path_to_string(dpath), gtk_tree_path_to_string(spath));
                 conference_obj_t *conf = NULL;
 
+                GtkTreeIter iter;
                 if (gtk_tree_model_get_iter(model, &iter, dpath)) {
                     if (is_conference(model, &iter)) {
                         GValue val = G_VALUE_INIT;
@@ -1494,6 +1493,9 @@ void drag_data_received_cb(GtkWidget *widget, GdkDragContext *context UNUSED, gi
     gtk_tree_view_get_drag_dest_row(tree_view, &drop_path, &position);
 
     if (drop_path) {
+        gchar *drop_path_str = gtk_tree_path_to_string(drop_path);
+        DEBUG("Got drop path %s", drop_path_str);
+        g_free(drop_path_str);
 
         GtkTreeIter iter;
         gtk_tree_model_get_iter(tree_model, &iter, drop_path);
@@ -1501,11 +1503,11 @@ void drag_data_received_cb(GtkWidget *widget, GdkDragContext *context UNUSED, gi
         gtk_tree_model_get_value(tree_model, &iter, COLUMN_ACCOUNT_PTR, &val);
 
         if (is_conference(tree_model, &iter)) {
-            DEBUG("CallTree: Dragging on a conference");
+            DEBUG("Destination is a conference");
             calltree_dest_type = A_CONFERENCE;
             calltree_dest_call = NULL;
         } else {
-            DEBUG("CallTree: Dragging on a call");
+            DEBUG("Destination is a call");
             calltree_dest_type = A_CALL;
             calltree_dest_conf = NULL;
         }
@@ -1513,9 +1515,10 @@ void drag_data_received_cb(GtkWidget *widget, GdkDragContext *context UNUSED, gi
         DEBUG("Position %d", position);
         switch (position)  {
 
-            case GTK_TREE_VIEW_DROP_AFTER:
-                /* fallthrough */
             case GTK_TREE_VIEW_DROP_BEFORE:
+                /* fallthrough */
+            case GTK_TREE_VIEW_DROP_AFTER:
+                g_free(calltree_dest_path);
                 calltree_dest_path = gtk_tree_path_to_string(drop_path);
                 calltree_dest_path_depth = gtk_tree_path_get_depth(drop_path);
                 calltree_dest_call_id = NULL;
@@ -1523,9 +1526,10 @@ void drag_data_received_cb(GtkWidget *widget, GdkDragContext *context UNUSED, gi
                 calltree_dest_conf = NULL;
                 break;
 
-            case GTK_TREE_VIEW_DROP_INTO_OR_AFTER:
-                /* fallthrough */
             case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE:
+                /* fallthrough */
+            case GTK_TREE_VIEW_DROP_INTO_OR_AFTER:
+                g_free(calltree_dest_path);
                 calltree_dest_path = gtk_tree_path_to_string(drop_path);
                 calltree_dest_path_depth = gtk_tree_path_get_depth(drop_path);
 
@@ -1536,18 +1540,15 @@ void drag_data_received_cb(GtkWidget *widget, GdkDragContext *context UNUSED, gi
                     calltree_dest_call_id = ((conference_obj_t*) g_value_get_pointer(&val))->_confID;
                     calltree_dest_conf = (conference_obj_t*) g_value_get_pointer(&val);
                 }
-                break;
-
-            default:
+                g_value_unset(&val);
                 break;
         }
-        g_value_unset(&val);
     }
 }
 
 /* Print a string when a menu item is selected */
 
-static void menuitem_response(gchar *string)
+static void menuitem_response(gchar * string)
 {
     if (g_strcmp0(string, SFL_CREATE_CONFERENCE) == 0)
         dbus_join_participant(calltree_source_call_for_drag->_callID,
@@ -1566,6 +1567,5 @@ static void menuitem_response(gchar *string)
     gtk_widget_show(calltree_menu_items);
 
     DEBUG("%s", string);
-    g_free(string);
 }