diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c
index 1722fba991f650a49183f965fb4bb337d5e8189c..a634703552cc98d1331cca03ef330e7e2301fc72 100644
--- a/sflphone-client-gnome/src/dbus/dbus.c
+++ b/sflphone-client-gnome/src/dbus/dbus.c
@@ -127,6 +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);
 	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 fbbeb50a5905b56a844130e5b714799593a46ff1..69bae4df72b4284155249f4d75b038f34f4f5bb3 100644
--- a/sflphone-client-gnome/src/imwindow.c
+++ b/sflphone-client-gnome/src/imwindow.c
@@ -61,13 +61,14 @@ static gboolean
 on_delete(GtkWidget * widget UNUSED, gpointer data UNUSED)
 {
 	gtk_widget_hide(GTK_WIDGET(im_window_get()));
+	// gtk_widget_destroy (GTK_WIDGET(im_window_get()));
 	return TRUE;
 }
 
 static void
 im_window_init()
 {
-	const char *window_title = "SFLphone VoIP Client";
+	const char *window_title = "SFLphone VoIP Client - Instant Messaging Module";
 	gchar *path;
 	GError *error = NULL;
 	gboolean ret;
diff --git a/sflphone-client-gnome/src/uimanager.c b/sflphone-client-gnome/src/uimanager.c
index ebc44c113d915994756ab1f07127a8ff8e1866ac..1d5a959fee36348184177bbde28e9efc378d8a7f 100644
--- a/sflphone-client-gnome/src/uimanager.c
+++ b/sflphone-client-gnome/src/uimanager.c
@@ -506,7 +506,7 @@ call_hold(void* foo UNUSED)
 }
 
 static void
-call_im(void* foo UNUSED)
+call_im (void* foo UNUSED)
 {
   callable_obj_t * selectedCall = calltab_get_selected_call(current_calls);
 
diff --git a/sflphone-client-gnome/src/widget/imwidget.c b/sflphone-client-gnome/src/widget/imwidget.c
index 856497321fea67d76ff93b50f004ad0ac39f6b92..494806d5370abc7b70d1ad48eb38f968a9961372 100644
--- a/sflphone-client-gnome/src/widget/imwidget.c
+++ b/sflphone-client-gnome/src/widget/imwidget.c
@@ -32,13 +32,19 @@
 
 #define WEBKIT_DIR "file://" DATA_DIR "/webkit/"
 
+static IMWidget *_this;
+
 void
-im_widget_add_message(GtkWidget *widget, const gchar *message)
+im_widget_add_message (GtkWidget *widget, 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);
 
-	webkit_web_view_execute_script(WEBKIT_WEB_VIEW(im->web_view), script);
+	/* Cleanup */
 	g_free(script);
 }
 
@@ -63,6 +69,25 @@ web_view_nav_requested_cb(
 	return TRUE;
 }
 
+static void
+on_SendMessage_click (void) {
+	
+	/* Get the text in the buffer */
+	GtkTextIter start, end;
+	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 (g_strcasecmp (message, "") != 0 )
+	{
+		im_widget_add_message (GTK_WIDGET (_this), message);
+
+		/* Empty the buffer */
+		gtk_text_buffer_delete (GTK_TEXT_BUFFER (buffer), &start, &end);	
+	}
+}
+
+
 static void
 im_widget_class_init(IMWidgetClass *klass)
 {
@@ -71,35 +96,41 @@ im_widget_class_init(IMWidgetClass *klass)
 static void
 im_widget_init(IMWidget *im)
 {
-	im->textarea = gtk_text_view_new();
-	gtk_text_view_set_editable(GTK_TEXT_VIEW(im->textarea), TRUE);
-	GtkWidget *textscrollwin = gtk_scrolled_window_new(NULL, NULL);
-	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textscrollwin),
-		GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
-	gtk_container_add(GTK_CONTAINER(textscrollwin), im->textarea);
 
+	im->textarea = gtk_text_view_new ();
 	im->web_view = webkit_web_view_new();
-	GtkWidget *webscrollwin = gtk_scrolled_window_new(NULL, NULL);
-	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(webscrollwin),
-		GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-	gtk_container_add(GTK_CONTAINER(webscrollwin), im->web_view);
-
-	g_signal_connect(im->web_view, "navigation-policy-decision-requested",
-		G_CALLBACK (web_view_nav_requested_cb), NULL);
+	GtkWidget *textscrollwin = gtk_scrolled_window_new(NULL, NULL);
+	GtkWidget *webscrollwin = gtk_scrolled_window_new (NULL, NULL);
 
+	/* 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(webscrollwin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+	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), textscrollwin, 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);
+	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 (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));
 	im->js_context = webkit_web_frame_get_global_context(im->web_frame);
 	im->js_global = JSContextGetGlobalObject(im->js_context);
-	webkit_web_view_open(WEBKIT_WEB_VIEW(im->web_view), "file://" DATA_DIR "/webkit/im/im.html");
+	webkit_web_view_load_uri (WEBKIT_WEB_VIEW(im->web_view), "file://" DATA_DIR "/webkit/im/im.html");
+
+	_this = im;
 }
 
 GtkWidget *
 im_widget_new()
 {
-	return GTK_WIDGET(g_object_new(IM_WIDGET_TYPE, NULL));
+	return GTK_WIDGET (g_object_new (IM_WIDGET_TYPE, NULL));
 }
 
 GType
diff --git a/sflphone-client-gnome/webkit/im/im.css b/sflphone-client-gnome/webkit/im/im.css
index f738ae58004b7c5f1f4b598b26ae7c71e0a74188..28cf9a6516f81425e50506fae04e4773ec702f01 100644
--- a/sflphone-client-gnome/webkit/im/im.css
+++ b/sflphone-client-gnome/webkit/im/im.css
@@ -1,6 +1,8 @@
 .message {
 	-webkit-border-radius: 5px;
-	background: green;
-	color: white;
+	background: #f2f2f2;
+	color: #777;
 	padding: 1em;
+	-webkit-box-shadow: 2px 2px 5px #000;
+	margin: 20px;
 }
diff --git a/sflphone-client-gnome/webkit/im/im.html b/sflphone-client-gnome/webkit/im/im.html
index 369ce676da776aa62a85d99f3f4b23643a6247e7..0e17ee5cbf5ea8ab2874dfb18c37a37b98864926 100644
--- a/sflphone-client-gnome/webkit/im/im.html
+++ b/sflphone-client-gnome/webkit/im/im.html
@@ -1,11 +1,10 @@
 <html>
 	<head>
 		<script src="im.js"></script>
+		<script src="jquery-1.4.2.min.js"></script>
 		<link rel="stylesheet" type="text/css" href="im.css" />
 	</head>
 	<body>
 		<div id="messages"></div>
-		<div class="message">Hello something</div>
-		<a href="http://www.savoirfairelinux.com/">www.savoirfairelinux.com</a>
 	</body>
 </html>
diff --git a/sflphone-client-gnome/webkit/im/im.js b/sflphone-client-gnome/webkit/im/im.js
index 30e5d6790ab75688c79b6dbdae040baba765af3a..db963f2578585fdf92f5ef66ce6b23135974863b 100644
--- a/sflphone-client-gnome/webkit/im/im.js
+++ b/sflphone-client-gnome/webkit/im/im.js
@@ -1,4 +1,6 @@
-function add_message(message)
+function add_message (message)
 {
-	alert("Message: " + message);
+	var msgBody = document.getElementById ('messages');
+	msgBody.innerHTML = '<div class="message">' + message + '</div>' + msgBody.innerHTML;
 }
+