diff --git a/common/utils/itti_analyzer/libui/ui_callbacks.c b/common/utils/itti_analyzer/libui/ui_callbacks.c
index a1b48865ddbfdd490babfbfd34253704d64f76cc..1660525307f0b718116d309425677fe6fc036840 100644
--- a/common/utils/itti_analyzer/libui/ui_callbacks.c
+++ b/common/utils/itti_analyzer/libui/ui_callbacks.c
@@ -293,7 +293,7 @@ gboolean ui_callback_signal_go_to_last(GtkWidget *widget, GdkEvent *event, gpoin
 {
     GtkTreePath *path;
 
-    ui_tree_view_select_row (ui_main_data.nb_message_received - 1, &path);
+    ui_tree_view_select_row (ui_tree_view_get_filtered_number() - 1, &path);
     ui_main_data.path_last = path;
 
     return TRUE;
@@ -318,9 +318,9 @@ gboolean ui_callback_on_menu_item_selected(GtkWidget *widget, gpointer data)
     if (filter_entry->enabled != enabled)
     {
         filter_entry->enabled = enabled;
-        ui_tree_view_refilter();
+        ui_tree_view_refilter ();
     }
-    // g_debug("ui_callback_on_menu_item_selected occurred %x %x %s %d", (int) widget, (int) data, filter_entry->name, enabled);
+    // g_debug("ui_callback_on_menu_item_selected occurred %x %x %s %d (%d messages to display)", (int) widget, (int) data, filter_entry->name, enabled, ui_tree_view_get_filtered_number());
 
     return TRUE;
 }
diff --git a/common/utils/itti_analyzer/libui/ui_filters.c b/common/utils/itti_analyzer/libui/ui_filters.c
index 6db828c1238d7160dc011a586ac58cf6b167d9b0..cda77d38c535cf08193cfb61748c222c8240191a 100644
--- a/common/utils/itti_analyzer/libui/ui_filters.c
+++ b/common/utils/itti_analyzer/libui/ui_filters.c
@@ -214,6 +214,7 @@ static int xml_parse_filters(xmlDocPtr doc)
     xmlNode *filter_node = NULL;
     xmlNode *cur_node = NULL;
     ui_filter_e filter;
+    guint filters_entries = 0;
     int ret = RC_FAIL;
 
     /* Get the root element node */
@@ -265,7 +266,7 @@ static int xml_parse_filters(xmlDocPtr doc)
                                         cur_node->properties->children->content[0] == '0' ?
                                                 ENTRY_ENABLED_FALSE : ENTRY_ENABLED_TRUE);
 
-                                ret = RC_OK;
+                                filters_entries++;
                                 cur_node = cur_node->next;
                             }
                         }
@@ -278,11 +279,15 @@ static int xml_parse_filters(xmlDocPtr doc)
             ui_tree_view_refilter ();
         }
     }
-
     /* Free the document */
     xmlFreeDoc (doc);
 
-    g_message("Parsed XML filters definition");
+    if (filters_entries > 0)
+    {
+        ret = RC_OK;
+    }
+
+    g_message("Parsed XML filters definition found %d entries (%d messages to display)", filters_entries, ui_tree_view_get_filtered_number());
 
     return ret;
 }
@@ -299,7 +304,6 @@ int ui_filters_read(const char *file_name)
     }
 
     doc = xmlReadFile (file_name, NULL, 0);
-
     if (doc == NULL)
     {
         ui_notification_dialog (GTK_MESSAGE_ERROR, "open filters", "Failed to parse file \"%s\"", file_name);
@@ -307,10 +311,10 @@ int ui_filters_read(const char *file_name)
     }
 
     ret = xml_parse_filters (doc);
-
     if (ret != RC_OK)
     {
-        ui_notification_dialog (GTK_MESSAGE_WARNING, "open filters", "Found no filter definitions in \"%s\"", file_name);
+        ui_notification_dialog (GTK_MESSAGE_WARNING, "open filters", "Found no filter definitions in \"%s\"",
+                                file_name);
         return RC_FAIL;
     }
 
diff --git a/common/utils/itti_analyzer/libui/ui_notifications.c b/common/utils/itti_analyzer/libui/ui_notifications.c
index d78bc5e825772e595ba56ffbd344bdaec8a62efd..992be32d71856668b40d12b791defd23b8bef5a3 100644
--- a/common/utils/itti_analyzer/libui/ui_notifications.c
+++ b/common/utils/itti_analyzer/libui/ui_notifications.c
@@ -15,6 +15,7 @@
 #include "ui_notif_dlg.h"
 #include "ui_callbacks.h"
 #include "ui_filters.h"
+#include "ui_tree_view.h"
 
 #include "xml_parse.h"
 
@@ -163,7 +164,7 @@ int ui_messages_read(char *filename)
             ui_set_sensitive_move_buttons (TRUE);
         }
 
-        g_message("Read %d messages from file \"%s\"\n", read_messages, filename);
+        g_message("Read %d messages (%d to display) from file \"%s\"\n", read_messages, ui_tree_view_get_filtered_number(), filename);
 
         close (source);
     }
diff --git a/common/utils/itti_analyzer/libui/ui_tree_view.c b/common/utils/itti_analyzer/libui/ui_tree_view.c
index 637a48ec28bd33e4efa5497ba2f47b2c9c7e640c..610baee6d483cee70dbd938253aaa16f1b0b53ea 100644
--- a/common/utils/itti_analyzer/libui/ui_tree_view.c
+++ b/common/utils/itti_analyzer/libui/ui_tree_view.c
@@ -18,26 +18,39 @@ typedef struct
 {
     GtkListStore *store;
     GtkTreeModelFilter *filtered;
+    guint filtered_last_msg;
+    guint filtered_msg_number;
 } ui_store_t;
 
 static ui_store_t ui_store;
 
 static gboolean ui_tree_filter_messages(GtkTreeModel *model, GtkTreeIter *iter, ui_store_t *store)
 {
+    char *msg_number;
+    guint number = 0;
     char *message;
     char *origin_task;
     char *destination_task;
-    gboolean enabled;
+    gboolean enabled = FALSE;
 
-    gtk_tree_model_get (model, iter, COL_SIGNAL, &message, COL_FROM_TASK, &origin_task, COL_TO_TASK, &destination_task,
-                        -1);
-    enabled = ui_filters_message_enabled (message, origin_task, destination_task);
-
-    // g_debug("%x %x %s %s %s %d", model, iter, message, origin_task, destination_task, enabled);
+    gtk_tree_model_get (model, iter, COL_MSG_NUM, &msg_number, COL_SIGNAL, &message, COL_FROM_TASK, &origin_task,
+                        COL_TO_TASK, &destination_task, -1);
+    if (msg_number != NULL)
+    {
+        number = atoi (msg_number);
+        enabled = ui_filters_message_enabled (message, origin_task, destination_task);
+
+        if ((enabled) && (ui_store.filtered_last_msg < number))
+        {
+            ui_store.filtered_last_msg = number;
+            ui_store.filtered_msg_number++;
+        }
+        // g_debug("%x %x %d %s %s %s %d %d", (int) model, (int) iter, number, message, origin_task, destination_task, enabled, ui_store.filtered_msg_number);
+    }
 
-    g_free(message);
-    g_free(origin_task);
-    g_free(destination_task);
+    g_free (message);
+    g_free (origin_task);
+    g_free (destination_task);
 
     return enabled;
 }
@@ -115,6 +128,8 @@ void ui_tree_view_destroy_list(GtkWidget *list)
     g_assert(list != NULL);
 
     gtk_list_store_clear(ui_store.store);
+    ui_store.filtered_last_msg = 0;
+    ui_store.filtered_msg_number = 0;
 
     /* Reset number of messages */
     ui_main_data.nb_message_received = 0;
@@ -178,11 +193,8 @@ int ui_tree_view_new_signal_ind(const uint32_t message_number, const char *signa
 void ui_tree_view_select_row(gint row, GtkTreePath **path)
 {
     GtkTreePath *path_row;
-    gchar        indice[10];
-
-    sprintf(indice, "%d", row);
 
-    path_row = gtk_tree_path_new_from_string(indice);
+    path_row = gtk_tree_path_new_from_indices(row, -1);
     /* Select the message in requested row */
     gtk_tree_view_set_cursor(GTK_TREE_VIEW(ui_main_data.signalslist), path_row, NULL, FALSE);
     /* Center the message in the middle of the list if possible */
@@ -196,5 +208,12 @@ void ui_tree_view_select_row(gint row, GtkTreePath **path)
 
 void ui_tree_view_refilter(void)
 {
-    gtk_tree_model_filter_refilter (ui_store.filtered);;
+    ui_store.filtered_last_msg = 0;
+    ui_store.filtered_msg_number = 0;
+    gtk_tree_model_filter_refilter (ui_store.filtered);
+}
+
+guint ui_tree_view_get_filtered_number(void)
+{
+    return ui_store.filtered_msg_number;
 }
diff --git a/common/utils/itti_analyzer/libui/ui_tree_view.h b/common/utils/itti_analyzer/libui/ui_tree_view.h
index b4672ddd77cd403336b87c74f3a577edcb374510..8c5ce9c168f58a84705534a898110f3fce155895 100644
--- a/common/utils/itti_analyzer/libui/ui_tree_view.h
+++ b/common/utils/itti_analyzer/libui/ui_tree_view.h
@@ -22,4 +22,6 @@ void ui_tree_view_select_row(gint row, GtkTreePath **path);
 
 void ui_tree_view_refilter(void);
 
+guint ui_tree_view_get_filtered_number(void);
+
 #endif /* UI_TREE_VIEW_H_ */