diff --git a/daemon/src/dbus/callmanager-introspec.xml b/daemon/src/dbus/callmanager-introspec.xml
index 07630ac456e632f1bc898bd6f8fb6a94bf714681..ff8a7121dfcdf561e3b6cf425bf38b6c53f0e942 100644
--- a/daemon/src/dbus/callmanager-introspec.xml
+++ b/daemon/src/dbus/callmanager-introspec.xml
@@ -160,6 +160,22 @@
             </arg>
         </method>
 
+        <method name="isValidCall" tp:name-for-bindings="isValidCall">
+            <tp:docstring>
+              Tests whether or not a call exists.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The call ID.
+              </tp:docstring>
+            </arg>
+            <arg type="b" name="isValid" direction="out">
+              <tp:docstring>
+                Returns true is the call has already been created/can be retrieved. False otherwise.
+              </tp:docstring>
+            </arg>
+        </method>
+
         <method name="startTone" tp:name-for-bindings="startTone">
             <tp:docstring>
               Start audio stream and play tone.
diff --git a/daemon/src/dbus/callmanager.cpp b/daemon/src/dbus/callmanager.cpp
index 465c2014cce7e01aa6c35b80e55ed8a0bea9b888..2f8464a7f59fc90ce4aba6da4b70a3bcab5558b9 100644
--- a/daemon/src/dbus/callmanager.cpp
+++ b/daemon/src/dbus/callmanager.cpp
@@ -288,6 +288,12 @@ CallManager::getCallList()
     return Manager::instance().getCallList();
 }
 
+bool
+CallManager::isValidCall(const std::string &callID)
+{
+    return Manager::instance().isValidCall(callID);
+}
+
 void
 CallManager::playDTMF(const std::string& key)
 {
diff --git a/daemon/src/dbus/callmanager.h b/daemon/src/dbus/callmanager.h
index 367ad8e92f184ea33533d617d5de957bdb7c9110..0c04eca07562af77521cc9951492420850ba72ec 100644
--- a/daemon/src/dbus/callmanager.h
+++ b/daemon/src/dbus/callmanager.h
@@ -85,6 +85,7 @@ class CallManager
         void attendedTransfer(const std::string& transferID, const std::string& targetID);
         std::map< std::string, std::string > getCallDetails(const std::string& callID);
         std::vector< std::string > getCallList();
+        bool isValidCall(const std::string &callID);
 
         /* Conference related methods */
         void joinParticipant(const std::string& sel_callID, const std::string& drag_callID);
diff --git a/gnome/src/contacts/calltree.c b/gnome/src/contacts/calltree.c
index 7b76dd5c04789f87e18b244e5a863308a392bf15..501f8dbe10e858343c58e5af43764662f4476ca9 100644
--- a/gnome/src/contacts/calltree.c
+++ b/gnome/src/contacts/calltree.c
@@ -624,12 +624,22 @@ update_call(GtkTreeModel *model, G_GNUC_UNUSED GtkTreePath *path, GtkTreeIter *i
 
     /* Update text */
     gchar *description = NULL;
-    gchar *audio_codec = call_get_audio_codec(call);
+
+    gchar *audio_codec;
+    gchar *video_codec;
+
+    /* Don't get codec names if call does not yet exist */
+    if (dbus_is_valid_call(call->_callID)) {
+        audio_codec = call_get_audio_codec(call);
 #ifdef SFL_VIDEO
-    gchar *video_codec = call_get_video_codec(call);
+        video_codec = call_get_video_codec(call);
 #else
-    gchar *video_codec = g_strdup("");
+        video_codec = g_strdup("");
 #endif
+    } else {
+        audio_codec = g_strdup("");
+        video_codec = g_strdup("");
+    }
 
     if (call->_state == CALL_STATE_TRANSFER)
         description = calltree_display_call_info(call, DISPLAY_TYPE_CALL_TRANSFER, "", "");
diff --git a/gnome/src/dbus/callmanager-introspec.xml b/gnome/src/dbus/callmanager-introspec.xml
index 07630ac456e632f1bc898bd6f8fb6a94bf714681..ff8a7121dfcdf561e3b6cf425bf38b6c53f0e942 100644
--- a/gnome/src/dbus/callmanager-introspec.xml
+++ b/gnome/src/dbus/callmanager-introspec.xml
@@ -160,6 +160,22 @@
             </arg>
         </method>
 
+        <method name="isValidCall" tp:name-for-bindings="isValidCall">
+            <tp:docstring>
+              Tests whether or not a call exists.
+            </tp:docstring>
+            <arg type="s" name="callID" direction="in">
+              <tp:docstring>
+                The call ID.
+              </tp:docstring>
+            </arg>
+            <arg type="b" name="isValid" direction="out">
+              <tp:docstring>
+                Returns true is the call has already been created/can be retrieved. False otherwise.
+              </tp:docstring>
+            </arg>
+        </method>
+
         <method name="startTone" tp:name-for-bindings="startTone">
             <tp:docstring>
               Start audio stream and play tone.
diff --git a/gnome/src/dbus/dbus.c b/gnome/src/dbus/dbus.c
index 68e688856a9fe275354bba70db16b22bd178c254..302d1466be7f563bbcdf3e4d6c4f574f48f41f18 100644
--- a/gnome/src/dbus/dbus.c
+++ b/gnome/src/dbus/dbus.c
@@ -1786,6 +1786,17 @@ dbus_get_call_details(const gchar *callID)
     return details;
 }
 
+gboolean
+dbus_is_valid_call(const gchar *callID)
+{
+    GError *error = NULL;
+    gboolean valid = FALSE;
+    org_sflphone_SFLphone_CallManager_is_valid_call(call_proxy, callID, &valid, &error);
+    check_error(error);
+
+    return valid;
+}
+
 gchar **
 dbus_get_call_list(void)
 {
diff --git a/gnome/src/dbus/dbus.h b/gnome/src/dbus/dbus.h
index 8d574b74113671cc21465821425bff6d47be4e6d..f5e1ccaf06b572b980a07194502f3786fa7b40e9 100644
--- a/gnome/src/dbus/dbus.h
+++ b/gnome/src/dbus/dbus.h
@@ -500,6 +500,8 @@ gboolean dbus_get_is_recording(const callable_obj_t *);
 
 GHashTable *dbus_get_call_details(const gchar *callID);
 
+gboolean dbus_is_valid_call(const gchar *callID);
+
 gchar **dbus_get_call_list(void);
 
 GHashTable* dbus_get_conference_details(const gchar *confID);