diff --git a/common/utils/itti_analyzer/libui/ui_callbacks.c b/common/utils/itti_analyzer/libui/ui_callbacks.c
index 5e1e4e8326e0761056e2fecbbd5687fcc984643e..a94144c2c907602261c20475085b4e41441109c7 100644
--- a/common/utils/itti_analyzer/libui/ui_callbacks.c
+++ b/common/utils/itti_analyzer/libui/ui_callbacks.c
@@ -59,30 +59,32 @@ gboolean ui_callback_on_filters_enabled(GtkToolButton *button, gpointer data)
 
     g_message("Filters enabled event occurred %d", enabled);
 
-    changed = ui_filters_enable(enabled);
+    changed = ui_filters_enable (enabled);
 
     if (changed)
     {
         /* Set the tool tip text */
         if (enabled)
         {
-            gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(button), "Disable messages filtering");
-        } else
+            gtk_tool_item_set_tooltip_text (GTK_TOOL_ITEM(button), "Disable messages filtering");
+        }
+        else
         {
-            gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(button), "Enable messages filtering");
+            gtk_tool_item_set_tooltip_text (GTK_TOOL_ITEM(button), "Enable messages filtering");
         }
-        ui_tree_view_refilter();
+        ui_tree_view_refilter ();
 
         if (ui_main_data.messages_list != NULL)
         {
             GtkTreePath *path_row;
 
             /* Get the currently selected message */
-            gtk_tree_view_get_cursor(GTK_TREE_VIEW(ui_main_data.messages_list), &path_row, NULL);
+            gtk_tree_view_get_cursor (GTK_TREE_VIEW(ui_main_data.messages_list), &path_row, NULL);
             if (path_row != NULL)
             {
                 /* Center the message in the middle of the list if possible */
-                gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(ui_main_data.messages_list), path_row, NULL, TRUE, 0.5, 0.0);
+                gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW(ui_main_data.messages_list), path_row, NULL, TRUE, 0.5,
+                                              0.0);
             }
         }
     }
@@ -132,24 +134,6 @@ gboolean ui_callback_on_select_signal(GtkTreeSelection *selection, GtkTreeModel
     ui_text_view_t *text_view;
     GtkTreeIter iter;
 
-    if (ui_tree_view_last_event)
-    {
-        g_debug("last_event %p %d %d", ui_tree_view_last_event, ui_tree_view_last_event->type, ui_tree_view_last_event->button);
-
-        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 == 3)
-            {
-                /* It was a right mouse click */
-            }
-        }
-
-        ui_tree_view_last_event = NULL;
-    }
-
     g_debug("Message selected %d %p %p %s", path_currently_selected, buffer_current, path, gtk_tree_path_to_string(path));
 
     if (!path_currently_selected)
@@ -158,7 +142,7 @@ gboolean ui_callback_on_select_signal(GtkTreeSelection *selection, GtkTreeModel
 
         g_assert(text_view != NULL);
 
-        if (gtk_tree_model_get_iter(model, &iter, path))
+        if (gtk_tree_model_get_iter (model, &iter, path))
         {
             GValue buffer_store = G_VALUE_INIT;
             gpointer buffer;
@@ -166,17 +150,57 @@ gboolean ui_callback_on_select_signal(GtkTreeSelection *selection, GtkTreeModel
             GValue message_id_store = G_VALUE_INIT;
             guint message_id;
 
-            gtk_tree_model_get_value(model, &iter, COL_BUFFER, &buffer_store);
-            buffer = g_value_get_pointer(&buffer_store);
+            gtk_tree_model_get_value (model, &iter, COL_BUFFER, &buffer_store);
+            buffer = g_value_get_pointer (&buffer_store);
 
             g_debug("  Get iter %p %p", buffer_current, buffer);
 
+            if (ui_tree_view_last_event)
+            {
+                g_debug("last_event %p %d %d", ui_tree_view_last_event, ui_tree_view_last_event->type, ui_tree_view_last_event->button);
+
+                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 == 3)
+                    {
+                        /* It was a right mouse click */
+                        int item;
+
+                        /* Clear event */
+                        ui_tree_view_last_event = NULL;
+
+                        gtk_tree_model_get (model, &iter, COL_MESSAGE_ID, &message_id, -1);
+                        item = ui_filters_search_id (&ui_filters.messages, message_id);
+
+                        if (ui_main_data.menu_filter_messages == NULL)
+                        {
+                            ui_create_filter_menu (&ui_main_data.menu_filter_messages, &ui_filters.messages);
+                        }
+
+                        g_debug("Message selected right click %d %d %s", message_id, item, ui_filters.messages.items[item].name);
+                        gtk_check_menu_item_set_active (
+                                GTK_CHECK_MENU_ITEM(ui_filters.messages.items[item].menu_item),
+                                !gtk_check_menu_item_get_active (
+                                        GTK_CHECK_MENU_ITEM(ui_filters.messages.items[item].menu_item)));
+                        g_debug("Message selected right click new state %d", gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(ui_filters.messages.items[item].menu_item)));
+
+                        return FALSE;
+                    }
+                }
+
+                /* Clear event */
+                ui_tree_view_last_event = NULL;
+            }
+
             if (buffer_current != buffer)
             {
                 buffer_current = buffer;
 
-                gtk_tree_model_get_value(model, &iter, COL_MESSAGE_ID, &message_id_store);
-                message_id = g_value_get_uint(&message_id_store);
+                gtk_tree_model_get_value (model, &iter, COL_MESSAGE_ID, &message_id_store);
+                message_id = g_value_get_uint (&message_id_store);
 
                 /* Clear the view */
                 CHECK_FCT_DO(ui_signal_dissect_clear_view(text_view), return FALSE);
@@ -186,12 +210,12 @@ gboolean ui_callback_on_select_signal(GtkTreeSelection *selection, GtkTreeModel
                     CHECK_FCT_DO(dissect_signal_header((buffer_t*)buffer, ui_signal_set_text, text_view), return FALSE);
                 }
 
-                if ((strcmp(message_id_to_string(message_id), "ERROR_LOG") == 0)
-                        || (strcmp(message_id_to_string(message_id), "WARNING_LOG") == 0)
-                        || (strcmp(message_id_to_string(message_id), "NOTICE_LOG") == 0)
-                        || (strcmp(message_id_to_string(message_id), "INFO_LOG") == 0)
-                        || (strcmp(message_id_to_string(message_id), "DEBUG_LOG") == 0)
-                        || (strcmp(message_id_to_string(message_id), "GENERIC_LOG") == 0))
+                if ((strcmp (message_id_to_string (message_id), "ERROR_LOG") == 0)
+                        || (strcmp (message_id_to_string (message_id), "WARNING_LOG") == 0)
+                        || (strcmp (message_id_to_string (message_id), "NOTICE_LOG") == 0)
+                        || (strcmp (message_id_to_string (message_id), "INFO_LOG") == 0)
+                        || (strcmp (message_id_to_string (message_id), "DEBUG_LOG") == 0)
+                        || (strcmp (message_id_to_string (message_id), "GENERIC_LOG") == 0))
                 {
                     gchar *data;
                     gint data_size;
@@ -199,18 +223,18 @@ gboolean ui_callback_on_select_signal(GtkTreeSelection *selection, GtkTreeModel
 
                     if (ui_main_data.display_message_header)
                     {
-                        ui_signal_set_text(text_view, "\n", 1);
+                        ui_signal_set_text (text_view, "\n", 1);
                     }
 
-                    message_header_type_size = get_message_header_type_size();
-                    data = (gchar *) buffer_at_offset((buffer_t*) buffer, message_header_type_size);
-                    data_size = get_message_size((buffer_t*) buffer);
+                    message_header_type_size = get_message_header_type_size ();
+                    data = (gchar *) buffer_at_offset ((buffer_t*) buffer, message_header_type_size);
+                    data_size = get_message_size ((buffer_t*) buffer);
 
-                    g_debug("    message header type size: %u, data size: %u %p %d", message_header_type_size, data_size,
-                            buffer, ui_main_data.follow_last);
+                    g_debug("    message header type size: %u, data size: %u %p %d", message_header_type_size, data_size, buffer, ui_main_data.follow_last);
 
-                    ui_signal_set_text(text_view, data, data_size);
-                } else
+                    ui_signal_set_text (text_view, data, data_size);
+                }
+                else
                 {
                     g_debug("    dissect message %d %p %d", message_id, buffer, ui_main_data.follow_last);
 
@@ -241,20 +265,19 @@ void ui_signal_add_to_list(gpointer data, gpointer user_data)
 
     signal_buffer = (buffer_t *) data;
 
-    lte_frame = get_lte_frame(signal_buffer);
-    lte_slot = get_lte_slot(signal_buffer);
-    sprintf(lte_time, "%d.%02d", lte_frame, lte_slot);
+    lte_frame = get_lte_frame (signal_buffer);
+    lte_slot = get_lte_slot (signal_buffer);
+    sprintf (lte_time, "%d.%02d", lte_frame, lte_slot);
 
     get_message_id (root, signal_buffer, &signal_buffer->message_id);
     origin_task_id = get_task_id (signal_buffer, origin_task_id_type);
     destination_task_id = get_task_id (signal_buffer, destination_task_id_type);
     instance = get_instance (signal_buffer);
 
-    ui_tree_view_new_signal_ind (signal_buffer->message_number, lte_time,
-                                 signal_buffer->message_id, message_id_to_string (signal_buffer->message_id),
-                                 origin_task_id, task_id_to_string (origin_task_id, origin_task_id_type),
-                                 destination_task_id, task_id_to_string (destination_task_id, destination_task_id_type),
-                                 instance, data);
+    ui_tree_view_new_signal_ind (signal_buffer->message_number, lte_time, signal_buffer->message_id,
+                                 message_id_to_string (signal_buffer->message_id), origin_task_id,
+                                 task_id_to_string (origin_task_id, origin_task_id_type), destination_task_id,
+                                 task_id_to_string (destination_task_id, destination_task_id_type), instance, data);
 
     /* Increment number of messages */
     ui_main_data.nb_message_received++;
@@ -262,7 +285,7 @@ void ui_signal_add_to_list(gpointer data, gpointer user_data)
     if ((ui_main_data.follow_last) && (goto_last))
     {
         /* Advance to the new last signal */
-        ui_tree_view_select_row (ui_tree_view_get_filtered_number() - 1);
+        ui_tree_view_select_row (ui_tree_view_get_filtered_number () - 1);
     }
 }
 
@@ -285,7 +308,7 @@ static gboolean ui_handle_update_signal_list(gint fd, void *data, size_t data_le
     /* Free the message */
     free (signal_list_message);
 
-    ui_gtk_flush_events();
+    ui_gtk_flush_events ();
 
     return TRUE;
 }
@@ -393,7 +416,7 @@ gboolean ui_callback_on_connect(GtkWidget *widget, gpointer data)
 
     g_message("Connect event occurred to %s:%d", ip, port);
 
-    if (strlen(ip) == 0)
+    if (strlen (ip) == 0)
     {
         ui_notification_dialog (GTK_MESSAGE_WARNING, "Connect", "Empty host ip address");
         return FALSE;
@@ -459,7 +482,7 @@ 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_tree_view_select_row (ui_tree_view_get_filtered_number () - 1);
     ui_main_data.follow_last = TRUE;
 
     return TRUE;
@@ -490,7 +513,7 @@ gboolean ui_callback_signal_clear_list(GtkWidget *widget, gpointer data)
 
     if (ui_main_data.text_view != NULL)
     {
-        ui_signal_dissect_clear_view(ui_main_data.text_view);
+        ui_signal_dissect_clear_view (ui_main_data.text_view);
     }
 
     return TRUE;
@@ -498,7 +521,7 @@ gboolean ui_callback_signal_clear_list(GtkWidget *widget, gpointer data)
 
 static void ui_callback_on_menu_items_selected(GtkWidget *widget, gpointer data)
 {
-    gboolean active = data !=  NULL;
+    gboolean active = data != NULL;
 
     if (GTK_IS_CHECK_MENU_ITEM(widget))
     {
@@ -512,7 +535,7 @@ gboolean ui_callback_on_menu_none(GtkWidget *widget, gpointer data)
 
     g_message("ui_callback_on_menu_none occurred %lx %lx)", (long) widget, (long) data);
 
-    gtk_container_foreach(GTK_CONTAINER(menu), ui_callback_on_menu_items_selected, (gpointer) FALSE);
+    gtk_container_foreach (GTK_CONTAINER(menu), ui_callback_on_menu_items_selected, (gpointer) FALSE);
 
     return TRUE;
 }
@@ -523,7 +546,7 @@ gboolean ui_callback_on_menu_all(GtkWidget *widget, gpointer data)
 
     g_message("ui_callback_on_menu_all occurred %lx %lx)", (long) widget, (long) data);
 
-    gtk_container_foreach(GTK_CONTAINER(menu), ui_callback_on_menu_items_selected, (gpointer) TRUE);
+    gtk_container_foreach (GTK_CONTAINER(menu), ui_callback_on_menu_items_selected, (gpointer) TRUE);
 
     return TRUE;
 }
@@ -539,7 +562,7 @@ gboolean ui_callback_on_menu_item_selected(GtkWidget *widget, gpointer data)
         filter_entry->enabled = enabled;
         ui_tree_view_refilter ();
     }
-    g_message("ui_callback_on_menu_item_selected occurred %p %p %s %d (%d messages to display)", widget, data, filter_entry->name, enabled, ui_tree_view_get_filtered_number());
+    g_debug("ui_callback_on_menu_item_selected occurred %p %p %s %d (%d messages to display)", widget, 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 077cb63c006e3b5662ad6634c9663bd6e64d14e9..2ae05035fc8351629fac8495639718dab80406d8 100644
--- a/common/utils/itti_analyzer/libui/ui_filters.c
+++ b/common/utils/itti_analyzer/libui/ui_filters.c
@@ -73,7 +73,7 @@ gboolean ui_filters_enable(gboolean enabled)
     return changed;
 }
 
-static int ui_search_name(ui_filter_t *filter, const char *name)
+static int ui_filters_search_name(ui_filter_t *filter, const char *name)
 {
     int item;
 
@@ -88,7 +88,7 @@ static int ui_search_name(ui_filter_t *filter, const char *name)
     return (item);
 }
 
-static int ui_search_id(ui_filter_t *filter, uint32_t value)
+int ui_filters_search_id(ui_filter_t *filter, uint32_t value)
 {
     int item;
 
@@ -127,7 +127,7 @@ static void ui_filter_set_enabled(uint8_t *enabled, ui_entry_enabled_e entry_ena
 
 static int ui_filter_add(ui_filter_t *filter, uint32_t value, const char *name, ui_entry_enabled_e entry_enabled)
 {
-    int item = ui_search_name (filter, name);
+    int item = ui_filters_search_name (filter, name);
 
     if (item >= filter->allocated)
     {
@@ -190,7 +190,7 @@ static gboolean ui_item_enabled(ui_filter_t *filter, const uint32_t value)
 
     if (value != (uint32_t) ~0)
     {
-        item = ui_search_id (filter, value);
+        item = ui_filters_search_id (filter, value);
 
         if (item < filter->used)
         {
@@ -394,7 +394,7 @@ int ui_filters_file_write(const char *file_name)
     return RC_OK;
 }
 
-static void ui_create_filter_menu(GtkWidget **menu, ui_filter_t *filter)
+void ui_create_filter_menu(GtkWidget **menu, ui_filter_t *filter)
 {
     GtkWidget *menu_items;
     int item;
@@ -463,6 +463,8 @@ static void ui_create_filter_menu(GtkWidget **menu, ui_filter_t *filter)
         g_debug("ui_create_filter_menu %lx %lx", (long) menu_items, (long) data);
         g_signal_connect(G_OBJECT(menu_items), "activate",
                 G_CALLBACK(ui_callback_on_menu_item_selected), data);
+        /* Save the menu_item reference */
+        filter->items[item].menu_item = menu_items;
 
         /* Show the widget */
         gtk_widget_show(menu_items);
diff --git a/common/utils/itti_analyzer/libui/ui_filters.h b/common/utils/itti_analyzer/libui/ui_filters.h
index a4c5ebcef8eb187a3eed7632737da38e45a527d4..411d0411c22082fd641a7f48fe091bd85754e1d0 100644
--- a/common/utils/itti_analyzer/libui/ui_filters.h
+++ b/common/utils/itti_analyzer/libui/ui_filters.h
@@ -20,6 +20,7 @@ typedef struct
     uint32_t id;
     char name[SIGNAL_NAME_LENGTH];
     uint8_t enabled;
+    GtkWidget *menu_item;
 } ui_filter_item_t;
 
 typedef struct
@@ -45,6 +46,8 @@ int ui_init_filters(int reset, int clear_ids);
 
 gboolean ui_filters_enable(gboolean enabled);
 
+int ui_filters_search_id(ui_filter_t *filter, uint32_t value);
+
 void ui_filters_add(ui_filter_e filter, uint32_t value, const char *name, ui_entry_enabled_e entry_enabled);
 
 gboolean ui_filters_message_enabled(const uint32_t message, const uint32_t origin_task, const uint32_t destination_task, const uint32_t instance);
@@ -53,6 +56,8 @@ int ui_filters_read(const char *file_name);
 
 int ui_filters_file_write(const char *file_name);
 
+void ui_create_filter_menu(GtkWidget **menu, ui_filter_t *filter);
+
 void ui_destroy_filter_menus(void);
 
 void ui_destroy_filter_menu(ui_filter_e filter);
diff --git a/common/utils/itti_analyzer/libui/ui_menu_bar.c b/common/utils/itti_analyzer/libui/ui_menu_bar.c
index f291b9cc18f16cbbd2ecd10db6f8f2b7ef981389..8dacf806ae8f454d1a179d5d2b27ac6a00630108 100644
--- a/common/utils/itti_analyzer/libui/ui_menu_bar.c
+++ b/common/utils/itti_analyzer/libui/ui_menu_bar.c
@@ -194,7 +194,7 @@ int ui_toolbar_create(GtkWidget *vbox)
 
     messages_label = gtk_label_new("Messages");
 
-    /* Button to deactivate filtering */
+    /* Button to Enable filtering */
     {
         ui_main_data.filters_enabled = gtk_toggle_tool_button_new();
         gtk_tool_button_set_label (GTK_TOOL_BUTTON(ui_main_data.filters_enabled), "Filters");