diff --git a/gnome/src/video/video_callbacks.c b/gnome/src/video/video_callbacks.c
index 9b6c7db69d7078df14c2a674095bee2537e9398e..0744edaddde5caf27e60fc7681386afe9e69e437 100644
--- a/gnome/src/video/video_callbacks.c
+++ b/gnome/src/video/video_callbacks.c
@@ -35,10 +35,14 @@
 #include <clutter/clutter.h>
 #include <clutter-gtk/clutter-gtk.h>
 
-#include <string.h>
-
 #include <glib/gi18n.h>
 
+typedef enum {
+    IS_CALL,
+    IS_CONFERENCE,
+    IS_DESTROYED
+} call_type_t;
+
 typedef struct {
     gchar *id;
     GtkWidget *window;
@@ -47,6 +51,39 @@ typedef struct {
 
 static GHashTable *video_handles;
 
+/* FIXME: this solution is a workaround, we must have this information from the
+ * daemon by receiving a dbus signal, or a new structure to handle ID */
+/* This function is an helper function to determine if the ID is a callID or a
+ * confID */
+static call_type_t
+is_call_or_conf(const gchar *id)
+{
+    /* get the call list and compare the id with all id in the list */
+    gchar **call_list = dbus_get_call_list();
+    for (gchar **call = call_list; call && *call; call++) {
+        /* if we found the same id, it's a call ID */
+        if (g_strcmp0(id, *call) == 0) {
+            g_strfreev(call_list);
+            return IS_CALL;
+        }
+    }
+    g_strfreev(call_list);
+
+    /* get the conference list and compare the id with all id in the list */
+    gchar **conference_list = dbus_get_conference_list();
+    for (gchar **conference = conference_list; conference && *conference; conference++) {
+        /* if we found the same id, it's a conf ID */
+        if (g_strcmp0(id, *conference) == 0) {
+            g_strfreev(conference_list);
+            return IS_CONFERENCE;
+        }
+    }
+    g_strfreev(conference_list);
+
+    return IS_DESTROYED;
+
+}
+
 static gboolean
 video_is_local(const gchar *id)
 {
@@ -108,6 +145,7 @@ video_window_button_cb(GtkWindow *win,
 
 }
 
+
 static VideoHandle*
 add_handle(const gchar *id)
 {
@@ -136,8 +174,83 @@ add_handle(const gchar *id)
 
     /* Preview video */
     if (video_is_local(id)) {
+
         gtk_window_set_title(GTK_WINDOW(handle->window), _("Local View"));
         update_camera_button_label();
+
+    } else {
+
+        gchar *window_title = NULL;
+        gchar *title_prefix = NULL;
+        gchar *name = NULL;
+        call_type_t call_type = is_call_or_conf(id);
+
+        if (call_type == IS_DESTROYED)
+            return NULL;
+
+        if (call_type == IS_CONFERENCE) { /* on a conference call */
+
+            /* build the prefix title name */
+            title_prefix = _("Conference with");
+
+            /* get all the participants name */
+            gchar **participant_list = dbus_get_participant_list(id);
+            for (gchar **participant = participant_list; participant && *participant; participant++) {
+                g_debug("participant %s\n", *participant);
+
+                gchar *new_name = NULL;
+
+                /* create a new callable object to manipulate the id details */
+                callable_obj_t *c = create_new_call_from_details(*participant, dbus_get_call_details(*participant));
+
+                /* if no display name, we show the peer_number */
+                if (g_strcmp0(c->_display_name, "") != 0) {
+                    new_name = g_strdup(c->_display_name);
+                } else {
+                    new_name = g_strdup(c->_peer_number);
+                }
+
+                /* if name exists we must add the new name to the list */
+                if (name) {
+                    gchar *name_list = g_strdup_printf("%s, %s", name, new_name);
+                    g_free(name);
+                    name = name_list;
+                } else {
+                    name = g_strdup(new_name);
+                }
+
+                g_free(new_name);
+                g_free(c);
+            }
+
+         g_strfreev(participant_list);
+
+        } else if (call_type == IS_CALL) { /* on a simple call */
+
+            /* create a new callable object to manipulate the call details */
+            callable_obj_t *c = create_new_call_from_details(id, dbus_get_call_details(id));
+
+            /* build the prefix title name */
+            title_prefix = _("Call with");
+
+            /* if no display name, we show the peer_number */
+            if (g_strcmp0(c->_display_name, "") != 0) {
+                name = g_strdup(c->_display_name);
+            } else {
+                name = g_strdup(c->_peer_number);
+            }
+
+            g_free(c);
+        }
+
+        /* build the final title name */
+        window_title = g_strdup_printf("%s %s", title_prefix, name);
+
+        /* update the window title */
+        gtk_window_set_title(GTK_WINDOW(handle->window), window_title);
+
+        g_free(name);
+        g_free(window_title);
     }
 
     g_hash_table_insert(video_handles, g_strdup(id), handle);
@@ -173,6 +286,7 @@ try_clutter_init()
 #undef PRINT_ERR
 }
 
+/* TODO: this window must be created at startup */
 void
 started_decoding_video_cb(G_GNUC_UNUSED DBusGProxy *proxy,
                           gchar *id,