diff --git a/common/utils/itti_analyzer/libbuffers/socket.c b/common/utils/itti_analyzer/libbuffers/socket.c
index 7748965e5eaed5299dc146363b7069cb8d75fe75..24ef12294644659dbbdecd7f8f6411b777221ee6 100644
--- a/common/utils/itti_analyzer/libbuffers/socket.c
+++ b/common/utils/itti_analyzer/libbuffers/socket.c
@@ -24,8 +24,10 @@
 
 #include "xml_parse.h"
 
-#define SOCKET_NB_CONNECT_RETRY             (5 * 60 * 10) /* About 5 minutes time-out for connecting to peer */
-#define SOCKET_US_BEFORE_CONNECT_RETRY      (100 * 1000)  /* Retry connection after 100 ms */
+/* Retry connection after 100 ms */
+#define SOCKET_US_BEFORE_CONNECT_RETRY      (100 * 1000)
+/* About 10 minutes time-out for connecting to peer */
+#define SOCKET_NB_CONNECT_RETRY             ((10 * 60 * 1000 * 1000) / SOCKET_US_BEFORE_CONNECT_RETRY)
 
 #define SOCKET_NB_SIGNALS_BEFORE_SIGNALLING 10
 #define SOCKET_MS_BEFORE_SIGNALLING         100
@@ -330,6 +332,7 @@ void *socket_thread_fct(void *arg)
                 }
                 free(socket_data->ip_address);
                 free(socket_data);
+                socket_abort_connection = FALSE;
                 /* Quit the thread */
                 pthread_exit(NULL);
             }
diff --git a/common/utils/itti_analyzer/libui/ui_callbacks.c b/common/utils/itti_analyzer/libui/ui_callbacks.c
index 22cccf515b312a1f1e5b56a459eeb46a6eb5fa87..b5c76f8aeb6e3bde9ee9436ea6de598dfa402401 100644
--- a/common/utils/itti_analyzer/libui/ui_callbacks.c
+++ b/common/utils/itti_analyzer/libui/ui_callbacks.c
@@ -33,8 +33,10 @@ static gboolean refresh_message_list =  TRUE;
 static gboolean filters_changed =       FALSE;
 static gboolean operation_running =     FALSE;
 
-static const char *ui_ip;
-static uint16_t ui_port;
+static const char  *ui_ip;
+static uint16_t     ui_port;
+static GtkWidget   *dialogbox_connect;
+static gboolean     ui_auto_reconnect;
 
 gboolean ui_callback_on_open_messages(GtkWidget *widget, gpointer data)
 {
@@ -223,7 +225,11 @@ gboolean ui_callback_on_select_signal(GtkTreeSelection *selection, GtkTreeModel
                 if (ui_tree_view_last_event->type == GDK_BUTTON_PRESS)
                 {
                     /* Callback is due to a button click */
-                    ui_main_data.follow_last = FALSE;
+                    if (ui_tree_view_last_event->button == 1)
+                    {
+                        /* It was a left mouse click */
+                        gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON(ui_main_data.signals_go_to_last_button), FALSE);
+                    }
 
                     if (ui_tree_view_last_event->button == 3)
                     {
@@ -510,21 +516,26 @@ static gboolean ui_handle_update_signal_list(gint fd, void *data, size_t data_le
 
 static gboolean ui_handle_socket_connection_failed(gint fd)
 {
-    ui_notification_dialog (GTK_MESSAGE_WARNING, FALSE, "connect", "Failed to connect to provided host/ip address");
+    gtk_dialog_response(GTK_DIALOG (dialogbox_connect), GTK_RESPONSE_REJECT);
 
-    /* Re-enable connect button */
-    ui_enable_connect_button ();
-    operation_running = FALSE;
     return TRUE;
 }
 
 static gboolean ui_handle_socket_connection_lost(gint fd)
 {
-    ui_notification_dialog (GTK_MESSAGE_WARNING, FALSE, "Connect", "Connection with remote host has been lost");
-
-    /* Re-enable connect button */
-    ui_enable_connect_button ();
-    operation_running = FALSE;
+    if (operation_running)
+    {
+        operation_running = FALSE;
+        if (ui_auto_reconnect)
+        {
+            ui_callback_on_connect (NULL, (gpointer) FALSE);
+        }
+        else
+        {
+            ui_enable_connect_button();
+            ui_set_sensitive_save_message_buttons (TRUE);
+        }
+    }
 
     return TRUE;
 }
@@ -578,7 +589,7 @@ gboolean ui_pipe_callback(gint source, gpointer user_data)
             return ui_handle_socket_connection_lost (source);
 
         case UI_PIPE_XML_DEFINITION:
-            ui_set_title ("%s:%d", ui_ip, ui_port);
+            gtk_dialog_response(GTK_DIALOG (dialogbox_connect), GTK_RESPONSE_OK);
             return ui_handle_socket_xml_definition (source, input_data, input_data_length);
 
         case UI_PIPE_UPDATE_SIGNAL_LIST:
@@ -591,26 +602,68 @@ gboolean ui_pipe_callback(gint source, gpointer user_data)
     return FALSE;
 }
 
+gboolean ui_callback_on_auto_reconnect(GtkWidget *widget, gpointer data)
+{
+    gboolean enabled;
+    gboolean changed = TRUE;
+
+    gboolean toggle = (data != NULL) ? TRUE : FALSE;
+
+    enabled = gtk_toggle_tool_button_get_active (GTK_TOGGLE_TOOL_BUTTON(ui_main_data.auto_reconnect));
+
+    if (toggle)
+    {
+        gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON(ui_main_data.auto_reconnect), !enabled);
+        return TRUE;
+    }
+
+    g_info("Auto reconnect event occurred %d %d ", toggle, enabled);
+
+    ui_auto_reconnect = enabled;
+
+    if (changed)
+    {
+        /* Set the tool tip text */
+        if (enabled)
+        {
+            gtk_tool_item_set_tooltip_text (GTK_TOOL_ITEM(ui_main_data.auto_reconnect), "Disable automatic reconnection");
+        }
+        else
+        {
+            gtk_tool_item_set_tooltip_text (GTK_TOOL_ITEM(ui_main_data.auto_reconnect), "Enable automatic reconnection");
+        }
+    }
+
+    return TRUE;
+}
+
 gboolean ui_callback_on_connect(GtkWidget *widget, gpointer data)
 {
     /* We have to retrieve the ip address and ui_port of remote host */
+    gboolean start = (data != NULL) ? TRUE : FALSE;
     int pipe_fd[2];
 
-    ui_port = atoi (gtk_entry_get_text (GTK_ENTRY(ui_main_data.port_entry)));
-    ui_ip = gtk_entry_get_text (GTK_ENTRY(ui_main_data.ip_entry));
-
-    g_message("Connect event occurred to %s:%d", ui_ip, ui_port);
-
-    if (strlen (ui_ip) == 0)
+    if (start)
     {
-        ui_notification_dialog (GTK_MESSAGE_ERROR, FALSE, "Connect", "Empty host ip address");
-        return FALSE;
+        ui_port = atoi (gtk_entry_get_text (GTK_ENTRY(ui_main_data.port_entry)));
+        ui_ip = gtk_entry_get_text (GTK_ENTRY(ui_main_data.ip_entry));
     }
 
-    if (ui_port == 0)
+    g_message("Connect event occurred to %s:%d %s", ui_ip, ui_port, start ? "START" : "RETRY");
+
+    if (start)
     {
-        ui_notification_dialog (GTK_MESSAGE_ERROR, FALSE, "Connect", "Invalid host ui_port value");
-        return FALSE;
+        if (strlen (ui_ip) == 0)
+        {
+            ui_notification_dialog (GTK_MESSAGE_ERROR, FALSE, "Connect", "Empty host ip address");
+            return FALSE;
+        }
+
+        if (ui_port == 0)
+        {
+            ui_notification_dialog (GTK_MESSAGE_ERROR, FALSE, "Connect", "Invalid host ui_port value");
+            return FALSE;
+        }
     }
 
     if (operation_running == FALSE)
@@ -623,17 +676,51 @@ gboolean ui_callback_on_connect(GtkWidget *widget, gpointer data)
 
         /* Disable the connect button */
         ui_disable_connect_button ();
-        ui_set_sensitive_save_message_buttons (FALSE);
-
-        ui_callback_signal_clear_list (widget, data);
 
         ui_set_title ("connecting to %s:%d ...", ui_ip, ui_port);
-
-        if (socket_connect_to_remote_host (ui_ip, ui_port, pipe_fd[1]) != 0)
         {
-            ui_enable_connect_button ();
-            operation_running = FALSE;
-            return FALSE;
+            const static char *message_formats[] =
+            {
+                "Connecting to %s:%d ...",
+                "Connection lost!\n\n" "Trying to reconnect to %s:%d ..."
+            };
+            gint response;
+
+            if (socket_connect_to_remote_host (ui_ip, ui_port, pipe_fd[1]) != 0)
+            {
+                ui_enable_connect_button ();
+                operation_running = FALSE;
+                return FALSE;
+            }
+
+            dialogbox_connect = gtk_message_dialog_new (GTK_WINDOW(ui_main_data.window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_OTHER,
+                                                GTK_BUTTONS_CANCEL, message_formats[start ? 0 : 1], ui_ip, ui_port);
+            gtk_window_set_title (GTK_WINDOW(dialogbox_connect), "Connect");
+
+            response = gtk_dialog_run (GTK_DIALOG (dialogbox_connect));
+            g_message("Connect dialog response %s (%d)", gtk_get_respose_string(response), response);
+
+            if (response == GTK_RESPONSE_OK)
+            {
+                /* Connection is established */
+                ui_set_sensitive_save_message_buttons (FALSE);
+                ui_callback_signal_clear_list (NULL, NULL);
+                ui_set_title ("%s:%d", ui_ip, ui_port);
+            }
+            else
+            {
+                /* Connection can not be established */
+                if (response == GTK_RESPONSE_REJECT)
+                {
+                    /* Connection retry time-out */
+                    ui_notification_dialog (GTK_MESSAGE_WARNING, FALSE, "Connect", "Failed to connect to provided host/ip address");
+                }
+
+                /* Re-enable connect button */
+                ui_enable_connect_button();
+                operation_running = FALSE;
+            }
+            gtk_widget_destroy (dialogbox_connect);
         }
     }
 
@@ -654,8 +741,8 @@ gboolean ui_callback_on_disconnect(GtkWidget *widget, gpointer data)
 
 gboolean ui_callback_signal_go_to_first(GtkWidget *widget, gpointer data)
 {
+    gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON(ui_main_data.signals_go_to_last_button), FALSE);
     ui_tree_view_select_row (0);
-    ui_main_data.follow_last = FALSE;
 
     return TRUE;
 }
@@ -668,6 +755,7 @@ gboolean ui_callback_signal_go_to(GtkWidget *widget, gpointer data)
 
 gboolean ui_callback_signal_go_to_entry(GtkWidget *widget, gpointer data)
 {
+    gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON(ui_main_data.signals_go_to_last_button), FALSE);
     // gtk_entry_buffer_set_text(GTK_ENTRY(ui_main_data.signals_go_to_entry), "");
     gtk_window_set_focus (GTK_WINDOW(ui_main_data.window), ui_main_data.messages_list);
     return TRUE;
@@ -675,8 +763,28 @@ gboolean ui_callback_signal_go_to_entry(GtkWidget *widget, gpointer data)
 
 gboolean ui_callback_signal_go_to_last(GtkWidget *widget, gpointer data)
 {
-    ui_tree_view_select_row (ui_tree_view_get_filtered_number () - 1);
-    ui_main_data.follow_last = TRUE;
+    gboolean enable = (data != NULL) ? TRUE : FALSE;
+    gboolean enabled;
+
+    if (enable)
+    {
+        gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON(ui_main_data.signals_go_to_last_button), TRUE);
+        return TRUE;
+    }
+
+    enabled = gtk_toggle_tool_button_get_active (GTK_TOGGLE_TOOL_BUTTON(ui_main_data.signals_go_to_last_button));
+
+    g_info("Button signal go to last event occurred %d %d", enable, enabled);
+
+    if (enabled)
+    {
+        ui_main_data.follow_last = TRUE;
+        ui_tree_view_select_row (ui_tree_view_get_filtered_number () - 1);
+    }
+    else
+    {
+        ui_main_data.follow_last = FALSE;
+    }
 
     return TRUE;
 }
diff --git a/common/utils/itti_analyzer/libui/ui_callbacks.h b/common/utils/itti_analyzer/libui/ui_callbacks.h
index 052599f8b7fbeddee04f5e26a7325c065385f498..1eb3b421f6f5489f80247603e3138889199a2dfb 100644
--- a/common/utils/itti_analyzer/libui/ui_callbacks.h
+++ b/common/utils/itti_analyzer/libui/ui_callbacks.h
@@ -28,6 +28,11 @@ gint ui_callback_check_string (const char *string,
                                const gint lenght,
                                const guint message_number);
 
+gboolean ui_pipe_callback(gint source, gpointer user_data);
+
+gboolean ui_callback_on_auto_reconnect(GtkWidget *widget,
+                                       gpointer data);
+
 gboolean ui_callback_on_connect(GtkWidget *widget,
                                 gpointer   data);
 
@@ -72,8 +77,6 @@ gboolean ui_callback_display_brace(GtkWidget *widget,
 gboolean ui_callback_signal_clear_list(GtkWidget *widget,
                                        gpointer   data);
 
-gboolean ui_pipe_callback(gint source, gpointer user_data);
-
 gboolean ui_callback_on_menu_none(GtkWidget *widget,
                                   gpointer data);
 
diff --git a/common/utils/itti_analyzer/libui/ui_main_screen.h b/common/utils/itti_analyzer/libui/ui_main_screen.h
index 35fa1cdeb52439006f9935413ed368ad9d36f0a8..634525ad5b809df2a2f2ec5d65a1cd3e6e4a13dc 100644
--- a/common/utils/itti_analyzer/libui/ui_main_screen.h
+++ b/common/utils/itti_analyzer/libui/ui_main_screen.h
@@ -25,10 +25,11 @@ typedef struct {
 
     GtkToolItem *open_replay_file;
     GtkToolItem *refresh_replay_file;
-    GtkToolItem *stop;
+    GtkToolItem *stop_loading;
     GtkToolItem *save_replay_file;
     GtkToolItem *save_replay_file_filtered;
 
+    GtkToolItem *auto_reconnect;
     GtkToolItem *connect;
     GtkToolItem *disconnect;
 
diff --git a/common/utils/itti_analyzer/libui/ui_menu_bar.c b/common/utils/itti_analyzer/libui/ui_menu_bar.c
index 4753f2bfb5b41e77ade8960b439488052c147798..7aea1a1ae11c1eaf1fcaa884f40f4664e508e17a 100644
--- a/common/utils/itti_analyzer/libui/ui_menu_bar.c
+++ b/common/utils/itti_analyzer/libui/ui_menu_bar.c
@@ -34,6 +34,10 @@ int ui_menu_bar_create(GtkWidget *vbox)
     GtkAccelGroup *accel_group;
     GtkWidget *menu_bar;
 
+    GtkWidget *system_menu;
+    GtkWidget *system;
+    GtkWidget *quit;
+
     GtkWidget *filters_menu;
     GtkWidget *filters;
     GtkWidget *open_filters;
@@ -45,6 +49,7 @@ int ui_menu_bar_create(GtkWidget *vbox)
     GtkWidget *messages;
     GtkWidget *open_messages;
     GtkWidget *reload_messages;
+    GtkWidget *stop_loading;
     GtkWidget *save_messages;
     GtkWidget *save_messages_filtered;
     GtkWidget *goto_first_messages;
@@ -53,9 +58,14 @@ int ui_menu_bar_create(GtkWidget *vbox)
     GtkWidget *display_message_header;
     GtkWidget *display_brace;
 
+    GtkWidget *connect_menu;
+    GtkWidget *connect;
+    GtkWidget *auto_reconnect;
+    GtkWidget *connect_to;
+    GtkWidget *disconnect;
+
     GtkWidget *help_menu;
     GtkWidget *help;
-    GtkWidget *quit;
     GtkWidget *about;
 
     if (!vbox)
@@ -66,6 +76,23 @@ int ui_menu_bar_create(GtkWidget *vbox)
 
     menu_bar = gtk_menu_bar_new();
 
+    /* Create the System sub-menu */
+    {
+        system = gtk_menu_item_new_with_mnemonic ("_System");
+        gtk_menu_shell_append (GTK_MENU_SHELL(menu_bar), system);
+
+        system_menu = gtk_menu_new ();
+        gtk_menu_item_set_submenu (GTK_MENU_ITEM(system), system_menu);
+
+        /* Create the Filters menu items */
+        {
+            quit = gtk_menu_item_new_with_mnemonic ("_Quit");
+            gtk_widget_add_accelerator (quit, "activate", accel_group, GDK_KEY_q, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
+            gtk_menu_shell_append (GTK_MENU_SHELL(system_menu), quit);
+            g_signal_connect(G_OBJECT(quit), "activate", ui_main_window_destroy, NULL);
+        }
+    }
+
     /* Create the Filters sub-menu */
     {
         filters = gtk_menu_item_new_with_mnemonic ("_Filters");
@@ -103,13 +130,6 @@ int ui_menu_bar_create(GtkWidget *vbox)
                                         GTK_ACCEL_VISIBLE);
             gtk_menu_shell_append (GTK_MENU_SHELL(filters_menu), enable_filters);
             g_signal_connect(G_OBJECT(enable_filters), "activate", G_CALLBACK(ui_callback_on_enable_filters), NULL);
-
-            gtk_menu_shell_append (GTK_MENU_SHELL(filters_menu), gtk_menu_item_new ()); // Separator
-
-            quit = gtk_menu_item_new_with_mnemonic ("_Quit");
-            gtk_widget_add_accelerator (quit, "activate", accel_group, GDK_KEY_q, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
-            gtk_menu_shell_append (GTK_MENU_SHELL(filters_menu), quit);
-            g_signal_connect(G_OBJECT(quit), "activate", ui_main_window_destroy, NULL);
         }
     }
 
@@ -138,7 +158,14 @@ int ui_menu_bar_create(GtkWidget *vbox)
             g_signal_connect(G_OBJECT(reload_messages), "activate", G_CALLBACK(ui_callback_on_open_messages),
                              (gpointer) TRUE);
 
-            save_messages = gtk_menu_item_new_with_mnemonic ("_Save messages file (all)");
+            stop_loading = gtk_menu_item_new_with_mnemonic ("S_top loading messages file");
+            gtk_widget_add_accelerator (stop_loading, "activate", accel_group, GDK_KEY_x, GDK_CONTROL_MASK,
+                                        GTK_ACCEL_VISIBLE);
+            gtk_menu_shell_append (GTK_MENU_SHELL(messages_menu), stop_loading);
+            g_signal_connect(G_OBJECT(stop_loading), "activate", G_CALLBACK(ui_progressbar_window_destroy),
+                             NULL);
+
+            save_messages = gtk_menu_item_new_with_mnemonic ("S_ave messages file (all)");
             gtk_widget_add_accelerator (save_messages, "activate", accel_group, GDK_KEY_a, GDK_CONTROL_MASK,
                                         GTK_ACCEL_VISIBLE);
             gtk_menu_shell_append (GTK_MENU_SHELL(messages_menu), save_messages);
@@ -171,7 +198,7 @@ int ui_menu_bar_create(GtkWidget *vbox)
             gtk_widget_add_accelerator (goto_last_messages, "activate", accel_group, GDK_KEY_l, GDK_CONTROL_MASK,
                                         GTK_ACCEL_VISIBLE);
             gtk_menu_shell_append (GTK_MENU_SHELL(messages_menu), goto_last_messages);
-            g_signal_connect(G_OBJECT(goto_last_messages), "activate", G_CALLBACK(ui_callback_signal_go_to_last), NULL);
+            g_signal_connect(G_OBJECT(goto_last_messages), "activate", G_CALLBACK(ui_callback_signal_go_to_last), (gpointer) TRUE);
 
             gtk_menu_shell_append (GTK_MENU_SHELL(messages_menu), gtk_menu_item_new ()); // Separator
 
@@ -190,6 +217,36 @@ int ui_menu_bar_create(GtkWidget *vbox)
         }
     }
 
+    /* Create the Connect sub-menu */
+    {
+        connect = gtk_menu_item_new_with_mnemonic ("_Connect");
+        gtk_menu_shell_append (GTK_MENU_SHELL(menu_bar), connect);
+
+        connect_menu = gtk_menu_new ();
+        gtk_menu_item_set_submenu (GTK_MENU_ITEM(connect), connect_menu);
+
+        /* Create the Help menu item */
+        {
+            auto_reconnect = gtk_menu_item_new_with_mnemonic ("_Automatic reconnection");
+            gtk_widget_add_accelerator (auto_reconnect, "activate", accel_group, GDK_KEY_t, GDK_CONTROL_MASK,
+                                        GTK_ACCEL_VISIBLE);
+            gtk_menu_shell_append (GTK_MENU_SHELL(connect_menu), auto_reconnect);
+            g_signal_connect(G_OBJECT(auto_reconnect), "activate", G_CALLBACK(ui_callback_on_auto_reconnect), (gpointer) TRUE);
+
+            connect_to = gtk_menu_item_new_with_mnemonic ("_Connect");
+            gtk_widget_add_accelerator (connect_to, "activate", accel_group, GDK_KEY_c, GDK_CONTROL_MASK,
+                                        GTK_ACCEL_VISIBLE);
+            gtk_menu_shell_append (GTK_MENU_SHELL(connect_menu), connect_to);
+            g_signal_connect(G_OBJECT(connect_to), "activate", G_CALLBACK(ui_callback_on_connect), (gpointer) TRUE);
+
+            disconnect = gtk_menu_item_new_with_mnemonic ("_Disconnect");
+            gtk_widget_add_accelerator (disconnect, "activate", accel_group, GDK_KEY_u, GDK_CONTROL_MASK,
+                                        GTK_ACCEL_VISIBLE);
+            gtk_menu_shell_append (GTK_MENU_SHELL(connect_menu), disconnect);
+            g_signal_connect(G_OBJECT(disconnect), "activate", G_CALLBACK(ui_callback_on_disconnect), NULL);
+        }
+    }
+
     /* Create the Help sub-menu */
     {
         help = gtk_menu_item_new_with_mnemonic ("_Help");
@@ -282,10 +339,10 @@ int ui_toolbar_create(GtkWidget *vbox)
 
     /* Stop reading messages file */
     {
-        ui_main_data.stop = gtk_tool_button_new_from_stock(GTK_STOCK_STOP);
-        gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.stop), "Stop loading messages file");
+        ui_main_data.stop_loading = gtk_tool_button_new_from_stock(GTK_STOCK_STOP);
+        gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.stop_loading), "Stop loading messages file");
 
-        g_signal_connect(G_OBJECT(ui_main_data.stop), "clicked",
+        g_signal_connect(G_OBJECT(ui_main_data.stop_loading), "clicked",
                         ui_progressbar_window_destroy, NULL);
     }
 
@@ -331,14 +388,24 @@ int ui_toolbar_create(GtkWidget *vbox)
 
     /* Button to go to last signal in list */
     {
-        ui_main_data.signals_go_to_last_button = gtk_tool_button_new_from_stock(GTK_STOCK_GOTO_LAST);
+        ui_main_data.signals_go_to_last_button = gtk_toggle_tool_button_new_from_stock(GTK_STOCK_GOTO_LAST);
         /* Set the tooltip text */
         gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.signals_go_to_last_button), "Goto last signal");
 
         gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.signals_go_to_last_button), FALSE);
 
         g_signal_connect(G_OBJECT(ui_main_data.signals_go_to_last_button), "clicked",
-                        G_CALLBACK(ui_callback_signal_go_to_last), NULL);
+                        G_CALLBACK(ui_callback_signal_go_to_last), (gpointer) FALSE);
+        gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON(ui_main_data.signals_go_to_last_button), TRUE);
+    }
+
+    /* Button to automatically try to reconnect */
+    {
+        ui_main_data.auto_reconnect = gtk_toggle_tool_button_new();
+        gtk_tool_button_set_label (GTK_TOOL_BUTTON(ui_main_data.auto_reconnect), "Auto");
+        g_signal_connect(G_OBJECT(ui_main_data.auto_reconnect), "clicked",
+                         G_CALLBACK(ui_callback_on_auto_reconnect), (gpointer) FALSE);
+        gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON(ui_main_data.auto_reconnect), FALSE);
     }
 
     /* Button to connect to remote */
@@ -348,7 +415,7 @@ int ui_toolbar_create(GtkWidget *vbox)
         gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(ui_main_data.connect), "Connect to remote host");
 
         g_signal_connect(G_OBJECT(ui_main_data.connect), "clicked",
-                        G_CALLBACK(ui_callback_on_connect), NULL);
+                        G_CALLBACK(ui_callback_on_connect), (gpointer) TRUE);
     }
 
     /* Button to disconnect from remote */
@@ -387,8 +454,8 @@ int ui_toolbar_create(GtkWidget *vbox)
     gtk_box_pack_start(GTK_BOX(hbox), messages_label, FALSE, FALSE, LABEL_SPACE);
     gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.open_replay_file), FALSE, FALSE, BUTTON_SPACE);
     gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.refresh_replay_file), FALSE, FALSE, BUTTON_SPACE);
-    gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.stop), FALSE, FALSE, BUTTON_SPACE);
-    gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.stop), FALSE);
+    gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.stop_loading), FALSE, FALSE, BUTTON_SPACE);
+    gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.stop_loading), FALSE);
     gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.save_replay_file), FALSE, FALSE, BUTTON_SPACE);
     gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.save_replay_file_filtered), FALSE, FALSE, BUTTON_SPACE);
     ui_set_sensitive_save_message_buttons(FALSE);
@@ -401,6 +468,7 @@ int ui_toolbar_create(GtkWidget *vbox)
 
     gtk_box_pack_start(GTK_BOX(hbox), gtk_separator_new(GTK_ORIENTATION_VERTICAL), FALSE, FALSE, SEPARATOR_SPACE);
 
+    gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.auto_reconnect), FALSE, FALSE, LABEL_SPACE);
     gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.connect), FALSE, FALSE, BUTTON_SPACE);
     gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ui_main_data.disconnect), FALSE, FALSE, BUTTON_SPACE);
     gtk_box_pack_start(GTK_BOX(hbox), ip_label, FALSE, FALSE, LABEL_SPACE);
diff --git a/common/utils/itti_analyzer/libui/ui_notif_dlg.c b/common/utils/itti_analyzer/libui/ui_notif_dlg.c
index b0accd905d6c6965006e877dcfaac938c80217f5..cf7e6d8c59ecf400fec337380e9d0ec2e879a965 100644
--- a/common/utils/itti_analyzer/libui/ui_notif_dlg.c
+++ b/common/utils/itti_analyzer/libui/ui_notif_dlg.c
@@ -5,9 +5,26 @@
 #include "ui_notif_dlg.h"
 #include "ui_main_screen.h"
 
-static const char * const title_type[] =
+static const char * const gtk_response_strings[] =
+    {"GTK_RESPONSE_NONE", "GTK_RESPONSE_REJECT", "GTK_RESPONSE_ACCEPT", "GTK_RESPONSE_DELETE_EVENT", "GTK_RESPONSE_OK",
+     "GTK_RESPONSE_CANCEL", "GTK_RESPONSE_CLOSE", "GTK_RESPONSE_YES", "GTK_RESPONSE_NO", "GTK_RESPONSE_APPLY", "GTK_RESPONSE_HELP"};
+
+static const char * const title_type_strings[] =
     {"Info", "Warning", "Question", "Error", "Other"};
 
+const char * gtk_get_respose_string (gint response)
+{
+    gint response_index = - response - 1;
+
+    if ((0 <= response_index) && (response_index < (sizeof (gtk_response_strings) / sizeof (gtk_response_strings[0]))))
+    {
+        return (gtk_response_strings[response_index]);
+    }
+    else
+    {
+        return ("Invalid response value!");
+    }
+}
 int ui_notification_dialog(GtkMessageType type, gboolean cancel, const char *title, const char *fmt, ...)
 {
     va_list     args;
@@ -26,7 +43,7 @@ int ui_notification_dialog(GtkMessageType type, gboolean cancel, const char *tit
                                         buffer);
     gtk_dialog_set_default_response (GTK_DIALOG(dialogbox), GTK_RESPONSE_OK);
 
-    snprintf (buffer, sizeof(buffer), "%s: %s", title_type[type], title);
+    snprintf (buffer, sizeof(buffer), "%s: %s", title_type_strings[type], title);
     gtk_window_set_title (GTK_WINDOW(dialogbox), buffer);
 
     if (gtk_dialog_run (GTK_DIALOG (dialogbox)) == GTK_RESPONSE_CANCEL)
diff --git a/common/utils/itti_analyzer/libui/ui_notif_dlg.h b/common/utils/itti_analyzer/libui/ui_notif_dlg.h
index 9379c925ec21e00c2d02af267009a7435c51f6aa..d17371c434db21934ab23a4cf7bbdccd86bd6e1c 100644
--- a/common/utils/itti_analyzer/libui/ui_notif_dlg.h
+++ b/common/utils/itti_analyzer/libui/ui_notif_dlg.h
@@ -3,6 +3,8 @@
 #ifndef UI_NOTIF_DLG_H_
 #define UI_NOTIF_DLG_H_
 
+const char *gtk_get_respose_string (gint response);
+
 extern int ui_notification_dialog(GtkMessageType type, gboolean cancel, const char *title, const char *fmt, ...);
 
 #endif /* UI_NOTIF_DLG_H_ */
diff --git a/common/utils/itti_analyzer/libui/ui_notifications.c b/common/utils/itti_analyzer/libui/ui_notifications.c
index 5b5902c64a8b6094348da2eee654457be0e8f62d..3750b409792aaace1571eef1e3f3cb7411085ce6 100644
--- a/common/utils/itti_analyzer/libui/ui_notifications.c
+++ b/common/utils/itti_analyzer/libui/ui_notifications.c
@@ -127,7 +127,6 @@ int ui_messages_read(char *file_name)
         size = st.st_size;
 
         ui_callback_signal_clear_list (NULL, NULL);
-        ui_main_data.follow_last = TRUE;
 
         /* Initialize the progress bar */
         ui_abort = FALSE;
@@ -585,7 +584,7 @@ int ui_progress_bar_set_fraction(double fraction)
 
             gtk_widget_show_all (ui_main_data.progressbar_window);
 
-            gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.stop), TRUE);
+            gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.stop_loading), TRUE);
         }
 
         gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(ui_main_data.progressbar), fraction);
@@ -608,7 +607,7 @@ int ui_progress_bar_terminate(void)
         gtk_widget_destroy (ui_main_data.progressbar_window);
         ui_main_data.progressbar_window = NULL;
     }
-    gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.stop), FALSE);
+    gtk_widget_set_sensitive(GTK_WIDGET(ui_main_data.stop_loading), FALSE);
 
     return RC_OK;
 }