diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c
index fda704f86668cbe0fceeb95ae2505b3a3aad7716..2fbeb378d187613a1cff59fd2ae814889787e07a 100644
--- a/sflphone-client-gnome/src/dbus/dbus.c
+++ b/sflphone-client-gnome/src/dbus/dbus.c
@@ -127,7 +127,7 @@ incoming_message_cb(DBusGProxy *proxy UNUSED, const gchar* callID UNUSED,
 
 	// Get the call information. Does this call exist?
 	callable_obj_t * c = calllist_get (current_calls, callID);
-	im_widget_add_message (NULL, msg);
+	im_widget_add_message (c, msg);
 	if (c) {
 		notify_incoming_message (callID, msg);
 	} else {
diff --git a/sflphone-client-gnome/src/imwindow.c b/sflphone-client-gnome/src/imwindow.c
index 69bae4df72b4284155249f4d75b038f34f4f5bb3..eb20ca626b4ca9c49b6f5706964270164af666d9 100644
--- a/sflphone-client-gnome/src/imwindow.c
+++ b/sflphone-client-gnome/src/imwindow.c
@@ -119,7 +119,7 @@ im_window_get()
 }
 
 void
-im_window_add(GtkWidget *widget)
+im_window_add (GtkWidget *widget)
 {
 	if (im_window_get()) {
 		gtk_box_pack_start (GTK_BOX (im_vbox), widget, TRUE /*expand*/,
diff --git a/sflphone-client-gnome/src/uimanager.c b/sflphone-client-gnome/src/uimanager.c
index 91f70c5d5b5e0a84b65969747fd21a44d9cc4e20..c3b917d01f6c2233e7f856061faccaab333e789c 100644
--- a/sflphone-client-gnome/src/uimanager.c
+++ b/sflphone-client-gnome/src/uimanager.c
@@ -509,22 +509,15 @@ call_hold(void* foo UNUSED)
 call_im (void* foo UNUSED)
 {
 	callable_obj_t * selectedCall = calltab_get_selected_call(current_calls);
-
 	static IMWidget *im = NULL;
-	/*if (!im) {
-	  im = im_widget_new();
-	  im_window_add(im);
-	  } else {
-	  im_widget_add_message(im, "hello from call_im");
-	  }*/
-
+	
 	if (selectedCall)
 	{
 		if (selectedCall->_im_widget == NULL) {
 			printf("Call IM with call %s\n", selectedCall->_callID);
 			im = im_widget_new();
 			im_window_add (im);
-			im->callID = selectedCall->_callID;
+			im->call = selectedCall;
 			selectedCall->_im_widget = im;
 		}
 	}
diff --git a/sflphone-client-gnome/src/widget/imwidget.c b/sflphone-client-gnome/src/widget/imwidget.c
index 983961f5bae031b0368302b7ccd25a61987c8a01..58b90508199992fd7662476f4493c772541e5a14 100644
--- a/sflphone-client-gnome/src/widget/imwidget.c
+++ b/sflphone-client-gnome/src/widget/imwidget.c
@@ -29,33 +29,40 @@
 
 #include "imwidget.h"
 #include <JavaScriptCore/JavaScript.h>
+#include <gdk/gdkkeysyms.h>
 
 #define WEBKIT_DIR "file://" DATA_DIR "/webkit/"
 
 static IMWidget *_this;
 
-void
-im_widget_add_message (GtkWidget *widget, const gchar *message)
+	void
+im_widget_add_message (callable_obj_t *call, const gchar *message)
 {
-	IMWidget *im = IM_WIDGET(widget);
-	
-	/* Prepare and execute the Javascript code */
-	gchar *script = g_strdup_printf("add_message('%s');", message);
-	webkit_web_view_execute_script (WEBKIT_WEB_VIEW (_this->web_view), script);
-	// webkit_web_view_execute_script (WEBKIT_WEB_VIEW(im->web_view), script);
+	/* use the widget for this specific call, if exists */
+	IMWidget *im = IM_WIDGET (call->_im_widget); // IM_WIDGET(widget);
+
+	if (im) {
+
+		/* Create the main instant messaging window */
+		// im_window_add (im);
 
-	/* Cleanup */
-	g_free(script);
+		/* Prepare and execute the Javascript code */
+		gchar *script = g_strdup_printf("add_message('%s', '%s', '%s', '%s');", message, call->_peer_name, call->_peer_number, call->_peer_info);
+		webkit_web_view_execute_script (WEBKIT_WEB_VIEW(_this->web_view), script);
+
+		/* Cleanup */
+		g_free(script);
+	}
 }
 
 static gboolean
 web_view_nav_requested_cb(
-	WebKitWebView             *web_view,
-	WebKitWebFrame            *frame,
-	WebKitNetworkRequest      *request,
-	WebKitWebNavigationAction *navigation_action,
-	WebKitWebPolicyDecision   *policy_decision,
-	gpointer                   user_data)
+		WebKitWebView             *web_view,
+		WebKitWebFrame            *frame,
+		WebKitNetworkRequest      *request,
+		WebKitWebNavigationAction *navigation_action,
+		WebKitWebPolicyDecision   *policy_decision,
+		gpointer                   user_data)
 {
 	const gchar *uri = webkit_network_request_get_uri(request);
 
@@ -69,35 +76,50 @@ web_view_nav_requested_cb(
 	return TRUE;
 }
 
-static void
-on_SendMessage_click (void) {
-	
-	/* Get all the text in the buffer */
+	static gboolean 
+on_Textview_changed (GtkWidget *widget, GdkEventKey *event, gpointer user_data)
+{
+
 	GtkTextIter start, end;
+	/* Get all the text in the buffer */
 	GtkTextBuffer *buffer =  gtk_text_view_get_buffer (GTK_TEXT_VIEW (_this->textarea));
-	gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER (buffer), &start, &end);
-	gchar *message = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+	
+	if (event->type == GDK_KEY_PRESS){
+
+		switch (event->keyval)
+		{
+			case GDK_Return:
+
+				if (gtk_text_buffer_get_char_count (buffer) != 0 )
+				{
+					gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER (buffer), &start, &end);
+					gchar *message = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
 
-	if (g_strcasecmp (message, "") != 0 )
-	{
-		/* Display our own message in the chat window */
-		im_widget_add_message (GTK_WIDGET (_this), message);
+					/* Display our own message in the chat window */
+					im_widget_add_message (_this->call, message);
 
-		/* Send the message to the peer */
-		dbus_send_text_message (_this->callID, message);
+					/* Send the message to the peer */
+					dbus_send_text_message (_this->call->_callID, message);
 
-		/* Empty the buffer */
-		gtk_text_buffer_delete (GTK_TEXT_BUFFER (buffer), &start, &end);	
+					/* Empty the buffer */
+					gtk_text_buffer_delete (GTK_TEXT_BUFFER (buffer), &start, &end);	
+
+				}
+				return TRUE;
+		}
 	}
+
+	return FALSE;
 }
 
 
-static void
+
+	static void
 im_widget_class_init(IMWidgetClass *klass)
 {
 }
 
-static void
+	static void
 im_widget_init (IMWidget *im)
 {
 
@@ -108,19 +130,19 @@ im_widget_init (IMWidget *im)
 
 	/* A bar with the entry text and the button to send the message */
 	GtkWidget *hbox = gtk_hbox_new (FALSE, 10);
-	GtkWidget *button_SendMessage = gtk_button_new_with_label("Send");
 	gtk_text_view_set_editable(GTK_TEXT_VIEW(im->textarea), TRUE);
-	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(textscrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(textscrollwin), GTK_POLICY_NEVER, GTK_POLICY_NEVER);
 	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(webscrollwin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+	gtk_widget_set_size_request(GTK_WIDGET (textscrollwin), -1, 20);
+	gtk_widget_set_size_request(GTK_WIDGET (im->textarea), -1, 20);
+
 	gtk_container_add (GTK_CONTAINER (textscrollwin), im->textarea);
 	gtk_container_add (GTK_CONTAINER (webscrollwin), im->web_view);
 	gtk_container_add (GTK_CONTAINER (hbox), textscrollwin);
-	gtk_container_add (GTK_CONTAINER (hbox), button_SendMessage);
-	gtk_box_pack_start(GTK_BOX(im), webscrollwin, TRUE, TRUE, 5);
-	gtk_box_pack_end(GTK_BOX(im), hbox, FALSE, FALSE, 1);
-	// gtk_box_pack_end(GTK_BOX(im), textscrollwin, TRUE, TRUE, 5);
+	gtk_box_pack_start (GTK_BOX(im), webscrollwin, TRUE, TRUE, 5);
+	gtk_box_pack_end (GTK_BOX(im), hbox, FALSE, FALSE, 2);
 	g_signal_connect (im->web_view, "navigation-policy-decision-requested", G_CALLBACK (web_view_nav_requested_cb), NULL);
-	g_signal_connect(button_SendMessage, "clicked", G_CALLBACK(on_SendMessage_click), NULL);
+	g_signal_connect(im->textarea, "key-press-event", G_CALLBACK (on_Textview_changed), NULL);
 	g_signal_connect (G_OBJECT (webscrollwin), "destroy", G_CALLBACK (gtk_main_quit), NULL);
 
 	im->web_frame = webkit_web_view_get_main_frame(WEBKIT_WEB_VIEW(im->web_view));
@@ -131,13 +153,13 @@ im_widget_init (IMWidget *im)
 	_this = im;
 }
 
-GtkWidget *
+	GtkWidget *
 im_widget_new()
 {
 	return GTK_WIDGET (g_object_new (IM_WIDGET_TYPE, NULL));
 }
 
-GType
+	GType
 im_widget_get_type(void)
 {
 	static GType im_widget_type = 0;
@@ -157,10 +179,10 @@ im_widget_get_type(void)
 		};
 
 		im_widget_type = g_type_register_static(
-			GTK_TYPE_VBOX,
-			"IMWidget",
-			&im_widget_info,
-			0);
+				GTK_TYPE_VBOX,
+				"IMWidget",
+				&im_widget_info,
+				0);
 	}
 
 	return im_widget_type;
diff --git a/sflphone-client-gnome/src/widget/imwidget.h b/sflphone-client-gnome/src/widget/imwidget.h
index 018fa48ee4474442650eacad33599dbe395bcb41..7a250b43f8046710eeea75049302b2946c099321 100644
--- a/sflphone-client-gnome/src/widget/imwidget.h
+++ b/sflphone-client-gnome/src/widget/imwidget.h
@@ -32,6 +32,7 @@
 #define __IM_WIDGET_H__
 
 #include <gtk/gtk.h>
+#include <callable_obj.h>
 #include <webkit/webkit.h>
 
 G_BEGIN_DECLS
@@ -52,7 +53,7 @@ struct _IMWidget {
 	/* Private */
 	GtkWidget *textarea;
 	GtkWidget *web_view;
-	gchar *callID;					/* The callID attached to this conversation */
+	callable_obj_t *call;			/* The call attached to this conversation */
 	WebKitWebFrame *web_frame;      // Our web frame
 	JSGlobalContextRef js_context;  // The frame's global JS context
 	JSObjectRef js_global;          // The frame's global context JS object
@@ -64,7 +65,7 @@ struct _IMWidgetClass {
 
 GType im_widget_get_type(void) G_GNUC_CONST;
 GtkWidget *im_widget_new(void);
-void im_widget_add_message(GtkWidget *im, const gchar *message);
+void im_widget_add_message (callable_obj_t *c, const gchar *message);
 
 G_END_DECLS
 
diff --git a/sflphone-client-gnome/webkit/Makefile.am b/sflphone-client-gnome/webkit/Makefile.am
index 557eafdc2e9c5c06b2ea6da9c52fdc56407cba6c..7d546f48406ade69060b6c86cbe9a085013c8e6c 100644
--- a/sflphone-client-gnome/webkit/Makefile.am
+++ b/sflphone-client-gnome/webkit/Makefile.am
@@ -5,4 +5,7 @@ EXTRA_DIST = $(im_DATA)
 webkitdir = $(datadir)/sflphone/webkit
 
 imdir = $(webkitdir)/im
-im_DATA = im/im.js im/im.html im/im.css
+im_DATA =	im/im.js \
+			im/im.html \
+			im/im.css \
+			im/sflphone.png
diff --git a/sflphone-client-gnome/webkit/im/im.css b/sflphone-client-gnome/webkit/im/im.css
index 28cf9a6516f81425e50506fae04e4773ec702f01..fb030d1db16a9ec21bc700c6ba3db351d9c402bc 100644
--- a/sflphone-client-gnome/webkit/im/im.css
+++ b/sflphone-client-gnome/webkit/im/im.css
@@ -1,8 +1,21 @@
 .message {
 	-webkit-border-radius: 5px;
-	background: #f2f2f2;
+	background: rgba(242, 242, 242, 0.75);
 	color: #777;
 	padding: 1em;
 	-webkit-box-shadow: 2px 2px 5px #000;
 	margin: 20px;
+overflow: auto;
+}
+
+* {
+	font-size: 1em;
+}
+
+.page {
+
+}
+
+body {
+	background: #fbfdfe url(sflphone.png) no-repeat top right;
 }
diff --git a/sflphone-client-gnome/webkit/im/im.html b/sflphone-client-gnome/webkit/im/im.html
index 0e17ee5cbf5ea8ab2874dfb18c37a37b98864926..da25848f71c905a7e2a5f1f0e9762642613b6929 100644
--- a/sflphone-client-gnome/webkit/im/im.html
+++ b/sflphone-client-gnome/webkit/im/im.html
@@ -5,6 +5,8 @@
 		<link rel="stylesheet" type="text/css" href="im.css" />
 	</head>
 	<body>
-		<div id="messages"></div>
+		<div class='page'>
+			<div id="messages"></div>
+		</div>
 	</body>
 </html>
diff --git a/sflphone-client-gnome/webkit/im/im.js b/sflphone-client-gnome/webkit/im/im.js
index 41fb15b365890d5f83b4e347521d34d7b46abb31..7ac134f4c8f6e33e5c1faef7ff8d6ac913b785aa 100644
--- a/sflphone-client-gnome/webkit/im/im.js
+++ b/sflphone-client-gnome/webkit/im/im.js
@@ -15,9 +15,9 @@ function linkify(text){
 }
 
 
-function add_message (message)
+function add_message (message, peer_name, peer_number, peer_info)
 {
 	var msgBody = document.getElementById ('messages');
-	msgBody.innerHTML = '<div class="message">' + linkify (message) + '</div>' + msgBody.innerHTML;
+	msgBody.innerHTML = msgBody.innerHTML + '<div class="message"><div class="peername">' + peer_name + '</div><div class="peernumber">' +  peer_number  + '</div>' + linkify (message) + '</div>' ;
 }