[nautilus-actions] Now compile, start and stop



commit 2d6849718ac33256b963d0c83e5d55875992eeed
Author: Pierre Wieser <pwieser trychlos org>
Date:   Wed May 20 19:23:26 2015 +0200

    Now compile, start and stop

 ChangeLog                                          |   13 +
 ChangeLog-2009                                     |    2 +-
 ChangeLog-2011                                     |    2 +-
 ChangeLog-2012                                     |    4 +-
 Makefile.am                                        |    9 +-
 configure.ac                                       |   26 +-
 docs/objects-hierarchy.odg                         |  Bin 17518 -> 37821 bytes
 maintainer/run-autogen.sh                          |    3 +-
 src/core/Makefile.am                               |   14 -
 src/core/na-gtk-utils.c                            |   22 +
 src/core/na-gtk-utils.h                            |    8 +-
 src/core/na-iduplicable.c                          |    8 +-
 src/core/na-io-provider.c                          |    4 +-
 src/core/na-settings.c                             |   11 +-
 src/nact/Makefile.am                               |   57 +-
 src/nact/base-application.c                        |  768 ----
 src/nact/base-application.h                        |  297 --
 src/nact/base-assistant.c                          |   18 +-
 src/nact/base-assistant.h                          |   18 +-
 src/nact/base-dialog.c                             |    5 +-
 src/nact/base-gtk-utils.c                          |  145 +-
 src/nact/base-isession.c                           |  407 --
 src/nact/base-isession.h                           |   78 -
 src/nact/base-iunique.c                            |  257 --
 src/nact/base-iunique.h                            |   78 -
 src/nact/base-marshal.def                          |    2 -
 src/nact/base-window.c                             |  155 +-
 src/nact/base-window.h                             |   80 +-
 src/nact/egg-sm-client-private.h                   |   62 -
 src/nact/egg-sm-client-xsmp.c                      | 1405 -------
 src/nact/egg-sm-client.c                           |  614 ----
 src/nact/egg-sm-client.h                           |  118 -
 src/nact/egg-tree-multi-dnd.c                      |    6 +-
 src/nact/main.c                                    |    4 +-
 src/nact/nact-add-capability-dialog.c              |    8 +-
 src/nact/nact-add-capability-dialog.h              |    4 +-
 src/nact/nact-add-capability.ui                    |  158 +-
 src/nact/nact-add-scheme-dialog.c                  |   21 +-
 src/nact/nact-add-scheme-dialog.h                  |    9 +-
 src/nact/nact-add-scheme.ui                        |  213 +-
 src/nact/nact-application.c                        |  398 ++-
 src/nact/nact-application.h                        |   62 +-
 src/nact/nact-assistant-export.c                   |  144 +-
 src/nact/nact-assistant-export.h                   |    8 +-
 src/nact/nact-assistant-export.ui                  |  602 ++--
 src/nact/nact-assistant-import.c                   |   14 +-
 src/nact/nact-assistant-import.h                   |    8 +-
 src/nact/nact-assistant-import.ui                  |  311 +-
 src/nact/nact-clipboard.c                          |   28 +-
 src/nact/nact-clipboard.h                          |   40 +-
 src/nact/nact-confirm-logout.c                     |   21 +-
 src/nact/nact-confirm-logout.h                     |    9 +-
 src/nact/nact-confirm-logout.ui                    |   99 +
 src/nact/nact-export-ask.c                         |   44 +-
 src/nact/nact-export-ask.h                         |   10 +-
 src/nact/nact-export-ask.ui                        |  148 +
 src/nact/nact-iaction-tab.c                        |  303 +-
 src/nact/nact-ibasenames-tab.c                     |  110 +-
 src/nact/nact-icapabilities-tab.c                  |   89 +-
 src/nact/nact-icommand-tab.c                       |  198 +-
 src/nact/nact-icon-chooser.c                       |    2 +-
 src/nact/nact-ienvironment-tab.c                   |  269 +-
 src/nact/nact-iexecution-tab.c                     |  157 +-
 src/nact/nact-ifolders-tab.c                       |  137 +-
 src/nact/nact-imimetypes-tab.c                     |   79 +-
 src/nact/nact-iproperties-tab.c                    |  133 +-
 src/nact/nact-ischemes-tab.c                       |  103 +-
 src/nact/nact-legend.ui                            |  720 ++++
 src/nact/nact-main-statusbar.c                     |  259 --
 src/nact/nact-main-tab.c                           |   72 +-
 src/nact/nact-main-tab.h                           |    8 +-
 src/nact/nact-main-toolbar.c                       |  115 +-
 src/nact/nact-main-toolbar.h                       |    8 +-
 src/nact/nact-main-window-def.h                    |  120 +
 src/nact/nact-main-window.c                        |  595 ++--
 src/nact/nact-main-window.h                        |  223 +-
 src/nact/nact-main-window.ui                       | 2967 +++++++++++++++
 src/nact/nact-marshal.def                          |    9 -
 src/nact/nact-match-list.c                         |  161 +-
 src/nact/nact-match-list.h                         |   41 +-
 src/nact/{nact-menubar-edit.c => nact-menu-edit.c} |  324 +-
 .../{nact-main-statusbar.h => nact-menu-edit.h}    |   31 +-
 src/nact/{nact-menubar-file.c => nact-menu-file.c} |  222 +-
 .../{nact-main-statusbar.h => nact-menu-file.h}    |   29 +-
 src/nact/nact-menu.c                               |  766 ++++
 src/nact/nact-menu.h                               |  108 +
 src/nact/nact-menubar-help.c                       |   83 -
 src/nact/nact-menubar-maintainer.c                 |  124 -
 src/nact/nact-menubar-priv.h                       |  183 -
 src/nact/nact-menubar-tools.c                      |   78 -
 src/nact/nact-menubar-view.c                       |  175 -
 src/nact/nact-menubar.c                            |  942 -----
 src/nact/nact-menubar.h                            |   98 -
 src/nact/nact-preferences-editor.c                 |   14 +-
 src/nact/nact-preferences-editor.h                 |    8 +-
 src/nact/nact-sort-buttons.c                       |  172 +-
 src/nact/nact-sort-buttons.h                       |   10 +-
 src/nact/nact-statusbar.c                          |  343 ++
 src/nact/nact-statusbar.h                          |   90 +
 src/nact/nact-tree-ieditable.c                     |  183 +-
 src/nact/nact-tree-ieditable.h                     |   43 +-
 src/nact/nact-tree-model-dnd.c                     |   77 +-
 src/nact/nact-tree-model-priv.h                    |   22 +-
 src/nact/nact-tree-model.c                         |  320 +-
 src/nact/nact-tree-model.h                         |   55 +-
 src/nact/nact-tree-view.c                          |  643 ++--
 src/nact/nact-tree-view.h                          |   49 +-
 src/nact/nautilus-actions-config-tool.actions      |  332 ++-
 src/nact/nautilus-actions-config-tool.ui           | 3872 --------------------
 src/plugin-tracker/Makefile.am                     |    1 -
 src/plugin-tracker/na-tracker.c                    |  114 -
 src/plugin-tracker/na-tracker.h                    |   12 -
 src/utils/nautilus-actions-run.c                   |   54 +-
 113 files changed, 8941 insertions(+), 14573 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index e3bd56c..f50cba4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2015-05-20 Pierre Wieser <pwieser trychlos org>
+
+       Lot of changes to make NACT compile with Gtk3, removing deprecated
+       items:
+
+       * NactApplication now directly derives from GtkApplication.
+       * NactMainWindow now directly derives from GtkApplicationWindow.
+       * NactStatusbar is now a class.
+       * NactSortButtons is now a class.
+       * NactMenubar class is replaced with NactMenu helper functions.
+       * NactTreeView now derives from GtkBin.
+       * Most of signals are moved from NactMainWindow to NactTreeView.
+
 2015-02-25 Pierre Wieser <pwieser trychlos org>
 
        * maintainer/run-autogen.sh: defaults to enable nautilus.
diff --git a/ChangeLog-2009 b/ChangeLog-2009
index a9cac9b..f97ced0 100644
--- a/ChangeLog-2009
+++ b/ChangeLog-2009
@@ -1259,7 +1259,7 @@
        New function.
 
        * src/nact/base-window.c:
-       * src/nact/base-window.h (base_window_get_parent): New function.
+       * src/nact/base-window.h (base_window_get_main_window): New function.
 
        * src/nact/nact-assistant-export.c
        (instance_dispose): Clear the tree model.
diff --git a/ChangeLog-2011 b/ChangeLog-2011
index 60cb3f9..bd0b336 100644
--- a/ChangeLog-2011
+++ b/ChangeLog-2011
@@ -1386,7 +1386,7 @@
 
        * src/nact/nact-main-window.c:
        * src/nact/nact-main-window.h: Remove MAIN_WINDOW_SIGNAL_UPDATE_ACTION_SENSITIVITIES
-       which is replaced by NactMenubar internal MENUBAR_SIGNAL_UPDATE_SENSITIVITIES one.
+       which is replaced by NactMenubar internal MAIN_SIGNAL_UPDATE_SENSITIVITIES one.
 
        Termination of the main window is managed in NactMainWindow.
 
diff --git a/ChangeLog-2012 b/ChangeLog-2012
index bc81fed..27fb968 100644
--- a/ChangeLog-2012
+++ b/ChangeLog-2012
@@ -220,7 +220,7 @@
        * src/nact/nact-tree-view.c (class_init, on_selection_changed):
        * src/nact/nact-tree-view.h:
        Get rid of TREE_SIGNAL_SELECTION_CHANGED signal, only using
-       MAIN_SIGNAL_SELECTION_CHANGED one, based on the assertion that the
+       TREE_SIGNAL_SELECTION_CHANGED one, based on the assertion that the
        NactMainWindow will be the first triggered handler.
 
        * src/nact/nact-tree-view.c (get_selected_items): Improve debug message.
@@ -326,7 +326,7 @@
 2012-02-01 Pierre Wieser <pwieser trychlos org>
 
        * src/nact/nact-main-window.c:
-       * src/nact/nact-main-window.h: New MAIN_SIGNAL_CONTEXT_MENU signal.
+       * src/nact/nact-main-window.h: New TREE_SIGNAL_CONTEXT_MENU signal.
 
        * src/nact/nact-marshal.def: New closure definition.
 
diff --git a/Makefile.am b/Makefile.am
index 71e57b3..1256e0c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -28,13 +28,14 @@
 ACLOCAL_AMFLAGS = -I m4
 
 SUBDIRS = \
-       m4                                                                      \
-       icons                                                           \
-       src                                                                     \
-       po                                                                      \
        data                                                            \
        docs                                                            \
+       m4                                                                      \
        maintainer                                                      \
+       icons                                                           \
+       po                                                                      \
+       src                                                                     \
+       test                                                            \
        $(NULL)
 
 # - nautilus-extdir is a foo directory so that make distcheck has a vpath
diff --git a/configure.ac b/configure.ac
index b3291e7..a204f8e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -66,16 +66,10 @@ if test "${PKG_CONFIG}" = "no"; then
        AC_MSG_ERROR([You need to install pkg-config])
 fi
 
-# Oldest supported distribution as of Feb. 2015: Ubuntu 12.04 LTS
-glib_required=2.32.1
-gtk_required=3.4.1
-intltool_required=0.50.2
-
-nautilus_required=3.4.1
+# required versions of tools and libraries
+source ${0%/*}/na_required_versions
 
 # localization
-# note that this same intltool version is also required by autogen.sh
-# and thus set in maintainer/run-autogen.sh script
 IT_PROG_INTLTOOL([${intltool_required}])
 GETTEXT_PACKAGE=${PACKAGE}
 AC_SUBST([GETTEXT_PACKAGE])
@@ -93,7 +87,7 @@ if test "${GLIB_GENMARSHAL}" = "no"; then
        let na_fatal_count+=1
 fi
 # Have and want GConf support ?
-# As of 3.4 release, we are deprecating GConf, disabled it by default.
+# As of 3.4 release, we are deprecating GConf, disabling it by default.
 # We only search for the libraries when explicitely required from 
 # configure. This is a first step deprecation; in a second step, we
 # will emit a warning.
@@ -105,8 +99,8 @@ NA_CHECK_MODULE([GTK3],    [gtk+-3.0],   [${gtk_required}])
 NA_CHECK_MODULE([GLIB],    [glib-2.0],   [${glib_required}])
 NA_CHECK_MODULE([GMODULE], [gmodule-2.0],[${glib_required}])
 NA_CHECK_MODULE([GIO_UNIX],[gio-unix-2.0])
-NA_CHECK_MODULE([GTOP],    [libgtop-2.0],[2.23.1])
-NA_CHECK_MODULE([LIBXML],  [libxml-2.0], [2.6])
+NA_CHECK_MODULE([GTOP],    [libgtop-2.0],[${gtop_required}])
+NA_CHECK_MODULE([LIBXML],  [libxml-2.0], [${xml_required}])
 NA_CHECK_MODULE([UUID],    [uuid])
 
 # target a file manager (nautilus, nemo, ...)
@@ -136,26 +130,28 @@ AC_CONFIG_FILES([
        docs/nact/Makefile
        docs/reference/Makefile
        docs/reference/version.xml
-       m4/Makefile
        icons/Makefile
        icons/16x16/Makefile
        icons/22x22/Makefile
        icons/32x32/Makefile
        icons/48x48/Makefile
        icons/scalable/Makefile
+       m4/Makefile
+       maintainer/Makefile
+       po/Makefile.in
        src/Makefile
        src/api/Makefile
        src/core/Makefile
        src/io-desktop/Makefile
        src/io-gconf/Makefile
        src/io-xml/Makefile
+       src/nact/Makefile
        src/plugin-menu/Makefile
        src/plugin-tracker/Makefile
-       src/nact/Makefile
        src/test/Makefile
        src/utils/Makefile
-       po/Makefile.in
-       maintainer/Makefile
+       test/Makefile
+       test/plugman/Makefile
 ])
 
 # Enable deprecated functions ?
diff --git a/docs/objects-hierarchy.odg b/docs/objects-hierarchy.odg
index b108c75..30a01f9 100644
Binary files a/docs/objects-hierarchy.odg and b/docs/objects-hierarchy.odg differ
diff --git a/maintainer/run-autogen.sh b/maintainer/run-autogen.sh
index d638b2d..256a855 100755
--- a/maintainer/run-autogen.sh
+++ b/maintainer/run-autogen.sh
@@ -73,7 +73,8 @@ for d in $(find ${top_srcdir} -maxdepth 2 -type d -name 'nautilus-actions-*'); d
        rm -fr $d
 done
 
-REQUIRED_INTLTOOL_VERSION=0.35.5
+# tools required version
+source ${top_srcdir}/na_required_versions
 
 # requires gtk-doc package
 # used for Developer Reference Manual generation (devhelp)
diff --git a/src/core/Makefile.am b/src/core/Makefile.am
index ffaea53..0db2753 100644
--- a/src/core/Makefile.am
+++ b/src/core/Makefile.am
@@ -47,11 +47,6 @@ AM_CPPFLAGS += \
        $(NAUTILUS_ACTIONS_CFLAGS)                                                      \
        $(NULL)
 
-BUILT_SOURCES = \
-       na-marshal.c                                                                            \
-       na-marshal.h                                                                            \
-       $(NULL)
-
 libna_core_la_SOURCES = \
        na-about.c                                                                                      \
        na-about.h                                                                                      \
@@ -127,13 +122,6 @@ libna_core_la_SOURCES = \
        $(BUILT_SOURCES)                                                                        \
        $(NULL)
 
-na-marshal.h: na-marshal.def $(GLIB_GENMARSHAL)
-       $(GLIB_GENMARSHAL) $< --header --prefix=na_cclosure_marshal > $@
-
-na-marshal.c: na-marshal.def $(GLIB_GENMARSHAL)
-       echo "#include \"na-marshal.h\"" > $@
-       $(GLIB_GENMARSHAL) $< --body --prefix=na_cclosure_marshal >> $@
-
 libna_core_la_LIBADD = \
        $(NAUTILUS_ACTIONS_LIBS)                                                        \
        $(NULL)
@@ -160,12 +148,10 @@ importmode_data_DATA = \
        $(NULL)
 
 CLEANFILES = \
-       $(BUILT_SOURCES)                                                                        \
        $(NULL)
 
 EXTRA_DIST = \
        $(ui_data_DATA)                                                                         \
        $(exportformat_data_DATA)                                                       \
        $(importmode_data_DATA)                                                         \
-       na-marshal.def                                                                          \
        $(NULL)
diff --git a/src/core/na-gtk-utils.c b/src/core/na-gtk-utils.c
index 7affe64..2a690f9 100644
--- a/src/core/na-gtk-utils.c
+++ b/src/core/na-gtk-utils.c
@@ -121,6 +121,28 @@ na_gtk_utils_dump_children( GtkContainer *container )
 }
 #endif
 
+/*
+ * na_gtk_utils_connect_widget_by_name:
+ * @container: a #GtkContainer, usually the #GtkWindow toplevel.
+ * @name: the name of the searched widget.
+ * @signal: the name of the signal to connect the #callabck to.
+ * @cb: the callback
+ * @user_data:
+ *
+ * Connect the signal to the widget.
+ */
+void
+na_gtk_utils_connect_widget_by_name(
+               GtkContainer *container, const gchar *name,
+               const gchar *signal, GCallback cb, void *user_data )
+{
+       GtkWidget *widget;
+
+       widget = na_gtk_utils_find_widget_by_name( container, name );
+       g_return_if_fail( widget && GTK_IS_WIDGET( widget ));
+       g_signal_connect( G_OBJECT( widget ), signal, cb, user_data );
+}
+
 /**
  * na_gtk_utils_restore_position_window:
  * @toplevel: the #GtkWindow window.
diff --git a/src/core/na-gtk-utils.h b/src/core/na-gtk-utils.h
index ea3925e..cfd7af5 100644
--- a/src/core/na-gtk-utils.h
+++ b/src/core/na-gtk-utils.h
@@ -41,7 +41,13 @@ G_BEGIN_DECLS
 
 /* widget hierarchy
  */
-GtkWidget *na_gtk_utils_find_widget_by_name( GtkContainer *container, const gchar *name );
+GtkWidget *na_gtk_utils_find_widget_by_name   ( GtkContainer *container,
+                                                                                                       const 
gchar *name );
+void       na_gtk_utils_connect_widget_by_name( GtkContainer *container,
+                                                                                                       const 
gchar *name,
+                                                                                                       const 
gchar *signal,
+                                                                                                       
GCallback cb,
+                                                                                                       void 
*user_data );
 
 #ifdef NA_MAINTAINER_MODE
 void       na_gtk_utils_dump_children          ( GtkContainer *container );
diff --git a/src/core/na-iduplicable.c b/src/core/na-iduplicable.c
index b95a6d1..0a9e048 100644
--- a/src/core/na-iduplicable.c
+++ b/src/core/na-iduplicable.c
@@ -31,9 +31,7 @@
 #include <config.h>
 #endif
 
-#include <api/na-iduplicable.h>
-
-#include "na-marshal.h"
+#include "api/na-iduplicable.h"
 
 /* private interface data
  */
@@ -162,7 +160,7 @@ interface_base_init( NAIDuplicableInterface *klass )
                                G_CALLBACK( on_modified_changed_class_handler ),
                                NULL,
                                NULL,
-                               na_cclosure_marshal_VOID__POINTER_BOOLEAN,
+                               NULL,
                                G_TYPE_NONE,
                                2,
                                G_TYPE_POINTER, G_TYPE_BOOLEAN );
@@ -194,7 +192,7 @@ interface_base_init( NAIDuplicableInterface *klass )
                                G_CALLBACK( on_valid_changed_class_handler ),
                                NULL,
                                NULL,
-                               na_cclosure_marshal_VOID__POINTER_BOOLEAN,
+                               NULL,
                                G_TYPE_NONE,
                                2,
                                G_TYPE_POINTER, G_TYPE_BOOLEAN );
diff --git a/src/core/na-io-provider.c b/src/core/na-io-provider.c
index 2eb5070..c3adf94 100644
--- a/src/core/na-io-provider.c
+++ b/src/core/na-io-provider.c
@@ -691,12 +691,12 @@ na_io_provider_get_name( const NAIOProvider *provider )
                                name = NULL;
                                name = NA_IIO_PROVIDER_GET_INTERFACE( provider->private->provider 
)->get_name( provider->private->provider );
                                if( !name ){
-                                       g_warning( "%s: NAIIOProvider %s get_name() interface returns NULL", 
thisfn, provider->private->id );
+                                       g_message( "%s: NAIIOProvider %s get_name() interface returns NULL", 
thisfn, provider->private->id );
                                        name = g_strdup( "" );
                        }
 
                } else {
-                       g_warning( "%s: NAIIOProvider %s doesn't support get_name() interface", thisfn, 
provider->private->id );
+                       g_message( "%s: NAIIOProvider %s is not available or doesn't support get_name() 
interface", thisfn, provider->private->id );
                }
        }
 
diff --git a/src/core/na-settings.c b/src/core/na-settings.c
index 7fc28bd..089c6d4 100644
--- a/src/core/na-settings.c
+++ b/src/core/na-settings.c
@@ -36,13 +36,12 @@
 #include <string.h>
 #include <strings.h>
 
-#include <api/na-boxed.h>
-#include <api/na-data-types.h>
-#include <api/na-core-utils.h>
-#include <api/na-timeout.h>
+#include "api/na-boxed.h"
+#include "api/na-data-types.h"
+#include "api/na-core-utils.h"
+#include "api/na-timeout.h"
 
 #include "na-settings.h"
-#include "na-marshal.h"
 
 #define NA_SETTINGS_TYPE                ( settings_get_type())
 #define NA_SETTINGS( object )           ( G_TYPE_CHECK_INSTANCE_CAST( object, NA_SETTINGS_TYPE, NASettings ))
@@ -318,7 +317,7 @@ class_init( NASettingsClass *klass )
                                G_CALLBACK( on_key_changed_final_handler ),
                                NULL,                                                           /* 
accumulator */
                                NULL,                                                           /* 
accumulator data */
-                               na_cclosure_marshal_VOID__STRING_STRING_POINTER_BOOLEAN,
+                               NULL,
                                G_TYPE_NONE,
                                4,
                                G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_BOOLEAN );
diff --git a/src/nact/Makefile.am b/src/nact/Makefile.am
index cbffec6..941f034 100644
--- a/src/nact/Makefile.am
+++ b/src/nact/Makefile.am
@@ -44,15 +44,9 @@ AM_CPPFLAGS += \
        $(NULL)
 
 BUILT_SOURCES = \
-       base-marshal.c                                                                          \
-       base-marshal.h                                                                          \
-       nact-marshal.c                                                                          \
-       nact-marshal.h                                                                          \
        $(NULL)
 
 nautilus_actions_config_tool_SOURCES = \
-       base-application.c                                                                      \
-       base-application.h                                                                      \
        base-assistant.c                                                                        \
        base-assistant.h                                                                        \
        base-builder.c                                                                          \
@@ -61,19 +55,11 @@ nautilus_actions_config_tool_SOURCES = \
        base-dialog.h                                                                           \
        base-gtk-utils.c                                                                        \
        base-gtk-utils.h                                                                        \
-       base-isession.c                                                                         \
-       base-isession.h                                                                         \
-       base-iunique.c                                                                          \
-       base-iunique.h                                                                          \
        base-keysyms.h                                                                          \
        base-window.c                                                                           \
        base-window.h                                                                           \
        egg-desktop-file.c                                                                      \
        egg-desktop-file.h                                                                      \
-       egg-sm-client.c                                                                         \
-       egg-sm-client.h                                                                         \
-       egg-sm-client-private.h                                                         \
-       egg-sm-client-xsmp.c                                                            \
        egg-tree-multi-dnd.c                                                            \
        egg-tree-multi-dnd.h                                                            \
        main.c                                                                                          \
@@ -99,6 +85,8 @@ nautilus_actions_config_tool_SOURCES = \
        nact-ibasenames-tab.h                                                           \
        nact-icapabilities-tab.c                                                        \
        nact-icapabilities-tab.h                                                        \
+       nact-icommand-tab.c                                                                     \
+       nact-icommand-tab.h                                                                     \
        nact-icon-chooser.c                                                                     \
        nact-icon-chooser.h                                                                     \
        nact-ienvironment-tab.c                                                         \
@@ -107,33 +95,27 @@ nautilus_actions_config_tool_SOURCES = \
        nact-iexecution-tab.h                                                           \
        nact-ifolders-tab.c                                                                     \
        nact-ifolders-tab.h                                                                     \
-       nact-icommand-tab.c                                                                     \
-       nact-icommand-tab.h                                                                     \
        nact-imimetypes-tab.c                                                           \
        nact-imimetypes-tab.h                                                           \
        nact-iproperties-tab.c                                                          \
        nact-iproperties-tab.h                                                          \
        nact-ischemes-tab.c                                                                     \
        nact-ischemes-tab.h                                                                     \
-       nact-main-statusbar.c                                                           \
-       nact-main-statusbar.h                                                           \
        nact-main-tab.c                                                                         \
        nact-main-tab.h                                                                         \
        nact-main-toolbar.c                                                                     \
        nact-main-toolbar.h                                                                     \
        nact-main-window.c                                                                      \
        nact-main-window.h                                                                      \
+       nact-main-window-def.h                                                          \
        nact-match-list.c                                                                       \
        nact-match-list.h                                                                       \
-       nact-menubar.c                                                                          \
-       nact-menubar.h                                                                          \
-       nact-menubar-priv.h                                                                     \
-       nact-menubar-edit.c                                                                     \
-       nact-menubar-file.c                                                                     \
-       nact-menubar-help.c                                                                     \
-       nact-menubar-maintainer.c                                                       \
-       nact-menubar-tools.c                                                            \
-       nact-menubar-view.c                                                                     \
+       nact-menu.c                                                                                     \
+       nact-menu.h                                                                                     \
+       nact-menu-edit.c                                                                        \
+       nact-menu-edit.h                                                                        \
+       nact-menu-file.c                                                                        \
+       nact-menu-file.h                                                                        \
        nact-preferences-editor.c                                                       \
        nact-preferences-editor.h                                                       \
        nact-providers-list.c                                                           \
@@ -142,6 +124,8 @@ nautilus_actions_config_tool_SOURCES = \
        nact-schemes-list.h                                                                     \
        nact-sort-buttons.c                                                                     \
        nact-sort-buttons.h                                                                     \
+       nact-statusbar.c                                                                        \
+       nact-statusbar.h                                                                        \
        nact-tree-ieditable.c                                                           \
        nact-tree-ieditable.h                                                           \
        nact-tree-model.c                                                                       \
@@ -153,20 +137,6 @@ nautilus_actions_config_tool_SOURCES = \
        $(BUILT_SOURCES)                                                                        \
        $(NULL)
 
-base-marshal.h: base-marshal.def $(GLIB_GENMARSHAL)
-       $(GLIB_GENMARSHAL) $< --header --prefix=base_cclosure_marshal > $@
-
-base-marshal.c: base-marshal.def $(GLIB_GENMARSHAL)
-       echo "#include \"base-marshal.h\"" > $@ && \
-       $(GLIB_GENMARSHAL) $< --body --prefix=base_cclosure_marshal >> $@
-
-nact-marshal.h: nact-marshal.def $(GLIB_GENMARSHAL)
-       $(GLIB_GENMARSHAL) $< --header --prefix=nact_cclosure_marshal > $@
-
-nact-marshal.c: nact-marshal.def $(GLIB_GENMARSHAL)
-       echo "#include \"nact-marshal.h\"" > $@ && \
-       $(GLIB_GENMARSHAL) $< --body --prefix=nact_cclosure_marshal >> $@
-
 nautilus_actions_config_tool_LDADD = \
        $(top_builddir)/src/core/libna-core.la                          \
        $(NAUTILUS_ACTIONS_LIBS)                                                        \
@@ -182,9 +152,12 @@ ui_files = \
        nact-add-scheme.ui                                                                      \
        nact-assistant-export.ui                                                        \
        nact-assistant-import.ui                                                        \
+       nact-confirm-logout.ui                                                          \
+       nact-export-ask.ui                                                                      \
        nact-icon-chooser.ui                                                            \
+       nact-legend.ui                                                                          \
+       nact-main-window.ui                                                                     \
        nact-preferences.ui                                                                     \
-       nautilus-actions-config-tool.ui                                         \
        $(NULL)
 
 images_files = \
diff --git a/src/nact/base-assistant.c b/src/nact/base-assistant.c
index 84d618c..a9f9850 100644
--- a/src/nact/base-assistant.c
+++ b/src/nact/base-assistant.c
@@ -34,15 +34,9 @@
 #include <glib.h>
 #include <glib/gi18n.h>
 
-#include "base-application.h"
 #include "base-assistant.h"
 #include "base-keysyms.h"
-
-/* private class data
- */
-struct _BaseAssistantClassPrivate {
-       void *empty;                                            /* so that gcc -pedantic is happy */
-};
+#include "nact-application.h"
 
 /* private instance data
  */
@@ -163,10 +157,6 @@ class_init( BaseAssistantClass *klass )
 
        base_class = BASE_WINDOW_CLASS( klass );
        base_class->run = do_run;
-
-       klass->private = g_new0( BaseAssistantClassPrivate, 1 );
-       klass->apply = NULL;
-       klass->prepare = NULL;
 }
 
 static void
@@ -378,9 +368,9 @@ do_run( BaseWindow *window )
        static const gchar *thisfn = "base_assistant_do_run";
        int code;
 
-       g_return_val_if_fail( BASE_IS_ASSISTANT( window ), BASE_EXIT_CODE_PROGRAM );
+       g_return_val_if_fail( BASE_IS_ASSISTANT( window ), NACT_EXIT_CODE_PROGRAM );
 
-       code = BASE_EXIT_CODE_INIT_WINDOW;
+       code = NACT_EXIT_CODE_WINDOW;
 
        if( !BASE_ASSISTANT( window )->private->dispose_has_run ){
 
@@ -390,7 +380,7 @@ do_run( BaseWindow *window )
 
                gtk_main();
 
-               code = BASE_EXIT_CODE_OK;
+               code = NACT_EXIT_CODE_OK;
        }
 
        return( code );
diff --git a/src/nact/base-assistant.h b/src/nact/base-assistant.h
index 96cc8e3..d46cd35 100644
--- a/src/nact/base-assistant.h
+++ b/src/nact/base-assistant.h
@@ -59,8 +59,6 @@ typedef struct {
 }
        BaseAssistant;
 
-typedef struct _BaseAssistantClassPrivate  BaseAssistantClassPrivate;
-
 /**
  * BaseAssistantClass:
  * @apply:   apply the result of the assistant.
@@ -70,8 +68,7 @@ typedef struct _BaseAssistantClassPrivate  BaseAssistantClassPrivate;
  */
 typedef struct {
        /*< private >*/
-       BaseWindowClass            parent;
-       BaseAssistantClassPrivate *private;
+       BaseWindowClass       parent;
 
        /*< public >*/
        /**
@@ -80,8 +77,12 @@ typedef struct {
         * @assistant: the #GtkAssistant toplevel.
         *
         * Invoked when the user has clicked on the 'Apply' button.
+        *
+        * This is a pure virtual function. The #BaseAssistant class does
+        * not provide any default implementation for it.
         */
-       void ( *apply )  ( BaseAssistant *window, GtkAssistant *assistant );
+       void ( *apply )  ( BaseAssistant *window,
+                                                       GtkAssistant *assistant );
 
        /**
         * prepare:
@@ -89,8 +90,13 @@ typedef struct {
         * @assistant: the #GtkAssistant toplevel.
         *
         * Invoked when the Gtk+ runtime is preparing a page.
+        *
+        * This is a pure virtual function. The #BaseAssistant class does
+        * not provide any default implementation for it.
         */
-       void ( *prepare )( BaseAssistant *window, GtkAssistant *assistant, GtkWidget *page );
+       void ( *prepare )( BaseAssistant *window,
+                                                       GtkAssistant *assistant,
+                                                       GtkWidget *page );
 }
        BaseAssistantClass;
 
diff --git a/src/nact/base-dialog.c b/src/nact/base-dialog.c
index b06e121..72e966d 100644
--- a/src/nact/base-dialog.c
+++ b/src/nact/base-dialog.c
@@ -32,6 +32,7 @@
 #endif
 
 #include "base-dialog.h"
+#include "nact-application.h"
 
 /* private class data
  */
@@ -187,9 +188,9 @@ do_run( BaseWindow *window )
        int code;
        GtkWindow *toplevel;
 
-       g_return_val_if_fail( BASE_IS_DIALOG( window ), BASE_EXIT_CODE_PROGRAM );
+       g_return_val_if_fail( BASE_IS_DIALOG( window ), NACT_EXIT_CODE_PROGRAM );
 
-       code = BASE_EXIT_CODE_INIT_WINDOW;
+       code = NACT_EXIT_CODE_WINDOW;
 
        if( !BASE_DIALOG( window )->private->dispose_has_run ){
 
diff --git a/src/nact/base-gtk-utils.c b/src/nact/base-gtk-utils.c
index 85e3966..e7eaaa6 100644
--- a/src/nact/base-gtk-utils.c
+++ b/src/nact/base-gtk-utils.c
@@ -31,29 +31,16 @@
 #include <config.h>
 #endif
 
+#include <glib/gi18n.h>
 #include <string.h>
 
-#include <core/na-gtk-utils.h>
-#include <core/na-updater.h>
+#include "core/na-gtk-utils.h"
+#include "core/na-updater.h"
 
 #include "base-gtk-utils.h"
 
 #define DEFAULT_WIDTH          22
 
-typedef struct {
-       GtkWidget *table;
-       guint      rows;
-       guint      ir;
-       guint      columns;
-       guint      ic;
-       GtkWidget *grid;
-}
-       TableToGridData;
-
-#if GTK_CHECK_VERSION( 3,0,0 )
-static void table_to_grid_foreach_cb( GtkWidget *widget, TableToGridData *ttg );
-#endif
-
 /**
  * base_gtk_utils_position_window:
  * @window: this #BaseWindow-derived window.
@@ -238,7 +225,7 @@ base_gtk_utils_toggle_reset_initial_state( GtkToggleButton *button )
 
 /**
  * base_gtk_utils_get_pixbuf:
- * @name: the name of the file or an icon.
+ * @name: either the name of a themed icon, or a filename.
  * @widget: the widget on which the image should be rendered.
  * @size: the desired size.
  *
@@ -274,29 +261,18 @@ base_gtk_utils_get_pixbuf( const gchar *name, GtkWidget *widget, GtkIconSize siz
                        }
 
                } else {
-/* gtk_widget_render_icon() is deprecated since Gtk+ 3.0
- * see http://library.gnome.org/devel/gtk/unstable/GtkWidget.html#gtk-widget-render-icon
- * and http://git.gnome.org/browse/gtk+/commit/?id=07eeae15825403037b7df139acf9bfa104d5559d
- */
-#if GTK_CHECK_VERSION( 2, 91, 7 )
-                       pixbuf = gtk_widget_render_icon_pixbuf( widget, name, size );
-#else
-                       pixbuf = gtk_widget_render_icon( widget, name, size, NULL );
-#endif
-                       if( !pixbuf ){
-                               icon_theme = gtk_icon_theme_get_default();
-                               pixbuf = gtk_icon_theme_load_icon(
-                                                               icon_theme, name, width, 
GTK_ICON_LOOKUP_GENERIC_FALLBACK, &error );
-                               if( error ){
-                                       /* it happens that the message "Icon 'xxxx' not present in theme"
-                                        * is generated with a domain of 'gtk-icon-theme-error-quark' and
-                                        * an error code of zero - it seems difficult to just test zero
-                                        * so does not display warning, but just debug
-                                        */
-                                       g_debug( "%s: %s (%s:%d)",
-                                                       thisfn, error->message, g_quark_to_string( 
error->domain ), error->code );
-                                       g_error_free( error );
-                               }
+                       icon_theme = gtk_icon_theme_get_default();
+                       pixbuf = gtk_icon_theme_load_icon(
+                                                       icon_theme, name, width, 
GTK_ICON_LOOKUP_GENERIC_FALLBACK, &error );
+                       if( error ){
+                               /* it happens that the message "Icon 'xxxx' not present in theme"
+                                * is generated with a domain of 'gtk-icon-theme-error-quark' and
+                                * an error code of zero - it seems difficult to just test zero
+                                * so does not display warning, but just debug
+                                */
+                               g_debug( "%s: %s (%s:%d)",
+                                               thisfn, error->message, g_quark_to_string( error->domain ), 
error->code );
+                               g_error_free( error );
                        }
                }
        }
@@ -406,8 +382,8 @@ base_gtk_utils_select_file_with_preview( BaseWindow *window,
                        title,
                        toplevel,
                        GTK_FILE_CHOOSER_ACTION_OPEN,
-                       GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-                       GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+                       _( "_Cancel" ), GTK_RESPONSE_CANCEL,
+                       _( "_OK" ), GTK_RESPONSE_ACCEPT,
                        NULL
                        );
 
@@ -482,8 +458,8 @@ base_gtk_utils_select_dir( BaseWindow *window,
                        title,
                        toplevel,
                        GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
-                       GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-                       GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+                       _( "_Cancel" ), GTK_RESPONSE_CANCEL,
+                       _( "_OK" ), GTK_RESPONSE_ACCEPT,
                        NULL
                        );
 
@@ -516,84 +492,3 @@ base_gtk_utils_select_dir( BaseWindow *window,
 
        gtk_widget_destroy( dialog );
 }
-
-/*
- * base_gtk_utils_table_to_grid:
- * @window: the #BaseWindow container.
- * @table_name: the name of the #GtkTable to be replaced.
- *
- * Dynamically replaces a GtkTable with a GtkGrid, doing its best in order
- * to preserve order and name of all children.
- *
- * The caller has to take care of calling this function for Gtk 3.x, only
- * replacing valuable GtkTables.
- *
- * This function should be called from on_base_initialize_gtk().
- */
-void
-base_gtk_utils_table_to_grid( BaseWindow *window, const gchar *table_name )
-{
-#if GTK_CHECK_VERSION( 3,0,0 )
-       static const gchar *thisfn = "base_gtk_utils_table_to_grid";
-       TableToGridData ttg;
-       GtkWidget *parent;
-       guint col_spacing, row_spacing;
-
-       memset( &ttg, '\0', sizeof( TableToGridData ));
-
-       ttg.table = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( base_window_get_gtk_toplevel( window )), 
table_name );
-       g_return_if_fail( ttg.table );
-       g_return_if_fail( GTK_IS_TABLE( ttg.table ));
-       g_debug( "%s: table=%p (%s)", thisfn, ( void * ) ttg.table, gtk_buildable_get_name( GTK_BUILDABLE( 
ttg.table )));
-
-       parent = gtk_widget_get_parent( ttg.table );
-
-#ifdef NA_MAINTAINER_MODE
-       na_gtk_utils_dump_children( GTK_CONTAINER( parent ));
-#endif
-
-#if !GTK_CHECK_VERSION( 3,4,0 )
-       gtk_table_get_size( GTK_TABLE( ttg.table ), &ttg.rows, &ttg.columns );
-       col_spacing = gtk_table_get_default_col_spacing( GTK_TABLE( ttg.table ));
-       row_spacing = gtk_table_get_default_row_spacing( GTK_TABLE( ttg.table ));
-#else
-       col_spacing = 6;
-       row_spacing = 6;
-#endif
-
-       ttg.grid = gtk_grid_new();
-       gtk_grid_set_column_spacing( GTK_GRID( ttg.grid ), col_spacing );
-       gtk_grid_set_row_spacing( GTK_GRID( ttg.grid ), row_spacing );
-
-       gtk_container_foreach( GTK_CONTAINER( ttg.table ), ( GtkCallback ) table_to_grid_foreach_cb, &ttg );
-       /*gtk_widget_unparent( ttg.table );*/
-
-       if( GTK_IS_ALIGNMENT( parent )){
-               gtk_container_remove( GTK_CONTAINER( parent ), ttg.table );
-               gtk_container_add( GTK_CONTAINER( parent ), ttg.grid );
-       } else {
-               g_warning( "%s: untreated parent of class %s", thisfn, G_OBJECT_TYPE_NAME( parent ));
-       }
-
-#ifdef NA_MAINTAINER_MODE
-       na_gtk_utils_dump_children( GTK_CONTAINER( parent ));
-#endif
-#endif
-}
-
-#if GTK_CHECK_VERSION( 3,0,0 )
-static void
-table_to_grid_foreach_cb( GtkWidget *widget, TableToGridData *ttg )
-{
-       static const gchar *thisfn = "base_gtk_utils_table_to_grid_foreach_cb";
-       guint left, top, x_options;
-
-       g_debug( "%s: widget=%p (%s)", thisfn, ( void * ) widget, gtk_buildable_get_name( GTK_BUILDABLE( 
widget )));
-
-       gtk_container_child_get( GTK_CONTAINER( ttg->table ), widget,
-                       "left-attach", &left, "top-attach", &top, "x-options", &x_options, NULL );
-       gtk_widget_unparent( widget );
-       gtk_grid_attach( GTK_GRID( ttg->grid ), widget, left, top, 1, 1 );
-       gtk_widget_set_hexpand( widget, x_options & GTK_EXPAND );
-}
-#endif
diff --git a/src/nact/base-window.c b/src/nact/base-window.c
index 456bb90..4d0b56b 100644
--- a/src/nact/base-window.c
+++ b/src/nact/base-window.c
@@ -35,13 +35,13 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include <core/na-gtk-utils.h>
+#include "core/na-gtk-utils.h"
 
-#include "base-application.h"
 #include "base-builder.h"
 #include "base-window.h"
 #include "base-gtk-utils.h"
 #include "base-marshal.h"
+#include "nact-application.h"
 
 /* private class data
  */
@@ -52,24 +52,23 @@ struct _BaseWindowClassPrivate {
 /* private instance data
  */
 struct _BaseWindowPrivate {
-       gboolean         dispose_has_run;
+       gboolean              dispose_has_run;
 
        /* properties
         */
-       BaseWindow      *parent;
-       BaseApplication *application;
-       gchar           *xmlui_filename;
-       gboolean         has_own_builder;
-       gchar           *toplevel_name;
-       gchar           *wsp_name;
-       gboolean         destroy_on_dispose;
+       GtkApplicationWindow *main_window;
+       gchar                *xmlui_filename;
+       gboolean              has_own_builder;
+       gchar                *toplevel_name;
+       gchar                *wsp_name;
+       gboolean              destroy_on_dispose;
 
        /* internals
         */
-       GtkWindow       *gtk_toplevel;
-       gboolean         initialized;
-       GList           *signals;
-       BaseBuilder     *builder;
+       GtkWindow            *gtk_toplevel;
+       gboolean              initialized;
+       GList                *signals;
+       BaseBuilder          *builder;
 };
 
 /* instance properties
@@ -77,8 +76,7 @@ struct _BaseWindowPrivate {
 enum {
        BASE_PROP_0,
 
-       BASE_PROP_PARENT_ID,
-       BASE_PROP_APPLICATION_ID,
+       BASE_PROP_MAIN_WINDOW_ID,
        BASE_PROP_XMLUI_FILENAME_ID,
        BASE_PROP_HAS_OWN_BUILDER_ID,
        BASE_PROP_TOPLEVEL_NAME_ID,
@@ -115,7 +113,7 @@ typedef struct {
        RecordedSignal;
 
 static GObjectClass *st_parent_class           = NULL;
-static gint          st_signals[ LAST_SIGNAL ] = { 0 };
+static guint         st_signals[ LAST_SIGNAL ] = { 0 };
 static gboolean      st_debug_signal_connect   = FALSE;
 
 static GType        register_type( void );
@@ -222,16 +220,9 @@ class_init( BaseWindowClass *klass )
                                        "",
                                        G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE 
));
 
-       g_object_class_install_property( object_class, BASE_PROP_APPLICATION_ID,
+       g_object_class_install_property( object_class, BASE_PROP_MAIN_WINDOW_ID,
                        g_param_spec_pointer(
-                                       BASE_PROP_APPLICATION,
-                                       _( "BaseApplication" ),
-                                       _( "A pointer (not a reference) to the BaseApplication instance" ),
-                                       G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE 
));
-
-       g_object_class_install_property( object_class, BASE_PROP_PARENT_ID,
-                       g_param_spec_pointer(
-                                       BASE_PROP_PARENT,
+                                       BASE_PROP_MAIN_WINDOW,
                                        _( "Parent BaseWindow" ),
                                        _( "A pointer (not a reference) to the BaseWindow parent of this 
BaseWindow" ),
                                        G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE 
));
@@ -277,6 +268,11 @@ class_init( BaseWindowClass *klass )
         * method.
         *
         * The default virtual method just does nothing.
+        *
+        * Handler:
+        *   void handler( BaseWindow *window,
+        *                              GtkWindow *toplevel,
+        *                              void      *user_data );
         */
        st_signals[ INITIALIZE_GTK ] =
                g_signal_new_class_handler(
@@ -286,7 +282,7 @@ class_init( BaseWindowClass *klass )
                                G_CALLBACK( on_initialize_gtk_toplevel_class_handler ),
                                NULL,
                                NULL,
-                               g_cclosure_marshal_VOID__POINTER,
+                               NULL,
                                G_TYPE_NONE,
                                1,
                                G_TYPE_POINTER );
@@ -306,6 +302,10 @@ class_init( BaseWindowClass *klass )
         * The default virtual method set transient state of the Gtk toplevel
         * againts its parent, and manages its size and position on the desktop.
         * It so should really be called by the derived class.
+        *
+        * Handler:
+        *   void handler( BaseWindow *window,
+        *                              void      *user_data );
         */
        st_signals[ INITIALIZE_BASE ] =
                g_signal_new_class_handler(
@@ -315,7 +315,7 @@ class_init( BaseWindowClass *klass )
                                G_CALLBACK( on_initialize_base_window_class_handler ),
                                NULL,
                                NULL,
-                               g_cclosure_marshal_VOID__VOID,
+                               NULL,
                                G_TYPE_NONE,
                                0 );
 
@@ -334,6 +334,10 @@ class_init( BaseWindowClass *klass )
         *
         * The default virtual method calls gtk_widget_show_all().
         * It so should really be called by the derived class.
+        *
+        * Handler:
+        *   void handler( BaseWindow *window,
+        *                              void      *user_data );
         */
        st_signals[ SHOW_WIDGETS ] =
                g_signal_new_class_handler(
@@ -343,7 +347,7 @@ class_init( BaseWindowClass *klass )
                                G_CALLBACK( on_show_widgets_class_handler ),
                                NULL,
                                NULL,
-                               g_cclosure_marshal_VOID__VOID,
+                               NULL,
                                G_TYPE_NONE,
                                0 );
 }
@@ -378,12 +382,8 @@ instance_get_property( GObject *object, guint property_id, GValue *value, GParam
        if( !self->private->dispose_has_run ){
 
                switch( property_id ){
-                       case BASE_PROP_PARENT_ID:
-                               g_value_set_pointer( value, self->private->parent );
-                               break;
-
-                       case BASE_PROP_APPLICATION_ID:
-                               g_value_set_pointer( value, self->private->application );
+                       case BASE_PROP_MAIN_WINDOW_ID:
+                               g_value_set_pointer( value, self->private->main_window );
                                break;
 
                        case BASE_PROP_XMLUI_FILENAME_ID:
@@ -424,12 +424,8 @@ instance_set_property( GObject *object, guint property_id, const GValue *value,
        if( !self->private->dispose_has_run ){
 
                switch( property_id ){
-                       case BASE_PROP_PARENT_ID:
-                               self->private->parent = g_value_get_pointer( value );
-                               break;
-
-                       case BASE_PROP_APPLICATION_ID:
-                               self->private->application = g_value_get_pointer( value );
+                       case BASE_PROP_MAIN_WINDOW_ID:
+                               self->private->main_window = g_value_get_pointer( value );
                                break;
 
                        case BASE_PROP_XMLUI_FILENAME_ID:
@@ -487,17 +483,7 @@ instance_constructed( GObject *window )
 
                g_debug( "%s: window=%p (%s)", thisfn, ( void * ) window, G_OBJECT_TYPE_NAME( window ));
 
-               /* at least the BaseWindow parent or the BaseApplication application
-                * must have been provided at instanciation time
-                */
-               if( !priv->application ){
-                       g_return_if_fail( priv->parent );
-                       g_return_if_fail( BASE_IS_WINDOW( priv->parent ));
-
-                       priv->application = priv->parent->private->application;
-               }
-
-               g_return_if_fail( BASE_IS_APPLICATION( priv->application ));
+               g_return_if_fail( priv->main_window && GTK_IS_APPLICATION_WINDOW( priv->main_window ));
        }
 }
 
@@ -538,8 +524,6 @@ instance_dispose( GObject *window )
                }
                g_list_free( priv->signals );
 
-               /* at least the main window should have this property set
-                */
                if( priv->destroy_on_dispose ){
                        gtk_widget_destroy( GTK_WIDGET( priv->gtk_toplevel ));
                }
@@ -851,7 +835,6 @@ do_initialize_base_window( BaseWindow *window )
 {
        static const gchar *thisfn = "base_window_do_initialize_base_window";
        BaseWindowPrivate *priv;
-       GtkWindow *parent_toplevel;
 
        g_return_if_fail( BASE_IS_WINDOW( window ));
 
@@ -861,10 +844,9 @@ do_initialize_base_window( BaseWindow *window )
 
                g_debug( "%s: window=%p (%s)", thisfn, ( void * ) window, G_OBJECT_TYPE_NAME( window ));
 
-               if( priv->parent ){
-                       g_return_if_fail( BASE_IS_WINDOW( priv->parent ));
-                       parent_toplevel = base_window_get_gtk_toplevel( BASE_WINDOW( priv->parent ));
-                       gtk_window_set_transient_for( priv->gtk_toplevel, parent_toplevel );
+               if( priv->main_window ){
+                       g_return_if_fail( GTK_IS_APPLICATION_WINDOW( priv->main_window ));
+                       gtk_window_set_transient_for( priv->gtk_toplevel, GTK_WINDOW( priv->main_window ));
                }
 
                if( priv->wsp_name && strlen( priv->wsp_name )){
@@ -920,15 +902,15 @@ do_show_widgets( BaseWindow *window )
  * implement the run() virtual method.
  *
  * Returns: the exit code as set by the derived class, or:
- * - %BASE_EXIT_CODE_PROGRAM if the window has already been disposed,
- * - %BASE_EXIT_CODE_INIT_WINDOW if the window was not and cannot be
+ * - %NACT_EXIT_CODE_PROGRAM if the window has already been disposed,
+ * - %NACT_EXIT_CODE_WINDOW if the window was not and cannot be
  *   loaded and initialized.
  */
 int
 base_window_run( BaseWindow *window )
 {
        static const gchar *thisfn = "base_window_run";
-       int code = BASE_EXIT_CODE_PROGRAM;
+       int code = NACT_EXIT_CODE_PROGRAM;
 
        g_return_val_if_fail( BASE_IS_WINDOW( window ), code );
 
@@ -936,13 +918,13 @@ base_window_run( BaseWindow *window )
 
                if( !base_window_init( window )){
                        g_debug( "%s: base_window_init() returns False", thisfn );
-                       code = BASE_EXIT_CODE_INIT_WINDOW;
+                       code = NACT_EXIT_CODE_WINDOW;
 
                } else {
-                       g_return_val_if_fail( GTK_IS_WINDOW( window->private->gtk_toplevel ), 
BASE_EXIT_CODE_PROGRAM );
+                       g_return_val_if_fail( GTK_IS_WINDOW( window->private->gtk_toplevel ), 
NACT_EXIT_CODE_PROGRAM );
                        g_debug( "%s: window=%p (%s)", thisfn, ( void * ) window, G_OBJECT_TYPE_NAME( window 
));
 
-                       code = BASE_EXIT_CODE_OK;
+                       code = NACT_EXIT_CODE_OK;
 
                        if( BASE_WINDOW_GET_CLASS( window )->run ){
                                code = BASE_WINDOW_GET_CLASS( window )->run( window );
@@ -976,45 +958,54 @@ base_window_dump_children( const BaseWindow *window )
  * base_window_get_application:
  * @window: this #BaseWindow object.
  *
- * Returns: a pointer on the #BaseApplication object.
+ * Returns: a pointer TO the #GtkApplication -derived object.
  *
  * The returned pointer is owned by the primary allocator of the
- * application ; it should not be g_free() nor g_object_unref() by the
- * caller.
+ * application ; it should not be freed not unreffed by the caller.
  */
-BaseApplication *
+GtkApplication *
 base_window_get_application( const BaseWindow *window )
 {
-       BaseApplication *application = NULL;
+       BaseWindowPrivate *priv;
+       GtkApplicationWindow *main_window;
+       GtkApplication *application = NULL;
 
-       g_return_val_if_fail( BASE_IS_WINDOW( window ), NULL );
+       g_return_val_if_fail( window && BASE_IS_WINDOW( window ), NULL );
 
-       if( !window->private->dispose_has_run ){
+       priv = window->private;
 
-               application = window->private->application;
+       if( !priv->dispose_has_run ){
+
+               main_window = base_window_get_main_window( window );
+               application = gtk_window_get_application( GTK_WINDOW( main_window ));
        }
 
        return( application );
 }
 
 /**
- * base_window_get_parent:
+ * base_window_get_main_window:
  * @window: this #BaseWindow instance..
  *
- * Returns the #BaseWindow parent of @window.
+ * Returns the #GtkApplicationWindow main_window (which should be the
+ * parent of this @window).
  *
- * The returned object is owned by @window, and should not be freed.
+ * The returned object is owned by the application, and should not be
+ * freed nor unreffed by the caller.
  */
-BaseWindow *
-base_window_get_parent( const BaseWindow *window )
+GtkApplicationWindow *
+base_window_get_main_window( const BaseWindow *window )
 {
-       BaseWindow *parent = NULL;
+       BaseWindowPrivate *priv;
+       GtkApplicationWindow *parent = NULL;
 
-       g_return_val_if_fail( BASE_IS_WINDOW( window ), NULL );
+       g_return_val_if_fail( window && BASE_IS_WINDOW( window ), NULL );
 
-       if( !window->private->dispose_has_run ){
+       priv = window->private;
+
+       if( !priv->dispose_has_run ){
 
-               parent = window->private->parent;
+               parent = priv->main_window;
        }
 
        return( parent );
diff --git a/src/nact/base-window.h b/src/nact/base-window.h
index c9b3cc4..f4b1530 100644
--- a/src/nact/base-window.h
+++ b/src/nact/base-window.h
@@ -58,8 +58,6 @@
 
 #include <gtk/gtk.h>
 
-#include "base-application.h"
-
 G_BEGIN_DECLS
 
 #define BASE_TYPE_WINDOW                ( base_window_get_type())
@@ -69,24 +67,24 @@ G_BEGIN_DECLS
 #define BASE_IS_WINDOW_CLASS( klass )   ( G_TYPE_CHECK_CLASS_TYPE(( klass ), BASE_TYPE_WINDOW ))
 #define BASE_WINDOW_GET_CLASS( object ) ( G_TYPE_INSTANCE_GET_CLASS(( object ), BASE_TYPE_WINDOW, 
BaseWindowClass ))
 
+typedef struct _BaseWindowClassPrivate  BaseWindowClassPrivate;
+
 typedef struct _BaseWindowPrivate       BaseWindowPrivate;
 
 typedef struct {
        /*< private >*/
-       GObject            parent;
-       BaseWindowPrivate *private;
+       GObject                 parent;
+       BaseWindowPrivate      *private;
 }
        BaseWindow;
 
-typedef struct _BaseWindowClassPrivate  BaseWindowClassPrivate;
-
 /**
  * BaseWindowClass:
- * @initialize_gtk_toplevel: initialize the toplevel GtkWindow
- * @initialize_base_window:  initialize the BaseWindow
+ * @initialize_gtk_toplevel: initialize the toplevel GtkWindow (once)
+ * @initialize_base_window:  initialize the BaseWindow (each time the
+ *                           window is displayed)
  * @all_widgets_showed:      all widgets have been showed
  * @run:                     run the dialog box loop
- * @is_willing_to_quit:      asks if the window is willing to quit
  *
  * This defines the virtual method a derived class may, should or must implement.
  */
@@ -177,13 +175,12 @@ typedef struct {
  * They should be provided at object instanciation time.
  *
  * Instanciation time requires:
- * - either PARENT or APPLICATION
+ * - MAIN_WINDOW
  * - XMLUI_FILENAME
  * - TOPLEVEL_NAME
  * - HAS_OWN_BUILDER
  */
-#define BASE_PROP_PARENT                                               "base-prop-window-parent"
-#define BASE_PROP_APPLICATION                                  "base-prop-window-application"
+#define BASE_PROP_MAIN_WINDOW                                  "base-prop-window-main-window"
 #define BASE_PROP_XMLUI_FILENAME                               "base-prop-window-xmlui-filename"
 #define BASE_PROP_HAS_OWN_BUILDER                              "base-prop-window-has-own-builder"
 #define BASE_PROP_TOPLEVEL_NAME                                        "base-prop-window-toplevel-name"
@@ -213,30 +210,51 @@ typedef struct {
 #define BASE_SIGNAL_INITIALIZE_WINDOW                  "base-signal-window-initialize-window"
 #define BASE_SIGNAL_SHOW_WIDGETS                               "base-signal-window-show-widgets"
 
-GType            base_window_get_type( void );
+GType                 base_window_get_type                ( void );
 
-gboolean         base_window_init( BaseWindow *window );
-int              base_window_run ( BaseWindow *window );
+gboolean              base_window_init                    ( BaseWindow *window );
+int                   base_window_run                     ( BaseWindow *window );
 
 #ifdef NA_MAINTAINER_MODE
-void             base_window_dump_children           ( const BaseWindow *window );
+void                  base_window_dump_children           ( const BaseWindow *window );
 #endif
 
-BaseApplication *base_window_get_application         ( const BaseWindow *window );
-BaseWindow      *base_window_get_parent              ( const BaseWindow *window );
-GtkWindow       *base_window_get_gtk_toplevel        ( const BaseWindow *window );
-GtkWindow       *base_window_get_gtk_toplevel_by_name( const BaseWindow *window, const gchar *name );
-GtkWidget       *base_window_get_widget              ( const BaseWindow *window, const gchar *name );
-
-void             base_window_display_error_dlg       ( const BaseWindow *parent, const gchar *primary, const 
gchar *secondary );
-gboolean         base_window_display_yesno_dlg       ( const BaseWindow *parent, const gchar *primary, const 
gchar *secondary );
-void             base_window_display_message_dlg     ( const BaseWindow *parent, GSList *message );
-
-gulong           base_window_signal_connect          ( BaseWindow *window, GObject *instance, const gchar 
*signal, GCallback fn );
-gulong           base_window_signal_connect_after    ( BaseWindow *window, GObject *instance, const gchar 
*signal, GCallback fn );
-gulong           base_window_signal_connect_by_name  ( BaseWindow *window, const gchar *name, const gchar 
*signal, GCallback fn );
-gulong           base_window_signal_connect_with_data( BaseWindow *window, GObject *instance, const gchar 
*signal, GCallback fn, void *user_data );
-void             base_window_signal_disconnect       ( BaseWindow *window, gulong handler_id );
+GtkApplication       *base_window_get_application         ( const BaseWindow *window );
+GtkApplicationWindow *base_window_get_main_window         ( const BaseWindow *window );
+GtkWindow            *base_window_get_gtk_toplevel        ( const BaseWindow *window );
+GtkWindow            *base_window_get_gtk_toplevel_by_name( const BaseWindow *window,
+                                                                                                             
                  const gchar *name );
+GtkWidget            *base_window_get_widget              ( const BaseWindow *window,
+                                                                                                             
                  const gchar *name );
+
+void                  base_window_display_error_dlg       ( const BaseWindow *parent,
+                                                                                                             
                  const gchar *primary,
+                                                                                                             
                  const gchar *secondary );
+gboolean              base_window_display_yesno_dlg       ( const BaseWindow *parent,
+                                                                                                             
                  const gchar *primary,
+                                                                                                             
                  const gchar *secondary );
+void                  base_window_display_message_dlg     ( const BaseWindow *parent,
+                                                                                                             
                  GSList *message );
+
+gulong                base_window_signal_connect          ( BaseWindow *window,
+                                                                                                             
                  GObject *instance,
+                                                                                                             
                  const gchar *signal,
+                                                                                                             
                  GCallback fn );
+gulong                base_window_signal_connect_after    ( BaseWindow *window,
+                                                                                                             
                  GObject *instance,
+                                                                                                             
                  const gchar *signal,
+                                                                                                             
                  GCallback fn );
+gulong                base_window_signal_connect_by_name  ( BaseWindow *window,
+                                                                                                             
                  const gchar *name,
+                                                                                                             
                  const gchar *signal,
+                                                                                                             
                  GCallback fn );
+gulong                base_window_signal_connect_with_data( BaseWindow *window,
+                                                                                                             
                  GObject *instance,
+                                                                                                             
                  const gchar *signal,
+                                                                                                             
                  GCallback fn,
+                                                                                                             
                  void *user_data );
+void                  base_window_signal_disconnect       ( BaseWindow *window,
+                                                                                                             
                  gulong handler_id );
 
 G_END_DECLS
 
diff --git a/src/nact/egg-tree-multi-dnd.c b/src/nact/egg-tree-multi-dnd.c
index 7107eb4..ad58a02 100644
--- a/src/nact/egg-tree-multi-dnd.c
+++ b/src/nact/egg-tree-multi-dnd.c
@@ -387,8 +387,10 @@ on_motion_event( GtkWidget *widget, GdkEventMotion *event, EggTreeMultiDragSourc
                        GtkTargetList *target_list = v_get_target_list( drag_source );
                        GdkDragAction actions = v_get_drag_actions( drag_source );
 
-                       context = gtk_drag_begin(
-                                       widget, target_list, actions, priv_data->pressed_button, ( GdkEvent * 
) event );
+                       /*context = gtk_drag_begin(
+                                       widget, target_list, actions, priv_data->pressed_button, ( GdkEvent * 
) event );*/
+                       context = gtk_drag_begin_with_coordinates(
+                                       widget, target_list, actions, priv_data->pressed_button, ( GdkEvent * 
) event, priv_data->x, priv_data->y );
 
                        set_treeview_data( widget, path_list );
 
diff --git a/src/nact/main.c b/src/nact/main.c
index 88d0116..9d60424 100644
--- a/src/nact/main.c
+++ b/src/nact/main.c
@@ -67,9 +67,7 @@ main( int argc, char *argv[] )
        /* create and run the application
         */
        appli = nact_application_new();
-
-       ret = base_application_run_with_args( BASE_APPLICATION( appli ), argc, argv );
-
+       ret = nact_application_run_with_args( appli, argc, argv );
        g_object_unref( appli );
 
        return( ret );
diff --git a/src/nact/nact-add-capability-dialog.c b/src/nact/nact-add-capability-dialog.c
index 3fb774e..6cf8576 100644
--- a/src/nact/nact-add-capability-dialog.c
+++ b/src/nact/nact-add-capability-dialog.c
@@ -289,7 +289,7 @@ instance_finalize( GObject *dialog )
  * be g_free() by the caller, or NULL.
  */
 gchar *
-nact_add_capability_dialog_run( BaseWindow *parent, GSList *capabilities )
+nact_add_capability_dialog_run( NactMainWindow *parent, GSList *capabilities )
 {
        static const gchar *thisfn = "nact_add_capability_dialog_run";
        NactAddCapabilityDialog *dialog;
@@ -300,7 +300,7 @@ nact_add_capability_dialog_run( BaseWindow *parent, GSList *capabilities )
        g_return_val_if_fail( BASE_IS_WINDOW( parent ), NULL );
 
        dialog = g_object_new( NACT_TYPE_ADD_CAPABILITY_DIALOG,
-                                       BASE_PROP_PARENT,         parent,
+                                       BASE_PROP_MAIN_WINDOW,    parent,
                                        BASE_PROP_XMLUI_FILENAME, st_xmlui_filename,
                                        BASE_PROP_TOPLEVEL_NAME,  st_toplevel_name,
                                        BASE_PROP_WSP_NAME,       st_wsp_name,
@@ -366,10 +366,6 @@ on_base_initialize_gtk( NactAddCapabilityDialog *dialog, GtkDialog *toplevel, gp
 
                selection = gtk_tree_view_get_selection( listview );
                gtk_tree_selection_set_mode( selection, GTK_SELECTION_BROWSE );
-
-#if !GTK_CHECK_VERSION( 2,22,0 )
-               gtk_dialog_set_has_separator( toplevel, FALSE );
-#endif
        }
 }
 
diff --git a/src/nact/nact-add-capability-dialog.h b/src/nact/nact-add-capability-dialog.h
index a771e3c..db5c36a 100644
--- a/src/nact/nact-add-capability-dialog.h
+++ b/src/nact/nact-add-capability-dialog.h
@@ -40,6 +40,7 @@
  */
 
 #include "base-dialog.h"
+#include "nact-main-window-def.h"
 
 G_BEGIN_DECLS
 
@@ -70,7 +71,8 @@ typedef struct {
 
 GType  nact_add_capability_dialog_get_type( void );
 
-gchar *nact_add_capability_dialog_run( BaseWindow *parent, GSList *capabilities );
+gchar *nact_add_capability_dialog_run     ( NactMainWindow *parent,
+                                                                                                       
GSList *capabilities );
 
 G_END_DECLS
 
diff --git a/src/nact/nact-add-capability.ui b/src/nact/nact-add-capability.ui
index 7e231a5..e1a5993 100644
--- a/src/nact/nact-add-capability.ui
+++ b/src/nact/nact-add-capability.ui
@@ -1,83 +1,105 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.16.1 -->
 <interface>
-  <!-- interface-requires gtk+ 2.20 -->
-  <!-- interface-naming-policy toplevel-contextual -->
+  <requires lib="gtk+" version="3.4"/>
   <object class="GtkDialog" id="AddCapabilityDialog">
+    <property name="can_focus">False</property>
     <property name="border_width">5</property>
     <property name="title" translatable="yes">Adding a new capability</property>
     <property name="modal">True</property>
     <property name="type_hint">dialog</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox1">
+      <object class="GtkBox" id="dialog-vbox1">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="CancelButton">
+                <property name="label">gtk-cancel</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="OKButton">
+                <property name="label">gtk-ok</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
         <child>
           <object class="GtkFrame" id="frame1">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="border_width">6</property>
             <property name="label_xalign">0</property>
             <property name="shadow_type">in</property>
             <child>
               <object class="GtkAlignment" id="alignment1">
                 <property name="visible">True</property>
-                <property name="top_padding">6</property>
-                <property name="bottom_padding">6</property>
-                <property name="left_padding">12</property>
-                <property name="right_padding">6</property>
+                <property name="can_focus">False</property>
+                <property name="top_padding">4</property>
+                <property name="bottom_padding">4</property>
+                <property name="left_padding">8</property>
+                <property name="right_padding">4</property>
                 <child>
-                  <object class="GtkVBox" id="vbox1">
+                  <object class="GtkGrid" id="grid1">
                     <property name="visible">True</property>
-                    <property name="orientation">vertical</property>
-                    <property name="spacing">6</property>
+                    <property name="can_focus">False</property>
                     <child>
-                      <object class="GtkHBox" id="hbox1">
+                      <object class="GtkScrolledWindow" id="scrolledwindow1">
                         <property name="visible">True</property>
-                        <property name="spacing">6</property>
+                        <property name="can_focus">True</property>
+                        <property name="shadow_type">in</property>
                         <child>
-                          <object class="GtkScrolledWindow" id="scrolledwindow1">
+                          <object class="GtkTreeView" id="CapabilitiesTreeView">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="hscrollbar_policy">automatic</property>
-                            <property name="vscrollbar_policy">automatic</property>
-                            <property name="shadow_type">in</property>
-                            <child>
-                              <object class="GtkTreeView" id="CapabilitiesTreeView">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="enable_search">False</property>
-                                <property name="show_expanders">False</property>
-                              </object>
+                            <property name="hexpand">True</property>
+                            <property name="vexpand">True</property>
+                            <property name="enable_search">False</property>
+                            <property name="show_expanders">False</property>
+                            <child internal-child="selection">
+                              <object class="GtkTreeSelection" id="treeview-selection"/>
                             </child>
                           </object>
-                          <packing>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkVBox" id="vbox2">
-                            <property name="visible">True</property>
-                            <property name="orientation">vertical</property>
-                            <child>
-                              <placeholder/>
-                            </child>
-                            <child>
-                              <placeholder/>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="position">1</property>
-                          </packing>
                         </child>
                       </object>
                       <packing>
-                        <property name="position">0</property>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">0</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
                       </packing>
                     </child>
-                    <child>
-                      <placeholder/>
-                    </child>
                   </object>
                 </child>
               </object>
@@ -85,6 +107,7 @@
             <child type="label">
               <object class="GtkLabel" id="label1">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="xpad">5</property>
                 <property name="label" translatable="yes">&lt;b&gt;Managed capabilities&lt;/b&gt;</property>
                 <property name="use_markup">True</property>
@@ -92,46 +115,9 @@
             </child>
           </object>
           <packing>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area1">
-            <property name="visible">True</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="CancelButton">
-                <property name="label">gtk-cancel</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="OKButton">
-                <property name="label">gtk-ok</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
             <property name="expand">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
           </packing>
         </child>
       </object>
diff --git a/src/nact/nact-add-scheme-dialog.c b/src/nact/nact-add-scheme-dialog.c
index b674040..ead4bbc 100644
--- a/src/nact/nact-add-scheme-dialog.c
+++ b/src/nact/nact-add-scheme-dialog.c
@@ -33,18 +33,13 @@
 
 #include <gdk/gdkkeysyms.h>
 
-#include <api/na-core-utils.h>
+#include "api/na-core-utils.h"
 
-#include <core/na-settings.h>
+#include "core/na-settings.h"
 
 #include "nact-schemes-list.h"
 #include "nact-add-scheme-dialog.h"
-
-/* private class data
- */
-struct _NactAddSchemeDialogClassPrivate {
-       void *empty;                                            /* so that gcc -pedantic is happy */
-};
+#include "nact-main-window.h"
 
 /* private instance data
  */
@@ -131,8 +126,6 @@ class_init( NactAddSchemeDialogClass *klass )
        object_class->dispose = instance_dispose;
        object_class->finalize = instance_finalize;
 
-       klass->private = g_new0( NactAddSchemeDialogClassPrivate, 1 );
-
        dialog_class = BASE_DIALOG_CLASS( klass );
        dialog_class->ok = on_dialog_ok;
 }
@@ -261,7 +254,7 @@ instance_finalize( GObject *dialog )
  * be g_free() by the caller, or NULL.
  */
 gchar *
-nact_add_scheme_dialog_run( BaseWindow *parent, GSList *schemes )
+nact_add_scheme_dialog_run( NactMainWindow *parent, GSList *schemes )
 {
        static const gchar *thisfn = "nact_add_scheme_dialog_run";
        NactAddSchemeDialog *dialog;
@@ -272,7 +265,7 @@ nact_add_scheme_dialog_run( BaseWindow *parent, GSList *schemes )
        g_return_val_if_fail( BASE_IS_WINDOW( parent ), NULL );
 
        dialog = g_object_new( NACT_TYPE_ADD_SCHEME_DIALOG,
-                       BASE_PROP_PARENT,         parent,
+                       BASE_PROP_MAIN_WINDOW,    parent,
                        BASE_PROP_XMLUI_FILENAME, st_xmlui_filename,
                        BASE_PROP_TOPLEVEL_NAME,  st_toplevel_name,
                        BASE_PROP_WSP_NAME,       st_wsp_name,
@@ -305,10 +298,6 @@ on_base_initialize_gtk( NactAddSchemeDialog *dialog, GtkDialog *toplevel, gpoint
 
                listview = GTK_TREE_VIEW( base_window_get_widget( BASE_WINDOW( dialog ), "SchemesTreeView" ));
                nact_schemes_list_create_model( listview, SCHEMES_LIST_FOR_ADD_FROM_DEFAULTS );
-
-#if !GTK_CHECK_VERSION( 2,22,0 )
-               gtk_dialog_set_has_separator( toplevel, FALSE );
-#endif
        }
 }
 
diff --git a/src/nact/nact-add-scheme-dialog.h b/src/nact/nact-add-scheme-dialog.h
index a197b4c..1967813 100644
--- a/src/nact/nact-add-scheme-dialog.h
+++ b/src/nact/nact-add-scheme-dialog.h
@@ -40,6 +40,7 @@
  */
 
 #include "base-dialog.h"
+#include "nact-main-window-def.h"
 
 G_BEGIN_DECLS
 
@@ -59,18 +60,16 @@ typedef struct {
 }
        NactAddSchemeDialog;
 
-typedef struct _NactAddSchemeDialogClassPrivate    NactAddSchemeDialogClassPrivate;
-
 typedef struct {
        /*< private >*/
-       BaseDialogClass                  parent;
-       NactAddSchemeDialogClassPrivate *private;
+       BaseDialogClass             parent;
 }
        NactAddSchemeDialogClass;
 
 GType  nact_add_scheme_dialog_get_type( void );
 
-gchar *nact_add_scheme_dialog_run( BaseWindow *parent, GSList *schemes );
+gchar *nact_add_scheme_dialog_run     ( NactMainWindow *parent,
+                                                                                               GSList 
*schemes );
 
 G_END_DECLS
 
diff --git a/src/nact/nact-add-scheme.ui b/src/nact/nact-add-scheme.ui
index 320d497..93be69f 100644
--- a/src/nact/nact-add-scheme.ui
+++ b/src/nact/nact-add-scheme.ui
@@ -1,111 +1,162 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.16.1 -->
 <interface>
-  <!-- interface-requires gtk+ 2.20 -->
-  <!-- interface-naming-policy toplevel-contextual -->
+  <requires lib="gtk+" version="3.4"/>
   <object class="GtkDialog" id="AddSchemeDialog">
+    <property name="can_focus">False</property>
     <property name="border_width">5</property>
     <property name="title" translatable="yes">Adding a new scheme</property>
     <property name="modal">True</property>
     <property name="type_hint">dialog</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox1">
+      <object class="GtkBox" id="dialog-vbox1">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="CancelButton">
+                <property name="label">gtk-cancel</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="OKButton">
+                <property name="label">gtk-ok</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
         <child>
           <object class="GtkFrame" id="frame1">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="border_width">6</property>
             <property name="label_xalign">0</property>
             <property name="shadow_type">in</property>
             <child>
               <object class="GtkAlignment" id="alignment1">
                 <property name="visible">True</property>
-                <property name="top_padding">6</property>
-                <property name="bottom_padding">6</property>
-                <property name="left_padding">12</property>
-                <property name="right_padding">6</property>
+                <property name="can_focus">False</property>
+                <property name="top_padding">4</property>
+                <property name="bottom_padding">4</property>
+                <property name="left_padding">8</property>
+                <property name="right_padding">4</property>
                 <child>
-                  <object class="GtkVBox" id="vbox1">
+                  <object class="GtkGrid" id="grid1">
                     <property name="visible">True</property>
-                    <property name="orientation">vertical</property>
-                    <property name="spacing">6</property>
+                    <property name="can_focus">False</property>
+                    <property name="column_spacing">3</property>
+                    <child>
+                      <object class="GtkScrolledWindow" id="scrolledwindow1">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="shadow_type">in</property>
+                        <child>
+                          <object class="GtkTreeView" id="SchemesTreeView">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="hexpand">True</property>
+                            <property name="vexpand">True</property>
+                            <property name="enable_search">False</property>
+                            <property name="show_expanders">False</property>
+                            <child internal-child="selection">
+                              <object class="GtkTreeSelection" id="treeview-selection"/>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">0</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
                     <child>
-                      <object class="GtkHBox" id="hbox1">
+                      <object class="GtkGrid" id="grid2">
                         <property name="visible">True</property>
-                        <property name="spacing">6</property>
+                        <property name="can_focus">False</property>
+                        <property name="row_spacing">2</property>
                         <child>
-                          <object class="GtkScrolledWindow" id="scrolledwindow1">
+                          <object class="GtkButton" id="AddSchemeButton">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="hscrollbar_policy">automatic</property>
-                            <property name="vscrollbar_policy">automatic</property>
-                            <property name="shadow_type">in</property>
+                            <property name="receives_default">True</property>
                             <child>
-                              <object class="GtkTreeView" id="SchemesTreeView">
+                              <object class="GtkImage" id="image1">
                                 <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="enable_search">False</property>
-                                <property name="show_expanders">False</property>
+                                <property name="can_focus">False</property>
+                                <property name="stock">gtk-add</property>
                               </object>
                             </child>
                           </object>
                           <packing>
-                            <property name="position">0</property>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">0</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkVBox" id="vbox2">
+                          <object class="GtkButton" id="RemoveSchemeButton">
                             <property name="visible">True</property>
-                            <property name="orientation">vertical</property>
-                            <child>
-                              <object class="GtkButton" id="AddSchemeButton">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="receives_default">True</property>
-                                <child>
-                                  <object class="GtkImage" id="image1">
-                                    <property name="visible">True</property>
-                                    <property name="stock">gtk-add</property>
-                                  </object>
-                                </child>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">True</property>
                             <child>
-                              <object class="GtkButton" id="RemoveSchemeButton">
+                              <object class="GtkImage" id="image2">
                                 <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="receives_default">True</property>
-                                <child>
-                                  <object class="GtkImage" id="image2">
-                                    <property name="visible">True</property>
-                                    <property name="stock">gtk-remove</property>
-                                  </object>
-                                </child>
+                                <property name="can_focus">False</property>
+                                <property name="stock">gtk-remove</property>
                               </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="position">1</property>
-                              </packing>
                             </child>
                           </object>
                           <packing>
-                            <property name="expand">False</property>
-                            <property name="position">1</property>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">1</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
                           </packing>
                         </child>
+                        <child>
+                          <placeholder/>
+                        </child>
                       </object>
                       <packing>
-                        <property name="position">0</property>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">0</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
                       </packing>
                     </child>
-                    <child>
-                      <placeholder/>
-                    </child>
                   </object>
                 </child>
               </object>
@@ -113,6 +164,7 @@
             <child type="label">
               <object class="GtkLabel" id="label1">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="xpad">5</property>
                 <property name="label" translatable="yes">&lt;b&gt;Scheme&lt;/b&gt;</property>
                 <property name="use_markup">True</property>
@@ -120,46 +172,9 @@
             </child>
           </object>
           <packing>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area1">
-            <property name="visible">True</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="CancelButton">
-                <property name="label">gtk-cancel</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="OKButton">
-                <property name="label">gtk-ok</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
             <property name="expand">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
           </packing>
         </child>
       </object>
diff --git a/src/nact/nact-application.c b/src/nact/nact-application.c
index 1856f6e..ae9e8a6 100644
--- a/src/nact/nact-application.c
+++ b/src/nact/nact-application.c
@@ -34,29 +34,32 @@
 #include <glib/gi18n.h>
 #include <libintl.h>
 
-#include <api/na-core-utils.h>
+#include "api/na-core-utils.h"
 
-#include <core/na-about.h>
+#include "core/na-about.h"
 
 #include "nact-application.h"
 #include "nact-main-window.h"
-
-/* private class data
- */
-struct _NactApplicationClassPrivate {
-       void *empty;                                            /* so that gcc -pedantic is happy */
-};
+#include "nact-menu.h"
 
 /* private instance data
  */
 struct _NactApplicationPrivate {
-       gboolean   dispose_has_run;
-       NAUpdater *updater;
+       gboolean        dispose_has_run;
+
+       const gchar    *application_name;       /* new: st_application_name localized version */
+       const gchar    *description;            /* new: st_description localized version */
+       const gchar    *icon_name;                      /* new: icon name */
+       int             argc;
+       GStrv           argv;
+       int             code;
+
+       NAUpdater      *updater;
 };
 
 static const gchar *st_application_name        = N_( "Nautilus-Actions Configuration Tool" );
 static const gchar *st_description             = N_( "A user interface to edit your own contextual actions" 
);
-static const gchar *st_unique_name             = "org.gnome.nautilus-actions.ConfigurationTool";
+static const gchar *st_application_id   = "org.gnome.nautilus-actions.ConfigurationTool";
 
 static gboolean     st_non_unique_opt = FALSE;
 static gboolean     st_version_opt    = FALSE;
@@ -69,17 +72,19 @@ static GOptionEntry st_option_entries[] = {
        { NULL }
 };
 
-static BaseApplicationClass *st_parent_class = NULL;
+static GtkApplicationClass *st_parent_class = NULL;
 
 static GType    register_type( void );
 static void     class_init( NactApplicationClass *klass );
 static void     instance_init( GTypeInstance *instance, gpointer klass );
 static void     instance_dispose( GObject *application );
 static void     instance_finalize( GObject *application );
-
-static gboolean appli_manage_options( BaseApplication *application );
-static gboolean appli_init_application( BaseApplication *application );
-static gboolean appli_create_windows( BaseApplication *application );
+static void     init_i18n( NactApplication *application );
+static gboolean init_gtk_args( NactApplication *application );
+static gboolean manage_options( NactApplication *application );
+static void     application_startup( GApplication *application );
+static void     application_activate( GApplication *application );
+static void     application_open( GApplication *application, GFile **files, gint n_files, const gchar *hint 
);
 
 GType
 nact_application_get_type( void )
@@ -113,7 +118,7 @@ register_type( void )
 
        g_debug( "%s", thisfn );
 
-       type = g_type_register_static( BASE_TYPE_APPLICATION, "NactApplication", &info, 0 );
+       type = g_type_register_static( GTK_TYPE_APPLICATION, "NactApplication", &info, 0 );
 
        return( type );
 }
@@ -122,23 +127,17 @@ static void
 class_init( NactApplicationClass *klass )
 {
        static const gchar *thisfn = "nact_application_class_init";
-       GObjectClass *object_class;
-       BaseApplicationClass *appli_class;
 
        g_debug( "%s: klass=%p", thisfn, ( void * ) klass );
 
-       st_parent_class = BASE_APPLICATION_CLASS( g_type_class_peek_parent( klass ));
+       st_parent_class = GTK_APPLICATION_CLASS( g_type_class_peek_parent( klass ));
 
-       object_class = G_OBJECT_CLASS( klass );
-       object_class->dispose = instance_dispose;
-       object_class->finalize = instance_finalize;
+       G_OBJECT_CLASS( klass )->dispose = instance_dispose;
+       G_OBJECT_CLASS( klass )->finalize = instance_finalize;
 
-       klass->private = g_new0( NactApplicationClassPrivate, 1 );
-
-       appli_class = BASE_APPLICATION_CLASS( klass );
-       appli_class->manage_options = appli_manage_options;
-       appli_class->init_application = appli_init_application;
-       appli_class->create_windows = appli_create_windows;
+       G_APPLICATION_CLASS( klass )->startup = application_startup;
+       G_APPLICATION_CLASS( klass )->activate = application_activate;
+       G_APPLICATION_CLASS( klass )->open = application_open;
 }
 
 static void
@@ -163,27 +162,25 @@ static void
 instance_dispose( GObject *application )
 {
        static const gchar *thisfn = "nact_application_instance_dispose";
-       NactApplication *self;
+       NactApplicationPrivate *priv;
 
-       g_return_if_fail( NACT_IS_APPLICATION( application ));
+       g_return_if_fail( application && NACT_IS_APPLICATION( application ));
 
-       self = NACT_APPLICATION( application );
+       priv = NACT_APPLICATION( application )->private;
 
-       if( !self->private->dispose_has_run ){
+       if( !priv->dispose_has_run ){
 
                g_debug( "%s: application=%p (%s)", thisfn, ( void * ) application, G_OBJECT_TYPE_NAME( 
application ));
 
-               self->private->dispose_has_run = TRUE;
+               priv->dispose_has_run = TRUE;
 
-               if( self->private->updater ){
-                       g_object_unref( self->private->updater );
-               }
-
-               /* chain up to the parent class */
-               if( G_OBJECT_CLASS( st_parent_class )->dispose ){
-                       G_OBJECT_CLASS( st_parent_class )->dispose( application );
+               if( priv->updater ){
+                       g_clear_object( &priv->updater );
                }
        }
+
+       /* chain up to the parent class */
+       G_OBJECT_CLASS( st_parent_class )->dispose( application );
 }
 
 static void
@@ -200,10 +197,8 @@ instance_finalize( GObject *application )
 
        g_free( self->private );
 
-       /* chain call to parent class */
-       if( G_OBJECT_CLASS( st_parent_class )->finalize ){
-               G_OBJECT_CLASS( st_parent_class )->finalize( application );
-       }
+       /* chain call to the parent class */
+       G_OBJECT_CLASS( st_parent_class )->finalize( application );
 }
 
 /**
@@ -215,37 +210,148 @@ NactApplication *
 nact_application_new( void )
 {
        NactApplication *application;
+       NactApplicationPrivate *priv;
 
-       application = g_object_new( NACT_TYPE_APPLICATION, NULL );
-
-       g_object_set( G_OBJECT( application ),
-                       BASE_PROP_OPTIONS,          st_option_entries,
-                       BASE_PROP_APPLICATION_NAME, gettext( st_application_name ),
-                       BASE_PROP_DESCRIPTION,      gettext( st_description ),
-                       BASE_PROP_ICON_NAME,        na_about_get_icon_name(),
-                       BASE_PROP_UNIQUE_NAME,      st_unique_name,
+       application = g_object_new( NACT_TYPE_APPLICATION,
+                       "application-id", st_application_id,
                        NULL );
 
+       priv = application->private;
+       priv->application_name = gettext( st_application_name );
+       priv->description = gettext( st_description );
+       priv->icon_name = na_about_get_icon_name();
+
        return( application );
 }
 
+/**
+ * nact_application_run_with_args:
+ * @application: this #GtkApplication -derived instance.
+ * @argc:
+ * @argv:
+ *
+ * Starts and runs the application.
+ * Takes care of creating, initializing, and running the main window.
+ *
+ * All steps are implemented as virtual functions which provide some
+ * suitable defaults, and may be overriden by a derived class.
+ *
+ * Returns: an %int code suitable as an exit code for the program.
+ *
+ * Though it is defined as a virtual function itself, it should be very
+ * seldomly needed to override this in a derived class.
+ */
+int
+nact_application_run_with_args( NactApplication *application, int argc, GStrv argv )
+{
+       static const gchar *thisfn = "nact_application_run_with_args";
+       NactApplicationPrivate *priv;
+
+       g_debug( "%s: application=%p (%s), argc=%d",
+                       thisfn,
+                       ( void * ) application, G_OBJECT_TYPE_NAME( application ),
+                       argc );
+
+       g_return_val_if_fail( application && NACT_IS_APPLICATION( application ), NACT_EXIT_CODE_PROGRAM );
+
+       priv = application->private;
+
+       if( !priv->dispose_has_run ){
+
+               priv->argc = argc;
+               priv->argv = g_strdupv( argv );
+               priv->code = NACT_EXIT_CODE_OK;
+
+               init_i18n( application );
+               g_set_application_name( priv->application_name );
+               gtk_window_set_default_icon_name( priv->icon_name );
+
+               if( init_gtk_args( application ) &&
+                       manage_options( application )){
+
+                       g_debug( "%s: entering g_application_run", thisfn );
+                       priv->code = g_application_run( G_APPLICATION( application ), 0, NULL );
+               }
+       }
+
+       return( priv->code );
+}
+
 /*
- * overriden to manage command-line options
+ * i18n initialization
+ *
+ * Returns: %TRUE to continue the execution, %FALSE to terminate the program.
+ * The program exit code will be taken from @code.
+ */
+static void
+init_i18n( NactApplication *application )
+{
+       static const gchar *thisfn = "nact_application_init_i18n";
+
+       g_debug( "%s: application=%p", thisfn, ( void * ) application );
+
+#ifdef ENABLE_NLS
+       bindtextdomain( GETTEXT_PACKAGE, GNOMELOCALEDIR );
+# ifdef HAVE_BIND_TEXTDOMAIN_CODESET
+       bind_textdomain_codeset( GETTEXT_PACKAGE, "UTF-8" );
+# endif
+       textdomain( GETTEXT_PACKAGE );
+#endif
+}
+
+/*
+ * Pre-Gtk+ initialization
+ *
+ * Though GApplication has its own infrastructure to handle command-line
+ * arguments, it appears that it does not deal with Gtk+-specific arguments.
+ * We so have to explicitely call gtk_init_with_args() in order to let Gtk+
+ * "eat" its own arguments, and only have to handle our owns...
  */
 static gboolean
-appli_manage_options( BaseApplication *application )
+init_gtk_args( NactApplication *application )
 {
-       static const gchar *thisfn = "nact_application_appli_manage_options";
+       static const gchar *thisfn = "nact_application_init_gtk_args";
+       NactApplicationPrivate *priv;
        gboolean ret;
+       char *parameter_string;
+       GError *error;
+
+       g_debug( "%s: application=%p", thisfn, ( void * ) application );
+
+       priv = application->private;
+
+       parameter_string = g_strdup( g_get_application_name());
+       error = NULL;
+       ret = gtk_init_with_args(
+                       &priv->argc,
+                       ( char *** ) &priv->argv,
+                       parameter_string,
+                       st_option_entries,
+                       GETTEXT_PACKAGE,
+                       &error );
+       if( !ret ){
+               g_warning( "%s: %s", thisfn, error->message );
+               g_error_free( error );
+               ret = FALSE;
+               priv->code = NACT_EXIT_CODE_ARGS;
+       }
+       g_free( parameter_string );
 
-       g_return_val_if_fail( NACT_IS_APPLICATION( application ), FALSE );
+       return( ret );
+}
+
+static gboolean
+manage_options( NactApplication *application )
+{
+       static const gchar *thisfn = "nact_application_manage_options";
+       gboolean ret;
 
        g_debug( "%s: application=%p", thisfn, ( void * ) application );
 
        ret = TRUE;
 
        /* display the program version ?
-        * if yes, then stops here
+        * if yes, then stops here, exiting with code ok
         */
        if( st_version_opt ){
                na_core_utils_print_version();
@@ -255,77 +361,166 @@ appli_manage_options( BaseApplication *application )
        /* run the application as non-unique ?
         */
        if( ret && st_non_unique_opt ){
-               g_object_set( G_OBJECT( application ), BASE_PROP_UNIQUE_NAME, "", NULL );
-       }
-
-       /* call parent class */
-       if( ret && BASE_APPLICATION_CLASS( st_parent_class )->manage_options ){
-               ret = BASE_APPLICATION_CLASS( st_parent_class )->manage_options( application );
+               g_application_set_flags( G_APPLICATION( application ), G_APPLICATION_NON_UNIQUE );
        }
 
        return( ret );
 }
 
 /*
- * initialize the application
+ * https://wiki.gnome.org/HowDoI/GtkApplication
+ *
+ * Invoked on the primary instance immediately after registration.
+ *
+ * When your application starts, the startup signal will be fired. This
+ * gives you a chance to perform initialisation tasks that are not
+ * directly related to showing a new window. After this, depending on
+ * how the application is started, either activate or open will be called
+ * next.
+ *
+ * GtkApplication defaults to applications being single-instance. If the
+ * user attempts to start a second instance of a single-instance
+ * application then GtkApplication will signal the first instance and
+ * you will receive additional activate or open signals. In this case,
+ * the second instance will exit immediately, without calling startup
+ * or shutdown.
+ *
+ * For this reason, you should do essentially no work at all from main().
+ * All startup initialisation should be done in startup. This avoids
+ * wasting work in the second-instance case where the program just exits
+ * immediately.
  */
-static gboolean
-appli_init_application( BaseApplication *application )
+static void
+application_startup( GApplication *application )
 {
-       static const gchar *thisfn = "nact_application_appli_init_application";
-       gboolean ret;
+       static const gchar *thisfn = "nact_application_startup";
        NactApplicationPrivate *priv;
 
-       g_return_val_if_fail( NACT_IS_APPLICATION( application ), FALSE );
-
        g_debug( "%s: application=%p", thisfn, ( void * ) application );
 
-       ret = TRUE;
+       g_return_if_fail( application && NACT_IS_APPLICATION( application ));
        priv = NACT_APPLICATION( application )->private;
 
+       /* chain up to the parent class */
+       if( G_APPLICATION_CLASS( st_parent_class )->startup ){
+               G_APPLICATION_CLASS( st_parent_class )->startup( application );
+       }
+
        /* create the NAPivot object (loading the plugins and so on)
         * after having dealt with command-line arguments
         */
        priv->updater = na_updater_new();
        na_pivot_set_loadable( NA_PIVOT( priv->updater ), PIVOT_LOAD_ALL );
 
-       /* call parent class */
-       if( ret && BASE_APPLICATION_CLASS( st_parent_class )->init_application ){
-               ret = BASE_APPLICATION_CLASS( st_parent_class )->init_application( application );
+       /* define the application menu */
+       nact_menu_app( NACT_APPLICATION( application ));
+}
+
+/*
+ * https://wiki.gnome.org/Projects/GLib/GApplication/Introduction
+ * https://wiki.gnome.org/HowDoI/GtkApplication
+ *
+ * activate is executed by GApplication when the application is "activated".
+ * This corresponds to the program being run from the command line, or when
+ * its icon is clicked on in an application launcher.
+ * From a semantic standpoint, activate should usually do one of two things,
+ * depending on the type of application.
+ *
+ * If your application is the type of application that deals with several
+ * documents at a time, in separate windows (and/or tabs) then activate
+ * should involve showing a window or creating a tab for a new document.
+ *
+ * If your application is more like the type of application with one primary
+ * main window then activate should usually involve raising this window with
+ * gtk_window_present(). It is the choice of the application in this case if
+ * the window itself is constructed in startup or on the first execution of
+ * activate.
+ *
+ * activate is potentially called many times in a process or maybe never.
+ * If the process is started without files to open then activate will be run
+ * after startup. It may also be run again if a second instance of the
+ * process is started.
+ */
+static void
+application_activate( GApplication *application )
+{
+       static const gchar *thisfn = "nact_application_activate";
+       GList *windows_list;
+       NactMainWindow *main_window;
+
+       g_debug( "%s: application=%p", thisfn, ( void * ) application );
+
+       g_return_if_fail( application && NACT_IS_APPLICATION( application ));
+
+       windows_list = gtk_application_get_windows( GTK_APPLICATION( application ));
+
+       /* if the application is unique, have only one main window */
+       if( !st_non_unique_opt ){
+               if( !g_list_length( windows_list )){
+                       main_window = nact_main_window_new( NACT_APPLICATION( application ));
+                       g_debug( "%s: main window instanciated at %p", thisfn, main_window );
+               } else {
+                       main_window = ( NactMainWindow * ) windows_list->data;
+               }
+
+       /* have as many main windows we want */
+       } else {
+               main_window = nact_main_window_new( NACT_APPLICATION( application ));
        }
 
-       return( ret );
+       g_return_if_fail( main_window && NACT_IS_MAIN_WINDOW( main_window ));
+       gtk_window_present( GTK_WINDOW( main_window ));
 }
 
 /*
- * create application startup windows
+ * https://wiki.gnome.org/Projects/GLib/GApplication/Introduction
+ *
+ * open is similar to activate, but it is used when some files have been
+ * passed to the application to open.
+ * In fact, you could think of activate as a special case of open: the
+ * one with zero files.
+ * Similar to activate, open should create a window or tab. It should
+ * open the file in this window. If multiple files are given, possibly
+ * several windows should be opened.
+ * open will only be invoked in the case that your application declares
+ * that it supports opening files with the G_APPLICATION_HANDLES_OPEN
+ * GApplicationFlag.
+ *
+ * Openbook: as the G_APPLICATION_HANDLES_OPEN flag is not set, then
+ * this function should never be called.
  */
-static gboolean
-appli_create_windows( BaseApplication *application )
+static void
+application_open( GApplication *application, GFile **files, gint n_files, const gchar *hint )
 {
-       static const gchar *thisfn = "nact_application_appli_create_windows";
-       gboolean ret;
-       NactMainWindow *window;
+       static const gchar *thisfn = "nact_application_open";
 
-       g_return_val_if_fail( NACT_IS_APPLICATION( application ), FALSE );
+       g_warning( "%s: application=%p, n_files=%d, hint=%s: unexpected run here",
+                       thisfn, ( void * ) application, n_files, hint );
+}
 
-       g_debug( "%s: application=%p", thisfn, ( void * ) application );
+/**
+ * nact_application_get_application_name:
+ * @application: this #NactApplication instance.
+ *
+ * Returns: the application name as a newly allocated string which should
+ * be be g_free() by the caller.
+ */
+gchar *
+nact_application_get_application_name( const NactApplication *application )
+{
+       NactApplicationPrivate *priv;
+       gchar *name = NULL;
 
-       ret = FALSE;
+       g_return_val_if_fail( application && NACT_IS_APPLICATION( application ), NULL );
 
-       /* creating main window
-        */
-       window = nact_main_window_new( NACT_APPLICATION( application ));
+       priv = application->private;
 
-       if( window ){
-               g_return_val_if_fail( NACT_IS_MAIN_WINDOW( window ), FALSE );
-               ret = TRUE;
+       if( !priv->dispose_has_run ){
 
-       } else {
-               g_object_set( G_OBJECT( application ), BASE_PROP_CODE, BASE_EXIT_CODE_INIT_WINDOW, NULL );
+               name = g_strdup( priv->application_name );
        }
 
-       return( ret );
+       return( name );
 }
 
 /**
@@ -340,14 +535,23 @@ appli_create_windows( BaseApplication *application )
 NAUpdater *
 nact_application_get_updater( const NactApplication *application )
 {
+       NactApplicationPrivate *priv;
        NAUpdater *updater = NULL;
 
-       g_return_val_if_fail( NACT_IS_APPLICATION( application ), NULL );
+       g_return_val_if_fail( application && NACT_IS_APPLICATION( application ), NULL );
+
+       priv = application->private;
 
-       if( !application->private->dispose_has_run ){
+       if( !priv->dispose_has_run ){
 
-               updater = application->private->updater;
+               updater = priv->updater;
        }
 
        return( updater );
 }
+
+gboolean
+nact_application_is_willing_to_quit( const NactApplication *application )
+{
+       return( FALSE );
+}
diff --git a/src/nact/nact-application.h b/src/nact/nact-application.h
index 5a00a85..b3ad2e8 100644
--- a/src/nact/nact-application.h
+++ b/src/nact/nact-application.h
@@ -37,18 +37,19 @@
  *
  * This is the main class for nautilus-actions-config-tool program.
  *
- * The #NactApplication object is instanciated in main() function.
+ * The #NactApplication object is instanciated from main() function,
+ * then later #g_object_unref() after nact_application_run() has
+ * returned.
  *
- * Properties are explicitely set in nact_application_new() before
- * calling base_application_run().
- *
- * The #NactApplication object is later g_object_unref() in main() after
- * base_application_run() has returned.
+ * NactApplication is a non-unique application e.g. the user is able
+ * to run several instance of the applications, all pointing to the
+ * same actions set, potentially being able to simultaneously have
+ * different views or to simultaneously act on different subsets.
  */
 
-#include <core/na-updater.h>
+#include <gtk/gtk.h>
 
-#include "base-application.h"
+#include "core/na-updater.h"
 
 G_BEGIN_DECLS
 
@@ -63,25 +64,48 @@ typedef struct _NactApplicationPrivate       NactApplicationPrivate;
 
 typedef struct {
        /*< private >*/
-       BaseApplication         parent;
-       NactApplicationPrivate *private;
+       GtkApplicationClass     parent;
 }
-       NactApplication;
-
-typedef struct _NactApplicationClassPrivate  NactApplicationClassPrivate;
+       NactApplicationClass;
 
 typedef struct {
        /*< private >*/
-       BaseApplicationClass         parent;
-       NactApplicationClassPrivate *private;
+       GtkApplication          parent;
+       NactApplicationPrivate *private;
 }
-       NactApplicationClass;
+       NactApplication;
+
+/**
+ * NactExitCode:
+ *
+ * The code returned by the application.
+ *
+ * @NACT_EXIT_CODE_PROGRAM = -1: this is a program error code.
+ * @NACT_EXIT_CODE_OK = 0:       the program has successfully run, and returns zero.
+ * @NACT_EXIT_CODE_ARGS = 1:     unable to interpret command-line options
+ * @NACT_EXIT_CODE_WINDOW = 2:   unable to create a window
+ */
+typedef enum {
+       NACT_EXIT_CODE_PROGRAM = -1,
+       NACT_EXIT_CODE_OK = 0,
+       NACT_EXIT_CODE_ARGS,
+       NACT_EXIT_CODE_WINDOW,
+}
+       NactExitCode;
+
+GType            nact_application_get_type            ( void );
+
+NactApplication *nact_application_new                 ( void );
+
+int              nact_application_run_with_args       ( NactApplication *application,
+                                                                                                             
                  int argc,
+                                                                                                             
                  GStrv argv );
 
-GType            nact_application_get_type   ( void );
+gchar           *nact_application_get_application_name( const NactApplication *application );
 
-NactApplication *nact_application_new        ( void );
+NAUpdater       *nact_application_get_updater         ( const NactApplication *application );
 
-NAUpdater       *nact_application_get_updater( const NactApplication *application );
+gboolean         nact_application_is_willing_to_quit  ( const NactApplication *application );
 
 G_END_DECLS
 
diff --git a/src/nact/nact-assistant-export.c b/src/nact/nact-assistant-export.c
index 8f5d32c..a84dbf8 100644
--- a/src/nact/nact-assistant-export.c
+++ b/src/nact/nact-assistant-export.c
@@ -34,13 +34,13 @@
 #include <glib/gi18n.h>
 #include <string.h>
 
-#include <api/na-core-utils.h>
-#include <api/na-object-api.h>
+#include "api/na-core-utils.h"
+#include "api/na-object-api.h"
 
-#include <core/na-exporter.h>
-#include <core/na-export-format.h>
-#include <core/na-gtk-utils.h>
-#include <core/na-ioptions-list.h>
+#include "core/na-exporter.h"
+#include "core/na-export-format.h"
+#include "core/na-gtk-utils.h"
+#include "core/na-ioptions-list.h"
 
 #include "nact-application.h"
 #include "nact-main-window.h"
@@ -69,12 +69,6 @@ enum {
        ASSIST_PAGE_DONE
 };
 
-/* private class data
- */
-struct _NactAssistantExportClassPrivate {
-       void *empty;                                            /* so that gcc -pedantic is happy */
-};
-
 /* private instance data
  */
 struct _NactAssistantExportPrivate {
@@ -110,12 +104,12 @@ static void       instance_init( GTypeInstance *instance, gpointer klass );
 static void       instance_constructed( GObject *instance );
 static void       instance_dispose( GObject *instance );
 static void       instance_finalize( GObject *instance );
-static void       on_base_initialize_gtk_toplevel( NactAssistantExport *window, GtkAssistant *toplevel, 
gpointer user_data );
+static void       on_base_initialize_gtk_toplevel( NactAssistantExport *window, GtkAssistant *toplevel, void 
*empty );
 static void       items_tree_view_initialize_gtk( NactAssistantExport *window, GtkAssistant *toplevel );
 static void       folder_chooser_initialize_gtk( NactAssistantExport *window );
 static void       format_tree_view_initialize_gtk( NactAssistantExport *window );
-static void       on_base_initialize_base_window( NactAssistantExport *window, gpointer user_data );
-static void       on_base_all_widgets_showed( NactAssistantExport *window, gpointer user_data );
+static void       on_base_initialize_base_window( NactAssistantExport *window, void *empty );
+static void       on_base_all_widgets_showed( NactAssistantExport *window, void *empty );
 static void       on_items_tree_view_selection_changed( NactAssistantExport *window, GList *selected_items, 
gpointer user_data );
 static void       on_folder_chooser_selection_changed( GtkFileChooser *chooser, NactAssistantExport *window 
);
 static void       assistant_prepare( BaseAssistant *window, GtkAssistant *assistant, GtkWidget *page );
@@ -185,8 +179,6 @@ class_init( NactAssistantExportClass *klass )
        object_class->dispose = instance_dispose;
        object_class->finalize = instance_finalize;
 
-       klass->private = g_new0( NactAssistantExportClassPrivate, 1 );
-
        assist_class = BASE_ASSISTANT_CLASS( klass );
        assist_class->apply = assistant_apply;
        assist_class->prepare = assistant_prepare;
@@ -271,23 +263,23 @@ instance_constructed( GObject *window )
 
                g_debug( "%s: window=%p (%s)", thisfn, ( void * ) window, G_OBJECT_TYPE_NAME( window ));
 
-               base_window_signal_connect(
-                               BASE_WINDOW( window ),
+               g_signal_connect(
                                G_OBJECT( window ),
                                BASE_SIGNAL_INITIALIZE_GTK,
-                               G_CALLBACK( on_base_initialize_gtk_toplevel ));
+                               G_CALLBACK( on_base_initialize_gtk_toplevel ),
+                               NULL );
 
-               base_window_signal_connect(
-                               BASE_WINDOW( window ),
+               g_signal_connect(
                                G_OBJECT( window ),
                                BASE_SIGNAL_INITIALIZE_WINDOW,
-                               G_CALLBACK( on_base_initialize_base_window ));
+                               G_CALLBACK( on_base_initialize_base_window ),
+                               NULL );
 
-               base_window_signal_connect(
-                               BASE_WINDOW( window ),
+               g_signal_connect(
                                G_OBJECT( window ),
                                BASE_SIGNAL_SHOW_WIDGETS,
-                               G_CALLBACK( on_base_all_widgets_showed ));
+                               G_CALLBACK( on_base_all_widgets_showed ),
+                               NULL );
        }
 }
 
@@ -318,7 +310,7 @@ instance_dispose( GObject *window )
 
                assistant = GTK_ASSISTANT( base_window_get_gtk_toplevel( BASE_WINDOW( window )));
                page = gtk_assistant_get_nth_page( assistant, ASSIST_PAGE_ACTIONS_SELECTION );
-               pane = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( page ), "p1-HPaned" );
+               pane = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( page ), "p1-paned" );
                pos = gtk_paned_get_position( GTK_PANED( pane ));
                na_settings_set_uint( NA_IPREFS_EXPORT_ASSISTANT_PANED, pos );
 
@@ -352,12 +344,13 @@ instance_finalize( GObject *window )
 }
 
 /**
- * Run the assistant.
- *
+ * nact_assistant_export_run:
  * @main: the main window of the application.
+ *
+ * Run the assistant.
  */
 void
-nact_assistant_export_run( BaseWindow *main_window )
+nact_assistant_export_run( NactMainWindow *main_window )
 {
        NactAssistantExport *assistant;
        gboolean esc_quit, esc_confirm;
@@ -368,7 +361,7 @@ nact_assistant_export_run( BaseWindow *main_window )
        esc_confirm = na_settings_get_boolean( NA_IPREFS_ASSISTANT_ESC_CONFIRM, NULL, NULL );
 
        assistant = g_object_new( NACT_TYPE_ASSISTANT_EXPORT,
-                       BASE_PROP_PARENT,          main_window,
+                       BASE_PROP_MAIN_WINDOW,     main_window,
                        BASE_PROP_HAS_OWN_BUILDER, TRUE,
                        BASE_PROP_XMLUI_FILENAME,  st_xmlui_filename,
                        BASE_PROP_TOPLEVEL_NAME,   st_toplevel_name,
@@ -381,7 +374,7 @@ nact_assistant_export_run( BaseWindow *main_window )
 }
 
 static void
-on_base_initialize_gtk_toplevel( NactAssistantExport *window, GtkAssistant *assistant, gpointer user_data )
+on_base_initialize_gtk_toplevel( NactAssistantExport *window, GtkAssistant *assistant, void *empty )
 {
        static const gchar *thisfn = "nact_assistant_export_on_base_initialize_gtk_toplevel";
        gboolean are_locked, mandatory;
@@ -389,8 +382,8 @@ on_base_initialize_gtk_toplevel( NactAssistantExport *window, GtkAssistant *assi
        g_return_if_fail( NACT_IS_ASSISTANT_EXPORT( window ));
 
        if( !window->private->dispose_has_run ){
-               g_debug( "%s: window=%p, assistant=%p, user_data=%p",
-                               thisfn, ( void * ) window, ( void * ) assistant, ( void * ) user_data );
+               g_debug( "%s: window=%p, assistant=%p, empty=%p",
+                               thisfn, ( void * ) window, ( void * ) assistant, empty );
 
                items_tree_view_initialize_gtk( window, assistant );
                folder_chooser_initialize_gtk( window );
@@ -398,30 +391,6 @@ on_base_initialize_gtk_toplevel( NactAssistantExport *window, GtkAssistant *assi
 
                are_locked = na_settings_get_boolean( NA_IPREFS_ADMIN_PREFERENCES_LOCKED, NULL, &mandatory );
                window->private->preferences_locked = are_locked && mandatory;
-
-#if !GTK_CHECK_VERSION( 3,0,0 )
-               guint padder = 8;
-               /* selecting items */
-               GtkWidget *page = gtk_assistant_get_nth_page( assistant, ASSIST_PAGE_ACTIONS_SELECTION );
-               GtkWidget *container = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( page ), 
"p1-l2-alignment1" );
-               g_object_set( G_OBJECT( container ), "border_width", padder, NULL );
-               /* selecting target folder */
-               page = gtk_assistant_get_nth_page( assistant, ASSIST_PAGE_FOLDER_SELECTION );
-               container = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( page ), "p2-l2-alignment1" );
-               g_object_set( G_OBJECT( container ), "top_padding", padder, NULL );
-               /* choosing export format */
-               page = gtk_assistant_get_nth_page( assistant, ASSIST_PAGE_FORMAT_SELECTION );
-               container = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( page ), "p3-l2-alignment1" );
-               g_object_set( G_OBJECT( container ), "border_width", padder, NULL );
-               /* summary */
-               page = gtk_assistant_get_nth_page( assistant, ASSIST_PAGE_CONFIRM );
-               container = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( page ), "p4-l2-alignment1" );
-               g_object_set( G_OBJECT( container ), "border_width", padder, NULL );
-               /* import is done */
-               page = gtk_assistant_get_nth_page( assistant, ASSIST_PAGE_DONE );
-               container = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( page ), "p5-l2-alignment1" );
-               g_object_set( G_OBJECT( container ), "border_width", padder, NULL );
-#endif
        }
 }
 
@@ -429,18 +398,21 @@ static void
 items_tree_view_initialize_gtk( NactAssistantExport *window, GtkAssistant *assistant )
 {
        static const gchar *thisfn = "nact_assistant_export_items_tree_view_initialize_gtk";
-       GtkWidget *page;
+       NactAssistantExportPrivate *priv;
+       GtkWidget *parent;
 
        g_debug( "%s: window=%p, assistant=%p", thisfn, ( void * ) window, ( void * ) assistant );
 
-       page = gtk_assistant_get_nth_page( assistant, ASSIST_PAGE_ACTIONS_SELECTION );
+       priv = window->private;
+       priv->items_view = nact_tree_view_new(
+                       NACT_MAIN_WINDOW( base_window_get_main_window( BASE_WINDOW( window ))));
+
+       parent = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( assistant ), "ActionsList" );
+       g_return_if_fail( parent && GTK_IS_CONTAINER( parent ));
+       gtk_container_add( GTK_CONTAINER( parent ), GTK_WIDGET( priv->items_view ));
 
-       window->private->items_view =
-                       nact_tree_view_new(
-                                       BASE_WINDOW( window ),
-                                       GTK_CONTAINER( page ),
-                                       "ActionsList",
-                                       TREE_MODE_SELECTION );
+       nact_tree_view_set_mnemonic( priv->items_view, GTK_CONTAINER( assistant ), "ActionsListLabel" );
+       nact_tree_view_set_edition_mode( priv->items_view, TREE_MODE_SELECTION );
 }
 
 static void
@@ -467,11 +439,11 @@ folder_chooser_initialize_gtk( NactAssistantExport *window )
        }
        g_free( uri );
 
-       base_window_signal_connect(
-                       BASE_WINDOW( window ),
+       g_signal_connect(
                        G_OBJECT( chooser ),
                        "selection-changed",
-                       G_CALLBACK( on_folder_chooser_selection_changed ));
+                       G_CALLBACK( on_folder_chooser_selection_changed ),
+                       window );
 }
 
 static void
@@ -493,7 +465,7 @@ format_tree_view_initialize_gtk( NactAssistantExport *window )
 }
 
 static void
-on_base_initialize_base_window( NactAssistantExport *window, gpointer user_data )
+on_base_initialize_base_window( NactAssistantExport *window, void *empty )
 {
        static const gchar *thisfn = "nact_assistant_export_on_base_initialize_base_window";
        GtkAssistant *assistant;
@@ -507,7 +479,7 @@ on_base_initialize_base_window( NactAssistantExport *window, gpointer user_data
        g_return_if_fail( NACT_IS_ASSISTANT_EXPORT( window ));
 
        if( !window->private->dispose_has_run ){
-               g_debug( "%s: window=%p, user_data=%p", thisfn, ( void * ) window, ( void * ) user_data );
+               g_debug( "%s: window=%p, empty=%p", thisfn, ( void * ) window, empty );
 
                assistant = GTK_ASSISTANT( base_window_get_gtk_toplevel( BASE_WINDOW( window )));
 
@@ -521,7 +493,7 @@ on_base_initialize_base_window( NactAssistantExport *window, gpointer user_data
                pos = na_settings_get_uint( NA_IPREFS_EXPORT_ASSISTANT_PANED, NULL, NULL );
                if( pos ){
                        page = gtk_assistant_get_nth_page( assistant, ASSIST_PAGE_ACTIONS_SELECTION );
-                       pane = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( page ), "p1-HPaned" );
+                       pane = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( page ), "p1-paned" );
                        gtk_paned_set_position( GTK_PANED( pane ), pos );
                }
 
@@ -540,12 +512,12 @@ on_base_initialize_base_window( NactAssistantExport *window, gpointer user_data
 }
 
 static void
-on_base_all_widgets_showed( NactAssistantExport *window, gpointer user_data )
+on_base_all_widgets_showed( NactAssistantExport *window, void *empty )
 {
        static const gchar *thisfn = "nact_assistant_export_on_base_all_widgets_showed";
        GtkAssistant *assistant;
        GtkWidget *page;
-       NactMainWindow *main_window;
+       GtkApplicationWindow *main_window;
        NactTreeView *main_items_view;
        GList *items;
        GtkTreePath *path;
@@ -553,14 +525,15 @@ on_base_all_widgets_showed( NactAssistantExport *window, gpointer user_data )
        g_return_if_fail( NACT_IS_ASSISTANT_EXPORT( window ));
 
        if( !window->private->dispose_has_run ){
-               g_debug( "%s: window=%p, user_data=%p", thisfn, ( void * ) window, ( void * ) user_data );
+               g_debug( "%s: window=%p, empty=%p", thisfn, ( void * ) window, empty );
 
                assistant = GTK_ASSISTANT( base_window_get_gtk_toplevel( BASE_WINDOW( window )));
 
                /* fill up the items tree view
                 */
-               main_window = NACT_MAIN_WINDOW( base_window_get_parent( BASE_WINDOW( window )));
-               main_items_view = nact_main_window_get_items_view( main_window );
+               main_window = base_window_get_main_window( BASE_WINDOW( window ));
+               g_return_if_fail( main_window && NACT_IS_MAIN_WINDOW( main_window ));
+               main_items_view = nact_main_window_get_items_view( NACT_MAIN_WINDOW( main_window ));
                items = nact_tree_view_get_items( main_items_view );
                nact_tree_view_fill( window->private->items_view, items );
 
@@ -569,7 +542,7 @@ on_base_all_widgets_showed( NactAssistantExport *window, gpointer user_data )
                base_window_signal_connect(
                                BASE_WINDOW( window ),
                                G_OBJECT( window ),
-                               MAIN_SIGNAL_SELECTION_CHANGED,
+                               TREE_SIGNAL_SELECTION_CHANGED,
                                G_CALLBACK( on_items_tree_view_selection_changed ));
 
                /* select the first row
@@ -807,7 +780,7 @@ assistant_apply( BaseAssistant *wnd, GtkAssistant *assistant )
 
                if( !strcmp( str->format, EXPORTER_FORMAT_ASK )){
                        g_free( str->format );
-                       str->format = nact_export_ask_user( BASE_WINDOW( wnd ), str->item, first );
+                       str->format = nact_export_ask_user( str->item, first );
                        g_return_if_fail( str->format && strlen( str->format ));
 
                        if( !str->format || !strcmp( str->format, EXPORTER_FORMAT_NOEXPORT )){
@@ -848,26 +821,13 @@ assist_prepare_exportdone( NactAssistantExport *window, GtkAssistant *assistant,
        vbox = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( page ), "p5-SummaryVBox" );
        g_return_if_fail( GTK_IS_BOX( vbox ));
 
-#if !GTK_CHECK_VERSION( 3,0,0 )
-       /* Note that, at least, in Gtk 2.20 (Ubuntu 10) and 2.22 (Fedora 14), GtkLabel
-        * queues its resize (when the text is being set), but the actual resize does
-        * not happen immediately - We have to wait until Gtk 3.0, most probably due
-        * to the new width-for-height and height-for-width features...
-        */
-       gtk_container_set_resize_mode( GTK_CONTAINER( vbox ), GTK_RESIZE_IMMEDIATE );
-#endif
-
        /* for each item:
         * - display the item label
         * - display the export filename
         */
        for( ir = window->private->results ; ir ; ir = ir->next ){
 
-#if GTK_CHECK_VERSION( 3,0,0 )
                item_vbox = gtk_box_new( GTK_ORIENTATION_VERTICAL, 4 );
-#else
-               item_vbox = gtk_vbox_new( FALSE, 4 );
-#endif
                gtk_box_pack_start( GTK_BOX( vbox ), item_vbox, FALSE, FALSE, 0 );
 
                /* display the item label
diff --git a/src/nact/nact-assistant-export.h b/src/nact/nact-assistant-export.h
index 08e0879..5e6f8c7 100644
--- a/src/nact/nact-assistant-export.h
+++ b/src/nact/nact-assistant-export.h
@@ -62,6 +62,7 @@
  */
 
 #include "base-assistant.h"
+#include "nact-main-window-def.h"
 
 G_BEGIN_DECLS
 
@@ -81,18 +82,15 @@ typedef struct {
 }
        NactAssistantExport;
 
-typedef struct _NactAssistantExportClassPrivate   NactAssistantExportClassPrivate;
-
 typedef struct {
        /*< private >*/
-       BaseAssistantClass               parent;
-       NactAssistantExportClassPrivate *private;
+       BaseAssistantClass          parent;
 }
        NactAssistantExportClass;
 
 GType nact_assistant_export_get_type( void );
 
-void  nact_assistant_export_run( BaseWindow *parent );
+void  nact_assistant_export_run     ( NactMainWindow *main_window );
 
 G_END_DECLS
 
diff --git a/src/nact/nact-assistant-export.ui b/src/nact/nact-assistant-export.ui
index 5995136..279f852 100644
--- a/src/nact/nact-assistant-export.ui
+++ b/src/nact/nact-assistant-export.ui
@@ -1,14 +1,16 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.16.1 -->
 <interface>
-  <requires lib="gtk+" version="2.20"/>
-  <!-- interface-naming-policy toplevel-contextual -->
+  <requires lib="gtk+" version="3.4"/>
   <object class="GtkAssistant" id="ExportAssistant">
+    <property name="can_focus">False</property>
     <property name="title" translatable="yes">Exporting actions</property>
     <property name="modal">True</property>
     <property name="type_hint">dialog</property>
     <child>
       <object class="GtkLabel" id="p0-l1-label1">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <property name="label" translatable="yes">This assistant will guide you through the process of 
exporting actions.</property>
         <property name="wrap">True</property>
       </object>
@@ -17,486 +19,376 @@
       </packing>
     </child>
     <child>
-      <object class="GtkVBox" id="p1-l1-vbox1">
+      <object class="GtkAlignment" id="p1-l1-vbox1">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <child>
-          <object class="GtkAlignment" id="p1-l2-alignment1">
+          <object class="GtkPaned" id="p1-paned">
             <property name="visible">True</property>
+            <property name="can_focus">True</property>
             <child>
-              <object class="GtkHPaned" id="p1-HPaned">
+              <object class="GtkGrid" id="grid2">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <child>
-                  <object class="GtkVBox" id="p1-l4-vbox1">
+                  <object class="GtkLabel" id="ActionsListLabel">
                     <property name="visible">True</property>
-                    <property name="spacing">4</property>
-                    <child>
-                      <object class="GtkLabel" id="ActionsListLabel">
-                        <property name="visible">True</property>
-                        <property name="xalign">0</property>
-                        <property name="label" translatable="yes">Actions _list :</property>
-                        <property name="use_underline">True</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkScrolledWindow" id="p1-l5-scrolledwindow1">
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="hscrollbar_policy">automatic</property>
-                        <property name="vscrollbar_policy">automatic</property>
-                        <property name="shadow_type">in</property>
-                        <child>
-                          <object class="GtkTreeView" id="ActionsList">
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="headers_visible">False</property>
-                            <property name="rules_hint">True</property>
-                          </object>
-                        </child>
-                      </object>
-                      <packing>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
+                    <property name="can_focus">False</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Actions _list :</property>
+                    <property name="use_underline">True</property>
                   </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">0</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
                 </child>
                 <child>
-                  <object class="GtkVBox" id="p1-l4-vbox2">
+                  <object class="GtkScrolledWindow" id="p1-l5-scrolledwindow1">
                     <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="shadow_type">in</property>
                     <child>
-                      <object class="GtkLabel" id="p1-l5-label2">
+                      <object class="GtkTreeView" id="ActionsList">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">Please select one or more actions to be 
exported.
-
-You may use Ctrl and Shift keys to extend the selection.</property>
-                        <property name="wrap">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="hexpand">True</property>
+                        <property name="vexpand">True</property>
+                        <property name="headers_visible">False</property>
+                        <property name="rules_hint">True</property>
+                        <child internal-child="selection">
+                          <object class="GtkTreeSelection" id="treeview-selection"/>
+                        </child>
                       </object>
-                      <packing>
-                        <property name="position">0</property>
-                      </packing>
                     </child>
                   </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">1</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
                 </child>
               </object>
+              <packing>
+                <property name="resize">False</property>
+                <property name="shrink">True</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="p1-l5-label2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Please select one or more actions to be exported.
+
+You may use Ctrl and Shift keys to extend the selection.</property>
+                <property name="wrap">True</property>
+              </object>
+              <packing>
+                <property name="resize">True</property>
+                <property name="shrink">True</property>
+              </packing>
             </child>
           </object>
-          <packing>
-            <property name="position">0</property>
-          </packing>
         </child>
       </object>
       <packing>
         <property name="title" translatable="yes">Selecting the exported actions</property>
-        <property name="page_type">content</property>
       </packing>
     </child>
     <child>
-      <object class="GtkVBox" id="p2-l1-vbox1">
+      <object class="GtkAlignment" id="p2-l1-vbox1">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <child>
-          <object class="GtkAlignment" id="p2-l2-alignment1">
+          <object class="GtkFileChooserWidget" id="p2-ExportFolderChooser">
             <property name="visible">True</property>
-            <child>
-              <object class="GtkFileChooserWidget" id="p2-ExportFolderChooser">
-                <property name="visible">True</property>
-                <property name="use_preview_label">False</property>
-                <property name="action">select-folder</property>
-                <property name="preview_widget_active">False</property>
-                <property name="local_only">False</property>
-              </object>
-            </child>
+            <property name="can_focus">False</property>
+            <property name="action">select-folder</property>
+            <property name="local_only">False</property>
+            <property name="preview_widget_active">False</property>
+            <property name="use_preview_label">False</property>
           </object>
-          <packing>
-            <property name="position">0</property>
-          </packing>
         </child>
       </object>
       <packing>
         <property name="title" translatable="yes">Selecting the target folder</property>
-        <property name="page_type">content</property>
       </packing>
     </child>
     <child>
-      <object class="GtkVBox" id="p3-l1-vbox1">
+      <object class="GtkAlignment" id="p3-l1-vbox1">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <child>
-          <object class="GtkAlignment" id="p3-l2-alignment1">
+          <object class="GtkGrid" id="grid1">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <child>
-              <object class="GtkVBox" id="p3-l3-vbox1">
+              <object class="GtkLabel" id="p3-l4-label1">
                 <property name="visible">True</property>
-                <property name="spacing">10</property>
-                <child>
-                  <object class="GtkLabel" id="p3-l4-label1">
-                    <property name="visible">True</property>
-                    <property name="xalign">0</property>
-                    <property name="label" translatable="yes">Which format should I use when exporting these 
items ?</property>
-                    <property name="wrap">True</property>
-                    <attributes>
-                      <attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
-                    </attributes>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Which format should I use when exporting these 
items ?</property>
+                <property name="wrap">True</property>
+                <attributes>
+                  <attribute name="weight" value="bold"/>
+                </attributes>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkScrolledWindow" id="scrolledwindow1">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="shadow_type">in</property>
                 <child>
                   <object class="GtkTreeView" id="p3-ExportFormatTreeView">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
+                    <property name="hexpand">True</property>
+                    <property name="vexpand">True</property>
                     <property name="headers_visible">False</property>
                     <property name="rules_hint">True</property>
                     <property name="show_expanders">False</property>
+                    <child internal-child="selection">
+                      <object class="GtkTreeSelection" id="treeview-selection1"/>
+                    </child>
                   </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="position">1</property>
-                  </packing>
                 </child>
               </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
             </child>
           </object>
-          <packing>
-            <property name="position">0</property>
-          </packing>
         </child>
       </object>
       <packing>
         <property name="title" translatable="yes">Selecting the export format</property>
-        <property name="page_type">content</property>
       </packing>
     </child>
     <child>
-      <object class="GtkVBox" id="p4-l1-vbox1">
+      <object class="GtkAlignment" id="p4-l1-vbox1">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <child>
-          <object class="GtkAlignment" id="p4-l2-alignment1">
+          <object class="GtkScrolledWindow" id="p4-l3-scrolledwindow1">
             <property name="visible">True</property>
+            <property name="can_focus">True</property>
             <child>
-              <object class="GtkScrolledWindow" id="p4-l3-scrolledwindow1">
+              <object class="GtkViewport" id="p4-l4-viewport1">
                 <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="hscrollbar_policy">automatic</property>
-                <property name="vscrollbar_policy">automatic</property>
+                <property name="can_focus">False</property>
+                <property name="shadow_type">none</property>
                 <child>
-                  <object class="GtkViewport" id="p4-l4-viewport1">
+                  <object class="GtkGrid" id="grid3">
                     <property name="visible">True</property>
-                    <property name="shadow_type">GTK_SHADOW_NONE</property>
+                    <property name="can_focus">False</property>
+                    <property name="row_spacing">6</property>
                     <child>
-                      <object class="GtkVBox" id="p4-ConfirmVBox">
+                      <object class="GtkGrid" id="grid4">
                         <property name="visible">True</property>
-                        <property name="spacing">15</property>
+                        <property name="can_focus">False</property>
                         <child>
-                          <object class="GtkVBox" id="p4-l6-vbox1">
+                          <object class="GtkLabel" id="p4-l7-label1">
                             <property name="visible">True</property>
-                            <property name="spacing">8</property>
-                            <child>
-                              <object class="GtkLabel" id="p4-l7-label1">
-                                <property name="visible">True</property>
-                                <property name="xalign">0</property>
-                                <property name="label" translatable="yes">About to export selected 
items:</property>
-                                <attributes>
-                                  <attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
-                                </attributes>
-                              </object>
-                              <packing>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="p4-ConfirmItemsList">
-                                <property name="visible">True</property>
-                                <property name="xalign">0</property>
-                                <property name="xpad">15</property>
-                              </object>
-                              <packing>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
+                            <property name="can_focus">False</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">About to export selected 
items:</property>
+                            <attributes>
+                              <attribute name="weight" value="bold"/>
+                            </attributes>
                           </object>
                           <packing>
-                            <property name="expand">False</property>
-                            <property name="position">0</property>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">0</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkVBox" id="p4-l5-vbox2">
+                          <object class="GtkLabel" id="p4-ConfirmItemsList">
                             <property name="visible">True</property>
-                            <property name="spacing">8</property>
-                            <child>
-                              <object class="GtkLabel" id="p4-l6-label2">
-                                <property name="visible">True</property>
-                                <property name="xalign">0</property>
-                                <property name="wrap">True</property>
-                                <property name="label" translatable="yes">Into the destination 
folder:</property>
-                                <attributes>
-                                  <attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
-                                </attributes>
-                              </object>
-                              <packing>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="p4-ConfirmTargetFolder">
-                                <property name="visible">True</property>
-                                <property name="xalign">0</property>
-                                <property name="xpad">15</property>
-                                <property name="wrap">True</property>
-                              </object>
-                              <packing>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
+                            <property name="can_focus">False</property>
+                            <property name="xalign">0</property>
+                            <property name="xpad">15</property>
                           </object>
                           <packing>
-                            <property name="expand">False</property>
-                            <property name="position">1</property>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">1</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">0</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkGrid" id="grid5">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkLabel" id="p4-l6-label2">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">Into the destination folder:</property>
+                            <property name="wrap">True</property>
+                            <attributes>
+                              <attribute name="weight" value="bold"/>
+                            </attributes>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">0</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkVBox" id="p4-l5-vbox3">
+                          <object class="GtkLabel" id="p4-ConfirmTargetFolder">
                             <property name="visible">True</property>
-                            <property name="spacing">8</property>
-                            <child>
-                              <object class="GtkLabel" id="p4-ConfirmExportFormat">
-                                <property name="visible">True</property>
-                                <property name="xalign">0</property>
-                                <property name="wrap">True</property>
-                                <attributes>
-                                  <attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
-                                </attributes>
-                              </object>
-                              <packing>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="p4-ConfirmExportTooltip">
-                                <property name="visible">True</property>
-                                <property name="xalign">0</property>
-                                <property name="xpad">15</property>
-                                <property name="wrap">True</property>
-                              </object>
-                              <packing>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
+                            <property name="can_focus">False</property>
+                            <property name="xalign">0</property>
+                            <property name="xpad">15</property>
+                            <property name="wrap">True</property>
                           </object>
                           <packing>
-                            <property name="expand">False</property>
-                            <property name="position">2</property>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">1</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
                           </packing>
                         </child>
                       </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">1</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
                     </child>
-                  </object>
-                </child>
-              </object>
-            </child>
-          </object>
-          <packing>
-            <property name="position">0</property>
-          </packing>
-        </child>
-      </object>
-      <packing>
-        <property name="page_type">confirm</property>
-        <property name="title" translatable="yes">Summary</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkVBox" id="p5-l1-vbox1">
-        <property name="visible">True</property>
-        <child>
-          <object class="GtkAlignment" id="p5-l2-alignment1">
-            <property name="visible">True</property>
-            <child>
-              <object class="GtkScrolledWindow" id="p5-l3-scrolledwindow1">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="hscrollbar_policy">automatic</property>
-                <property name="vscrollbar_policy">automatic</property>
-                <child>
-                  <object class="GtkViewport" id="p5-l4-viewport1">
-                    <property name="visible">True</property>
-                    <property name="shadow_type">GTK_SHADOW_NONE</property>
                     <child>
-                      <object class="GtkVBox" id="p5-SummaryVBox">
+                      <object class="GtkGrid" id="grid6">
                         <property name="visible">True</property>
-                        <property name="orientation">vertical</property>
-                        <property name="spacing">8</property>
+                        <property name="can_focus">False</property>
                         <child>
-                          <object class="GtkLabel" id="p5-l6-label1">
+                          <object class="GtkLabel" id="p4-ConfirmExportFormat">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="xalign">0</property>
-                            <property name="label" translatable="yes">Selected items have been 
proceeded:</property>
+                            <property name="wrap">True</property>
                             <attributes>
-                              <attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
+                              <attribute name="weight" value="bold"/>
                             </attributes>
                           </object>
                           <packing>
-                            <property name="expand">False</property>
-                            <property name="position">0</property>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">0</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="p4-ConfirmExportTooltip">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="xalign">0</property>
+                            <property name="xpad">15</property>
+                            <property name="wrap">True</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">1</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
                           </packing>
                         </child>
                       </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">2</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
                     </child>
                   </object>
                 </child>
               </object>
             </child>
           </object>
-          <packing>
-            <property name="position">0</property>
-          </packing>
         </child>
       </object>
       <packing>
-        <property name="page_type">summary</property>
-        <property name="title" translatable="yes">Export is done</property>
+        <property name="page_type">confirm</property>
+        <property name="title" translatable="yes">Summary</property>
       </packing>
     </child>
-  </object>
-  <object class="GtkDialog" id="ExportAskDialog">
-    <property name="border_width">5</property>
-    <property name="title" translatable="yes">Exporting an action</property>
-    <property name="type_hint">dialog</property>
-    <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox1">
+    <child>
+      <object class="GtkAlignment" id="p5-l1-vbox1">
         <property name="visible">True</property>
-        <property name="spacing">2</property>
+        <property name="can_focus">False</property>
         <child>
-          <object class="GtkVBox" id="vbox37">
+          <object class="GtkScrolledWindow" id="p5-l3-scrolledwindow1">
             <property name="visible">True</property>
-            <property name="spacing">6</property>
-            <child>
-              <object class="GtkVBox" id="vbox39">
-                <property name="visible">True</property>
-                <property name="spacing">6</property>
-                <child>
-                  <object class="GtkLabel" id="ExportAskLabel">
-                    <property name="visible">True</property>
-                    <property name="xalign">0</property>
-                    <property name="xpad">6</property>
-                    <property name="wrap">True</property>
-                  </object>
-                  <packing>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="label47">
-                    <property name="visible">True</property>
-                    <property name="xalign">0</property>
-                    <property name="xpad">6</property>
-                    <property name="label" translatable="yes">Which format should I choose to export it 
?</property>
-                    <property name="wrap">True</property>
-                  </object>
-                  <packing>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkVBox" id="ExportFormatAskVBox">
-                <property name="visible">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
+            <property name="can_focus">True</property>
             <child>
-              <object class="GtkHSeparator" id="hseparator1">
-                <property name="visible">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="position">3</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkVBox" id="vbox40">
+              <object class="GtkViewport" id="p5-l4-viewport1">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="shadow_type">none</property>
                 <child>
-                  <object class="GtkCheckButton" id="AskKeepChoiceButton">
-                    <property name="label" translatable="yes">Re_member my choice in future export 
operations</property>
+                  <object class="GtkBox" id="p5-SummaryVBox">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="receives_default">False</property>
-                    <property name="use_underline">True</property>
-                    <property name="draw_indicator">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <object class="GtkLabel" id="p5-l6-label1">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Selected items have been 
proceeded:</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                        </attributes>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
                   </object>
-                  <packing>
-                    <property name="position">0</property>
-                  </packing>
                 </child>
               </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="position">4</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area1">
-            <property name="visible">True</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="CancelButton">
-                <property name="label">gtk-cancel</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="OKButton">
-                <property name="label">gtk-ok</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
             </child>
           </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
-          </packing>
         </child>
       </object>
+      <packing>
+        <property name="page_type">summary</property>
+        <property name="title" translatable="yes">Export is done</property>
+      </packing>
+    </child>
+    <child internal-child="action_area">
+      <object class="GtkBox" id="assistant-action_area1">
+        <property name="can_focus">False</property>
+      </object>
     </child>
-    <action-widgets>
-      <action-widget response="0">CancelButton</action-widget>
-      <action-widget response="0">OKButton</action-widget>
-    </action-widgets>
   </object>
 </interface>
diff --git a/src/nact/nact-assistant-import.c b/src/nact/nact-assistant-import.c
index 2b11355..f2a52b2 100644
--- a/src/nact/nact-assistant-import.c
+++ b/src/nact/nact-assistant-import.c
@@ -78,12 +78,6 @@ enum {
        N_COLUMN
 };
 
-/* private class data
- */
-struct _NactAssistantImportClassPrivate {
-       void *empty;                                            /* so that gcc -pedantic is happy */
-};
-
 /* private instance data
  */
 struct _NactAssistantImportPrivate {
@@ -191,8 +185,6 @@ class_init( NactAssistantImportClass *klass )
        object_class->dispose = instance_dispose;
        object_class->finalize = instance_finalize;
 
-       klass->private = g_new0( NactAssistantImportClassPrivate, 1 );
-
        assist_class = BASE_ASSISTANT_CLASS( klass );
        assist_class->apply = assistant_apply;
        assist_class->prepare = assistant_prepare;
@@ -317,7 +309,7 @@ instance_finalize( GObject *window )
  * Run the assistant.
  */
 void
-nact_assistant_import_run( BaseWindow *main_window )
+nact_assistant_import_run( NactMainWindow *main_window )
 {
        NactAssistantImport *assistant;
        gboolean esc_quit, esc_confirm;
@@ -328,7 +320,7 @@ nact_assistant_import_run( BaseWindow *main_window )
        esc_confirm = na_settings_get_boolean( NA_IPREFS_ASSISTANT_ESC_CONFIRM, NULL, NULL );
 
        assistant = g_object_new( NACT_TYPE_ASSISTANT_IMPORT,
-                       BASE_PROP_PARENT,          main_window,
+                       BASE_PROP_MAIN_WINDOW,     main_window,
                        BASE_PROP_HAS_OWN_BUILDER, TRUE,
                        BASE_PROP_XMLUI_FILENAME,  st_xmlui_filename,
                        BASE_PROP_TOPLEVEL_NAME,   st_toplevel_name,
@@ -664,7 +656,7 @@ assistant_apply( BaseAssistant *wnd, GtkAssistant *assistant )
 
        g_debug( "%s: window=%p, assistant=%p", thisfn, ( void * ) wnd, ( void * ) assistant );
        window = NACT_ASSISTANT_IMPORT( wnd );
-       g_object_get( G_OBJECT( window ), BASE_PROP_PARENT, &main_window, NULL );
+       g_object_get( G_OBJECT( window ), BASE_PROP_MAIN_WINDOW, &main_window, NULL );
        application = NACT_APPLICATION( base_window_get_application( main_window ));
        updater = nact_application_get_updater( application );
 
diff --git a/src/nact/nact-assistant-import.h b/src/nact/nact-assistant-import.h
index a08d07b..2dbeb4e 100644
--- a/src/nact/nact-assistant-import.h
+++ b/src/nact/nact-assistant-import.h
@@ -37,6 +37,7 @@
  */
 
 #include "base-assistant.h"
+#include "nact-main-window-def.h"
 
 G_BEGIN_DECLS
 
@@ -56,18 +57,15 @@ typedef struct {
 }
        NactAssistantImport;
 
-typedef struct _NactAssistantImportClassPrivate   NactAssistantImportClassPrivate;
-
 typedef struct {
        /*< private >*/
-       BaseAssistantClass               parent;
-       NactAssistantImportClassPrivate *private;
+       BaseAssistantClass          parent;
 }
        NactAssistantImportClass;
 
 GType nact_assistant_import_get_type( void );
 
-void  nact_assistant_import_run( BaseWindow *main );
+void  nact_assistant_import_run     ( NactMainWindow *main_window );
 
 G_END_DECLS
 
diff --git a/src/nact/nact-assistant-import.ui b/src/nact/nact-assistant-import.ui
index 46fa275..35d3bdf 100644
--- a/src/nact/nact-assistant-import.ui
+++ b/src/nact/nact-assistant-import.ui
@@ -1,14 +1,16 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.16.1 -->
 <interface>
-  <requires lib="gtk+" version="2.20"/>
-  <!-- interface-naming-policy toplevel-contextual -->
+  <requires lib="gtk+" version="3.4"/>
   <object class="GtkAssistant" id="ImportAssistant">
+    <property name="can_focus">False</property>
     <property name="title" translatable="yes">Importing actions</property>
     <property name="modal">True</property>
     <property name="type_hint">dialog</property>
     <child>
       <object class="GtkLabel" id="p0-l1-label1">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <property name="label" translatable="yes">This assistant will guide you through the process of 
importing items, actions or menus.</property>
         <property name="wrap">True</property>
       </object>
@@ -17,181 +19,189 @@
       </packing>
     </child>
     <child>
-      <object class="GtkVBox" id="p1-l1-vbox1">
+      <object class="GtkAlignment" id="p1-l1-vbox1">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <child>
-          <object class="GtkAlignment" id="p1-l2-alignment1">
+          <object class="GtkFileChooserWidget" id="ImportFileChooser">
             <property name="visible">True</property>
-            <child>
-              <object class="GtkFileChooserWidget" id="ImportFileChooser">
-                <property name="visible">True</property>
-                <property name="use_preview_label">False</property>
-                <property name="preview_widget_active">False</property>
-                <property name="local_only">False</property>
-                <property name="select_multiple">True</property>
-              </object>
-            </child>
+            <property name="can_focus">False</property>
+            <property name="local_only">False</property>
+            <property name="preview_widget_active">False</property>
+            <property name="select_multiple">True</property>
+            <property name="use_preview_label">False</property>
           </object>
-          <packing>
-            <property name="position">0</property>
-          </packing>
         </child>
       </object>
       <packing>
         <property name="title" translatable="yes">Selecting files to import</property>
-        <property name="page_type">content</property>
       </packing>
     </child>
     <child>
-      <object class="GtkVBox" id="p2-l1-vbox1">
+      <object class="GtkAlignment" id="p2-l1-vbox1">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <child>
-          <object class="GtkAlignment" id="p2-l2-alignment1">
+          <object class="GtkGrid" id="grid1">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="row_spacing">2</property>
             <child>
-              <object class="GtkVBox" id="p2-l3-vbox1">
+              <object class="GtkLabel" id="p2-l4-label1">
                 <property name="visible">True</property>
-                <property name="spacing">10</property>
-                <child>
-                  <object class="GtkLabel" id="p2-l4-label1">
-                    <property name="visible">True</property>
-                    <property name="xalign">0</property>
-                    <property name="label" translatable="yes">What should I do when importing an item whose 
ID already exists ?</property>
-                    <property name="use_markup">True</property>
-                    <property name="wrap">True</property>
-                    <attributes>
-                      <attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
-                    </attributes>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkTreeView" id="p2-AskTreeView">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                        <property name="headers_visible">False</property>
-                    <property name="rules_hint">True</property>
-                    <property name="show_expanders">False</property>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="position">1</property>
-                  </packing>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">What should I do when importing an item whose ID 
already exists ?</property>
+                <property name="use_markup">True</property>
+                <property name="wrap">True</property>
+                <attributes>
+                  <attribute name="weight" value="bold"/>
+                </attributes>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkTreeView" id="p2-AskTreeView">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="hexpand">True</property>
+                <property name="vexpand">True</property>
+                <property name="headers_visible">False</property>
+                <property name="rules_hint">True</property>
+                <property name="show_expanders">False</property>
+                <child internal-child="selection">
+                  <object class="GtkTreeSelection" id="treeview-selection"/>
                 </child>
               </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
             </child>
           </object>
-          <packing>
-            <property name="position">0</property>
-          </packing>
         </child>
       </object>
       <packing>
         <property name="title" translatable="yes">Managing duplicates</property>
-        <property name="page_type">content</property>
       </packing>
     </child>
     <child>
-      <object class="GtkVBox" id="p3-l1-vbox1">
+      <object class="GtkAlignment" id="p3-l1-vbox1">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <child>
-          <object class="GtkAlignment" id="p3-l2-alignment1">
+          <object class="GtkScrolledWindow" id="p3-l3-scrolledwindow1">
             <property name="visible">True</property>
+            <property name="can_focus">True</property>
             <child>
-              <object class="GtkScrolledWindow" id="p3-l3-scrolledwindow1">
+              <object class="GtkViewport" id="p3-l4-viewport1">
                 <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="hscrollbar_policy">automatic</property>
-                <property name="vscrollbar_policy">automatic</property>
+                <property name="can_focus">False</property>
+                <property name="shadow_type">none</property>
                 <child>
-                  <object class="GtkViewport" id="p3-l4-viewport1">
+                  <object class="GtkBox" id="p3-ConfirmVBox">
                     <property name="visible">True</property>
-                    <property name="shadow_type">GTK_SHADOW_NONE</property>
+                    <property name="can_focus">False</property>
+                    <property name="orientation">vertical</property>
+                    <property name="spacing">6</property>
                     <child>
-                      <object class="GtkVBox" id="p3-ConfirmVBox">
+                      <object class="GtkGrid" id="grid2">
                         <property name="visible">True</property>
-                        <property name="spacing">15</property>
+                        <property name="can_focus">False</property>
                         <child>
-                          <object class="GtkVBox" id="p3-l6-vbox1">
+                          <object class="GtkLabel" id="p3-l7-label1">
                             <property name="visible">True</property>
-                            <property name="spacing">8</property>
-                            <child>
-                              <object class="GtkLabel" id="p3-l7-label1">
-                                <property name="visible">True</property>
-                                <property name="xalign">0</property>
-                                <property name="label" translatable="yes">About to import selected 
files:</property>
-                                <attributes>
-                                  <attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
-                                </attributes>
-                              </object>
-                              <packing>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="p3-ConfirmFilesList">
-                                <property name="visible">True</property>
-                                <property name="xalign">0</property>
-                                <property name="xpad">15</property>
-                              </object>
-                              <packing>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
+                            <property name="can_focus">False</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">About to import selected 
files:</property>
+                            <attributes>
+                              <attribute name="weight" value="bold"/>
+                            </attributes>
                           </object>
                           <packing>
-                            <property name="expand">False</property>
-                            <property name="position">0</property>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">0</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkVBox" id="p3-l6-vbox2">
+                          <object class="GtkLabel" id="p3-ConfirmFilesList">
                             <property name="visible">True</property>
-                            <property name="spacing">8</property>
-                            <child>
-                              <object class="GtkLabel" id="p3-l7-label2">
-                                <property name="visible">True</property>
-                                <property name="xalign">0</property>
-                                <property name="label" translatable="yes">When importing an item whose ID 
already exists:</property>
-                                <property name="wrap">True</property>
-                                <attributes>
-                                  <attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
-                                </attributes>
-                              </object>
-                              <packing>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="p3-ConfirmImportMode">
-                                <property name="visible">True</property>
-                                <property name="xalign">0</property>
-                                <property name="xpad">15</property>
-                                <property name="wrap">True</property>
-                              </object>
-                              <packing>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
+                            <property name="can_focus">False</property>
+                            <property name="xalign">0</property>
+                            <property name="xpad">15</property>
                           </object>
                           <packing>
-                            <property name="expand">False</property>
-                            <property name="position">1</property>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">1</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
                           </packing>
                         </child>
                       </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkGrid" id="grid3">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkLabel" id="p3-l7-label2">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">When importing an item whose ID 
already exists:</property>
+                            <property name="wrap">True</property>
+                            <attributes>
+                              <attribute name="weight" value="bold"/>
+                            </attributes>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">0</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="p3-ConfirmImportMode">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="xalign">0</property>
+                            <property name="xpad">15</property>
+                            <property name="wrap">True</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">1</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
                     </child>
                   </object>
                 </child>
               </object>
             </child>
           </object>
-          <packing>
-            <property name="position">0</property>
-          </packing>
         </child>
       </object>
       <packing>
@@ -200,50 +210,44 @@
       </packing>
     </child>
     <child>
-      <object class="GtkVBox" id="p4-l1-vbox1">
+      <object class="GtkAlignment" id="p4-l1-vbox1">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <child>
-          <object class="GtkAlignment" id="p4-l2-alignment1">
+          <object class="GtkScrolledWindow" id="p4-l3-scrolledwindow1">
             <property name="visible">True</property>
+            <property name="can_focus">True</property>
             <child>
-              <object class="GtkScrolledWindow" id="p4-l3-scrolledwindow1">
+              <object class="GtkViewport" id="p4-l4-viewport1">
                 <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="hscrollbar_policy">automatic</property>
-                <property name="vscrollbar_policy">automatic</property>
+                <property name="can_focus">False</property>
+                <property name="shadow_type">none</property>
                 <child>
-                  <object class="GtkViewport" id="p4-l4-viewport1">
+                  <object class="GtkBox" id="p4-SummaryVBox">
                     <property name="visible">True</property>
-                    <property name="shadow_type">GTK_SHADOW_NONE</property>
+                    <property name="can_focus">False</property>
+                    <property name="orientation">vertical</property>
                     <child>
-                      <object class="GtkVBox" id="p4-SummaryVBox">
+                      <object class="GtkLabel" id="p4-l6-label1">
                         <property name="visible">True</property>
-                        <property name="orientation">vertical</property>
-                        <property name="spacing">8</property>
-                        <child>
-                          <object class="GtkLabel" id="p4-l6-label1">
-                            <property name="visible">True</property>
-                            <property name="xalign">0</property>
-                            <property name="label" translatable="yes">Selected files have been 
proceeded:</property>
-                            <attributes>
-                              <attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
-                            </attributes>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Selected files have been 
proceeded:</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                        </attributes>
                       </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
                     </child>
                   </object>
                 </child>
               </object>
             </child>
           </object>
-          <packing>
-            <property name="position">0</property>
-          </packing>
         </child>
       </object>
       <packing>
@@ -251,5 +255,10 @@
         <property name="title" translatable="yes">Import is done</property>
       </packing>
     </child>
+    <child internal-child="action_area">
+      <object class="GtkBox" id="assistant-action_area1">
+        <property name="can_focus">False</property>
+      </object>
+    </child>
   </object>
 </interface>
diff --git a/src/nact/nact-clipboard.c b/src/nact/nact-clipboard.c
index 348dbc6..5126f96 100644
--- a/src/nact/nact-clipboard.c
+++ b/src/nact/nact-clipboard.c
@@ -34,13 +34,14 @@
 #include <gtk/gtk.h>
 #include <string.h>
 
-#include <api/na-object-api.h>
+#include "api/na-object-api.h"
 
-#include <core/na-exporter.h>
-#include <core/na-export-format.h>
+#include "core/na-exporter.h"
+#include "core/na-export-format.h"
 
 #include "nact-application.h"
 #include "nact-export-ask.h"
+#include "nact-main-window.h"
 #include "nact-tree-model.h"
 #include "nact-clipboard.h"
 
@@ -70,12 +71,12 @@ typedef struct {
        PrimaryData;
 
 struct _NactClipboardPrivate {
-       gboolean      dispose_has_run;
-       BaseWindow   *window;
-       GtkClipboard *dnd;
-       GtkClipboard *primary;
-       PrimaryData  *primary_data;
-       gboolean      primary_got;
+       gboolean        dispose_has_run;
+       NactMainWindow *window;
+       GtkClipboard   *dnd;
+       GtkClipboard   *primary;
+       PrimaryData    *primary_data;
+       gboolean        primary_got;
 };
 
 #define NACT_CLIPBOARD_ATOM                            gdk_atom_intern( "_NACT_CLIPBOARD", FALSE )
@@ -257,12 +258,10 @@ instance_finalize( GObject *instance )
  * Returns: a new #NactClipboard object.
  */
 NactClipboard *
-nact_clipboard_new( BaseWindow *window )
+nact_clipboard_new( NactMainWindow *window )
 {
        NactClipboard *clipboard;
 
-       g_return_val_if_fail( BASE_IS_WINDOW( window ), NULL );
-
        clipboard = g_object_new( NACT_TYPE_CLIPBOARD, NULL );
 
        clipboard->private->window = window;
@@ -605,7 +604,8 @@ export_row_object( NactClipboard *clipboard, NAObject *object, const gchar *dest
                item = NA_OBJECT_ITEM( na_object_get_parent( object ));
        }
 
-       application = NACT_APPLICATION( base_window_get_application( clipboard->private->window ));
+       application = NACT_APPLICATION(
+                       gtk_window_get_application( GTK_WINDOW( clipboard->private->window )));
        updater = nact_application_get_updater( application );
 
        index = g_list_index( *exported, ( gconstpointer ) item );
@@ -621,7 +621,7 @@ export_row_object( NactClipboard *clipboard, NAObject *object, const gchar *dest
 
                if( !strcmp( format, EXPORTER_FORMAT_ASK )){
                        g_free( format );
-                       format = nact_export_ask_user( clipboard->private->window, item, first );
+                       format = nact_export_ask_user( item, first );
                        g_return_val_if_fail( format && strlen( format ), NULL );
                }
 
diff --git a/src/nact/nact-clipboard.h b/src/nact/nact-clipboard.h
index 3ab66a6..67a023f 100644
--- a/src/nact/nact-clipboard.h
+++ b/src/nact/nact-clipboard.h
@@ -42,7 +42,7 @@
 
 #include <gtk/gtk.h>
 
-#include "base-window.h"
+#include "nact-main-window-def.h"
 
 G_BEGIN_DECLS
 
@@ -88,21 +88,37 @@ enum {
        CLIPBOARD_MODE_COPY
 };
 
-GType          nact_clipboard_get_type( void );
+GType          nact_clipboard_get_type      ( void );
 
-NactClipboard *nact_clipboard_new( BaseWindow *window );
+NactClipboard *nact_clipboard_new           ( NactMainWindow *window );
 
-void           nact_clipboard_dnd_set( NactClipboard *clipboard, guint target, GList *rows, const gchar 
*folder, gboolean copy );
-GList         *nact_clipboard_dnd_get_data( NactClipboard *clipboard, gboolean *copy );
-gchar         *nact_clipboard_dnd_get_text( NactClipboard *clipboard, GList *rows );
-void           nact_clipboard_dnd_drag_end( NactClipboard *clipboard );
-void           nact_clipboard_dnd_clear( NactClipboard *clipboard );
+void           nact_clipboard_dnd_set       ( NactClipboard *clipboard,
+                                                                                                       guint 
target,
+                                                                                                       GList 
*rows,
+                                                                                                       const 
gchar *folder,
+                                                                                                       
gboolean copy );
 
-void           nact_clipboard_primary_set( NactClipboard *clipboard, GList *items, gint mode );
-GList         *nact_clipboard_primary_get( NactClipboard *clipboard, gboolean *relabel );
-void           nact_clipboard_primary_counts( NactClipboard *clipboard, guint *actions, guint *profiles, 
guint *menus );
+GList         *nact_clipboard_dnd_get_data  ( NactClipboard *clipboard, gboolean *copy );
 
-void           nact_clipboard_dump( NactClipboard *clipboard );
+gchar         *nact_clipboard_dnd_get_text  ( NactClipboard *clipboard, GList *rows );
+
+void           nact_clipboard_dnd_drag_end  ( NactClipboard *clipboard );
+
+void           nact_clipboard_dnd_clear     ( NactClipboard *clipboard );
+
+void           nact_clipboard_primary_set   ( NactClipboard *clipboard,
+                                                                                                       GList 
*items,
+                                                                                                       gint 
mode );
+
+GList         *nact_clipboard_primary_get   ( NactClipboard *clipboard,
+                                                                                                       
gboolean *relabel );
+
+void           nact_clipboard_primary_counts( NactClipboard *clipboard,
+                                                                                                       guint 
*actions,
+                                                                                                       guint 
*profiles,
+                                                                                                       guint 
*menus );
+
+void           nact_clipboard_dump          ( NactClipboard *clipboard );
 
 G_END_DECLS
 
diff --git a/src/nact/nact-confirm-logout.c b/src/nact/nact-confirm-logout.c
index 0415862..f2a6fd8 100644
--- a/src/nact/nact-confirm-logout.c
+++ b/src/nact/nact-confirm-logout.c
@@ -31,14 +31,11 @@
 #include <config.h>
 #endif
 
-#include "nact-confirm-logout.h"
-#include "nact-menubar.h"
+#include "core/na-settings.h"
 
-/* private class data
- */
-struct _NactConfirmLogoutClassPrivate {
-       void *empty;                                            /* so that gcc -pedantic is happy */
-};
+#include "nact-confirm-logout.h"
+#include "nact-main-window-def.h"
+#include "nact-menu-file.h"
 
 /* private instance data
  */
@@ -53,6 +50,7 @@ enum {
        BTN_SAVE_AND_QUIT
 };
 
+static const gchar     *st_xmlui_filename = PKGUIDIR "/nact-confirm-logout.ui";
 static const gchar     *st_toplevel_name  = "ConfirmLogoutDialog";
 static const gchar     *st_wsp_name       = NA_IPREFS_CONFIRM_LOGOUT_WSP;
 
@@ -122,8 +120,6 @@ class_init( NactConfirmLogoutClass *klass )
        object_class->constructed = instance_constructed;
        object_class->dispose = instance_dispose;
        object_class->finalize = instance_finalize;
-
-       klass->private = g_new0( NactConfirmLogoutClassPrivate, 1 );
 }
 
 static void
@@ -227,7 +223,8 @@ nact_confirm_logout_run( NactMainWindow *parent )
        g_debug( "%s: parent=%p", thisfn, ( void * ) parent );
 
        dialog = g_object_new( NACT_TYPE_CONFIRM_LOGOUT,
-                       BASE_PROP_PARENT,        parent,
+                       BASE_PROP_MAIN_WINDOW,        parent,
+                       BASE_PROP_XMLUI_FILENAME, st_xmlui_filename,
                        BASE_PROP_TOPLEVEL_NAME, st_toplevel_name,
                        BASE_PROP_WSP_NAME,      st_wsp_name,
                        NULL );
@@ -300,8 +297,8 @@ on_save_and_quit_clicked( GtkButton *button, NactConfirmLogout *editor )
 
        g_debug( "%s: button=%p, editor=%p", thisfn, ( void * ) button, ( void * ) editor );
 
-       main_window = NACT_MAIN_WINDOW( base_window_get_parent( BASE_WINDOW( editor )));
-       nact_menubar_save_items( BASE_WINDOW( main_window ));
+       main_window = NACT_MAIN_WINDOW( base_window_get_main_window( BASE_WINDOW( editor )));
+       nact_menu_file_save_items( main_window );
 
        close_dialog( editor, TRUE );
 }
diff --git a/src/nact/nact-confirm-logout.h b/src/nact/nact-confirm-logout.h
index dc2b276..bad9711 100644
--- a/src/nact/nact-confirm-logout.h
+++ b/src/nact/nact-confirm-logout.h
@@ -40,7 +40,7 @@
  */
 
 #include "base-dialog.h"
-#include "nact-main-window.h"
+#include "nact-main-window-def.h"
 
 G_BEGIN_DECLS
 
@@ -60,18 +60,15 @@ typedef struct {
 }
        NactConfirmLogout;
 
-typedef struct _NactConfirmLogoutClassPrivate   NactConfirmLogoutClassPrivate;
-
 typedef struct {
        /*< private >*/
-       BaseDialogClass                parent;
-       NactConfirmLogoutClassPrivate *private;
+       BaseDialogClass           parent;
 }
        NactConfirmLogoutClass;
 
 GType    nact_confirm_logout_get_type( void );
 
-gboolean nact_confirm_logout_run( NactMainWindow *parent );
+gboolean nact_confirm_logout_run     ( NactMainWindow *parent );
 
 G_END_DECLS
 
diff --git a/src/nact/nact-confirm-logout.ui b/src/nact/nact-confirm-logout.ui
new file mode 100644
index 0000000..a8da2a4
--- /dev/null
+++ b/src/nact/nact-confirm-logout.ui
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.16.1 -->
+<interface>
+  <requires lib="gtk+" version="3.4"/>
+  <object class="GtkImage" id="ImageLogoutQuit">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-quit</property>
+  </object>
+  <object class="GtkImage" id="ImageLogoutSave">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-save</property>
+  </object>
+  <object class="GtkMessageDialog" id="ConfirmLogoutDialog">
+    <property name="can_focus">False</property>
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">End of session</property>
+    <property name="modal">True</property>
+    <property name="icon_name">nautilus-actions</property>
+    <property name="type_hint">dialog</property>
+    <property name="skip_taskbar_hint">True</property>
+    <property name="skip_pager_hint">True</property>
+    <property name="deletable">False</property>
+    <property name="message_type">question</property>
+    <property name="text">User session is ending, but some modifications are still pending.</property>
+    <property name="secondary_text">&lt;b&gt;You want to save your modifications now, don't you 
?&lt;/b&gt;</property>
+    <property name="secondary_use_markup">True</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox3">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area3">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">center</property>
+            <child>
+              <object class="GtkButton" id="SaveQuitButton">
+                <property name="label" translatable="yes">_Save and quit</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="image">ImageLogoutSave</property>
+                <property name="use_underline">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="QuitNoSaveButton">
+                <property name="label" translatable="yes">_Quit without saving</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="image">ImageLogoutQuit</property>
+                <property name="use_underline">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="CancelQuitButton">
+                <property name="label">gtk-cancel</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="3">SaveQuitButton</action-widget>
+      <action-widget response="1">QuitNoSaveButton</action-widget>
+      <action-widget response="2">CancelQuitButton</action-widget>
+    </action-widgets>
+  </object>
+</interface>
diff --git a/src/nact/nact-export-ask.c b/src/nact/nact-export-ask.c
index 81ff64c..b105963 100644
--- a/src/nact/nact-export-ask.c
+++ b/src/nact/nact-export-ask.c
@@ -33,28 +33,22 @@
 
 #include <glib/gi18n.h>
 
-#include <api/na-object-api.h>
+#include "api/na-object-api.h"
 
-#include <core/na-exporter.h>
-#include <core/na-export-format.h>
-#include <core/na-gtk-utils.h>
-#include <core/na-ioptions-list.h>
+#include "core/na-exporter.h"
+#include "core/na-export-format.h"
+#include "core/na-gtk-utils.h"
+#include "core/na-ioptions-list.h"
 
+#include "base-gtk-utils.h"
 #include "nact-application.h"
 #include "nact-export-ask.h"
-#include "base-gtk-utils.h"
-
-/* private class data
- */
-struct _NactExportAskClassPrivate {
-       void *empty;                                            /* so that gcc -pedantic is happy */
-};
+#include "nact-main-window.h"
 
 /* private instance data
  */
 struct _NactExportAskPrivate {
        gboolean      dispose_has_run;
-       BaseWindow   *parent;
        gboolean      preferences_locked;
        NAObjectItem *item;
        gchar        *format;
@@ -63,7 +57,7 @@ struct _NactExportAskPrivate {
        gboolean      keep_last_choice_mandatory;
 };
 
-static const gchar     *st_xmlui_filename = PKGUIDIR "/nact-assistant-export.ui";
+static const gchar     *st_xmlui_filename = PKGUIDIR "/nact-export-ask.ui";
 static const gchar     *st_toplevel_name  = "ExportAskDialog";
 static const gchar     *st_wsp_name       = NA_IPREFS_EXPORT_ASK_USER_WSP;
 
@@ -145,8 +139,6 @@ class_init( NactExportAskClass *klass )
        object_class->constructed = instance_constructed;
        object_class->dispose = instance_dispose;
        object_class->finalize = instance_finalize;
-
-       klass->private = g_new0( NactExportAskClassPrivate, 1 );
 }
 
 static void
@@ -281,7 +273,6 @@ instance_finalize( GObject *dialog )
 
 /**
  * nact_export_ask_user:
- * @parent: the NactAssistant parent of this dialog.
  * @item: the NAObjectItem to be exported.
  * @first: whether this is the first call of a serie.
  *  On a first call, the user is really asked for his choice.
@@ -301,7 +292,7 @@ instance_finalize( GObject *dialog )
  * becomes his new preferred export format.
  */
 gchar *
-nact_export_ask_user( BaseWindow *parent, NAObjectItem *item, gboolean first )
+nact_export_ask_user( NAObjectItem *item, gboolean first )
 {
        static const gchar *thisfn = "nact_export_ask_user";
        NactExportAsk *editor;
@@ -310,11 +301,8 @@ nact_export_ask_user( BaseWindow *parent, NAObjectItem *item, gboolean first )
        int code;
        gchar *format;
 
-       g_return_val_if_fail( BASE_IS_WINDOW( parent ), NULL );
-
-       g_debug( "%s: parent=%p, item=%p (%s), first=%s",
+       g_debug( "%s: item=%p (%s), first=%s",
                        thisfn,
-                       ( void * ) parent,
                        ( void * ) item, G_OBJECT_TYPE_NAME( item ),
                        first ? "True":"False" );
 
@@ -323,7 +311,6 @@ nact_export_ask_user( BaseWindow *parent, NAObjectItem *item, gboolean first )
 
        if( first || !keep ){
                editor = g_object_new( NACT_TYPE_EXPORT_ASK,
-                               BASE_PROP_PARENT,         parent,
                                BASE_PROP_XMLUI_FILENAME, st_xmlui_filename,
                                BASE_PROP_TOPLEVEL_NAME,  st_toplevel_name,
                                BASE_PROP_WSP_NAME,       st_wsp_name,
@@ -333,7 +320,6 @@ nact_export_ask_user( BaseWindow *parent, NAObjectItem *item, gboolean first )
                editor->private->format_mandatory = mandatory;
                editor->private->keep_last_choice = keep;
                editor->private->keep_last_choice_mandatory = keep_mandatory;
-               editor->private->parent = parent;
                editor->private->item = item;
 
                are_locked = na_settings_get_boolean( NA_IPREFS_ADMIN_PREFERENCES_LOCKED, NULL, &mandatory );
@@ -373,12 +359,8 @@ on_base_initialize_gtk( NactExportAsk *editor, GtkDialog *toplevel, gpointer use
                g_debug( "%s: dialog=%p, toplevel=%p, user_data=%p",
                                thisfn, ( void * ) editor, ( void * ) toplevel, ( void * ) user_data );
 
-               container = base_window_get_widget( BASE_WINDOW( editor ), "ExportFormatAskVBox" );
+               container = base_window_get_widget( BASE_WINDOW( editor ), "export-format-ask" );
                na_ioptions_list_gtk_init( NA_IOPTIONS_LIST( editor ), container, FALSE );
-
-#if !GTK_CHECK_VERSION( 2,22,0 )
-               gtk_dialog_set_has_separator( toplevel, FALSE );
-#endif
        }
 }
 
@@ -413,7 +395,7 @@ on_base_initialize_window( NactExportAsk *editor, gpointer user_data )
                g_free( label );
                g_free( item_label );
 
-               widget = base_window_get_widget( BASE_WINDOW( editor ), "ExportFormatAskVBox" );
+               widget = base_window_get_widget( BASE_WINDOW( editor ), "export-format-ask" );
                na_ioptions_list_set_editable(
                                NA_IOPTIONS_LIST( editor ), widget,
                                !priv->format_mandatory && !priv->preferences_locked );
@@ -488,7 +470,7 @@ get_export_format( NactExportAsk *editor )
        NAIOption *format;
        gchar *format_id;
 
-       widget = base_window_get_widget( BASE_WINDOW( editor ), "ExportFormatAskVBox" );
+       widget = base_window_get_widget( BASE_WINDOW( editor ), "export-format-ask" );
        format = na_ioptions_list_get_selected( NA_IOPTIONS_LIST( editor ), widget );
        g_return_val_if_fail( NA_IS_EXPORT_FORMAT( format ), 0 );
 
diff --git a/src/nact/nact-export-ask.h b/src/nact/nact-export-ask.h
index 6168b15..8055888 100644
--- a/src/nact/nact-export-ask.h
+++ b/src/nact/nact-export-ask.h
@@ -45,7 +45,7 @@
  * - a 'NoImport' capability is provided by clicking on Cancel button.
  */
 
-#include <api/na-object-item.h>
+#include "api/na-object-item.h"
 
 #include "base-dialog.h"
 
@@ -67,18 +67,16 @@ typedef struct {
 }
        NactExportAsk;
 
-typedef struct _NactExportAskClassPrivate   NactExportAskClassPrivate;
-
 typedef struct {
        /*< private >*/
-       BaseDialogClass            parent;
-       NactExportAskClassPrivate *private;
+       BaseDialogClass       parent;
 }
        NactExportAskClass;
 
 GType  nact_export_ask_get_type( void );
 
-gchar *nact_export_ask_user    ( BaseWindow *window, NAObjectItem *item, gboolean first );
+gchar *nact_export_ask_user    ( NAObjectItem *item,
+                                                                               gboolean first );
 
 G_END_DECLS
 
diff --git a/src/nact/nact-export-ask.ui b/src/nact/nact-export-ask.ui
new file mode 100644
index 0000000..8f40f75
--- /dev/null
+++ b/src/nact/nact-export-ask.ui
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.16.1 -->
+<interface>
+  <requires lib="gtk+" version="3.4"/>
+  <object class="GtkDialog" id="ExportAskDialog">
+    <property name="can_focus">False</property>
+    <property name="type_hint">dialog</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox2">
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area2">
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="CancelButton">
+                <property name="label">gtk-cancel</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="OKButton">
+                <property name="label">gtk-ok</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkGrid" id="grid1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="row_spacing">3</property>
+            <child>
+              <object class="GtkSeparator" id="separator1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">3</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="AskKeepChoiceButton">
+                <property name="label" translatable="yes">Re_member my choice in future export 
operations</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_underline">True</property>
+                <property name="xalign">0</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">4</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="ExportAskLabel">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="xpad">6</property>
+                <property name="wrap">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label47">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="xpad">6</property>
+                <property name="label" translatable="yes">Which format should I choose to export it 
?</property>
+                <property name="wrap">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkBox" id="export-format-ask">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="orientation">vertical</property>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">2</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">CancelButton</action-widget>
+      <action-widget response="0">OKButton</action-widget>
+    </action-widgets>
+  </object>
+</interface>
diff --git a/src/nact/nact-iaction-tab.c b/src/nact/nact-iaction-tab.c
index f15b820..1360b55 100644
--- a/src/nact/nact-iaction-tab.c
+++ b/src/nact/nact-iaction-tab.c
@@ -34,18 +34,20 @@
 #include <glib/gi18n.h>
 #include <string.h>
 
-#include <api/na-core-utils.h>
-#include <api/na-object-api.h>
+#include "api/na-core-utils.h"
+#include "api/na-object-api.h"
 
-#include <core/na-io-provider.h>
+#include "core/na-gtk-utils.h"
+#include "core/na-io-provider.h"
 
-#include "base-window.h"
 #include "nact-application.h"
-#include "nact-main-statusbar.h"
+#include "nact-statusbar.h"
 #include "base-gtk-utils.h"
 #include "nact-main-tab.h"
+#include "nact-main-window.h"
 #include "nact-iaction-tab.h"
 #include "nact-icon-chooser.h"
+#include "nact-tree-view.h"
 
 /* private interface data
  */
@@ -71,13 +73,10 @@ static guint st_initializations = 0;        /* interface initialisation count */
 static GType        register_type( void );
 static void         interface_base_init( NactIActionTabInterface *klass );
 static void         interface_base_finalize( NactIActionTabInterface *klass );
-
-static void         on_base_initialize_gtk( NactIActionTab *instance, GtkWindow *toplevel, gpointer 
user_data );
-static void         on_base_initialize_window( NactIActionTab *instance, gpointer user_data );
-
-static void         on_tree_view_content_changed( NactIActionTab *instance, NAObject *object, gpointer 
user_data );
-static void         on_main_selection_changed( NactIActionTab *instance, GList *selected_items, gpointer 
user_data );
-
+static void         initialize_gtk( NactIActionTab *instance );
+static void         initialize_window( NactIActionTab *instance );
+static void         on_main_item_updated( NactIActionTab *instance, NAIContext *context, guint data, void 
*empty );
+static void         on_tree_selection_changed( NactTreeView *tview, GList *selected_items, NactIActionTab 
*instance );
 static void         on_target_selection_toggled( GtkToggleButton *button, NactIActionTab *instance );
 static void         on_target_location_toggled( GtkToggleButton *button, NactIActionTab *instance );
 static void         check_for_label( NactIActionTab *instance, GtkEntry *entry, const gchar *label );
@@ -130,7 +129,7 @@ register_type( void )
 
        type = g_type_register_static( G_TYPE_INTERFACE, "NactIActionTab", &info, 0 );
 
-       g_type_interface_add_prerequisite( type, BASE_TYPE_WINDOW );
+       g_type_interface_add_prerequisite( type, GTK_TYPE_APPLICATION_WINDOW );
 
        return( type );
 }
@@ -170,7 +169,6 @@ interface_base_finalize( NactIActionTabInterface *klass )
  * @instance: this #NactIActionTab instance.
  *
  * Initialize the interface
- * Connect to #BaseWindow signals
  */
 void
 nact_iaction_tab_init( NactIActionTab *instance )
@@ -178,25 +176,14 @@ nact_iaction_tab_init( NactIActionTab *instance )
        static const gchar *thisfn = "nact_iaction_tab_init";
        IActionData *data;
 
-       g_return_if_fail( NACT_IS_IACTION_TAB( instance ));
+       g_return_if_fail( instance && NACT_IS_IACTION_TAB( instance ));
 
        g_debug( "%s: instance=%p (%s)",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
-
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       BASE_SIGNAL_INITIALIZE_GTK,
-                       G_CALLBACK( on_base_initialize_gtk ));
-
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       BASE_SIGNAL_INITIALIZE_WINDOW,
-                       G_CALLBACK( on_base_initialize_window ));
+                       thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
        nact_main_tab_init( NACT_MAIN_WINDOW( instance ), TAB_ACTION );
+       initialize_gtk( instance );
+       initialize_window( instance );
 
        data = get_iaction_data( instance );
        data->on_selection_change = FALSE;
@@ -219,134 +206,86 @@ nact_iaction_tab_init( NactIActionTab *instance )
  * Icon Chooser).
  */
 static void
-on_base_initialize_gtk( NactIActionTab *instance, GtkWindow *toplevel, void *user_data )
+initialize_gtk( NactIActionTab *instance )
 {
-       static const gchar *thisfn = "nact_iaction_tab_on_base_initialize_gtk";
-       GtkFrame *frame;
-       GtkButton *button;
+       static const gchar *thisfn = "nact_iaction_tab_initialize_gtk";
+       GtkWidget *frame;
+       GtkWidget *button;
        gint size;
-
-/* gtk_widget_size_request() is deprecated since Gtk+ 3.0
- * see http://library.gnome.org/devel/gtk/unstable/GtkWidget.html#gtk-widget-render-icon
- * and http://git.gnome.org/browse/gtk+/commit/?id=07eeae15825403037b7df139acf9bfa104d5559d
- */
-#if GTK_CHECK_VERSION( 2, 91, 7 )
        GtkRequisition minimal_size, natural_size;
-#else
-       GtkRequisition requisition;
-#endif
 
        g_return_if_fail( NACT_IS_IACTION_TAB( instance ));
 
-       g_debug( "%s: instance=%p (%s), toplevel=%p, user_data=%p",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) toplevel,
-                       ( void * ) user_data );
+       g_debug( "%s: instance=%p (%s)",
+                       thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
-       button = GTK_BUTTON( base_window_get_widget( BASE_WINDOW( instance ), "ActionIconBrowseButton" ));
-       frame = GTK_FRAME( base_window_get_widget( BASE_WINDOW( instance ), "ActionIconFrame" ));
+       button = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ActionIconBrowseButton" );
+       g_return_if_fail( button && GTK_IS_BUTTON( button ));
+       frame = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ActionIconFrame" );
+       g_return_if_fail( frame && GTK_IS_FRAME( frame ));
 
-#if GTK_CHECK_VERSION( 2, 91, 7 )
        gtk_widget_get_preferred_size( GTK_WIDGET( button ), &minimal_size, &natural_size );
        size = MAX( minimal_size.height, natural_size.height );
-#else
-       gtk_widget_size_request( GTK_WIDGET( button ), &requisition );
-       size = requisition.height;
-#endif
-
        gtk_widget_set_size_request( GTK_WIDGET( frame ), size, size );
-       gtk_frame_set_shadow_type( frame, GTK_SHADOW_IN );
+       gtk_frame_set_shadow_type( GTK_FRAME( frame ), GTK_SHADOW_IN );
 }
 
 static void
-on_base_initialize_window( NactIActionTab *instance, void *user_data )
+initialize_window( NactIActionTab *instance )
 {
-       static const gchar *thisfn = "nact_iaction_tab_on_base_initialize_window";
-       GtkWidget *label_widget, *tooltip_widget, *icon_entry;
-       GtkWidget *button;
+       static const gchar *thisfn = "nact_iaction_tab_initialize_window";
+       NactTreeView *tview;
 
        g_return_if_fail( NACT_IS_IACTION_TAB( instance ));
 
-       g_debug( "%s: instance=%p (%s), user_data=%p",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) user_data );
+       g_debug( "%s: instance=%p (%s)",
+                       thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       MAIN_SIGNAL_SELECTION_CHANGED,
-                       G_CALLBACK( on_main_selection_changed ));
+       tview = nact_main_window_get_items_view( NACT_MAIN_WINDOW( instance ));
 
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       MAIN_SIGNAL_ITEM_UPDATED,
-                       G_CALLBACK( on_tree_view_content_changed ));
-
-       button = base_window_get_widget( BASE_WINDOW( instance ), "ActionTargetSelectionButton" );
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( button ),
-                       "toggled",
-                       G_CALLBACK( on_target_selection_toggled ));
-
-       button = base_window_get_widget( BASE_WINDOW( instance ), "ActionTargetLocationButton" );
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( button ),
-                       "toggled",
-                       G_CALLBACK( on_target_location_toggled ));
-
-       label_widget = base_window_get_widget( BASE_WINDOW( instance ), "ActionMenuLabelEntry" );
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( label_widget ),
-                       "changed",
-                       G_CALLBACK( on_label_changed ));
-
-       button = base_window_get_widget( BASE_WINDOW( instance ), "ActionTargetToolbarButton" );
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( button ),
-                       "toggled",
-                       G_CALLBACK( on_target_toolbar_toggled ));
-
-       button = base_window_get_widget( BASE_WINDOW( instance ), "ToolbarSameLabelButton" );
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( button ),
-                       "toggled",
-                       G_CALLBACK( on_toolbar_same_label_toggled ));
+       g_signal_connect(
+                       tview, TREE_SIGNAL_SELECTION_CHANGED,
+                       G_CALLBACK( on_tree_selection_changed ), instance );
 
-       label_widget = base_window_get_widget( BASE_WINDOW( instance ), "ActionToolbarLabelEntry" );
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( label_widget ),
-                       "changed",
-                       G_CALLBACK( on_toolbar_label_changed ));
-
-       tooltip_widget = base_window_get_widget( BASE_WINDOW( instance ), "ActionTooltipEntry" );
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( tooltip_widget ),
-                       "changed",
-                       G_CALLBACK( on_tooltip_changed ));
-
-       icon_entry = base_window_get_widget( BASE_WINDOW( instance ), "ActionIconEntry" );
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( icon_entry ),
-                       "changed",
-                       G_CALLBACK( on_icon_changed ));
-
-       button = base_window_get_widget( BASE_WINDOW( instance ), "ActionIconBrowseButton" );
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( button ),
-                       "clicked",
-                       G_CALLBACK( on_icon_browse ));
+       g_signal_connect(
+                       instance, MAIN_SIGNAL_ITEM_UPDATED,
+                       G_CALLBACK( on_main_item_updated ), NULL );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "ActionTargetSelectionButton",
+                       "toggled", G_CALLBACK( on_target_selection_toggled ), instance );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "ActionTargetLocationButton",
+                       "toggled", G_CALLBACK( on_target_location_toggled ), instance );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "ActionMenuLabelEntry",
+                       "changed", G_CALLBACK( on_label_changed ), instance );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "ActionTargetToolbarButton",
+                       "toggled", G_CALLBACK( on_target_toolbar_toggled ), instance );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "ToolbarSameLabelButton",
+                       "toggled", G_CALLBACK( on_toolbar_same_label_toggled ), instance );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "ActionToolbarLabelEntry",
+                       "changed", G_CALLBACK( on_toolbar_label_changed ), instance );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "ActionTooltipEntry",
+                       "changed", G_CALLBACK( on_tooltip_changed ), instance );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "ActionIconEntry",
+                       "changed", G_CALLBACK( on_icon_changed ), instance );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "ActionIconBrowseButton",
+                       "clicked", G_CALLBACK( on_icon_browse ), instance );
 }
 
 /**
@@ -366,7 +305,7 @@ nact_iaction_tab_has_label( NactIActionTab *instance )
 
        g_return_val_if_fail( NACT_IS_IACTION_TAB( instance ), FALSE );
 
-       label_widget = base_window_get_widget( BASE_WINDOW( instance ), "ActionMenuLabelEntry" );
+       label_widget = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ActionMenuLabelEntry" );
        label = gtk_entry_get_text( GTK_ENTRY( label_widget ));
        has_label = ( g_utf8_strlen( label, -1 ) > 0 );
 
@@ -374,25 +313,26 @@ nact_iaction_tab_has_label( NactIActionTab *instance )
 }
 
 static void
-on_tree_view_content_changed( NactIActionTab *instance, NAObject *object, gpointer user_data )
+on_main_item_updated( NactIActionTab *instance, NAIContext *context, guint data, void *empty )
 {
        GtkWidget *label_widget;
        gchar *label;
 
-       g_return_if_fail( NACT_IS_IACTION_TAB( instance ));
+       g_return_if_fail( instance && NACT_IS_IACTION_TAB( instance ));
 
-       if( object && NA_IS_OBJECT_ITEM( object )){
-               label_widget = base_window_get_widget( BASE_WINDOW( instance ), "ActionMenuLabelEntry" );
-               label = na_object_get_label( object );
+       if( context && NA_IS_OBJECT_ITEM( context )){
+               label_widget = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"ActionMenuLabelEntry" );
+               g_return_if_fail( label_widget && GTK_IS_ENTRY( label_widget ));
+               label = na_object_get_label( context );
                gtk_entry_set_text( GTK_ENTRY( label_widget ), label );
                g_free( label );
        }
 }
 
 static void
-on_main_selection_changed( NactIActionTab *instance, GList *selected_items, gpointer user_data )
+on_tree_selection_changed( NactTreeView *tview, GList *selected_items, NactIActionTab *instance )
 {
-       static const gchar *thisfn = "nact_iaction_tab_on_main_selection_changed";
+       static const gchar *thisfn = "nact_iaction_tab_on_tree_selection_changed";
        guint count_selected;
        gboolean enable_tab;
        NAObjectItem *item;
@@ -406,14 +346,14 @@ on_main_selection_changed( NactIActionTab *instance, GList *selected_items, gpoi
        GtkToggleButton *toggle;
        IActionData *data;
 
-       g_return_if_fail( BASE_IS_WINDOW( instance ));
+       g_return_if_fail( instance && NACT_IS_MAIN_WINDOW( instance ));
        g_return_if_fail( NACT_IS_IACTION_TAB( instance ));
 
        count_selected = g_list_length( selected_items );
-       g_debug( "%s: instance=%p (%s), selected_items=%p (count=%u)",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) selected_items, count_selected );
+       g_debug( "%s: tview=%p, selected_items=%p (count=%u), instance=%p (%s)",
+                       thisfn, ( void * ) tview,
+                       ( void * ) selected_items, count_selected,
+                       instance, G_OBJECT_TYPE_NAME( instance ));
 
        enable_tab = ( count_selected == 1 );
        nact_main_tab_enable_page( NACT_MAIN_WINDOW( instance ), TAB_ACTION, enable_tab );
@@ -445,18 +385,18 @@ on_main_selection_changed( NactIActionTab *instance, GList *selected_items, gpoi
                        NA_IS_OBJECT_ACTION( item ) &&
                        na_object_is_target_toolbar( item );
 
-       toggle = GTK_TOGGLE_BUTTON( base_window_get_widget( BASE_WINDOW( instance ), 
"ActionTargetSelectionButton" ));
+       toggle = GTK_TOGGLE_BUTTON( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"ActionTargetSelectionButton" ));
        gtk_toggle_button_set_active( toggle, target_selection || ( item && NA_IS_OBJECT_MENU( item )));
        gtk_widget_set_sensitive( GTK_WIDGET( toggle ), item && NA_IS_OBJECT_ACTION( item ));
        base_gtk_utils_set_editable( G_OBJECT( toggle ), editable );
 
-       toggle = GTK_TOGGLE_BUTTON( base_window_get_widget( BASE_WINDOW( instance ), 
"ActionTargetLocationButton" ));
+       toggle = GTK_TOGGLE_BUTTON( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"ActionTargetLocationButton" ));
        gtk_toggle_button_set_active( toggle, target_location || ( item && NA_IS_OBJECT_MENU( item )));
        gtk_widget_set_sensitive( GTK_WIDGET( toggle ), item && NA_IS_OBJECT_ACTION( item ));
        base_gtk_utils_set_editable( G_OBJECT( toggle ), editable );
 
        enable_label = target_selection || target_location || ( item && NA_IS_OBJECT_MENU( item ));
-       label_widget = base_window_get_widget( BASE_WINDOW( instance ), "ActionMenuLabelEntry" );
+       label_widget = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ActionMenuLabelEntry" );
        label = item ? na_object_get_label( item ) : g_strdup( "" );
        label = label ? label : g_strdup( "" );
        gtk_entry_set_text( GTK_ENTRY( label_widget ), label );
@@ -467,42 +407,42 @@ on_main_selection_changed( NactIActionTab *instance, GList *selected_items, gpoi
        gtk_widget_set_sensitive( label_widget, enable_label );
        base_gtk_utils_set_editable( G_OBJECT( label_widget ), editable );
 
-       toggle = GTK_TOGGLE_BUTTON( base_window_get_widget( BASE_WINDOW( instance ), 
"ActionTargetToolbarButton" ));
+       toggle = GTK_TOGGLE_BUTTON( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"ActionTargetToolbarButton" ));
        gtk_toggle_button_set_active( toggle, target_toolbar );
        gtk_widget_set_sensitive( GTK_WIDGET( toggle ), item && NA_IS_OBJECT_ACTION( item ));
        base_gtk_utils_set_editable( G_OBJECT( toggle ), editable );
 
-       toggle = GTK_TOGGLE_BUTTON( base_window_get_widget( BASE_WINDOW( instance ), "ToolbarSameLabelButton" 
));
+       toggle = GTK_TOGGLE_BUTTON( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"ToolbarSameLabelButton" ));
        same_label = item && NA_IS_OBJECT_ACTION( item ) ? na_object_is_toolbar_same_label( item ) : FALSE;
        gtk_toggle_button_set_active( toggle, same_label );
        gtk_widget_set_sensitive( GTK_WIDGET( toggle ), target_toolbar );
        base_gtk_utils_set_editable( G_OBJECT( toggle ), editable );
 
-       label_widget = base_window_get_widget( BASE_WINDOW( instance ), "ActionToolbarLabelEntry" );
+       label_widget = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ActionToolbarLabelEntry" 
);
        label = item && NA_IS_OBJECT_ACTION( item ) ? na_object_get_toolbar_label( item ) : g_strdup( "" );
        gtk_entry_set_text( GTK_ENTRY( label_widget ), label );
        g_free( label );
        gtk_widget_set_sensitive( label_widget, target_toolbar && !same_label );
        base_gtk_utils_set_editable( G_OBJECT( label_widget ), editable );
 
-       label_widget = base_window_get_widget( BASE_WINDOW( instance ), "ActionToolbarLabelLabel" );
+       label_widget = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ActionToolbarLabelLabel" 
);
        gtk_widget_set_sensitive( label_widget, target_toolbar && !same_label );
 
-       tooltip_widget = base_window_get_widget( BASE_WINDOW( instance ), "ActionTooltipEntry" );
+       tooltip_widget = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ActionTooltipEntry" );
        tooltip = item ? na_object_get_tooltip( item ) : g_strdup( "" );
        tooltip = tooltip ? tooltip : g_strdup( "" );
        gtk_entry_set_text( GTK_ENTRY( tooltip_widget ), tooltip );
        g_free( tooltip );
        base_gtk_utils_set_editable( G_OBJECT( tooltip_widget ), editable );
 
-       icon_widget = base_window_get_widget( BASE_WINDOW( instance ), "ActionIconEntry" );
+       icon_widget = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ActionIconEntry" );
        icon = item ? na_object_get_icon( item ) : g_strdup( "" );
        icon = icon ? icon : g_strdup( "" );
        gtk_entry_set_text( GTK_ENTRY( icon_widget ), icon );
        g_free( icon );
        base_gtk_utils_set_editable( G_OBJECT( icon_widget ), editable );
 
-       icon_button = GTK_BUTTON( base_window_get_widget( BASE_WINDOW( instance ), "ActionIconBrowseButton" 
));
+       icon_button = GTK_BUTTON( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"ActionIconBrowseButton" ));
        base_gtk_utils_set_editable( G_OBJECT( icon_button ), editable );
 
        data->on_selection_change = FALSE;
@@ -542,7 +482,7 @@ on_target_selection_toggled( GtkToggleButton *button, NactIActionTab *instance )
 
                        if( editable ){
                                na_object_set_target_selection( item, is_target );
-                               g_signal_emit_by_name( G_OBJECT( instance ), 
TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, item, 0 );
+                               g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, item, 
0 );
 
                        } else {
                                g_signal_handlers_block_by_func(( gpointer ) button, 
on_target_selection_toggled, instance );
@@ -587,7 +527,7 @@ on_target_location_toggled( GtkToggleButton *button, NactIActionTab *instance )
 
                        if( editable ){
                                na_object_set_target_location( item, is_target );
-                               g_signal_emit_by_name( G_OBJECT( instance ), 
TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, item, 0 );
+                               g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, item, 
0 );
 
                        } else {
                                g_signal_handlers_block_by_func(( gpointer ) button, 
on_target_location_toggled, instance );
@@ -602,26 +542,22 @@ static void
 check_for_label( NactIActionTab *instance, GtkEntry *entry, const gchar *label )
 {
        NAObjectItem *item;
+       NactStatusbar *bar;
 
        g_return_if_fail( NACT_IS_IACTION_TAB( instance ));
        g_return_if_fail( GTK_IS_ENTRY( entry ));
 
-       nact_main_statusbar_hide_status(
-                       NACT_MAIN_WINDOW( instance ),
-                       IACTION_TAB_CONTEXT );
-
+       bar = nact_main_window_get_statusbar( NACT_MAIN_WINDOW( instance ));
+       nact_statusbar_hide_status( bar, IACTION_TAB_CONTEXT );
        set_label_label( instance, "black" );
 
-       g_object_get(
-                       G_OBJECT( instance ),
-                       MAIN_PROP_ITEM, &item,
-                       NULL );
+       g_object_get( G_OBJECT( instance ), MAIN_PROP_ITEM, &item, NULL );
 
        if( item && g_utf8_strlen( label, -1 ) == 0 ){
 
                /* i18n: status bar message when the action label is empty */
-               nact_main_statusbar_display_status(
-                               NACT_MAIN_WINDOW( instance ),
+               nact_statusbar_display_status(
+                               bar,
                                IACTION_TAB_CONTEXT,
                                _( "Caution: a label is mandatory for the action or the menu." ));
 
@@ -661,7 +597,7 @@ on_label_changed( GtkEntry *entry, NactIActionTab *instance )
                                setup_toolbar_label( instance, item, label );
                        }
 
-                       g_signal_emit_by_name( G_OBJECT( instance ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, item, 
MAIN_DATA_LABEL );
+                       g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, item, 
MAIN_DATA_LABEL );
                }
        }
 }
@@ -670,20 +606,12 @@ static void
 set_label_label( NactIActionTab *instance, const gchar *color_str )
 {
        GtkWidget *label;
+       GdkRGBA color;
 
-       label = base_window_get_widget( BASE_WINDOW( instance ), "ActionMenuLabelLabel" );
+       label = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ActionMenuLabelLabel" );
 
-/* gtk_widget_modify_fg() is deprecated as of Gtk+ 3.0
- */
-#if GTK_CHECK_VERSION( 2, 91, 7 )
-       GdkRGBA color;
        gdk_rgba_parse( &color, color_str );
        gtk_widget_override_color( label, GTK_STATE_FLAG_ACTIVE, &color );
-#else
-       GdkColor color;
-       gdk_color_parse( color_str, &color );
-       gtk_widget_modify_fg( label, GTK_STATE_NORMAL, &color );
-#endif
 }
 
 static void
@@ -720,7 +648,7 @@ on_target_toolbar_toggled( GtkToggleButton *button, NactIActionTab *instance )
 
                        if( editable ){
                                na_object_set_target_toolbar( item, is_target );
-                               g_signal_emit_by_name( G_OBJECT( instance ), 
TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, item, 0 );
+                               g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, item, 
0 );
                                toolbar_same_label_set_sensitive( instance, NA_OBJECT_ITEM( item ));
                                toolbar_label_set_sensitive( instance, NA_OBJECT_ITEM( item ));
 
@@ -777,7 +705,7 @@ on_toolbar_same_label_toggled( GtkToggleButton *button, NactIActionTab *instance
                                        g_free( label );
                                }
 
-                               g_signal_emit_by_name( G_OBJECT( instance ), 
TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, item, 0 );
+                               g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, item, 
0 );
                                toolbar_same_label_set_sensitive( instance, NA_OBJECT_ITEM( item ));
                                toolbar_label_set_sensitive( instance, NA_OBJECT_ITEM( item ));
 
@@ -845,8 +773,7 @@ on_toolbar_label_changed( GtkEntry *entry, NactIActionTab *instance )
                if( item && NA_IS_OBJECT_ACTION( item )){
                        label = gtk_entry_get_text( entry );
                        na_object_set_toolbar_label( NA_OBJECT_ACTION( item ), label );
-
-                       g_signal_emit_by_name( G_OBJECT( instance ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, item, 
0 );
+                       g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, item, 0 );
                }
        }
 }
@@ -888,7 +815,7 @@ on_tooltip_changed( GtkEntry *entry, NactIActionTab *instance )
 
                if( item ){
                        na_object_set_tooltip( item, gtk_entry_get_text( entry ));
-                       g_signal_emit_by_name( G_OBJECT( instance ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, item, 
0 );
+                       g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, item, 0 );
                }
        }
 }
@@ -956,7 +883,7 @@ on_icon_changed( GtkEntry *icon_entry, NactIActionTab *instance )
                if( !data->on_selection_change ){
                        icon_name = g_strdup( gtk_entry_get_text( icon_entry ));
                        na_object_set_icon( item, icon_name );
-                       g_signal_emit_by_name( G_OBJECT( instance ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, item, 
MAIN_DATA_ICON );
+                       g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, item, 
MAIN_DATA_ICON );
 
                } else {
                        icon_name = na_object_get_icon( item );
diff --git a/src/nact/nact-ibasenames-tab.c b/src/nact/nact-ibasenames-tab.c
index 6119f72..1f4742b 100644
--- a/src/nact/nact-ibasenames-tab.c
+++ b/src/nact/nact-ibasenames-tab.c
@@ -33,12 +33,15 @@
 
 #include <glib/gi18n.h>
 
-#include <api/na-object-api.h>
+#include "api/na-object-api.h"
+
+#include "core/na-gtk-utils.h"
 
-#include "nact-main-tab.h"
 #include "base-gtk-utils.h"
-#include "nact-match-list.h"
 #include "nact-ibasenames-tab.h"
+#include "nact-main-tab.h"
+#include "nact-main-window.h"
+#include "nact-match-list.h"
 
 /* private interface data
  */
@@ -64,16 +67,12 @@ static guint    st_initializations = 0;     /* interface initialization count */
 static GType           register_type( void );
 static void            interface_base_init( NactIBasenamesTabInterface *klass );
 static void            interface_base_finalize( NactIBasenamesTabInterface *klass );
-
-static void            on_base_initialize_gtk( NactIBasenamesTab *instance, GtkWindow *toplevel, gpointer 
user_data );
-static void            on_base_initialize_window( NactIBasenamesTab *instance, gpointer user_data );
-
-static void            on_main_selection_changed( NactIBasenamesTab *instance, GList *selected_items, 
gpointer user_data );
-
-static void            on_matchcase_toggled( GtkToggleButton *button, BaseWindow *window );
+static void            initialize_gtk( NactIBasenamesTab *instance );
+static void            initialize_window( NactIBasenamesTab *instance );
+static void            on_tree_selection_changed( NactTreeView *tview, GList *selected_items, 
NactIBasenamesTab *instance );
+static void            on_matchcase_toggled( GtkToggleButton *button, NactIBasenamesTab *instance );
 static GSList         *get_basenames( void *context );
 static void            set_basenames( void *context, GSList *filters );
-
 static IBasenamesData *get_ibasenames_data( NactIBasenamesTab *instance );
 static void            on_instance_finalized( gpointer user_data, NactIBasenamesTab *instance );
 
@@ -111,7 +110,7 @@ register_type( void )
 
        type = g_type_register_static( G_TYPE_INTERFACE, "NactIBasenamesTab", &info, 0 );
 
-       g_type_interface_add_prerequisite( type, BASE_TYPE_WINDOW );
+       g_type_interface_add_prerequisite( type, GTK_TYPE_APPLICATION_WINDOW );
 
        return( type );
 }
@@ -165,19 +164,9 @@ nact_ibasenames_tab_init( NactIBasenamesTab *instance )
                        thisfn,
                        ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       BASE_SIGNAL_INITIALIZE_GTK,
-                       G_CALLBACK( on_base_initialize_gtk ));
-
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       BASE_SIGNAL_INITIALIZE_WINDOW,
-                       G_CALLBACK( on_base_initialize_window ));
-
        nact_main_tab_init( NACT_MAIN_WINDOW( instance ), TAB_BASENAMES );
+       initialize_gtk( instance );
+       initialize_window( instance );
 
        data = get_ibasenames_data( instance );
        data->on_selection_change = FALSE;
@@ -192,25 +181,22 @@ nact_ibasenames_tab_init( NactIBasenamesTab *instance )
  * Initializes the tab widget at initial load.
  */
 static void
-on_base_initialize_gtk( NactIBasenamesTab *instance, GtkWindow *toplevel, void *user_data )
+initialize_gtk( NactIBasenamesTab *instance )
 {
-       static const gchar *thisfn = "nact_ibasenames_tab_on_base_initialize_gtk";
+       static const gchar *thisfn = "nact_ibasenames_tab_initialize_gtk";
 
-       g_return_if_fail( NACT_IS_IBASENAMES_TAB( instance ));
+       g_return_if_fail( instance && NACT_IS_IBASENAMES_TAB( instance ));
 
-       g_debug( "%s: instance=%p (%s), toplevel=%p, user_data=%p",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) toplevel,
-                       ( void * ) user_data );
+       g_debug( "%s: instance=%p (%s)",
+                       thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
        nact_match_list_init_with_args(
-                       BASE_WINDOW( instance ),
+                       NACT_MAIN_WINDOW( instance ),
                        ITAB_NAME,
                        TAB_BASENAMES,
-                       base_window_get_widget( BASE_WINDOW( instance ), "BasenamesTreeView" ),
-                       base_window_get_widget( BASE_WINDOW( instance ), "AddBasenameButton" ),
-                       base_window_get_widget( BASE_WINDOW( instance ), "RemoveBasenameButton" ),
+                       na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "BasenamesTreeView" ),
+                       na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "AddBasenameButton" ),
+                       na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "RemoveBasenameButton" ),
                        ( pget_filters ) get_basenames,
                        ( pset_filters ) set_basenames,
                        NULL,
@@ -228,34 +214,28 @@ on_base_initialize_gtk( NactIBasenamesTab *instance, GtkWindow *toplevel, void *
  * Connect signals and setup runtime values.
  */
 static void
-on_base_initialize_window( NactIBasenamesTab *instance, void *user_data )
+initialize_window( NactIBasenamesTab *instance )
 {
-       static const gchar *thisfn = "nact_ibasenames_tab_on_base_initialize_window";
-       GtkWidget *button;
+       static const gchar *thisfn = "nact_ibasenames_tab_initialize_window";
+       NactTreeView *tview;
 
-       g_return_if_fail( NACT_IS_IBASENAMES_TAB( instance ));
+       g_return_if_fail( instance && NACT_IS_IBASENAMES_TAB( instance ));
 
-       g_debug( "%s: instance=%p (%s), user_data=%p",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) user_data );
-
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       MAIN_SIGNAL_SELECTION_CHANGED,
-                       G_CALLBACK( on_main_selection_changed ));
-
-       button = base_window_get_widget( BASE_WINDOW( instance ), "BasenamesMatchcaseButton" );
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( button ),
-                       "toggled",
-                       G_CALLBACK( on_matchcase_toggled ));
+       g_debug( "%s: instance=%p (%s)",
+                       thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
+
+       tview = nact_main_window_get_items_view( NACT_MAIN_WINDOW( instance ));
+       g_signal_connect(
+                       tview, TREE_SIGNAL_SELECTION_CHANGED,
+                       G_CALLBACK( on_tree_selection_changed ), instance );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "BasenamesMatchcaseButton",
+                       "toggled", G_CALLBACK( on_matchcase_toggled ), instance );
 }
 
 static void
-on_main_selection_changed( NactIBasenamesTab *instance, GList *selected_items, gpointer user_data )
+on_tree_selection_changed( NactTreeView *tview, GList *selected_items, NactIBasenamesTab *instance )
 {
        NAIContext *context;
        gboolean editable;
@@ -274,7 +254,7 @@ on_main_selection_changed( NactIBasenamesTab *instance, GList *selected_items, g
        data = get_ibasenames_data( NACT_IBASENAMES_TAB( instance ));
        data->on_selection_change = TRUE;
 
-       matchcase_button = GTK_TOGGLE_BUTTON( base_window_get_widget( BASE_WINDOW( instance ), 
"BasenamesMatchcaseButton" ));
+       matchcase_button = GTK_TOGGLE_BUTTON( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"BasenamesMatchcaseButton" ));
        matchcase = context ? na_object_get_matchcase( context ) : FALSE;
        gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( matchcase_button ), matchcase );
        base_gtk_utils_set_editable( G_OBJECT( matchcase_button ), editable );
@@ -283,17 +263,17 @@ on_main_selection_changed( NactIBasenamesTab *instance, GList *selected_items, g
 }
 
 static void
-on_matchcase_toggled( GtkToggleButton *button, BaseWindow *window )
+on_matchcase_toggled( GtkToggleButton *button, NactIBasenamesTab *instance )
 {
        NAIContext *context;
        gboolean editable;
        gboolean matchcase;
        IBasenamesData *data;
 
-       data = get_ibasenames_data( NACT_IBASENAMES_TAB( window ));
+       data = get_ibasenames_data( NACT_IBASENAMES_TAB( instance ));
 
        if( !data->on_selection_change ){
-               g_object_get( G_OBJECT( window ),
+               g_object_get( G_OBJECT( instance ),
                                MAIN_PROP_CONTEXT, &context, MAIN_PROP_EDITABLE, &editable,
                                NULL );
 
@@ -302,12 +282,12 @@ on_matchcase_toggled( GtkToggleButton *button, BaseWindow *window )
 
                        if( editable ){
                                na_object_set_matchcase( context, matchcase );
-                               g_signal_emit_by_name( G_OBJECT( window ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, 
context, 0 );
+                               g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, 
context, 0 );
 
                        } else {
-                               g_signal_handlers_block_by_func(( gpointer ) button, on_matchcase_toggled, 
window );
+                               g_signal_handlers_block_by_func(( gpointer ) button, on_matchcase_toggled, 
instance );
                                gtk_toggle_button_set_active( button, !matchcase );
-                               g_signal_handlers_unblock_by_func(( gpointer ) button, on_matchcase_toggled, 
window );
+                               g_signal_handlers_unblock_by_func(( gpointer ) button, on_matchcase_toggled, 
instance );
                        }
                }
        }
diff --git a/src/nact/nact-icapabilities-tab.c b/src/nact/nact-icapabilities-tab.c
index 6cb422e..794ff5a 100644
--- a/src/nact/nact-icapabilities-tab.c
+++ b/src/nact/nact-icapabilities-tab.c
@@ -33,10 +33,13 @@
 
 #include <glib/gi18n.h>
 
-#include <api/na-core-utils.h>
-#include <api/na-object-api.h>
+#include "api/na-core-utils.h"
+#include "api/na-object-api.h"
+
+#include "core/na-gtk-utils.h"
 
 #include "nact-main-tab.h"
+#include "nact-main-window.h"
 #include "nact-match-list.h"
 #include "nact-add-capability-dialog.h"
 #include "nact-icapabilities-tab.h"
@@ -54,16 +57,12 @@ static guint st_initializations = 0;        /* interface initialization count */
 static GType   register_type( void );
 static void    interface_base_init( NactICapabilitiesTabInterface *klass );
 static void    interface_base_finalize( NactICapabilitiesTabInterface *klass );
-
-static void    on_base_initialize_gtk( NactICapabilitiesTab *instance, GtkWindow *toplevel, gpointer 
user_data );
-static void    on_base_initialize_window( NactICapabilitiesTab *instance, gpointer user_data );
-
-static void    on_main_selection_changed( NactICapabilitiesTab *instance, GList *selected_items, gpointer 
user_data );
-
-static void    on_add_clicked( GtkButton *button, BaseWindow *window );
+static void    initialize_gtk( NactICapabilitiesTab *instance );
+static void    initialize_window( NactICapabilitiesTab *instance );
+static void    on_tree_selection_changed( NactTreeView *tview, GList *selected_items, NactICapabilitiesTab 
*instance );
+static void    on_add_clicked( GtkButton *button, NactICapabilitiesTab *instance );
 static GSList *get_capabilities( NAIContext *context );
 static void    set_capabilities( NAIContext *context, GSList *list );
-
 static void    on_instance_finalized( gpointer user_data, NactICapabilitiesTab *instance );
 
 GType
@@ -100,7 +99,7 @@ register_type( void )
 
        type = g_type_register_static( G_TYPE_INTERFACE, "NactICapabilitiesTab", &info, 0 );
 
-       g_type_interface_add_prerequisite( type, BASE_TYPE_WINDOW );
+       g_type_interface_add_prerequisite( type, GTK_TYPE_APPLICATION_WINDOW );
 
        return( type );
 }
@@ -153,43 +152,30 @@ nact_icapabilities_tab_init( NactICapabilitiesTab *instance )
                        thisfn,
                        ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       BASE_SIGNAL_INITIALIZE_GTK,
-                       G_CALLBACK( on_base_initialize_gtk ));
-
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       BASE_SIGNAL_INITIALIZE_WINDOW,
-                       G_CALLBACK( on_base_initialize_window ));
-
        nact_main_tab_init( NACT_MAIN_WINDOW( instance ), TAB_CAPABILITIES );
+       initialize_gtk( instance );
+       initialize_window( instance );
 
        g_object_weak_ref( G_OBJECT( instance ), ( GWeakNotify ) on_instance_finalized, NULL );
 }
 
 static void
-on_base_initialize_gtk( NactICapabilitiesTab *instance, GtkWindow *toplevel, void *user_data )
+initialize_gtk( NactICapabilitiesTab *instance )
 {
-       static const gchar *thisfn = "nact_icapabilities_tab_on_base_initialize_gtk";
+       static const gchar *thisfn = "nact_icapabilities_tab_initialize_gtk";
 
        g_return_if_fail( NACT_IS_ICAPABILITIES_TAB( instance ));
 
-       g_debug( "%s: instance=%p (%s), toplevel=%p, user_data=%p",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) toplevel,
-                       ( void * ) user_data );
+       g_debug( "%s: instance=%p (%s)",
+                       thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
        nact_match_list_init_with_args(
-                       BASE_WINDOW( instance ),
+                       NACT_MAIN_WINDOW( instance ),
                        ITAB_NAME,
                        TAB_CAPABILITIES,
-                       base_window_get_widget( BASE_WINDOW( instance ), "CapabilitiesTreeView" ),
-                       base_window_get_widget( BASE_WINDOW( instance ), "AddCapabilityButton" ),
-                       base_window_get_widget( BASE_WINDOW( instance ), "RemoveCapabilityButton" ),
+                       na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "CapabilitiesTreeView" ),
+                       na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "AddCapabilityButton" ),
+                       na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "RemoveCapabilityButton" 
),
                        ( pget_filters ) get_capabilities,
                        ( pset_filters ) set_capabilities,
                        ( pon_add_cb ) on_add_clicked,
@@ -200,26 +186,25 @@ on_base_initialize_gtk( NactICapabilitiesTab *instance, GtkWindow *toplevel, voi
 }
 
 static void
-on_base_initialize_window( NactICapabilitiesTab *instance, void *user_data )
+initialize_window( NactICapabilitiesTab *instance )
 {
-       static const gchar *thisfn = "nact_icapabilities_tab_on_base_initialize_window";
+       static const gchar *thisfn = "nact_icapabilities_tab_initialize_window";
+       NactTreeView *tview;
 
        g_return_if_fail( NACT_IS_ICAPABILITIES_TAB( instance ));
 
-       g_debug( "%s: instance=%p (%s), user_data=%p",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) user_data );
-
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       MAIN_SIGNAL_SELECTION_CHANGED,
-                       G_CALLBACK( on_main_selection_changed ));
+       g_debug( "%s: instance=%p (%s)",
+                       thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
+
+       tview = nact_main_window_get_items_view( NACT_MAIN_WINDOW( instance ));
+
+       g_signal_connect(
+                       tview, TREE_SIGNAL_SELECTION_CHANGED,
+                       G_CALLBACK( on_tree_selection_changed ), instance );
 }
 
 static void
-on_main_selection_changed( NactICapabilitiesTab *instance, GList *selected_items, gpointer user_data )
+on_tree_selection_changed( NactTreeView *tview, GList *selected_items, NactICapabilitiesTab *instance )
 {
        NAIContext *context;
        gboolean editable;
@@ -234,20 +219,20 @@ on_main_selection_changed( NactICapabilitiesTab *instance, GList *selected_items
 }
 
 static void
-on_add_clicked( GtkButton *button, BaseWindow *window )
+on_add_clicked( GtkButton *button, NactICapabilitiesTab *instance )
 {
        NAIContext *context;
        GSList *capabilities;
        gchar *new_cap;
 
-       g_object_get( G_OBJECT( window ), MAIN_PROP_CONTEXT, &context, NULL );
+       g_object_get( G_OBJECT( instance ), MAIN_PROP_CONTEXT, &context, NULL );
 
        if( context ){
-               capabilities = nact_match_list_get_rows( window, ITAB_NAME );
-               new_cap = nact_add_capability_dialog_run( window, capabilities );
+               capabilities = nact_match_list_get_rows( NACT_MAIN_WINDOW( instance ), ITAB_NAME );
+               new_cap = nact_add_capability_dialog_run( NACT_MAIN_WINDOW( instance ), capabilities );
 
                if( new_cap ){
-                       nact_match_list_insert_row( window, ITAB_NAME, new_cap, FALSE, FALSE );
+                       nact_match_list_insert_row( NACT_MAIN_WINDOW( instance ), ITAB_NAME, new_cap, FALSE, 
FALSE );
                        g_free( new_cap );
                }
 
diff --git a/src/nact/nact-icommand-tab.c b/src/nact/nact-icommand-tab.c
index 41b7f99..ee12fde 100644
--- a/src/nact/nact-icommand-tab.c
+++ b/src/nact/nact-icommand-tab.c
@@ -34,17 +34,18 @@
 #include <glib/gi18n.h>
 #include <string.h>
 
-#include <api/na-core-utils.h>
-#include <api/na-object-api.h>
+#include "api/na-core-utils.h"
+#include "api/na-object-api.h"
 
-#include <core/na-factory-object.h>
-#include <core/na-tokens.h>
+#include "core/na-factory-object.h"
+#include "core/na-gtk-utils.h"
+#include "core/na-tokens.h"
 
-#include "base-window.h"
 #include "nact-application.h"
-#include "nact-main-statusbar.h"
+#include "nact-statusbar.h"
 #include "base-gtk-utils.h"
 #include "nact-main-tab.h"
+#include "nact-main-window.h"
 #include "nact-icommand-tab.h"
 #include "nact-ischemes-tab.h"
 
@@ -61,8 +62,9 @@ struct _NactICommandTabInterfacePrivate {
 /* data set against the instance
  */
 typedef struct {
-       gboolean  on_selection_change;
-       NATokens *tokens;
+       gboolean   on_selection_change;
+       NATokens  *tokens;
+       GtkWindow *legend;
 }
        ICommandData;
 
@@ -73,13 +75,10 @@ static guint st_initializations = 0;        /* interface initialization count */
 static GType         register_type( void );
 static void          interface_base_init( NactICommandTabInterface *klass );
 static void          interface_base_finalize( NactICommandTabInterface *klass );
-
-static void          on_base_initialize_gtk( NactICommandTab *instance, GtkWindow *toplevel, gpointer 
user_data );
-static void          on_base_initialize_window( NactICommandTab *instance, gpointer user_data );
-
-static void          on_tree_view_content_changed( NactICommandTab *instance, NAObject *object, gpointer 
user_data );
-static void          on_main_selection_changed( NactICommandTab *instance, GList *selected_items, gpointer 
user_data );
-
+static void          initialize_gtk( NactICommandTab *instance );
+static void          initialize_window( NactICommandTab *instance );
+static void          on_main_item_updated( NactICommandTab *instance, NAIContext *context, guint data, void 
*empty );
+static void          on_tree_selection_changed( NactTreeView *tview, GList *selected_items, NactICommandTab 
*instance );
 static GtkWidget    *get_label_entry( NactICommandTab *instance );
 static GtkButton    *get_legend_button( NactICommandTab *instance );
 static GtkWindow    *get_legend_dialog( NactICommandTab *instance );
@@ -90,7 +89,9 @@ static void          legend_dialog_show( NactICommandTab *instance );
 static void          legend_dialog_hide( NactICommandTab *instance );
 static void          on_label_changed( GtkEntry *entry, NactICommandTab *instance );
 static void          on_legend_clicked( GtkButton *button, NactICommandTab *instance );
+#if 0
 static gboolean      on_legend_dialog_deleted( GtkWidget *dialog, GdkEvent *event, NactICommandTab *instance 
);
+#endif
 static void          on_parameters_changed( GtkEntry *entry, NactICommandTab *instance );
 static void          on_path_browse( GtkButton *button, NactICommandTab *instance );
 static void          on_path_changed( GtkEntry *entry, NactICommandTab *instance );
@@ -98,7 +99,6 @@ static void          on_wdir_browse( GtkButton *button, NactICommandTab *instanc
 static void          on_wdir_changed( GtkEntry *entry, NactICommandTab *instance );
 static gchar        *parse_parameters( NactICommandTab *instance );
 static void          update_example_label( NactICommandTab *instance, NAObjectProfile *profile );
-
 static ICommandData *get_icommand_data( NactICommandTab *instance );
 static void          on_instance_finalized( gpointer user_data, NactICommandTab *instance );
 
@@ -136,7 +136,7 @@ register_type( void )
 
        type = g_type_register_static( G_TYPE_INTERFACE, "NactICommandTab", &info, 0 );
 
-       g_type_interface_add_prerequisite( type, BASE_TYPE_WINDOW );
+       g_type_interface_add_prerequisite( type, GTK_TYPE_APPLICATION_WINDOW );
 
        return( type );
 }
@@ -190,19 +190,9 @@ nact_icommand_tab_init( NactICommandTab *instance )
                        thisfn,
                        ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       BASE_SIGNAL_INITIALIZE_GTK,
-                       G_CALLBACK( on_base_initialize_gtk ));
-
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       BASE_SIGNAL_INITIALIZE_WINDOW,
-                       G_CALLBACK( on_base_initialize_window ));
-
        nact_main_tab_init( NACT_MAIN_WINDOW( instance ), TAB_COMMAND );
+       initialize_gtk( instance );
+       initialize_window( instance );
 
        data = get_icommand_data( instance );
        data->on_selection_change = FALSE;
@@ -212,11 +202,8 @@ nact_icommand_tab_init( NactICommandTab *instance )
 }
 
 static void
-on_base_initialize_gtk( NactICommandTab *instance, GtkWindow *toplevel, gpointer user_data )
+initialize_gtk( NactICommandTab *instance )
 {
-#if GTK_CHECK_VERSION( 3,0,0 )
-       base_gtk_utils_table_to_grid( BASE_WINDOW( instance ), "table220" );
-#endif
 }
 
 /*
@@ -227,88 +214,70 @@ on_base_initialize_gtk( NactICommandTab *instance, GtkWindow *toplevel, gpointer
  * Connect signals and setup runtime values.
  */
 static void
-on_base_initialize_window( NactICommandTab *instance, void *user_data )
+initialize_window( NactICommandTab *instance )
 {
-       static const gchar *thisfn = "nact_icommand_tab_on_base_initialize_window";
+       static const gchar *thisfn = "nact_icommand_tab_initialize_window";
+#if 0
        GtkWindow *legend_dialog;
-       GtkWidget *label_entry, *path_entry, *parameters_entry, *wdir_entry;
-       GtkButton *path_button, *legend_button, *wdir_button;
+#endif
+       GtkWidget *label_entry, *path_entry, *parameters_entry;
+       GtkButton *legend_button, *path_button;
        ICommandData *data;
+       NactTreeView *tview;
 
        g_return_if_fail( NACT_IS_ICOMMAND_TAB( instance ));
 
-       g_debug( "%s: instance=%p (%s), user_data=%p",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) user_data );
+       g_debug( "%s: instance=%p (%s)",
+                       thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
        label_entry = get_label_entry( instance );
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
+       g_signal_connect(
                        G_OBJECT( label_entry ),
-                       "changed",
-                       G_CALLBACK( on_label_changed ));
+                       "changed", G_CALLBACK( on_label_changed ), instance );
 
        path_entry = get_path_entry( instance );
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
+       g_signal_connect(
                        G_OBJECT( path_entry ),
-                       "changed",
-                       G_CALLBACK( on_path_changed ));
+                       "changed", G_CALLBACK( on_path_changed ), instance );
 
        path_button = get_path_button( instance );
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
+       g_signal_connect(
                        G_OBJECT( path_button ),
-                       "clicked",
-                       G_CALLBACK( on_path_browse ));
+                       "clicked", G_CALLBACK( on_path_browse ), instance );
 
        parameters_entry = get_parameters_entry( instance );
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
+       g_signal_connect(
                        G_OBJECT( parameters_entry ),
-                       "changed",
-                       G_CALLBACK( on_parameters_changed ));
+                       "changed", G_CALLBACK( on_parameters_changed ), instance );
 
        legend_button = get_legend_button( instance );
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
+       g_signal_connect(
                        G_OBJECT( legend_button ),
-                       "clicked",
-                       G_CALLBACK( on_legend_clicked ));
+                       "clicked", G_CALLBACK( on_legend_clicked ), instance );
 
+#if 0
        legend_dialog = get_legend_dialog( instance );
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
+       g_signal_connect(
                        G_OBJECT( legend_dialog ),
-                       "delete-event",
-                       G_CALLBACK( on_legend_dialog_deleted ));
+                       "delete-event", G_CALLBACK( on_legend_dialog_deleted ), instance );
+#endif
 
-       wdir_entry = base_window_get_widget( BASE_WINDOW( instance ), "WorkingDirectoryEntry" );
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( wdir_entry ),
-                       "changed",
-                       G_CALLBACK( on_wdir_changed ));
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "WorkingDirectoryEntry",
+                       "changed", G_CALLBACK( on_wdir_changed ), instance );
 
-       wdir_button = GTK_BUTTON( base_window_get_widget( BASE_WINDOW( instance ), 
"CommandWorkingDirectoryButton" ));
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( wdir_button ),
-                       "clicked",
-                       G_CALLBACK( on_wdir_browse ));
+       na_gtk_utils_connect_widget_by_name(
+                               GTK_CONTAINER( instance ), "CommandWorkingDirectoryButton",
+                       "clicked", G_CALLBACK( on_wdir_browse ), instance );
 
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       MAIN_SIGNAL_SELECTION_CHANGED,
-                       G_CALLBACK( on_main_selection_changed ));
+       tview = nact_main_window_get_items_view( NACT_MAIN_WINDOW( instance ));
 
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       MAIN_SIGNAL_ITEM_UPDATED,
-                       G_CALLBACK( on_tree_view_content_changed ));
+       g_signal_connect(
+                       tview, TREE_SIGNAL_SELECTION_CHANGED,
+                       G_CALLBACK( on_tree_selection_changed ), instance );
+
+       g_signal_connect( instance,
+                       MAIN_SIGNAL_ITEM_UPDATED, G_CALLBACK( on_main_item_updated ), NULL );
 
        /* allocate a static fake NATokens object which will be used to build
         * the example label - this object will be g_object_unref() on instance
@@ -321,25 +290,25 @@ on_base_initialize_window( NactICommandTab *instance, void *user_data )
 }
 
 static void
-on_tree_view_content_changed( NactICommandTab *instance, NAObject *object, gpointer user_data )
+on_main_item_updated( NactICommandTab *instance, NAIContext *context, guint data, void *empty )
 {
        GtkWidget *label_widget;
        gchar *label;
 
-       g_return_if_fail( NACT_IS_ICOMMAND_TAB( instance ));
+       g_return_if_fail( instance && NACT_IS_ICOMMAND_TAB( instance ));
 
-       if( NA_IS_OBJECT_PROFILE( object )){
+       if( NA_IS_OBJECT_PROFILE( context )){
                label_widget = get_label_entry( instance );
-               label = na_object_get_label( object );
+               label = na_object_get_label( context );
                gtk_entry_set_text( GTK_ENTRY( label_widget ), label );
                g_free( label );
        }
 }
 
 static void
-on_main_selection_changed( NactICommandTab *instance, GList *selected_items, gpointer user_data )
+on_tree_selection_changed( NactTreeView *tview, GList *selected_items, NactICommandTab *instance )
 {
-       static const gchar *thisfn = "nact_icommand_tab_on_main_selection_changed";
+       static const gchar *thisfn = "nact_icommand_tab_on_tree_selection_changed";
        NAObjectProfile *profile;
        gboolean editable;
        gboolean enable_tab;
@@ -351,10 +320,10 @@ on_main_selection_changed( NactICommandTab *instance, GList *selected_items, gpo
 
        g_return_if_fail( NACT_IS_ICOMMAND_TAB( instance ));
 
-       g_debug( "%s: instance=%p (%s), selected_items=%p (count=%d)",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) selected_items, g_list_length( selected_items ));
+       g_debug( "%s: tview=%p, selected_items=%p (count=%d), instance=%p (%s)",
+                       thisfn, tview,
+                       ( void * ) selected_items, g_list_length( selected_items ),
+                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
        g_object_get(
                        G_OBJECT( instance ),
@@ -401,7 +370,7 @@ on_main_selection_changed( NactICommandTab *instance, GList *selected_items, gpo
 
        update_example_label( instance, profile );
 
-       wdir_entry = base_window_get_widget( BASE_WINDOW( instance ), "WorkingDirectoryEntry" );
+       wdir_entry = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "WorkingDirectoryEntry" );
        wdir = profile ? na_object_get_working_dir( profile ) : g_strdup( "" );
        wdir = wdir ? wdir : g_strdup( "" );
        gtk_entry_set_text( GTK_ENTRY( wdir_entry ), wdir );
@@ -409,7 +378,7 @@ on_main_selection_changed( NactICommandTab *instance, GList *selected_items, gpo
        gtk_widget_set_sensitive( wdir_entry, profile != NULL );
        base_gtk_utils_set_editable( G_OBJECT( wdir_entry ), editable );
 
-       wdir_button = GTK_BUTTON( base_window_get_widget( BASE_WINDOW( instance ), 
"CommandWorkingDirectoryButton" ));
+       wdir_button = GTK_BUTTON( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"CommandWorkingDirectoryButton" ));
        gtk_widget_set_sensitive( GTK_WIDGET( wdir_button ), profile != NULL );
        base_gtk_utils_set_editable( G_OBJECT( wdir_button ), editable );
 
@@ -419,37 +388,40 @@ on_main_selection_changed( NactICommandTab *instance, GList *selected_items, gpo
 static GtkWidget *
 get_label_entry( NactICommandTab *instance )
 {
-       return( base_window_get_widget( BASE_WINDOW( instance ), "ProfileLabelEntry" ));
+       return( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ProfileLabelEntry" ));
 }
 
 static GtkButton *
 get_legend_button( NactICommandTab *instance )
 {
-       return( GTK_BUTTON( base_window_get_widget( BASE_WINDOW( instance ), "CommandLegendButton" )));
+       return( GTK_BUTTON( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"CommandLegendButton" )));
 }
 
 static GtkWindow *
 get_legend_dialog( NactICommandTab *instance )
 {
+#if 0
        return( base_window_get_gtk_toplevel_by_name( BASE_WINDOW( instance ), "LegendDialog" ));
+#endif
+       return( NULL );
 }
 
 static GtkWidget *
 get_parameters_entry( NactICommandTab *instance )
 {
-       return( base_window_get_widget( BASE_WINDOW( instance ), "CommandParametersEntry" ));
+       return( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "CommandParametersEntry" ));
 }
 
 static GtkButton *
 get_path_button( NactICommandTab *instance )
 {
-       return( GTK_BUTTON( base_window_get_widget( BASE_WINDOW( instance ), "CommandPathButton" )));
+       return( GTK_BUTTON( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "CommandPathButton" 
)));
 }
 
 static GtkWidget *
 get_path_entry( NactICommandTab *instance )
 {
-       return( base_window_get_widget( BASE_WINDOW( instance ), "CommandPathEntry" ));
+       return( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "CommandPathEntry" ));
 }
 
 static void
@@ -484,13 +456,11 @@ static void
 legend_dialog_show( NactICommandTab *instance )
 {
        GtkWindow *legend_dialog;
-       GtkWindow *toplevel;
 
        legend_dialog = get_legend_dialog( instance );
        gtk_window_set_deletable( legend_dialog, FALSE );
 
-       toplevel = base_window_get_gtk_toplevel( BASE_WINDOW( instance ));
-       gtk_window_set_transient_for( GTK_WINDOW( legend_dialog ), toplevel );
+       gtk_window_set_transient_for( GTK_WINDOW( legend_dialog ), GTK_WINDOW( instance ));
 
        base_gtk_utils_restore_window_position( BASE_WINDOW( instance ), NA_IPREFS_COMMAND_LEGEND_WSP );
        gtk_widget_show( GTK_WIDGET( legend_dialog ));
@@ -516,7 +486,7 @@ on_label_changed( GtkEntry *entry, NactICommandTab *instance )
                if( profile ){
                        label = gtk_entry_get_text( entry );
                        na_object_set_label( profile, label );
-                       g_signal_emit_by_name( G_OBJECT( instance ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, 
profile, MAIN_DATA_LABEL );
+                       g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, profile, 
MAIN_DATA_LABEL );
                }
        }
 }
@@ -532,6 +502,7 @@ on_legend_clicked( GtkButton *button, NactICommandTab *instance )
        }
 }
 
+#if 0
 static gboolean
 on_legend_dialog_deleted( GtkWidget *dialog, GdkEvent *event, NactICommandTab *instance )
 {
@@ -539,6 +510,7 @@ on_legend_dialog_deleted( GtkWidget *dialog, GdkEvent *event, NactICommandTab *i
        legend_dialog_hide( instance );
        return( TRUE );
 }
+#endif
 
 static void
 on_parameters_changed( GtkEntry *entry, NactICommandTab *instance )
@@ -556,7 +528,7 @@ on_parameters_changed( GtkEntry *entry, NactICommandTab *instance )
 
                if( profile ){
                        na_object_set_parameters( profile, gtk_entry_get_text( entry ));
-                       g_signal_emit_by_name( G_OBJECT( instance ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, 
profile, 0 );
+                       g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, profile, 0 );
                        update_example_label( instance, profile );
                }
        }
@@ -587,7 +559,7 @@ on_path_changed( GtkEntry *entry, NactICommandTab *instance )
 
                if( profile ){
                        na_object_set_path( profile, gtk_entry_get_text( entry ));
-                       g_signal_emit_by_name( G_OBJECT( instance ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, 
profile, 0 );
+                       g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, profile, 0 );
                        update_example_label( instance, profile );
                }
        }
@@ -605,7 +577,7 @@ on_wdir_browse( GtkButton *button, NactICommandTab *instance )
                        NULL );
 
        if( profile ){
-               wdir_entry = base_window_get_widget( BASE_WINDOW( instance ), "WorkingDirectoryEntry" );
+               wdir_entry = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"WorkingDirectoryEntry" );
                base_gtk_utils_select_dir(
                                BASE_WINDOW( instance ), _( "Choosing a working directory" ),
                                NA_IPREFS_WORKING_DIR_WSP, wdir_entry, NA_IPREFS_WORKING_DIR_URI );
@@ -628,7 +600,7 @@ on_wdir_changed( GtkEntry *entry, NactICommandTab *instance )
 
                if( profile ){
                        na_object_set_working_dir( profile, gtk_entry_get_text( entry ));
-                       g_signal_emit_by_name( G_OBJECT( instance ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, 
profile, 0 );
+                       g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, profile, 0 );
                }
        }
 }
@@ -660,7 +632,7 @@ update_example_label( NactICommandTab *instance, NAObjectProfile *profile )
        gchar *parameters;
        GtkWidget *example_widget;
 
-       example_widget = base_window_get_widget( BASE_WINDOW( instance ), "CommandExampleLabel" );
+       example_widget = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "CommandExampleLabel" );
 
        if( profile ){
                parameters = parse_parameters( instance );
diff --git a/src/nact/nact-icon-chooser.c b/src/nact/nact-icon-chooser.c
index d688b81..dcb82a1 100644
--- a/src/nact/nact-icon-chooser.c
+++ b/src/nact/nact-icon-chooser.c
@@ -318,7 +318,7 @@ nact_icon_chooser_choose_icon( BaseWindow *parent, const gchar *icon_name )
        g_debug( "%s: parent=%p, icon_name=%s", thisfn, ( void * ) parent, icon_name );
 
        editor = g_object_new( NACT_TYPE_ICON_CHOOSER,
-                       BASE_PROP_PARENT,         parent,
+                       BASE_PROP_MAIN_WINDOW,         parent,
                        BASE_PROP_XMLUI_FILENAME, st_xmlui_filename,
                        BASE_PROP_TOPLEVEL_NAME,  st_toplevel_name,
                        BASE_PROP_WSP_NAME,       st_wsp_name,
diff --git a/src/nact/nact-ienvironment-tab.c b/src/nact/nact-ienvironment-tab.c
index 89f161e..ebb5c5a 100644
--- a/src/nact/nact-ienvironment-tab.c
+++ b/src/nact/nact-ienvironment-tab.c
@@ -36,14 +36,16 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include <api/na-core-utils.h>
-#include <api/na-object-api.h>
+#include "api/na-core-utils.h"
+#include "api/na-object-api.h"
 
-#include <core/na-desktop-environment.h>
-#include <core/na-settings.h>
+#include "core/na-gtk-utils.h"
+#include "core/na-desktop-environment.h"
+#include "core/na-settings.h"
 
 #include "base-gtk-utils.h"
 #include "nact-main-tab.h"
+#include "nact-main-window.h"
 #include "nact-ienvironment-tab.h"
 
 /* private interface data
@@ -97,36 +99,30 @@ static guint st_initializations = 0;                /* interface initialization count */
 static GType         register_type( void );
 static void          interface_base_init( NactIEnvironmentTabInterface *klass );
 static void          interface_base_finalize( NactIEnvironmentTabInterface *klass );
-
-static void          on_base_initialize_gtk( NactIEnvironmentTab *instance, GtkWindow *toplevel, gpointer 
user_data );
-static void          on_base_initialize_window( NactIEnvironmentTab *instance, gpointer user_data );
-
-static void          on_main_selection_changed( NactIEnvironmentTab *instance, GList *selected_items, 
gpointer user_data );
-
+static void          initialize_gtk( NactIEnvironmentTab *instance );
+static void          initialize_window( NactIEnvironmentTab *instance );
+static void          on_tree_selection_changed( NactTreeView *tview, GList *selected_items, 
NactIEnvironmentTab *instance );
 static void          on_selcount_ope_changed( GtkComboBox *combo, NactIEnvironmentTab *instance );
 static void          on_selcount_int_changed( GtkEntry *entry, NactIEnvironmentTab *instance );
 static void          on_selection_count_changed( NactIEnvironmentTab *instance );
 static void          on_show_always_toggled( GtkToggleButton *togglebutton, NactIEnvironmentTab *instance );
 static void          on_only_show_toggled( GtkToggleButton *togglebutton, NactIEnvironmentTab *instance );
 static void          on_do_not_show_toggled( GtkToggleButton *togglebutton, NactIEnvironmentTab *instance );
-static void          on_desktop_toggled( GtkCellRendererToggle *renderer, gchar *path, BaseWindow *window );
+static void          on_desktop_toggled( GtkCellRendererToggle *renderer, gchar *path, NactIEnvironmentTab 
*instance );
 static void          on_try_exec_changed( GtkEntry *entry, NactIEnvironmentTab *instance );
 static void          on_try_exec_browse( GtkButton *button, NactIEnvironmentTab *instance );
 static void          on_show_if_registered_changed( GtkEntry *entry, NactIEnvironmentTab *instance );
 static void          on_show_if_true_changed( GtkEntry *entry, NactIEnvironmentTab *instance );
 static void          on_show_if_running_changed( GtkEntry *entry, NactIEnvironmentTab *instance );
 static void          on_show_if_running_browse( GtkButton *button, NactIEnvironmentTab *instance );
-
 static void          init_selection_count_combobox( NactIEnvironmentTab *instance );
 static gchar        *get_selection_count_selection( NactIEnvironmentTab *instance );
 static void          set_selection_count_selection( NactIEnvironmentTab *instance, const gchar *ope, const 
gchar *uint );
 static void          dispose_selection_count_combobox( NactIEnvironmentTab *instance );
-
 static void          init_desktop_listview( NactIEnvironmentTab *instance );
 static void          raz_desktop_listview( NactIEnvironmentTab *instance );
 static void          setup_desktop_listview( NactIEnvironmentTab *instance, GSList *show );
 static void          dispose_desktop_listview( NactIEnvironmentTab *instance );
-
 static IEnvironData *get_ienviron_data( NactIEnvironmentTab *instance );
 static void          on_instance_finalized( gpointer user_data, NactIEnvironmentTab *instance );
 
@@ -164,7 +160,7 @@ register_type( void )
 
        type = g_type_register_static( G_TYPE_INTERFACE, "NactIEnvironmentTab", &info, 0 );
 
-       g_type_interface_add_prerequisite( type, BASE_TYPE_WINDOW );
+       g_type_interface_add_prerequisite( type, GTK_TYPE_APPLICATION_WINDOW );
 
        return( type );
 }
@@ -218,19 +214,9 @@ nact_ienvironment_tab_init( NactIEnvironmentTab *instance )
                        thisfn,
                        ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       BASE_SIGNAL_INITIALIZE_GTK,
-                       G_CALLBACK( on_base_initialize_gtk ));
-
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       BASE_SIGNAL_INITIALIZE_WINDOW,
-                       G_CALLBACK( on_base_initialize_window ));
-
        nact_main_tab_init( NACT_MAIN_WINDOW( instance ), TAB_ENVIRONMENT );
+       initialize_gtk( instance );
+       initialize_window( instance );
 
        data = get_ienviron_data( instance );
        data->on_selection_change = FALSE;
@@ -245,17 +231,14 @@ nact_ienvironment_tab_init( NactIEnvironmentTab *instance )
  * Initializes the tab widget at initial load.
  */
 static void
-on_base_initialize_gtk( NactIEnvironmentTab *instance, GtkWindow *toplevel, void *user_data )
+initialize_gtk( NactIEnvironmentTab *instance )
 {
-       static const gchar *thisfn = "nact_ienvironment_tab_on_base_initialize_gtk";
+       static const gchar *thisfn = "nact_ienvironment_tab_initialize_gtk";
 
        g_return_if_fail( NACT_IS_IENVIRONMENT_TAB( instance ));
 
-       g_debug( "%s: instance=%p (%s), toplevel=%p, user_data=%p",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) toplevel,
-                       ( void * ) user_data );
+       g_debug( "%s: instance=%p (%s)",
+                       thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
        init_selection_count_combobox( instance );
        init_desktop_listview( instance );
@@ -269,9 +252,9 @@ on_base_initialize_gtk( NactIEnvironmentTab *instance, GtkWindow *toplevel, void
  * Connect signals and setup runtime values.
  */
 static void
-on_base_initialize_window( NactIEnvironmentTab *instance, void *user_data )
+initialize_window( NactIEnvironmentTab *instance )
 {
-       static const gchar *thisfn = "nact_ienvironment_tab_on_base_initialize_window";
+       static const gchar *thisfn = "nact_ienvironment_tab_initialize_window";
        GtkTreeView *listview;
        GtkTreeModel *model;
        GtkTreeIter iter;
@@ -279,51 +262,42 @@ on_base_initialize_window( NactIEnvironmentTab *instance, void *user_data )
        GList *renderers;
        guint i;
        const NADesktopEnv *desktops;
+       NactTreeView *tview;
 
        g_return_if_fail( NACT_IS_IENVIRONMENT_TAB( instance ));
 
-       g_debug( "%s: instance=%p (%s), user_data=%p",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) user_data );
+       g_debug( "%s: instance=%p (%s)",
+                       thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       MAIN_SIGNAL_SELECTION_CHANGED,
-                       G_CALLBACK( on_main_selection_changed ));
+       tview = nact_main_window_get_items_view( NACT_MAIN_WINDOW( instance ));
 
-       base_window_signal_connect_by_name(
-                       BASE_WINDOW( instance ),
-                       "SelectionCountSigneCombobox",
-                       "changed",
-                       G_CALLBACK( on_selcount_ope_changed ));
+       g_signal_connect(
+                       tview, TREE_SIGNAL_SELECTION_CHANGED,
+                       G_CALLBACK( on_tree_selection_changed ), instance );
 
-       base_window_signal_connect_by_name(
-                       BASE_WINDOW( instance ),
-                       "SelectionCountNumberEntry",
-                       "changed",
-                       G_CALLBACK( on_selcount_int_changed ));
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "SelectionCountSigneCombobox",
+                       "changed", G_CALLBACK( on_selcount_ope_changed ), instance );
 
-       base_window_signal_connect_by_name(
-                       BASE_WINDOW( instance ),
-                       "ShowAlwaysButton",
-                       "toggled",
-                       G_CALLBACK( on_show_always_toggled ));
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "SelectionCountNumberEntry",
+                       "changed", G_CALLBACK( on_selcount_int_changed ), instance );
 
-       base_window_signal_connect_by_name(
-                       BASE_WINDOW( instance ),
-                       "OnlyShowButton",
-                       "toggled",
-                       G_CALLBACK( on_only_show_toggled ));
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "ShowAlwaysButton",
+                       "toggled", G_CALLBACK( on_show_always_toggled ), instance );
 
-       base_window_signal_connect_by_name(
-                       BASE_WINDOW( instance ),
-                       "DoNotShowButton",
-                       "toggled",
-                       G_CALLBACK( on_do_not_show_toggled ));
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "OnlyShowButton",
+                       "toggled", G_CALLBACK( on_only_show_toggled ), instance );
 
-       listview = GTK_TREE_VIEW( base_window_get_widget( BASE_WINDOW( instance ), 
"EnvironmentsDesktopTreeView" ));
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "DoNotShowButton",
+                       "toggled", G_CALLBACK( on_do_not_show_toggled ), instance );
+
+       listview = GTK_TREE_VIEW(
+                       na_gtk_utils_find_widget_by_name(
+                                       GTK_CONTAINER( instance ), "EnvironmentsDesktopTreeView" ));
        model = gtk_tree_view_get_model( listview );
 
        desktops = na_desktop_environment_get_known_list();
@@ -342,53 +316,39 @@ on_base_initialize_window( NactIEnvironmentTab *instance, void *user_data )
        column = gtk_tree_view_get_column( listview, ENV_BOOL_COLUMN );
        renderers = gtk_cell_layout_get_cells( GTK_CELL_LAYOUT( column ));
 
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( renderers->data ),
-                       "toggled",
-                       G_CALLBACK( on_desktop_toggled ));
+       g_signal_connect(
+                       renderers->data,
+                       "toggled", G_CALLBACK( on_desktop_toggled ), instance );
 
-       base_window_signal_connect_by_name(
-                       BASE_WINDOW( instance ),
-                       "TryExecEntry",
-                       "changed",
-                       G_CALLBACK( on_try_exec_changed ));
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "TryExecEntry",
+                       "changed", G_CALLBACK( on_try_exec_changed ), instance );
 
-       base_window_signal_connect_by_name(
-                       BASE_WINDOW( instance ),
-                       "TryExecButton",
-                       "clicked",
-                       G_CALLBACK( on_try_exec_browse ));
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "TryExecButton",
+                       "clicked", G_CALLBACK( on_try_exec_browse ), instance );
 
-       base_window_signal_connect_by_name(
-                       BASE_WINDOW( instance ),
-                       "ShowIfRegisteredEntry",
-                       "changed",
-                       G_CALLBACK( on_show_if_registered_changed ));
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "ShowIfRegisteredEntry",
+                       "changed", G_CALLBACK( on_show_if_registered_changed ), instance );
 
-       base_window_signal_connect_by_name(
-                       BASE_WINDOW( instance ),
-                       "ShowIfTrueEntry",
-                       "changed",
-                       G_CALLBACK( on_show_if_true_changed ));
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "ShowIfTrueEntry",
+                       "changed", G_CALLBACK( on_show_if_true_changed ), instance );
 
-       base_window_signal_connect_by_name(
-                       BASE_WINDOW( instance ),
-                       "ShowIfRunningEntry",
-                       "changed",
-                       G_CALLBACK( on_show_if_running_changed ));
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "ShowIfRunningEntry",
+                       "changed", G_CALLBACK( on_show_if_running_changed ), instance );
 
-       base_window_signal_connect_by_name(
-                       BASE_WINDOW( instance ),
-                       "ShowIfRunningButton",
-                       "clicked",
-                       G_CALLBACK( on_show_if_running_browse ));
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "ShowIfRunningButton",
+                       "clicked", G_CALLBACK( on_show_if_running_browse ), instance );
 }
 
 static void
-on_main_selection_changed( NactIEnvironmentTab *instance, GList *selected_items, gpointer user_data )
+on_tree_selection_changed( NactTreeView *tview, GList *selected_items, NactIEnvironmentTab *instance )
 {
-       static const gchar *thisfn = "nact_ienvironment_tab_on_main_selection_changed";
+       static const gchar *thisfn = "nact_ienvironment_tab_on_tree_selection_changed";
        NAIContext *context;
        gboolean editable;
        gboolean enable_tab;
@@ -405,10 +365,10 @@ on_main_selection_changed( NactIEnvironmentTab *instance, GList *selected_items,
 
        g_return_if_fail( NACT_IS_IENVIRONMENT_TAB( instance ));
 
-       g_debug( "%s: instance=%p (%s), selected_items=%p (count=%d)",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) selected_items, g_list_length( selected_items ));
+       g_debug( "%s: tview=%p, selected_items=%p (count=%d), instance=%p (%s)",
+                       thisfn, tview,
+                       ( void * ) selected_items, g_list_length( selected_items ),
+                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
        g_object_get( G_OBJECT( instance ),
                        MAIN_PROP_CONTEXT, &context, MAIN_PROP_EDITABLE, &editable,
@@ -429,22 +389,22 @@ on_main_selection_changed( NactIEnvironmentTab *instance, GList *selected_items,
        g_free( selcount_ope );
        g_free( sel_count );
 
-       combo = base_window_get_widget( BASE_WINDOW( instance ), "SelectionCountSigneCombobox" );
+       combo = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "SelectionCountSigneCombobox" );
        base_gtk_utils_set_editable( G_OBJECT( combo ), editable );
 
-       entry = base_window_get_widget( BASE_WINDOW( instance ), "SelectionCountNumberEntry" );
+       entry = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "SelectionCountNumberEntry" );
        base_gtk_utils_set_editable( G_OBJECT( entry ), editable );
 
        /* desktop environment
         */
        raz_desktop_listview( instance );
 
-       always_button = base_window_get_widget( BASE_WINDOW( instance ), "ShowAlwaysButton" );
-       show_button = base_window_get_widget( BASE_WINDOW( instance ), "OnlyShowButton" );
-       notshow_button = base_window_get_widget( BASE_WINDOW( instance ), "DoNotShowButton" );
+       always_button = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ShowAlwaysButton" );
+       show_button = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "OnlyShowButton" );
+       notshow_button = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "DoNotShowButton" );
 
        desktops = context ? na_object_get_only_show_in( context ) : NULL;
-       listview = GTK_TREE_VIEW( base_window_get_widget( BASE_WINDOW( instance ), 
"EnvironmentsDesktopTreeView" ));
+       listview = GTK_TREE_VIEW( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"EnvironmentsDesktopTreeView" ));
        gtk_toggle_button_set_inconsistent( GTK_TOGGLE_BUTTON( always_button ), context == NULL );
 
        if( desktops && g_slist_length( desktops )){
@@ -475,38 +435,38 @@ on_main_selection_changed( NactIEnvironmentTab *instance, GList *selected_items,
 
        /* execution environment
         */
-       entry = base_window_get_widget( BASE_WINDOW( instance ), "TryExecEntry" );
+       entry = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "TryExecEntry" );
        text = context ? na_object_get_try_exec( context ) : g_strdup( "" );
        text = text && strlen( text ) ? text : g_strdup( "" );
        gtk_entry_set_text( GTK_ENTRY( entry ), text );
        g_free( text );
        base_gtk_utils_set_editable( G_OBJECT( entry ), editable );
 
-       browse_button = base_window_get_widget( BASE_WINDOW( instance ), "TryExecButton" );
+       browse_button = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "TryExecButton" );
        base_gtk_utils_set_editable( G_OBJECT( browse_button ), editable );
 
-       entry = base_window_get_widget( BASE_WINDOW( instance ), "ShowIfRegisteredEntry" );
+       entry = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ShowIfRegisteredEntry" );
        text = context ? na_object_get_show_if_registered( context ) : g_strdup( "" );
        text = text && strlen( text ) ? text : g_strdup( "" );
        gtk_entry_set_text( GTK_ENTRY( entry ), text );
        g_free( text );
        base_gtk_utils_set_editable( G_OBJECT( entry ), editable );
 
-       entry = base_window_get_widget( BASE_WINDOW( instance ), "ShowIfTrueEntry" );
+       entry = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ShowIfTrueEntry" );
        text = context ? na_object_get_show_if_true( context ) : g_strdup( "" );
        text = text && strlen( text ) ? text : g_strdup( "" );
        gtk_entry_set_text( GTK_ENTRY( entry ), text );
        g_free( text );
        base_gtk_utils_set_editable( G_OBJECT( entry ), editable );
 
-       entry = base_window_get_widget( BASE_WINDOW( instance ), "ShowIfRunningEntry" );
+       entry = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ShowIfRunningEntry" );
        text = context ? na_object_get_show_if_running( context ) : g_strdup( "" );
        text = text && strlen( text ) ? text : g_strdup( "" );
        gtk_entry_set_text( GTK_ENTRY( entry ), text );
        g_free( text );
        base_gtk_utils_set_editable( G_OBJECT( entry ), editable );
 
-       browse_button = base_window_get_widget( BASE_WINDOW( instance ), "ShowIfRunningButton" );
+       browse_button = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ShowIfRunningButton" );
        base_gtk_utils_set_editable( G_OBJECT( browse_button ), editable );
 
        data->on_selection_change = FALSE;
@@ -548,7 +508,7 @@ on_selection_count_changed( NactIEnvironmentTab *instance )
                        na_object_set_selection_count( context, selcount );
                        g_free( selcount );
 
-                       g_signal_emit_by_name( G_OBJECT( instance ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, 
context, 0 );
+                       g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, context, 0 );
                }
        }
 }
@@ -589,14 +549,14 @@ on_show_always_toggled( GtkToggleButton *toggle_button, NactIEnvironmentTab *ins
                active = gtk_toggle_button_get_active( toggle_button );
 
                if( editable ){
-                       listview = GTK_TREE_VIEW( base_window_get_widget( BASE_WINDOW( instance ), 
"EnvironmentsDesktopTreeView" ));
+                       listview = GTK_TREE_VIEW( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance 
), "EnvironmentsDesktopTreeView" ));
                        gtk_widget_set_sensitive( GTK_WIDGET( listview ), !active );
 
                        if( active ){
                                raz_desktop_listview( instance );
                                na_object_set_only_show_in( context, NULL );
                                na_object_set_not_show_in( context, NULL );
-                               g_signal_emit_by_name( G_OBJECT( instance ), 
TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, context, 0 );
+                               g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, 
context, 0 );
                        }
 
                } else {
@@ -637,7 +597,7 @@ on_only_show_toggled( GtkToggleButton *toggle_button, NactIEnvironmentTab *insta
 
                        } else {
                                na_object_set_only_show_in( context, NULL );
-                               g_signal_emit_by_name( G_OBJECT( instance ), 
TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, context, 0 );
+                               g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, 
context, 0 );
                        }
 
                } else {
@@ -678,7 +638,7 @@ on_do_not_show_toggled( GtkToggleButton *toggle_button, NactIEnvironmentTab *ins
 
                        } else {
                                na_object_set_not_show_in( context, NULL );
-                               g_signal_emit_by_name( G_OBJECT( instance ), 
TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, context, 0 );
+                               g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, 
context, 0 );
                        }
 
                } else {
@@ -689,7 +649,7 @@ on_do_not_show_toggled( GtkToggleButton *toggle_button, NactIEnvironmentTab *ins
 }
 
 static void
-on_desktop_toggled( GtkCellRendererToggle *renderer, gchar *path, BaseWindow *window )
+on_desktop_toggled( GtkCellRendererToggle *renderer, gchar *path, NactIEnvironmentTab *instance )
 {
        static const gchar *thisfn = "nact_ienvironment_tab_on_desktop_toggled";
        NAIContext *context;
@@ -703,18 +663,19 @@ on_desktop_toggled( GtkCellRendererToggle *renderer, gchar *path, BaseWindow *wi
        GtkWidget *show_button;
        IEnvironData *data;
 
-       g_debug( "%s: renderer=%p, path=%s, window=%p", thisfn, ( void * ) renderer, path, ( void * ) window 
);
+       g_debug( "%s: renderer=%p, path=%s, instance=%p",
+                       thisfn, ( void * ) renderer, path, ( void * ) instance );
 
-       data = get_ienviron_data( NACT_IENVIRONMENT_TAB( window ));
+       data = get_ienviron_data( instance );
 
        if( !data->on_selection_change ){
-               g_object_get( G_OBJECT( window ),
+               g_object_get( G_OBJECT( instance ),
                                MAIN_PROP_CONTEXT, &context, MAIN_PROP_EDITABLE, &editable,
                                NULL );
 
                if( context ){
                        if( editable ){
-                               listview = GTK_TREE_VIEW( base_window_get_widget( window, 
"EnvironmentsDesktopTreeView" ));
+                               listview = GTK_TREE_VIEW( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( 
instance ), "EnvironmentsDesktopTreeView" ));
                                model = gtk_tree_view_get_model( listview );
                                tree_path = gtk_tree_path_new_from_string( path );
                                gtk_tree_model_get_iter( model, &iter, tree_path );
@@ -722,21 +683,21 @@ on_desktop_toggled( GtkCellRendererToggle *renderer, gchar *path, BaseWindow *wi
                                gtk_tree_model_get( model, &iter, ENV_BOOL_COLUMN, &state, 
ENV_KEYWORD_COLUMN, &desktop, -1 );
                                gtk_list_store_set( GTK_LIST_STORE( model ), &iter, ENV_BOOL_COLUMN, !state, 
-1 );
 
-                               show_button = base_window_get_widget( BASE_WINDOW( window ), "OnlyShowButton" 
);
+                               show_button = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"OnlyShowButton" );
                                if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( show_button ))){
                                        na_object_set_only_desktop( context, desktop, !state );
                                } else {
                                        na_object_set_not_desktop( context, desktop, !state );
                                }
 
-                               g_signal_emit_by_name( G_OBJECT( window ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, 
context, 0 );
+                               g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, 
context, 0 );
 
                                g_free( desktop );
 
                        } else {
-                               g_signal_handlers_block_by_func(( gpointer ) renderer, on_desktop_toggled, 
window );
+                               g_signal_handlers_block_by_func(( gpointer ) renderer, on_desktop_toggled, 
instance );
                                gtk_cell_renderer_toggle_set_active( renderer, state );
-                               g_signal_handlers_unblock_by_func(( gpointer ) renderer, on_desktop_toggled, 
window );
+                               g_signal_handlers_unblock_by_func(( gpointer ) renderer, on_desktop_toggled, 
instance );
                        }
                }
        }
@@ -753,7 +714,7 @@ on_try_exec_changed( GtkEntry *entry, NactIEnvironmentTab *instance )
        if( context ){
                text = gtk_entry_get_text( entry );
                na_object_set_try_exec( context, text );
-               g_signal_emit_by_name( G_OBJECT( instance ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, context, 0 );
+               g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, context, 0 );
        }
 }
 
@@ -762,7 +723,7 @@ on_try_exec_browse( GtkButton *button, NactIEnvironmentTab *instance )
 {
        GtkWidget *entry;
 
-       entry = base_window_get_widget( BASE_WINDOW( instance ), "TryExecEntry" );
+       entry = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "TryExecEntry" );
 
        base_gtk_utils_select_file(
                        BASE_WINDOW( instance ),
@@ -781,7 +742,7 @@ on_show_if_registered_changed( GtkEntry *entry, NactIEnvironmentTab *instance )
        if( context ){
                text = gtk_entry_get_text( entry );
                na_object_set_show_if_registered( context, text );
-               g_signal_emit_by_name( G_OBJECT( instance ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, context, 0 );
+               g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, context, 0 );
        }
 }
 
@@ -796,7 +757,7 @@ on_show_if_true_changed( GtkEntry *entry, NactIEnvironmentTab *instance )
        if( context ){
                text = gtk_entry_get_text( entry );
                na_object_set_show_if_true( context, text );
-               g_signal_emit_by_name( G_OBJECT( instance ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, context, 0 );
+               g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, context, 0 );
        }
 }
 
@@ -811,7 +772,7 @@ on_show_if_running_changed( GtkEntry *entry, NactIEnvironmentTab *instance )
        if( context ){
                text = gtk_entry_get_text( entry );
                na_object_set_show_if_running( context, text );
-               g_signal_emit_by_name( G_OBJECT( instance ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, context, 0 );
+               g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, context, 0 );
        }
 }
 
@@ -820,7 +781,7 @@ on_show_if_running_browse( GtkButton *button, NactIEnvironmentTab *instance )
 {
        GtkWidget *entry;
 
-       entry = base_window_get_widget( BASE_WINDOW( instance ), "ShowIfRunningEntry" );
+       entry = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ShowIfRunningEntry" );
 
        base_gtk_utils_select_file(
                        BASE_WINDOW( instance ),
@@ -846,7 +807,7 @@ init_selection_count_combobox( NactIEnvironmentTab *instance )
                i += 1;
        }
 
-       combo = GTK_COMBO_BOX( base_window_get_widget( BASE_WINDOW( instance ), "SelectionCountSigneCombobox" 
));
+       combo = GTK_COMBO_BOX( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"SelectionCountSigneCombobox" ));
        gtk_combo_box_set_model( combo, model );
        g_object_unref( model );
 
@@ -873,13 +834,13 @@ get_selection_count_selection( NactIEnvironmentTab *instance )
        gchar *uints, *selcount;
        guint uinti;
 
-       combo = GTK_COMBO_BOX( base_window_get_widget( BASE_WINDOW( instance ), "SelectionCountSigneCombobox" 
));
+       combo = GTK_COMBO_BOX( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"SelectionCountSigneCombobox" ));
        index = gtk_combo_box_get_active( combo );
        if( index == -1 ){
                return( NULL );
        }
 
-       entry = GTK_ENTRY( base_window_get_widget( BASE_WINDOW( instance ), "SelectionCountNumberEntry" ));
+       entry = GTK_ENTRY( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"SelectionCountNumberEntry" ));
        uinti = abs( atoi( gtk_entry_get_text( entry )));
        uints = g_strdup_printf( "%d", uinti );
        gtk_entry_set_text( entry, uints );
@@ -897,7 +858,7 @@ set_selection_count_selection( NactIEnvironmentTab *instance, const gchar *ope,
        GtkEntry *entry;
        gint i, index;
 
-       combo = GTK_COMBO_BOX( base_window_get_widget( BASE_WINDOW( instance ), "SelectionCountSigneCombobox" 
));
+       combo = GTK_COMBO_BOX( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"SelectionCountSigneCombobox" ));
 
        index = -1;
        for( i=0 ; st_counts[i].sign && index==-1 ; ++i ){
@@ -907,7 +868,7 @@ set_selection_count_selection( NactIEnvironmentTab *instance, const gchar *ope,
        }
        gtk_combo_box_set_active( combo, index );
 
-       entry = GTK_ENTRY( base_window_get_widget( BASE_WINDOW( instance ), "SelectionCountNumberEntry" ));
+       entry = GTK_ENTRY( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"SelectionCountNumberEntry" ));
        gtk_entry_set_text( entry, uint );
 }
 
@@ -917,7 +878,7 @@ dispose_selection_count_combobox( NactIEnvironmentTab *instance )
        GtkWidget *combo;
        GtkTreeModel *model;
 
-       combo = base_window_get_widget( BASE_WINDOW( instance ), "SelectionCountSigneCombobox" );
+       combo = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "SelectionCountSigneCombobox" );
        if( GTK_IS_COMBO_BOX( combo )){
                model = gtk_combo_box_get_model( GTK_COMBO_BOX( combo ));
                gtk_list_store_clear( GTK_LIST_STORE( model ));
@@ -933,7 +894,7 @@ init_desktop_listview( NactIEnvironmentTab *instance )
        GtkTreeViewColumn *column;
        GtkTreeSelection *selection;
 
-       listview = GTK_TREE_VIEW( base_window_get_widget( BASE_WINDOW( instance ), 
"EnvironmentsDesktopTreeView" ));
+       listview = GTK_TREE_VIEW( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"EnvironmentsDesktopTreeView" ));
        model = gtk_list_store_new( N_COLUMN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING );
        gtk_tree_view_set_model( listview, GTK_TREE_MODEL( model ));
        g_object_unref( model );
@@ -968,7 +929,7 @@ raz_desktop_listview( NactIEnvironmentTab *instance )
        GtkTreeIter iter;
        gboolean next_ok;
 
-       listview = GTK_TREE_VIEW( base_window_get_widget( BASE_WINDOW( instance ), 
"EnvironmentsDesktopTreeView" ));
+       listview = GTK_TREE_VIEW( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"EnvironmentsDesktopTreeView" ));
        model = gtk_tree_view_get_model( listview );
 
        if( gtk_tree_model_get_iter_first( model, &iter )){
@@ -991,7 +952,7 @@ setup_desktop_listview( NactIEnvironmentTab *instance, GSList *show )
        GSList *ic;
        gchar *keyword;
 
-       listview = GTK_TREE_VIEW( base_window_get_widget( BASE_WINDOW( instance ), 
"EnvironmentsDesktopTreeView" ));
+       listview = GTK_TREE_VIEW( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"EnvironmentsDesktopTreeView" ));
        model = gtk_tree_view_get_model( listview );
 
        for( ic = show ; ic ; ic = ic->next ){
@@ -1025,7 +986,7 @@ dispose_desktop_listview( NactIEnvironmentTab *instance )
        GtkTreeModel *model;
        GtkTreeSelection *selection;
 
-       listview = base_window_get_widget( BASE_WINDOW( instance ), "EnvironmentsDesktopTreeView" );
+       listview = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "EnvironmentsDesktopTreeView" 
);
        if( GTK_IS_TREE_VIEW( listview )){
                model = gtk_tree_view_get_model( GTK_TREE_VIEW( listview ));
                selection = gtk_tree_view_get_selection( GTK_TREE_VIEW( listview ));
diff --git a/src/nact/nact-iexecution-tab.c b/src/nact/nact-iexecution-tab.c
index ff40e50..f683b25 100644
--- a/src/nact/nact-iexecution-tab.c
+++ b/src/nact/nact-iexecution-tab.c
@@ -33,10 +33,13 @@
 
 #include <string.h>
 
-#include <api/na-object-api.h>
+#include "api/na-object-api.h"
+
+#include "core/na-gtk-utils.h"
 
 #include "base-gtk-utils.h"
 #include "nact-main-tab.h"
+#include "nact-main-window.h"
 #include "nact-iexecution-tab.h"
 
 /* private interface data
@@ -59,11 +62,8 @@ static guint st_initializations = 0; /* interface initialization count */
 static GType           register_type( void );
 static void            interface_base_init( NactIExecutionTabInterface *klass );
 static void            interface_base_finalize( NactIExecutionTabInterface *klass );
-
-static void            on_base_initialize_window( NactIExecutionTab *instance, gpointer user_data );
-
-static void            on_main_selection_changed( NactIExecutionTab *instance, GList *selected_items, 
gpointer user_data );
-
+static void            initialize_window( NactIExecutionTab *instance );
+static void            on_tree_selection_changed( NactTreeView *tview, GList *selected_items, 
NactIExecutionTab *instance );
 static void            on_normal_mode_toggled( GtkToggleButton *togglebutton, NactIExecutionTab *instance );
 static void            on_terminal_mode_toggled( GtkToggleButton *togglebutton, NactIExecutionTab *instance 
);
 static void            on_embedded_mode_toggled( GtkToggleButton *togglebutton, NactIExecutionTab *instance 
);
@@ -72,7 +72,6 @@ static void            execution_mode_toggle( NactIExecutionTab *instance, GtkTo
 static void            on_startup_notify_toggled( GtkToggleButton *togglebutton, NactIExecutionTab *instance 
);
 static void            on_startup_class_changed( GtkEntry *entry, NactIExecutionTab *instance );
 static void            on_execute_as_changed( GtkEntry *entry, NactIExecutionTab *instance );
-
 static IExecutionData *get_iexecution_data( NactIExecutionTab *instance );
 static void            on_instance_finalized( gpointer user_data, NactIExecutionTab *instance );
 
@@ -110,7 +109,7 @@ register_type( void )
 
        type = g_type_register_static( G_TYPE_INTERFACE, "NactIExecutionTab", &info, 0 );
 
-       g_type_interface_add_prerequisite( type, BASE_TYPE_WINDOW );
+       g_type_interface_add_prerequisite( type, GTK_TYPE_APPLICATION_WINDOW );
 
        return( type );
 }
@@ -158,19 +157,14 @@ nact_iexecution_tab_init( NactIExecutionTab *instance )
        static const gchar *thisfn = "nact_iexecution_tab_init";
        IExecutionData *data;
 
-       g_return_if_fail( NACT_IS_IEXECUTION_TAB( instance ));
+       g_return_if_fail( instance && NACT_IS_IEXECUTION_TAB( instance ));
 
        g_debug( "%s: instance=%p (%s)",
                        thisfn,
                        ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       BASE_SIGNAL_INITIALIZE_WINDOW,
-                       G_CALLBACK( on_base_initialize_window ));
-
        nact_main_tab_init( NACT_MAIN_WINDOW( instance ), TAB_EXECUTION );
+       initialize_window( instance );
 
        data = get_iexecution_data( instance );
        data->on_selection_change = FALSE;
@@ -186,70 +180,55 @@ nact_iexecution_tab_init( NactIExecutionTab *instance )
  * Connect signals and setup runtime values.
  */
 static void
-on_base_initialize_window( NactIExecutionTab *instance, void *user_data )
+initialize_window( NactIExecutionTab *instance )
 {
-       static const gchar *thisfn = "nact_iexecution_tab_on_base_initialize_window";
+       static const gchar *thisfn = "nact_iexecution_tab_initialize_window";
+       NactTreeView *tview;
 
        g_return_if_fail( NACT_IS_IEXECUTION_TAB( instance ));
 
-       g_debug( "%s: instance=%p (%s), user_data=%p",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) user_data );
+       g_debug( "%s: instance=%p (%s)",
+                       thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       MAIN_SIGNAL_SELECTION_CHANGED,
-                       G_CALLBACK( on_main_selection_changed ));
-
-       base_window_signal_connect_by_name(
-                       BASE_WINDOW( instance ),
-                       "ExecutionModeNormal",
-                       "toggled",
-                       G_CALLBACK( on_normal_mode_toggled ));
-
-       base_window_signal_connect_by_name(
-                       BASE_WINDOW( instance ),
-                       "ExecutionModeTerminal",
-                       "toggled",
-                       G_CALLBACK( on_terminal_mode_toggled ));
-
-       base_window_signal_connect_by_name(
-                       BASE_WINDOW( instance ),
-                       "ExecutionModeEmbedded",
-                       "toggled",
-                       G_CALLBACK( on_embedded_mode_toggled ));
-
-       base_window_signal_connect_by_name(
-                       BASE_WINDOW( instance ),
-                       "ExecutionModeDisplayOutput",
-                       "toggled",
-                       G_CALLBACK( on_display_mode_toggled ));
-
-       base_window_signal_connect_by_name(
-                       BASE_WINDOW( instance ),
-                       "StartupNotifyButton",
-                       "toggled",
-                       G_CALLBACK( on_startup_notify_toggled ));
-
-       base_window_signal_connect_by_name(
-                       BASE_WINDOW( instance ),
-                       "StartupWMClassEntry",
-                       "changed",
-                       G_CALLBACK( on_startup_class_changed ));
-
-       base_window_signal_connect_by_name(
-                       BASE_WINDOW( instance ),
-                       "ExecuteAsEntry",
-                       "changed",
-                       G_CALLBACK( on_execute_as_changed ));
+       tview = nact_main_window_get_items_view( NACT_MAIN_WINDOW( instance ));
+
+       g_signal_connect(
+                       tview, TREE_SIGNAL_SELECTION_CHANGED,
+                       G_CALLBACK( on_tree_selection_changed ), instance );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "ExecutionModeNormal",
+                       "toggled", G_CALLBACK( on_normal_mode_toggled ), instance );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "ExecutionModeTerminal",
+                       "toggled", G_CALLBACK( on_terminal_mode_toggled ), instance );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "ExecutionModeEmbedded",
+                       "toggled", G_CALLBACK( on_embedded_mode_toggled ), instance );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "ExecutionModeDisplayOutput",
+                       "toggled", G_CALLBACK( on_display_mode_toggled ), instance );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "StartupNotifyButton",
+                       "toggled", G_CALLBACK( on_startup_notify_toggled ), instance );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "StartupWMClassEntry",
+                       "changed", G_CALLBACK( on_startup_class_changed ), instance );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "ExecuteAsEntry",
+                       "changed", G_CALLBACK( on_execute_as_changed ), instance );
 }
 
 static void
-on_main_selection_changed( NactIExecutionTab *instance, GList *selected_items, gpointer user_data )
+on_tree_selection_changed( NactTreeView *tview, GList *selected_items, NactIExecutionTab *instance )
 {
-       static const gchar *thisfn = "nact_iexecution_tab_on_main_selection_changed";
+       static const gchar *thisfn = "nact_iexecution_tab_on_tree_selection_changed";
        NAObjectProfile *profile;
        gboolean editable;
        gboolean enable_tab;
@@ -263,10 +242,10 @@ on_main_selection_changed( NactIExecutionTab *instance, GList *selected_items, g
 
        g_return_if_fail( NACT_IS_IEXECUTION_TAB( instance ));
 
-       g_debug( "%s: instance=%p (%s), selected_items=%p (count=%d)",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) selected_items, g_list_length( selected_items ));
+       g_debug( "%s: tview=%p, selected_items=%p (count=%d), instance=%p (%s)",
+                       thisfn, tview,
+                       ( void * ) selected_items, g_list_length( selected_items ),
+                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
        g_object_get(
                        G_OBJECT( instance ),
@@ -280,10 +259,10 @@ on_main_selection_changed( NactIExecutionTab *instance, GList *selected_items, g
        data = get_iexecution_data( instance );
        data->on_selection_change = TRUE;
 
-       normal_toggle = base_window_get_widget( BASE_WINDOW( instance ), "ExecutionModeNormal" );
-       terminal_toggle = base_window_get_widget( BASE_WINDOW( instance ), "ExecutionModeTerminal" );
-       embedded_toggle = base_window_get_widget( BASE_WINDOW( instance ), "ExecutionModeEmbedded" );
-       display_toggle = base_window_get_widget( BASE_WINDOW( instance ), "ExecutionModeDisplayOutput" );
+       normal_toggle = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ExecutionModeNormal" );
+       terminal_toggle = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"ExecutionModeTerminal" );
+       embedded_toggle = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"ExecutionModeEmbedded" );
+       display_toggle = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"ExecutionModeDisplayOutput" );
 
        mode = profile ? na_object_get_execution_mode( profile ) : g_strdup( "Normal" );
        gtk_toggle_button_set_inconsistent( GTK_TOGGLE_BUTTON( normal_toggle ), profile == NULL );
@@ -314,25 +293,25 @@ on_main_selection_changed( NactIExecutionTab *instance, GList *selected_items, g
 
        g_free( mode );
 
-       frame = base_window_get_widget( BASE_WINDOW( instance ), "StartupModeFrame" );
+       frame = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "StartupModeFrame" );
        gtk_widget_set_sensitive( frame, FALSE );
 
        notify = profile ? na_object_get_startup_notify( profile ) : FALSE;
-       notify_check = base_window_get_widget( BASE_WINDOW( instance ), "StartupNotifyButton" );
+       notify_check = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "StartupNotifyButton" );
        base_gtk_utils_set_editable( G_OBJECT( notify_check ), editable );
        gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( notify_check ), notify );
 
        class = profile ? na_object_get_startup_class( profile ) : g_strdup( "" );
-       entry = base_window_get_widget( BASE_WINDOW( instance ), "StartupWMClassEntry" );
+       entry = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "StartupWMClassEntry" );
        gtk_entry_set_text( GTK_ENTRY( entry ), class );
        base_gtk_utils_set_editable( G_OBJECT( entry ), editable );
        g_free( class );
 
-       frame = base_window_get_widget( BASE_WINDOW( instance ), "UserFrame" );
+       frame = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "UserFrame" );
        gtk_widget_set_sensitive( frame, FALSE );
 
        user = profile ? na_object_get_execute_as( profile ) : g_strdup( "" );
-       entry = base_window_get_widget( BASE_WINDOW( instance ), "ExecuteAsEntry" );
+       entry = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ExecuteAsEntry" );
        gtk_entry_set_text( GTK_ENTRY( entry ), user );
        base_gtk_utils_set_editable( G_OBJECT( entry ), editable );
        g_free( user );
@@ -387,12 +366,12 @@ execution_mode_toggle( NactIExecutionTab *instance, GtkToggleButton *toggle_butt
                                na_object_set_execution_mode( profile, mode );
 
                                is_normal = ( strcmp( mode, "Normal" ) == 0 );
-                               widget = base_window_get_widget( BASE_WINDOW( instance ), 
"StartupNotifyButton" );
+                               widget = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"StartupNotifyButton" );
                                gtk_widget_set_sensitive( widget, is_normal );
-                               widget = base_window_get_widget( BASE_WINDOW( instance ), 
"StartupWMClassEntry" );
+                               widget = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"StartupWMClassEntry" );
                                gtk_widget_set_sensitive( widget, is_normal );
 
-                               g_signal_emit_by_name( G_OBJECT( instance ), 
TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, profile, 0 );
+                               g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, 
profile, 0 );
                        }
 
                } else {
@@ -419,7 +398,7 @@ on_startup_notify_toggled( GtkToggleButton *toggle_button, NactIExecutionTab *in
 
                if( editable ){
                        na_object_set_startup_notify( profile, active );
-                       g_signal_emit_by_name( G_OBJECT( instance ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, 
profile, 0 );
+                       g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, profile, 0 );
 
                } else {
                        g_signal_handlers_block_by_func(( gpointer ) toggle_button, 
on_startup_notify_toggled, instance );
@@ -443,7 +422,7 @@ on_startup_class_changed( GtkEntry *entry, NactIExecutionTab *instance )
        if( profile ){
                text = gtk_entry_get_text( entry );
                na_object_set_startup_class( profile, text );
-               g_signal_emit_by_name( G_OBJECT( instance ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, profile, 0 );
+               g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, profile, 0 );
        }
 }
 
@@ -461,7 +440,7 @@ on_execute_as_changed( GtkEntry *entry, NactIExecutionTab *instance )
        if( profile ){
                text = gtk_entry_get_text( entry );
                na_object_set_execute_as( profile, text );
-               g_signal_emit_by_name( G_OBJECT( instance ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, profile, 0 );
+               g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, profile, 0 );
        }
 }
 
diff --git a/src/nact/nact-ifolders-tab.c b/src/nact/nact-ifolders-tab.c
index 2ab621e..f985f66 100644
--- a/src/nact/nact-ifolders-tab.c
+++ b/src/nact/nact-ifolders-tab.c
@@ -34,13 +34,15 @@
 #include <glib/gi18n.h>
 #include <string.h>
 
-#include <api/na-core-utils.h>
-#include <api/na-object-api.h>
+#include "api/na-core-utils.h"
+#include "api/na-object-api.h"
+
+#include "core/na-gtk-utils.h"
 
-#include "base-window.h"
 #include "base-gtk-utils.h"
 #include "nact-application.h"
 #include "nact-main-tab.h"
+#include "nact-main-window.h"
 #include "nact-match-list.h"
 #include "nact-ifolders-tab.h"
 
@@ -59,16 +61,12 @@ static guint st_initializations = 0;        /* interface initialization count */
 static GType   register_type( void );
 static void    interface_base_init( NactIFoldersTabInterface *klass );
 static void    interface_base_finalize( NactIFoldersTabInterface *klass );
-
-static void    on_base_initialize_gtk( NactIFoldersTab *instance, GtkWindow *toplevel, gpointer user_data );
-static void    on_base_initialize_window( NactIFoldersTab *instance, gpointer user_data );
-
-static void    on_main_selection_changed( NactIFoldersTab *instance, GList *selected_items, gpointer 
user_data );
-
-static void    on_browse_folder_clicked( GtkButton *button, BaseWindow *window );
+static void    initialize_gtk( NactIFoldersTab *instance );
+static void    initialize_window( NactIFoldersTab *instance );
+static void    on_tree_selection_changed( NactTreeView *tview, GList *selected_items, NactIFoldersTab 
*instance );
+static void    on_browse_folder_clicked( GtkButton *button, NactIFoldersTab *instance );
 static GSList *get_folders( void *context );
 static void    set_folders( void *context, GSList *filters );
-
 static void    on_instance_finalized( gpointer user_data, NactIFoldersTab *instance );
 
 GType
@@ -105,7 +103,7 @@ register_type( void )
 
        type = g_type_register_static( G_TYPE_INTERFACE, "NactIFoldersTab", &info, 0 );
 
-       g_type_interface_add_prerequisite( type, BASE_TYPE_WINDOW );
+       g_type_interface_add_prerequisite( type, GTK_TYPE_APPLICATION_WINDOW );
 
        return( type );
 }
@@ -158,43 +156,30 @@ nact_ifolders_tab_init( NactIFoldersTab *instance )
                        thisfn,
                        ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       BASE_SIGNAL_INITIALIZE_GTK,
-                       G_CALLBACK( on_base_initialize_gtk ));
-
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       BASE_SIGNAL_INITIALIZE_WINDOW,
-                       G_CALLBACK( on_base_initialize_window ));
-
        nact_main_tab_init( NACT_MAIN_WINDOW( instance ), TAB_FOLDERS );
+       initialize_gtk( instance );
+       initialize_window( instance );
 
        g_object_weak_ref( G_OBJECT( instance ), ( GWeakNotify ) on_instance_finalized, NULL );
 }
 
 static void
-on_base_initialize_gtk( NactIFoldersTab *instance, GtkWindow *toplevel, void *user_data )
+initialize_gtk( NactIFoldersTab *instance )
 {
-       static const gchar *thisfn = "nact_ifolders_tab_on_base_initialize_gtk";
+       static const gchar *thisfn = "nact_ifolders_tab_initialize_gtk";
 
        g_return_if_fail( NACT_IS_IFOLDERS_TAB( instance ));
 
-       g_debug( "%s: instance=%p (%s), toplevel=%p, user_data=%p",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) toplevel,
-                       ( void * ) user_data );
+       g_debug( "%s: instance=%p (%s)",
+                       thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
        nact_match_list_init_with_args(
-                       BASE_WINDOW( instance ),
+                       NACT_MAIN_WINDOW( instance ),
                        ITAB_NAME,
                        TAB_FOLDERS,
-                       base_window_get_widget( BASE_WINDOW( instance ), "FoldersTreeView" ),
-                       base_window_get_widget( BASE_WINDOW( instance ), "AddFolderButton" ),
-                       base_window_get_widget( BASE_WINDOW( instance ), "RemoveFolderButton" ),
+                       na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "FoldersTreeView" ),
+                       na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "AddFolderButton" ),
+                       na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "RemoveFolderButton" ),
                        ( pget_filters ) get_folders,
                        ( pset_filters ) set_folders,
                        NULL,
@@ -205,34 +190,29 @@ on_base_initialize_gtk( NactIFoldersTab *instance, GtkWindow *toplevel, void *us
 }
 
 static void
-on_base_initialize_window( NactIFoldersTab *instance, void *user_data )
+initialize_window( NactIFoldersTab *instance )
 {
-       static const gchar *thisfn = "nact_ifolders_tab_on_base_initialize_window";
-       GtkWidget *button;
+       static const gchar *thisfn = "nact_ifolders_tab_initialize_window";
+       NactTreeView *tview;
 
        g_return_if_fail( NACT_IS_IFOLDERS_TAB( instance ));
 
-       g_debug( "%s: instance=%p (%s), user_data=%p",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) user_data );
-
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       MAIN_SIGNAL_SELECTION_CHANGED,
-                       G_CALLBACK( on_main_selection_changed ));
-
-       button = base_window_get_widget( BASE_WINDOW( instance ), "FolderBrowseButton" );
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( button ),
-                       "clicked",
-                       G_CALLBACK( on_browse_folder_clicked ));
+       g_debug( "%s: instance=%p (%s)",
+                       thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
+
+       tview = nact_main_window_get_items_view( NACT_MAIN_WINDOW( instance ));
+
+       g_signal_connect(
+                       tview, TREE_SIGNAL_SELECTION_CHANGED,
+                       G_CALLBACK( on_tree_selection_changed ), instance );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "FolderBrowseButton",
+                       "clicked", G_CALLBACK( on_browse_folder_clicked ), instance );
 }
 
 static void
-on_main_selection_changed( NactIFoldersTab *instance, GList *selected_items, gpointer user_data )
+on_tree_selection_changed( NactTreeView *tview, GList *selected_items, NactIFoldersTab *instance )
 {
        NAIContext *context;
        gboolean editable;
@@ -246,56 +226,29 @@ on_main_selection_changed( NactIFoldersTab *instance, GList *selected_items, gpo
        enable_tab = ( context != NULL );
        nact_main_tab_enable_page( NACT_MAIN_WINDOW( instance ), TAB_FOLDERS, enable_tab );
 
-       button = base_window_get_widget( BASE_WINDOW( instance ), "FolderBrowseButton" );
+       button = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "FolderBrowseButton" );
        base_gtk_utils_set_editable( G_OBJECT( button ), editable );
 }
 
 static void
-on_browse_folder_clicked( GtkButton *button, BaseWindow *window )
+on_browse_folder_clicked( GtkButton *button, NactIFoldersTab *instance )
 {
-#if 0
-       /* this is the code I sent to gtk-app-devel list
-        * to know why one is not able to just enter '/' in the location entry
-        */
-       GtkWidget *dialog;
-       gchar *path;
-
-       dialog = gtk_file_chooser_dialog_new( _( "Select a folder" ),
-                       NULL,
-                       GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
-                       GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-                       GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
-                       NULL );
-
-       gtk_file_chooser_set_filename( GTK_FILE_CHOOSER( dialog ), "/" );
-
-       if( gtk_dialog_run( GTK_DIALOG( dialog )) == GTK_RESPONSE_ACCEPT ){
-               path = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER( dialog ));
-               g_debug( "nact_ifolders_tab_on_add_folder_clicked: path=%s", path );
-               g_free( path );
-       }
-
-       gtk_widget_destroy( dialog );
-#endif
-
        gchar *uri, *path;
-       GtkWindow *toplevel;
        GtkWidget *dialog;
 
        uri = NULL;
-       toplevel = base_window_get_gtk_toplevel( window );
 
        /* i18n: title of the FileChoose dialog when selecting an URI which
         * will be compare to Nautilus 'current_folder'
         */
        dialog = gtk_file_chooser_dialog_new( _( "Select a folder" ),
-                       toplevel,
+                       GTK_WINDOW( instance ),
                        GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
-                       GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-                       GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+                       _( "_Cancel" ), GTK_RESPONSE_CANCEL,
+                       _( "_Open" ), GTK_RESPONSE_ACCEPT,
                        NULL );
 
-       base_gtk_utils_restore_window_position( window, NA_IPREFS_FOLDER_CHOOSER_WSP );
+       na_gtk_utils_restore_window_position( GTK_WINDOW( dialog ), NA_IPREFS_FOLDER_CHOOSER_WSP );
 
        uri = na_settings_get_string( NA_IPREFS_FOLDER_CHOOSER_URI, NULL, NULL );
        if( uri && g_utf8_strlen( uri, -1 )){
@@ -306,15 +259,13 @@ on_browse_folder_clicked( GtkButton *button, BaseWindow *window )
        if( gtk_dialog_run( GTK_DIALOG( dialog )) == GTK_RESPONSE_ACCEPT ){
                uri = gtk_file_chooser_get_current_folder_uri( GTK_FILE_CHOOSER( dialog ));
                na_settings_set_string( NA_IPREFS_FOLDER_CHOOSER_URI, uri );
-
                path = g_filename_from_uri( uri, NULL, NULL );
-               nact_match_list_insert_row( window, ITAB_NAME, path, FALSE, FALSE );
+               nact_match_list_insert_row( NACT_MAIN_WINDOW( instance ), ITAB_NAME, path, FALSE, FALSE );
                g_free( path );
-
                g_free( uri );
        }
 
-       base_gtk_utils_save_window_position( window, NA_IPREFS_FOLDER_CHOOSER_WSP );
+       na_gtk_utils_restore_window_position( GTK_WINDOW( dialog ), NA_IPREFS_FOLDER_CHOOSER_WSP );
 
        gtk_widget_destroy( dialog );
 }
diff --git a/src/nact/nact-imimetypes-tab.c b/src/nact/nact-imimetypes-tab.c
index 5d8d1bc..69dd5ed 100644
--- a/src/nact/nact-imimetypes-tab.c
+++ b/src/nact/nact-imimetypes-tab.c
@@ -33,9 +33,12 @@
 
 #include <glib/gi18n.h>
 
-#include <api/na-object-api.h>
+#include "api/na-object-api.h"
+
+#include "core/na-gtk-utils.h"
 
 #include "nact-main-tab.h"
+#include "nact-main-window.h"
 #include "nact-match-list.h"
 #include "nact-imimetypes-tab.h"
 
@@ -54,15 +57,11 @@ static guint st_initializations = 0;        /* interface initialization count */
 static GType   register_type( void );
 static void    interface_base_init( NactIMimetypesTabInterface *klass );
 static void    interface_base_finalize( NactIMimetypesTabInterface *klass );
-
-static void    on_base_initialize_gtk( NactIMimetypesTab *instance, GtkWindow *toplevel, gpointer user_data 
);
-static void    on_base_initialize_window( NactIMimetypesTab *instance, gpointer user_data );
-
-static void    on_main_selection_changed( NactIMimetypesTab *instance, GList *selected_items, gpointer 
user_data );
-
+static void    initialize_gtk( NactIMimetypesTab *instance );
+static void    initialize_window( NactIMimetypesTab *instance );
+static void    on_tree_selection_changed( NactTreeView *tview, GList *selected_items, NactIMimetypesTab 
*instance );
 static GSList *get_mimetypes( void *context );
 static void    set_mimetypes( void *context, GSList *filters );
-
 static void    on_instance_finalized( gpointer user_data, NactIMimetypesTab *instance );
 
 GType
@@ -99,7 +98,7 @@ register_type( void )
 
        type = g_type_register_static( G_TYPE_INTERFACE, "NactIMimetypesTab", &info, 0 );
 
-       g_type_interface_add_prerequisite( type, BASE_TYPE_WINDOW );
+       g_type_interface_add_prerequisite( type, GTK_TYPE_APPLICATION_WINDOW );
 
        return( type );
 }
@@ -152,49 +151,36 @@ nact_imimetypes_tab_init( NactIMimetypesTab *instance )
                        thisfn,
                        ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       BASE_SIGNAL_INITIALIZE_GTK,
-                       G_CALLBACK( on_base_initialize_gtk ));
-
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       BASE_SIGNAL_INITIALIZE_WINDOW,
-                       G_CALLBACK( on_base_initialize_window ));
-
        nact_main_tab_init( NACT_MAIN_WINDOW( instance ), TAB_MIMETYPES );
+       initialize_gtk( instance );
+       initialize_window( instance );
 
        g_object_weak_ref( G_OBJECT( instance ), ( GWeakNotify ) on_instance_finalized, NULL );
 }
 
 /*
- * on_base_initialize_gtk:
+ * initialize_gtk:
  * @window: this #NactIMimetypesTab instance.
  *
  * Initializes the tab widget at initial load.
  */
 static void
-on_base_initialize_gtk( NactIMimetypesTab *instance, GtkWindow *toplevel, void *user_data )
+initialize_gtk( NactIMimetypesTab *instance )
 {
-       static const gchar *thisfn = "nact_imimetypes_tab_on_base_initialize_gtk";
+       static const gchar *thisfn = "nact_imimetypes_tab_initialize_gtk";
 
        g_return_if_fail( NACT_IS_IMIMETYPES_TAB( instance ));
 
-       g_debug( "%s: instance=%p (%s), toplevel=%p, user_data=%p",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) toplevel,
-                       ( void * ) user_data );
+       g_debug( "%s: instance=%p (%s)",
+                       thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
        nact_match_list_init_with_args(
-                       BASE_WINDOW( instance ),
+                       NACT_MAIN_WINDOW( instance ),
                        ITAB_NAME,
                        TAB_MIMETYPES,
-                       base_window_get_widget( BASE_WINDOW( instance ), "MimetypesTreeView" ),
-                       base_window_get_widget( BASE_WINDOW( instance ), "AddMimetypeButton" ),
-                       base_window_get_widget( BASE_WINDOW( instance ), "RemoveMimetypeButton" ),
+                       na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "MimetypesTreeView" ),
+                       na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "AddMimetypeButton" ),
+                       na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "RemoveMimetypeButton" ),
                        ( pget_filters ) get_mimetypes,
                        ( pset_filters ) set_mimetypes,
                        NULL,
@@ -205,33 +191,32 @@ on_base_initialize_gtk( NactIMimetypesTab *instance, GtkWindow *toplevel, void *
 }
 
 /*
- * on_base_initialize_window:
+ * initialize_window:
  * @window: this #NactIMimetypesTab instance.
  *
  * Initializes the tab widget at each time the widget will be displayed.
  * Connect signals and setup runtime values.
  */
 static void
-on_base_initialize_window( NactIMimetypesTab *instance, void *user_data )
+initialize_window( NactIMimetypesTab *instance )
 {
-       static const gchar *thisfn = "nact_imimetypes_tab_on_base_initialize_window";
+       static const gchar *thisfn = "nact_imimetypes_tab_initialize_window";
+       NactTreeView *tview;
 
        g_return_if_fail( NACT_IS_IMIMETYPES_TAB( instance ));
 
-       g_debug( "%s: instance=%p (%s), user_data=%p",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) user_data );
-
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       MAIN_SIGNAL_SELECTION_CHANGED,
-                       G_CALLBACK( on_main_selection_changed ));
+       g_debug( "%s: instance=%p (%s)",
+                       thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
+
+       tview = nact_main_window_get_items_view( NACT_MAIN_WINDOW( instance ));
+
+       g_signal_connect(
+                       tview, TREE_SIGNAL_SELECTION_CHANGED,
+                       G_CALLBACK( on_tree_selection_changed ), instance );
 }
 
 static void
-on_main_selection_changed( NactIMimetypesTab *instance, GList *selected_items, gpointer user_data )
+on_tree_selection_changed( NactTreeView *tview, GList *selected_items, NactIMimetypesTab *instance )
 {
        NAIContext *context;
        gboolean editable;
diff --git a/src/nact/nact-iproperties-tab.c b/src/nact/nact-iproperties-tab.c
index 8ac2e7c..0fe0100 100644
--- a/src/nact/nact-iproperties-tab.c
+++ b/src/nact/nact-iproperties-tab.c
@@ -35,13 +35,15 @@
 #include <libintl.h>
 #include <string.h>
 
-#include <api/na-object-api.h>
+#include "api/na-object-api.h"
 
-#include <core/na-io-provider.h>
+#include "core/na-gtk-utils.h"
+#include "core/na-io-provider.h"
 
 #include "base-gtk-utils.h"
 #include "nact-iproperties-tab.h"
 #include "nact-main-tab.h"
+#include "nact-main-window.h"
 
 /* private interface data
  */
@@ -66,20 +68,15 @@ static guint st_initializations = 0;        /* interface initialization count */
 static GType            register_type( void );
 static void             interface_base_init( NactIPropertiesTabInterface *klass );
 static void             interface_base_finalize( NactIPropertiesTabInterface *klass );
-
-static void             on_base_initialize_window( NactIPropertiesTab *instance, gpointer user_data );
-
-static void             on_main_selection_changed( NactIPropertiesTab *instance, GList *selected_items, 
gpointer user_data );
-static void             on_main_item_updated( NactIPropertiesTab *instance, NAObjectItem *item, guint data, 
gpointer user_data );
-
+static void             initialize_window( NactIPropertiesTab *instance );
+static void             on_tree_selection_changed( NactTreeView *tview, GList *selected_items, 
NactIPropertiesTab *instance );
+static void             on_main_item_updated( NactIPropertiesTab *instance, NAIContext *context, guint data, 
void *empty );
 static GtkButton       *get_enabled_button( NactIPropertiesTab *instance );
 static void             on_enabled_toggled( GtkToggleButton *button, NactIPropertiesTab *instance );
 static void             on_readonly_toggled( GtkToggleButton *button, NactIPropertiesTab *instance );
 static void             on_description_changed( GtkTextBuffer *buffer, NactIPropertiesTab *instance );
 static void             on_shortcut_clicked( GtkButton *button, NactIPropertiesTab *instance );
-
 static void             display_provider_name( NactIPropertiesTab *instance, NAObjectItem *item );
-
 static IPropertiesData *get_iproperties_data( NactIPropertiesTab *instance );
 static void             on_instance_finalized( gpointer user_data, NactIPropertiesTab *instance );
 
@@ -117,7 +114,7 @@ register_type( void )
 
        type = g_type_register_static( G_TYPE_INTERFACE, "NactIPropertiesTab", &info, 0 );
 
-       g_type_interface_add_prerequisite( type, BASE_TYPE_WINDOW );
+       g_type_interface_add_prerequisite( type, GTK_TYPE_APPLICATION_WINDOW );
 
        return( type );
 }
@@ -171,13 +168,8 @@ nact_iproperties_tab_init( NactIPropertiesTab *instance )
                        thisfn,
                        ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       BASE_SIGNAL_INITIALIZE_WINDOW,
-                       G_CALLBACK( on_base_initialize_window ));
-
        nact_main_tab_init( NACT_MAIN_WINDOW( instance ), TAB_PROPERTIES );
+       initialize_window( instance );
 
        data = get_iproperties_data( instance );
        data->on_selection_change = FALSE;
@@ -186,64 +178,51 @@ nact_iproperties_tab_init( NactIPropertiesTab *instance )
 }
 
 static void
-on_base_initialize_window( NactIPropertiesTab *instance, void *user_data )
+initialize_window( NactIPropertiesTab *instance )
 {
-       static const gchar *thisfn = "nact_iproperties_tab_on_base_initialize_window";
+       static const gchar *thisfn = "nact_iproperties_tab_initialize_window";
        GtkButton *enabled_button;
        GtkWidget *label_widget;
        GtkTextBuffer *buffer;
+       NactTreeView *tview;
 
        g_return_if_fail( NACT_IS_IPROPERTIES_TAB( instance ));
 
-       g_debug( "%s: instance=%p (%s), user_data=%p",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) user_data );
+       g_debug( "%s: instance=%p (%s)",
+                       thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       MAIN_SIGNAL_SELECTION_CHANGED,
-                       G_CALLBACK( on_main_selection_changed ));
+       tview = nact_main_window_get_items_view( NACT_MAIN_WINDOW( instance ));
 
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       MAIN_SIGNAL_ITEM_UPDATED,
-                       G_CALLBACK( on_main_item_updated ));
+       g_signal_connect(
+                       tview, TREE_SIGNAL_SELECTION_CHANGED,
+                       G_CALLBACK( on_tree_selection_changed ), instance );
+
+       g_signal_connect(
+                       instance, MAIN_SIGNAL_ITEM_UPDATED,
+                       G_CALLBACK( on_main_item_updated ), NULL );
 
        enabled_button = get_enabled_button( instance );
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( enabled_button ),
-                       "toggled",
-                       G_CALLBACK( on_enabled_toggled ));
+       g_signal_connect(
+                       enabled_button, "toggled", G_CALLBACK( on_enabled_toggled ), instance );
 
-       label_widget = base_window_get_widget( BASE_WINDOW( instance ), "ActionDescriptionText" );
+       label_widget = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ActionDescriptionText" );
        buffer = gtk_text_view_get_buffer( GTK_TEXT_VIEW( label_widget ));
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( buffer ),
-                       "changed",
-                       G_CALLBACK( on_description_changed ));
-
-       base_window_signal_connect_by_name(
-                       BASE_WINDOW( instance ),
-                       "SuggestedShortcutButton",
-                       "clicked",
-                       G_CALLBACK( on_shortcut_clicked ));
-
-       base_window_signal_connect_by_name(
-                       BASE_WINDOW( instance ),
-                       "ActionReadonlyButton",
-                       "toggled",
-                       G_CALLBACK( on_readonly_toggled ));
+       g_signal_connect(
+                       buffer, "changed", G_CALLBACK( on_description_changed ), instance );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "SuggestedShortcutButton",
+                       "clicked", G_CALLBACK( on_shortcut_clicked ), instance );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "ActionReadonlyButton",
+                       "toggled", G_CALLBACK( on_readonly_toggled ), instance );
 }
 
 static void
-on_main_selection_changed( NactIPropertiesTab *instance, GList *selected_items, gpointer user_data )
+on_tree_selection_changed( NactTreeView *tview, GList *selected_items, NactIPropertiesTab *instance )
 {
-       static const gchar *thisfn = "nact_iproperties_tab_on_main_selection_changed";
+       static const gchar *thisfn = "nact_iproperties_tab_on_tree_selection_changed";
        guint count_selected;
        NAObjectItem *item;
        gboolean editable;
@@ -258,12 +237,11 @@ on_main_selection_changed( NactIPropertiesTab *instance, GList *selected_items,
        gchar *label, *shortcut;
        IPropertiesData *data;
 
-       g_return_if_fail( BASE_IS_WINDOW( instance ));
        g_return_if_fail( NACT_IS_IPROPERTIES_TAB( instance ));
 
        count_selected = g_list_length( selected_items );
-       g_debug( "%s: instance=%p (%s), count_selected=%d",
-                       thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ), count_selected );
+       g_debug( "%s: tview=%p, count_selected=%d, instance=%p (%s)",
+                       thisfn, tview, count_selected, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
        g_object_get(
                        G_OBJECT( instance ),
@@ -279,9 +257,9 @@ on_main_selection_changed( NactIPropertiesTab *instance, GList *selected_items,
        data = get_iproperties_data( instance );
        data->on_selection_change = TRUE;
 
-       notebook = GTK_NOTEBOOK( base_window_get_widget( BASE_WINDOW( instance ), "MainNotebook" ));
+       notebook = GTK_NOTEBOOK( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "main-notebook" 
));
        page = gtk_notebook_get_nth_page( notebook, TAB_ACTION );
-       title_widget = base_window_get_widget( BASE_WINDOW( instance ), "ActionPropertiesTitle" );
+       title_widget = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ActionPropertiesTitle" );
        label_widget = gtk_notebook_get_tab_label( notebook, page );
 
        if( item && NA_IS_OBJECT_MENU( item )){
@@ -297,14 +275,14 @@ on_main_selection_changed( NactIPropertiesTab *instance, GList *selected_items,
        gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( enabled_button ), enabled_item );
        base_gtk_utils_set_editable( G_OBJECT( enabled_button ), editable );
 
-       label_widget = base_window_get_widget( BASE_WINDOW( instance ), "ActionDescriptionText" );
+       label_widget = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ActionDescriptionText" );
        buffer = gtk_text_view_get_buffer( GTK_TEXT_VIEW( label_widget ));
        label = item ? na_object_get_description( item ) : g_strdup( "" );
        gtk_text_buffer_set_text( buffer, label, -1 );
        g_free( label );
        base_gtk_utils_set_editable( G_OBJECT( label_widget ), editable );
 
-       shortcut_button = base_window_get_widget( BASE_WINDOW( instance ), "SuggestedShortcutButton" );
+       shortcut_button = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"SuggestedShortcutButton" );
        shortcut = item ? na_object_get_shortcut( item ) : g_strdup( "" );
        if( !shortcut || !strlen( shortcut )){
                g_free( shortcut );
@@ -320,11 +298,11 @@ on_main_selection_changed( NactIPropertiesTab *instance, GList *selected_items,
        /* read-only toggle only indicates the intrinsic writability status of this item
         * _not_ the writability status of the provider
         */
-       readonly_button = GTK_TOGGLE_BUTTON( base_window_get_widget( BASE_WINDOW( instance ), 
"ActionReadonlyButton" ));
+       readonly_button = GTK_TOGGLE_BUTTON( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"ActionReadonlyButton" ));
        gtk_toggle_button_set_active( readonly_button, item ? na_object_is_readonly( item ) : FALSE );
        base_gtk_utils_set_editable( G_OBJECT( readonly_button ), FALSE );
 
-       label_widget = base_window_get_widget( BASE_WINDOW( instance ), "ActionItemID" );
+       label_widget = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ActionItemID" );
        label = item ? na_object_get_id( item ) : g_strdup( "" );
        gtk_label_set_text( GTK_LABEL( label_widget ), label );
        g_free( label );
@@ -335,21 +313,24 @@ on_main_selection_changed( NactIPropertiesTab *instance, GList *selected_items,
 }
 
 static void
-on_main_item_updated( NactIPropertiesTab *instance, NAObjectItem *item, guint data, gpointer user_data )
+on_main_item_updated( NactIPropertiesTab *instance, NAIContext *context, guint data, void *empty )
 {
        static const gchar *thisfn = "nact_iproperties_tab_on_main_item_updated";
 
        if( data & MAIN_DATA_PROVIDER ){
-               g_debug( "%s: instance=%p, item=%p, data=%u, user_data=%p",
-                               thisfn, ( void * ) instance, ( void * ) item, data, ( void * ) user_data );
-               display_provider_name( instance, item );
+
+               g_debug( "%s: instance=%p, item=%p (%s), data=%u, empty=%p",
+                               thisfn, ( void * ) instance,
+                               ( void * ) context, G_OBJECT_TYPE_NAME( context ), data, empty );
+
+               display_provider_name( instance, NA_OBJECT_ITEM( context ));
        }
 }
 
 static GtkButton *
 get_enabled_button( NactIPropertiesTab *instance )
 {
-       return( GTK_BUTTON( base_window_get_widget( BASE_WINDOW( instance ), "ActionEnabledButton" )));
+       return( GTK_BUTTON( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), 
"ActionEnabledButton" )));
 }
 
 static void
@@ -378,7 +359,7 @@ on_enabled_toggled( GtkToggleButton *button, NactIPropertiesTab *instance )
 
                        if( editable ){
                                na_object_set_enabled( item, enabled );
-                               g_signal_emit_by_name( G_OBJECT( instance ), 
TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, item, 0 );
+                               g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, item, 
0 );
 
                        } else {
                                g_signal_handlers_block_by_func(( gpointer ) button, on_enabled_toggled, 
instance );
@@ -488,7 +469,7 @@ on_description_changed( GtkTextBuffer *buffer, NactIPropertiesTab *instance )
                gtk_text_buffer_get_end_iter( buffer, &end );
                text = gtk_text_buffer_get_text( buffer, &start, &end, TRUE );
                na_object_set_description( item, text );
-               g_signal_emit_by_name( G_OBJECT( instance ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, item, 0 );
+               g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_ITEM_UPDATED, item, 0 );
        }
 }
 
@@ -503,7 +484,7 @@ on_shortcut_clicked( GtkButton *button, NactIPropertiesTab *instance )
                        NULL );
 
        if( item ){
-               /*g_signal_emit_by_name( G_OBJECT( instance ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, edited, 0 
);*/
+               /*g_signal_emit_by_name( G_OBJECT( instance ), MAIN_SIGNAL_TAB_UPDATED, edited, 0 );*/
        }
 }
 
@@ -514,7 +495,7 @@ display_provider_name( NactIPropertiesTab *instance, NAObjectItem *item )
        gchar *label;
        NAIOProvider *provider;
 
-       label_widget = base_window_get_widget( BASE_WINDOW( instance ), "ActionItemProvider" );
+       label_widget = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "ActionItemProvider" );
        label = NULL;
        if( item ){
                provider = na_object_get_provider( item );
diff --git a/src/nact/nact-ischemes-tab.c b/src/nact/nact-ischemes-tab.c
index eb4a66e..25fbdf1 100644
--- a/src/nact/nact-ischemes-tab.c
+++ b/src/nact/nact-ischemes-tab.c
@@ -33,11 +33,14 @@
 
 #include <glib/gi18n.h>
 
-#include <api/na-core-utils.h>
-#include <api/na-object-api.h>
+#include "api/na-core-utils.h"
+#include "api/na-object-api.h"
+
+#include "core/na-gtk-utils.h"
 
 #include "base-gtk-utils.h"
 #include "nact-main-tab.h"
+#include "nact-main-window.h"
 #include "nact-match-list.h"
 #include "nact-add-scheme-dialog.h"
 #include "nact-ischemes-tab.h"
@@ -57,16 +60,12 @@ static guint st_initializations = 0;        /* interface initialization count */
 static GType   register_type( void );
 static void    interface_base_init( NactISchemesTabInterface *klass );
 static void    interface_base_finalize( NactISchemesTabInterface *klass );
-
-static void    on_base_initialize_gtk( NactISchemesTab *instance, GtkWindow *toplevel, gpointer user_data );
-static void    on_base_initialize_window( NactISchemesTab *instance, gpointer user_data );
-
-static void    on_main_selection_changed( NactISchemesTab *instance, GList *selected_items, gpointer 
user_data );
-
-static void    on_add_from_defaults( GtkButton *button, BaseWindow *window );
+static void    initialize_gtk( NactISchemesTab *instance );
+static void    initialize_window( NactISchemesTab *instance );
+static void    on_tree_selection_changed( NactTreeView *tview, GList *selected_items, NactISchemesTab 
*instance );
+static void    on_add_from_defaults( GtkButton *button, NactISchemesTab *instance );
 static GSList *get_schemes( void *context );
 static void    set_schemes( void *context, GSList *filters );
-
 static void    on_instance_finalized( gpointer user_data, NactISchemesTab *instance );
 
 GType
@@ -103,7 +102,7 @@ register_type( void )
 
        type = g_type_register_static( G_TYPE_INTERFACE, "NactISchemesTab", &info, 0 );
 
-       g_type_interface_add_prerequisite( type, BASE_TYPE_WINDOW );
+       g_type_interface_add_prerequisite( type, GTK_TYPE_APPLICATION_WINDOW );
 
        return( type );
 }
@@ -156,43 +155,30 @@ nact_ischemes_tab_init( NactISchemesTab *instance )
                        thisfn,
                        ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       BASE_SIGNAL_INITIALIZE_GTK,
-                       G_CALLBACK( on_base_initialize_gtk ));
-
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       BASE_SIGNAL_INITIALIZE_WINDOW,
-                       G_CALLBACK( on_base_initialize_window ));
-
        nact_main_tab_init( NACT_MAIN_WINDOW( instance ), TAB_SCHEMES );
+       initialize_gtk( instance );
+       initialize_window( instance );
 
        g_object_weak_ref( G_OBJECT( instance ), ( GWeakNotify ) on_instance_finalized, NULL );
 }
 
 static void
-on_base_initialize_gtk( NactISchemesTab *instance, GtkWindow *toplevel, void *user_data )
+initialize_gtk( NactISchemesTab *instance )
 {
-       static const gchar *thisfn = "nact_ischemes_tab_on_base_initialize_gtk";
+       static const gchar *thisfn = "nact_ischemes_tab_initialize_gtk";
 
        g_return_if_fail( NACT_IS_ISCHEMES_TAB( instance ));
 
-       g_debug( "%s: instance=%p (%s), toplevel=%p, user_data=%p",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) toplevel,
-                       ( void * ) user_data );
+       g_debug( "%s: instance=%p (%s)",
+                       thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
 
        nact_match_list_init_with_args(
-                       BASE_WINDOW( instance ),
+                       NACT_MAIN_WINDOW( instance ),
                        ITAB_NAME,
                        TAB_SCHEMES,
-                       base_window_get_widget( BASE_WINDOW( instance ), "SchemesTreeView" ),
-                       base_window_get_widget( BASE_WINDOW( instance ), "AddSchemeButton" ),
-                       base_window_get_widget( BASE_WINDOW( instance ), "RemoveSchemeButton" ),
+                       na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "SchemesTreeView" ),
+                       na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "AddSchemeButton" ),
+                       na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "RemoveSchemeButton" ),
                        ( pget_filters ) get_schemes,
                        ( pset_filters ) set_schemes,
                        NULL,
@@ -203,34 +189,29 @@ on_base_initialize_gtk( NactISchemesTab *instance, GtkWindow *toplevel, void *us
 }
 
 static void
-on_base_initialize_window( NactISchemesTab *instance, void *user_data )
+initialize_window( NactISchemesTab *instance )
 {
-       static const gchar *thisfn = "nact_ischemes_tab_on_base_initialize_window";
-       GtkWidget *button;
+       static const gchar *thisfn = "nact_ischemes_tab_initialize_window";
+       NactTreeView *tview;
 
        g_return_if_fail( NACT_IS_ISCHEMES_TAB( instance ));
 
-       g_debug( "%s: instance=%p (%s), user_data=%p",
-                       thisfn,
-                       ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) user_data );
-
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( instance ),
-                       MAIN_SIGNAL_SELECTION_CHANGED,
-                       G_CALLBACK( on_main_selection_changed ));
-
-       button = base_window_get_widget( BASE_WINDOW( instance ), "AddFromDefaultButton" );
-       base_window_signal_connect(
-                       BASE_WINDOW( instance ),
-                       G_OBJECT( button ),
-                       "clicked",
-                       G_CALLBACK( on_add_from_defaults ));
+       g_debug( "%s: instance=%p (%s)",
+                       thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
+
+       tview = nact_main_window_get_items_view( NACT_MAIN_WINDOW( instance ));
+
+       g_signal_connect(
+                       tview, TREE_SIGNAL_SELECTION_CHANGED,
+                       G_CALLBACK( on_tree_selection_changed ), instance );
+
+       na_gtk_utils_connect_widget_by_name(
+                       GTK_CONTAINER( instance ), "AddFromDefaultButton",
+                       "clicked", G_CALLBACK( on_add_from_defaults ), instance );
 }
 
 static void
-on_main_selection_changed( NactISchemesTab *instance, GList *selected_items, gpointer user_data )
+on_tree_selection_changed( NactTreeView *tview, GList *selected_items, NactISchemesTab *instance )
 {
        NAIContext *context;
        gboolean editable;
@@ -244,26 +225,26 @@ on_main_selection_changed( NactISchemesTab *instance, GList *selected_items, gpo
        enable_tab = ( context != NULL );
        nact_main_tab_enable_page( NACT_MAIN_WINDOW( instance ), TAB_SCHEMES, enable_tab );
 
-       button = base_window_get_widget( BASE_WINDOW( instance ), "AddFromDefaultButton" );
+       button = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( instance ), "AddFromDefaultButton" );
        base_gtk_utils_set_editable( G_OBJECT( button ), editable );
 }
 
 static void
-on_add_from_defaults( GtkButton *button, BaseWindow *window )
+on_add_from_defaults( GtkButton *button, NactISchemesTab *instance )
 {
        GSList *schemes;
        gchar *new_scheme;
        NAIContext *context;
 
-       g_object_get( G_OBJECT( window ), MAIN_PROP_CONTEXT, &context, NULL );
+       g_object_get( G_OBJECT( instance ), MAIN_PROP_CONTEXT, &context, NULL );
        g_return_if_fail( context );
 
-       schemes = nact_match_list_get_rows( window, ITAB_NAME );
-       new_scheme = nact_add_scheme_dialog_run( window, schemes );
+       schemes = nact_match_list_get_rows( NACT_MAIN_WINDOW( instance ), ITAB_NAME );
+       new_scheme = nact_add_scheme_dialog_run( NACT_MAIN_WINDOW( instance ), schemes );
        na_core_utils_slist_free( schemes );
 
        if( new_scheme ){
-               nact_match_list_insert_row( window, ITAB_NAME, new_scheme, FALSE, FALSE );
+               nact_match_list_insert_row( NACT_MAIN_WINDOW( instance ), ITAB_NAME, new_scheme, FALSE, FALSE 
);
                g_free( new_scheme );
        }
 }
diff --git a/src/nact/nact-legend.ui b/src/nact/nact-legend.ui
new file mode 100644
index 0000000..60ff689
--- /dev/null
+++ b/src/nact/nact-legend.ui
@@ -0,0 +1,720 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.16.1 -->
+<interface>
+  <requires lib="gtk+" version="3.4"/>
+  <object class="GtkWindow" id="LegendDialog">
+    <property name="can_focus">False</property>
+    <property name="type_hint">dialog</property>
+    <child>
+      <object class="GtkVBox" id="vbox16">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="border_width">12</property>
+        <property name="spacing">6</property>
+        <child>
+          <object class="GtkHBox" id="hbox11">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkImage" id="image9">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="stock">gtk-help</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label25">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">&lt;span size="larger"&gt;&lt;b&gt;Parameter 
Legend&lt;/b&gt;&lt;/span&gt;</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkHSeparator" id="hseparator2">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkTable" id="table5">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="n_rows">22</property>
+            <property name="n_columns">2</property>
+            <property name="column_spacing">2</property>
+            <property name="row_spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="label20">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">&lt;b&gt;%b&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="x_options">GTK_SHRINK | GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label21">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">&lt;b&gt;%B&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="x_options">GTK_SHRINK | GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label5">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">&lt;b&gt;%c&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+                <property name="x_options">GTK_SHRINK | GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label22">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">&lt;b&gt;%d&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">3</property>
+                <property name="bottom_attach">4</property>
+                <property name="x_options">GTK_SHRINK | GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label23">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">&lt;b&gt;%D&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">4</property>
+                <property name="bottom_attach">5</property>
+                <property name="x_options">GTK_SHRINK | GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label33">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">&lt;b&gt;%p&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">13</property>
+                <property name="bottom_attach">14</property>
+                <property name="x_options">GTK_SHRINK | GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label35">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">&lt;b&gt;%s&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">14</property>
+                <property name="bottom_attach">15</property>
+                <property name="x_options">GTK_SHRINK | GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label11">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">&lt;b&gt;%u&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">15</property>
+                <property name="bottom_attach">16</property>
+                <property name="x_options">GTK_SHRINK | GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label36">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">&lt;b&gt;%U&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">16</property>
+                <property name="bottom_attach">17</property>
+                <property name="x_options">GTK_SHRINK | GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label13">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">&lt;b&gt;%%&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">21</property>
+                <property name="bottom_attach">22</property>
+                <property name="x_options">GTK_SHRINK | GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label14">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">(first) basename.</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="x_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label37">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">space-separated list of the basenames of the 
selected file(s)/folder(s).</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="x_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label24">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">count of selected item(s).</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+                <property name="x_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label26">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">(first) base directory.</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">3</property>
+                <property name="bottom_attach">4</property>
+                <property name="x_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label27">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">space-separated list of the base directories of 
the selected file(s)/folder(s).</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">4</property>
+                <property name="bottom_attach">5</property>
+                <property name="x_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label28">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">port number of the (first) selected URI.</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">13</property>
+                <property name="bottom_attach">14</property>
+                <property name="x_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label30">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">scheme of the (first) selected URI.</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">14</property>
+                <property name="bottom_attach">15</property>
+                <property name="x_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label31">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">(first) URI.</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">15</property>
+                <property name="bottom_attach">16</property>
+                <property name="x_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="abel32">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">space-separated list of the URIs of the selected 
file(s)/folder(s).</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">16</property>
+                <property name="bottom_attach">17</property>
+                <property name="x_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label34">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">a percent sign.</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">21</property>
+                <property name="bottom_attach">22</property>
+                <property name="x_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label46">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="label" translatable="yes">&lt;b&gt;%f&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">5</property>
+                <property name="bottom_attach">6</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">(first) filename.</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">5</property>
+                <property name="bottom_attach">6</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label62">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="label" translatable="yes">&lt;b&gt;%F&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">6</property>
+                <property name="bottom_attach">7</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label63">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">space-separated list of the filenames of the 
selected file(s)/folder(s).</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">6</property>
+                <property name="bottom_attach">7</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label64">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="label" translatable="yes">&lt;b&gt;%h&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">7</property>
+                <property name="bottom_attach">8</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label69">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">hostname of the (first) selected URI.</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">7</property>
+                <property name="bottom_attach">8</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label70">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="label" translatable="yes">&lt;b&gt;%n&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">10</property>
+                <property name="bottom_attach">11</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label78">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">username of the (first) selected URI.</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">10</property>
+                <property name="bottom_attach">11</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label29">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">(first) basename without the extension.</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">17</property>
+                <property name="bottom_attach">18</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label32">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">space-separated list of the basenames without the 
extension.</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">18</property>
+                <property name="bottom_attach">19</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label60">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">(first) extension.</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">19</property>
+                <property name="bottom_attach">20</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label79">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">space-separated list of the extensions of the 
selected file(s)/folder(s).</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">20</property>
+                <property name="bottom_attach">21</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label9">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="label" translatable="yes">&lt;b&gt;%w&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">17</property>
+                <property name="bottom_attach">18</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label80">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="label" translatable="yes">&lt;b&gt;%W&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">18</property>
+                <property name="bottom_attach">19</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label81">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="label" translatable="yes">&lt;b&gt;%x&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">19</property>
+                <property name="bottom_attach">20</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label82">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="label" translatable="yes">&lt;b&gt;%X&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">20</property>
+                <property name="bottom_attach">21</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label83">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="label" translatable="yes">&lt;b&gt;%m&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">8</property>
+                <property name="bottom_attach">9</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label85">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="label" translatable="yes">&lt;b&gt;%M&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">9</property>
+                <property name="bottom_attach">10</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label84">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">(first) mimetype.</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">8</property>
+                <property name="bottom_attach">9</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label86">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">space-separated list of the mimetypes of the 
selected file(s)/folder(s).</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">9</property>
+                <property name="bottom_attach">10</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label88">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">&lt;b&gt;%o&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">11</property>
+                <property name="bottom_attach">12</property>
+                <property name="x_options">GTK_SHRINK | GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label89">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">&lt;b&gt;%O&lt;/b&gt; :</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="top_attach">12</property>
+                <property name="bottom_attach">13</property>
+                <property name="x_options">GTK_SHRINK | GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label90">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">no-op operator which forces a singular form of 
execution.</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">11</property>
+                <property name="bottom_attach">12</property>
+                <property name="x_options">GTK_FILL</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label91">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">no-op operator which forces a plural form of 
execution.</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">12</property>
+                <property name="bottom_attach">13</property>
+                <property name="x_options">GTK_FILL</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="padding">4</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/src/nact/nact-main-tab.c b/src/nact/nact-main-tab.c
index 4201fbc..d4cbe37 100644
--- a/src/nact/nact-main-tab.c
+++ b/src/nact/nact-main-tab.c
@@ -31,11 +31,12 @@
 #include <config.h>
 #endif
 
-#include <api/na-object-profile.h>
+#include "api/na-object-profile.h"
 
-#include "nact-main-tab.h"
+#include "core/na-gtk-utils.h"
 
-static void on_tab_initialize_window( NactMainWindow *window, gpointer p_page );
+#include "nact-main-tab.h"
+#include "nact-main-window.h"
 
 /**
  * nact_main_tab_init:
@@ -43,16 +44,24 @@ static void on_tab_initialize_window( NactMainWindow *window, gpointer p_page );
  * @num_page: the page number, starting from zero.
  *
  * Common initialization of each page of the notebook.
+ * (provided that the page has itself called nact_main_tab_init())
  */
 void
-nact_main_tab_init( NactMainWindow *window, gint num_page )
+nact_main_tab_init( NactMainWindow *main_window, gint num_page )
 {
-       base_window_signal_connect_with_data(
-                       BASE_WINDOW( window ),
-                       G_OBJECT( window ),
-                       BASE_SIGNAL_INITIALIZE_WINDOW,
-                       G_CALLBACK( on_tab_initialize_window ),
-                       GUINT_TO_POINTER( num_page ));
+       GtkWidget *notebook;
+       GtkWidget *page;
+       const gchar *text;
+
+       /* popup menu is enabled in NactMainWindow::setup_main_ui()
+        * but the displayed labels default to be those of the tab, i.e. embed
+        * an underscore as an accelerator - so get rid of this
+        */
+       notebook = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( main_window ), "main-notebook" );
+       g_return_if_fail( notebook && GTK_IS_NOTEBOOK( notebook ));
+       page = gtk_notebook_get_nth_page( GTK_NOTEBOOK( notebook ), num_page );
+       text = gtk_notebook_get_tab_label_text( GTK_NOTEBOOK( notebook ), page );
+       gtk_notebook_set_menu_label_text( GTK_NOTEBOOK( notebook ), page, text );
 }
 
 /**
@@ -66,14 +75,15 @@ nact_main_tab_init( NactMainWindow *window, gint num_page )
 void
 nact_main_tab_enable_page( NactMainWindow *window, gint num_page, gboolean enabled )
 {
-       GtkNotebook *notebook;
+       GtkWidget *notebook;
        GtkWidget *page, *label;
 
-       notebook = GTK_NOTEBOOK( base_window_get_widget( BASE_WINDOW( window ), "MainNotebook" ));
-       page = gtk_notebook_get_nth_page( notebook, num_page );
+       notebook = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( window ), "main-notebook" );
+       g_return_if_fail( notebook && GTK_IS_NOTEBOOK( notebook ));
+       page = gtk_notebook_get_nth_page( GTK_NOTEBOOK( notebook ), num_page );
        gtk_widget_set_sensitive( page, enabled );
 
-       label = gtk_notebook_get_tab_label( notebook, page );
+       label = gtk_notebook_get_tab_label( GTK_NOTEBOOK( notebook ), page );
        gtk_widget_set_sensitive( label, enabled );
 }
 
@@ -88,40 +98,14 @@ gboolean
 nact_main_tab_is_page_enabled( NactMainWindow *window, gint num_page )
 {
        gboolean is_sensitive;
-       GtkNotebook *notebook;
-       GtkWidget *page;
-
-       notebook = GTK_NOTEBOOK( base_window_get_widget( BASE_WINDOW( window ), "MainNotebook" ));
-       page = gtk_notebook_get_nth_page( notebook, num_page );
+       GtkWidget *notebook, *page;
 
+       notebook = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( window ), "main-notebook" );
+       g_return_val_if_fail( notebook && GTK_IS_NOTEBOOK( notebook ), FALSE );
+       page = gtk_notebook_get_nth_page( GTK_NOTEBOOK( notebook ), num_page );
        is_sensitive = gtk_widget_is_sensitive( page );
 
        g_debug( "nact_main_tab_is_page_enabled: num_page=%d, is_sensitive=%s", num_page, is_sensitive ? 
"True":"False" );
 
        return( is_sensitive );
 }
-
-/*
- * a commoon initialization for each page of the notebook
- * (provided that the page has itself called nact_main_tab_init()
- * *before* the BASE_SIGNAL_INITIALIZE_WINDOW has been emitted)
- */
-static void
-on_tab_initialize_window( NactMainWindow *window, gpointer p_page )
-{
-       GtkNotebook *notebook;
-       GtkWidget *page;
-       const gchar *text;
-       guint num_page;
-
-       notebook = GTK_NOTEBOOK( base_window_get_widget( BASE_WINDOW( window ), "MainNotebook" ));
-       num_page = GPOINTER_TO_UINT( p_page );
-       page = gtk_notebook_get_nth_page( notebook, num_page );
-
-       /* popup menu is enabled in NactMainWindow::on_base_initialize_window()
-        * but the displayed labels default to be those of the tab, i.e. embed
-        * an underscore as an accelerator - so get ride of this
-        */
-       text = gtk_notebook_get_tab_label_text( notebook, page );
-       gtk_notebook_set_menu_label_text( notebook, page, text );
-}
diff --git a/src/nact/nact-main-tab.h b/src/nact/nact-main-tab.h
index 6f2b507..cec529c 100644
--- a/src/nact/nact-main-tab.h
+++ b/src/nact/nact-main-tab.h
@@ -32,7 +32,7 @@
 
 #include <api/na-icontext.h>
 
-#include "nact-main-window.h"
+#include "nact-main-window-def.h"
 
 /**
  * SECTION: nact_main_tab
@@ -42,12 +42,6 @@
  * Here as defined signals and properties common to all tabs.
  */
 
-/* signals
- *
- * TAB_UPDATABLE_SIGNAL_ITEM_UPDATED: see definition in nact-main-window.c
- */
-#define TAB_UPDATABLE_SIGNAL_ITEM_UPDATED                              "nact-tab-updatable-item-updated"
-
 /* notebook tabs
  */
 enum {
diff --git a/src/nact/nact-main-toolbar.c b/src/nact/nact-main-toolbar.c
index 1a5cb67..78ac907 100644
--- a/src/nact/nact-main-toolbar.c
+++ b/src/nact/nact-main-toolbar.c
@@ -35,19 +35,25 @@
 #include "nact-main-toolbar.h"
 
 typedef struct {
-       int      id;
-       gchar   *prefs_key;
-       gboolean displayed_per_default;
-       gchar   *ui_item;
-       gchar   *ui_path;
+       gint         id;
+       const gchar *prefs_key;
+       const gchar *action_name;
 }
        ToolbarProps;
 
 static ToolbarProps toolbar_props[] = {
-               { MAIN_TOOLBAR_FILE_ID , NA_IPREFS_MAIN_TOOLBAR_FILE_DISPLAY,   TRUE, "ViewFileToolbarItem" , 
"/ui/FileToolbar" },
-               { MAIN_TOOLBAR_EDIT_ID , NA_IPREFS_MAIN_TOOLBAR_EDIT_DISPLAY,  FALSE, "ViewEditToolbarItem" , 
"/ui/EditToolbar" },
-               { MAIN_TOOLBAR_TOOLS_ID, NA_IPREFS_MAIN_TOOLBAR_TOOLS_DISPLAY, FALSE, "ViewToolsToolbarItem", 
"/ui/ToolsToolbar" },
-               { MAIN_TOOLBAR_HELP_ID , NA_IPREFS_MAIN_TOOLBAR_HELP_DISPLAY,   TRUE, "ViewHelpToolbarItem" , 
"/ui/HelpToolbar" }
+               { MAIN_TOOLBAR_FILE_ID,
+                               NA_IPREFS_MAIN_TOOLBAR_FILE_DISPLAY,
+                               "view-toolbar-file" },
+               { MAIN_TOOLBAR_EDIT_ID,
+                               NA_IPREFS_MAIN_TOOLBAR_EDIT_DISPLAY,
+                               "view-toolbar-edit" },
+               { MAIN_TOOLBAR_TOOLS_ID,
+                               NA_IPREFS_MAIN_TOOLBAR_TOOLS_DISPLAY,
+                               "view-toolbar-tools" },
+               { MAIN_TOOLBAR_HELP_ID,
+                               NA_IPREFS_MAIN_TOOLBAR_HELP_DISPLAY,
+                               "view-toolbar-help" }
 };
 
 /* defines the relative position of the main toolbars
@@ -60,18 +66,16 @@ static int toolbar_pos[] = {
                MAIN_TOOLBAR_HELP_ID
 };
 
-static void          init_toolbar( BaseWindow *window, GtkActionGroup *group, int toolbar_id );
+static void          init_toolbar( NactMainWindow *window, GSimpleActionGroup *toolbar_group, int toolbar_id 
);
+#if 0
 static void          reorder_toolbars( GtkWidget *hbox, int toolbar_id, GtkWidget *handle );
-#if !GTK_CHECK_VERSION( 3,4,0 )
-static void          on_handle_finalize( gpointer data, GObject *handle );
-static void          on_attach_toolbar( GtkHandleBox *handle, GtkToolbar *toolbar, NactMainWindow *window );
-static void          on_detach_toolbar( GtkHandleBox *handle, GtkToolbar *toolbar, NactMainWindow *window );
 #endif
 static ToolbarProps *get_toolbar_properties( int toolbar_id );
 
 /**
- * nact_main_toolbar_init:
+ * nact_main_toolbar_init_toggle_actions:
  * @window: this #NactMainWindow window.
+ * @toolbar_group: the group of toolbar toggle actions
  *
  * Setup the initial display of the standard main toolbars.
  *
@@ -81,31 +85,32 @@ static ToolbarProps *get_toolbar_properties( int toolbar_id );
  * toolbar.
  */
 void
-nact_main_toolbar_init( BaseWindow *window, GtkActionGroup *group )
+nact_main_toolbar_init_toggle_actions( NactMainWindow *window, GSimpleActionGroup *toolbar_group )
 {
-       static const gchar *thisfn = "nact_main_toolbar_init";
+       static const gchar *thisfn = "nact_main_toolbar_init_toggle_actions";
        int i;
 
-       g_debug( "%s: window=%p, group=%p", thisfn, ( void * ) window, ( void * ) group );
+       g_debug( "%s: window=%p, toolbar_group=%p",
+                       thisfn, ( void * ) window, ( void * ) toolbar_group );
 
        for( i = 0 ; i < G_N_ELEMENTS( toolbar_pos ) ; ++i ){
-               init_toolbar( window, group, toolbar_pos[i] );
+               init_toolbar( window, toolbar_group, toolbar_pos[i] );
        }
 }
 
 static void
-init_toolbar( BaseWindow *window, GtkActionGroup *group, int toolbar_id )
+init_toolbar( NactMainWindow *window, GSimpleActionGroup *toolbar_group, int toolbar_id )
 {
        ToolbarProps *props;
        gboolean is_active;
-       GtkToggleAction *action;
+       GAction *action;
 
        props = get_toolbar_properties( toolbar_id );
        if( props ){
                is_active = na_settings_get_boolean( props->prefs_key, NULL, NULL );
                if( is_active ){
-                       action = GTK_TOGGLE_ACTION( gtk_action_group_get_action( group, props->ui_item ));
-                       gtk_toggle_action_set_active( action, TRUE );
+                       action = g_action_map_lookup_action( G_ACTION_MAP( toolbar_group ), 
props->action_name );
+                       g_action_change_state( action, g_variant_new_boolean( TRUE ));
                }
        }
 }
@@ -114,7 +119,6 @@ init_toolbar( BaseWindow *window, GtkActionGroup *group, int toolbar_id )
  * nact_main_toolbar_activate:
  * @window: this #NactMainWindow.
  * @toolbar_id: the id of the activated toolbar.
- * @ui_manager: the #GtkUIManager.
  * @is_active: whether this toolbar is activated or not.
  *
  * Activate or desactivate the toolbar.
@@ -125,8 +129,9 @@ init_toolbar( BaseWindow *window, GtkActionGroup *group, int toolbar_id )
  * So exit floating toolbars :(
  */
 void
-nact_main_toolbar_activate( NactMainWindow *window, int toolbar_id, GtkUIManager *ui_manager, gboolean 
is_active )
+nact_main_toolbar_activate( NactMainWindow *window, int toolbar_id, gboolean is_active )
 {
+#if 0
        static const gchar *thisfn = "nact_main_toolbar_activate";
        ToolbarProps *props;
        GtkWidget *toolbar, *hbox;
@@ -138,9 +143,8 @@ nact_main_toolbar_activate( NactMainWindow *window, int toolbar_id, GtkUIManager
 
        toolbar = gtk_ui_manager_get_widget( ui_manager, props->ui_path );
        g_debug( "%s: toolbar=%p, path=%s, ref_count=%d", thisfn, ( void * ) toolbar, props->ui_path, 
G_OBJECT( toolbar )->ref_count );
-       hbox = base_window_get_widget( BASE_WINDOW( window ), "ToolbarHBox" );
+       hbox = base_window_get_widget( BASE_WINDOW( window ), "Toolbar" );
 
-#if GTK_CHECK_VERSION( 3,4,0 )
        if( is_active ){
                gtk_container_add( GTK_CONTAINER( hbox ), toolbar );
                reorder_toolbars( hbox, toolbar_id, toolbar );
@@ -149,34 +153,6 @@ nact_main_toolbar_activate( NactMainWindow *window, int toolbar_id, GtkUIManager
        } else {
                gtk_container_remove( GTK_CONTAINER( hbox ), toolbar );
        }
-#else
-       GtkWidget *handle;
-       gulong attach_id, detach_id;
-
-       if( is_active ){
-               handle = gtk_handle_box_new();
-               gtk_handle_box_set_snap_edge( GTK_HANDLE_BOX( handle ), GTK_POS_LEFT );
-               g_object_set_data( G_OBJECT( toolbar ), "nact-main-toolbar-handle", handle );
-               attach_id = g_signal_connect( handle, "child-attached", (GCallback ) on_attach_toolbar, 
window );
-               g_object_set_data( G_OBJECT( handle ), "nact-handle-attach-id", ( gpointer ) attach_id );
-               detach_id = g_signal_connect( handle, "child-detached", (GCallback ) on_detach_toolbar, 
window );
-               g_object_set_data( G_OBJECT( handle ), "nact-handle-detach-id", ( gpointer ) detach_id );
-               g_object_weak_ref( G_OBJECT( handle ), ( GWeakNotify ) on_handle_finalize, NULL );
-               gtk_container_add( GTK_CONTAINER( handle ), toolbar );
-               gtk_container_add( GTK_CONTAINER( hbox ), handle );
-               reorder_toolbars( hbox, toolbar_id, handle );
-               gtk_widget_show_all( handle );
-
-       } else {
-               handle = ( GtkWidget * ) g_object_get_data( G_OBJECT( toolbar ), "nact-main-toolbar-handle" );
-               detach_id = ( gulong ) g_object_get_data( G_OBJECT( handle ), "nact-handle-detach-id" );
-               g_signal_handler_disconnect( handle, detach_id );
-               attach_id = ( gulong ) g_object_get_data( G_OBJECT( handle ), "nact-handle-attach-id" );
-               g_signal_handler_disconnect( handle, attach_id );
-               gtk_container_remove( GTK_CONTAINER( handle ), toolbar );
-               gtk_container_remove( GTK_CONTAINER( hbox ), handle );
-       }
-#endif
 
        na_settings_set_boolean( props->prefs_key, is_active );
 }
@@ -219,35 +195,8 @@ reorder_toolbars( GtkWidget *hbox, int toolbar_id, GtkWidget *handle )
        }
 
        gtk_box_reorder_child( GTK_BOX( hbox ), handle, pos );
-}
-
-#if !GTK_CHECK_VERSION( 3,4,0 )
-static void
-on_handle_finalize( gpointer data, GObject *handle )
-{
-       g_debug( "nact_main_toolbar_on_handle_finalize: handle=%p", ( void * ) handle );
-}
-
-static void
-on_attach_toolbar( GtkHandleBox *handle, GtkToolbar *toolbar, NactMainWindow *window )
-{
-       static const gchar *thisfn = "nact_main_toolbar_on_attach_toolbar";
-
-       g_debug( "%s: handle=%p, toolbar=%p, window=%p", thisfn, ( void * ) handle, ( void * ) toolbar, ( 
void * ) window );
-
-       gtk_toolbar_set_show_arrow( toolbar, TRUE );
-}
-
-static void
-on_detach_toolbar( GtkHandleBox *handle, GtkToolbar *toolbar, NactMainWindow *window )
-{
-       static const gchar *thisfn = "nact_main_toolbar_on_detach_toolbar";
-
-       g_debug( "%s: handle=%p, toolbar=%p, window=%p", thisfn, ( void * ) handle, ( void * ) toolbar, ( 
void * ) window );
-
-       gtk_toolbar_set_show_arrow( toolbar, FALSE );
-}
 #endif
+}
 
 static ToolbarProps *
 get_toolbar_properties( int toolbar_id )
diff --git a/src/nact/nact-main-toolbar.h b/src/nact/nact-main-toolbar.h
index f7c992a..89d9619 100644
--- a/src/nact/nact-main-toolbar.h
+++ b/src/nact/nact-main-toolbar.h
@@ -47,8 +47,12 @@ enum {
        MAIN_TOOLBAR_HELP_ID,
 };
 
-void nact_main_toolbar_init( BaseWindow *window, GtkActionGroup *group );
-void nact_main_toolbar_activate( NactMainWindow *window, int toolbar_id, GtkUIManager *manager, gboolean 
active );
+void nact_main_toolbar_init_toggle_actions( NactMainWindow *window,
+                                                                                                       
GSimpleActionGroup *toolbar_group );
+
+void nact_main_toolbar_activate           ( NactMainWindow *window,
+                                                                                                       int 
toolbar_id,
+                                                                                                       
gboolean active );
 
 G_END_DECLS
 
diff --git a/src/nact/nact-main-window-def.h b/src/nact/nact-main-window-def.h
new file mode 100644
index 0000000..330af7b
--- /dev/null
+++ b/src/nact/nact-main-window-def.h
@@ -0,0 +1,120 @@
+/*
+ * Nautilus-Actions
+ * A Nautilus extension which offers configurable context menu actions.
+ *
+ * Copyright (C) 2005 The GNOME Foundation
+ * Copyright (C) 2006-2008 Frederic Ruaudel and others (see AUTHORS)
+ * Copyright (C) 2009-2014 Pierre Wieser and others (see AUTHORS)
+ *
+ * Nautilus-Actions is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * Nautilus-Actions is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Nautilus-Actions; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ *   Frederic Ruaudel <grumz grumz net>
+ *   Rodrigo Moya <rodrigo gnome-db org>
+ *   Pierre Wieser <pwieser trychlos org>
+ *   ... and many others (see AUTHORS)
+ */
+
+#ifndef __NACT_MAIN_WINDOW_DEF_H__
+#define __NACT_MAIN_WINDOW_DEF_H__
+
+/**
+ * SECTION: main-window
+ * @title: NactMainWindow
+ * @short_description: The Main Window class definition
+ * @include: nact-main-window.h
+ *
+ * This class is derived from GtkApplicationWindow and manages the main
+ * window.
+ *
+ * It embeds:
+ * - the menubar,
+ * - the toolbar,
+ * - a button bar with sort buttons,
+ * - the hierarchical list of items,
+ * - a notebook which displays the content of the current item in
+ *   several tabs,
+ * - a status bar with some indicators.
+ *
+ * [main]
+ *  set_log_handler()
+ *  nact_application_new()
+ *  nact_application_run_with_args()
+ *  |
+ *  +-> [NactApplication]
+ *  |    on_startup()
+ *  |      |
+ *  |      +-> na_updater_new()
+ *  |          nact_menu_app()
+ *  |
+ *  |    on_activate()
+ *  |      |
+ *  |      +-> nact_main_window_new()
+ *  |           |
+ *  |           +-> setup_main_ui()
+ *  |               setup_treeview()
+ *  |               nact_clipboard_new()
+ *  |               nact_sort_buttons_new()
+ *  |
+ *  |               nact_iaction_tab_init()
+ *  |               nact_icommand_tab_init()
+ *  |               nact_ibasenames_tab_init()
+ *  |               nact_imimetypes_tab_init()
+ *  |               nact_ifolders_tab_init()
+ *  |               nact_ischemes_tab_init()
+ *  |               nact_icapabilities_tab_init()
+ *  |               nact_ienvironment_tab_init()
+ *  |               nact_iexecution_tab_init()
+ *  |               nact_iproperties_tab_init()
+ *  |
+ *  |               setup_monitor_pivot()
+ *  |               setup_delete_event()
+ *  |               nact_menu_win()
+ *  |               load_items()
+ *  v
+ * [X] End of initialization process
+ */
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define NACT_TYPE_MAIN_WINDOW                ( nact_main_window_get_type())
+#define NACT_MAIN_WINDOW( object )           ( G_TYPE_CHECK_INSTANCE_CAST( object, NACT_TYPE_MAIN_WINDOW, 
NactMainWindow ))
+#define NACT_MAIN_WINDOW_CLASS( klass )      ( G_TYPE_CHECK_CLASS_CAST( klass, NACT_TYPE_MAIN_WINDOW, 
NactMainWindowClass ))
+#define NACT_IS_MAIN_WINDOW( object )        ( G_TYPE_CHECK_INSTANCE_TYPE( object, NACT_TYPE_MAIN_WINDOW ))
+#define NACT_IS_MAIN_WINDOW_CLASS( klass )   ( G_TYPE_CHECK_CLASS_TYPE(( klass ), NACT_TYPE_MAIN_WINDOW ))
+#define NACT_MAIN_WINDOW_GET_CLASS( object ) ( G_TYPE_INSTANCE_GET_CLASS(( object ), NACT_TYPE_MAIN_WINDOW, 
NactMainWindowClass ))
+
+typedef struct _NactMainWindowPrivate        NactMainWindowPrivate;
+
+ typedef struct {
+       /*< private >*/
+       GtkApplicationWindowClass parent;
+ }
+       NactMainWindowClass;
+
+typedef struct {
+       /*< private >*/
+       GtkApplicationWindow      parent;
+       NactMainWindowPrivate    *private;
+}
+       NactMainWindow;
+
+GType nact_main_window_get_type( void );
+
+G_END_DECLS
+
+#endif /* __NACT_MAIN_WINDOW_DEF_H__ */
diff --git a/src/nact/nact-main-window.c b/src/nact/nact-main-window.c
index d3da6f6..39e5b9b 100644
--- a/src/nact/nact-main-window.c
+++ b/src/nact/nact-main-window.c
@@ -34,13 +34,13 @@
 #include <glib/gi18n.h>
 #include <stdlib.h>
 
-#include <api/na-object-api.h>
-#include <api/na-timeout.h>
+#include "api/na-object-api.h"
+#include "api/na-timeout.h"
 
-#include <core/na-iprefs.h>
-#include <core/na-pivot.h>
+#include "core/na-gtk-utils.h"
+#include "core/na-iprefs.h"
+#include "core/na-pivot.h"
 
-#include "base-isession.h"
 #include "nact-iaction-tab.h"
 #include "nact-icommand-tab.h"
 #include "nact-ibasenames-tab.h"
@@ -52,20 +52,13 @@
 #include "nact-iexecution-tab.h"
 #include "nact-iproperties-tab.h"
 #include "nact-main-tab.h"
-#include "nact-main-statusbar.h"
 #include "nact-main-window.h"
-#include "nact-marshal.h"
-#include "nact-menubar.h"
+#include "nact-menu.h"
+#include "nact-statusbar.h"
 #include "nact-tree-view.h"
 #include "nact-confirm-logout.h"
 #include "nact-sort-buttons.h"
 
-/* private class data
- */
-struct _NactMainWindowClassPrivate {
-       void *empty;                                            /* so that gcc -pedantic is happy */
-};
-
 /* private instance data
  */
 struct _NactMainWindowPrivate {
@@ -121,7 +114,8 @@ struct _NactMainWindowPrivate {
        NactTreeView    *items_view;
        gboolean         is_tree_modified;
        NactClipboard   *clipboard;
-       NactMenubar     *menubar;
+       NactStatusbar   *statusbar;
+       NactSortButtons *sort_buttons;
 
        gulong           pivot_handler_id;
        NATimeout        pivot_timeout;
@@ -145,20 +139,18 @@ enum {
 /* signals
  */
 enum {
-       MAIN_ITEM_UPDATED,
-       TAB_ITEM_UPDATED,
-       SELECTION_CHANGED,
-       CONTEXT_MENU,
+       ITEM_UPDATED,
+       UPDATE_SENSITIVITIES,
        LAST_SIGNAL
 };
 
-static const gchar     *st_xmlui_filename         = PKGUIDIR "/nautilus-actions-config-tool.ui";
+static const gchar     *st_xmlui_filename         = PKGUIDIR "/nact-main-window.ui";
 static const gchar     *st_toplevel_name          = "MainWindow";
 static const gchar     *st_wsp_name               = NA_IPREFS_MAIN_WINDOW_WSP;
 
 static gint             st_burst_timeout          = 2500;              /* burst timeout in msec */
 static BaseWindowClass *st_parent_class           = NULL;
-static gint             st_signals[ LAST_SIGNAL ] = { 0 };
+static guint            st_signals[ LAST_SIGNAL ] = { 0 };
 
 static GType      register_type( void );
 static void       class_init( NactMainWindowClass *klass );
@@ -175,19 +167,15 @@ static void       iproperties_tab_iface_init( NactIPropertiesTabInterface *iface
 static void       instance_init( GTypeInstance *instance, gpointer klass );
 static void       instance_get_property( GObject *object, guint property_id, GValue *value, GParamSpec *spec 
);
 static void       instance_set_property( GObject *object, guint property_id, const GValue *value, GParamSpec 
*spec );
-static void       instance_constructed( GObject *window );
 static void       instance_dispose( GObject *window );
 static void       instance_finalize( GObject *window );
-
-static void       on_base_initialize_gtk( NactMainWindow *window, GtkWindow *toplevel, gpointer user_data );
-static void       on_base_initialize_window( NactMainWindow *window, gpointer user_data );
-static void       on_base_show_widgets( NactMainWindow *window, gpointer user_data );
-
+static void       setup_main_ui( NactMainWindow *main_window );
+static void       setup_treeview( NactMainWindow *main_window );
+static void       setup_monitor_pivot( NactMainWindow *main_window );
 static void       on_block_items_changed_timeout( NactMainWindow *window );
-static void       on_tree_view_modified_status_changed( NactMainWindow *window, gboolean is_modified, 
gpointer user_data );
-static void       on_tree_view_selection_changed( NactMainWindow *window, GList *selected_items, gpointer 
user_data );
-static void       on_selection_changed_cleanup_handler( BaseWindow *window, GList *selected_items );
-static void       on_tab_updatable_item_updated( NactMainWindow *window, NAIContext *context, guint data, 
gpointer user_data );
+static void       on_tree_view_modified_status_changed( NactTreeView *treeview, gboolean is_modified, 
NactMainWindow *window );
+static void       on_tree_view_selection_changed( NactTreeView *treeview, GList *selected_items, 
NactMainWindow *window );
+static void       on_tab_item_updated( NactMainWindow *window, NAIContext *context, guint data, void *empty 
);
 static void       raz_selection_properties( NactMainWindow *window );
 static void       setup_current_selection( NactMainWindow *window, NAObjectId *selected_row );
 static void       setup_dialog_title( NactMainWindow *window );
@@ -200,8 +188,7 @@ static gboolean   confirm_for_giveup_from_menu( const NactMainWindow *window );
 static void       load_or_reload_items( NactMainWindow *window );
 
 /* application termination */
-static gboolean   on_base_quit_requested( NactApplication *application, NactMainWindow *window );
-static gboolean   on_delete_event( GtkWidget *toplevel, GdkEvent *event, NactMainWindow *window );
+static gboolean   on_delete_event( GtkWidget *toplevel, GdkEvent *event, void *empty );
 static gboolean   warn_modified( NactMainWindow *window );
 
 GType
@@ -296,7 +283,7 @@ register_type( void )
 
        g_debug( "%s", thisfn );
 
-       type = g_type_register_static( BASE_TYPE_WINDOW, "NactMainWindow", &info, 0 );
+       type = g_type_register_static( GTK_TYPE_APPLICATION_WINDOW, "NactMainWindow", &info, 0 );
 
        g_type_add_interface_static( type, NACT_TYPE_IACTION_TAB, &iaction_tab_iface_info );
 
@@ -334,7 +321,6 @@ class_init( NactMainWindowClass *klass )
        object_class = G_OBJECT_CLASS( klass );
        object_class->set_property = instance_set_property;
        object_class->get_property = instance_get_property;
-       object_class->constructed = instance_constructed;
        object_class->dispose = instance_dispose;
        object_class->finalize = instance_finalize;
 
@@ -375,111 +361,55 @@ class_init( NactMainWindowClass *klass )
                                        0, 255, 0,
                                        G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE ));
 
-       klass->private = g_new0( NactMainWindowClassPrivate, 1 );
-
        /**
         * NactMainWindow::main-item-updated:
         *
-        * This signal is emitted on the BaseWindow when the item has been modified
-        * elsewhere that in a tab. The tabs should so update accordingly their
-        * widgets.
+        * This signal is emitted on the main window when an item is
+        * modified from the user interface
         *
         * Args:
         * - an OR-ed list of the modified data, or 0 if not relevant.
+        *
+        * Handler:
+        *   void handler( NactMainWindow *main_window,
+        *                              NAIContext *updated_context,
+        *                              guint       updated_data,
+        *                              void       *user_data );
         */
-       st_signals[ MAIN_ITEM_UPDATED ] = g_signal_new(
+       st_signals[ ITEM_UPDATED ] = g_signal_new(
                        MAIN_SIGNAL_ITEM_UPDATED,
-                       G_TYPE_OBJECT,
+                       NACT_TYPE_MAIN_WINDOW,
                        G_SIGNAL_RUN_LAST,
                        0,                                      /* no default handler */
                        NULL,
                        NULL,
-                       nact_cclosure_marshal_VOID__POINTER_UINT,
-                       G_TYPE_NONE,
-                       2,
-                       G_TYPE_POINTER,
-                       G_TYPE_UINT );
-
-       /**
-        * nact-tab-updatable-item-updated:
-        *
-        * This signal is emitted by the notebook tabs, when any property
-        * of an item has been modified.
-        *
-        * Args:
-        * - an OR-ed list of the modified data, or 0 if not relevant.
-        *
-        * This main window is rather the only consumer of this message,
-        * does its tricks (title, etc.), and then reforward an item-updated
-        * message to IActionsList.
-        */
-       st_signals[ TAB_ITEM_UPDATED ] = g_signal_new(
-                       TAB_UPDATABLE_SIGNAL_ITEM_UPDATED,
-                       G_TYPE_OBJECT,
-                       G_SIGNAL_RUN_LAST,
-                       0,                                      /* no default handler */
                        NULL,
-                       NULL,
-                       nact_cclosure_marshal_VOID__POINTER_UINT,
                        G_TYPE_NONE,
                        2,
                        G_TYPE_POINTER,
                        G_TYPE_UINT );
 
        /**
-        * NactMainWindow::main-selection-changed:
-        *
-        * This signal is emitted on the window parent each time the selection
-        * has changed in the treeview, after having set the current item/profile/
-        * context properties.
+        * NactMainWindow::main-signal-update-sensitivities
         *
-        * This way, we are sure that notebook edition tabs which required to
-        * have a current item/profile/context will have it, whenever they have
-        * connected to the 'selection-changed' signal.
+        * This signal is emitted on the NactMainWindow when any menu item
+        *  sensitivity has to be refreshed.
         *
-        * Signal args:
-        * - a #GList of currently selected #NAObjectItems.
+        * Signal arg.: None
         *
         * Handler prototype:
-        * void ( *handler )( BaseWindow *window, GList *selected, gpointer user_data );
+        * void handler( NactMainWindow *main_window, gpointer user_data );
         */
-       st_signals[ SELECTION_CHANGED ] = g_signal_new_class_handler(
-                       MAIN_SIGNAL_SELECTION_CHANGED,
-                       G_TYPE_OBJECT,
-                       G_SIGNAL_RUN_CLEANUP,
-                       G_CALLBACK( on_selection_changed_cleanup_handler ),
+       st_signals[ UPDATE_SENSITIVITIES ] = g_signal_new(
+                       MAIN_SIGNAL_UPDATE_SENSITIVITIES,
+                       NACT_TYPE_MAIN_WINDOW,
+                       G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+                       0,                                      /* no default handler */
                        NULL,
                        NULL,
-                       g_cclosure_marshal_VOID__POINTER,
-                       G_TYPE_NONE,
-                       1,
-                       G_TYPE_POINTER );
-
-       /**
-        * NactMainWindow::main-signal-open-popup
-        *
-        * This signal is emitted on the BaseWindow parent when the user right
-        * clicks somewhere (on an active zone).
-        *
-        * Signal args:
-        * - the GdkEvent
-        * - the popup name to be opened.
-        *
-        * Handler prototype:
-        * void ( *handler )( BaseWindow *window, GdkEvent *event, const gchar *popup_name, gpointer 
user_data );
-        */
-       st_signals[ CONTEXT_MENU ] = g_signal_new(
-                       MAIN_SIGNAL_CONTEXT_MENU,
-                       G_TYPE_OBJECT,
-                       G_SIGNAL_RUN_LAST,
-                       0,
                        NULL,
-                       NULL,
-                       nact_cclosure_marshal_VOID__POINTER_STRING,
                        G_TYPE_NONE,
-                       2,
-                       G_TYPE_POINTER,
-                       G_TYPE_STRING);
+                       0 );
 }
 
 static void
@@ -664,88 +594,6 @@ instance_set_property( GObject *object, guint property_id, const GValue *value,
 }
 
 static void
-instance_constructed( GObject *window )
-{
-       static const gchar *thisfn = "nact_main_window_instance_constructed";
-       NactMainWindowPrivate *priv;
-       NactApplication *application;
-
-       g_return_if_fail( NACT_IS_MAIN_WINDOW( window ));
-
-       priv = NACT_MAIN_WINDOW( window )->private;
-
-       if( !priv->dispose_has_run ){
-
-               /* chain up to the parent class */
-               if( G_OBJECT_CLASS( st_parent_class )->constructed ){
-                       G_OBJECT_CLASS( st_parent_class )->constructed( window );
-               }
-
-               g_debug( "%s: window=%p (%s)", thisfn, ( void * ) window, G_OBJECT_TYPE_NAME( window ));
-
-               /* connect to BaseWindow signals
-                * so that convenience objects instanciated later will have this same signal
-                * triggered after the one of NactMainWindow
-                */
-               base_window_signal_connect(
-                               BASE_WINDOW( window ),
-                               G_OBJECT( window ),
-                               BASE_SIGNAL_INITIALIZE_GTK,
-                               G_CALLBACK( on_base_initialize_gtk ));
-
-               base_window_signal_connect(
-                               BASE_WINDOW( window ),
-                               G_OBJECT( window ),
-                               BASE_SIGNAL_INITIALIZE_WINDOW,
-                               G_CALLBACK( on_base_initialize_window ));
-
-               base_window_signal_connect(
-                               BASE_WINDOW( window ),
-                               G_OBJECT( window ),
-                               BASE_SIGNAL_SHOW_WIDGETS,
-                               G_CALLBACK( on_base_show_widgets ));
-
-               /* monitor the items stored on the disk for modifications
-                * outside of this application
-                */
-               application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( window )));
-               priv->updater = nact_application_get_updater( application );
-
-               priv->pivot_handler_id = base_window_signal_connect(
-                               BASE_WINDOW( window ),
-                               G_OBJECT( priv->updater ),
-                               PIVOT_SIGNAL_ITEMS_CHANGED,
-                               G_CALLBACK( on_pivot_items_changed ));
-
-               /* monitor the updates which originates from each property tab
-                */
-               base_window_signal_connect(
-                               BASE_WINDOW( window ),
-                               G_OBJECT( window ),
-                               TAB_UPDATABLE_SIGNAL_ITEM_UPDATED,
-                               G_CALLBACK( on_tab_updatable_item_updated ));
-
-               /* create the menubar and other convenience objects
-                */
-               priv->menubar = nact_menubar_new( BASE_WINDOW( window ));
-               priv->clipboard = nact_clipboard_new( BASE_WINDOW( window ));
-
-               /* initialize the notebook interfaces
-                */
-               nact_iaction_tab_init( NACT_IACTION_TAB( window ));
-               nact_icommand_tab_init( NACT_ICOMMAND_TAB( window ));
-               nact_ibasenames_tab_init( NACT_IBASENAMES_TAB( window ));
-               nact_imimetypes_tab_init( NACT_IMIMETYPES_TAB( window ));
-               nact_ifolders_tab_init( NACT_IFOLDERS_TAB( window ));
-               nact_ischemes_tab_init( NACT_ISCHEMES_TAB( window ));
-               nact_icapabilities_tab_init( NACT_ICAPABILITIES_TAB( window ));
-               nact_ienvironment_tab_init( NACT_IENVIRONMENT_TAB( window ));
-               nact_iexecution_tab_init( NACT_IEXECUTION_TAB( window ));
-               nact_iproperties_tab_init( NACT_IPROPERTIES_TAB( window ));
-       }
-}
-
-static void
 instance_dispose( GObject *window )
 {
        static const gchar *thisfn = "nact_main_window_instance_dispose";
@@ -763,29 +611,21 @@ instance_dispose( GObject *window )
 
                self->private->dispose_has_run = TRUE;
 
-               gtk_main_quit();
-
                g_object_unref( self->private->clipboard );
-               g_object_unref( self->private->menubar );
 
-               pane = base_window_get_widget( BASE_WINDOW( window ), "MainPaned" );
+               pane = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( window ), "main-paned" );
                pos = gtk_paned_get_position( GTK_PANED( pane ));
                na_settings_set_uint( NA_IPREFS_MAIN_PANED, pos );
 
-               notebook = GTK_NOTEBOOK( base_window_get_widget( BASE_WINDOW( window ), "MainNotebook" ));
+               notebook = GTK_NOTEBOOK( na_gtk_utils_find_widget_by_name( GTK_CONTAINER( window ), 
"main-notebook" ));
                pos = gtk_notebook_get_tab_pos( notebook );
                na_iprefs_set_tabs_pos( pos );
 
-               /* unref items view at last as gtk_tree_model_store_clear() will
-                * finalize all objects, thus invaliditing all our references
-                */
-               g_object_unref( self->private->items_view );
-
-               /* chain up to the parent class */
-               if( G_OBJECT_CLASS( st_parent_class )->dispose ){
-                       G_OBJECT_CLASS( st_parent_class )->dispose( window );
-               }
+               na_gtk_utils_save_window_position( GTK_WINDOW( window ), st_wsp_name );
        }
+
+       /* chain up to the parent class */
+       G_OBJECT_CLASS( st_parent_class )->dispose( window );
 }
 
 static void
@@ -802,157 +642,159 @@ instance_finalize( GObject *window )
 
        g_free( self->private );
 
-       /* chain call to parent class */
-       if( G_OBJECT_CLASS( st_parent_class )->finalize ){
-               G_OBJECT_CLASS( st_parent_class )->finalize( window );
-       }
+       /* chain up to the parent class */
+       G_OBJECT_CLASS( st_parent_class )->finalize( window );
 }
 
 /**
  * Returns a newly allocated NactMainWindow object.
  */
 NactMainWindow *
-nact_main_window_new( const NactApplication *application )
+nact_main_window_new( NactApplication *application )
 {
        NactMainWindow *window;
 
        g_return_val_if_fail( NACT_IS_APPLICATION( application ), NULL );
 
        window = g_object_new( NACT_TYPE_MAIN_WINDOW,
-                       BASE_PROP_APPLICATION,        application,
-                       BASE_PROP_XMLUI_FILENAME,     st_xmlui_filename,
-                       BASE_PROP_TOPLEVEL_NAME,      st_toplevel_name,
-                       BASE_PROP_WSP_NAME,           st_wsp_name,
-                       BASE_PROP_DESTROY_ON_DISPOSE, TRUE,
+                       "application", application,             /* GtkWindow property */
                        NULL );
 
-       if( !base_window_init( BASE_WINDOW( window ))){
-               g_object_unref( window );
-               window = NULL;
-       }
+       setup_main_ui( window );
+       setup_treeview( window );
+       nact_menu_win( window );
+
+       window->private->clipboard = nact_clipboard_new( window );
+       window->private->sort_buttons = nact_sort_buttons_new( window );
+
+       /* initialize the notebook interfaces
+        *  and monitor the updates which originates from each property tab
+        */
+       nact_iaction_tab_init( NACT_IACTION_TAB( window ));
+       nact_icommand_tab_init( NACT_ICOMMAND_TAB( window ));
+       nact_ibasenames_tab_init( NACT_IBASENAMES_TAB( window ));
+       nact_imimetypes_tab_init( NACT_IMIMETYPES_TAB( window ));
+       nact_ifolders_tab_init( NACT_IFOLDERS_TAB( window ));
+       nact_ischemes_tab_init( NACT_ISCHEMES_TAB( window ));
+       nact_icapabilities_tab_init( NACT_ICAPABILITIES_TAB( window ));
+       nact_ienvironment_tab_init( NACT_IENVIRONMENT_TAB( window ));
+       nact_iexecution_tab_init( NACT_IEXECUTION_TAB( window ));
+       nact_iproperties_tab_init( NACT_IPROPERTIES_TAB( window ));
+
+       g_signal_connect( window, MAIN_SIGNAL_ITEM_UPDATED, G_CALLBACK( on_tab_item_updated ), NULL );
+
+       na_gtk_utils_restore_window_position( GTK_WINDOW( window ), st_wsp_name );
+       g_signal_connect( window, "delete-event", G_CALLBACK( on_delete_event ), NULL );
+
+       setup_monitor_pivot( window );
+       load_or_reload_items( window );
 
        return( window );
 }
 
 /*
- * note that for this NactMainWindow, on_base_initialize_gtk_toplevel() and
- * on_base_initialize_base_window() are roughly equivalent, as there is only
- * one occurrence on this window in the application: closing this window
- * is the same than quitting the application
+ * Load and initialize the user interface
  */
 static void
-on_base_initialize_gtk( NactMainWindow *window, GtkWindow *toplevel, gpointer user_data )
+setup_main_ui( NactMainWindow *main_window )
 {
-       static const gchar *thisfn = "nact_main_window_on_base_initialize_gtk";
-       GtkWidget *tree_parent;
-       GtkNotebook *notebook;
+       GtkBuilder *builder;
+       GObject *top_window;
+       GtkWidget *top_widget, *alignment;
+       GtkWidget *notebook;
+       guint pos;
+       GtkWidget *pane;
+       NactStatusbar *bar;
 
-       g_return_if_fail( NACT_IS_MAIN_WINDOW( window ));
+       /* no error condition here:
+        * If there is an error opening the file or parsing the description
+        * then the program will be aborted. */
+       builder = gtk_builder_new_from_file( st_xmlui_filename );
+       top_window = gtk_builder_get_object( builder, st_toplevel_name );
+       g_return_if_fail( top_window && GTK_IS_WINDOW( top_window ));
 
-       if( !window->private->dispose_has_run ){
+       top_widget = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( top_window ), "top" );
+       g_return_if_fail( top_widget && GTK_IS_CONTAINER( top_widget ));
 
-               g_debug( "%s: window=%p, toplevel=%p, user_data=%p",
-                               thisfn,
-                               ( void * ) window,
-                               ( void * ) toplevel,
-                               ( void * ) user_data );
-
-               /* create the tree view which will create itself its own tree model
-                */
-               tree_parent = base_window_get_widget( BASE_WINDOW( window ), "MainVBox" );
-               g_debug( "%s: tree_parent=%p (%s)", thisfn, ( void * ) tree_parent, G_OBJECT_TYPE_NAME( 
tree_parent ));
-               window->private->items_view = nact_tree_view_new(
-                               BASE_WINDOW( window ),
-                               GTK_CONTAINER( tree_parent ),
-                               "ActionsList",
-                               TREE_MODE_EDITION );
-
-               nact_main_statusbar_initialize_gtk_toplevel( window );
-
-               /* enable popup menu on  the notebook
-                */
-               notebook = GTK_NOTEBOOK( base_window_get_widget( BASE_WINDOW( window ), "MainNotebook" ));
-               gtk_notebook_popup_enable( notebook );
+       gtk_widget_reparent( top_widget, GTK_WIDGET( main_window ));
+       gtk_widget_destroy( GTK_WIDGET( top_window ));
+       g_object_unref( builder );
+
+       /* restore the notebook tabs position, and enable its popup menu
+        */
+       notebook = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( top_widget ), "main-notebook" );
+       g_return_if_fail( notebook && GTK_IS_NOTEBOOK( notebook ));
+       pos = na_iprefs_get_tabs_pos( NULL );
+       gtk_notebook_set_tab_pos( GTK_NOTEBOOK( notebook ), pos );
+       gtk_notebook_popup_enable( GTK_NOTEBOOK( notebook ));
+
+       /* restore pane position
+        */
+       pos = na_settings_get_uint( NA_IPREFS_MAIN_PANED, NULL, NULL );
+       if( pos ){
+               pane = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( top_widget ), "main-paned" );
+               g_return_if_fail( pane && GTK_IS_PANED( pane ));
+               gtk_paned_set_position( GTK_PANED( pane ), pos );
        }
+
+       /* setup statusbar
+        */
+       bar = nact_statusbar_new();
+       alignment = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( top_widget ), "main-statusbar" );
+       g_return_if_fail( alignment && GTK_IS_ALIGNMENT( alignment ));
+       gtk_container_add( GTK_CONTAINER( alignment ), GTK_WIDGET( bar ));
+       main_window->private->statusbar = bar;
 }
 
+/*
+ * setup the ActionsList treeview, and connect to management signals
+ */
 static void
-on_base_initialize_window( NactMainWindow *window, gpointer user_data )
+setup_treeview( NactMainWindow *main_window )
 {
-       static const gchar *thisfn = "nact_main_window_on_base_initialize_window";
-       guint pos;
-       GtkWidget *pane;
-       NactApplication *application;
-       GtkNotebook *notebook;
+       NactMainWindowPrivate *priv;
+       GtkWidget *top_widget;
 
-       g_return_if_fail( NACT_IS_MAIN_WINDOW( window ));
+       priv = main_window->private;
+       priv->items_view = nact_tree_view_new( main_window );
 
-       if( !window->private->dispose_has_run ){
+       top_widget = na_gtk_utils_find_widget_by_name( GTK_CONTAINER( main_window ), "ActionsList" );
+       g_return_if_fail( top_widget && GTK_IS_CONTAINER( top_widget ));
+       gtk_container_add( GTK_CONTAINER( top_widget ), GTK_WIDGET( priv->items_view ));
 
-               g_debug( "%s: window=%p, user_data=%p",
-                               thisfn,
-                               ( void * ) window,
-                               ( void * ) user_data );
+       nact_tree_view_set_mnemonic( priv->items_view, GTK_CONTAINER( main_window ), "ActionsListLabel" );
+       nact_tree_view_set_edition_mode( priv->items_view, TREE_MODE_EDITION );
 
-               pos = na_settings_get_uint( NA_IPREFS_MAIN_PANED, NULL, NULL );
-               if( pos ){
-                       pane = base_window_get_widget( BASE_WINDOW( window ), "MainPaned" );
-                       gtk_paned_set_position( GTK_PANED( pane ), pos );
-               }
+       g_signal_connect(
+                       priv->items_view,
+                       TREE_SIGNAL_SELECTION_CHANGED,
+                       G_CALLBACK( on_tree_view_selection_changed ), main_window );
 
-               /* terminate the application by clicking the top right [X] button
-                */
-               base_window_signal_connect(
-                               BASE_WINDOW( window ),
-                               G_OBJECT( base_window_get_gtk_toplevel( BASE_WINDOW( window ))),
-                               "delete-event",
-                               G_CALLBACK( on_delete_event ));
-
-               /* is willing to quit ?
-                * connect to the signal of the BaseISession interface
-                */
-               application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( window )));
-               base_window_signal_connect(
-                               BASE_WINDOW( window ),
-                               G_OBJECT( application ),
-                               BASE_SIGNAL_QUIT_REQUESTED,
-                               G_CALLBACK( on_base_quit_requested ));
-
-               /* connect to treeview signals
-                */
-               base_window_signal_connect(
-                               BASE_WINDOW( window ),
-                               G_OBJECT( window ),
-                               MAIN_SIGNAL_SELECTION_CHANGED,
-                               G_CALLBACK( on_tree_view_selection_changed ));
-
-               base_window_signal_connect(
-                               BASE_WINDOW( window ),
-                               G_OBJECT( window ),
-                               TREE_SIGNAL_MODIFIED_STATUS_CHANGED,
-                               G_CALLBACK( on_tree_view_modified_status_changed ));
-
-               /* restore the notebook tabs position
-                */
-               pos = na_iprefs_get_tabs_pos( NULL );
-               notebook = GTK_NOTEBOOK( base_window_get_widget( BASE_WINDOW( window ), "MainNotebook" ));
-               gtk_notebook_set_tab_pos( notebook, pos );
-       }
+       g_signal_connect(
+                       priv->items_view,
+                       TREE_SIGNAL_MODIFIED_STATUS_CHANGED,
+                       G_CALLBACK( on_tree_view_modified_status_changed ), main_window );
 }
 
+/*
+ * monitor the items stored on the disk for modifications
+ *  from outside of this application
+ */
 static void
-on_base_show_widgets( NactMainWindow *window, gpointer user_data )
+setup_monitor_pivot( NactMainWindow *main_window )
 {
-       static const gchar *thisfn = "nact_main_window_on_base_show_widgets";
+       NactMainWindowPrivate *priv;
+       GtkApplication *application;
 
-       g_return_if_fail( NACT_IS_MAIN_WINDOW( window ));
+       priv = main_window->private;
 
-       if( !window->private->dispose_has_run ){
+       application = gtk_window_get_application( GTK_WINDOW( main_window ));
+       g_return_if_fail( application && NACT_IS_APPLICATION( application ));
 
-               g_debug( "%s: window=%p, user_data=%p", thisfn, ( void * ) window, ( void * ) user_data );
+       priv->updater = nact_application_get_updater( NACT_APPLICATION ( application ));
 
-               load_or_reload_items( window );
-       }
+       priv->pivot_handler_id = g_signal_connect( priv->updater,
+                       PIVOT_SIGNAL_ITEMS_CHANGED, G_CALLBACK( on_pivot_items_changed ), main_window );
 }
 
 /**
@@ -979,6 +821,52 @@ nact_main_window_get_clipboard( const NactMainWindow *window )
 }
 
 /**
+ * nact_main_window_get_sort_buttons:
+ * @window: this #NactMainWindow instance.
+ *
+ * Returns: the #NactSortButtons object.
+ */
+NactSortButtons *
+nact_main_window_get_sort_buttons( const NactMainWindow *window )
+{
+       NactSortButtons *buttons;
+
+       g_return_val_if_fail( window && NACT_IS_MAIN_WINDOW( window ), NULL );
+
+       buttons = NULL;
+
+       if( !window->private->dispose_has_run ){
+
+               buttons = window->private->sort_buttons;
+       }
+
+       return( buttons );
+}
+
+/**
+ * nact_main_window_get_statusbar:
+ * @window: this #NactMainWindow instance.
+ *
+ * Returns: the #NactStatusbar object.
+ */
+NactStatusbar *
+nact_main_window_get_statusbar( const NactMainWindow *window )
+{
+       NactStatusbar *bar;
+
+       g_return_val_if_fail( window && NACT_IS_MAIN_WINDOW( window ), NULL );
+
+       bar = NULL;
+
+       if( !window->private->dispose_has_run ){
+
+               bar = window->private->statusbar;
+       }
+
+       return( bar );
+}
+
+/**
  * nact_main_window_get_items_view:
  * @window: this #NactMainWindow instance.
  *
@@ -1062,12 +950,12 @@ on_block_items_changed_timeout( NactMainWindow *window )
  * the modification status of the items view has changed
  */
 static void
-on_tree_view_modified_status_changed( NactMainWindow *window, gboolean is_modified, gpointer user_data )
+on_tree_view_modified_status_changed( NactTreeView *treeview, gboolean is_modified, NactMainWindow *window )
 {
        static const gchar *thisfn = "nact_main_window_on_tree_view_modified_status_changed";
 
-       g_debug( "%s: window=%p, is_modified=%s, user_data=%p",
-                       thisfn, ( void * ) window, is_modified ? "True":"False", ( void * ) user_data );
+       g_debug( "%s: treeview=%p, is_modified=%s, window=%p",
+                       thisfn, ( void * ) treeview, is_modified ? "True":"False", ( void * ) window );
 
        if( !window->private->dispose_has_run ){
 
@@ -1080,7 +968,7 @@ on_tree_view_modified_status_changed( NactMainWindow *window, gboolean is_modifi
  * tree view selection has changed
  */
 static void
-on_tree_view_selection_changed( NactMainWindow *window, GList *selected_items, gpointer user_data )
+on_tree_view_selection_changed( NactTreeView *treeview, GList *selected_items, NactMainWindow *window )
 {
        static const gchar *thisfn = "nact_main_window_on_tree_view_selection_changed";
        guint count;
@@ -1088,9 +976,9 @@ on_tree_view_selection_changed( NactMainWindow *window, GList *selected_items, g
        count = g_list_length( selected_items );
 
        if( !window->private->dispose_has_run ){
-               g_debug( "%s: window=%p, selected_items=%p (count=%d), user_data=%p",
-                               thisfn, ( void * ) window,
-                               ( void * ) selected_items, count, ( void * ) user_data );
+               g_debug( "%s: treeview=%p, selected_items=%p (count=%d), window=%p",
+                               thisfn, ( void * ) treeview,
+                               ( void * ) selected_items, count, ( void * ) window );
 
                raz_selection_properties( window );
 
@@ -1104,32 +992,17 @@ on_tree_view_selection_changed( NactMainWindow *window, GList *selected_items, g
        }
 }
 
-/*
- * cleanup handler for our MAIN_SIGNAL_SELECTION_CHANGED signal
- */
-static void
-on_selection_changed_cleanup_handler( BaseWindow *window, GList *selected_items )
-{
-       static const gchar *thisfn = "nact_main_window_on_selection_changed_cleanup_handler";
-
-       g_debug( "%s: window=%p, selected_items=%p (count=%u)",
-                       thisfn, ( void * ) window,
-                       ( void * ) selected_items, g_list_length( selected_items ));
-
-       na_object_free_items( selected_items );
-}
-
 static void
-on_tab_updatable_item_updated( NactMainWindow *window, NAIContext *context, guint data, gpointer user_data )
+on_tab_item_updated( NactMainWindow *window, NAIContext *context, guint data, void *empty )
 {
-       static const gchar *thisfn = "nact_main_window_on_tab_updatable_item_updated";
+       static const gchar *thisfn = "nact_main_window_on_tab_item_updated";
 
        g_return_if_fail( NACT_IS_MAIN_WINDOW( window ));
 
        if( !window->private->dispose_has_run ){
-               g_debug( "%s: window=%p, context=%p (%s), data=%u, user_data=%p",
+               g_debug( "%s: window=%p, context=%p (%s), data=%u, empty=%p",
                                thisfn, ( void * ) window, ( void * ) context, G_OBJECT_TYPE_NAME( context ),
-                               data, ( void * ) user_data );
+                               data, ( void * ) empty );
 
                if( context ){
                        na_object_check_status( context );
@@ -1146,7 +1019,7 @@ raz_selection_properties( NactMainWindow *window )
        window->private->editable = FALSE;
        window->private->reason = 0;
 
-       nact_main_statusbar_set_locked( window, FALSE, 0 );
+       nact_statusbar_set_locked( window->private->statusbar, FALSE, 0 );
 }
 
 /*
@@ -1191,8 +1064,8 @@ static void
 setup_dialog_title( NactMainWindow *window )
 {
        static const gchar *thisfn = "nact_main_window_setup_dialog_title";
-       GtkWindow *toplevel;
-       NactApplication *application;
+       NactMainWindowPrivate *priv;
+       GtkApplication *application;
        gchar *title;
        gchar *label;
        gchar *tmp;
@@ -1200,20 +1073,21 @@ setup_dialog_title( NactMainWindow *window )
 
        g_debug( "%s: window=%p", thisfn, ( void * ) window );
 
-       application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( window )));
-       title = base_application_get_application_name( BASE_APPLICATION( application ));
+       priv = window->private;
+       application = gtk_window_get_application( GTK_WINDOW( window ));
+       g_return_if_fail( application && NACT_IS_APPLICATION( application ));
+       title = nact_application_get_application_name( NACT_APPLICATION( application ));
 
-       if( window->private->current_item ){
-               label = na_object_get_label( window->private->current_item );
-               is_modified = na_object_is_modified( window->private->current_item );
+       if( priv->current_item ){
+               label = na_object_get_label( priv->current_item );
+               is_modified = na_object_is_modified( priv->current_item );
                tmp = g_strdup_printf( "%s%s - %s", is_modified ? "*" : "", label, title );
                g_free( label );
                g_free( title );
                title = tmp;
        }
 
-       toplevel = base_window_get_gtk_toplevel( BASE_WINDOW( window ));
-       gtk_window_set_title( toplevel, title );
+       gtk_window_set_title( GTK_WINDOW( window ), title );
        g_free( title );
 }
 
@@ -1223,7 +1097,7 @@ setup_writability_status( NactMainWindow *window )
        g_return_if_fail( NA_IS_OBJECT_ITEM( window->private->current_item ));
 
        window->private->editable = na_object_is_finally_writable( window->private->current_item, 
&window->private->reason );
-       nact_main_statusbar_set_locked( window, !window->private->editable, window->private->reason );
+       nact_statusbar_set_locked( window->private->statusbar, !window->private->editable, 
window->private->reason );
 }
 
 /*
@@ -1323,7 +1197,6 @@ load_or_reload_items( NactMainWindow *window )
        g_debug( "%s: window=%p", thisfn, ( void * ) window );
 
        raz_selection_properties( window );
-
        tree = na_updater_load_items( window->private->updater );
        nact_tree_view_fill( window->private->items_view, tree );
 
@@ -1353,7 +1226,7 @@ nact_main_window_quit( NactMainWindow *window )
                g_debug( "%s: window=%p (%s)", thisfn, ( void * ) window, G_OBJECT_TYPE_NAME( window ));
 
                if( !window->private->is_tree_modified  || warn_modified( window )){
-                       g_object_unref( window );
+                       gtk_widget_destroy( GTK_WIDGET( window ));
                        terminated = TRUE;
                }
        }
@@ -1361,6 +1234,7 @@ nact_main_window_quit( NactMainWindow *window )
        return( terminated );
 }
 
+#if 0
 /*
  * signal handler
  * should return %FALSE if it is not willing to quit
@@ -1387,6 +1261,7 @@ on_base_quit_requested( NactApplication *application, NactMainWindow *window )
 
        return( willing_to );
 }
+#endif
 
 /*
  * triggered when the user clicks on the top right [X] button
@@ -1394,14 +1269,16 @@ on_base_quit_requested( NactApplication *application, NactMainWindow *window )
  * window to be destroyed); instead we gracefully quit the application
  */
 static gboolean
-on_delete_event( GtkWidget *toplevel, GdkEvent *event, NactMainWindow *window )
+on_delete_event( GtkWidget *toplevel, GdkEvent *event, void *empty )
 {
        static const gchar *thisfn = "nact_main_window_on_delete_event";
 
-       g_debug( "%s: toplevel=%p, event=%p, window=%p",
-                       thisfn, ( void * ) toplevel, ( void * ) event, ( void * ) window );
+       g_debug( "%s: toplevel=%p, event=%p, empty=%p",
+                       thisfn, ( void * ) toplevel, ( void * ) event, ( void * ) empty );
+
+       g_return_val_if_fail( toplevel && NACT_IS_MAIN_WINDOW( toplevel ), FALSE );
 
-       nact_main_window_quit( window );
+       nact_main_window_quit( NACT_MAIN_WINDOW( toplevel ));
 
        return( TRUE );
 }
diff --git a/src/nact/nact-main-window.h b/src/nact/nact-main-window.h
index e64cf14..a8ff6b0 100644
--- a/src/nact/nact-main-window.h
+++ b/src/nact/nact-main-window.h
@@ -35,216 +35,26 @@
  * @title: NactMainWindow
  * @short_description: The Main Window class definition
  * @include: nact-main-window.h
- *
- * This class is derived from NactWindow and manages the main window.
- *
- * It embeds:
- * - the menubar,
- * - the toolbar,
- * - a button bar with sort buttons,
- * - the hierarchical list of items,
- * - a notebook which displays the content of the current item,
- * - a status bar.
- *
- * NactApplication    NactMainWindow    NactTreeView    NactTreeModel   NactMenubar
- *  |
- *  +-> nact_main_window_new()
- *  |   |
- *  |   +-> NactMainWindow::instance_contructed()
- *  |   |   |
- *  |   |   +-> connect to base-init-gtk       [window]
- *  |   |   |              base-init-window    [window]
- *  |   |   |              base-show-widgets   [window]
- *  |   |   |              pivot-items-changed [updater]
- *  |   |   |              tab-item-updated    [window]
- *  |   |   |
- *  |   |   +-> nact_menubar_new()
- *  |   |   |   |
- *  |   |   |   +-> NactMenubar::nact_menubar_new()
- *  |   |   |   |   |
- *  |   |   |   |   +-> nact_sort_buttons_new()
- *  |   |   |   |   +-> connect to base-init-window [window]
- *  |   |   |   |   |
- *  |   |   |   |  <-
- *  |   |   |  <-
- *  |   |   |
- *  |   |   +-> nact_clipboard_new()
- *  |   |   |
- *  |   |   +-> initialize each notebook tab
- *  |   |   |
- *  |   |   |   NactMainWindow has connected to "base-init-window" signal _before_
- *  |   |   |   other widgets have been created or initialized. We so are sure that
- *  |   |   |   the NactMainWindow handlers will be called first.
- *  |   |  <-
- *  |   |
- *  |   +-> base_window_init()
- *  |   |   |
- *  |   |   +-> setup builder
- *  |   |   +-> load gtk toplevel
- *  |   |   +-> emit signal base-initialize-gtk
- *  |   |   |
- *  |   |   |   [H]-> NactMainWindow::on_base_initialize_gtk()
- *  |   |   |         |
- *  |   |   |         +-> nact_tree_view_new()
- *  |   |   |         |   |
- *  |   |   |         |   +-> NactTreeView::instance_contructed()
- *  |   |   |         |   |   |
- *  |   |   |         |   |   +-> connect to base-init-window  [window]
- *  |   |   |         |   |   |              base-show-widgets [window]
- *  |   |   |         |   |   |
- *  |   |   |         |   |   +-> initialize_gtk()
- *  |   |   |         |   |   |   |
- *  |   |   |         |   |   |   +-> nact_tree_model_new()
- *  |   |   |         |   |   |   |   |
- *  |   |   |         |   |   |   |   +-> NactTreeModel::nact_tree_model_new()
- *  |   |   |         |   |   |   |   |
- *  |   |   |         |   |   |   |  <-
- *  |   |   |         |   |   |  <-
- *  |   |   |         |   |  <-
- *  |   |   |         |  <-
- *  |   |   |         |
- *  |   |   |         +-> nact_main_statusbar_initialize_load_toplevel()
- *  |   |   |
- *  |   |   |   [H]-> NactIxxxxxxTab::on_base_initialize_gtk()
- *  |   |   |
- *  |   |   +-> emit signal base-initialize-window
- *  |   |   |
- *  |   |   |   [H]-> NactMainWindow::on_base_initialize_base_window()
- *  |   |   |         |
- *  |   |   |         +-> connect to delete-event
- *  |   |   |         |              base-quit-requested
- *  |   |   |         |
- *  |   |   |         +-> connect to tree-selection-changed
- *  |   |   |         |              tree-modified-status-changed
- *  |   |   |         |
- *  |   |   |         |   Because NactMainWindow was the first class to connect to
- *  |   |   |         |   "base-initialize-window" signal, then this handler has been
- *  |   |   |         |   the first to be called. And so the "tree-selection-changed"
- *  |   |   |         |   signal handler will also the first to be called, and we can
- *  |   |   |         |   safely rely on that.
- *  |   |   |        <-
- *  |   |   |
- *  |   |   |   [H]-> NactIxxxxxxTab::on_base_initialize_window()
- *  |   |   |
- *  |   |   |   [H]-> NactTreeView::on_base_initialize_view()
- *  |   |   |         |
- *  |   |   |         +-> monitors the selection in the tree
- *  |   |   |         |   in order to be able to send the "tree-selection-changed" signal
- *  |   |   |         |
- *  |   |   |         +- nact_tree_ieditable_initialize()
- *  |   |   |         |
- *  |   |   |        <-
- *  |   |   |
- *  |   |   +-> emit signal base-show-widgets
- *  |   |   |
- *  |   |   |   [H]-> NactMainWindow::on_base_show_widgets()
- *  |   |   |         |
- *  |   |   |         +-> load items from pivot
- *  |   |   |
- *  |   |   |   [H]-> NactIxxxxxxTab::on_base_show_widgets()
- *  |   |   |
- *  |   |   +-> gtk_widget_show_all()
- *  |   |   |
- *  |   |  <-
- *  |  <-
- *  |
- *  +-> gtk_main()
- *  |
- * [X] End of initialization process
- *
- * Some signals and their usages
- * =============================
- * MAIN_SIGNAL_SELECTION_CHANGED
- *   The signal is sent by the tree view on the BaseWindow each time the
- *   selection has changed. By construction (cf. initialization process),
- *   the main window handler is the first to be triggered by this signal:
- *   it sets the 'current' main window properties to reflect this new
- *   selection.
- *   Args:
- *   - the list of selected items, may be NULL.
- *   Consumers:
- *   - all tabs should take advantage of this signal to enable/disable
- *     their page, setup the content of their widgets, and so on.
- *   - the menubar updates its indicator depending of the current selection
- *
- * TAB_UPDATABLE_SIGNAL_ITEM_UPDATED
- *   The signal is sent on the BaseWindow each time a widget is updated; the widget
- *   callback must setup the edited object with the new value, and then should call
- *   this signal with a flag indicating if the tree display should be refreshed now.
- *   Args:
- *   - an OR-ed list of modified flags, or 0 if not relevant
- *   Consumers are:
- *   - the main window checks the modification/validity status of the object
- *   - if the 'refresh tree display' flag is set, then the tree model refreshes
- *     the current row with current label and icon, then flags current row as
- *     modified
- *
- * MAIN_SIGNAL_ITEM_UPDATED
- *   The signal is sent on the BaseWindow after a data has been modified elsewhere
- *   that in a tab: either the label has been edited inline in the tree view,
- *   or a new i/o provider has been identified. The relevant NAObject has
- *   been updated accordingly.
- *   Args:
- *   - an OR-ed list of modified flags, or 0 if not relevant
- *   Consumers are:
- *   - IActionTab and ICommandTab should update their label widgets
- *   - IPropertiesTab updates its provider label
- *
- * MAIN_SIGNAL_CONTEXT_MENU
- *   Opens the specified context menu.
- *
- * TREE_SIGNAL_FOCUS_IN
- * TREE_SIGNAL_FOCUS_OUT
- * TREE_SIGNAL_COUNT_CHANGED
- * TREE_SIGNAL_LEVEL_ZERO_CHANGED
- * TREE_SIGNAL_MODIFIED_STATUS_CHANGED
- *
- * TAB_UPDATABLE_SIGNAL_PROVIDER_CHANGED
- *
- * Object
  */
 
 #include "nact-application.h"
 #include "nact-clipboard.h"
+#include "nact-main-window-def.h"
+#include "nact-sort-buttons.h"
+#include "nact-statusbar.h"
 #include "nact-tree-view.h"
 
 G_BEGIN_DECLS
 
-#define NACT_TYPE_MAIN_WINDOW                ( nact_main_window_get_type())
-#define NACT_MAIN_WINDOW( object )           ( G_TYPE_CHECK_INSTANCE_CAST( object, NACT_TYPE_MAIN_WINDOW, 
NactMainWindow ))
-#define NACT_MAIN_WINDOW_CLASS( klass )      ( G_TYPE_CHECK_CLASS_CAST( klass, NACT_TYPE_MAIN_WINDOW, 
NactMainWindowClass ))
-#define NACT_IS_MAIN_WINDOW( object )        ( G_TYPE_CHECK_INSTANCE_TYPE( object, NACT_TYPE_MAIN_WINDOW ))
-#define NACT_IS_MAIN_WINDOW_CLASS( klass )   ( G_TYPE_CHECK_CLASS_TYPE(( klass ), NACT_TYPE_MAIN_WINDOW ))
-#define NACT_MAIN_WINDOW_GET_CLASS( object ) ( G_TYPE_INSTANCE_GET_CLASS(( object ), NACT_TYPE_MAIN_WINDOW, 
NactMainWindowClass ))
-
-typedef struct _NactMainWindowPrivate        NactMainWindowPrivate;
-
-typedef struct {
-       /*< private >*/
-       BaseWindow             parent;
-       NactMainWindowPrivate *private;
-}
-       NactMainWindow;
-
-typedef struct _NactMainWindowClassPrivate   NactMainWindowClassPrivate;
-
-typedef struct {
-       /*< private >*/
-       BaseWindowClass             parent;
-       NactMainWindowClassPrivate *private;
-}
-       NactMainWindowClass;
-
 /**
- * Signals emitted by the main window
+ * Signals defined by the main window
  */
-#define MAIN_SIGNAL_ITEM_UPDATED                       "main-item-updated"
-#define MAIN_SIGNAL_SELECTION_CHANGED          "main-selection-changed"
-#define MAIN_SIGNAL_CONTEXT_MENU                       "main-signal-open-popup"
+#define MAIN_SIGNAL_ITEM_UPDATED            "main-item-updated"
+#define MAIN_SIGNAL_UPDATE_SENSITIVITIES       "main-signal-update-sensitivities"
 
 /**
  * The data which, when modified, should be redisplayed asap.
- * This is used by MAIN_SIGNAL_ITEM_UPDATED and TAB_UPDATABLE_SIGNAL_ITEM_UPDATED
+ * This is used by MAIN_SIGNAL_ITEM_UPDATED and MAIN_SIGNAL_TAB_UPDATED
  * signals.
  */
 enum {
@@ -262,16 +72,21 @@ enum {
 #define MAIN_PROP_EDITABLE                                     "main-editable"
 #define MAIN_PROP_REASON                                       "main-reason"
 
-GType           nact_main_window_get_type( void );
+NactMainWindow  *nact_main_window_new             ( NactApplication *application );
+
+NactClipboard   *nact_main_window_get_clipboard   ( const NactMainWindow *window );
+
+NactSortButtons *nact_main_window_get_sort_buttons( const NactMainWindow *window );
+
+NactStatusbar   *nact_main_window_get_statusbar   ( const NactMainWindow *window );
+
+NactTreeView    *nact_main_window_get_items_view  ( const NactMainWindow *window );
 
-NactMainWindow *nact_main_window_new           ( const NactApplication *application );
+void             nact_main_window_reload          ( NactMainWindow *window );
 
-NactClipboard  *nact_main_window_get_clipboard ( const NactMainWindow *window );
-NactTreeView   *nact_main_window_get_items_view( const NactMainWindow *window );
+void             nact_main_window_block_reload    ( NactMainWindow *window );
 
-void            nact_main_window_reload      ( NactMainWindow *window );
-void            nact_main_window_block_reload( NactMainWindow *window );
-gboolean        nact_main_window_quit        ( NactMainWindow *window );
+gboolean         nact_main_window_quit            ( NactMainWindow *window );
 
 G_END_DECLS
 
diff --git a/src/nact/nact-main-window.ui b/src/nact/nact-main-window.ui
new file mode 100644
index 0000000..1d4e033
--- /dev/null
+++ b/src/nact/nact-main-window.ui
@@ -0,0 +1,2967 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.16.1 -->
+<interface>
+  <requires lib="gtk+" version="3.4"/>
+  <object class="GtkWindow" id="MainWindow">
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkGrid" id="top">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="row_spacing">2</property>
+        <child>
+          <object class="GtkPaned" id="main-paned">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <child>
+              <object class="GtkGrid" id="grid2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkGrid" id="grid3">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <child>
+                      <object class="GtkLabel" id="ActionsListLabel">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="xpad">4</property>
+                        <property name="ypad">4</property>
+                        <property name="label" translatable="yes">Items _list :</property>
+                        <property name="use_underline">True</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">0</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkToggleButton" id="SortUpButton">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="tooltip_text" translatable="yes">Sort the list in ascending 
alphabetical order.</property>
+                        <child>
+                          <object class="GtkImage" id="image1">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="stock">gtk-go-up</property>
+                            <property name="icon_size">1</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">0</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkToggleButton" id="SortManualButton">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="tooltip_text" translatable="yes">Do not sort the list, letting you 
manually reorder the items.</property>
+                        <child>
+                          <object class="GtkImage" id="image2">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="stock">gtk-index</property>
+                            <property name="icon_size">1</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="left_attach">2</property>
+                        <property name="top_attach">0</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkToggleButton" id="SortDownButton">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="tooltip_text" translatable="yes">Sort the list in descending 
alphabetical order.</property>
+                        <child>
+                          <object class="GtkImage" id="image3">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="stock">gtk-go-down</property>
+                            <property name="icon_size">1</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="left_attach">3</property>
+                        <property name="top_attach">0</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">0</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkAlignment" id="ActionsList">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">1</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="resize">False</property>
+                <property name="shrink">True</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkNotebook" id="main-notebook">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="scrollable">True</property>
+                <child>
+                  <object class="GtkAlignment" id="alignment100">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="yalign">0</property>
+                    <property name="yscale">0</property>
+                    <property name="left_padding">4</property>
+                    <property name="right_padding">4</property>
+                    <child>
+                      <object class="GtkGrid" id="grid110">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkFrame" id="frame110">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label_xalign">0</property>
+                            <property name="shadow_type">in</property>
+                            <child>
+                              <object class="GtkAlignment" id="alignment110">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="yalign">0</property>
+                                <property name="yscale">0</property>
+                                <property name="top_padding">6</property>
+                                <property name="bottom_padding">6</property>
+                                <property name="left_padding">12</property>
+                                <property name="right_padding">6</property>
+                                <child>
+                                  <object class="GtkVBox" id="vbox115">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="spacing">10</property>
+                                    <child>
+                                      <object class="GtkTable" id="table115">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="n_rows">3</property>
+                                        <property name="n_columns">2</property>
+                                        <property name="column_spacing">6</property>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <object class="GtkCheckButton" id="ActionTargetSelectionButton">
+                                            <property name="label" translatable="yes">Display item in 
_selection context menu</property>
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="receives_default">False</property>
+                                            <property name="tooltip_text" translatable="yes">When checked, 
the item will be candidate to be displayed in the file manager context menu, with a non-empty 
selection.</property>
+                                            <property name="use_underline">True</property>
+                                            <property name="xalign">0</property>
+                                            <property name="draw_indicator">True</property>
+                                          </object>
+                                          <packing>
+                                            <property name="left_attach">1</property>
+                                            <property name="right_attach">2</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkEntry" id="ActionMenuLabelEntry">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="tooltip_text" translatable="yes">The label of 
the item in the file manager context menus.</property>
+                                            <property name="invisible_char">●</property>
+                                          </object>
+                                          <packing>
+                                            <property name="left_attach">1</property>
+                                            <property name="right_attach">2</property>
+                                            <property name="top_attach">2</property>
+                                            <property name="bottom_attach">3</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkLabel" id="ActionMenuLabelLabel">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                            <property name="xalign">1</property>
+                                            <property name="label" translatable="yes">_Context label 
:</property>
+                                            <property name="use_underline">True</property>
+                                            <property name="mnemonic_widget">ActionMenuLabelEntry</property>
+                                          </object>
+                                          <packing>
+                                            <property name="top_attach">2</property>
+                                            <property name="bottom_attach">3</property>
+                                            <property name="x_options">GTK_FILL</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkCheckButton" id="ActionTargetLocationButton">
+                                            <property name="label" translatable="yes">Display item in 
_location context menu</property>
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="receives_default">False</property>
+                                            <property name="tooltip_text" translatable="yes">When checked, 
the item will be candidate to be displayed in the file manager context menu when the selection is empty.
+In this case, the defined conditions will be applied to the current displayed folder.</property>
+                                            <property name="use_underline">True</property>
+                                            <property name="xalign">0</property>
+                                            <property name="draw_indicator">True</property>
+                                          </object>
+                                          <packing>
+                                            <property name="left_attach">1</property>
+                                            <property name="right_attach">2</property>
+                                            <property name="top_attach">1</property>
+                                            <property name="bottom_attach">2</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">True</property>
+                                        <property name="fill">True</property>
+                                        <property name="position">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <object class="GtkTable" id="table116">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="n_rows">3</property>
+                                        <property name="n_columns">2</property>
+                                        <property name="column_spacing">6</property>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <object class="GtkCheckButton" id="ActionTargetToolbarButton">
+                                            <property name="label" translatable="yes">Display item in the 
_toolbar</property>
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="receives_default">False</property>
+                                            <property name="tooltip_text" translatable="yes">When checked, 
the item will be candidate to be displayed in the file manager toolbar.
+In this case, the defined conditions will be applied to the current folder, and do not depend of the 
possible current selection.</property>
+                                            <property name="use_underline">True</property>
+                                            <property name="xalign">0</property>
+                                            <property name="draw_indicator">True</property>
+                                          </object>
+                                          <packing>
+                                            <property name="left_attach">1</property>
+                                            <property name="right_attach">2</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkCheckButton" id="ToolbarSameLabelButton">
+                                            <property name="label" translatable="yes">Use s_ame label for 
icon in the toolbar</property>
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="receives_default">False</property>
+                                            <property name="tooltip_text" translatable="yes">When checked, 
the label displayed in the toolbar will be the same that the one displayed in the context menus.</property>
+                                            <property name="use_underline">True</property>
+                                            <property name="xalign">0</property>
+                                            <property name="draw_indicator">True</property>
+                                          </object>
+                                          <packing>
+                                            <property name="left_attach">1</property>
+                                            <property name="right_attach">2</property>
+                                            <property name="top_attach">1</property>
+                                            <property name="bottom_attach">2</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkEntry" id="ActionToolbarLabelEntry">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="tooltip_text" translatable="yes">The label 
displayed in the file manager toolbar.</property>
+                                            <property name="invisible_char">●</property>
+                                          </object>
+                                          <packing>
+                                            <property name="left_attach">1</property>
+                                            <property name="right_attach">2</property>
+                                            <property name="top_attach">2</property>
+                                            <property name="bottom_attach">3</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkLabel" id="ActionToolbarLabelLabel">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                            <property name="xalign">1</property>
+                                            <property name="label" translatable="yes">T_oolbar label 
:</property>
+                                            <property name="use_underline">True</property>
+                                            <property 
name="mnemonic_widget">ActionToolbarLabelEntry</property>
+                                          </object>
+                                          <packing>
+                                            <property name="top_attach">2</property>
+                                            <property name="bottom_attach">3</property>
+                                            <property name="x_options">GTK_FILL</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">True</property>
+                                        <property name="fill">True</property>
+                                        <property name="position">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkTable" id="table117">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="n_rows">2</property>
+                                        <property name="n_columns">2</property>
+                                        <property name="column_spacing">6</property>
+                                        <property name="row_spacing">3</property>
+                                        <child>
+                                          <object class="GtkLabel" id="ActionTooltipLabel">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                            <property name="xalign">1</property>
+                                            <property name="label" translatable="yes">Toolti_p :</property>
+                                            <property name="use_underline">True</property>
+                                            <property name="mnemonic_widget">ActionTooltipEntry</property>
+                                          </object>
+                                          <packing>
+                                            <property name="x_options">GTK_FILL</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkLabel" id="ActionIconLabel">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                            <property name="xalign">1</property>
+                                            <property name="label" translatable="yes">_Icon :</property>
+                                            <property name="use_underline">True</property>
+                                          </object>
+                                          <packing>
+                                            <property name="top_attach">1</property>
+                                            <property name="bottom_attach">2</property>
+                                            <property name="x_options">GTK_FILL</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkEntry" id="ActionTooltipEntry">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="tooltip_text" translatable="yes">The tooltip 
displayed in the file manager user interface.</property>
+                                            <property name="invisible_char">●</property>
+                                          </object>
+                                          <packing>
+                                            <property name="left_attach">1</property>
+                                            <property name="right_attach">2</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkHBox" id="hbox118">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                            <property name="tooltip_text" translatable="yes">The icon 
displayed in the file manager user interface.</property>
+                                            <property name="spacing">6</property>
+                                            <child>
+                                              <object class="GtkAspectFrame" id="ActionIconFrame">
+                                                <property name="visible">True</property>
+                                                <property name="can_focus">False</property>
+                                                <property name="label_xalign">0</property>
+                                                <property name="shadow_type">in</property>
+                                                <property name="obey_child">False</property>
+                                                <child>
+                                                  <object class="GtkImage" id="ActionIconImage">
+                                                    <property name="visible">True</property>
+                                                    <property name="can_focus">False</property>
+                                                    <property name="xpad">2</property>
+                                                    <property name="ypad">2</property>
+                                                    <property name="stock">gtk-stock-blank</property>
+                                                    <property name="icon_size">2</property>
+                                                  </object>
+                                                </child>
+                                              </object>
+                                              <packing>
+                                                <property name="expand">False</property>
+                                                <property name="fill">True</property>
+                                                <property name="position">0</property>
+                                              </packing>
+                                            </child>
+                                            <child>
+                                              <object class="GtkEntry" id="ActionIconEntry">
+                                                <property name="visible">True</property>
+                                                <property name="can_focus">True</property>
+                                                <property name="tooltip_text" translatable="yes">The name of 
a themed icon or the filename of an image.</property>
+                                                <property name="invisible_char">●</property>
+                                              </object>
+                                              <packing>
+                                                <property name="expand">True</property>
+                                                <property name="fill">True</property>
+                                                <property name="position">1</property>
+                                              </packing>
+                                            </child>
+                                            <child>
+                                              <object class="GtkButton" id="ActionIconBrowseButton">
+                                                <property name="label" 
translatable="yes">_Browse...</property>
+                                                <property name="visible">True</property>
+                                                <property name="can_focus">True</property>
+                                                <property name="receives_default">True</property>
+                                                <property name="use_underline">True</property>
+                                              </object>
+                                              <packing>
+                                                <property name="expand">False</property>
+                                                <property name="fill">True</property>
+                                                <property name="position">2</property>
+                                              </packing>
+                                            </child>
+                                          </object>
+                                          <packing>
+                                            <property name="left_attach">1</property>
+                                            <property name="right_attach">2</property>
+                                            <property name="top_attach">1</property>
+                                            <property name="bottom_attach">2</property>
+                                          </packing>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">True</property>
+                                        <property name="fill">True</property>
+                                        <property name="position">3</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
+                            <child type="label">
+                              <object class="GtkLabel" id="label52">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xpad">5</property>
+                                <property name="label" translatable="yes">&lt;b&gt;Nautilus 
Item&lt;/b&gt;</property>
+                                <property name="use_markup">True</property>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">0</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+                <child type="tab">
+                  <object class="GtkLabel" id="label100">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="tooltip_text" translatable="yes">This tab lets you determine the main 
characteristics of the currently selected item.</property>
+                    <property name="label" translatable="yes">_Action</property>
+                    <property name="use_underline">True</property>
+                  </object>
+                  <packing>
+                    <property name="tab_fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkAlignment" id="alignment200">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="yalign">0</property>
+                    <property name="yscale">0</property>
+                    <property name="left_padding">4</property>
+                    <property name="right_padding">4</property>
+                    <child>
+                      <object class="GtkGrid" id="grid200">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkFrame" id="frame210">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label_xalign">0</property>
+                            <property name="shadow_type">in</property>
+                            <child>
+                              <object class="GtkAlignment" id="alignment210">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="yalign">0</property>
+                                <property name="yscale">0</property>
+                                <property name="top_padding">6</property>
+                                <property name="bottom_padding">6</property>
+                                <property name="left_padding">12</property>
+                                <property name="right_padding">6</property>
+                                <child>
+                                  <object class="GtkGrid" id="grid210">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="column_spacing">3</property>
+                                    <child>
+                                      <object class="GtkLabel" id="ProfileLabelLabel">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">1</property>
+                                        <property name="label" translatable="yes">_Label :</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="mnemonic_widget">ProfileLabelEntry</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkEntry" id="ProfileLabelEntry">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="invisible_char">●</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
+                            <child type="label">
+                              <object class="GtkLabel" id="label210">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xpad">5</property>
+                                <property name="label" 
translatable="yes">&lt;b&gt;Profile&lt;/b&gt;</property>
+                                <property name="use_markup">True</property>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">0</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkFrame" id="frame220">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label_xalign">0</property>
+                            <property name="shadow_type">in</property>
+                            <child>
+                              <object class="GtkAlignment" id="alignment220">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="yalign">0</property>
+                                <property name="yscale">0</property>
+                                <property name="top_padding">6</property>
+                                <property name="bottom_padding">6</property>
+                                <property name="left_padding">12</property>
+                                <property name="right_padding">6</property>
+                                <child>
+                                  <object class="GtkGrid" id="grid220">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="column_spacing">3</property>
+                                    <child>
+                                      <object class="GtkLabel" id="CommandPathLabel">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">1</property>
+                                        <property name="label" translatable="yes">_Path :</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="mnemonic_widget">CommandPathEntry</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="CommandParametersLabel">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">1</property>
+                                        <property name="label" translatable="yes">P_arameters :</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="mnemonic_widget">CommandParametersEntry</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="CommandWDLabel">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">1</property>
+                                        <property name="label" translatable="yes">_Working directory 
:</property>
+                                        <property name="use_underline">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">3</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkEntry" id="CommandPathEntry">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">The path of the 
command.
+If this is not an absolute path, then the PATH environment variable at execution time will be 
considered.</property>
+                                        <property name="invisible_char">●</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkEntry" id="CommandParametersEntry">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">The parameters of 
the command.</property>
+                                        <property name="invisible_char">●</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="CommandPathButton">
+                                        <property name="label" translatable="yes">_Browse...</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                        <property name="use_underline">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">2</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkToggleButton" id="CommandLegendButton">
+                                        <property name="label" translatable="yes">Le_gend</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                        <property name="use_underline">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">2</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="CommandWorkingDirectoryButton">
+                                        <property name="label" translatable="yes">B_rowse...</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                        <property name="use_underline">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">2</property>
+                                        <property name="top_attach">3</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkEntry" id="WorkingDirectoryEntry">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">The default working 
directory the command should be started in.</property>
+                                        <property name="invisible_char">●</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">3</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkExpander" id="expander22">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="expanded">True</property>
+                                        <child>
+                                          <object class="GtkAlignment" id="alignment22">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                            <property name="yalign">0</property>
+                                            <property name="yscale">0</property>
+                                            <child>
+                                              <object class="GtkLabel" id="CommandExampleLabel">
+                                                <property name="visible">True</property>
+                                                <property name="can_focus">False</property>
+                                                <property name="xalign">0</property>
+                                                <property name="use_markup">True</property>
+                                                <property name="wrap">True</property>
+                                              </object>
+                                            </child>
+                                          </object>
+                                        </child>
+                                        <child type="label">
+                                          <object class="GtkLabel" id="label1">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                            <property name="label" translatable="yes">Example</property>
+                                            <attributes>
+                                              <attribute name="style" value="italic"/>
+                                              <attribute name="scale" value="0.80000000000000004"/>
+                                            </attributes>
+                                          </object>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">2</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
+                            <child type="label">
+                              <object class="GtkLabel" id="label220">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xpad">5</property>
+                                <property name="label" 
translatable="yes">&lt;b&gt;Command&lt;/b&gt;</property>
+                                <property name="use_markup">True</property>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">1</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child type="tab">
+                  <object class="GtkLabel" id="label200">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="tooltip_text" translatable="yes">This tab lets you choose the command to 
be executed, along with its parameters.
+Defining several profiles lets you have several commands, each applying with a different set of 
conditions.</property>
+                    <property name="label" translatable="yes">_Command</property>
+                    <property name="use_underline">True</property>
+                  </object>
+                  <packing>
+                    <property name="position">1</property>
+                    <property name="tab_fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkAlignment" id="alignment300">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="yalign">0</property>
+                    <property name="yscale">0</property>
+                    <property name="left_padding">4</property>
+                    <property name="right_padding">4</property>
+                    <child>
+                      <object class="GtkGrid" id="grid300">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkFrame" id="frame310">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label_xalign">0</property>
+                            <property name="shadow_type">in</property>
+                            <child>
+                              <object class="GtkAlignment" id="alignment310">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="yalign">0</property>
+                                <property name="yscale">0</property>
+                                <property name="top_padding">6</property>
+                                <property name="bottom_padding">6</property>
+                                <property name="left_padding">12</property>
+                                <property name="right_padding">6</property>
+                                <child>
+                                  <object class="GtkGrid" id="grid310">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="column_spacing">3</property>
+                                    <child>
+                                      <object class="GtkLabel" id="ExecutionModeLabel">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkRadioButton" id="ExecutionModeNormal">
+                                        <property name="label" translatable="yes">_Normal</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">False</property>
+                                        <property name="tooltip_text" translatable="yes">The command will be 
started as a standard graphical user interface.</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="xalign">0</property>
+                                        <property name="active">True</property>
+                                        <property name="draw_indicator">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkRadioButton" id="ExecutionModeTerminal">
+                                        <property name="label" translatable="yes">In a _terminal</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">False</property>
+                                        <property name="tooltip_text" translatable="yes">The command will be 
started in the preferred terminal of the graphical environment.</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="xalign">0</property>
+                                        <property name="draw_indicator">True</property>
+                                        <property name="group">ExecutionModeNormal</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkRadioButton" id="ExecutionModeEmbedded">
+                                        <property name="label" translatable="yes">_Embedded</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">False</property>
+                                        <property name="tooltip_text" translatable="yes">This option makes 
use of a special feature of the file manager, which would allow a terminal to be ran inside of it.
+An acceptable fallback is running in the standard terminal.</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="xalign">0</property>
+                                        <property name="draw_indicator">True</property>
+                                        <property name="group">ExecutionModeNormal</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">2</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkRadioButton" id="ExecutionModeDisplayOutput">
+                                        <property name="label" translatable="yes">_Display output</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">False</property>
+                                        <property name="tooltip_text" translatable="yes">The command will be 
run in a terminal.
+The terminal will be closed at the end of the execution; standard error and output streams will be displayed.
+An acceptable fallback is running in the standard terminal.</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="xalign">0</property>
+                                        <property name="draw_indicator">True</property>
+                                        <property name="group">ExecutionModeNormal</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">3</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
+                            <child type="label">
+                              <object class="GtkLabel" id="label310">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xpad">5</property>
+                                <property name="label" translatable="yes">&lt;b&gt;Execution 
mode&lt;/b&gt;</property>
+                                <property name="use_markup">True</property>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">0</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkFrame" id="StartupModeFrame">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="tooltip_text" translatable="yes">Note: this is not yet 
implemented in Nautilus-Actions.
+</property>
+                            <property name="label_xalign">0</property>
+                            <property name="shadow_type">in</property>
+                            <child>
+                              <object class="GtkAlignment" id="alignment320">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="yalign">0</property>
+                                <property name="yscale">0</property>
+                                <property name="top_padding">6</property>
+                                <property name="bottom_padding">6</property>
+                                <property name="left_padding">12</property>
+                                <property name="right_padding">6</property>
+                                <child>
+                                  <object class="GtkGrid" id="grid320">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="column_spacing">3</property>
+                                    <child>
+                                      <object class="GtkCheckButton" id="StartupNotifyButton">
+                                        <property name="label" translatable="yes">_Startup notify</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">False</property>
+                                        <property name="tooltip_text" translatable="yes">When checked, it is 
known that the run command will send a "remove" message to the desktop environment.
+See the Startup Notification Protocol Specification for more details.
+Only relevant when chosen execution mode is Normal.</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="xalign">0</property>
+                                        <property name="draw_indicator">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="ExecutionStartupLabel">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">1</property>
+                                        <property name="label" translatable="yes">Startup Window Manager 
_class :</property>
+                                        <property name="use_underline">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkEntry" id="StartupWMClassEntry">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">When specified, 
this should be the name of a WM class of at least one window of the run command.
+See the Startup Notification Protocol Specification for more details.
+Only relevant when chosen execution mode is Normal.</property>
+                                        <property name="invisible_char">●</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
+                            <child type="label">
+                              <object class="GtkLabel" id="label320">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xpad">5</property>
+                                <property name="label" translatable="yes">&lt;b&gt;Startup 
mode&lt;/b&gt;</property>
+                                <property name="use_markup">True</property>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">1</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkFrame" id="UserFrame">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="tooltip_text" translatable="yes">Note: this is not yet 
implemented in Nautilus-Actions.</property>
+                            <property name="label_xalign">0</property>
+                            <property name="shadow_type">in</property>
+                            <child>
+                              <object class="GtkAlignment" id="alignment330">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="yalign">0</property>
+                                <property name="yscale">0</property>
+                                <property name="top_padding">6</property>
+                                <property name="bottom_padding">6</property>
+                                <property name="left_padding">12</property>
+                                <property name="right_padding">6</property>
+                                <child>
+                                  <object class="GtkGrid" id="grid330">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="column_spacing">3</property>
+                                    <child>
+                                      <object class="GtkLabel" id="ExecuteAsLabel">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">1</property>
+                                        <property name="label" translatable="yes">Execute as _user 
:</property>
+                                        <property name="use_underline">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkEntry" id="ExecuteAsEntry">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">Enter here the user 
the command should be ran as.
+The user may be defined by his numeric UID or his login name.
+Leave the field empty to run the command as the current user.</property>
+                                        <property name="invisible_char">●</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
+                            <child type="label">
+                              <object class="GtkLabel" id="label330">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xpad">5</property>
+                                <property name="label" translatable="yes">&lt;b&gt;Execute as 
user&lt;/b&gt;</property>
+                                <property name="use_markup">True</property>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">2</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+                <child type="tab">
+                  <object class="GtkLabel" id="label300">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="tooltip_text" translatable="yes">This advanced tab lets you precisely 
define how your command will be executed.</property>
+                    <property name="label" translatable="yes">E_xecution</property>
+                    <property name="use_underline">True</property>
+                  </object>
+                  <packing>
+                    <property name="position">2</property>
+                    <property name="tab_fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkAlignment" id="alignment400">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="bottom_padding">4</property>
+                    <property name="left_padding">4</property>
+                    <property name="right_padding">4</property>
+                    <child>
+                      <object class="GtkFrame" id="frame410">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label_xalign">0</property>
+                        <property name="shadow_type">in</property>
+                        <child>
+                          <object class="GtkAlignment" id="alignment410">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="yalign">0</property>
+                            <property name="top_padding">6</property>
+                            <property name="bottom_padding">6</property>
+                            <property name="left_padding">12</property>
+                            <property name="right_padding">6</property>
+                            <child>
+                              <object class="GtkGrid" id="grid410">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <child>
+                                  <object class="GtkLabel" id="label68">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label" translatable="yes">The current item will appear 
if the basename of each element of the selection matches one filter of the 'Must match one of' column, while 
not matching any of the filters of the 'Must not match any of' column.</property>
+                                    <property name="wrap">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">0</property>
+                                    <property name="top_attach">0</property>
+                                    <property name="width">1</property>
+                                    <property name="height">1</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkGrid" id="grid412">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="column_spacing">3</property>
+                                    <child>
+                                      <object class="GtkScrolledWindow" id="scrolledwindow12">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">This list lets you 
determine for which basenames the currently selected item will be displayed in the Nautilus context menu.
+Basenames may use '*' and '?' wildcards.
+Basenames may be negated to specify for which basenames your item must not appear.</property>
+                                        <property name="hexpand">True</property>
+                                        <property name="shadow_type">in</property>
+                                        <child>
+                                          <object class="GtkTreeView" id="BasenamesTreeview">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="hexpand">True</property>
+                                            <property name="vexpand">True</property>
+                                            <property name="enable_search">False</property>
+                                            <property name="show_expanders">False</property>
+                                            <child internal-child="selection">
+                                              <object class="GtkTreeSelection" id="treeview-selection1"/>
+                                            </child>
+                                          </object>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkGrid" id="grid416">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="row_spacing">3</property>
+                                        <child>
+                                          <object class="GtkButton" id="AddBasenameButton">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="receives_default">True</property>
+                                            <property name="tooltip_text" translatable="yes">Click to add a 
new basename filter.</property>
+                                            <child>
+                                              <object class="GtkImage" id="image4">
+                                                <property name="visible">True</property>
+                                                <property name="can_focus">False</property>
+                                                <property name="stock">gtk-add</property>
+                                              </object>
+                                            </child>
+                                          </object>
+                                          <packing>
+                                            <property name="left_attach">0</property>
+                                            <property name="top_attach">0</property>
+                                            <property name="width">1</property>
+                                            <property name="height">1</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkButton" id="RemoveBasenameButton">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="receives_default">True</property>
+                                            <property name="tooltip_text" translatable="yes">Click to remove 
the current basename filter.</property>
+                                            <child>
+                                              <object class="GtkImage" id="image20">
+                                                <property name="visible">True</property>
+                                                <property name="can_focus">False</property>
+                                                <property name="stock">gtk-remove</property>
+                                              </object>
+                                            </child>
+                                          </object>
+                                          <packing>
+                                            <property name="left_attach">0</property>
+                                            <property name="top_attach">1</property>
+                                            <property name="width">1</property>
+                                            <property name="height">1</property>
+                                          </packing>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">0</property>
+                                    <property name="top_attach">1</property>
+                                    <property name="width">1</property>
+                                    <property name="height">1</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="BasenamesMatchcaseButton">
+                                    <property name="label" translatable="yes">Match _case</property>
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">False</property>
+                                    <property name="tooltip_text" translatable="yes">Click to define the 
above basename filters as case sensitive.</property>
+                                    <property name="use_underline">True</property>
+                                    <property name="xalign">0</property>
+                                    <property name="active">True</property>
+                                    <property name="draw_indicator">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">0</property>
+                                    <property name="top_attach">2</property>
+                                    <property name="width">1</property>
+                                    <property name="height">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                        <child type="label">
+                          <object class="GtkLabel" id="label410">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="xpad">5</property>
+                            <property name="label" translatable="yes">&lt;b&gt;Basenames 
conditions&lt;/b&gt;</property>
+                            <property name="use_markup">True</property>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">3</property>
+                  </packing>
+                </child>
+                <child type="tab">
+                  <object class="GtkLabel" id="label400">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="tooltip_text" translatable="yes">This tab lets you determine for which 
basenames the currently selected item will be displayed in the Nautilus context menu.
+Basenames may be negated to specify for which basenames your item must not appear.</property>
+                    <property name="label" translatable="yes">_Basenames</property>
+                    <property name="use_underline">True</property>
+                  </object>
+                  <packing>
+                    <property name="position">3</property>
+                    <property name="tab_fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkAlignment" id="alignment500">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="bottom_padding">4</property>
+                    <property name="left_padding">4</property>
+                    <property name="right_padding">4</property>
+                    <child>
+                      <object class="GtkFrame" id="frame510">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label_xalign">0</property>
+                        <property name="shadow_type">in</property>
+                        <child>
+                          <object class="GtkAlignment" id="alignment510">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="yalign">0</property>
+                            <property name="top_padding">6</property>
+                            <property name="bottom_padding">6</property>
+                            <property name="left_padding">12</property>
+                            <property name="right_padding">6</property>
+                            <child>
+                              <object class="GtkGrid" id="grid510">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <child>
+                                  <object class="GtkLabel" id="label67">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label" translatable="yes">The current item will appear 
if the mimetype of each element of the selection matches one filter of the 'Must match one of' column, while 
not matching any of the filters of the 'Must not match any of' column.</property>
+                                    <property name="wrap">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">0</property>
+                                    <property name="top_attach">0</property>
+                                    <property name="width">1</property>
+                                    <property name="height">1</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkGrid" id="grid515">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="column_spacing">3</property>
+                                    <child>
+                                      <object class="GtkScrolledWindow" id="scrolledwindow8">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">This list lets you 
determine for which mimetypes the currently selected item will be displayed in the Nautilus context menu.
+Mimetypes may be specified as '*', '*/*', 'group/*' or 'group/subgroup'.
+Mimetypes may be negated to specify for which type of objects your item must not appear.</property>
+                                        <property name="shadow_type">in</property>
+                                        <child>
+                                          <object class="GtkTreeView" id="MimetypesTreeview">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="hexpand">True</property>
+                                            <property name="vexpand">True</property>
+                                            <child internal-child="selection">
+                                              <object class="GtkTreeSelection" id="treeview-selection2"/>
+                                            </child>
+                                          </object>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkGrid" id="grid516">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="row_spacing">3</property>
+                                        <child>
+                                          <object class="GtkButton" id="AddMimetypeButton">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="receives_default">True</property>
+                                            <property name="tooltip_text" translatable="yes">Click to add a 
new mimetype filter.</property>
+                                            <child>
+                                              <object class="GtkImage" id="image14">
+                                                <property name="visible">True</property>
+                                                <property name="can_focus">False</property>
+                                                <property name="stock">gtk-add</property>
+                                              </object>
+                                            </child>
+                                          </object>
+                                          <packing>
+                                            <property name="left_attach">0</property>
+                                            <property name="top_attach">0</property>
+                                            <property name="width">1</property>
+                                            <property name="height">1</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkButton" id="RemoveMimetypeButton">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="receives_default">True</property>
+                                            <property name="tooltip_text" translatable="yes">Click to remove 
the current mimetype filter.</property>
+                                            <child>
+                                              <object class="GtkImage" id="image15">
+                                                <property name="visible">True</property>
+                                                <property name="can_focus">False</property>
+                                                <property name="stock">gtk-remove</property>
+                                              </object>
+                                            </child>
+                                          </object>
+                                          <packing>
+                                            <property name="left_attach">0</property>
+                                            <property name="top_attach">1</property>
+                                            <property name="width">1</property>
+                                            <property name="height">1</property>
+                                          </packing>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">0</property>
+                                    <property name="top_attach">1</property>
+                                    <property name="width">1</property>
+                                    <property name="height">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                        <child type="label">
+                          <object class="GtkLabel" id="label510">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="xpad">5</property>
+                            <property name="label" translatable="yes">&lt;b&gt;Mimetypes 
conditions&lt;/b&gt;</property>
+                            <property name="use_markup">True</property>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">4</property>
+                  </packing>
+                </child>
+                <child type="tab">
+                  <object class="GtkLabel" id="label500">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="tooltip_text" translatable="yes">This tab lets you determine for which 
mimetypes the currently selected item will be displayed in the Nautilus context menu.
+Mimetypes may be specified as '*', '/*', 'group/*' or 'group/subgroup'.
+Mimetypes may be negated to specify for which type of objects your item must not appear.</property>
+                    <property name="label" translatable="yes">_Mimetypes</property>
+                    <property name="use_underline">True</property>
+                  </object>
+                  <packing>
+                    <property name="position">4</property>
+                    <property name="tab_fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkAlignment" id="alignment600">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="bottom_padding">4</property>
+                    <property name="left_padding">4</property>
+                    <property name="right_padding">4</property>
+                    <child>
+                      <object class="GtkFrame" id="frame610">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label_xalign">0</property>
+                        <property name="shadow_type">in</property>
+                        <child>
+                          <object class="GtkAlignment" id="alignment610">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="yalign">0</property>
+                            <property name="top_padding">6</property>
+                            <property name="bottom_padding">6</property>
+                            <property name="left_padding">12</property>
+                            <property name="right_padding">6</property>
+                            <child>
+                              <object class="GtkGrid" id="grid610">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="column_spacing">3</property>
+                                <child>
+                                  <object class="GtkLabel" id="label72">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label" translatable="yes">The current item will appear 
if the location of each element of the selection is one or inside one of the paths of the 'Must match one of' 
column, while not being one or inside one of the 'Must not match any of' column.</property>
+                                    <property name="wrap">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">0</property>
+                                    <property name="top_attach">0</property>
+                                    <property name="width">2</property>
+                                    <property name="height">1</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkScrolledWindow" id="scrolledwindow2">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="tooltip_text" translatable="yes">This list lets you 
determine where (in which folders) the currently selected files must be found in order for the item to be 
displayed in the Nautilus context menu.
+Folders may use '*' or '?' wildcards.
+Folder filters may be negated to specify for which folders your item must not appear.</property>
+                                    <property name="shadow_type">in</property>
+                                    <child>
+                                      <object class="GtkTreeView" id="FoldersTreeview">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="hexpand">True</property>
+                                        <property name="vexpand">True</property>
+                                        <child internal-child="selection">
+                                          <object class="GtkTreeSelection" id="treeview-selection3"/>
+                                        </child>
+                                      </object>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">0</property>
+                                    <property name="top_attach">1</property>
+                                    <property name="width">1</property>
+                                    <property name="height">1</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkGrid" id="grid620">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="row_spacing">3</property>
+                                    <child>
+                                      <object class="GtkButton" id="AddFolderButton">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                        <property name="tooltip_text" translatable="yes">Click to add a new 
folder filter.</property>
+                                        <child>
+                                          <object class="GtkImage" id="image10">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                            <property name="stock">gtk-add</property>
+                                          </object>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="FolderBrowseButton">
+                                        <property name="label" translatable="yes">_Browse...</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                        <property name="tooltip_text" translatable="yes">Click to browse the 
filesystem in order to select a new folder filter.</property>
+                                        <property name="use_underline">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="RemoveFolderButton">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                        <property name="tooltip_text" translatable="yes">Click to remove the 
current folder filter.</property>
+                                        <child>
+                                          <object class="GtkImage" id="image11">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                            <property name="stock">gtk-remove</property>
+                                          </object>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">2</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">1</property>
+                                    <property name="top_attach">1</property>
+                                    <property name="width">1</property>
+                                    <property name="height">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                        <child type="label">
+                          <object class="GtkLabel" id="label610">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="xpad">5</property>
+                            <property name="label" translatable="yes">&lt;b&gt;Folders 
conditions&lt;/b&gt;</property>
+                            <property name="use_markup">True</property>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">5</property>
+                  </packing>
+                </child>
+                <child type="tab">
+                  <object class="GtkLabel" id="label600">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="tooltip_text" translatable="yes">This tab lets you determine where (in 
which folders) the currently selected files must be found in order for the item to be displayed in the 
Nautilus context menu.
+Folder filters may be negated to specify for which folders your item must not appear.</property>
+                    <property name="label" translatable="yes">_Folders</property>
+                    <property name="use_underline">True</property>
+                  </object>
+                  <packing>
+                    <property name="position">5</property>
+                    <property name="tab_fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkAlignment" id="alignment700">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="bottom_padding">4</property>
+                    <property name="left_padding">4</property>
+                    <property name="right_padding">4</property>
+                    <child>
+                      <object class="GtkFrame" id="frame710">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label_xalign">0</property>
+                        <property name="shadow_type">in</property>
+                        <child>
+                          <object class="GtkAlignment" id="alignment710">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="yalign">0</property>
+                            <property name="top_padding">6</property>
+                            <property name="bottom_padding">6</property>
+                            <property name="left_padding">12</property>
+                            <property name="right_padding">6</property>
+                            <child>
+                              <object class="GtkGrid" id="grid710">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="column_spacing">3</property>
+                                <child>
+                                  <object class="GtkLabel" id="label74">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label" translatable="yes">The current item will appear 
if the scheme of each element of the selection matches one of the 'Must match one of' column, while not 
matching any of the 'Must not match any of' column.</property>
+                                    <property name="wrap">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">0</property>
+                                    <property name="top_attach">0</property>
+                                    <property name="width">2</property>
+                                    <property name="height">1</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkScrolledWindow" id="scrolledwindow4">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="tooltip_text" translatable="yes">This list lets you 
determine which schemes the currently selected files must satisfy in order for the item to be displayed in 
the Nautilus context menu.
+Filters may be negated to specify for which schemes your item must not appear.</property>
+                                    <property name="shadow_type">in</property>
+                                    <child>
+                                      <object class="GtkTreeView" id="SchemesTreeView">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="hexpand">True</property>
+                                        <property name="vexpand">True</property>
+                                        <property name="headers_visible">False</property>
+                                        <property name="rules_hint">True</property>
+                                        <property name="show_expanders">False</property>
+                                        <child internal-child="selection">
+                                          <object class="GtkTreeSelection" id="treeview-selection4"/>
+                                        </child>
+                                      </object>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">0</property>
+                                    <property name="top_attach">1</property>
+                                    <property name="width">1</property>
+                                    <property name="height">1</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkGrid" id="grid720">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="row_spacing">3</property>
+                                    <child>
+                                      <object class="GtkButton" id="AddSchemeButton">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                        <property name="tooltip_text" translatable="yes">Click to add a new 
scheme filter.</property>
+                                        <child>
+                                          <object class="GtkImage" id="image16">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                            <property name="stock">gtk-add</property>
+                                          </object>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="AddFromDefaultButton">
+                                        <property name="label" translatable="yes">De_faults...</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                        <property name="tooltip_text" translatable="yes">Click to select a 
new scheme filter among default schemes.</property>
+                                        <property name="use_underline">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="RemoveSchemeButton">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                        <property name="tooltip_text" translatable="yes">Click to remove the 
current scheme filter.</property>
+                                        <child>
+                                          <object class="GtkImage" id="image17">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                            <property name="stock">gtk-remove</property>
+                                          </object>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">2</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">1</property>
+                                    <property name="top_attach">1</property>
+                                    <property name="width">1</property>
+                                    <property name="height">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                        <child type="label">
+                          <object class="GtkLabel" id="label710">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="xpad">5</property>
+                            <property name="label" translatable="yes">&lt;b&gt;Schemes 
conditions&lt;/b&gt;</property>
+                            <property name="use_markup">True</property>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">6</property>
+                  </packing>
+                </child>
+                <child type="tab">
+                  <object class="GtkLabel" id="label700">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="tooltip_text" translatable="yes">This tab lets you determine which 
schemes the currently selected files must satisfy in order for the item to be displayed in the Nautilus 
context menu.
+Filters may be negated to specify for which schemes your item must not appear.</property>
+                    <property name="label" translatable="yes">_Schemes</property>
+                    <property name="use_underline">True</property>
+                  </object>
+                  <packing>
+                    <property name="position">6</property>
+                    <property name="tab_fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkAlignment" id="alignment800">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="bottom_padding">4</property>
+                    <property name="left_padding">4</property>
+                    <property name="right_padding">4</property>
+                    <child>
+                      <object class="GtkFrame" id="frame810">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label_xalign">0</property>
+                        <property name="shadow_type">in</property>
+                        <child>
+                          <object class="GtkAlignment" id="alignment810">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="yalign">0</property>
+                            <property name="top_padding">6</property>
+                            <property name="bottom_padding">6</property>
+                            <property name="left_padding">12</property>
+                            <property name="right_padding">6</property>
+                            <child>
+                              <object class="GtkGrid" id="grid810">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="column_spacing">3</property>
+                                <child>
+                                  <object class="GtkLabel" id="label77">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label" translatable="yes">The current item will appear 
if each element of the selection matches all capabilities of the 'Must match all of' column, while not 
matching any capability of the 'Must not match any of' column.</property>
+                                    <property name="wrap">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">0</property>
+                                    <property name="top_attach">0</property>
+                                    <property name="width">2</property>
+                                    <property name="height">1</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkScrolledWindow" id="scrolledwindow10">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="tooltip_text" translatable="yes">This list lets you 
determine which capabilities the currently selected files must satisfy in order for the item to be displayed 
in the Nautilus context menu.
+Capabilities may be negated to specify for which capabilities your item must not appear.</property>
+                                    <property name="shadow_type">in</property>
+                                    <child>
+                                      <object class="GtkTreeView" id="CapabilitiesTreeView">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="hexpand">True</property>
+                                        <property name="vexpand">True</property>
+                                        <property name="headers_visible">False</property>
+                                        <property name="rules_hint">True</property>
+                                        <property name="show_expanders">False</property>
+                                        <child internal-child="selection">
+                                          <object class="GtkTreeSelection" id="treeview-selection5"/>
+                                        </child>
+                                      </object>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">0</property>
+                                    <property name="top_attach">1</property>
+                                    <property name="width">1</property>
+                                    <property name="height">1</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkGrid" id="grid820">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="column_spacing">3</property>
+                                    <child>
+                                      <object class="GtkButton" id="AddCapabilityButton">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                        <property name="tooltip_text" translatable="yes">Click to add a new 
capability filter.</property>
+                                        <child>
+                                          <object class="GtkImage" id="image5">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                            <property name="stock">gtk-add</property>
+                                          </object>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="RemoveCapabilityButton">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                        <property name="tooltip_text" translatable="yes">Click to remove the 
current capability.</property>
+                                        <child>
+                                          <object class="GtkImage" id="image6">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                            <property name="stock">gtk-remove</property>
+                                          </object>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">1</property>
+                                    <property name="top_attach">1</property>
+                                    <property name="width">1</property>
+                                    <property name="height">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                        <child type="label">
+                          <object class="GtkLabel" id="label810">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="xpad">5</property>
+                            <property name="label" translatable="yes">&lt;b&gt;Capabilities 
conditions&lt;/b&gt;</property>
+                            <property name="use_markup">True</property>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">7</property>
+                  </packing>
+                </child>
+                <child type="tab">
+                  <object class="GtkLabel" id="label800">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="tooltip_text" translatable="yes">This tab lets you determine which 
capabilities the currently selected files must satisfy in order for the item to be displayed in the Nautilus 
context menu.
+Filters may be negated to specify for which capabilities your item must not appear.</property>
+                    <property name="label" translatable="yes">Ca_pabilities</property>
+                    <property name="use_underline">True</property>
+                  </object>
+                  <packing>
+                    <property name="position">7</property>
+                    <property name="tab_fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkAlignment" id="alignment900">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="yalign">0</property>
+                    <property name="bottom_padding">4</property>
+                    <property name="left_padding">4</property>
+                    <property name="right_padding">4</property>
+                    <child>
+                      <object class="GtkGrid" id="grid900">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkFrame" id="frame910">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label_xalign">0</property>
+                            <property name="shadow_type">in</property>
+                            <child>
+                              <object class="GtkAlignment" id="alignment910">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="yalign">0</property>
+                                <property name="yscale">0</property>
+                                <property name="top_padding">6</property>
+                                <property name="bottom_padding">6</property>
+                                <property name="left_padding">12</property>
+                                <property name="right_padding">6</property>
+                                <child>
+                                  <object class="GtkGrid" id="grid910">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="column_spacing">3</property>
+                                    <child>
+                                      <object class="GtkLabel" id="label17">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">1</property>
+                                        <property name="label" translatable="yes">_Count :</property>
+                                        <property name="use_underline">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkComboBox" id="SelectionCountSigneCombobox">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkEntry" id="SelectionCountNumberEntry">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="invisible_char">●</property>
+                                        <property name="width_chars">5</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">2</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="label87">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">3</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
+                            <child type="label">
+                              <object class="GtkLabel" id="label910">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xpad">5</property>
+                                <property name="label" translatable="yes">&lt;b&gt;Appears if selection 
contains&lt;/b&gt;</property>
+                                <property name="use_markup">True</property>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">0</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkFrame" id="frame920">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label_xalign">0</property>
+                            <property name="shadow_type">in</property>
+                            <child>
+                              <object class="GtkAlignment" id="alignment920">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="top_padding">6</property>
+                                <property name="bottom_padding">6</property>
+                                <property name="left_padding">12</property>
+                                <property name="right_padding">6</property>
+                                <child>
+                                  <object class="GtkGrid" id="grid920">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="row_spacing">3</property>
+                                    <property name="column_spacing">3</property>
+                                    <child>
+                                      <object class="GtkLabel" id="label48">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">Item may appear depending 
of the desktop environment.</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">2</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkScrolledWindow" id="scrolledwindow5">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="shadow_type">in</property>
+                                        <child>
+                                          <object class="GtkTreeView" id="EnvironmentsDesktopTreeView">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="hexpand">True</property>
+                                            <property name="vexpand">True</property>
+                                            <property name="headers_visible">False</property>
+                                            <property name="rules_hint">True</property>
+                                            <property name="enable_search">False</property>
+                                            <property name="show_expanders">False</property>
+                                            <child internal-child="selection">
+                                              <object class="GtkTreeSelection" id="treeview-selection6"/>
+                                            </child>
+                                          </object>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkGrid" id="grid5">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <child>
+                                          <object class="GtkRadioButton" id="ShowAlwaysButton">
+                                            <property name="label" translatable="yes">_Always 
appears</property>
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="receives_default">False</property>
+                                            <property name="use_underline">True</property>
+                                            <property name="xalign">0</property>
+                                            <property name="active">True</property>
+                                            <property name="draw_indicator">True</property>
+                                          </object>
+                                          <packing>
+                                            <property name="left_attach">0</property>
+                                            <property name="top_attach">0</property>
+                                            <property name="width">1</property>
+                                            <property name="height">1</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkRadioButton" id="OnlyShowButton">
+                                            <property name="label" translatable="yes">_Only appears in 
selected environments</property>
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="receives_default">False</property>
+                                            <property name="use_underline">True</property>
+                                            <property name="xalign">0</property>
+                                            <property name="draw_indicator">True</property>
+                                            <property name="group">ShowAlwaysButton</property>
+                                          </object>
+                                          <packing>
+                                            <property name="left_attach">0</property>
+                                            <property name="top_attach">1</property>
+                                            <property name="width">1</property>
+                                            <property name="height">1</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkRadioButton" id="DoNotShowButton">
+                                            <property name="label" translatable="yes">_Never appears in 
selected environments</property>
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="receives_default">False</property>
+                                            <property name="use_underline">True</property>
+                                            <property name="xalign">0</property>
+                                            <property name="draw_indicator">True</property>
+                                            <property name="group">ShowAlwaysButton</property>
+                                          </object>
+                                          <packing>
+                                            <property name="left_attach">0</property>
+                                            <property name="top_attach">2</property>
+                                            <property name="width">1</property>
+                                            <property name="height">1</property>
+                                          </packing>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
+                            <child type="label">
+                              <object class="GtkLabel" id="label920">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xpad">5</property>
+                                <property name="label" translatable="yes">&lt;b&gt;Desktop 
environment&lt;/b&gt;</property>
+                                <property name="use_markup">True</property>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">1</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkFrame" id="frame930">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label_xalign">0</property>
+                            <property name="shadow_type">in</property>
+                            <child>
+                              <object class="GtkAlignment" id="alignment930">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="yalign">0</property>
+                                <property name="yscale">0</property>
+                                <property name="top_padding">6</property>
+                                <property name="bottom_padding">6</property>
+                                <property name="left_padding">12</property>
+                                <property name="right_padding">6</property>
+                                <child>
+                                  <object class="GtkGrid" id="grid930">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="column_spacing">3</property>
+                                    <child>
+                                      <object class="GtkLabel" id="label55">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">1</property>
+                                        <property name="label" translatable="yes">Appears if the file is 
e_xecutable :</property>
+                                        <property name="use_underline">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="label56">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">1</property>
+                                        <property name="label" translatable="yes">Appears if the name is 
_registered on D-Bus :</property>
+                                        <property name="use_underline">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="label57">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">1</property>
+                                        <property name="label" translatable="yes">Appears if the command 
outputs "_true" :</property>
+                                        <property name="use_underline">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">2</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="label6">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">1</property>
+                                        <property name="label" translatable="yes">Appears if the _binary is 
running :</property>
+                                        <property name="use_underline">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">3</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkEntry" id="TryExecEntry">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">This is an advanced 
condition based on the presence of an executable file on the file system.
+This may be used for example to test for a prerequisite package.</property>
+                                        <property name="invisible_char">●</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkEntry" id="ShowIfRegisteredEntry">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">This is an advanced 
condition based on the presence of a particular service on the D-Bus system.
+This may be used for example for testing that a prerequisite service is currently available.</property>
+                                        <property name="invisible_char">●</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkEntry" id="ShowIfTrueEntry">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">This is an advanced 
condition based on a runtime result.
+Enter here a command which is able to display the exact "true" string on its standard output.
+This may be used for example for testing a complex condition.</property>
+                                        <property name="invisible_char">●</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">2</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkEntry" id="ShowIfRunningEntry">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">This is an advanced 
condition based on the presence of a running binary.
+Note that only the basename of the binary is checked, not its dirname nor its parameters.
+This may be used for example for testing the presence of a prerequisite daemon.</property>
+                                        <property name="invisible_char">●</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">3</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="TryExecButton">
+                                        <property name="label" translatable="yes">Bro_wse...</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                        <property name="use_underline">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">2</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="ShowIfRunningButton">
+                                        <property name="label" translatable="yes">Brow_se...</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                        <property name="use_underline">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">2</property>
+                                        <property name="top_attach">3</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
+                            <child type="label">
+                              <object class="GtkLabel" id="label930">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xpad">5</property>
+                                <property name="label" translatable="yes">&lt;b&gt;Execution 
environment&lt;/b&gt;</property>
+                                <property name="use_markup">True</property>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">2</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">8</property>
+                  </packing>
+                </child>
+                <child type="tab">
+                  <object class="GtkLabel" id="label900">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="tooltip_text" translatable="yes">This tab lets you determine some 
advanced conditions the currently selected files must satisfy in order for the item to be displayed in the 
file manager context menu.</property>
+                    <property name="label" translatable="yes">_Environment</property>
+                    <property name="use_underline">True</property>
+                  </object>
+                  <packing>
+                    <property name="position">8</property>
+                    <property name="tab_fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkAlignment" id="alignmentA00">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="yalign">0</property>
+                    <property name="yscale">0</property>
+                    <property name="left_padding">4</property>
+                    <property name="right_padding">4</property>
+                    <child>
+                      <object class="GtkGrid" id="gridA00">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkFrame" id="frameA10">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label_xalign">0</property>
+                            <property name="shadow_type">in</property>
+                            <child>
+                              <object class="GtkAlignment" id="alignmentA10">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="yalign">0</property>
+                                <property name="top_padding">6</property>
+                                <property name="bottom_padding">6</property>
+                                <property name="left_padding">12</property>
+                                <property name="right_padding">6</property>
+                                <child>
+                                  <object class="GtkGrid" id="gridA10">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="row_spacing">3</property>
+                                    <property name="column_spacing">3</property>
+                                    <child>
+                                      <object class="GtkCheckButton" id="ActionEnabledButton">
+                                        <property name="label" translatable="yes">E_nabled</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">False</property>
+                                        <property name="tooltip_text" translatable="yes">Check the box to 
enable this item.
+If unchecked, then the item will never appear in the file manager context menus or toolbar.</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="xalign">0</property>
+                                        <property name="draw_indicator">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">2</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="PropertiesDescriptionLabel">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">1</property>
+                                        <property name="yalign">0</property>
+                                        <property name="label" translatable="yes">_Description :</property>
+                                        <property name="use_underline">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkScrolledWindow" id="scrolledwindow3">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">Enter here a free 
text which may be used (e.g. in a Web service or in a search tool) to describe your item.</property>
+                                        <property name="shadow_type">in</property>
+                                        <child>
+                                          <object class="GtkTextView" id="ActionDescriptionText">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="hexpand">True</property>
+                                            <property name="vexpand">True</property>
+                                          </object>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="width">2</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="PropertiesShortcutLabel">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">1</property>
+                                        <property name="label" translatable="yes">Suggested _shortcut 
:</property>
+                                        <property name="use_underline">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">2</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="SuggestedShortcutButton">
+                                        <property name="label" translatable="yes">None</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">True</property>
+                                        <property name="tooltip_text" translatable="yes">Enter here the 
keyboard touch combination you suggest as a shortcut to your action.
+Note: this is not yet implemented in Nautilus-Actions.</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">2</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
+                            <child type="label">
+                              <object class="GtkLabel" id="ActionPropertiesTitle">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xpad">5</property>
+                                <property name="label" translatable="yes">&lt;b&gt;Action editable 
properties&lt;/b&gt;</property>
+                                <property name="use_markup">True</property>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">0</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkFrame" id="frameA20">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label_xalign">0</property>
+                            <property name="shadow_type">in</property>
+                            <child>
+                              <object class="GtkAlignment" id="alignmentA20">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="yalign">0</property>
+                                <property name="yscale">0</property>
+                                <property name="top_padding">6</property>
+                                <property name="bottom_padding">6</property>
+                                <property name="left_padding">12</property>
+                                <property name="right_padding">6</property>
+                                <child>
+                                  <object class="GtkGrid" id="gridA20">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="row_spacing">3</property>
+                                    <property name="column_spacing">3</property>
+                                    <child>
+                                      <object class="GtkCheckButton" id="ActionReadonlyButton">
+                                        <property name="label" translatable="yes">Read-only item</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">False</property>
+                                        <property name="tooltip_text" translatable="yes">This box is checked 
if the item cannot be edited.
+There may be multiple reasons for why an item cannot be edited. See your User's Manual.</property>
+                                        <property name="focus_on_click">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="draw_indicator">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="PropertiesIdLabel">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">1</property>
+                                        <property name="label" translatable="yes">Id. :</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="PropertiesProviderLabel">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">1</property>
+                                        <property name="label" translatable="yes">I/O provider :</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">2</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="ActionItemID">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="ActionItemProvider">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">2</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
+                            <child type="label">
+                              <object class="GtkLabel" id="labelA20">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xpad">5</property>
+                                <property name="label" translatable="yes">&lt;b&gt;Read-only 
properties&lt;/b&gt;</property>
+                                <property name="use_markup">True</property>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">1</property>
+                            <property name="width">1</property>
+                            <property name="height">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">9</property>
+                  </packing>
+                </child>
+                <child type="tab">
+                  <object class="GtkLabel" id="labelA00">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="tooltip_text" translatable="yes">This tab lets you edit some 
miscellaneous properties, and access some non-modifiable information.</property>
+                    <property name="label" translatable="yes">P_roperties</property>
+                    <property name="use_underline">True</property>
+                  </object>
+                  <packing>
+                    <property name="position">9</property>
+                    <property name="tab_fill">False</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="resize">True</property>
+                <property name="shrink">True</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">1</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkAlignment" id="main-toolbar">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <placeholder/>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkAlignment" id="main-statusbar">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <placeholder/>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">2</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+  <object class="GtkSizeGroup" id="ActionLabelSizeGroup">
+    <widgets>
+      <widget name="ActionMenuLabelLabel"/>
+      <widget name="ActionToolbarLabelLabel"/>
+      <widget name="ActionTooltipLabel"/>
+      <widget name="ActionIconLabel"/>
+    </widgets>
+  </object>
+  <object class="GtkSizeGroup" id="CommandButtonSizeGroup">
+    <widgets>
+      <widget name="CommandLegendButton"/>
+      <widget name="CommandPathButton"/>
+    </widgets>
+  </object>
+  <object class="GtkSizeGroup" id="CommandLabelSizeGroup">
+    <widgets>
+      <widget name="ProfileLabelLabel"/>
+      <widget name="CommandPathLabel"/>
+      <widget name="CommandParametersLabel"/>
+      <widget name="CommandWDLabel"/>
+    </widgets>
+  </object>
+  <object class="GtkSizeGroup" id="ExecutionModeSizeGroup">
+    <widgets>
+      <widget name="ExecutionModeLabel"/>
+      <widget name="ExecutionStartupLabel"/>
+      <widget name="ExecuteAsLabel"/>
+    </widgets>
+  </object>
+  <object class="GtkSizeGroup" id="PropertiesLabelSizeGroup">
+    <widgets>
+      <widget name="PropertiesDescriptionLabel"/>
+      <widget name="PropertiesShortcutLabel"/>
+      <widget name="PropertiesIdLabel"/>
+      <widget name="PropertiesProviderLabel"/>
+    </widgets>
+  </object>
+</interface>
diff --git a/src/nact/nact-match-list.c b/src/nact/nact-match-list.c
index 68545ae..ddb99ad 100644
--- a/src/nact/nact-match-list.c
+++ b/src/nact/nact-match-list.c
@@ -34,12 +34,13 @@
 #include <glib/gi18n.h>
 #include <libintl.h>
 
-#include <api/na-object-api.h>
-#include <api/na-core-utils.h>
+#include "api/na-object-api.h"
+#include "api/na-core-utils.h"
 
 #include "base-keysyms.h"
 #include "base-gtk-utils.h"
 #include "nact-main-tab.h"
+#include "nact-main-window.h"
 #include "nact-match-list.h"
 
 /* column ordering
@@ -61,7 +62,7 @@ typedef struct {
  * addressed with the tab name
  */
 typedef struct {
-       BaseWindow      *window;
+       NactMainWindow  *window;
        gchar           *tab_name;
        guint            tab_id;
        GtkTreeView     *listview;
@@ -90,10 +91,9 @@ static ColumnHeaderStruct st_match_headers[] = {
        { 0 }
 };
 
-static void         initialize_pseudo_iface( MatchListData *data );
 static void         create_tree_model( MatchListData *data );
-static void         on_base_initialize_window( BaseWindow *window, MatchListData *data );
-static void         on_main_selection_changed( BaseWindow *window, GList *selected_items, MatchListData 
*data );
+static void         initialize_window( MatchListData *data );
+static void         on_tree_selection_changed( NactTreeView *treeview, GList *selected_items, MatchListData 
*data );
 
 static void         on_add_filter_clicked( GtkButton *button, MatchListData *data );
 static void         on_filter_clicked( GtkTreeViewColumn *treeviewcolumn, MatchListData *data );
@@ -126,7 +126,7 @@ static void         on_instance_finalized( MatchListData *data, BaseWindow *wind
 
 /**
  * nact_match_list_init_with_args:
- * @window: the #BaseWindow window which contains the view.
+ * @window: the #NactMainWindow window which contains the view.
  * @tab_name: a string constant which identifies this page.
  * @tab_id: our id for this page.
  * @listview: the #GtkTreeView widget.
@@ -145,7 +145,7 @@ static void         on_instance_finalized( MatchListData *data, BaseWindow *wind
  * here pointers to GtkTreeView and GtkButton widgets.
  */
 void
-nact_match_list_init_with_args( BaseWindow *window, const gchar *tab_name,
+nact_match_list_init_with_args( NactMainWindow *window, const gchar *tab_name,
                                guint tab_id,
                                GtkWidget *listview,
                                GtkWidget *addbutton,
@@ -161,7 +161,7 @@ nact_match_list_init_with_args( BaseWindow *window, const gchar *tab_name,
        static const gchar *thisfn = "nact_match_list_init_with_args";
        MatchListData *data;
 
-       g_return_if_fail( BASE_IS_WINDOW( window ));
+       g_return_if_fail( window && NACT_IS_MAIN_WINDOW( window ));
 
        g_debug( "%s: window=%p, tab_name=%s", thisfn, ( void * ) window, tab_name );
 
@@ -191,22 +191,10 @@ nact_match_list_init_with_args( BaseWindow *window, const gchar *tab_name,
        data->sort_order = 0;
 
        g_object_set_data( G_OBJECT( window ), tab_name, data );
+       g_object_weak_ref( G_OBJECT( window ), ( GWeakNotify ) on_instance_finalized, data );
 
-       initialize_pseudo_iface( data );
        create_tree_model( data );
-}
-
-static void
-initialize_pseudo_iface( MatchListData *data )
-{
-       base_window_signal_connect_with_data(
-                       data->window,
-                       G_OBJECT( data->window ),
-                       BASE_SIGNAL_INITIALIZE_WINDOW,
-                       G_CALLBACK( on_base_initialize_window ),
-                       data );
-
-       g_object_weak_ref( G_OBJECT( data->window ), ( GWeakNotify ) on_instance_finalized, data );
+       initialize_window( data );
 }
 
 static void
@@ -265,105 +253,52 @@ create_tree_model( MatchListData *data )
  * Connect signals.
  */
 static void
-on_base_initialize_window( BaseWindow *window, MatchListData *data )
+initialize_window( MatchListData *data )
 {
        GtkTreeViewColumn *column;
        GList *renderers;
        GtkTreeModel *model;
+       NactTreeView *treeview;
 
        g_return_if_fail( data != NULL );
 
        column = gtk_tree_view_get_column( data->listview, ITEM_COLUMN );
-       base_window_signal_connect_with_data(
-                       window,
-                       G_OBJECT( column ),
-                       "clicked",
-                       G_CALLBACK( on_filter_clicked ),
-                       data );
+       g_signal_connect( column, "clicked", G_CALLBACK( on_filter_clicked ), data );
 
        renderers = gtk_cell_layout_get_cells( GTK_CELL_LAYOUT( column ));
-       base_window_signal_connect_with_data(
-                       window,
-                       G_OBJECT( renderers->data ),
-                       "edited",
-                       G_CALLBACK( on_filter_edited ),
-                       data );
+       g_signal_connect( renderers->data, "edited", G_CALLBACK( on_filter_edited ), data );
 
        column = gtk_tree_view_get_column( data->listview, MUST_MATCH_COLUMN );
-       base_window_signal_connect_with_data(
-                       window,
-                       G_OBJECT( column ),
-                       "clicked",
-                       G_CALLBACK( on_must_match_clicked ),
-                       data );
+       g_signal_connect( column, "clicked", G_CALLBACK( on_must_match_clicked ), data );
 
        renderers = gtk_cell_layout_get_cells( GTK_CELL_LAYOUT( column ));
-       base_window_signal_connect_with_data(
-                       window,
-                       G_OBJECT( renderers->data ),
-                       "toggled",
-                       G_CALLBACK( on_must_match_toggled ),
-                       data );
+       g_signal_connect( renderers->data, "toggled", G_CALLBACK( on_must_match_toggled ), data );
 
        column = gtk_tree_view_get_column( data->listview, MUST_NOT_MATCH_COLUMN );
-       base_window_signal_connect_with_data(
-                       window,
-                       G_OBJECT( column ),
-                       "clicked",
-                       G_CALLBACK( on_must_not_match_clicked ),
-                       data );
+       g_signal_connect( column, "clicked", G_CALLBACK( on_must_not_match_clicked ), data );
 
        renderers = gtk_cell_layout_get_cells( GTK_CELL_LAYOUT( column ));
-       base_window_signal_connect_with_data(
-                       window,
-                       G_OBJECT( renderers->data ),
-                       "toggled",
-                       G_CALLBACK( on_must_not_match_toggled ),
-                       data );
+       g_signal_connect( renderers->data, "toggled", G_CALLBACK( on_must_not_match_toggled ), data );
 
        if( data->pon_add ){
-               base_window_signal_connect(
-                               window,
-                               G_OBJECT( data->addbutton ),
-                               "clicked",
-                               G_CALLBACK( data->pon_add ));
+               g_signal_connect( data->addbutton, "clicked", G_CALLBACK( data->pon_add ), data );
        } else {
-               base_window_signal_connect_with_data(
-                               window,
-                               G_OBJECT( data->addbutton ),
-                               "clicked",
-                               G_CALLBACK( on_add_filter_clicked ),
-                               data );
+               g_signal_connect( data->addbutton, "clicked", G_CALLBACK( on_add_filter_clicked ), data );
        }
 
        if( data->pon_remove ){
-               base_window_signal_connect(
-                               window,
-                               G_OBJECT( data->removebutton ),
-                               "clicked",
-                               G_CALLBACK( data->pon_remove ));
+               g_signal_connect( data->removebutton, "clicked", G_CALLBACK( data->pon_remove ), data );
        } else {
-               base_window_signal_connect_with_data(
-                               window,
-                               G_OBJECT( data->removebutton ),
-                               "clicked",
-                               G_CALLBACK( on_remove_filter_clicked ),
-                               data );
+               g_signal_connect( data->removebutton, "clicked", G_CALLBACK( on_remove_filter_clicked ), data 
);
        }
 
-       base_window_signal_connect_with_data(
-                       window,
-                       G_OBJECT( gtk_tree_view_get_selection( data->listview )),
-                       "changed",
-                       G_CALLBACK( on_selection_changed ),
-                       data );
+       g_signal_connect(
+                       gtk_tree_view_get_selection( data->listview ),
+                       "changed", G_CALLBACK( on_selection_changed ), data );
 
-       base_window_signal_connect_with_data(
-                       window,
-                       G_OBJECT( data->listview ),
-                       "key-press-event",
-                       G_CALLBACK( on_key_pressed_event ),
-                       data );
+       g_signal_connect(
+                       data->listview,
+                       "key-press-event", G_CALLBACK( on_key_pressed_event ), data );
 
        model = gtk_tree_view_get_model( data->listview );
        gtk_tree_sortable_set_sort_column_id( GTK_TREE_SORTABLE( model ), ITEM_COLUMN, GTK_SORT_ASCENDING );
@@ -373,12 +308,8 @@ on_base_initialize_window( BaseWindow *window, MatchListData *data )
        column = gtk_tree_view_get_column( data->listview, ITEM_COLUMN );
        sort_on_column( column, data, ITEM_COLUMN );
 
-       base_window_signal_connect_with_data(
-                       window,
-                       G_OBJECT( window ),
-                       MAIN_SIGNAL_SELECTION_CHANGED,
-                       G_CALLBACK( on_main_selection_changed ),
-                       data );
+       treeview = nact_main_window_get_items_view( data->window );
+       g_signal_connect( treeview, TREE_SIGNAL_SELECTION_CHANGED, G_CALLBACK( on_tree_selection_changed ), 
data );
 }
 
 /*
@@ -393,9 +324,9 @@ on_base_initialize_window( BaseWindow *window, MatchListData *data )
  * - update the object with a summary of the listbox contents
  */
 static void
-on_main_selection_changed( BaseWindow *window, GList *selected_items, MatchListData *data )
+on_tree_selection_changed( NactTreeView *treeview, GList *selected_items, MatchListData *data )
 {
-       static const gchar *thisfn = "nact_match_list_on_main_selection_changed";
+       static const gchar *thisfn = "nact_match_list_on_tree_selection_changed";
        NAIContext *context;
        gboolean enable_tab;
        GSList *filters;
@@ -404,15 +335,15 @@ on_main_selection_changed( BaseWindow *window, GList *selected_items, MatchListD
        GtkTreeViewColumn *column;
        GtkTreePath *path;
 
-       g_return_if_fail( BASE_IS_WINDOW( window ));
+       g_return_if_fail( treeview && NACT_IS_TREE_VIEW( treeview ));
        g_return_if_fail( data != NULL );
 
-       g_object_get( G_OBJECT( window ),
+       g_object_get( G_OBJECT( data->window ),
                        MAIN_PROP_CONTEXT, &context, MAIN_PROP_EDITABLE, &data->editable_item,
                        NULL );
 
        enable_tab = ( context != NULL );
-       nact_main_tab_enable_page( NACT_MAIN_WINDOW( data->window ), data->tab_id, enable_tab );
+       nact_main_tab_enable_page( data->window, data->tab_id, enable_tab );
 
        data->on_selection_change = TRUE;
 
@@ -448,7 +379,7 @@ on_main_selection_changed( BaseWindow *window, GList *selected_items, MatchListD
 
 /**
  * nact_match_list_insert_row:
- * @window: the #BaseWindow window which contains the view.
+ * @window: the #NactMainWindow window which contains the view.
  * @tab_name: a string constant which identifies this page.
  * @filter: the item to add.
  * @match: whether the 'must match' column is checked.
@@ -457,7 +388,7 @@ on_main_selection_changed( BaseWindow *window, GList *selected_items, MatchListD
  * Add a new row to the list view.
  */
 void
-nact_match_list_insert_row( BaseWindow *window, const gchar *tab_name, const gchar *filter, gboolean match, 
gboolean not_match )
+nact_match_list_insert_row( NactMainWindow *window, const gchar *tab_name, const gchar *filter, gboolean 
match, gboolean not_match )
 {
        MatchListData *data;
 
@@ -469,14 +400,14 @@ nact_match_list_insert_row( BaseWindow *window, const gchar *tab_name, const gch
 
 /**
  * nact_match_list_get_rows:
- * @window: the #BaseWindow window which contains the view.
+ * @window: the #NactMainWindow window which contains the view.
  * @tab_name: a string constant which identifies this page.
  *
  * Returns the list of rows as a newly allocated string list which should
  * be na_core_utils_slist_free() by the caller.
  */
 GSList *
-nact_match_list_get_rows( BaseWindow *window, const gchar *tab_name )
+nact_match_list_get_rows( NactMainWindow *window, const gchar *tab_name )
 {
        GSList *filters;
        MatchListData *data;
@@ -543,7 +474,7 @@ on_filter_edited( GtkCellRendererText *renderer, const gchar *path_str, const gc
 
        if( count_filters( text, data ) >= 1 ){
                dialog = gtk_message_dialog_new(
-                               base_window_get_gtk_toplevel( BASE_WINDOW( data->window )),
+                               GTK_WINDOW( data->window ),
                                GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK,
                                _( "'%s' filter already exists in the list.\nPlease provide another one." ), 
text );
                gtk_dialog_run( GTK_DIALOG( dialog ));
@@ -582,7 +513,7 @@ on_filter_edited( GtkCellRendererText *renderer, const gchar *path_str, const gc
        na_core_utils_slist_free( filters );
        g_free( old_text );
 
-       g_signal_emit_by_name( G_OBJECT( data->window ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, context, 0 );
+       g_signal_emit_by_name( G_OBJECT( data->window ), MAIN_SIGNAL_ITEM_UPDATED, context, 0 );
 }
 
 static gboolean
@@ -667,7 +598,7 @@ on_must_match_toggled( GtkCellRendererToggle *cell_renderer, gchar *path_str, Ma
                        na_core_utils_slist_free( filters );
                        g_free( filter );
 
-                       g_signal_emit_by_name( G_OBJECT( data->window ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, 
context, 0 );
+                       g_signal_emit_by_name( G_OBJECT( data->window ), MAIN_SIGNAL_ITEM_UPDATED, context, 0 
);
                }
        } else {
                g_signal_handlers_block_by_func(( gpointer ) cell_renderer, on_must_match_toggled, data );
@@ -718,7 +649,7 @@ on_must_not_match_toggled( GtkCellRendererToggle *cell_renderer, gchar *path_str
                        na_core_utils_slist_free( filters );
                        g_free( filter );
 
-                       g_signal_emit_by_name( G_OBJECT( data->window ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, 
context, 0 );
+                       g_signal_emit_by_name( G_OBJECT( data->window ), MAIN_SIGNAL_ITEM_UPDATED, context, 0 
);
                }
        } else {
                g_signal_handlers_block_by_func(( gpointer ) cell_renderer, on_must_not_match_toggled, data );
@@ -756,7 +687,7 @@ add_filter( MatchListData *data, const gchar *filter, const gchar *prefix )
                ( *data->pset )( context, filters );
                na_core_utils_slist_free( filters );
 
-               g_signal_emit_by_name( G_OBJECT( data->window ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, context, 
0 );
+               g_signal_emit_by_name( G_OBJECT( data->window ), MAIN_SIGNAL_ITEM_UPDATED, context, 0 );
        }
 }
 
@@ -813,7 +744,7 @@ delete_current_row( MatchListData *data )
                                ( *data->pset )( context, filters );
                                na_core_utils_slist_free( filters );
 
-                               g_signal_emit_by_name( G_OBJECT( data->window ), 
TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, context, 0 );
+                               g_signal_emit_by_name( G_OBJECT( data->window ), MAIN_SIGNAL_ITEM_UPDATED, 
context, 0 );
                        }
                }
 
diff --git a/src/nact/nact-match-list.h b/src/nact/nact-match-list.h
index 7bcede8..891b2d6 100644
--- a/src/nact/nact-match-list.h
+++ b/src/nact/nact-match-list.h
@@ -42,11 +42,13 @@
  * to requires NactIMatchList, and for NactMainWindow to implement this same
  * NactIMatchList interface. This is not very practical as NactMainWindow is
  * already some big bunch of code...
+ * And, nonetheless, we need three/four instances of this interface, which
+ * is not possible while Schemes, etc. are already interfaces themselves.
  *
  * So we stay with just a piece of helper functions...
  */
 
-#include "base-window.h"
+#include "nact-main-window-def.h"
 
 G_BEGIN_DECLS
 
@@ -60,25 +62,28 @@ enum {
        MATCH_LIST_MUST_MATCH_ALL_OF,
 };
 
-void    nact_match_list_init_with_args( BaseWindow *window, const gchar *tab_name,
-                                               guint         tab_id,
-                                               GtkWidget    *listview,
-                                               GtkWidget    *addbutton,
-                                               GtkWidget    *removebutton,
-                                               pget_filters  pget,
-                                               pset_filters  pset,
-                                               pon_add_cb    pon_add,
-                                               pon_remove_cb pon_remove,
-                                               guint         match_header,
-                                               const gchar  *item_header,
-                                               gboolean      editable_filter );
+void    nact_match_list_init_with_args( NactMainWindow *window,
+                                                                                               const gchar  
*tab_name,
+                                                                                               guint         
tab_id,
+                                                                                               GtkWidget    
*listview,
+                                                                                               GtkWidget    
*addbutton,
+                                                                                               GtkWidget    
*removebutton,
+                                                                                               pget_filters  
pget,
+                                                                                               pset_filters  
pset,
+                                                                                               pon_add_cb    
pon_add,
+                                                                                               pon_remove_cb 
pon_remove,
+                                                                                               guint         
match_header,
+                                                                                               const gchar  
*item_header,
+                                                                                               gboolean      
editable_filter );
 
-void    nact_match_list_insert_row    ( BaseWindow *window, const gchar *tab_name,
-                                               const gchar  *filter,
-                                               gboolean      match,
-                                               gboolean      not_match );
+void    nact_match_list_insert_row    ( NactMainWindow *window,
+                                                                                               const gchar  
*tab_name,
+                                                                                               const gchar  
*filter,
+                                                                                               gboolean      
match,
+                                                                                               gboolean      
not_match );
 
-GSList *nact_match_list_get_rows      ( BaseWindow *window, const gchar *tab_name );
+GSList *nact_match_list_get_rows      ( NactMainWindow *window,
+                                                                                               const gchar  
*tab_name );
 
 G_END_DECLS
 
diff --git a/src/nact/nact-menubar-edit.c b/src/nact/nact-menu-edit.c
similarity index 57%
rename from src/nact/nact-menubar-edit.c
rename to src/nact/nact-menu-edit.c
index a8d01ab..bc0b0da 100644
--- a/src/nact/nact-menubar-edit.c
+++ b/src/nact/nact-menu-edit.c
@@ -33,25 +33,28 @@
 
 #include <glib/gi18n.h>
 
-#include <api/na-core-utils.h>
+#include "api/na-core-utils.h"
 
-#include <core/na-io-provider.h>
+#include "core/na-io-provider.h"
 
 #include "nact-application.h"
+#include "nact-clipboard.h"
 #include "nact-main-tab.h"
-#include "nact-menubar-priv.h"
-#include "nact-preferences-editor.h"
+#include "nact-main-window.h"
+#include "nact-menu.h"
+#include "nact-menu-edit.h"
 #include "nact-tree-ieditable.h"
+#include "nact-tree-view.h"
 
-static GList  *prepare_for_paste( BaseWindow *window );
+static GList  *prepare_for_paste( NactMainWindow *window, sMenuData *sdata );
 static GList  *get_deletables( NAUpdater *updater, GList *tree, GSList **not_deletable );
 static GSList *get_deletables_rec( NAUpdater *updater, GList *tree );
-static gchar  *add_non_deletable_msg( const NAObjectItem *item, gint reason );
-static void    update_clipboard_counters( BaseWindow *window );
+static gchar  *add_ndeletable_msg( const NAObjectItem *item, gint reason );
+static void    update_clipboard_counters( NactMainWindow *window, sMenuData *sdata );
 
 /**
- * nact_menubar_edit_on_update_sensitivities:
- * @bar: this #NactMenubar object.
+ * nact_menu_edit_update_sensitivities:
+ * @main_window: the #NactMainWindow main window.
  *
  * Update sensitivity of items of the Edit menu.
  *
@@ -61,8 +64,9 @@ static void    update_clipboard_counters( BaseWindow *window );
  * Menubar rule).
  */
 void
-nact_menubar_edit_on_update_sensitivities( const NactMenubar *bar )
+nact_menu_edit_update_sensitivities( NactMainWindow *main_window )
 {
+       sMenuData *sdata;
        gboolean cut_enabled;
        gboolean copy_enabled;
        gboolean paste_enabled;
@@ -74,23 +78,24 @@ nact_menubar_edit_on_update_sensitivities( const NactMenubar *bar )
        NAObject *selected_item;
        gboolean is_clipboard_empty;
 
-       is_clipboard_empty = ( bar->private->clipboard_menus + bar->private->clipboard_actions + 
bar->private->clipboard_profiles == 0 );
+       sdata = nact_menu_get_data( main_window );
+       is_clipboard_empty = ( sdata->clipboard_menus + sdata->clipboard_actions + sdata->clipboard_profiles 
== 0 );
 
        /* cut requires a non-empty selection
         * and that the selection is writable (can be modified, i.e. is not read-only)
         * and that all parents are writable (as implies a delete operation)
         */
-       duplicate_enabled = bar->private->treeview_has_focus || bar->private->popup_handler;
-       duplicate_enabled &= bar->private->count_selected > 0;
-       duplicate_enabled &= bar->private->are_parents_writable;
+       duplicate_enabled = sdata->treeview_has_focus || sdata->popup_handler;
+       duplicate_enabled &= sdata->count_selected > 0;
+       duplicate_enabled &= sdata->are_parents_writable;
        cut_enabled = duplicate_enabled;
-       cut_enabled &= bar->private->are_items_writable;
-       nact_menubar_enable_item( bar, "CutItem", cut_enabled );
+       cut_enabled &= sdata->are_items_writable;
+       nact_menu_enable_item( main_window, "cut", cut_enabled );
 
        /* copy only requires a non-empty selection */
-       copy_enabled = bar->private->treeview_has_focus || bar->private->popup_handler;
-       copy_enabled &= bar->private->count_selected > 0;
-       nact_menubar_enable_item( bar, "CopyItem", copy_enabled );
+       copy_enabled = sdata->treeview_has_focus || sdata->popup_handler;
+       copy_enabled &= sdata->count_selected > 0;
+       nact_menu_enable_item( main_window, "copy", copy_enabled );
 
        /* paste enabled if
         * - clipboard is not empty
@@ -102,21 +107,21 @@ nact_menubar_edit_on_update_sensitivities( const NactMenubar *bar )
         *   then current selection (if any) must be a menu or an action
         *   and its parent must be writable
         */
-       paste_enabled = bar->private->treeview_has_focus || bar->private->popup_handler;
+       paste_enabled = sdata->treeview_has_focus || sdata->popup_handler;
        paste_enabled &= !is_clipboard_empty;
-       paste_enabled &= bar->private->count_selected <= 1;
-       if( bar->private->clipboard_profiles ){
-               paste_enabled &= bar->private->count_selected == 1;
-               paste_enabled &= bar->private->is_action_writable;
+       paste_enabled &= sdata->count_selected <= 1;
+       if( sdata->clipboard_profiles ){
+               paste_enabled &= sdata->count_selected == 1;
+               paste_enabled &= sdata->is_action_writable;
        } else {
-               paste_enabled &= bar->private->has_writable_providers;
-               if( bar->private->count_selected ){
-                       paste_enabled &= bar->private->is_parent_writable;
+               paste_enabled &= sdata->has_writable_providers;
+               if( sdata->count_selected ){
+                       paste_enabled &= sdata->is_parent_writable;
                } else {
-                       paste_enabled &= bar->private->is_level_zero_writable;
+                       paste_enabled &= sdata->is_level_zero_writable;
                }
        }
-       nact_menubar_enable_item( bar, "PasteItem", paste_enabled );
+       nact_menu_enable_item( main_window, "paste", paste_enabled );
 
        /* paste into enabled if
         * - clipboard is not empty
@@ -128,57 +133,54 @@ nact_menubar_edit_on_update_sensitivities( const NactMenubar *bar )
         *   then current selection (if any) must be a menu
         *   and its parent must be writable
         */
-       paste_into_enabled = bar->private->treeview_has_focus || bar->private->popup_handler;
+       paste_into_enabled = sdata->treeview_has_focus || sdata->popup_handler;
        paste_into_enabled &= !is_clipboard_empty;
-       paste_into_enabled &= bar->private->count_selected <= 1;
-       if( bar->private->clipboard_profiles ){
-               paste_into_enabled &= bar->private->count_selected == 1;
+       paste_into_enabled &= sdata->count_selected <= 1;
+       if( sdata->clipboard_profiles ){
+               paste_into_enabled &= sdata->count_selected == 1;
                if( paste_into_enabled ){
-                       selected_action = NA_OBJECT( bar->private->selected_items->data );
+                       selected_action = NA_OBJECT( sdata->selected_items->data );
                        paste_into_enabled &= NA_IS_OBJECT_ACTION( selected_action );
                        if( paste_into_enabled ){
                                paste_into_enabled &= na_object_is_finally_writable( selected_action, NULL );
                        }
                }
        } else {
-               paste_into_enabled &= bar->private->has_writable_providers;
-               if( bar->private->count_selected ){
-                       selected_item = NA_OBJECT( bar->private->selected_items->data );
+               paste_into_enabled &= sdata->has_writable_providers;
+               if( sdata->count_selected ){
+                       selected_item = NA_OBJECT( sdata->selected_items->data );
                        paste_into_enabled &= NA_IS_OBJECT_MENU( selected_item );
                        if( paste_into_enabled ){
                                parent_item = ( NAObject * ) na_object_get_parent( selected_item );
                                paste_into_enabled &= parent_item
                                                ? na_object_is_finally_writable( parent_item, NULL )
-                                               : bar->private->is_level_zero_writable;
+                                               : sdata->is_level_zero_writable;
                        }
                } else {
-                       paste_into_enabled &= bar->private->is_level_zero_writable;
+                       paste_into_enabled &= sdata->is_level_zero_writable;
                }
        }
-       nact_menubar_enable_item( bar, "PasteIntoItem", paste_into_enabled );
+       nact_menu_enable_item( main_window, "paste-into", paste_into_enabled );
 
        /* duplicate items will be duplicated besides each one
         * selection must be non-empty
         * each parent must be writable
         */
-       nact_menubar_enable_item( bar, "DuplicateItem", duplicate_enabled );
+       nact_menu_enable_item( main_window, "duplicate", duplicate_enabled );
 
        /* delete is same that cut
         * but items themselves must be writable (because physically deleted)
         * this will be checked on delete activated
         */
        delete_enabled = cut_enabled;
-       nact_menubar_enable_item( bar, "DeleteItem", delete_enabled );
+       nact_menu_enable_item( main_window, "delete", delete_enabled );
 
        /* reload items always enabled */
-
-       /* preferences always enabled */
 }
 
 /**
- * nact_menubar_edit_on_cut:
- * @gtk_action: the #GtkAction action.
- * @window: the #BaseWindow main window.
+ * nact_menu_edit_cut:
+ * @main_window: the #NactMainWindow main window.
  *
  * Cut objects are installed both in the clipboard and in the deleted list.
  * Parent pointer is reset to %NULL.
@@ -197,39 +199,39 @@ nact_menubar_edit_on_update_sensitivities( const NactMenubar *bar )
  * - (tree) remove selected items, unreffing objects
  */
 void
-nact_menubar_edit_on_cut( GtkAction *gtk_action, BaseWindow *window )
+nact_menu_edit_cut( NactMainWindow *main_window )
 {
-       static const gchar *thisfn = "nact_menubar_edit_on_cut";
+       static const gchar *thisfn = "nact_menu_edit_cut";
+       sMenuData *sdata;
        GList *items;
        NactClipboard *clipboard;
        GList *to_delete;
-       GSList *non_deletables;
+       GSList *ndeletables;
        NactTreeView *view;
 
-       g_debug( "%s: gtk_action=%p, window=%p", thisfn, ( void * ) gtk_action, ( void * ) window );
-       g_return_if_fail( GTK_IS_ACTION( gtk_action ));
-
-       BAR_WINDOW_VOID( window );
+       g_debug( "%s: main_window=%p", thisfn, ( void * ) main_window );
+       g_return_if_fail( main_window && NACT_IS_MAIN_WINDOW( main_window ));
 
-       items = na_object_copyref_items( bar->private->selected_items );
-       non_deletables = NULL;
-       to_delete = get_deletables( bar->private->updater, items, &non_deletables );
+       sdata = nact_menu_get_data( main_window );
+       items = na_object_copyref_items( sdata->selected_items );
+       ndeletables = NULL;
+       to_delete = get_deletables( sdata->updater, items, &ndeletables );
 
-       if( non_deletables ){
-               gchar *second = na_core_utils_slist_join_at_end( non_deletables, "\n" );
+       if( ndeletables ){
+               gchar *second = na_core_utils_slist_join_at_end( ndeletables, "\n" );
                base_window_display_error_dlg(
-                               BASE_WINDOW( window ),
+                               BASE_WINDOW( main_window ),
                                _( "Not all items have been cut as following ones are not modifiable:" ),
                                second );
                g_free( second );
-               na_core_utils_slist_free( non_deletables );
+               na_core_utils_slist_free( ndeletables );
        }
 
        if( to_delete ){
-               clipboard = nact_main_window_get_clipboard( NACT_MAIN_WINDOW( window ));
+               clipboard = nact_main_window_get_clipboard( NACT_MAIN_WINDOW( main_window ));
                nact_clipboard_primary_set( clipboard, to_delete, CLIPBOARD_MODE_CUT );
-               update_clipboard_counters( window );
-               view = nact_main_window_get_items_view( NACT_MAIN_WINDOW( window ));
+               update_clipboard_counters( main_window, sdata );
+               view = nact_main_window_get_items_view( main_window );
                nact_tree_ieditable_delete( NACT_TREE_IEDITABLE( view ), to_delete, TREE_OPE_DELETE );
        }
 
@@ -237,9 +239,8 @@ nact_menubar_edit_on_cut( GtkAction *gtk_action, BaseWindow *window )
 }
 
 /**
- * nact_menubar_edit_on_copy:
- * @gtk_action: the #GtkAction action.
- * @window: the #BaseWindow main window.
+ * nact_menu_edit_copy:
+ * @main_window: the #NactMainWindow main window.
  *
  * copies the visible selection
  * - (tree) get new refs on selected items
@@ -249,28 +250,27 @@ nact_menubar_edit_on_cut( GtkAction *gtk_action, BaseWindow *window )
  * - (menu) refresh actions sensitivy (as selection doesn't change)
  */
 void
-nact_menubar_edit_on_copy( GtkAction *gtk_action, BaseWindow *window )
+nact_menu_edit_copy( NactMainWindow *main_window )
 {
-       static const gchar *thisfn = "nact_menubar_edit_on_copy";
+       static const gchar *thisfn = "nact_menu_edit_copy";
+       sMenuData *sdata;
        NactClipboard *clipboard;
 
-       BAR_WINDOW_VOID( window );
+       g_debug( "%s: main_window=%p", thisfn, ( void * ) main_window );
+       g_return_if_fail( main_window && NACT_IS_MAIN_WINDOW( main_window ));
 
-       g_debug( "%s: gtk_action=%p, window=%p", thisfn, ( void * ) gtk_action, ( void * ) window );
-       g_return_if_fail( GTK_IS_ACTION( gtk_action ));
-       g_return_if_fail( NACT_IS_MAIN_WINDOW( window ));
+       sdata = nact_menu_get_data( main_window );
 
-       clipboard = nact_main_window_get_clipboard( NACT_MAIN_WINDOW( window ));
-       nact_clipboard_primary_set( clipboard, bar->private->selected_items, CLIPBOARD_MODE_COPY );
-       update_clipboard_counters( window );
+       clipboard = nact_main_window_get_clipboard( main_window );
+       nact_clipboard_primary_set( clipboard, sdata->selected_items, CLIPBOARD_MODE_COPY );
+       update_clipboard_counters( main_window, sdata );
 
-       g_signal_emit_by_name( bar, MENUBAR_SIGNAL_UPDATE_SENSITIVITIES );
+       g_signal_emit_by_name( main_window, MAIN_SIGNAL_UPDATE_SENSITIVITIES );
 }
 
 /**
- * nact_menubar_edit_on_paste:
- * @gtk_action: the #GtkAction action.
- * @window: the #BaseWindow main window.
+ * nact_menu_edit_paste:
+ * @main_window: the #NactMainWindow main window.
  *
  * pastes the current content of the clipboard at the current position
  * (same path, same level)
@@ -284,27 +284,29 @@ nact_menubar_edit_on_copy( GtkAction *gtk_action, BaseWindow *window )
  * - (menu) unreffing the copy got from clipboard
  */
 void
-nact_menubar_edit_on_paste( GtkAction *gtk_action, BaseWindow *window )
+nact_menu_edit_paste( NactMainWindow *main_window )
 {
-       static const gchar *thisfn = "nact_menubar_edit_on_paste";
+       static const gchar *thisfn = "nact_menu_edit_paste";
+       sMenuData *sdata;
        GList *items;
        NactTreeView *view;
 
-       g_debug( "%s: gtk_action=%p, window=%p", thisfn, ( void * ) gtk_action, ( void * ) window );
+       g_debug( "%s: main_window=%p", thisfn, ( void * ) main_window );
+       g_return_if_fail( main_window && NACT_IS_MAIN_WINDOW( main_window ));
 
-       items = prepare_for_paste( window );
+       sdata = nact_menu_get_data( main_window );
+       items = prepare_for_paste( main_window, sdata );
 
        if( items ){
-               view = nact_main_window_get_items_view( NACT_MAIN_WINDOW( window ));
+               view = nact_main_window_get_items_view( main_window );
                nact_tree_ieditable_insert_items( NACT_TREE_IEDITABLE( view ), items, NULL );
                na_object_free_items( items );
        }
 }
 
 /**
- * nact_menubar_edit_on_paste_into:
- * @gtk_action: the #GtkAction action.
- * @window: the #BaseWindow main window.
+ * nact_menu_edit_paste_into:
+ * @main_window: the #NactMainWindow main window.
  *
  * pastes the current content of the clipboard as the first child of
  * currently selected item
@@ -318,35 +320,37 @@ nact_menubar_edit_on_paste( GtkAction *gtk_action, BaseWindow *window )
  * - (menu) unreffing the copy got from clipboard
  */
 void
-nact_menubar_edit_on_paste_into( GtkAction *gtk_action, BaseWindow *window )
+nact_menu_edit_paste_into( NactMainWindow *main_window )
 {
-       static const gchar *thisfn = "nact_menubar_edit_on_paste_into";
+       static const gchar *thisfn = "nact_menu_edit_paste_into";
+       sMenuData *sdata;
        GList *items;
        NactTreeView *view;
 
-       g_debug( "%s: gtk_action=%p, window=%p", thisfn, ( void * ) gtk_action, ( void * ) window );
+       g_debug( "%s: main_window=%p", thisfn, ( void * ) main_window );
+       g_return_if_fail( main_window && NACT_IS_MAIN_WINDOW( main_window ));
+
+       sdata = nact_menu_get_data( main_window );
+       items = prepare_for_paste( main_window, sdata );
 
-       items = prepare_for_paste( window );
        if( items ){
-               view = nact_main_window_get_items_view( NACT_MAIN_WINDOW( window ));
+               view = nact_main_window_get_items_view( main_window );
                nact_tree_ieditable_insert_into( NACT_TREE_IEDITABLE( view ), items );
                na_object_free_items( items );
        }
 }
 
 static GList *
-prepare_for_paste( BaseWindow *window )
+prepare_for_paste( NactMainWindow *window, sMenuData *sdata )
 {
-       static const gchar *thisfn = "nact_menubar_edit_prepare_for_paste";
+       static const gchar *thisfn = "nact_menu_edit_prepare_for_paste";
        GList *items, *it;
        NactClipboard *clipboard;
        NAObjectAction *action;
        gboolean relabel;
        gboolean renumber;
 
-       BAR_WINDOW_VALUE( window, NULL );
-
-       clipboard = nact_main_window_get_clipboard( NACT_MAIN_WINDOW( window ));
+       clipboard = nact_main_window_get_clipboard( window );
        items = nact_clipboard_primary_get( clipboard, &renumber );
        action = NULL;
 
@@ -361,7 +365,7 @@ prepare_for_paste( BaseWindow *window )
                        }
                }
 
-               relabel = na_updater_should_pasted_be_relabeled( bar->private->updater, NA_OBJECT( it->data 
));
+               relabel = na_updater_should_pasted_be_relabeled( sdata->updater, NA_OBJECT( it->data ));
                na_object_prepare_for_paste( it->data, relabel, renumber, action );
                na_object_check_status( it->data );
        }
@@ -373,9 +377,8 @@ prepare_for_paste( BaseWindow *window )
 }
 
 /**
- * nact_menubar_edit_on_duplicate:
- * @gtk_action: the #GtkAction action.
- * @window: the #BaseWindow main window.
+ * nact_menu_edit_duplicate:
+ * @main_window: the #NactMainWindow main window.
  *
  * duplicate is just as paste, with the difference that content comes
  * from the current selection, instead of coming from the clipboard
@@ -385,9 +388,10 @@ prepare_for_paste( BaseWindow *window )
  * items just besides the original ones...
  */
 void
-nact_menubar_edit_on_duplicate( GtkAction *gtk_action, BaseWindow *window )
+nact_menu_edit_duplicate( NactMainWindow *main_window )
 {
-       static const gchar *thisfn = "nact_menubar_edit_on_duplicate";
+       static const gchar *thisfn = "nact_menu_edit_duplicate";
+       sMenuData *sdata;
        NAObjectAction *action;
        GList *items, *it;
        GList *dup;
@@ -395,13 +399,11 @@ nact_menubar_edit_on_duplicate( GtkAction *gtk_action, BaseWindow *window )
        gboolean relabel;
        NactTreeView *view;
 
-       BAR_WINDOW_VOID( window );
-
-       g_debug( "%s: gtk_action=%p, window=%p", thisfn, ( void * ) gtk_action, ( void * ) window );
-       g_return_if_fail( GTK_IS_ACTION( gtk_action ));
-       g_return_if_fail( NACT_IS_MAIN_WINDOW( window ));
+       g_debug( "%s: main_window=%p", thisfn, ( void * ) main_window );
+       g_return_if_fail( main_window && NACT_IS_MAIN_WINDOW( main_window ));
 
-       items = na_object_copyref_items( bar->private->selected_items );
+       sdata = nact_menu_get_data( main_window );
+       items = na_object_copyref_items( sdata->selected_items );
 
        for( it = items ; it ; it = it->next ){
                obj = NA_OBJECT( na_object_duplicate( it->data, DUPLICATE_REC ));
@@ -414,12 +416,12 @@ nact_menubar_edit_on_duplicate( GtkAction *gtk_action, BaseWindow *window )
                        action = NA_OBJECT_ACTION( na_object_get_parent( it->data ));
                }
 
-               relabel = na_updater_should_pasted_be_relabeled( bar->private->updater, obj );
+               relabel = na_updater_should_pasted_be_relabeled( sdata->updater, obj );
                na_object_prepare_for_paste( obj, relabel, TRUE, action );
                na_object_set_origin( obj, NULL );
                na_object_check_status( obj );
                dup = g_list_prepend( NULL, obj );
-               view = nact_main_window_get_items_view( NACT_MAIN_WINDOW( window ));
+               view = nact_main_window_get_items_view( NACT_MAIN_WINDOW( main_window ));
                nact_tree_ieditable_insert_items( NACT_TREE_IEDITABLE( view ), dup, it->data );
                na_object_free_items( dup );
        }
@@ -428,9 +430,8 @@ nact_menubar_edit_on_duplicate( GtkAction *gtk_action, BaseWindow *window )
 }
 
 /**
- * nact_menubar_edit_on_delete:
- * @gtk_action: the #GtkAction action.
- * @window: the #BaseWindow main window.
+ * nact_menu_edit_delete:
+ * @main_window: the #NactMainWindow main window.
  *
  * deletes the visible selection
  * - (tree) get new refs on selected items
@@ -445,36 +446,35 @@ nact_menubar_edit_on_duplicate( GtkAction *gtk_action, BaseWindow *window )
  * this branch itself be deleted
  */
 void
-nact_menubar_edit_on_delete( GtkAction *gtk_action, BaseWindow *window )
+nact_menu_edit_delete( NactMainWindow *main_window )
 {
-       static const gchar *thisfn = "nact_menubar_edit_on_delete";
+       static const gchar *thisfn = "nact_menu_edit_delete";
+       sMenuData *sdata;
        GList *items;
        GList *to_delete;
-       GSList *non_deletables;
+       GSList *ndeletables;
        NactTreeView *view;
 
-       BAR_WINDOW_VOID( window );
-
-       g_debug( "%s: gtk_action=%p, window=%p", thisfn, ( void * ) gtk_action, ( void * ) window );
-       g_return_if_fail( GTK_IS_ACTION( gtk_action ));
-       g_return_if_fail( NACT_IS_MAIN_WINDOW( window ));
+       g_debug( "%s: main_window=%p", thisfn, ( void * ) main_window );
+       g_return_if_fail( main_window && NACT_IS_MAIN_WINDOW( main_window ));
 
-       items = na_object_copyref_items( bar->private->selected_items );
-       non_deletables = NULL;
-       to_delete = get_deletables( bar->private->updater, items, &non_deletables );
+       sdata = nact_menu_get_data( main_window );
+       items = na_object_copyref_items( sdata->selected_items );
+       ndeletables = NULL;
+       to_delete = get_deletables( sdata->updater, items, &ndeletables );
 
-       if( non_deletables ){
-               gchar *second = na_core_utils_slist_join_at_end( non_deletables, "\n" );
+       if( ndeletables ){
+               gchar *second = na_core_utils_slist_join_at_end( ndeletables, "\n" );
                base_window_display_error_dlg(
-                               BASE_WINDOW( window ),
+                               BASE_WINDOW( main_window ),
                                _( "Not all items have been deleted as following ones are not modifiable:" ),
                                second );
                g_free( second );
-               na_core_utils_slist_free( non_deletables );
+               na_core_utils_slist_free( ndeletables );
        }
 
        if( to_delete ){
-               view = nact_main_window_get_items_view( NACT_MAIN_WINDOW( window ));
+               view = nact_main_window_get_items_view( main_window );
                nact_tree_ieditable_delete( NACT_TREE_IEDITABLE( view ), to_delete, TREE_OPE_DELETE );
        }
 
@@ -482,7 +482,7 @@ nact_menubar_edit_on_delete( GtkAction *gtk_action, BaseWindow *window )
 }
 
 static GList *
-get_deletables( NAUpdater *updater, GList *selected, GSList **non_deletables )
+get_deletables( NAUpdater *updater, GList *selected, GSList **ndeletables )
 {
        GList *to_delete;
        GList *it;
@@ -501,8 +501,8 @@ get_deletables( NAUpdater *updater, GList *selected, GSList **non_deletables )
                }
 
                if( !na_object_is_finally_writable( item, &reason )){
-                       *non_deletables = g_slist_prepend(
-                                       *non_deletables, add_non_deletable_msg( NA_OBJECT_ITEM( it->data ), 
reason ));
+                       *ndeletables = g_slist_prepend(
+                                       *ndeletables, add_ndeletable_msg( NA_OBJECT_ITEM( it->data ), reason 
));
                        continue;
                }
 
@@ -511,7 +511,7 @@ get_deletables( NAUpdater *updater, GList *selected, GSList **non_deletables )
                        sub_deletables = get_deletables_rec( updater, subitems );
 
                        if( sub_deletables ){
-                               *non_deletables = g_slist_concat( *non_deletables, sub_deletables );
+                               *ndeletables = g_slist_concat( *ndeletables, sub_deletables );
                                continue;
                        }
                }
@@ -535,7 +535,7 @@ get_deletables_rec( NAUpdater *updater, GList *tree )
 
                if( !na_object_is_finally_writable( it->data, &reason )){
                        msgs = g_slist_prepend(
-                                       msgs, add_non_deletable_msg( NA_OBJECT_ITEM( it->data ), reason ));
+                                       msgs, add_ndeletable_msg( NA_OBJECT_ITEM( it->data ), reason ));
                        continue;
                }
 
@@ -549,18 +549,18 @@ get_deletables_rec( NAUpdater *updater, GList *tree )
 }
 
 static gchar *
-add_non_deletable_msg( const NAObjectItem *item, gint reason )
+add_ndeletable_msg( const NAObjectItem *item, gint reason )
 {
        gchar *msg;
        gchar *label;
-       gchar *reason_str;
+       gchar *reasstr;
 
        label = na_object_get_label( item );
-       reason_str = na_io_provider_get_readonly_tooltip( reason );
+       reasstr = na_io_provider_get_readonly_tooltip( reason );
 
-       msg = g_strdup_printf( "%s: %s", label, reason_str );
+       msg = g_strdup_printf( "%s: %s", label, reasstr );
 
-       g_free( reason_str );
+       g_free( reasstr );
        g_free( label );
 
        return( msg );
@@ -571,42 +571,14 @@ add_non_deletable_msg( const NAObjectItem *item, gint reason )
  * counters to clipboard ones
  */
 static void
-update_clipboard_counters( BaseWindow *window )
+update_clipboard_counters( NactMainWindow *main_window, sMenuData *sdata )
 {
-       BAR_WINDOW_VOID( window );
+       sdata->clipboard_menus = sdata->selected_menus;
+       sdata->clipboard_actions = sdata->selected_actions;
+       sdata->clipboard_profiles = sdata->selected_profiles;
 
-       bar->private->clipboard_menus = bar->private->selected_menus;
-       bar->private->clipboard_actions = bar->private->selected_actions;
-       bar->private->clipboard_profiles = bar->private->selected_profiles;
+       g_debug( "nact_menu_update_clipboard_counters: menus=%d, actions=%d, profiles=%d",
+                       sdata->clipboard_menus, sdata->clipboard_actions, sdata->clipboard_profiles );
 
-       g_debug( "nact_menubar_update_clipboard_counters: menus=%d, actions=%d, profiles=%d",
-                       bar->private->clipboard_menus, bar->private->clipboard_actions, 
bar->private->clipboard_profiles );
-
-       g_signal_emit_by_name( bar, MENUBAR_SIGNAL_UPDATE_SENSITIVITIES );
-}
-
-/**
- * nact_menubar_edit_on_reload:
- * @gtk_action: the #GtkAction action.
- * @window: the #BaseWindow main window.
- *
- * Reload items from I/O storage subsystems.
- */
-void
-nact_menubar_edit_on_reload( GtkAction *gtk_action, BaseWindow *window )
-{
-       nact_main_window_reload( NACT_MAIN_WINDOW( window ));
-}
-
-/**
- * nact_menubar_edit_on_preferences:
- * @gtk_action: the #GtkAction action.
- * @window: the #BaseWindow main window.
- *
- * Edit preferences.
- */
-void
-nact_menubar_edit_on_prefererences( GtkAction *gtk_action, BaseWindow *window )
-{
-       nact_preferences_editor_run( window );
+       g_signal_emit_by_name( main_window, MAIN_SIGNAL_UPDATE_SENSITIVITIES );
 }
diff --git a/src/nact/nact-main-statusbar.h b/src/nact/nact-menu-edit.h
similarity index 60%
copy from src/nact/nact-main-statusbar.h
copy to src/nact/nact-menu-edit.h
index 465a27a..a25d0dd 100644
--- a/src/nact/nact-main-statusbar.h
+++ b/src/nact/nact-menu-edit.h
@@ -27,26 +27,27 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NACT_MAIN_STATUSBAR_H__
-#define __NACT_MAIN_STATUSBAR_H__
+#ifndef __NACT_MENU_EDIT_H__
+#define __NACT_MENU_EDIT_H__
 
-/**
- * SECTION: nact_main_statusbar
- * @short_description: Main statusbar functions.
- * @include: nact/nact-main-statusbar.h
- */
-
-#include "nact-main-window.h"
+#include "nact-main-window-def.h"
 
 G_BEGIN_DECLS
 
-void  nact_main_statusbar_initialize_gtk_toplevel( NactMainWindow *window );
+void nact_menu_edit_update_sensitivities( NactMainWindow *main_window );
+
+void nact_menu_edit_cut                 ( NactMainWindow *main_window );
+
+void nact_menu_edit_copy                ( NactMainWindow *main_window );
+
+void nact_menu_edit_paste               ( NactMainWindow *main_window );
+
+void nact_menu_edit_paste_into          ( NactMainWindow *main_window );
+
+void nact_menu_edit_duplicate           ( NactMainWindow *main_window );
 
-void  nact_main_statusbar_display_status( NactMainWindow *window, const gchar *context, const gchar *status 
);
-void  nact_main_statusbar_display_with_timeout( NactMainWindow *window, const gchar *context, const gchar 
*status );
-void  nact_main_statusbar_hide_status( NactMainWindow *window, const gchar *context );
-void  nact_main_statusbar_set_locked( NactMainWindow *window, gboolean readonly, gint reason );
+void nact_menu_edit_delete              ( NactMainWindow *main_window );
 
 G_END_DECLS
 
-#endif /* __NACT_MAIN_STATUSBAR_H__ */
+#endif /* __NACT_MENU_EDIT_H__ */
diff --git a/src/nact/nact-menubar-file.c b/src/nact/nact-menu-file.c
similarity index 61%
rename from src/nact/nact-menubar-file.c
rename to src/nact/nact-menu-file.c
index 7bb2323..e693882 100644
--- a/src/nact/nact-menubar-file.c
+++ b/src/nact/nact-menu-file.c
@@ -41,9 +41,11 @@
 #include <core/na-iprefs.h>
 
 #include "nact-application.h"
-#include "nact-main-statusbar.h"
+#include "nact-statusbar.h"
 #include "nact-main-tab.h"
-#include "nact-menubar-priv.h"
+#include "nact-main-window.h"
+#include "nact-menu.h"
+#include "nact-menu-file.h"
 #include "nact-tree-ieditable.h"
 
 static NATimeout st_autosave_prefs_timeout = { 0 };
@@ -54,144 +56,129 @@ static gchar *st_save_warning     = N_( "Some items may not have been saved" );
 static gchar *st_level_zero_write = N_( "Unable to rewrite the level-zero items list" );
 static gchar *st_delete_error     = N_( "Some items have not been deleted" );
 
-static gboolean save_item( BaseWindow *window, NAUpdater *updater, NAObjectItem *item, GSList **messages );
-static void     install_autosave( NactMenubar *bar );
+static gboolean save_item( NactMainWindow *window, NAUpdater *updater, NAObjectItem *item, GSList **messages 
);
+static void     install_autosave( NactMainWindow *main_window );
 static void     on_autosave_prefs_changed( const gchar *group, const gchar *key, gconstpointer new_value, 
gpointer user_data );
-static void     on_autosave_prefs_timeout( NactMenubar *bar );
-static gboolean autosave_callback( NactMenubar *bar );
-static void     autosave_destroyed( NactMenubar *bar );
+static void     on_autosave_prefs_timeout( NactMainWindow *main_window );
+static gboolean autosave_callback( NactMainWindow *main_window );
+static void     autosave_destroyed( NactMainWindow *main_window );
 
 /*
- * nact_menubar_file_initialize:
- * @bar: this #NactMenubar object.
+ * nact_menu_file_initialize:
+ * @main_window: the #NactMainWindow main window.
  */
 void
-nact_menubar_file_initialize( NactMenubar *bar )
+nact_menu_file_initialize( NactMainWindow *main_window )
 {
-       install_autosave( bar );
+       install_autosave( main_window );
 }
 
 /**
- * nact_menubar_file_on_update_sensitivities:
- * @bar: this #NactMenubar object.
+ * nact_menu_file_update_sensitivities:
+ * @main_window: the #NactMainWindow main window.
  *
  * Update sensitivity of items of the File menu.
  */
 void
-nact_menubar_file_on_update_sensitivities( const NactMenubar *bar )
+nact_menu_file_update_sensitivities( NactMainWindow *main_window )
 {
-       static const gchar *thisfn = "nact_menubar_file_on_update_sensitivities";
+       static const gchar *thisfn = "nact_menu_file_update_sensitivities";
+       sMenuData *sdata;
        gboolean new_item_enabled;
 
+       sdata = nact_menu_get_data( main_window );
+
        /* new menu / new action
         * new item will be inserted just before the beginning of selection
         * parent of the first selected row must be writable
         * we must have at least one writable provider
         */
-       new_item_enabled = bar->private->is_parent_writable && bar->private->has_writable_providers;
+       new_item_enabled = sdata->is_parent_writable && sdata->has_writable_providers;
        g_debug( "%s: is_parent_writable=%s, has_writable_providers=%s, new_item_enabled=%s",
                        thisfn,
-                       bar->private->is_parent_writable ? "True":"False",
-                       bar->private->has_writable_providers ? "True":"False",
+                       sdata->is_parent_writable ? "True":"False",
+                       sdata->has_writable_providers ? "True":"False",
                        new_item_enabled ? "True":"False" );
-       nact_menubar_enable_item( bar, "NewMenuItem", new_item_enabled );
-       nact_menubar_enable_item( bar, "NewActionItem", new_item_enabled );
+       nact_menu_enable_item( main_window, "new-menu", new_item_enabled );
+       nact_menu_enable_item( main_window, "new-action", new_item_enabled );
 
        /* new profile enabled if selection is relative to only one writable action
         * i.e. contains profile(s) of the same action, or only contains one action
         * action must be writable
         */
-       nact_menubar_enable_item( bar, "NewProfileItem",
-                       bar->private->enable_new_profile && bar->private->is_action_writable );
+       nact_menu_enable_item( main_window, "new-profile",
+                       sdata->enable_new_profile && sdata->is_action_writable );
 
        /* save enabled if at least one item has been modified
         * or level-zero has been resorted and is writable
         */
-       nact_menubar_enable_item( bar, "SaveItem", ( bar->private->is_tree_modified ));
-
-       /* quit always enabled */
+       nact_menu_enable_item( main_window, "save", ( sdata->is_tree_modified ));
 }
 
 /**
- * nact_menubar_file_on_new_menu:
- * @gtk_action: the #GtkAction action.
- * @window: the #BaseWindow main window.
+ * nact_menu_file_new_menu:
+ * @main_window: the #NactMainWindow main window.
  *
  * Triggers File / New menu item.
  */
 void
-nact_menubar_file_on_new_menu( GtkAction *gtk_action, BaseWindow *window )
+nact_menu_file_new_menu( NactMainWindow *main_window )
 {
+       sMenuData *sdata;
        NAObjectMenu *menu;
-       NactApplication *application;
-       NAUpdater *updater;
        NactTreeView *items_view;
        GList *items;
 
-       g_return_if_fail( GTK_IS_ACTION( gtk_action ));
-       g_return_if_fail( NACT_IS_MAIN_WINDOW( window ));
-
+       sdata = nact_menu_get_data( main_window );
        menu = na_object_menu_new_with_defaults();
        na_object_check_status( menu );
-       application = NACT_APPLICATION( base_window_get_application( window ));
-       updater = nact_application_get_updater( application );
-       na_updater_check_item_writability_status( updater, NA_OBJECT_ITEM( menu ));
+       na_updater_check_item_writability_status( sdata->updater, NA_OBJECT_ITEM( menu ));
        items = g_list_prepend( NULL, menu );
-       items_view = nact_main_window_get_items_view( NACT_MAIN_WINDOW( window ));
+       items_view = nact_main_window_get_items_view( main_window );
        nact_tree_ieditable_insert_items( NACT_TREE_IEDITABLE( items_view ), items, NULL );
        na_object_free_items( items );
 }
 
 /**
- * nact_menubar_file_on_new_action:
- * @gtk_action: the #GtkAction action.
- * @window: the #BaseWindow main window.
+ * nact_menu_file_new_action:
+ * @main_window: the #NactMainWindow main window.
  *
  * Triggers File / New action item.
  */
 void
-nact_menubar_file_on_new_action( GtkAction *gtk_action, BaseWindow *window )
+nact_menu_file_new_action( NactMainWindow *main_window )
 {
+       sMenuData *sdata;
        NAObjectAction *action;
-       NactApplication *application;
-       NAUpdater *updater;
        NactTreeView *items_view;
        GList *items;
 
-       g_return_if_fail( GTK_IS_ACTION( gtk_action ));
-       g_return_if_fail( NACT_IS_MAIN_WINDOW( window ));
-
+       sdata = nact_menu_get_data( main_window );
        action = na_object_action_new_with_defaults();
        na_object_check_status( action );
-       application = NACT_APPLICATION( base_window_get_application( window ));
-       updater = nact_application_get_updater( application );
-       na_updater_check_item_writability_status( updater, NA_OBJECT_ITEM( action ));
+       na_updater_check_item_writability_status( sdata->updater, NA_OBJECT_ITEM( action ));
        items = g_list_prepend( NULL, action );
-       items_view = nact_main_window_get_items_view( NACT_MAIN_WINDOW( window ));
+       items_view = nact_main_window_get_items_view( main_window );
        nact_tree_ieditable_insert_items( NACT_TREE_IEDITABLE( items_view ), items, NULL );
        na_object_free_items( items );
 }
 
 /**
- * nact_menubar_file_on_new_profile:
- * @gtk_action: the #GtkAction action.
- * @window: the #BaseWindow main window.
+ * nact_menu_file_new_profile:
+ * @main_window: the #NactMainWindow main window.
  *
  * Triggers File / New profile item.
  */
 void
-nact_menubar_file_on_new_profile( GtkAction *gtk_action, BaseWindow *window )
+nact_menu_file_new_profile( NactMainWindow *main_window )
 {
        NAObjectAction *action;
        NAObjectProfile *profile;
        NactTreeView *items_view;
        GList *items;
 
-       g_return_if_fail( GTK_IS_ACTION( gtk_action ));
-       g_return_if_fail( NACT_IS_MAIN_WINDOW( window ));
-
        g_object_get(
-                       G_OBJECT( window ),
+                       G_OBJECT( main_window ),
                        MAIN_PROP_ITEM, &action,
                        NULL );
 
@@ -204,43 +191,17 @@ nact_menubar_file_on_new_profile( GtkAction *gtk_action, BaseWindow *window )
        na_object_check_status( profile );
 
        items = g_list_prepend( NULL, profile );
-       items_view = nact_main_window_get_items_view( NACT_MAIN_WINDOW( window ));
+       items_view = nact_main_window_get_items_view( main_window );
        nact_tree_ieditable_insert_items( NACT_TREE_IEDITABLE( items_view ), items, NULL );
        na_object_free_items( items );
 }
 
 /**
- * nact_menubar_file_on_save:
- * @gtk_action: the #GtkAction action.
- * @window: the #BaseWindow main window.
- *
- * Triggers File /Save item.
- *
- * Saving is not only saving modified items, but also saving hierarchy
- * (and order if alpha order is not set).
- *
- * This is the same function that nact_menubar_file_save_items(), just with
- * different arguments.
- */
-void
-nact_menubar_file_on_save( GtkAction *gtk_action, BaseWindow *window )
-{
-       static const gchar *thisfn = "nact_menubar_file_on_save";
-
-       g_debug( "%s: gtk_action=%p, window=%p", thisfn, ( void * ) gtk_action, ( void * ) window );
-       g_return_if_fail( GTK_IS_ACTION( gtk_action ));
-       g_return_if_fail( NACT_IS_MAIN_WINDOW( window ));
-
-       nact_menubar_file_save_items( window );
-}
-
-/**
- * nact_menubar_file_save_items:
- * @gtk_action: the #GtkAction action.
- * @window: the #BaseWindow main window.
+ * nact_menu_file_save_items:
+ * @window: the #NactMainWindow main window.
  *
  * Save items.
- * This is the same function that nact_menubar_file_on_save(), just
+ * This is the same function that nact_menu_file_save(), just
  * with different arguments.
  *
  * Synopsis:
@@ -265,9 +226,10 @@ nact_menubar_file_on_save( GtkAction *gtk_action, BaseWindow *window )
  * - idem if some items cannot be actually rewritten...
  */
 void
-nact_menubar_file_save_items( BaseWindow *window )
+nact_menu_file_save_items( NactMainWindow *window )
 {
-       static const gchar *thisfn = "nact_menubar_file_save_items";
+       static const gchar *thisfn = "nact_menu_file_save_items";
+       sMenuData *sdata;
        NactTreeView *items_view;
        GList *items, *it;
        GList *new_pivot;
@@ -275,14 +237,14 @@ nact_menubar_file_save_items( BaseWindow *window )
        GSList *messages;
        gchar *msg;
 
-       BAR_WINDOW_VOID( window );
-
        g_debug( "%s: window=%p", thisfn, ( void * ) window );
 
+       sdata = nact_menu_get_data( window );
+
        /* always write the level zero list of items as the first save phase
         * and reset the corresponding modification flag
         */
-       items_view = nact_main_window_get_items_view( NACT_MAIN_WINDOW( window ));
+       items_view = nact_main_window_get_items_view( window );
        items = nact_tree_view_get_items( items_view );
        na_object_dump_tree( items );
        messages = NULL;
@@ -294,14 +256,14 @@ nact_menubar_file_save_items( BaseWindow *window )
                        } else {
                                msg = g_strdup( gettext( st_level_zero_write ));
                        }
-                       base_window_display_error_dlg( window, gettext( st_save_error ), msg );
+                       base_window_display_error_dlg( NULL, gettext( st_save_error ), msg );
                        g_free( msg );
                        na_core_utils_slist_free( messages );
                        messages = NULL;
                }
 
        } else {
-               g_signal_emit_by_name( window, TREE_SIGNAL_LEVEL_ZERO_CHANGED, FALSE );
+               g_signal_emit_by_name( items_view, TREE_SIGNAL_LEVEL_ZERO_CHANGED, FALSE );
        }
 
        /* remove deleted items
@@ -314,7 +276,7 @@ nact_menubar_file_save_items( BaseWindow *window )
                } else {
                        msg = g_strdup( gettext( st_delete_error ));
                }
-               base_window_display_error_dlg( window, gettext( st_save_error ), msg );
+               base_window_display_error_dlg( NULL, gettext( st_save_error ), msg );
                g_free( msg );
                na_core_utils_slist_free( messages );
                messages = NULL;
@@ -332,7 +294,7 @@ nact_menubar_file_save_items( BaseWindow *window )
        new_pivot = NULL;
 
        for( it = items ; it ; it = it->next ){
-               save_item( window, bar->private->updater, NA_OBJECT_ITEM( it->data ), &messages );
+               save_item( window, sdata->updater, NA_OBJECT_ITEM( it->data ), &messages );
                duplicate = NA_OBJECT_ITEM( na_object_duplicate( it->data, DUPLICATE_REC ));
                na_object_reset_origin( it->data, duplicate );
                na_object_check_status( it->data );
@@ -341,25 +303,25 @@ nact_menubar_file_save_items( BaseWindow *window )
 
        if( g_slist_length( messages )){
                msg = na_core_utils_slist_join_at_end( messages, "\n" );
-               base_window_display_error_dlg( window, gettext( st_save_warning ), msg );
+               base_window_display_error_dlg( NULL, gettext( st_save_warning ), msg );
                g_free( msg );
                na_core_utils_slist_free( messages );
                messages = NULL;
        }
 
-       na_pivot_set_new_items( NA_PIVOT( bar->private->updater ), g_list_reverse( new_pivot ));
+       na_pivot_set_new_items( NA_PIVOT( sdata->updater ), g_list_reverse( new_pivot ));
        na_object_free_items( items );
-       nact_main_window_block_reload( NACT_MAIN_WINDOW( window ));
-       g_signal_emit_by_name( window, TREE_SIGNAL_MODIFIED_STATUS_CHANGED, FALSE );
+       nact_main_window_block_reload( window );
+       g_signal_emit_by_name( items_view, TREE_SIGNAL_MODIFIED_STATUS_CHANGED, FALSE );
 }
 
 /*
  * iterates here on each and every NAObjectItem row stored in the tree
  */
 static gboolean
-save_item( BaseWindow *window, NAUpdater *updater, NAObjectItem *item, GSList **messages )
+save_item( NactMainWindow *window, NAUpdater *updater, NAObjectItem *item, GSList **messages )
 {
-       static const gchar *thisfn = "nact_menubar_file_save_item";
+       static const gchar *thisfn = "nact_menu_file_save_item";
        gboolean ret;
        NAIOProvider *provider_before;
        NAIOProvider *provider_after;
@@ -408,41 +370,23 @@ save_item( BaseWindow *window, NAUpdater *updater, NAObjectItem *item, GSList **
        return( ret );
 }
 
-/**
- * nact_menubar_file_on_quit:
- * @gtk_action: the #GtkAction action.
- * @window: the #BaseWindow main window.
- *
- * Triggers the File / Quit item.
- */
-void
-nact_menubar_file_on_quit( GtkAction *gtk_action, BaseWindow *window )
-{
-       static const gchar *thisfn = "nact_menubar_file_on_quit";
-
-       g_debug( "%s: item=%p, window=%p", thisfn, ( void * ) gtk_action, ( void * ) window );
-       g_return_if_fail( GTK_IS_ACTION( gtk_action ) || gtk_action == NULL );
-
-       nact_main_window_quit( NACT_MAIN_WINDOW( window ));
-}
-
 /*
- * nact_menubar_file_install_autosave:
- * @bar: this #NactMenubar instance.
+ * nact_menu_file_install_autosave:
+ * @main_window: this #NactMainWindow main window.
  *
  * Setup the autosave feature and initialize its monitoring.
  */
 static void
-install_autosave( NactMenubar *bar )
+install_autosave( NactMainWindow *main_window )
 {
        st_autosave_prefs_timeout.timeout = 100;
        st_autosave_prefs_timeout.handler = ( NATimeoutFunc ) on_autosave_prefs_timeout;
-       st_autosave_prefs_timeout.user_data = bar;
+       st_autosave_prefs_timeout.user_data = main_window;
 
        na_settings_register_key_callback( NA_IPREFS_MAIN_SAVE_AUTO, G_CALLBACK( on_autosave_prefs_changed ), 
NULL );
        na_settings_register_key_callback( NA_IPREFS_MAIN_SAVE_PERIOD, G_CALLBACK( on_autosave_prefs_changed 
), NULL );
 
-       on_autosave_prefs_timeout( bar );
+       on_autosave_prefs_timeout( main_window );
 }
 
 static void
@@ -452,14 +396,12 @@ on_autosave_prefs_changed( const gchar *group, const gchar *key, gconstpointer n
 }
 
 static void
-on_autosave_prefs_timeout( NactMenubar *bar )
+on_autosave_prefs_timeout( NactMainWindow *main_window )
 {
-       static const gchar *thisfn = "nact_menubar_file_on_autosave_prefs_timeout";
+       static const gchar *thisfn = "nact_menu_file_autosave_prefs_timeout";
        gboolean autosave_on;
        guint autosave_period;
 
-       g_return_if_fail( NACT_IS_MENUBAR( bar ));
-
        autosave_on = na_settings_get_boolean( NA_IPREFS_MAIN_SAVE_AUTO, NULL, NULL );
        autosave_period = na_settings_get_uint( NA_IPREFS_MAIN_SAVE_PERIOD, NULL, NULL );
 
@@ -475,26 +417,28 @@ on_autosave_prefs_timeout( NactMenubar *bar )
                                G_PRIORITY_DEFAULT,
                                autosave_period * 60,
                                ( GSourceFunc ) autosave_callback,
-                               bar,
+                               main_window,
                                ( GDestroyNotify ) autosave_destroyed );
        }
 }
 
 static gboolean
-autosave_callback( NactMenubar *bar )
+autosave_callback( NactMainWindow *main_window )
 {
+       NactStatusbar *bar;
        const gchar *context = "autosave-context";
-       g_debug( "nact_menubar_file_autosave_callback" );
+       g_debug( "nact_menu_file_autosave_callback" );
 
-       nact_main_statusbar_display_status( NACT_MAIN_WINDOW( bar->private->window ), context, _( 
"Automatically saving pending modifications..." ));
-       nact_menubar_file_save_items( bar->private->window );
-       nact_main_statusbar_hide_status( NACT_MAIN_WINDOW( bar->private->window ), context );
+       bar = nact_main_window_get_statusbar( main_window );
+       nact_statusbar_display_status( bar, context, _( "Automatically saving pending modifications..." ));
+       nact_menu_file_save_items( main_window );
+       nact_statusbar_hide_status( bar, context );
 
        return( TRUE );
 }
 
 static void
-autosave_destroyed( NactMenubar *bar )
+autosave_destroyed( NactMainWindow *main_window )
 {
-       g_debug( "nact_menubar_file_autosave_destroyed" );
+       g_debug( "nact_menu_file_autosave_destroyed" );
 }
diff --git a/src/nact/nact-main-statusbar.h b/src/nact/nact-menu-file.h
similarity index 60%
rename from src/nact/nact-main-statusbar.h
rename to src/nact/nact-menu-file.h
index 465a27a..2085aa8 100644
--- a/src/nact/nact-main-statusbar.h
+++ b/src/nact/nact-menu-file.h
@@ -27,26 +27,25 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NACT_MAIN_STATUSBAR_H__
-#define __NACT_MAIN_STATUSBAR_H__
+#ifndef __NACT_MENU_FILE_H__
+#define __NACT_MENU_FILE_H__
 
-/**
- * SECTION: nact_main_statusbar
- * @short_description: Main statusbar functions.
- * @include: nact/nact-main-statusbar.h
- */
-
-#include "nact-main-window.h"
+#include "nact-main-window-def.h"
 
 G_BEGIN_DECLS
 
-void  nact_main_statusbar_initialize_gtk_toplevel( NactMainWindow *window );
+void nact_menu_file_initialize          ( NactMainWindow *main_window );
+
+void nact_menu_file_update_sensitivities( NactMainWindow *main_window );
+
+void nact_menu_file_new_menu            ( NactMainWindow *main_window );
+
+void nact_menu_file_new_action          ( NactMainWindow *main_window );
+
+void nact_menu_file_new_profile         ( NactMainWindow *main_window );
 
-void  nact_main_statusbar_display_status( NactMainWindow *window, const gchar *context, const gchar *status 
);
-void  nact_main_statusbar_display_with_timeout( NactMainWindow *window, const gchar *context, const gchar 
*status );
-void  nact_main_statusbar_hide_status( NactMainWindow *window, const gchar *context );
-void  nact_main_statusbar_set_locked( NactMainWindow *window, gboolean readonly, gint reason );
+void nact_menu_file_save_items          ( NactMainWindow *main_window );
 
 G_END_DECLS
 
-#endif /* __NACT_MAIN_STATUSBAR_H__ */
+#endif /* __NACT_MENU_FILE_H__ */
diff --git a/src/nact/nact-menu.c b/src/nact/nact-menu.c
new file mode 100644
index 0000000..37e8f76
--- /dev/null
+++ b/src/nact/nact-menu.c
@@ -0,0 +1,766 @@
+/*
+ * Nautilus-Actions
+ * A Nautilus extension which offers configurable context menu actions.
+ *
+ * Copyright (C) 2005 The GNOME Foundation
+ * Copyright (C) 2006-2008 Frederic Ruaudel and others (see AUTHORS)
+ * Copyright (C) 2009-2014 Pierre Wieser and others (see AUTHORS)
+ *
+ * Nautilus-Actions is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * Nautilus-Actions is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Nautilus-Actions; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ *   Frederic Ruaudel <grumz grumz net>
+ *   Rodrigo Moya <rodrigo gnome-db org>
+ *   Pierre Wieser <pwieser trychlos org>
+ *   ... and many others (see AUTHORS)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib/gi18n.h>
+
+#include "core/na-io-provider.h"
+
+#include "nact-main-window.h"
+#include "nact-menu.h"
+#include "nact-menu-edit.h"
+#include "nact-menu-file.h"
+/* #include "nact-menu-help.h"
+#include "nact-menu-maintainer.h"
+#include "nact-menu-tools.h"
+#include "nact-menu-view.h" */
+#include "nact-preferences-editor.h"
+#include "nact-tree-view.h"
+
+static const gchar *st_ui_actions       = PKGUIDIR "/nautilus-actions-config-tool.actions";
+static const gchar *st_ui_app_menu      = "app-menu";
+static const gchar *st_ui_menubar       = "menubar";
+
+static void on_app_about( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_app_help( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_app_preferences( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_app_quit( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_win_brief_tree_store_dump( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_win_collapse_all( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_win_copy( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_win_cut( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_win_delete( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_win_dump_clipboard( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_win_dump_selection( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_win_duplicate( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_win_expand_all( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_win_export( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_win_import( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_win_list_modified_items( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_win_new_action( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_win_new_menu( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_win_new_profile( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_win_paste( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_win_paste_into( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_win_reload( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_win_save( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+static void on_win_test_function( GSimpleAction *action, GVariant *parameter, gpointer user_data );
+
+/* since the deprecation of GtkAction, I no more know how to display
+ * menu item tooltips - but they have been translated and I don't want
+ * this work to be lost
+ */
+typedef struct {
+       GActionEntry  action_entry;
+       const gchar  *tooltip;
+}
+       sActionEntry;
+
+static sActionEntry st_app_entries[] = {
+               {{ "about", on_app_about, NULL, NULL, NULL },
+                               /* i18n: status bar tooltip displayed on 'About' item navigation */
+                               N_( "Display informations about this program" )},
+               {{ "help", on_app_help, NULL, NULL, NULL },
+                               /* i18n: status bar tooltip displayed on 'Help' item navigation */
+                               N_( "Display help about this program" )},
+               {{ "preferences", on_app_preferences, NULL, NULL, NULL },
+                               /* i18n: status bar tooltip displayed on 'Preferences' item navigation */
+                               N_( "Edit your preferences" )},
+               {{ "quit", on_app_quit, NULL, NULL, NULL },
+                               /* i18n: status bar tooltip displayed on 'Quit' item navigation */
+                               N_( "Quit the application" )},
+};
+
+static sActionEntry st_menubar_entries[] = {
+               {{ "new-menu", on_win_new_menu, NULL, NULL, NULL },
+                               /* i18n: status bar tooltip displayed on 'New menu' item navigation */
+                               N_( "Insert a new menu at the current position" )},
+               {{ "new-action", on_win_new_action, NULL, NULL, NULL },
+                               /* i18n: status bar tooltip displayed on 'New action' item navigation */
+                               N_( "Define a new action" )},
+               {{ "new-profile", on_win_new_profile, NULL, NULL, NULL },
+                               /* i18n: status bar tooltip displayed on 'New profile' item navigation */
+                               N_( "Define a new profile attached to the current action" )},
+               {{ "save", on_win_save, NULL, NULL, NULL },
+                               /* i18n: status bar tooltip displayed on 'Save' item navigation */
+                               N_( "Record all the modified actions. Invalid actions will be silently 
ignored" )},
+               {{ "cut", on_win_cut, NULL, NULL, NULL },
+                               /* i18n: status bar tooltip displayed on 'Cut' item navigation */
+                               N_( "Cut the selected item(s) to the clipboard" )},
+               {{ "copy", on_win_copy, NULL, NULL, NULL },
+                               /* i18n: status bar tooltip displayed on 'Copy' item navigation */
+                               N_( "Copy the selected item(s) to the clipboard" )},
+               {{ "paste", on_win_paste, NULL, NULL, NULL },
+                               /* i18n: status bar tooltip displayed on 'Paste' item navigation */
+                               N_( "Insert the content of the clipboard just before the current position" )},
+               {{ "paste-into", on_win_paste_into, NULL, NULL, NULL },
+                               /* i18n: status bar tooltip displayed on 'Paste into' item navigation */
+                               N_( "Insert the content of the clipboard as first child of the current item" 
)},
+               {{ "duplicate", on_win_duplicate, NULL, NULL, NULL },
+                               /* i18n: status bar tooltip displayed on 'Duplicate' item navigation */
+                               N_( "Duplicate the selected item(s)" )},
+               {{ "delete", on_win_delete, NULL, NULL, NULL },
+                               /* i18n: status bar tooltip displayed on 'Delete' item navigation */
+                               N_( "Delete the selected item(s)" )},
+               {{ "reload", on_win_reload, NULL, NULL, NULL },
+                               /* i18n: status bar tooltip displayed on 'Reload items' item navigation */
+                               N_( "Cancel your current modifications and reload the initial list of menus 
and actions" )},
+               {{ "expand", on_win_expand_all, NULL, NULL, NULL },
+                               /* i18n: status bar tooltip displayed on 'Expand all' item navigation */
+                               N_( "Entirely expand the items hierarchy" )},
+               {{ "collapse", on_win_collapse_all, NULL, NULL, NULL },
+                               /* i18n: status bar tooltip displayed on 'Collapse all' item navigation */
+                               N_( "Entirely collapse the items hierarchy" )},
+               {{ "import", on_win_import, NULL, NULL, NULL },
+                               /* i18n: status bar tooltip displayed on 'Import' item navigation */
+                               N_( "Import one or more actions from external files into your configuration" 
)},
+               {{ "export", on_win_export, NULL, NULL, NULL },
+                               /* i18n: status bar tooltip displayed on 'Export' item navigation */
+                               N_( "Export one or more actions from your configuration to external files" )},
+               {{ "dump-selection", on_win_dump_selection, NULL, NULL, NULL },
+                               "Recursively dump selected items" },
+               {{ "tree-store-dump", on_win_brief_tree_store_dump, NULL, NULL, NULL },
+                               "Briefly dump the tree store" },
+               {{ "list-modified", on_win_list_modified_items, NULL, NULL, NULL },
+                               "List the modified item(s)" },
+               {{ "dump-clipboard", on_win_dump_clipboard, NULL, NULL, NULL },
+                               "Dump the content of the clipboard object" },
+               {{ "fntest", on_win_test_function, NULL, NULL, NULL },
+                               "Test a function (see nact-menubar-maintainer.c" },
+};
+
+static void       free_menu_data( sMenuData *sdata );
+static void       on_open_context_menu( NactTreeView *treeview, GdkEventButton *event, NactMainWindow 
*window );
+static void       on_popup_selection_done( GtkMenuShell *menushell, NactMainWindow *window );
+static void       on_tree_view_count_changed( NactTreeView *treeview, gboolean reset, gint menus, gint 
actions, gint profiles, NactMainWindow *window );
+static void       on_tree_view_focus_in( NactTreeView *treeview, NactMainWindow *window );
+static void       on_tree_view_focus_out( NactTreeView *treeview, NactMainWindow *window );
+static void       on_tree_view_modified_status_changed( NactTreeView *treeview, gboolean is_modified, 
NactMainWindow *window );
+static void       on_tree_view_selection_changed( NactTreeView *treeview, GList *selected, NactMainWindow 
*window );
+static void       on_update_sensitivities( NactMainWindow *window, void *empty );
+
+/**
+ * nact_menu_app:
+ * @application: the #NactApplication.
+ *
+ * Define the application menu and attach it to the application.
+ *
+ * In Gnome-Shell, the application menu is attached to the icon in the
+ * taskbar. Most often, it contains only general options (e.g. About,
+ * Quit, etc.)
+ */
+void
+nact_menu_app( NactApplication *application )
+{
+       static const gchar *thisfn = "nact_menu_app";
+       GError *error;
+       GtkBuilder *builder;
+       GMenuModel *appmenu, *menubar;
+       gint i;
+
+       error = NULL;
+       builder = gtk_builder_new();
+       if( gtk_builder_add_from_file( builder, st_ui_actions, &error )){
+
+               appmenu = G_MENU_MODEL( gtk_builder_get_object( builder, st_ui_app_menu ));
+               if( !appmenu ){
+                       g_warning( "%s: unable to find '%s' object in '%s' file",
+                                       thisfn, st_ui_app_menu, st_ui_actions );
+               } else {
+                       gtk_application_set_app_menu( GTK_APPLICATION( application ), appmenu );
+               }
+
+               menubar = G_MENU_MODEL( gtk_builder_get_object( builder, st_ui_menubar ));
+               if( !menubar ){
+                       g_warning( "%s: unable to find '%s' object in '%s' file",
+                                       thisfn, st_ui_menubar, st_ui_actions );
+               } else {
+                       gtk_application_set_menubar( GTK_APPLICATION( application ), menubar );
+               }
+
+       } else {
+               g_warning( "%s: %s", thisfn, error->message );
+               g_error_free( error );
+       }
+       g_object_unref( builder );
+
+       for( i=0 ; i<G_N_ELEMENTS( st_app_entries ) ; ++i ){
+               g_action_map_add_action_entries(
+                               G_ACTION_MAP( application ),
+                               &st_app_entries[i].action_entry, 1, application );
+       }
+}
+
+/**
+ * nact_menu_win:
+ * @main_window: the #NactMainWindow.
+ *
+ * Define the window menubar and attach it to the main window.
+ */
+void
+nact_menu_win( NactMainWindow *main_window )
+{
+       static const gchar *thisfn = "nact_menu_win";
+       gint i;
+       GtkApplication *application;
+       NactTreeView *treeview;
+       sMenuData *sdata;
+
+       sdata = nact_menu_get_data( main_window );
+
+       for( i=0 ; i<G_N_ELEMENTS( st_menubar_entries ) ; ++i ){
+               g_action_map_add_action_entries(
+                               G_ACTION_MAP( main_window ),
+                               &st_menubar_entries[i].action_entry, 1, main_window );
+       }
+
+       /* initialize the private data
+        */
+       application = gtk_window_get_application( GTK_WINDOW( main_window ));
+       g_return_if_fail( application && NACT_IS_APPLICATION( application ));
+       sdata->updater = nact_application_get_updater( NACT_APPLICATION( application ));
+       sdata->is_level_zero_writable = na_updater_is_level_zero_writable( sdata->updater );
+       sdata->has_writable_providers =
+                       ( na_io_provider_find_writable_io_provider( NA_PIVOT( sdata->updater )) != NULL );
+
+       g_debug( "%s: na_updater_is_level_zero_writable=%s, na_io_provider_find_writable_io_provider=%s",
+                       thisfn,
+                       sdata->is_level_zero_writable ? "True":"False",
+                       sdata->has_writable_providers ? "True":"False" );
+
+       /* connect to all signal which may have an influence on the menu
+        * items sensitivity
+        */
+       treeview = nact_main_window_get_items_view( main_window );
+       g_signal_connect(
+                       treeview, TREE_SIGNAL_CONTEXT_MENU,
+                       G_CALLBACK( on_open_context_menu ), main_window );
+
+       g_signal_connect(
+                       treeview, TREE_SIGNAL_COUNT_CHANGED,
+                       G_CALLBACK( on_tree_view_count_changed ), main_window );
+
+       g_signal_connect(
+                       treeview, TREE_SIGNAL_FOCUS_IN,
+                       G_CALLBACK( on_tree_view_focus_in ), main_window );
+
+       g_signal_connect(
+                       treeview, TREE_SIGNAL_FOCUS_OUT,
+                       G_CALLBACK( on_tree_view_focus_out ), main_window );
+
+       g_signal_connect(
+                       treeview, TREE_SIGNAL_MODIFIED_STATUS_CHANGED,
+                       G_CALLBACK( on_tree_view_modified_status_changed ), main_window );
+
+       g_signal_connect(
+                       treeview, TREE_SIGNAL_SELECTION_CHANGED,
+                       G_CALLBACK( on_tree_view_selection_changed ), main_window );
+
+       sdata->update_sensitivities_handler_id =
+                       g_signal_connect(
+                                       main_window, MAIN_SIGNAL_UPDATE_SENSITIVITIES,
+                                       G_CALLBACK( on_update_sensitivities ), NULL );
+
+       nact_menu_file_initialize( main_window );
+}
+
+static void
+on_app_about( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_APPLICATION( user_data ));
+}
+
+static void
+on_app_help( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_APPLICATION( user_data ));
+}
+
+static void
+on_app_preferences( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       GtkWindow *window;
+
+       g_return_if_fail( user_data && NACT_IS_APPLICATION( user_data ));
+
+       window = gtk_application_get_active_window( GTK_APPLICATION( user_data ));
+       g_return_if_fail( window && NACT_IS_MAIN_WINDOW( window ));
+
+       nact_preferences_editor_run( NACT_MAIN_WINDOW( window ));
+}
+
+static void
+on_app_quit( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       GtkWindow *window;
+
+       g_return_if_fail( user_data && NACT_IS_APPLICATION( user_data ));
+       window = gtk_application_get_active_window( GTK_APPLICATION( user_data ));
+       g_return_if_fail( window && NACT_IS_MAIN_WINDOW( window ));
+       nact_main_window_quit( NACT_MAIN_WINDOW( window ));
+}
+
+/**
+ * nact_menu_get_data:
+ * @main_window: the #NactMainWindow main window.
+ */
+sMenuData *
+nact_menu_get_data( NactMainWindow *main_window )
+{
+       sMenuData *sdata;
+
+       sdata = g_object_get_data( G_OBJECT( main_window ), "menu-data" );
+       if( !sdata ){
+               sdata = g_new0( sMenuData, 1 );
+               g_object_set_data_full( G_OBJECT( main_window ), "menu-data", sdata, ( GDestroyNotify ) 
free_menu_data );
+       }
+
+       return( sdata );
+}
+
+static void
+free_menu_data( sMenuData *sdata )
+{
+       g_free( sdata );
+}
+
+/*
+ * Opens a popup menu.
+ */
+static void
+on_open_context_menu( NactTreeView *treeview, GdkEventButton *event, NactMainWindow *window )
+{
+       sMenuData *sdata;
+
+       sdata = nact_menu_get_data( window );
+
+       sdata->popup_handler = g_signal_connect(
+                       sdata->popup, "selection-done", G_CALLBACK( on_popup_selection_done ), window );
+
+       if( event ){
+               gtk_menu_popup(
+                               GTK_MENU( sdata->popup ), NULL, NULL, NULL, NULL, event->button, event->time 
);
+       } else {
+               gtk_menu_popup(
+                               GTK_MENU( sdata->popup ), NULL, NULL, NULL, NULL, 0, 
gtk_get_current_event_time());
+       }
+}
+
+static void
+on_popup_selection_done( GtkMenuShell *menushell, NactMainWindow *window )
+{
+       static const gchar *thisfn = "nact_menu_on_popup_selection_done";
+       sMenuData *sdata;
+
+       g_debug( "%s", thisfn );
+
+       sdata = nact_menu_get_data( window );
+       g_signal_handler_disconnect( menushell, sdata->popup_handler );
+       sdata->popup_handler = ( gulong ) 0;
+}
+
+/*
+ * when the tree view is refilled, update our internal counters so
+ * that we are knowing if we have some exportables
+ */
+static void
+on_tree_view_count_changed( NactTreeView *treeview, gboolean reset, gint menus, gint actions, gint profiles, 
NactMainWindow *window )
+{
+       static const gchar *thisfn = "nact_menu_on_tree_view_count_changed";
+       sMenuData *sdata;
+       NactStatusbar *bar;
+       gchar *status;
+
+       g_debug( "%s: treeview=%p, reset=%s, menus=%d, actions=%d, profiles=%d, window=%p",
+                       thisfn, ( void * ) treeview,
+                       reset ? "True":"False", menus, actions, profiles, ( void * ) window );
+
+       sdata = nact_menu_get_data( window );
+
+       if( reset ){
+               sdata->count_menus = menus;
+               sdata->count_actions = actions;
+               sdata->count_profiles = profiles;
+
+       } else {
+               sdata->count_menus += menus;
+               sdata->count_actions += actions;
+               sdata->count_profiles += profiles;
+       }
+
+       sdata->have_exportables = ( sdata->count_menus + sdata->count_actions > 0 );
+
+       /* i18n: note the space at the beginning of the sentence */
+       status = g_strdup_printf(
+                       _( " %d menu(s), %d action(s), %d profile(s) are currently loaded" ),
+                       sdata->count_menus, sdata->count_actions, sdata->count_profiles );
+
+       bar = nact_main_window_get_statusbar( window );
+       nact_statusbar_display_status( bar, "menu-status-context", status );
+       g_free( status );
+
+       g_signal_emit_by_name( window, MAIN_SIGNAL_UPDATE_SENSITIVITIES );
+}
+
+static void
+on_tree_view_focus_in( NactTreeView *treeview, NactMainWindow *window )
+{
+       sMenuData *sdata;
+
+       sdata = nact_menu_get_data( window );
+
+       sdata->treeview_has_focus = TRUE;
+       g_signal_emit_by_name( window, MAIN_SIGNAL_UPDATE_SENSITIVITIES );
+}
+
+static void
+on_tree_view_focus_out( NactTreeView *treeview, NactMainWindow *window )
+{
+       sMenuData *sdata;
+
+       sdata = nact_menu_get_data( window );
+
+       sdata->treeview_has_focus = FALSE;
+       g_signal_emit_by_name( window, MAIN_SIGNAL_UPDATE_SENSITIVITIES );
+}
+
+/*
+ * the count of modified NAObjectItem has changed
+ */
+static void
+on_tree_view_modified_status_changed( NactTreeView *treeview, gboolean is_modified, NactMainWindow *window )
+{
+       static const gchar *thisfn = "nact_menu_on_tree_view_modified_status_changed";
+       sMenuData *sdata;
+
+       g_debug( "%s: treeview=%p, is_modified=%s, window=%p",
+                       thisfn, ( void * ) treeview, is_modified ? "True":"False", ( void * ) window );
+
+       sdata = nact_menu_get_data( window );
+
+       sdata->is_tree_modified = is_modified;
+       g_signal_emit_by_name( window, MAIN_SIGNAL_UPDATE_SENSITIVITIES );
+}
+
+/*
+ * when the selection changes in the tree view, see what is selected
+ *
+ * It happens that this function is triggered after all tabs have already
+ * dealt with the TREE_SIGNAL_SELECTION_CHANGED signal
+ *
+ * We are trying to precompute here all indicators which are needed to
+ * make actions sensitive. As a multiple selection may have multiple
+ * sort of indicators, we assure here that at least one item will be a
+ * valid candidate to the target action, the action taking care itself
+ * of applying to valid candidates, and rejecting the others.
+ */
+static void
+on_tree_view_selection_changed( NactTreeView *treeview, GList *selected, NactMainWindow *window )
+{
+       static const gchar *thisfn = "nact_menu_on_tree_view_selection_changed";
+       sMenuData *sdata;
+       NAObject *first;
+       NAObject *selected_action;
+       NAObject *row, *parent;
+       GList *is;
+
+       g_debug( "%s: treeview=%p, selected_items=%p (count=%d), window=%p",
+                       thisfn, ( void * ) treeview,
+                       ( void * ) selected, g_list_length( selected ), ( void * ) window );
+
+       sdata = nact_menu_get_data( window );
+
+       /* count the items
+        */
+       sdata->count_selected = g_list_length( selected );
+
+       if( selected ){
+               na_object_item_count_items( selected, &sdata->selected_menus, &sdata->selected_actions, 
&sdata->selected_profiles, FALSE );
+               g_debug( "%s: selected_menus=%d, selected_actions=%d, selected_profiles=%d",
+                               thisfn,
+                               sdata->selected_menus, sdata->selected_actions, sdata->selected_profiles );
+       }
+
+       /* take a ref of the list of selected items
+        */
+       if( sdata->selected_items ){
+               g_list_free( sdata->selected_items );
+       }
+       sdata->selected_items = g_list_copy( selected );
+
+       /* check if the parent of the first selected item is writable
+        * (File: New menu/New action)
+        * (Edit: Paste menu or action)
+        */
+       first = NULL;
+       if( selected ){
+               first = ( NAObject *) selected->data;
+               if( NA_IS_OBJECT_PROFILE( first )){
+                       first = NA_OBJECT( na_object_get_parent( first ));
+               }
+               first = ( NAObject * ) na_object_get_parent( first );
+       }
+       if( first ){
+               sdata->is_parent_writable = na_object_is_finally_writable( first, NULL );
+               g_debug( "%s: parent of first selected is not null: is_parent_writable=%s",
+                               thisfn, sdata->is_parent_writable ? "True":"False" );
+       } else {
+               sdata->is_parent_writable = sdata->is_level_zero_writable;
+               g_debug( "%s: first selected is at level zero: is_level_zero_writable=%s",
+                               thisfn, sdata->is_level_zero_writable ? "True":"False" );
+       }
+
+       /* check is only an action is selected, or only profile(s) of a same action
+        * (File: New profile)
+        * (Edit: Paste a profile)
+        */
+       sdata->enable_new_profile = TRUE;
+       selected_action = NULL;
+       for( is = selected ; is ; is = is->next ){
+
+               if( NA_IS_OBJECT_MENU( is->data )){
+                       sdata->enable_new_profile = FALSE;
+                       break;
+
+               } else if( NA_IS_OBJECT_ACTION( is->data )){
+                       if( !selected_action ){
+                               selected_action = NA_OBJECT( is->data );
+                       } else {
+                               sdata->enable_new_profile = FALSE;
+                               break;
+                       }
+
+               } else if( NA_IS_OBJECT_PROFILE( is->data )){
+                       first = NA_OBJECT( na_object_get_parent( is->data ));
+                       if( !selected_action ){
+                               selected_action = first;
+                       } else if( selected_action != first ){
+                               sdata->enable_new_profile = FALSE;
+                               break;
+                       }
+               }
+       }
+       if( selected_action ){
+               sdata->is_action_writable = na_object_is_finally_writable( selected_action, NULL );
+       } else {
+               sdata->enable_new_profile = FALSE;
+       }
+
+       /* check that selection is not empty and that each selected item is writable
+        * and that all parents are writable
+        * if some selection is at level zero, then it must be writable
+        * (Edit: Cut/Delete)
+        */
+       if( selected ){
+               sdata->are_parents_writable = TRUE;
+               sdata->are_items_writable = TRUE;
+               for( is = selected ; is ; is = is->next ){
+                       row = ( NAObject * ) is->data;
+                       if( NA_IS_OBJECT_PROFILE( row )){
+                               row = NA_OBJECT( na_object_get_parent( row ));
+                       }
+                       gchar *label = na_object_get_label( row );
+                       gboolean writable = na_object_is_finally_writable( row, NULL );
+                       g_debug( "%s: label=%s, writable=%s", thisfn, label, writable ? "True":"False" );
+                       g_free( label );
+                       sdata->are_items_writable &= writable;
+                       parent = ( NAObject * ) na_object_get_parent( row );
+                       if( parent ){
+                               sdata->are_parents_writable &= na_object_is_finally_writable( parent, NULL );
+                       } else {
+                               sdata->are_parents_writable &= sdata->is_level_zero_writable;
+                       }
+               }
+       }
+
+       g_signal_emit_by_name( window, MAIN_SIGNAL_UPDATE_SENSITIVITIES );
+}
+
+static void
+on_update_sensitivities( NactMainWindow *window, void *empty )
+{
+       static const gchar *thisfn = "nact_menu_on_update_sensitivities";
+
+       g_debug( "%s: window=%p, empty=%p", thisfn, ( void * ) window, empty );
+
+       nact_menu_file_update_sensitivities( window );
+       nact_menu_edit_update_sensitivities( window );
+       /*nact_menu_view_update_sensitivities( window );
+       nact_menu_tools_update_sensitivities( window );
+       nact_menu_maintainer_update_sensitivities( window );
+       nact_menu_help_update_sensitivities( window );*/
+}
+
+static void
+on_win_brief_tree_store_dump( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_MAIN_WINDOW( user_data ));
+}
+
+static void
+on_win_collapse_all( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_MAIN_WINDOW( user_data ));
+}
+
+static void
+on_win_copy( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_MAIN_WINDOW( user_data ));
+       nact_menu_edit_copy( NACT_MAIN_WINDOW( user_data ));
+}
+
+static void
+on_win_cut( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_MAIN_WINDOW( user_data ));
+       nact_menu_edit_cut( NACT_MAIN_WINDOW( user_data ));
+}
+
+static void
+on_win_delete( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_MAIN_WINDOW( user_data ));
+       nact_menu_edit_delete( NACT_MAIN_WINDOW( user_data ));
+}
+
+static void
+on_win_dump_clipboard( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_MAIN_WINDOW( user_data ));
+}
+
+static void
+on_win_dump_selection( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_MAIN_WINDOW( user_data ));
+}
+
+static void
+on_win_duplicate( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_MAIN_WINDOW( user_data ));
+       nact_menu_edit_duplicate( NACT_MAIN_WINDOW( user_data ));
+}
+
+static void
+on_win_expand_all( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_MAIN_WINDOW( user_data ));
+}
+
+static void
+on_win_export( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_MAIN_WINDOW( user_data ));
+}
+
+static void
+on_win_import( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_MAIN_WINDOW( user_data ));
+}
+
+static void
+on_win_list_modified_items( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_MAIN_WINDOW( user_data ));
+}
+
+static void
+on_win_new_action( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_MAIN_WINDOW( user_data ));
+}
+
+static void
+on_win_new_menu( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_MAIN_WINDOW( user_data ));
+}
+
+static void
+on_win_new_profile( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_MAIN_WINDOW( user_data ));
+}
+
+static void
+on_win_paste( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_MAIN_WINDOW( user_data ));
+       nact_menu_edit_paste( NACT_MAIN_WINDOW( user_data ));
+}
+
+static void
+on_win_paste_into( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_MAIN_WINDOW( user_data ));
+       nact_menu_edit_paste_into( NACT_MAIN_WINDOW( user_data ));
+}
+
+static void
+on_win_reload( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_MAIN_WINDOW( user_data ));
+       nact_main_window_reload( NACT_MAIN_WINDOW( user_data ));
+}
+
+static void
+on_win_save( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_MAIN_WINDOW( user_data ));
+       nact_menu_file_save_items( NACT_MAIN_WINDOW( user_data ));
+}
+
+static void
+on_win_test_function( GSimpleAction *action, GVariant *parameter, gpointer user_data )
+{
+       g_return_if_fail( user_data && NACT_IS_MAIN_WINDOW( user_data ));
+}
+
+/**
+ * nact_menu_enable_item:
+ * @main_window: this #NactMainWindow main window.
+ * @name: the name of the item in a menu.
+ * @enabled: whether this item should be enabled or not.
+ *
+ * Enable/disable an item in an menu.
+ */
+void
+nact_menu_enable_item( NactMainWindow *main_window, const gchar *name, gboolean enabled )
+{
+       GAction *action;
+
+       action = g_action_map_lookup_action( G_ACTION_MAP( main_window ), name );
+       g_simple_action_set_enabled( G_SIMPLE_ACTION( action ), enabled );
+}
diff --git a/src/nact/nact-menu.h b/src/nact/nact-menu.h
new file mode 100644
index 0000000..fafa3f9
--- /dev/null
+++ b/src/nact/nact-menu.h
@@ -0,0 +1,108 @@
+/*
+ * Nautilus-Actions
+ * A Nautilus extension which offers configurable context menu actions.
+ *
+ * Copyright (C) 2005 The GNOME Foundation
+ * Copyright (C) 2006-2008 Frederic Ruaudel and others (see AUTHORS)
+ * Copyright (C) 2009-2014 Pierre Wieser and others (see AUTHORS)
+ *
+ * Nautilus-Actions is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * Nautilus-Actions is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Nautilus-Actions; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ *   Frederic Ruaudel <grumz grumz net>
+ *   Rodrigo Moya <rodrigo gnome-db org>
+ *   Pierre Wieser <pwieser trychlos org>
+ *   ... and many others (see AUTHORS)
+ */
+
+#ifndef __NACT_MENU_H__
+#define __NACT_MENU_H__
+
+/*
+ * SECTION: nact-menu
+ * @title: NactMenu
+ * @short_description: The menu helpers functions
+ * @include: nact-menu.h
+ */
+
+#include "core/na-updater.h"
+
+#include "nact-application.h"
+#include "nact-main-window-def.h"
+
+G_BEGIN_DECLS
+
+typedef struct {
+
+       /* set at initialization time
+        */
+       gulong          update_sensitivities_handler_id;
+       NAUpdater  *updater;
+       GMenuModel *maintainer;
+       GMenuModel *popup;
+       gboolean    is_level_zero_writable;
+       gboolean    has_writable_providers;
+
+       /* set when the selection changes
+        */
+       guint       count_selected;
+       GList      *selected_items;
+       gboolean    is_parent_writable;         /* new menu/new action/paste menu or action */
+       gboolean    enable_new_profile;         /* new profile/paste a profile */
+       gboolean    is_action_writable;
+       gboolean    are_parents_writable;       /* duplicate */
+       gboolean    are_items_writable;         /* cut/delete */
+
+       /* set when the count of modified or deleted NAObjectItem changes
+        * or when the level zero is changed
+        */
+       gboolean    is_tree_modified;
+
+       /* set on focus in/out
+        */
+       gboolean    treeview_has_focus;
+
+       /* opening a contextual popup menu
+        */
+       gulong      popup_handler;
+
+       /* set when total count of items changes
+        */
+       gint        count_menus;
+       gint        count_actions;
+       gint        count_profiles;
+       gboolean    have_exportables;
+       gint        selected_menus;
+       gint        selected_actions;
+       gint        selected_profiles;
+       gint        clipboard_menus;
+       gint        clipboard_actions;
+       gint        clipboard_profiles;
+}
+       sMenuData;
+
+void       nact_menu_app        ( NactApplication *application );
+
+void       nact_menu_win        ( NactMainWindow *main_window );
+
+void       nact_menu_enable_item( NactMainWindow *main_window,
+                                                                               const gchar *action_name,
+                                                                               gboolean enable );
+
+sMenuData *nact_menu_get_data   ( NactMainWindow *main_window );
+
+G_END_DECLS
+
+#endif /* __NACT_MENU_H__ */
diff --git a/src/nact/nact-preferences-editor.c b/src/nact/nact-preferences-editor.c
index d7d7423..144e66f 100644
--- a/src/nact/nact-preferences-editor.c
+++ b/src/nact/nact-preferences-editor.c
@@ -48,6 +48,7 @@
 
 #include "nact-application.h"
 #include "base-gtk-utils.h"
+#include "nact-main-window.h"
 #include "nact-schemes-list.h"
 #include "nact-providers-list.h"
 #include "nact-preferences-editor.h"
@@ -117,7 +118,7 @@ enum {
  *       and prefers rely on the runtime detection */
 static const NADesktopEnv st_no_desktop     = { "None", N_( "Rely on runtime detection" ) };
 
-static const gchar       *st_xmlui_filename = PKGUIDIR "/nact-preferences.ui";
+#define                   st_xmlui_filename   PKGUIDIR "/nact-preferences.ui"
 static const gchar       *st_toplevel_name  = "PreferencesDialog";
 static const gchar       *st_wsp_name       = NA_IPREFS_PREFERENCES_WSP;
 
@@ -231,8 +232,6 @@ class_init( NactPreferencesEditorClass *klass )
        object_class->dispose = instance_dispose;
        object_class->finalize = instance_finalize;
 
-       klass->private = g_new0( NactPreferencesEditorClassPrivate, 1 );
-
        dialog_class = BASE_DIALOG_CLASS( klass );
        dialog_class->ok = on_dialog_ok;
 }
@@ -431,25 +430,24 @@ instance_finalize( GObject *dialog )
 
 /**
  * nact_preferences_editor_run:
- * @parent: the BaseWindow parent of this dialog
- * (usually the NactMainWindow).
+ * @parent: the NactMainWindow main window
  *
  * Initializes and runs the dialog.
  */
 void
-nact_preferences_editor_run( BaseWindow *parent )
+nact_preferences_editor_run( NactMainWindow *parent )
 {
        static const gchar *thisfn = "nact_preferences_editor_run";
        NactPreferencesEditor *editor;
        gboolean are_locked, mandatory;
        GtkNotebook *notebook;
 
-       g_return_if_fail( BASE_IS_WINDOW( parent ));
+       g_return_if_fail( parent && NACT_IS_MAIN_WINDOW( parent ));
 
        g_debug( "%s: parent=%p (%s)", thisfn, ( void * ) parent, G_OBJECT_TYPE_NAME( parent ));
 
        editor = g_object_new( NACT_TYPE_PREFERENCES_EDITOR,
-                                       BASE_PROP_PARENT,          parent,
+                                       BASE_PROP_MAIN_WINDOW,     parent,
                                        BASE_PROP_XMLUI_FILENAME,  st_xmlui_filename,
                                        /*
                                         * having our own builder let us, e.g., set a weak reference on
diff --git a/src/nact/nact-preferences-editor.h b/src/nact/nact-preferences-editor.h
index 8166f9d..1c7236c 100644
--- a/src/nact/nact-preferences-editor.h
+++ b/src/nact/nact-preferences-editor.h
@@ -40,6 +40,7 @@
  */
 
 #include "base-dialog.h"
+#include "nact-main-window-def.h"
 
 G_BEGIN_DECLS
 
@@ -59,18 +60,15 @@ typedef struct {
 }
        NactPreferencesEditor;
 
-typedef struct _NactPreferencesEditorClassPrivate   NactPreferencesEditorClassPrivate;
-
 typedef struct {
        /*< private >*/
-       BaseDialogClass                    parent;
-       NactPreferencesEditorClassPrivate *private;
+       BaseDialogClass               parent;
 }
        NactPreferencesEditorClass;
 
 GType nact_preferences_editor_get_type( void );
 
-void  nact_preferences_editor_run     ( BaseWindow *parent );
+void  nact_preferences_editor_run     ( NactMainWindow *main_window );
 
 G_END_DECLS
 
diff --git a/src/nact/nact-sort-buttons.c b/src/nact/nact-sort-buttons.c
index d1ccbc8..a72ca61 100644
--- a/src/nact/nact-sort-buttons.c
+++ b/src/nact/nact-sort-buttons.c
@@ -31,26 +31,21 @@
 #include <config.h>
 #endif
 
-#include <core/na-iprefs.h>
-#include <core/na-updater.h>
+#include "core/na-gtk-utils.h"
+#include "core/na-iprefs.h"
+#include "core/na-updater.h"
 
 #include "nact-application.h"
+#include "nact-main-window.h"
 #include "nact-sort-buttons.h"
 #include "nact-tree-view.h"
 
-/* private class data
- */
-struct _NactSortButtonsClassPrivate {
-       void *empty;                                            /* so that gcc -pedantic is happy */
-};
-
 struct _NactSortButtonsPrivate {
-       gboolean    dispose_has_run;
-       BaseWindow *window;
-       NAUpdater  *updater;
-       gboolean    toggling;
-       gint        active;
-       guint       count_items;
+       gboolean        dispose_has_run;
+       NAUpdater      *updater;
+       gboolean        toggling;
+       gint            active;
+       guint           count_items;
 };
 
 typedef struct {
@@ -67,8 +62,6 @@ static ToggleGroup st_toggle_group [] = {
                { NULL }
 };
 
-#define WINDOW_DATA_SORT_BUTTONS                               "window-data-sort-buttons"
-
 static GObjectClass *st_parent_class = NULL;
 
 static GType register_type( void );
@@ -76,12 +69,10 @@ static void  class_init( NactSortButtonsClass *klass );
 static void  instance_init( GTypeInstance *instance, gpointer klass );
 static void  instance_dispose( GObject *application );
 static void  instance_finalize( GObject *application );
-
-static void  on_base_initialize_buttons( BaseWindow *window, gpointer user_data );
-static void  on_toggle_button_toggled( GtkToggleButton *button, BaseWindow *window );
+static void  initialize_buttons( NactSortButtons *buttons, NactMainWindow *window );
+static void  on_toggle_button_toggled( GtkToggleButton *button, NactSortButtons *buttons );
 static void  on_settings_order_mode_changed( const gchar *group, const gchar *key, gconstpointer new_value, 
gboolean mandatory, NactSortButtons *sort_buttons );
-static void  on_tree_view_count_changed( BaseWindow *window, gboolean reset, gint menus_count, gint 
actions_count, gint profiles_count, gpointer user_data );
-
+static void  on_tree_view_count_changed( NactTreeView *treeview, gboolean reset, gint menus_count, gint 
actions_count, gint profiles_count, NactSortButtons *sort_buttons );
 static void  enable_buttons( const NactSortButtons *sort_buttons, gboolean enabled );
 static gint  toggle_group_get_from_mode( guint mode );
 static gint  toggle_group_get_from_button( GtkToggleButton *toggled_button );
@@ -136,8 +127,6 @@ class_init( NactSortButtonsClass *klass )
        object_class = G_OBJECT_CLASS( klass );
        object_class->dispose = instance_dispose;
        object_class->finalize = instance_finalize;
-
-       klass->private = g_new0( NactSortButtonsClassPrivate, 1 );
 }
 
 static void
@@ -210,31 +199,26 @@ instance_finalize( GObject *instance )
  * Returns: a new #NactSortButtons object.
  */
 NactSortButtons *
-nact_sort_buttons_new( BaseWindow *window )
+nact_sort_buttons_new( NactMainWindow *window )
 {
        NactSortButtons *obj;
-       NactApplication *application;
+       GtkApplication *application;
 
-       g_return_val_if_fail( BASE_IS_WINDOW( window ), NULL );
+       g_return_val_if_fail( window && NACT_IS_MAIN_WINDOW( window ), NULL );
+       application = gtk_window_get_application( GTK_WINDOW( window ));
+       g_return_val_if_fail( application && NACT_IS_APPLICATION( application ), NULL );
 
        obj = g_object_new( NACT_TYPE_SORT_BUTTONS, NULL );
+       obj->private->updater = nact_application_get_updater( NACT_APPLICATION( application ));
 
-       base_window_signal_connect( window,
-                       G_OBJECT( window ), BASE_SIGNAL_INITIALIZE_WINDOW, G_CALLBACK( 
on_base_initialize_buttons ));
-
-       g_object_set_data( G_OBJECT( window ), WINDOW_DATA_SORT_BUTTONS, obj );
-
-       obj->private->window = window;
-
-       application = NACT_APPLICATION( base_window_get_application( window ));
-       obj->private->updater = nact_application_get_updater( application );
+       initialize_buttons( obj, window );
 
        return( obj );
 }
 
 /*
- * on_base_initialize_buttons:
- * @window: the #BaseWindow.
+ * initialize_buttons:
+ * @window: the #NactMainWindow.
  *
  * Initialization of the UI each time it is displayed.
  *
@@ -244,75 +228,68 @@ nact_sort_buttons_new( BaseWindow *window )
  * - enabled (sensitive) if sort order mode is modifiable.
  */
 static void
-on_base_initialize_buttons( BaseWindow *window, gpointer user_data )
+initialize_buttons( NactSortButtons *buttons, NactMainWindow *window )
 {
-       static const gchar *thisfn = "nact_sort_buttons_on_base_initialize_buttons";
-       NactSortButtons *sort_buttons;
+       NactTreeView *treeview;
        gint i;
 
-       g_return_if_fail( BASE_IS_WINDOW( window ));
-
-       g_debug( "%s: window=%p, user_data=%p", thisfn, ( void * ) window, ( void * ) user_data );
-
-       base_window_signal_connect( window,
-                       G_OBJECT( window ), TREE_SIGNAL_COUNT_CHANGED, G_CALLBACK( on_tree_view_count_changed 
));
-
-       sort_buttons = NACT_SORT_BUTTONS( g_object_get_data( G_OBJECT( window ), WINDOW_DATA_SORT_BUTTONS ));
+       treeview = nact_main_window_get_items_view( window );
+       g_signal_connect(
+                       treeview, TREE_SIGNAL_COUNT_CHANGED,
+                       G_CALLBACK( on_tree_view_count_changed ), buttons );
 
        for( i = 0 ; st_toggle_group[i].btn_name ; ++i ){
                st_toggle_group[i].button =
-                               GTK_TOGGLE_BUTTON( base_window_get_widget( window, 
st_toggle_group[i].btn_name ));
-               base_window_signal_connect( window,
-                               G_OBJECT( st_toggle_group[i].button ), "toggled", G_CALLBACK( 
on_toggle_button_toggled ));
+                               GTK_TOGGLE_BUTTON(
+                                               na_gtk_utils_find_widget_by_name(
+                                                               GTK_CONTAINER( window ), 
st_toggle_group[i].btn_name ));
+               g_signal_connect(
+                               st_toggle_group[i].button, "toggled",
+                               G_CALLBACK( on_toggle_button_toggled ), buttons );
        }
 
        na_settings_register_key_callback(
-                       NA_IPREFS_ITEMS_LIST_ORDER_MODE, G_CALLBACK( on_settings_order_mode_changed ), 
sort_buttons );
+                       NA_IPREFS_ITEMS_LIST_ORDER_MODE, G_CALLBACK( on_settings_order_mode_changed ), 
buttons );
 
        /* for now, disable the sort buttons
         * they will be enabled as soon as we receive the count of displayed items
         */
-       enable_buttons( sort_buttons, FALSE );
+       enable_buttons( buttons, FALSE );
 }
 
 /*
  * if the user re-clicks on the already active buttons, reset it active
  */
 static void
-on_toggle_button_toggled( GtkToggleButton *toggled_button, BaseWindow *window )
+on_toggle_button_toggled( GtkToggleButton *toggled_button, NactSortButtons *buttons )
 {
-       NactSortButtons *sort_buttons;
+       NactSortButtonsPrivate *priv;
        gint i, ibtn;
 
-       g_return_if_fail( BASE_IS_WINDOW( window ));
+       priv = buttons->private;
 
-       sort_buttons = NACT_SORT_BUTTONS( g_object_get_data( G_OBJECT( window ), WINDOW_DATA_SORT_BUTTONS ));
+       if( !priv->toggling ){
 
-       if( !sort_buttons->private->dispose_has_run ){
-               if( !sort_buttons->private->toggling ){
+               priv->toggling = TRUE;
+               ibtn = toggle_group_get_from_button( toggled_button );
 
-                       sort_buttons->private->toggling = TRUE;
-                       ibtn = toggle_group_get_from_button( toggled_button );
-
-                       /* the user re-clicks on the already active button
-                        * do not let it becomes false, but keep it active
-                        */
-                       if( ibtn == sort_buttons->private->active ){
-                               gtk_toggle_button_set_active( st_toggle_group[ibtn].button, TRUE );
+               /* the user re-clicks on the already active button
+                * do not let it becomes false, but keep it active */
+               if( ibtn == priv->active ){
+                       gtk_toggle_button_set_active( st_toggle_group[ibtn].button, TRUE );
 
-                       /* reset all buttons to false, then the clicked one to active
-                        */
-                       } else {
-                               for( i = 0 ; st_toggle_group[i].btn_name ; ++i ){
-                                       gtk_toggle_button_set_active( st_toggle_group[i].button, FALSE );
-                               }
-                               gtk_toggle_button_set_active( toggled_button, TRUE );
-                               sort_buttons->private->active = ibtn;
-                               na_iprefs_set_order_mode( st_toggle_group[ibtn].order_mode );
+               /* reset all buttons to false, then the clicked one to active
+                */
+               } else {
+                       for( i = 0 ; st_toggle_group[i].btn_name ; ++i ){
+                               gtk_toggle_button_set_active( st_toggle_group[i].button, FALSE );
                        }
-
-                       sort_buttons->private->toggling = FALSE;
+                       gtk_toggle_button_set_active( toggled_button, TRUE );
+                       priv->active = ibtn;
+                       na_iprefs_set_order_mode( st_toggle_group[ibtn].order_mode );
                }
+
+               priv->toggling = FALSE;
        }
 }
 
@@ -331,13 +308,16 @@ static void
 on_settings_order_mode_changed( const gchar *group, const gchar *key, gconstpointer new_value, gboolean 
mandatory, NactSortButtons *sort_buttons )
 {
        static const gchar *thisfn = "nact_sort_buttons_on_settings_order_mode_changed";
+       NactSortButtonsPrivate *priv;
        const gchar *order_mode_str;
        guint order_mode;
        gint ibtn;
 
        g_return_if_fail( NACT_IS_SORT_BUTTONS( sort_buttons ));
 
-       if( !sort_buttons->private->dispose_has_run ){
+       priv = sort_buttons->private;
+
+       if( !priv->dispose_has_run ){
 
                order_mode_str = ( const gchar * ) new_value;
                order_mode = na_iprefs_get_order_mode_by_label( order_mode_str );
@@ -349,35 +329,33 @@ on_settings_order_mode_changed( const gchar *group, const gchar *key, gconstpoin
                ibtn = toggle_group_get_from_mode( order_mode );
                g_return_if_fail( ibtn >= 0 );
 
-               if( sort_buttons->private->active == -1 || ibtn != sort_buttons->private->active ){
-                       sort_buttons->private->active = ibtn;
+               if( priv->active == -1 || ibtn != priv->active ){
+                       priv->active = ibtn;
                        gtk_toggle_button_set_active( st_toggle_group[ibtn].button, TRUE );
                }
        }
 }
 
 static void
-on_tree_view_count_changed( BaseWindow *window, gboolean reset, gint menus_count, gint actions_count, gint 
profiles_count, gpointer user_data )
+on_tree_view_count_changed( NactTreeView *treeview, gboolean reset, gint menus_count, gint actions_count, 
gint profiles_count, NactSortButtons *buttons )
 {
        static const gchar *thisfn = "nact_sort_buttons_on_tree_view_count_changed";
-       NactSortButtons *sort_buttons;
-
-       g_return_if_fail( BASE_IS_WINDOW( window ));
+       NactSortButtonsPrivate *priv;
 
-       sort_buttons = NACT_SORT_BUTTONS( g_object_get_data( G_OBJECT( window ), WINDOW_DATA_SORT_BUTTONS ));
+       priv = buttons->private;
 
-       if( !sort_buttons->private->dispose_has_run ){
-               g_debug( "%s: window=%p, reset=%s, nb_menus=%d, nb_actions=%d, nb_profiles=%d, user_data=%p",
-                               thisfn, ( void * ) window, reset ? "True":"False",
-                                               menus_count, actions_count, profiles_count, ( void * ) 
user_data );
+       if( !priv->dispose_has_run ){
+               g_debug( "%s: treeview=%p, reset=%s, nb_menus=%d, nb_actions=%d, nb_profiles=%d, buttons=%p",
+                               thisfn, ( void * ) treeview, reset ? "True":"False",
+                                               menus_count, actions_count, profiles_count, ( void * ) 
buttons );
 
                if( reset ){
-                       sort_buttons->private->count_items = menus_count + actions_count;
+                       priv->count_items = menus_count + actions_count;
                } else {
-                       sort_buttons->private->count_items += menus_count + actions_count;
+                       priv->count_items += menus_count + actions_count;
                }
 
-               enable_buttons( sort_buttons, sort_buttons->private->count_items > 0 );
+               enable_buttons( buttons, priv->count_items > 0 );
        }
 
 }
@@ -385,21 +363,23 @@ on_tree_view_count_changed( BaseWindow *window, gboolean reset, gint menus_count
 static void
 enable_buttons( const NactSortButtons *sort_buttons, gboolean enabled )
 {
+       NactSortButtonsPrivate *priv;
        gboolean level_zero_writable;
        gboolean preferences_locked;
        gboolean finally_enabled;
        gint i;
        guint order_mode;
 
-       level_zero_writable = na_updater_is_level_zero_writable( sort_buttons->private->updater );
-       preferences_locked = na_updater_are_preferences_locked( sort_buttons->private->updater );
+       priv = sort_buttons->private;
+       level_zero_writable = na_updater_is_level_zero_writable( priv->updater );
+       preferences_locked = na_updater_are_preferences_locked( priv->updater );
        finally_enabled = level_zero_writable && !preferences_locked && enabled;
 
        for( i=0 ; st_toggle_group[i].btn_name ; ++i ){
                gtk_widget_set_sensitive( GTK_WIDGET( st_toggle_group[i].button ), finally_enabled );
        }
 
-       if( finally_enabled && sort_buttons->private->active == -1 ){
+       if( finally_enabled && priv->active == -1 ){
                order_mode = na_iprefs_get_order_mode( NULL );
                i = toggle_group_get_from_mode( order_mode );
                gtk_toggle_button_set_active( st_toggle_group[i].button, TRUE );
diff --git a/src/nact/nact-sort-buttons.h b/src/nact/nact-sort-buttons.h
index e8f80f2..8d4b075 100644
--- a/src/nact/nact-sort-buttons.h
+++ b/src/nact/nact-sort-buttons.h
@@ -48,7 +48,7 @@
  * - sort order mode is not a mandatory preference.
  */
 
-#include "base-window.h"
+#include "nact-main-window-def.h"
 
 G_BEGIN_DECLS
 
@@ -68,17 +68,15 @@ typedef struct {
 }
        NactSortButtons;
 
-typedef struct _NactSortButtonsClassPrivate   NactSortButtonsClassPrivate;
-
 typedef struct {
        /*< private >*/
-       GObjectClass                 parent;
-       NactSortButtonsClassPrivate *private;
+       GObjectClass            parent;
 }
        NactSortButtonsClass;
 
 GType            nact_sort_buttons_get_type( void );
-NactSortButtons *nact_sort_buttons_new     ( BaseWindow *window );
+
+NactSortButtons *nact_sort_buttons_new     ( NactMainWindow *window );
 
 G_END_DECLS
 
diff --git a/src/nact/nact-statusbar.c b/src/nact/nact-statusbar.c
new file mode 100644
index 0000000..5ffecba
--- /dev/null
+++ b/src/nact/nact-statusbar.c
@@ -0,0 +1,343 @@
+/*
+ * Nautilus-Actions
+ * A Nautilus extension which offers configurable context menu actions.
+ *
+ * Copyright (C) 2005 The GNOME Foundation
+ * Copyright (C) 2006-2008 Frederic Ruaudel and others (see AUTHORS)
+ * Copyright (C) 2009-2014 Pierre Wieser and others (see AUTHORS)
+ *
+ * Nautilus-Actions is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * Nautilus-Actions is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Nautilus-Actions; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ *   Frederic Ruaudel <grumz grumz net>
+ *   Rodrigo Moya <rodrigo gnome-db org>
+ *   Pierre Wieser <pwieser trychlos org>
+ *   ... and many others (see AUTHORS)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "core/na-gtk-utils.h"
+#include "core/na-io-provider.h"
+
+#include "base-gtk-utils.h"
+#include "nact-statusbar.h"
+
+struct _NactStatusbarPrivate {
+       gboolean   dispose_has_run;
+       GtkWidget *image;
+};
+
+typedef struct {
+       guint          event_source_id;
+       guint          context_id;
+       NactStatusbar *bar;
+}
+       StatusbarTimeoutDisplayStruct;
+
+#define LOCKED_IMAGE                                   PKGUIDIR "/locked.png"
+
+static GObjectClass *st_parent_class    = NULL;
+
+static GType    register_type( void );
+static void     class_init( NactStatusbarClass *klass );
+static void     instance_init( GTypeInstance *instance, gpointer klass );
+static void     instance_dispose( GObject *application );
+static void     instance_finalize( GObject *application );
+static void     init_bar( NactStatusbar *bar );
+static gboolean display_timeout( StatusbarTimeoutDisplayStruct *stds );
+static void     display_timeout_free( StatusbarTimeoutDisplayStruct *stds );
+
+GType
+nact_statusbar_get_type( void )
+{
+       static GType type = 0;
+
+       if( !type ){
+               type = register_type();
+       }
+
+       return( type );
+}
+
+static GType
+register_type( void )
+{
+       static const gchar *thisfn = "nact_statusbar_register_type";
+       GType type;
+
+       static GTypeInfo info = {
+               sizeof( NactStatusbarClass ),
+               ( GBaseInitFunc ) NULL,
+               ( GBaseFinalizeFunc ) NULL,
+               ( GClassInitFunc ) class_init,
+               NULL,
+               NULL,
+               sizeof( NactStatusbar ),
+               0,
+               ( GInstanceInitFunc ) instance_init
+       };
+
+       g_debug( "%s", thisfn );
+
+       type = g_type_register_static( GTK_TYPE_STATUSBAR, "NactStatusbar", &info, 0 );
+
+       return( type );
+}
+
+static void
+class_init( NactStatusbarClass *klass )
+{
+       static const gchar *thisfn = "nact_statusbar_class_init";
+       GObjectClass *object_class;
+
+       g_debug( "%s: klass=%p", thisfn, ( void * ) klass );
+
+       st_parent_class = g_type_class_peek_parent( klass );
+
+       object_class = G_OBJECT_CLASS( klass );
+       object_class->dispose = instance_dispose;
+       object_class->finalize = instance_finalize;
+}
+
+static void
+instance_init( GTypeInstance *instance, gpointer klass )
+{
+       static const gchar *thisfn = "nact_statusbar_instance_init";
+       NactStatusbar *self;
+
+       g_return_if_fail( NACT_IS_STATUSBAR( instance ));
+
+       g_debug( "%s: instance=%p (%s), klass=%p",
+                       thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ), ( void * ) klass );
+
+       self = NACT_STATUSBAR( instance );
+
+       self->private = g_new0( NactStatusbarPrivate, 1 );
+
+       self->private->dispose_has_run = FALSE;
+}
+
+static void
+instance_dispose( GObject *object )
+{
+       static const gchar *thisfn = "nact_statusbar_instance_dispose";
+       NactStatusbarPrivate *priv;
+
+       g_return_if_fail( NACT_IS_STATUSBAR( object ));
+
+       priv = NACT_STATUSBAR( object )->private;
+
+       if( !priv->dispose_has_run ){
+
+               g_debug( "%s: object=%p (%s)",
+                               thisfn, ( void * ) object, G_OBJECT_TYPE_NAME( object ));
+
+               priv->dispose_has_run = TRUE;
+
+               /* chain up to the parent class */
+               if( G_OBJECT_CLASS( st_parent_class )->dispose ){
+                       G_OBJECT_CLASS( st_parent_class )->dispose( object );
+               }
+       }
+}
+
+static void
+instance_finalize( GObject *instance )
+{
+       static const gchar *thisfn = "nact_statusbar_instance_finalize";
+       NactStatusbar *self;
+
+       g_return_if_fail( NACT_IS_STATUSBAR( instance ));
+
+       g_debug( "%s: instance=%p (%s)", thisfn, ( void * ) instance, G_OBJECT_TYPE_NAME( instance ));
+
+       self = NACT_STATUSBAR( instance );
+
+       g_free( self->private );
+
+       /* chain call to parent class */
+       if( G_OBJECT_CLASS( st_parent_class )->finalize ){
+               G_OBJECT_CLASS( st_parent_class )->finalize( instance );
+       }
+}
+
+/**
+ * nact_statusbar_new:
+ *
+ * Returns: a new #NactStatusbar object.
+ */
+NactStatusbar *
+nact_statusbar_new( void )
+{
+       NactStatusbar *bar;
+
+       bar = g_object_new( NACT_TYPE_STATUSBAR, NULL );
+
+       init_bar( bar );
+
+       return( bar );
+}
+
+static void
+init_bar( NactStatusbar *bar )
+{
+       GtkWidget *frame, *image;
+
+       frame = gtk_aspect_frame_new( NULL, 0.5, 0.5, 1, FALSE );
+       gtk_box_pack_end( GTK_BOX( bar ), frame, FALSE, FALSE, 4 );
+
+       image = gtk_image_new();
+       gtk_container_add( GTK_CONTAINER( frame ), image );
+       bar->private->image = image;
+}
+
+/**
+ * nact_statusbar_display_status:
+ * @bar: this #NactStatusbar instance.
+ * @context: the context to be displayed.
+ * @status: the message.
+ *
+ * Push a message.
+ */
+void
+nact_statusbar_display_status( NactStatusbar *bar, const gchar *context, const gchar *status )
+{
+       static const gchar *thisfn = "nact_statusbar_display_status";
+
+       g_debug( "%s: bar=%p, context=%s, status=%s",
+                       thisfn, ( void * ) bar, context, status );
+
+       if( !status || !g_utf8_strlen( status, -1 )){
+               return;
+       }
+
+       guint context_id = gtk_statusbar_get_context_id( GTK_STATUSBAR( bar ), context );
+       gtk_statusbar_push( GTK_STATUSBAR( bar ), context_id, status );
+}
+
+/**
+ * nact_statusbar_display_with_timeout:
+ * @bar: this #NactStatusbar instance.
+ * @context: the context to be displayed.
+ * @status: the message.
+ *
+ * Push a message.
+ * Automatically pop it after a timeout.
+ * The timeout is not suspended when another message is pushed onto the
+ * previous one.
+ */
+void
+nact_statusbar_display_with_timeout( NactStatusbar *bar, const gchar *context, const gchar *status )
+{
+       static const gchar *thisfn = "nact_statusbar_display_with_timeout";
+       StatusbarTimeoutDisplayStruct *stds;
+
+       g_debug( "%s: bar=%p, context=%s, status=%s",
+                       thisfn, ( void * ) bar, context, status );
+
+       if( !status || !g_utf8_strlen( status, -1 )){
+               return;
+       }
+
+       guint context_id = gtk_statusbar_get_context_id( GTK_STATUSBAR( bar ), context );
+       gtk_statusbar_push( GTK_STATUSBAR( bar ), context_id, status );
+
+       stds = g_new0( StatusbarTimeoutDisplayStruct, 1 );
+       stds->context_id = context_id;
+       stds->bar = bar;
+       stds->event_source_id = g_timeout_add_seconds_full(
+                       G_PRIORITY_DEFAULT,
+                       10,
+                       ( GSourceFunc ) display_timeout,
+                       stds,
+                       ( GDestroyNotify ) display_timeout_free );
+}
+
+/**
+ * nact_statusbar_hide_status:
+ * @bar: this #NactStatusbar instance.
+ * @context: the context to be hidden.
+ *
+ * Hide the specified context.
+ */
+void
+nact_statusbar_hide_status( NactStatusbar *bar, const gchar *context )
+{
+       guint context_id = gtk_statusbar_get_context_id( GTK_STATUSBAR( bar ), context );
+       gtk_statusbar_pop( GTK_STATUSBAR( bar ), context_id );
+}
+
+/**
+ * nact_statusbar_set_locked:
+ * @bar: this #NactStatusbar instance.
+ * @provider: whether the current provider is locked (read-only).
+ * @item: whether the current item is locked (read-only).
+ *
+ * Displays the writability status of the current item as an image.
+ * Installs the corresponding tooltip.
+ */
+void
+nact_statusbar_set_locked( NactStatusbar *bar, gboolean readonly, gint reason )
+{
+       static const gchar *thisfn = "nact_statusbar_set_locked";
+       NactStatusbarPrivate *priv;
+       gchar *tooltip;
+       gboolean set_pixbuf;
+
+       g_debug( "%s: bar=%p, readonly=%s, reason=%d",
+                       thisfn, ( void * ) bar, readonly ? "True":"False", reason );
+
+       priv = bar->private;
+       if( !priv->dispose_has_run ){
+
+               set_pixbuf = TRUE;
+               tooltip = g_strdup( "" );
+
+               if( readonly ){
+                       gtk_image_set_from_file( GTK_IMAGE( priv->image ), LOCKED_IMAGE );
+                       set_pixbuf = FALSE;
+                       g_free( tooltip );
+                       tooltip = na_io_provider_get_readonly_tooltip( reason );
+               }
+
+               gtk_widget_set_tooltip_text( priv->image, tooltip );
+               g_free( tooltip );
+
+               if( set_pixbuf ){
+                       base_gtk_utils_render( NULL, GTK_IMAGE( priv->image ), GTK_ICON_SIZE_MENU );
+               }
+       }
+}
+
+static gboolean
+display_timeout( StatusbarTimeoutDisplayStruct *stds )
+{
+       gboolean keep_source = FALSE;
+
+       gtk_statusbar_pop( GTK_STATUSBAR( stds->bar ), stds->context_id );
+
+       return( keep_source );
+}
+
+static void
+display_timeout_free( StatusbarTimeoutDisplayStruct *stds )
+{
+       g_debug( "nact_statusbar_display_timeout_free: stds=%p", ( void * ) stds );
+
+       g_free( stds );
+}
diff --git a/src/nact/nact-statusbar.h b/src/nact/nact-statusbar.h
new file mode 100644
index 0000000..6b010f8
--- /dev/null
+++ b/src/nact/nact-statusbar.h
@@ -0,0 +1,90 @@
+/*
+ * Nautilus-Actions
+ * A Nautilus extension which offers configurable context statusbar actions.
+ *
+ * Copyright (C) 2005 The GNOME Foundation
+ * Copyright (C) 2006-2008 Frederic Ruaudel and others (see AUTHORS)
+ * Copyright (C) 2009-2014 Pierre Wieser and others (see AUTHORS)
+ *
+ * Nautilus-Actions is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * Nautilus-Actions is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Nautilus-Actions; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ *   Frederic Ruaudel <grumz grumz net>
+ *   Rodrigo Moya <rodrigo gnome-db org>
+ *   Pierre Wieser <pwieser trychlos org>
+ *   ... and many others (see AUTHORS)
+ */
+
+#ifndef __NACT_STATUSBAR_H__
+#define __NACT_STATUSBAR_H__
+
+/**
+ * SECTION: nact_statusbar
+ * @short_description: Statusbar class definition.
+ * @include: nact/nact-statusbar.h
+ *
+ * The #NactStatusbar embeds both:
+ * - a message bar
+ * - a read-only indicator.
+ */
+
+#include "nact-main-window-def.h"
+
+G_BEGIN_DECLS
+
+#define NACT_TYPE_STATUSBAR                ( nact_statusbar_get_type())
+#define NACT_STATUSBAR( object )           ( G_TYPE_CHECK_INSTANCE_CAST( object, NACT_TYPE_STATUSBAR, 
NactStatusbar ))
+#define NACT_STATUSBAR_CLASS( klass )      ( G_TYPE_CHECK_CLASS_CAST( klass, NACT_TYPE_STATUSBAR, 
NactStatusbarClass ))
+#define NACT_IS_STATUSBAR( object )        ( G_TYPE_CHECK_INSTANCE_TYPE( object, NACT_TYPE_STATUSBAR ))
+#define NACT_IS_STATUSBAR_CLASS( klass )   ( G_TYPE_CHECK_CLASS_TYPE(( klass ), NACT_TYPE_STATUSBAR ))
+#define NACT_STATUSBAR_GET_CLASS( object ) ( G_TYPE_INSTANCE_GET_CLASS(( object ), NACT_TYPE_STATUSBAR, 
NactStatusbarClass ))
+
+typedef struct _NactStatusbarPrivate       NactStatusbarPrivate;
+
+typedef struct {
+       /*< private >*/
+       GtkStatusbar          parent;
+       NactStatusbarPrivate *private;
+}
+       NactStatusbar;
+
+typedef struct {
+       /*< private >*/
+       GtkStatusbarClass     parent;
+}
+       NactStatusbarClass;
+
+GType          nact_statusbar_get_type            ( void );
+
+NactStatusbar *nact_statusbar_new                 ( void );
+
+void           nact_statusbar_display_status      ( NactStatusbar *bar,
+                                                                                                             
  const gchar *context,
+                                                                                                             
  const gchar *status );
+
+void           nact_statusbar_display_with_timeout( NactStatusbar *bar,
+                                                                                                             
  const gchar *context,
+                                                                                                             
  const gchar *status );
+
+void           nact_statusbar_hide_status         ( NactStatusbar *bar,
+                                                                                                             
  const gchar *context );
+
+void           nact_statusbar_set_locked          ( NactStatusbar *bar,
+                                                                                                             
  gboolean readonly,
+                                                                                                             
  gint reason );
+
+G_END_DECLS
+
+#endif /* __NACT_STATUSBAR_H__ */
diff --git a/src/nact/nact-tree-ieditable.c b/src/nact/nact-tree-ieditable.c
index eee05bd..978156b 100644
--- a/src/nact/nact-tree-ieditable.c
+++ b/src/nact/nact-tree-ieditable.c
@@ -53,16 +53,16 @@ struct _NactTreeIEditableInterfacePrivate {
 /* data attached to the NactTreeView
  */
 typedef struct {
-       NAUpdater     *updater;
-       BaseWindow    *window;
-       GtkTreeView   *treeview;
-       NactTreeModel *model;
-       gulong         modified_handler_id;
-       gulong         valid_handler_id;
-       guint          count_modified;
-       gboolean       level_zero_changed;
-       GList         *deleted;
-       guint          count_deleted;
+       NAUpdater      *updater;
+       NactMainWindow *main_window;
+       GtkTreeView    *treeview;
+       NactTreeModel  *model;
+       gulong          modified_handler_id;
+       gulong          valid_handler_id;
+       guint           count_modified;
+       gboolean        level_zero_changed;
+       GList          *deleted;
+       guint           count_deleted;
 }
        IEditableData;
 
@@ -73,14 +73,13 @@ static guint st_initializations = 0;        /* interface initialization count */
 static GType          register_type( void );
 static void           interface_base_init( NactTreeIEditableInterface *klass );
 static void           interface_base_finalize( NactTreeIEditableInterface *klass );
-
-static gboolean       on_key_pressed_event( GtkWidget *widget, GdkEventKey *event, BaseWindow *window );
-static void           on_label_edited( GtkCellRendererText *renderer, const gchar *path_str, const gchar 
*text, BaseWindow *window );
-static void           on_main_selection_changed( BaseWindow *window, GList *selected_items, gpointer 
user_data );
-static void           on_object_modified_status_changed( NactTreeIEditable *view, NAObject *object, gboolean 
new_status, BaseWindow *window );
-static void           on_object_valid_status_changed( NactTreeIEditable *view, NAObject *object, gboolean 
new_status, BaseWindow *window );
-static void           on_tree_view_level_zero_changed( BaseWindow *window, gboolean is_modified, gpointer 
user_data );
-static void           on_tree_view_modified_status_changed( BaseWindow *window, gboolean is_modified, 
gpointer user_data );
+static gboolean       on_key_pressed_event( GtkWidget *widget, GdkEventKey *event, NactTreeIEditable 
*instance );
+static void           on_label_edited( GtkCellRendererText *renderer, const gchar *path_str, const gchar 
*text, NactTreeView *items_view );
+static void           on_tree_view_selection_changed( NactTreeIEditable *view, GList *selected_items, void 
*empty );
+static void           on_object_modified_status_changed( NactTreeIEditable *view, NAObject *object, gboolean 
new_status, void *empty );
+static void           on_object_valid_status_changed( NactTreeIEditable *view, NAObject *object, gboolean 
new_status, void *empty );
+static void           on_tree_view_level_zero_changed( NactTreeIEditable *view, gboolean is_modified, void 
*empty );
+static void           on_tree_view_modified_status_changed( NactTreeIEditable *view, gboolean is_modified, 
void *empty );
 static void           add_to_deleted_rec( IEditableData *ied, NAObject *object );
 static void           decrement_counters( NactTreeIEditable *view, IEditableData *ialid, GList *items );
 static GtkTreePath   *do_insert_before( IEditableData *ied, GList *items, GtkTreePath *insert_path );
@@ -91,7 +90,7 @@ static gchar         *get_items_id_list_str( GList *items_list );
 static GtkTreePath   *get_selection_first_path( GtkTreeView *treeview );
 static gboolean       get_modification_status( IEditableData *ied );
 static IEditableData *get_instance_data( NactTreeIEditable *view );
-static void           inline_edition( BaseWindow *window );
+static void           inline_edition( NactTreeIEditable *view );
 
 GType
 nact_tree_ieditable_get_type( void )
@@ -171,78 +170,63 @@ interface_base_finalize( NactTreeIEditableInterface *klass )
  * Initialize the interface, mainly connecting to signals of interest.
  */
 void
-nact_tree_ieditable_initialize( NactTreeIEditable *instance, GtkTreeView *treeview, BaseWindow *window )
+nact_tree_ieditable_initialize( NactTreeIEditable *instance, GtkTreeView *treeview, NactMainWindow 
*main_window )
 {
        static const gchar *thisfn = "nact_tree_ieditable_initialize";
        IEditableData *ied;
-       NactApplication *application;
+       GtkApplication *application;
        GtkTreeViewColumn *column;
        GList *renderers;
 
-       g_return_if_fail( NACT_IS_TREE_IEDITABLE( instance ));
+       g_return_if_fail( instance && NACT_IS_TREE_IEDITABLE( instance ));
 
-       g_debug( "%s: instance=%p (%s), treeview=%p, window=%p",
+       g_debug( "%s: instance=%p (%s), treeview=%p, main_window=%p",
                        thisfn,
                        ( void * ) instance, G_OBJECT_TYPE_NAME( instance ),
-                       ( void * ) treeview, ( void * ) window );
+                       ( void * ) treeview, ( void * ) main_window );
 
        ied = get_instance_data( instance );
-       ied->window = window;
+       ied->main_window = main_window;
        ied->treeview = treeview;
        ied->model = NACT_TREE_MODEL( gtk_tree_view_get_model( treeview ));
 
-       application = NACT_APPLICATION( base_window_get_application( window ));
-       ied->updater = nact_application_get_updater( application );
+       application = gtk_window_get_application( GTK_WINDOW( main_window ));
+       g_return_if_fail( application && NACT_IS_APPLICATION( application ));
+       ied->updater = nact_application_get_updater( NACT_APPLICATION( application ));
 
        /* inline label edition with F2 */
-       base_window_signal_connect(
-                       window,
-                       G_OBJECT( treeview ),
-                       "key-press-event",
-                       G_CALLBACK( on_key_pressed_event ));
+       g_signal_connect( treeview, "key-press-event", G_CALLBACK( on_key_pressed_event ), instance );
 
        /* label edition: inform the corresponding tab */
        column = gtk_tree_view_get_column( treeview, TREE_COLUMN_LABEL );
        renderers = gtk_cell_layout_get_cells( GTK_CELL_LAYOUT( column ));
-       base_window_signal_connect(
-                       window,
-                       G_OBJECT( renderers->data ),
-                       "edited",
-                       G_CALLBACK( on_label_edited ));
+       g_signal_connect( renderers->data, "edited", G_CALLBACK( on_label_edited ), instance );
 
        /* monitors status changes to refresh the display */
        na_iduplicable_register_consumer( G_OBJECT( instance ));
-       ied->modified_handler_id = base_window_signal_connect(
-                       window,
-                       G_OBJECT( instance ),
-                       IDUPLICABLE_SIGNAL_MODIFIED_CHANGED,
-                       G_CALLBACK( on_object_modified_status_changed ));
-       ied->valid_handler_id = base_window_signal_connect(
-                       window,
-                       G_OBJECT( instance ),
-                       IDUPLICABLE_SIGNAL_VALID_CHANGED,
-                       G_CALLBACK( on_object_valid_status_changed ));
+       ied->modified_handler_id =
+                       g_signal_connect(
+                                       instance, IDUPLICABLE_SIGNAL_MODIFIED_CHANGED,
+                                       G_CALLBACK( on_object_modified_status_changed ), NULL );
+       ied->valid_handler_id =
+                       g_signal_connect(
+                                       instance, IDUPLICABLE_SIGNAL_VALID_CHANGED,
+                                       G_CALLBACK( on_object_valid_status_changed ), NULL );
 
        /* monitors the reloading of the tree */
-       base_window_signal_connect(
-                       window,
-                       G_OBJECT( window ),
-                       TREE_SIGNAL_MODIFIED_STATUS_CHANGED,
-                       G_CALLBACK( on_tree_view_modified_status_changed ));
+       g_signal_connect(
+                       instance, TREE_SIGNAL_MODIFIED_STATUS_CHANGED,
+                       G_CALLBACK( on_tree_view_modified_status_changed ), NULL );
 
        /* monitors the level zero of the tree */
-       base_window_signal_connect(
-                       window,
-                       G_OBJECT( window ),
-                       TREE_SIGNAL_LEVEL_ZERO_CHANGED,
-                       G_CALLBACK( on_tree_view_level_zero_changed ));
+       g_signal_connect(
+                       instance, TREE_SIGNAL_LEVEL_ZERO_CHANGED,
+                       G_CALLBACK( on_tree_view_level_zero_changed ), NULL );
 
        /* monitors the main selection */
-       base_window_signal_connect(
-                       window,
-                       G_OBJECT( window ),
-                       MAIN_SIGNAL_SELECTION_CHANGED,
-                       G_CALLBACK( on_main_selection_changed ));
+       g_signal_connect(
+                       instance, TREE_SIGNAL_SELECTION_CHANGED,
+                       G_CALLBACK( on_tree_view_selection_changed ), NULL );
 }
 
 /**
@@ -265,20 +249,20 @@ nact_tree_ieditable_terminate( NactTreeIEditable *instance )
 
        na_object_free_items( ied->deleted );
 
-       base_window_signal_disconnect( ied->window, ied->modified_handler_id );
-       base_window_signal_disconnect( ied->window, ied->valid_handler_id );
+       g_signal_handler_disconnect( instance, ied->modified_handler_id );
+       g_signal_handler_disconnect( instance, ied->valid_handler_id );
 
        g_free( ied );
        g_object_set_data( G_OBJECT( instance ), VIEW_DATA_IEDITABLE, NULL );
 }
 
 static gboolean
-on_key_pressed_event( GtkWidget *widget, GdkEventKey *event, BaseWindow *window )
+on_key_pressed_event( GtkWidget *widget, GdkEventKey *event, NactTreeIEditable *instance )
 {
        gboolean stop = FALSE;
 
        if( event->keyval == NACT_KEY_F2 ){
-               inline_edition( window );
+               inline_edition( instance );
                stop = TRUE;
        }
 
@@ -293,40 +277,35 @@ on_key_pressed_event( GtkWidget *widget, GdkEventKey *event, BaseWindow *window
  *   data = object_at_row + new_label
  */
 static void
-on_label_edited( GtkCellRendererText *renderer, const gchar *path_str, const gchar *text, BaseWindow *window 
)
+on_label_edited( GtkCellRendererText *renderer, const gchar *path_str, const gchar *text, NactTreeView 
*items_view )
 {
-       NactTreeView *items_view;
        IEditableData *ied;
        NAObject *object;
        GtkTreePath *path;
 
-       items_view = NACT_TREE_VIEW( g_object_get_data( G_OBJECT( window ), WINDOW_DATA_TREE_VIEW ));
-
        if( nact_tree_view_are_notify_allowed( items_view )){
                ied = ( IEditableData * ) g_object_get_data( G_OBJECT( items_view ), VIEW_DATA_IEDITABLE );
                path = gtk_tree_path_new_from_string( path_str );
                object = nact_tree_model_object_at_path( ied->model, path );
                na_object_set_label( object, text );
 
-               g_signal_emit_by_name( window, MAIN_SIGNAL_ITEM_UPDATED, object );
+               g_signal_emit_by_name( ied->main_window, MAIN_SIGNAL_ITEM_UPDATED, object );
        }
 }
 
 static void
-on_main_selection_changed( BaseWindow *window, GList *selected_items, gpointer user_data )
+on_tree_view_selection_changed( NactTreeIEditable *instance, GList *selected_items, void *empty )
 {
+       IEditableData *ied;
        NAObject *object;
        gboolean object_editable;
-       NactTreeView *items_view;
-       IEditableData *ied;
        GtkTreeViewColumn *column;
        GList *renderers;
        gboolean editable;
 
-       g_object_get( window, MAIN_PROP_ITEM, &object, MAIN_PROP_EDITABLE, &object_editable, NULL );
+       ied = ( IEditableData * ) g_object_get_data( G_OBJECT( instance ), VIEW_DATA_IEDITABLE );
+       g_object_get( ied->main_window, MAIN_PROP_ITEM, &object, MAIN_PROP_EDITABLE, &object_editable, NULL );
        editable = NA_IS_OBJECT( object ) && object_editable;
-       items_view = NACT_TREE_VIEW( g_object_get_data( G_OBJECT( window ), WINDOW_DATA_TREE_VIEW ));
-       ied = ( IEditableData * ) g_object_get_data( G_OBJECT( items_view ), VIEW_DATA_IEDITABLE );
        column = gtk_tree_view_get_column( ied->treeview, TREE_COLUMN_LABEL );
        renderers = gtk_cell_layout_get_cells( GTK_CELL_LAYOUT( column ));
        g_object_set( G_OBJECT( renderers->data ), "editable", editable, "editable-set", TRUE, NULL );
@@ -337,16 +316,16 @@ on_main_selection_changed( BaseWindow *window, GList *selected_items, gpointer u
  * - refresh the display
  */
 static void
-on_object_modified_status_changed( NactTreeIEditable *instance, NAObject *object, gboolean is_modified, 
BaseWindow *window )
+on_object_modified_status_changed( NactTreeIEditable *instance, NAObject *object, gboolean is_modified, void 
*empty )
 {
        static const gchar *thisfn = "nact_tree_ieditable_on_object_modified_status_changed";
        IEditableData *ied;
        gboolean prev_status, status;
 
-       g_debug( "%s: instance=%p, object=%p (%s), is_modified=%s, window=%p",
+       g_debug( "%s: instance=%p, object=%p (%s), is_modified=%s, empty=%p",
                        thisfn, ( void * ) instance,
                        ( void * ) object, G_OBJECT_TYPE_NAME( object ), is_modified ? "True":"False",
-                       ( void * ) window );
+                       empty );
 
        ied = ( IEditableData * ) g_object_get_data( G_OBJECT( instance ), VIEW_DATA_IEDITABLE );
        prev_status = get_modification_status( ied );
@@ -363,7 +342,7 @@ on_object_modified_status_changed( NactTreeIEditable *instance, NAObject *object
        if( nact_tree_view_are_notify_allowed( NACT_TREE_VIEW( instance ))){
                status = get_modification_status( ied );
                if( status != prev_status ){
-                       g_signal_emit_by_name( window, TREE_SIGNAL_MODIFIED_STATUS_CHANGED, status );
+                       g_signal_emit_by_name( instance, TREE_SIGNAL_MODIFIED_STATUS_CHANGED, status );
                }
        }
 }
@@ -373,13 +352,13 @@ on_object_modified_status_changed( NactTreeIEditable *instance, NAObject *object
  * - refresh the display
  */
 static void
-on_object_valid_status_changed( NactTreeIEditable *instance, NAObject *object, gboolean new_status, 
BaseWindow *window )
+on_object_valid_status_changed( NactTreeIEditable *instance, NAObject *object, gboolean new_status, void 
*empty )
 {
        static const gchar *thisfn = "nact_tree_ieditable_on_object_valid_status_changed";
        IEditableData *ied;
 
-       g_debug( "%s: instance=%p, new_status=%s, window=%p",
-                       thisfn, ( void * ) instance, new_status ? "True":"False", ( void * ) window );
+       g_debug( "%s: instance=%p, new_status=%s, empty=%p",
+                       thisfn, ( void * ) instance, new_status ? "True":"False", empty );
 
        ied = ( IEditableData * ) g_object_get_data( G_OBJECT( instance ), VIEW_DATA_IEDITABLE );
        gtk_tree_model_filter_refilter( GTK_TREE_MODEL_FILTER( ied->model ));
@@ -389,21 +368,19 @@ on_object_valid_status_changed( NactTreeIEditable *instance, NAObject *object, g
  * order or list of items at level zero of the tree has changed
  */
 static void
-on_tree_view_level_zero_changed( BaseWindow *window, gboolean is_modified, gpointer user_data )
+on_tree_view_level_zero_changed( NactTreeIEditable *view, gboolean is_modified, void *empty )
 {
-       NactTreeView *items_view;
        IEditableData *ied;
        gboolean prev_status, status;
 
-       items_view = NACT_TREE_VIEW( g_object_get_data( G_OBJECT( window ), WINDOW_DATA_TREE_VIEW ));
-       ied = get_instance_data( NACT_TREE_IEDITABLE( items_view ));
+       ied = get_instance_data( view );
        prev_status = get_modification_status( ied );
        ied->level_zero_changed = is_modified;
 
-       if( nact_tree_view_are_notify_allowed( items_view )){
+       if( nact_tree_view_are_notify_allowed( NACT_TREE_VIEW( view ))){
                status = get_modification_status( ied );
                if( prev_status != status ){
-                       g_signal_emit_by_name( window, TREE_SIGNAL_MODIFIED_STATUS_CHANGED, status );
+                       g_signal_emit_by_name( view, TREE_SIGNAL_MODIFIED_STATUS_CHANGED, status );
                }
        }
 }
@@ -412,14 +389,12 @@ on_tree_view_level_zero_changed( BaseWindow *window, gboolean is_modified, gpoin
  * the tree has been reloaded
  */
 static void
-on_tree_view_modified_status_changed( BaseWindow *window, gboolean is_modified, gpointer user_data )
+on_tree_view_modified_status_changed( NactTreeIEditable *view, gboolean is_modified, void *empty )
 {
-       NactTreeView *items_view;
        IEditableData *ied;
 
        if( !is_modified ){
-               items_view = NACT_TREE_VIEW( g_object_get_data( G_OBJECT( window ), WINDOW_DATA_TREE_VIEW ));
-               ied = get_instance_data( NACT_TREE_IEDITABLE( items_view ));
+               ied = get_instance_data( view );
                ied->count_modified = 0;
                ied->deleted = na_object_free_items( ied->deleted );
                ied->level_zero_changed = FALSE;
@@ -509,12 +484,12 @@ nact_tree_ieditable_delete( NactTreeIEditable *instance, GList *items, TreeIEdit
 
        status = get_modification_status( ied );
        if( status != prev_status ){
-               g_signal_emit_by_name( G_OBJECT( ied->window ), TREE_SIGNAL_MODIFIED_STATUS_CHANGED, status );
+               g_signal_emit_by_name( instance, TREE_SIGNAL_MODIFIED_STATUS_CHANGED, status );
 
        }
 }
 
-/**
+/*
  * add_to_deleted_rec:
  * @list: list of deleted objects.
  * @object: the object to be added from the list.
@@ -570,7 +545,7 @@ decrement_counters( NactTreeIEditable *view, IEditableData *ied, GList *items )
        menus *= -1;
        actions *= -1;
        profiles *= -1;
-       g_signal_emit_by_name( G_OBJECT( ied->window ), TREE_SIGNAL_COUNT_CHANGED, FALSE, menus, actions, 
profiles );
+       g_signal_emit_by_name( view, TREE_SIGNAL_COUNT_CHANGED, FALSE, menus, actions, profiles );
 }
 
 /**
@@ -758,14 +733,14 @@ nact_tree_ieditable_insert_at_path( NactTreeIEditable *instance, GList *items, G
                for( it = items ; it ; it = it->next ){
                        na_object_check_status( it->data );
                }
-               g_signal_emit_by_name( ied->window, TREE_SIGNAL_LEVEL_ZERO_CHANGED, TRUE );
+               g_signal_emit_by_name( instance, TREE_SIGNAL_LEVEL_ZERO_CHANGED, TRUE );
        }
 
        /* post insertion
         */
        status = get_modification_status( ied );
        if( prev_status != status ){
-               g_signal_emit_by_name( ied->window, TREE_SIGNAL_MODIFIED_STATUS_CHANGED, status );
+               g_signal_emit_by_name( instance, TREE_SIGNAL_MODIFIED_STATUS_CHANGED, status );
        }
        nact_tree_view_set_notify_allowed( NACT_TREE_VIEW( instance ), TRUE );
 
@@ -932,7 +907,7 @@ increment_counters( NactTreeIEditable *view, IEditableData *ied, GList *items )
                        thisfn, ( void * ) view, ( void * ) ied, ( void * ) items, items ? g_list_length( 
items ) : 0 );
 
        na_object_count_items( items, &menus, &actions, &profiles );
-       g_signal_emit_by_name( G_OBJECT( ied->window ), TREE_SIGNAL_COUNT_CHANGED, FALSE, menus, actions, 
profiles );
+       g_signal_emit_by_name( view, TREE_SIGNAL_COUNT_CHANGED, FALSE, menus, actions, profiles );
 }
 
 /*
@@ -1075,7 +1050,7 @@ check_level_zero_status( NactTreeIEditable *instance )
        g_free( pivot_str );
        g_free( view_str );
 
-       g_signal_emit_by_name( ied->window, TREE_SIGNAL_LEVEL_ZERO_CHANGED, status );
+       g_signal_emit_by_name( instance, TREE_SIGNAL_LEVEL_ZERO_CHANGED, status );
 }
 
 static gchar *
@@ -1161,9 +1136,8 @@ get_instance_data( NactTreeIEditable *view )
  * let the label be edited
  */
 static void
-inline_edition( BaseWindow *window )
+inline_edition( NactTreeIEditable *view )
 {
-       NactTreeView *items_view;
        IEditableData *ied;
        GtkTreeSelection *selection;
        GList *listrows;
@@ -1171,8 +1145,7 @@ inline_edition( BaseWindow *window )
        GtkTreePath *path;
        GtkTreeViewColumn *column;
 
-       items_view = NACT_TREE_VIEW( g_object_get_data( G_OBJECT( window ), WINDOW_DATA_TREE_VIEW ));
-       ied = ( IEditableData * ) g_object_get_data( G_OBJECT( items_view ), VIEW_DATA_IEDITABLE );
+       ied = ( IEditableData * ) g_object_get_data( G_OBJECT( view ), VIEW_DATA_IEDITABLE );
        selection = gtk_tree_view_get_selection( ied->treeview );
        listrows = gtk_tree_selection_get_selected_rows( selection, &model );
 
diff --git a/src/nact/nact-tree-ieditable.h b/src/nact/nact-tree-ieditable.h
index f310bff..247855b 100644
--- a/src/nact/nact-tree-ieditable.h
+++ b/src/nact/nact-tree-ieditable.h
@@ -46,9 +46,9 @@
  * The modified count is fully recomputed after a save.
  */
 
-#include <api/na-object.h>
+#include "api/na-object.h"
 
-#include "base-window.h"
+#include "nact-main-window-def.h"
 
 G_BEGIN_DECLS
 
@@ -62,7 +62,7 @@ typedef struct _NactTreeIEditableInterfacePrivate     NactTreeIEditableInterface
 
 typedef struct {
        /*< private >*/
-       GTypeInterface                 parent;
+       GTypeInterface                     parent;
        NactTreeIEditableInterfacePrivate *private;
 }
        NactTreeIEditableInterface;
@@ -76,22 +76,39 @@ typedef enum {
 }
        TreeIEditableDeleteOpe;
 
-GType    nact_tree_ieditable_get_type( void );
+GType    nact_tree_ieditable_get_type              ( void );
 
-void     nact_tree_ieditable_initialize    ( NactTreeIEditable *instance, GtkTreeView *treeview, BaseWindow 
*window );
-void     nact_tree_ieditable_terminate     ( NactTreeIEditable *instance );
+void     nact_tree_ieditable_initialize            ( NactTreeIEditable *instance,
+                                                                                                             
          GtkTreeView *treeview,
+                                                                                                             
          NactMainWindow *main_window );
 
-void     nact_tree_ieditable_delete        ( NactTreeIEditable *instance, GList *items, 
TreeIEditableDeleteOpe ope );
-gboolean nact_tree_ieditable_remove_deleted( NactTreeIEditable *instance, GSList **messages );
-GList   *nact_tree_ieditable_get_deleted   ( NactTreeIEditable *instance );
+void     nact_tree_ieditable_terminate             ( NactTreeIEditable *instance );
 
-void     nact_tree_ieditable_insert_items  ( NactTreeIEditable *instance, GList *items, NAObject *sibling );
-void     nact_tree_ieditable_insert_at_path( NactTreeIEditable *instance, GList *items, GtkTreePath *path );
-void     nact_tree_ieditable_insert_into   ( NactTreeIEditable *instance, GList *items );
+void     nact_tree_ieditable_delete                ( NactTreeIEditable *instance,
+                                                                                                             
          GList *items,
+                                                                                                             
          TreeIEditableDeleteOpe ope );
 
-void     nact_tree_ieditable_set_items     ( NactTreeIEditable *instance, GList *items );
+gboolean nact_tree_ieditable_remove_deleted        ( NactTreeIEditable *instance,
+                                                                                                             
          GSList **messages );
+
+GList   *nact_tree_ieditable_get_deleted           ( NactTreeIEditable *instance );
+
+void     nact_tree_ieditable_insert_items          ( NactTreeIEditable *instance,
+                                                                                                             
          GList *items,
+                                                                                                             
          NAObject *sibling );
+
+void     nact_tree_ieditable_insert_at_path        ( NactTreeIEditable *instance,
+                                                                                                             
          GList *items,
+                                                                                                             
          GtkTreePath *path );
+
+void     nact_tree_ieditable_insert_into           ( NactTreeIEditable *instance,
+                                                                                                             
          GList *items );
+
+void     nact_tree_ieditable_set_items             ( NactTreeIEditable *instance,
+                                                                                                             
          GList *items );
 
 void     nact_tree_ieditable_dump_modified         ( const NactTreeIEditable *instance );
+
 gboolean nact_tree_ieditable_is_level_zero_modified( const NactTreeIEditable *instance );
 
 G_END_DECLS
diff --git a/src/nact/nact-tree-model-dnd.c b/src/nact/nact-tree-model-dnd.c
index 1dd31af..757dcf7 100644
--- a/src/nact/nact-tree-model-dnd.c
+++ b/src/nact/nact-tree-model-dnd.c
@@ -43,7 +43,7 @@
 
 #include "nact-application.h"
 #include "nact-clipboard.h"
-#include "nact-main-statusbar.h"
+#include "nact-statusbar.h"
 #include "nact-main-window.h"
 #include "nact-tree-model.h"
 #include "nact-tree-model-priv.h"
@@ -579,7 +579,7 @@ drop_inside( NactTreeModel *model, GtkTreePath *dest, GtkSelectionData  *selecti
        gboolean relabel;
        NactTreeView *items_view;
 
-       application = NACT_APPLICATION( base_window_get_application( model->private->window ));
+       application = NACT_APPLICATION( gtk_window_get_application( GTK_WINDOW( model->private->window )));
        updater = nact_application_get_updater( application );
 
        g_return_val_if_fail( NACT_IS_MAIN_WINDOW( model->private->window ), FALSE );
@@ -662,18 +662,22 @@ drop_inside( NactTreeModel *model, GtkTreePath *dest, GtkSelectionData  *selecti
 static gboolean
 is_drop_possible( NactTreeModel *model, GtkTreePath *dest, NAObjectItem **parent )
 {
+       NactTreeModelPrivate *priv;
        gboolean drop_ok;
-       NactApplication *application;
+       GtkApplication *application;
        NactMainWindow *main_window;
        GtkTreeIter iter;
        NAObjectItem *parent_dest;
+       NactStatusbar *bar;
 
+       priv = model->private;
        drop_ok = FALSE;
        parent_dest = NULL;
-       application = NACT_APPLICATION( base_window_get_application( model->private->window ));
+       application = gtk_window_get_application( GTK_WINDOW( priv->window ));
+       g_return_val_if_fail( application && NACT_IS_APPLICATION( application ), FALSE );
 
-       g_return_val_if_fail( NACT_IS_MAIN_WINDOW( model->private->window ), FALSE );
-       main_window = NACT_MAIN_WINDOW( model->private->window );
+       g_return_val_if_fail( priv->window && NACT_IS_MAIN_WINDOW( priv->window ), FALSE );
+       main_window = NACT_MAIN_WINDOW( priv->window );
 
        /* if we can have an iter on given dest, then the dest already exists
         * so dropped items should be of the same type that already existing
@@ -686,9 +690,10 @@ is_drop_possible( NactTreeModel *model, GtkTreePath *dest, NAObjectItem **parent
         */
        } else if( gtk_tree_path_get_depth( dest ) == 1 ){
 
-               if( model->private->drag_has_profiles ){
-                       nact_main_statusbar_display_with_timeout(
-                                               main_window, TREE_MODEL_STATUSBAR_CONTEXT, gettext( 
st_refuse_drop_profile ));
+               if( priv->drag_has_profiles ){
+                       bar = nact_main_window_get_statusbar( main_window );
+                       nact_statusbar_display_with_timeout(
+                                               bar, TREE_MODEL_STATUSBAR_CONTEXT, gettext( 
st_refuse_drop_profile ));
 
                } else {
                        drop_ok = TRUE;
@@ -703,7 +708,8 @@ is_drop_possible( NactTreeModel *model, GtkTreePath *dest, NAObjectItem **parent
        }
 
        if( drop_ok ){
-               drop_ok = is_parent_accept_new_children( application, main_window, parent_dest );
+               drop_ok = is_parent_accept_new_children(
+                               NACT_APPLICATION( application ), main_window, parent_dest );
        }
 
        if( drop_ok && parent ){
@@ -719,9 +725,11 @@ is_drop_possible_before_iter( NactTreeModel *model, GtkTreeIter *iter, NactMainW
        static const gchar *thisfn = "nact_tree_model_dnd_is_drop_possible_before_iter";
        gboolean drop_ok;
        NAObject *object;
+       NactStatusbar *bar;
 
        drop_ok = FALSE;
        *parent = NULL;
+       bar = nact_main_window_get_statusbar( window );
 
        gtk_tree_model_get( GTK_TREE_MODEL( model ), iter, TREE_COLUMN_NAOBJECT, &object, -1 );
        g_object_unref( object );
@@ -735,8 +743,8 @@ is_drop_possible_before_iter( NactTreeModel *model, GtkTreeIter *iter, NactMainW
 
                } else {
                        /* unable to drop a profile here */
-                       nact_main_statusbar_display_with_timeout(
-                                       window, TREE_MODEL_STATUSBAR_CONTEXT, gettext( st_refuse_drop_profile 
));
+                       nact_statusbar_display_with_timeout(
+                                       bar, TREE_MODEL_STATUSBAR_CONTEXT, gettext( st_refuse_drop_profile ));
                }
 
        } else if( NA_IS_OBJECT_ITEM( object )){
@@ -745,8 +753,8 @@ is_drop_possible_before_iter( NactTreeModel *model, GtkTreeIter *iter, NactMainW
 
        } else {
                /* unable to drop an action or a menu here */
-               nact_main_statusbar_display_with_timeout(
-                               window, TREE_MODEL_STATUSBAR_CONTEXT, gettext( st_refuse_drop_item ));
+               nact_statusbar_display_with_timeout(
+                               bar, TREE_MODEL_STATUSBAR_CONTEXT, gettext( st_refuse_drop_item ));
        }
 
        return( drop_ok );
@@ -760,9 +768,11 @@ is_drop_possible_into_dest( NactTreeModel *model, GtkTreePath *dest, NactMainWin
        GtkTreePath *path;
        GtkTreeIter iter;
        NAObject *object;
+       NactStatusbar *bar;
 
        drop_ok = FALSE;
        *parent = NULL;
+       bar = nact_main_window_get_statusbar( window );
 
        path = gtk_tree_path_copy( dest );
 
@@ -779,8 +789,8 @@ is_drop_possible_into_dest( NactTreeModel *model, GtkTreePath *dest, NactMainWin
                                        *parent = NA_OBJECT_ITEM( object );
 
                                } else {
-                                       nact_main_statusbar_display_with_timeout(
-                                                       window, TREE_MODEL_STATUSBAR_CONTEXT, gettext( 
st_refuse_drop_profile ));
+                                       nact_statusbar_display_with_timeout(
+                                                       bar, TREE_MODEL_STATUSBAR_CONTEXT, gettext( 
st_refuse_drop_profile ));
                                }
 
                        } else if( NA_IS_OBJECT_MENU( object )){
@@ -788,8 +798,8 @@ is_drop_possible_into_dest( NactTreeModel *model, GtkTreePath *dest, NactMainWin
                                        *parent = na_object_get_parent( object );
 
                        } else {
-                               nact_main_statusbar_display_with_timeout(
-                                               window, TREE_MODEL_STATUSBAR_CONTEXT, gettext( 
st_refuse_drop_item ));
+                               nact_statusbar_display_with_timeout(
+                                               bar, TREE_MODEL_STATUSBAR_CONTEXT, gettext( 
st_refuse_drop_item ));
                        }
                }
        }
@@ -852,8 +862,9 @@ static gboolean
 drop_uri_list( NactTreeModel *model, GtkTreePath *dest, GtkSelectionData  *selection_data )
 {
        static const gchar *thisfn = "nact_tree_model_dnd_drop_uri_list";
+       NactTreeModelPrivate *priv;
        gboolean drop_done;
-       NactApplication *application;
+       GtkApplication *application;
        NAUpdater *updater;
        NactMainWindow *main_window;
        NAImporterParms parms;
@@ -866,7 +877,9 @@ drop_uri_list( NactTreeModel *model, GtkTreePath *dest, GtkSelectionData  *selec
        GSList *messages;
        gchar *dlg_message;
        GtkWidget *dialog;
+       NactStatusbar *bar;
 
+       priv = model->private;
        gchar *dest_str = gtk_tree_path_to_string( dest );
        g_debug( "%s: model=%p, dest=%p (%s), selection_data=%p",
                        thisfn, ( void * ) model, ( void * ) dest, dest_str, ( void * ) selection_data );
@@ -879,11 +892,12 @@ drop_uri_list( NactTreeModel *model, GtkTreePath *dest, GtkSelectionData  *selec
                return( FALSE );
        }
 
-       application = NACT_APPLICATION( base_window_get_application( model->private->window ));
-       updater = nact_application_get_updater( application );
+       application = gtk_window_get_application( GTK_WINDOW( priv->window ));
+       g_return_val_if_fail( application && NACT_IS_APPLICATION( application ), FALSE );
+       updater = nact_application_get_updater( NACT_APPLICATION( application ));
 
-       g_return_val_if_fail( NACT_IS_MAIN_WINDOW( model->private->window ), FALSE );
-       main_window = NACT_MAIN_WINDOW( model->private->window );
+       g_return_val_if_fail( NACT_IS_MAIN_WINDOW( priv->window ), FALSE );
+       main_window = NACT_MAIN_WINDOW( priv->window );
 
        selection_data_data = ( const gchar * ) gtk_selection_data_get_data( selection_data );
        g_debug( "%s", selection_data_data );
@@ -893,7 +907,7 @@ drop_uri_list( NactTreeModel *model, GtkTreePath *dest, GtkSelectionData  *selec
        parms.check_fn = ( NAImporterCheckFn ) is_dropped_already_exists;
        parms.check_fn_data = main_window;
        parms.preferred_mode = 0;
-       parms.parent_toplevel = base_window_get_gtk_toplevel( BASE_WINDOW( main_window ));
+       parms.parent_toplevel = GTK_WINDOW( main_window );
 
        import_results = na_importer_import_from_uris( NA_PIVOT( updater ), &parms );
 
@@ -927,8 +941,9 @@ drop_uri_list( NactTreeModel *model, GtkTreePath *dest, GtkSelectionData  *selec
        count = g_slist_length( messages );
        g_debug( "%s: count=%d", thisfn, count );
        if( count == 1 ){
-               nact_main_statusbar_display_with_timeout(
-                               main_window, TREE_MODEL_STATUSBAR_CONTEXT, messages->data );
+               bar = nact_main_window_get_statusbar( main_window );
+               nact_statusbar_display_with_timeout(
+                               bar, TREE_MODEL_STATUSBAR_CONTEXT, messages->data );
        }
        if( count > 1 ){
                dlg_message = na_core_utils_slist_join_at_end( messages, "\n" );
@@ -1139,9 +1154,11 @@ is_parent_accept_new_children( NactApplication *application, NactMainWindow *win
 {
        gboolean accept_ok;
        NAUpdater *updater;
+       NactStatusbar *bar;
 
        accept_ok = FALSE;
        updater = nact_application_get_updater( application );
+       bar = nact_main_window_get_statusbar( window );
 
        /* inserting as a level zero item
         * ensure that level zero is writable
@@ -1151,8 +1168,8 @@ is_parent_accept_new_children( NactApplication *application, NactMainWindow *win
                        accept_ok = TRUE;
 
                } else {
-                       nact_main_statusbar_display_with_timeout(
-                                               window, TREE_MODEL_STATUSBAR_CONTEXT, gettext( 
st_level_zero_not_writable ));
+                       nact_statusbar_display_with_timeout(
+                                               bar, TREE_MODEL_STATUSBAR_CONTEXT, gettext( 
st_level_zero_not_writable ));
                }
 
        /* see if the parent is writable
@@ -1161,8 +1178,8 @@ is_parent_accept_new_children( NactApplication *application, NactMainWindow *win
                accept_ok = TRUE;
 
        } else {
-                       nact_main_statusbar_display_with_timeout(
-                                               window, TREE_MODEL_STATUSBAR_CONTEXT, gettext( 
st_parent_not_writable ));
+                       nact_statusbar_display_with_timeout(
+                                               bar, TREE_MODEL_STATUSBAR_CONTEXT, gettext( 
st_parent_not_writable ));
        }
 
        return( accept_ok );
diff --git a/src/nact/nact-tree-model-priv.h b/src/nact/nact-tree-model-priv.h
index 82ab184..b99e920 100644
--- a/src/nact/nact-tree-model-priv.h
+++ b/src/nact/nact-tree-model-priv.h
@@ -36,7 +36,6 @@
 #ifndef __NACT_TREE_MODEL_PRIV_H__
 #define __NACT_TREE_MODEL_PRIV_H__
 
-#include "base-window.h"
 #include "egg-tree-multi-dnd.h"
 #include "nact-clipboard.h"
 
@@ -45,20 +44,25 @@ G_BEGIN_DECLS
 /* private instance data
  */
 struct _NactTreeModelPrivate {
-       gboolean       dispose_has_run;
+       gboolean        dispose_has_run;
 
        /* data set at instanciation time
         */
-       BaseWindow    *window;
-       GtkTreeView   *treeview;
-       guint          mode;
-       NactClipboard *clipboard;
+       GtkTreeView    *treeview;
+       gboolean        item_updated_connected;
+       gboolean        dnd_setup;
+
+       /* must be initialized right after the instanciation
+        */
+       NactMainWindow *window;
+       NactClipboard  *clipboard;
+       guint           mode;
 
        /* runtime data
         */
-       gboolean       drag_has_profiles;
-       gboolean       drag_highlight;          /* defined for on_drag_motion handler */
-       gboolean       drag_drop;                       /* defined for on_drag_motion handler */
+       gboolean        drag_has_profiles;
+       gboolean        drag_highlight;         /* defined for on_drag_motion handler */
+       gboolean        drag_drop;                      /* defined for on_drag_motion handler */
 };
 
 #define TREE_MODEL_STATUSBAR_CONTEXT   "nact-tree-model-statusbar-context"
diff --git a/src/nact/nact-tree-model.c b/src/nact/nact-tree-model.c
index c594e96..b0bc923 100644
--- a/src/nact/nact-tree-model.c
+++ b/src/nact/nact-tree-model.c
@@ -34,38 +34,18 @@
 #include <glib/gi18n.h>
 #include <string.h>
 
-#include <api/na-object-api.h>
+#include "api/na-object-api.h"
 
-#include <core/na-iprefs.h>
+#include "core/na-iprefs.h"
 
 #include "nact-application.h"
 #include "nact-clipboard.h"
 #include "base-gtk-utils.h"
 #include "nact-main-tab.h"
+#include "nact-main-window.h"
 #include "nact-tree-model.h"
 #include "nact-tree-model-priv.h"
 
-/* private class data
- */
-struct _NactTreeModelClassPrivate {
-       void *empty;                                            /* so that gcc -pedantic is happy */
-};
-
-/* instance properties
- */
-#define TREE_PROP_TREEVIEW                             "tree-prop-treeview"
-#define TREE_PROP_MODE                                 "tree-prop-mode"
-
-enum {
-       TREE_PROP_0,
-
-       TREE_PROP_WINDOW_ID,
-       TREE_PROP_TREEVIEW_ID,
-       TREE_PROP_MODE_ID,
-
-       TREE_PROP_N_PROPERTIES
-};
-
 /* iter on tree store
  */
 typedef gboolean ( *FnIterOnStore )( const NactTreeModel *, GtkTreeStore *, GtkTreePath *, NAObject *, 
gpointer );
@@ -122,15 +102,12 @@ static void     class_init( NactTreeModelClass *klass );
 static void     imulti_drag_source_init( EggTreeMultiDragSourceIface *iface, void *user_data );
 static void     idrag_dest_init( GtkTreeDragDestIface *iface, void *user_data );
 static void     instance_init( GTypeInstance *instance, gpointer klass );
-static void     instance_get_property( GObject *object, guint property_id, GValue *value, GParamSpec *spec );
-static void     instance_set_property( GObject *object, guint property_id, const GValue *value, GParamSpec 
*spec );
-static void     instance_constructed( GObject *model );
 static void     instance_dispose( GObject *model );
 static void     instance_finalize( GObject *model );
-
+static void     connect_item_updated_signal( NactTreeModel *tmodel );
 static void     on_settings_order_mode_changed( const gchar *group, const gchar *key, gconstpointer 
new_value, gboolean mandatory, NactTreeModel *model );
-static void     on_tab_updatable_item_updated( BaseWindow *window, NAIContext *context, guint data, 
NactTreeModel *model );
-
+static void     on_main_item_updated( BaseWindow *window, NAIContext *context, guint data, NactTreeModel 
*model );
+static void     setup_dnd_edition( NactTreeModel *tmodel );
 static void     append_item( GtkTreeStore *model, GtkTreeView *treeview, GtkTreeIter *parent, GtkTreeIter 
*iter, const NAObject *object );
 static void     display_item( GtkTreeStore *model, GtkTreeView *treeview, GtkTreeIter *iter, const NAObject 
*object );
 static void     display_order_change( NactTreeModel *model, gint order_mode );
@@ -213,35 +190,8 @@ class_init( NactTreeModelClass *klass )
        st_parent_class = g_type_class_peek_parent( klass );
 
        object_class = G_OBJECT_CLASS( klass );
-       object_class->get_property = instance_get_property;
-       object_class->set_property = instance_set_property;
-       object_class->constructed = instance_constructed;
        object_class->dispose = instance_dispose;
        object_class->finalize = instance_finalize;
-
-       g_object_class_install_property( object_class, TREE_PROP_WINDOW_ID,
-                       g_param_spec_pointer(
-                                       TREE_PROP_WINDOW,
-                                       _( "Parent BaseWindow" ),
-                                       _( "A pointer (not a reference) to the BaseWindow parent of the 
embedding treeview" ),
-                                       G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE 
));
-
-       g_object_class_install_property( object_class, TREE_PROP_TREEVIEW_ID,
-                       g_param_spec_pointer(
-                                       TREE_PROP_TREEVIEW,
-                                       _( "Embedding GtkTreeView" ),
-                                       _( "The GtkTreeView which relies on this NactTreeModel" ),
-                                       G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE 
));
-
-       g_object_class_install_property( object_class, TREE_PROP_MODE_ID,
-                       g_param_spec_uint(
-                                       TREE_PROP_MODE,
-                                       _( "Edition mode" ),
-                                       _( "Edition vs. Selection mode" ),
-                                       0, TREE_MODE_N_MODES, 0,
-                                       G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE 
));
-
-       klass->private = g_new0( NactTreeModelClassPrivate, 1 );
 }
 
 static void
@@ -288,66 +238,7 @@ instance_init( GTypeInstance *instance, gpointer klass )
        self->private->dispose_has_run = FALSE;
 }
 
-static void
-instance_get_property( GObject *object, guint property_id, GValue *value, GParamSpec *spec )
-{
-       NactTreeModel *self;
-
-       g_return_if_fail( NACT_IS_TREE_MODEL( object ));
-       self = NACT_TREE_MODEL( object );
-
-       if( !self->private->dispose_has_run ){
-
-               switch( property_id ){
-                       case TREE_PROP_WINDOW_ID:
-                               g_value_set_pointer( value, self->private->window );
-                               break;
-
-                       case TREE_PROP_TREEVIEW_ID:
-                               g_value_set_pointer( value, self->private->treeview );
-                               break;
-
-                       case TREE_PROP_MODE_ID:
-                               g_value_set_uint( value, self->private->mode );
-                               break;
-
-                       default:
-                               G_OBJECT_WARN_INVALID_PROPERTY_ID( object, property_id, spec );
-                               break;
-               }
-       }
-}
-
-static void
-instance_set_property( GObject *object, guint property_id, const GValue *value, GParamSpec *spec )
-{
-       NactTreeModel *self;
-
-       g_return_if_fail( NACT_IS_TREE_MODEL( object ));
-       self = NACT_TREE_MODEL( object );
-
-       if( !self->private->dispose_has_run ){
-
-               switch( property_id ){
-                       case TREE_PROP_WINDOW_ID:
-                               self->private->window = g_value_get_pointer( value );
-                               break;
-
-                       case TREE_PROP_TREEVIEW_ID:
-                               self->private->treeview = g_value_get_pointer( value );
-                               break;
-
-                       case TREE_PROP_MODE_ID:
-                               self->private->mode = g_value_get_uint( value );
-                               break;
-
-                       default:
-                               G_OBJECT_WARN_INVALID_PROPERTY_ID( object, property_id, spec );
-                               break;
-               }
-       }
-}
-
+#if 0
 /*
  * Initializes the tree model.
  *
@@ -375,6 +266,7 @@ instance_constructed( GObject *model )
 
                g_debug( "%s: model=%p (%s)", thisfn, ( void * ) model, G_OBJECT_TYPE_NAME( model ));
 
+               /* nact_tree_model_set_main_window */
                priv->clipboard = nact_clipboard_new( priv->window );
 
                if( priv->mode == TREE_MODE_EDITION ){
@@ -389,11 +281,9 @@ instance_constructed( GObject *model )
                                        tree_model_dnd_dest_formats_count,
                                        nact_tree_model_dnd_imulti_drag_source_get_drag_actions( 
EGG_TREE_MULTI_DRAG_SOURCE( model )));
 
-                       base_window_signal_connect(
-                                       priv->window,
-                                       G_OBJECT( priv->treeview ),
-                                       "drag-begin",
-                                       G_CALLBACK( nact_tree_model_dnd_on_drag_begin ));
+                       g_signal_connect(
+                                       priv->treeview, "drag-begin",
+                                       G_CALLBACK( nact_tree_model_dnd_on_drag_begin ), priv->window );
 
                        /* connect: implies that we have to do all hard stuff
                         * connect_after: no more triggers drag-drop signal
@@ -404,27 +294,25 @@ instance_constructed( GObject *model )
                        /*base_window_signal_connect( window,
                                        G_OBJECT( model->private->treeview ), "drag-drop", G_CALLBACK( 
on_drag_drop ));*/
 
-                       base_window_signal_connect(
-                                       priv->window,
-                                       G_OBJECT( priv->treeview ),
-                                       "drag-end",
-                                       G_CALLBACK( nact_tree_model_dnd_on_drag_end ));
+                       g_signal_connect(
+                                       priv->treeview, "drag-end",
+                                       G_CALLBACK( nact_tree_model_dnd_on_drag_end ), priv->window );
 
+                       /* set_edition_mode */
                        na_settings_register_key_callback(
                                        NA_IPREFS_ITEMS_LIST_ORDER_MODE,
                                        G_CALLBACK( on_settings_order_mode_changed ),
                                        model );
 
-                       base_window_signal_connect_with_data(
+                       /* connect_item_updated_signal */
+                       g_signal_connect(
                                        priv->window,
-                                       G_OBJECT( priv->window ),
-                                       TAB_UPDATABLE_SIGNAL_ITEM_UPDATED,
-                                       G_CALLBACK( on_tab_updatable_item_updated ),
-                                       model );
+                                       MAIN_SIGNAL_TAB_UPDATED, G_CALLBACK( on_main_item_updated ), model );
                }
 
        }
 }
+#endif
 
 static void
 instance_dispose( GObject *object )
@@ -477,57 +365,137 @@ instance_finalize( GObject *object )
 
 /**
  * nact_tree_model_new:
- * @window: a #BaseWindow window which embeds our NactTreeView
- * @treeview: the #GtkTreeView widget.
- * @mode: management mode.
  *
  * Returns: a newly created NactTreeModel object.
- *
- * The returned reference is owned by the #GtkTreeView, which will automatically
- * take care of g_object_unref() its tree model when destroying its widget.
- *
- * Called from NactTreeView::initialize_gtk() method
- *   [..]
- *     which happens to be eventually called from NactMainWindow::on_initialize_gtk()
- *     signal handler.
  */
 NactTreeModel *
-nact_tree_model_new( BaseWindow *window, GtkTreeView *treeview, NactTreeMode mode )
+nact_tree_model_new( GtkTreeView *treeview )
 {
        static const gchar *thisfn = "nact_tree_model_new";
        GtkTreeStore *ts_model;
        NactTreeModel *model;
        gint order_mode;
 
-       g_return_val_if_fail( BASE_IS_WINDOW( window ), NULL );
-       g_return_val_if_fail( GTK_IS_TREE_VIEW( treeview ), NULL );
+       g_return_val_if_fail( treeview && GTK_IS_TREE_VIEW( treeview ), NULL );
 
-       g_debug( "%s: window=%p, treeview=%p, mode=%u", thisfn, ( void * ) window, ( void * ) treeview, mode 
);
+       g_debug( "%s: treeview=%p", thisfn, ( void * ) treeview );
 
+       /* create the underlying tree store */
        ts_model = gtk_tree_store_new(
                        TREE_N_COLUMN, GDK_TYPE_PIXBUF, G_TYPE_STRING, NA_TYPE_OBJECT );
 
-       /* create the filter model
-        */
+       /* create our filter model */
        model = g_object_new( NACT_TYPE_TREE_MODEL,
-                       "child-model",      ts_model,
-                       TREE_PROP_WINDOW,   window,
-                       TREE_PROP_TREEVIEW, treeview,
-                       TREE_PROP_MODE,     mode,
+                       "child-model", ts_model,
                        NULL );
        g_object_unref( ts_model );
 
        gtk_tree_model_filter_set_visible_func(
                        GTK_TREE_MODEL_FILTER( model ), ( GtkTreeModelFilterVisibleFunc ) filter_visible, 
model, NULL );
 
-       /* initialize the sortable interface
-        */
+       model->private->treeview = treeview;
+
+       /* initialize the sortable interface */
        order_mode = na_iprefs_get_order_mode( NULL );
        display_order_change( model, order_mode );
 
        return( model );
 }
 
+/**
+ * nact_tree_model_set_main_window:
+ * @tmodel: this #NactTreeModel instance
+ * @main_window: the #NactMainWindow.
+ *
+ * Attach the main window to the tree model, which is required to get
+ * a clipboard object, which is required to have a functional drag and
+ * drop.
+ */
+void
+nact_tree_model_set_main_window( NactTreeModel *tmodel, NactMainWindow *window )
+{
+       static const gchar *thisfn = "nact_tree_model_set_main_window";
+       NactTreeModelPrivate *priv;
+
+       g_return_if_fail( tmodel && NACT_IS_TREE_MODEL( tmodel ));
+       g_return_if_fail( window && NACT_IS_MAIN_WINDOW( window ));
+
+       g_debug( "%s: tmodel=%p, window=%p", thisfn, ( void * ) tmodel, ( void * ) window );
+
+       priv = tmodel->private;
+
+       if( !priv->dispose_has_run ){
+
+               priv->window = window;
+               priv->clipboard = nact_clipboard_new( window );
+
+               /* depends of window and edition mode */
+               connect_item_updated_signal( tmodel );
+       }
+}
+
+/**
+ * nact_tree_model_set_edition_mode:
+ * @tmodel: this #NactTreeModel instance
+ * @mode: the edition mode
+ *
+ * Set the edition mode which is required in order to rightly initialize
+ * the drag and drop code.
+ */
+void
+nact_tree_model_set_edition_mode( NactTreeModel *tmodel, guint mode )
+{
+       static const gchar *thisfn = "nact_tree_model_set_edition_mode";
+       NactTreeModelPrivate *priv;
+
+       g_return_if_fail( tmodel && NACT_IS_TREE_MODEL( tmodel ));
+
+       g_debug( "%s: tmodel=%p, mode=%u", thisfn, ( void * ) tmodel, mode );
+
+       priv = tmodel->private;
+
+       if( !priv->dispose_has_run ){
+
+               priv->mode = mode;
+
+               if( priv->mode == TREE_MODE_EDITION ){
+
+                       na_settings_register_key_callback(
+                                       NA_IPREFS_ITEMS_LIST_ORDER_MODE,
+                                       G_CALLBACK( on_settings_order_mode_changed ),
+                                       tmodel );
+
+                       /* depends of window and edition mode */
+                       connect_item_updated_signal( tmodel );
+
+                       /* depend of treeview and edition mode set */
+                       setup_dnd_edition( tmodel );
+               }
+       }
+}
+
+/*
+ * connect_item_updated_signal:
+ *
+ * Monitor the item updates when we have set the main window and if we
+ * are in edition mode
+ */
+static void
+connect_item_updated_signal( NactTreeModel *tmodel )
+{
+       NactTreeModelPrivate *priv;
+
+       priv = tmodel->private;
+
+       if( priv->window && priv->mode == TREE_MODE_EDITION && !priv->item_updated_connected ){
+
+               g_signal_connect( priv->window,
+                               MAIN_SIGNAL_ITEM_UPDATED, G_CALLBACK( on_main_item_updated ), tmodel );
+
+               priv->item_updated_connected = TRUE;
+       }
+}
+
 /*
  * NASettings callback for a change on NA_IPREFS_ITEMS_LIST_ORDER_MODE key
  */
@@ -557,9 +525,9 @@ on_settings_order_mode_changed( const gchar *group, const gchar *key, gconstpoin
  * if force_display is true, then refresh the display of the view
  */
 static void
-on_tab_updatable_item_updated( BaseWindow *window, NAIContext *context, guint data, NactTreeModel *model )
+on_main_item_updated( BaseWindow *window, NAIContext *context, guint data, NactTreeModel *model )
 {
-       static const gchar *thisfn = "nact_tree_model_on_tab_updatable_item_updated";
+       static const gchar *thisfn = "nact_tree_model_on_main_item_updated";
        GtkTreePath *path;
        GtkTreeStore *store;
        GtkTreeIter iter;
@@ -587,6 +555,46 @@ on_tab_updatable_item_updated( BaseWindow *window, NAIContext *context, guint da
        }
 }
 
+static void
+setup_dnd_edition( NactTreeModel *tmodel )
+{
+       NactTreeModelPrivate *priv;
+
+       priv = tmodel->private;
+
+       if( priv->mode == TREE_MODE_EDITION && priv->treeview && !priv->dnd_setup ){
+
+               egg_tree_multi_drag_add_drag_support(
+                               EGG_TREE_MULTI_DRAG_SOURCE( tmodel ),
+                               priv->treeview );
+
+               gtk_tree_view_enable_model_drag_dest(
+                               priv->treeview,
+                               tree_model_dnd_dest_formats,
+                               tree_model_dnd_dest_formats_count,
+                               nact_tree_model_dnd_imulti_drag_source_get_drag_actions( 
EGG_TREE_MULTI_DRAG_SOURCE( tmodel )));
+
+               g_signal_connect(
+                               priv->treeview, "drag-begin",
+                               G_CALLBACK( nact_tree_model_dnd_on_drag_begin ), priv->window );
+
+               /* connect: implies that we have to do all hard stuff
+                * connect_after: no more triggers drag-drop signal
+                */
+               /*base_window_signal_connect_after( window,
+                               G_OBJECT( model->private->treeview ), "drag-motion", G_CALLBACK( 
on_drag_motion ));*/
+
+               /*base_window_signal_connect( window,
+                               G_OBJECT( model->private->treeview ), "drag-drop", G_CALLBACK( on_drag_drop 
));*/
+
+               g_signal_connect(
+                               priv->treeview, "drag-end",
+                               G_CALLBACK( nact_tree_model_dnd_on_drag_end ), priv->window );
+
+               priv->dnd_setup = TRUE;
+       }
+}
+
 /**
  * nact_tree_model_delete:
  * @model: this #NactTreeModel instance.
diff --git a/src/nact/nact-tree-model.h b/src/nact/nact-tree-model.h
index d3815b3..9cd759f 100644
--- a/src/nact/nact-tree-model.h
+++ b/src/nact/nact-tree-model.h
@@ -44,9 +44,9 @@
 #ifndef __NACT_TREE_MODEL_H__
 #define __NACT_TREE_MODEL_H__
 
-#include <api/na-object.h>
+#include "api/na-object.h"
 
-#include "nact-tree-view.h"
+#include "nact-main-window-def.h"
 
 G_BEGIN_DECLS
 
@@ -61,17 +61,14 @@ typedef struct _NactTreeModelPrivate        NactTreeModelPrivate;
 
 typedef struct {
        /*< private >*/
-       GtkTreeModelFilter    parent;
-       NactTreeModelPrivate *private;
+       GtkTreeModelFilter      parent;
+       NactTreeModelPrivate   *private;
 }
        NactTreeModel;
 
-typedef struct _NactTreeModelClassPrivate   NactTreeModelClassPrivate;
-
 typedef struct {
        /*< private >*/
-       GtkTreeModelFilterClass    parent;
-       NactTreeModelClassPrivate *private;
+       GtkTreeModelFilterClass parent;
 }
        NactTreeModelClass;
 
@@ -85,19 +82,41 @@ enum {
        TREE_N_COLUMN
 };
 
-GType          nact_tree_model_get_type( void );
+GType          nact_tree_model_get_type        ( void );
+
+NactTreeModel *nact_tree_model_new             ( GtkTreeView *treeview );
+
+void           nact_tree_model_set_main_window ( NactTreeModel *tmodel,
+                                                                                                             
  NactMainWindow *main_window );
+
+void           nact_tree_model_set_edition_mode( NactTreeModel *tmodel,
+                                                                                                             
  guint mode );
+
+GtkTreePath   *nact_tree_model_delete          ( NactTreeModel *model,
+                                                                                                             
  NAObject *object );
+
+void           nact_tree_model_fill            ( NactTreeModel *model,
+                                                                                                             
  GList *items );
+
+GtkTreePath   *nact_tree_model_insert_before   ( NactTreeModel *model,
+                                                                                                             
  const NAObject *object,
+                                                                                                             
  GtkTreePath *path );
+
+GtkTreePath   *nact_tree_model_insert_into     ( NactTreeModel *model,
+                                                                                                             
  const NAObject *object,
+                                                                                                             
  GtkTreePath *path );
+
+NAObjectItem  *nact_tree_model_get_item_by_id  ( const NactTreeModel *model,
+                                                                                                             
  const gchar *id );
 
-NactTreeModel *nact_tree_model_new( BaseWindow *window, GtkTreeView *view, NactTreeMode mode );
+GList         *nact_tree_model_get_items       ( const NactTreeModel *model,
+                                                                                                             
  guint mode );
 
-GtkTreePath   *nact_tree_model_delete       ( NactTreeModel *model, NAObject *object );
-void           nact_tree_model_fill         ( NactTreeModel *model, GList *items );
-GtkTreePath   *nact_tree_model_insert_before( NactTreeModel *model, const NAObject *object, GtkTreePath 
*path );
-GtkTreePath   *nact_tree_model_insert_into  ( NactTreeModel *model, const NAObject *object, GtkTreePath 
*path );
+NAObject      *nact_tree_model_object_at_path  ( const NactTreeModel *model,
+                                                                                                             
  GtkTreePath *path );
 
-NAObjectItem  *nact_tree_model_get_item_by_id( const NactTreeModel *model, const gchar *id );
-GList         *nact_tree_model_get_items     ( const NactTreeModel *model, guint mode );
-NAObject      *nact_tree_model_object_at_path( const NactTreeModel *model, GtkTreePath *path );
-GtkTreePath   *nact_tree_model_object_to_path( const NactTreeModel *model, const NAObject *object );
+GtkTreePath   *nact_tree_model_object_to_path  ( const NactTreeModel *model,
+                                                                                                             
  const NAObject *object );
 
 G_END_DECLS
 
diff --git a/src/nact/nact-tree-view.c b/src/nact/nact-tree-view.c
index 0b8f6db..2447d6b 100644
--- a/src/nact/nact-tree-view.c
+++ b/src/nact/nact-tree-view.c
@@ -33,9 +33,9 @@
 
 #include <glib/gi18n.h>
 
-#include <api/na-object-api.h>
+#include "api/na-object-api.h"
 
-#include <core/na-gtk-utils.h>
+#include "core/na-gtk-utils.h"
 
 #include "base-keysyms.h"
 #include "nact-application.h"
@@ -45,42 +45,23 @@
 #include "nact-tree-model.h"
 #include "nact-tree-ieditable.h"
 
-/* private class data
- */
-struct _NactTreeViewClassPrivate {
-       void *empty;                                            /* so that gcc -pedantic is happy */
-};
-
 /* private instance data
  */
 struct _NactTreeViewPrivate {
-       gboolean       dispose_has_run;
+       gboolean        dispose_has_run;
 
        /* properties set at instanciation time
         */
-       BaseWindow    *window;
-       GtkContainer  *parent;
-       gchar         *widget_name;
-       guint          mode;
-       gboolean       notify_allowed;
+       NactMainWindow *window;
 
-       /* runtime data
+       /* initialization
         */
-       GtkTreeView   *tree_view;
-};
-
-/* instance properties
- */
-enum {
-       TREE_PROP_0,
-
-       TREE_PROP_WINDOW_ID,
-       TREE_PROP_PARENT_ID,
-       TREE_PROP_WIDGET_NAME_ID,
-       TREE_PROP_MODE_ID,
-       TREE_PROP_NOTIFY_ALLOWED_ID,
+       guint           mode;
+       gboolean        notify_allowed;
 
-       TREE_PROP_N_PROPERTIES
+       /* runtime data
+        */
+       GtkTreeView    *tree_view;
 };
 
 /* signals
@@ -92,6 +73,7 @@ enum {
        LEVEL_ZERO_CHANGED,
        MODIFIED_STATUS,
        SELECTION_CHANGED,
+       OPEN_POPUP,
        LAST_SIGNAL
 };
 
@@ -117,31 +99,25 @@ static GType      register_type( void );
 static void       class_init( NactTreeViewClass *klass );
 static void       tree_ieditable_iface_init( NactTreeIEditableInterface *iface, void *user_data );
 static void       instance_init( GTypeInstance *instance, gpointer klass );
-static void       instance_get_property( GObject *object, guint property_id, GValue *value, GParamSpec *spec 
);
-static void       instance_set_property( GObject *object, guint property_id, const GValue *value, GParamSpec 
*spec );
-static void       instance_constructed( GObject *object );
 static void       instance_dispose( GObject *application );
 static void       instance_finalize( GObject *application );
-
 static void       initialize_gtk( NactTreeView *view );
-static void       on_base_initialize_view( BaseWindow *window, gpointer user_data );
-static void       on_base_all_widgets_showed( BaseWindow *window, gpointer user_data );
-static gboolean   on_button_press_event( GtkWidget *widget, GdkEventButton *event, BaseWindow *window );
-static gboolean   on_focus_in( GtkWidget *widget, GdkEventFocus *event, BaseWindow *window );
-static gboolean   on_focus_out( GtkWidget *widget, GdkEventFocus *event, BaseWindow *window );
-static gboolean   on_key_pressed_event( GtkWidget *widget, GdkEventKey *event, BaseWindow *window );
-static gboolean   on_popup_menu( GtkWidget *widget, BaseWindow *window );
-static void       on_selection_changed( GtkTreeSelection *selection, BaseWindow *window );
-static void       on_tree_view_realized( GtkWidget *treeview, BaseWindow *window );
+static gboolean   on_button_press_event( GtkWidget *widget, GdkEventButton *event, NactTreeView *view );
+static gboolean   on_focus_in( GtkWidget *widget, GdkEventFocus *event, NactTreeView *view );
+static gboolean   on_focus_out( GtkWidget *widget, GdkEventFocus *event, NactTreeView *view );
+static gboolean   on_key_pressed_event( GtkWidget *widget, GdkEventKey *event, NactTreeView *view );
+static gboolean   on_popup_menu( GtkWidget *widget, NactTreeView *view );
+static void       on_selection_changed( GtkTreeSelection *selection, NactTreeView *view );
+static void       on_tree_view_realized( NactTreeView *treeview, void *empty );
 static void       clear_selection( NactTreeView *view );
+static void       on_selection_changed_cleanup_handler( NactTreeView *tview, GList *selected_items );
 static void       display_label( GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, 
GtkTreeIter *iter, NactTreeView *view );
 static void       extend_selection_to_children( NactTreeView *view, GtkTreeModel *model, GtkTreeIter *parent 
);
 static GList     *get_selected_items( NactTreeView *view );
-static GtkWidget *get_tree_view( NactTreeView *items_view );
 static void       iter_on_selection( NactTreeView *view, FnIterOnSelection fn_iter, gpointer user_data );
 static void       navigate_to_child( NactTreeView *view );
 static void       navigate_to_parent( NactTreeView *view );
-static void       do_open_popup( BaseWindow *window, GdkEventButton *event );
+static void       do_open_popup( NactTreeView *view, GdkEventButton *event );
 static void       select_row_at_path_by_string( NactTreeView *view, const gchar *path );
 static void       toggle_collapse( NactTreeView *view );
 static gboolean   toggle_collapse_iter( NactTreeView *view, GtkTreeModel *model, GtkTreeIter *iter, NAObject 
*object, gpointer user_data );
@@ -186,7 +162,7 @@ register_type( void )
 
        g_debug( "%s", thisfn );
 
-       type = g_type_register_static( G_TYPE_OBJECT, "NactTreeView", &info, 0 );
+       type = g_type_register_static( GTK_TYPE_BIN, "NactTreeView", &info, 0 );
 
        return( type );
 }
@@ -202,62 +178,9 @@ class_init( NactTreeViewClass *klass )
        st_parent_class = g_type_class_peek_parent( klass );
 
        object_class = G_OBJECT_CLASS( klass );
-       object_class->get_property = instance_get_property;
-       object_class->set_property = instance_set_property;
-       object_class->constructed = instance_constructed;
        object_class->dispose = instance_dispose;
        object_class->finalize = instance_finalize;
 
-       g_object_class_install_property( object_class, TREE_PROP_WINDOW_ID,
-                       g_param_spec_pointer(
-                                       TREE_PROP_WINDOW,
-                                       /* i18n: this is a class name and should not be translated */
-                                       _( "BaseWindow" ),
-                                       /* i18n: NactTreeView property long description */
-                                       _( "The BaseWindow parent" ),
-                                       G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE 
));
-
-       g_object_class_install_property( object_class, TREE_PROP_PARENT_ID,
-                       g_param_spec_pointer(
-                                       TREE_PROP_PARENT,
-                                       /* i18n: NactTreeView property short description */
-                                       _( "Container" ),
-                                       /* i18n: NactTreeView property long description */
-                                       _( "A GtkContainer which contains the GtkTreeView widget" ),
-                                       G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE 
));
-
-       g_object_class_install_property( object_class, TREE_PROP_WIDGET_NAME_ID,
-                       g_param_spec_string(
-                                       TREE_PROP_WIDGET_NAME,
-                                       /* i18n: NactTreeView property short description */
-                                       _( "Widget name" ),
-                                       /* i18n: NactTreeView property long description */
-                                       _( "The name of GtkTreeView widget" ),
-                                       "",
-                                       G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE 
));
-
-       g_object_class_install_property( object_class, TREE_PROP_MODE_ID,
-                       g_param_spec_uint(
-                                       TREE_PROP_MODE,
-                                       /* i18n: NactTreeView property short description */
-                                       _( "Management mode" ),
-                                       /* i18n: NactTreeView property long description */
-                                       _( "Management mode of the tree view, selection or edition" ),
-                                       0,
-                                       TREE_MODE_N_MODES,
-                                       TREE_MODE_SELECTION,
-                                       G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE ));
-
-       g_object_class_install_property( object_class, TREE_PROP_NOTIFY_ALLOWED_ID,
-                       g_param_spec_boolean(
-                                       TREE_PROP_NOTIFY_ALLOWED,
-                                       /* i18n: NactTreeView property short description */
-                                       _( "Allow notify" ),
-                                       /* i18n: NactTreeView property loong description */
-                                       _( "Whether notifications are allowed" ),
-                                       FALSE,
-                                       G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE ));
-
        /**
         * NactTreeView::tree-signal-count-changed:
         *
@@ -286,12 +209,12 @@ class_init( NactTreeViewClass *klass )
         */
        st_signals[ COUNT_CHANGED ] = g_signal_new(
                        TREE_SIGNAL_COUNT_CHANGED,
-                       G_TYPE_OBJECT,
+                       NACT_TYPE_TREE_VIEW,
                        G_SIGNAL_RUN_LAST,
                        0,                                              /* no default handler */
                        NULL,
                        NULL,
-                       nact_cclosure_marshal_VOID__BOOLEAN_INT_INT_INT,
+                       NULL,
                        G_TYPE_NONE,
                        4,
                        G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT );
@@ -309,12 +232,12 @@ class_init( NactTreeViewClass *klass )
         */
        st_signals[ FOCUS_IN ] = g_signal_new(
                        TREE_SIGNAL_FOCUS_IN,
-                       G_TYPE_OBJECT,
+                       NACT_TYPE_TREE_VIEW,
                        G_SIGNAL_RUN_LAST,
                        0,
                        NULL,
                        NULL,
-                       g_cclosure_marshal_VOID__VOID,
+                       NULL,
                        G_TYPE_NONE,
                        0 );
 
@@ -331,12 +254,12 @@ class_init( NactTreeViewClass *klass )
         */
        st_signals[ FOCUS_OUT ] = g_signal_new(
                        TREE_SIGNAL_FOCUS_OUT,
-                       G_TYPE_OBJECT,
+                       NACT_TYPE_TREE_VIEW,
                        G_SIGNAL_RUN_LAST,
                        0,
                        NULL,
                        NULL,
-                       g_cclosure_marshal_VOID__VOID,
+                       NULL,
                        G_TYPE_NONE,
                        0 );
 
@@ -356,12 +279,12 @@ class_init( NactTreeViewClass *klass )
         */
        st_signals[ LEVEL_ZERO_CHANGED ] = g_signal_new(
                        TREE_SIGNAL_LEVEL_ZERO_CHANGED,
-                       G_TYPE_OBJECT,
+                       NACT_TYPE_TREE_VIEW,
                        G_SIGNAL_RUN_LAST,
                        0,                                      /* no default handler */
                        NULL,
                        NULL,
-                       g_cclosure_marshal_VOID__BOOLEAN,
+                       NULL,
                        G_TYPE_NONE,
                        1,
                        G_TYPE_BOOLEAN );
@@ -384,17 +307,72 @@ class_init( NactTreeViewClass *klass )
         */
        st_signals[ MODIFIED_STATUS ] = g_signal_new(
                        TREE_SIGNAL_MODIFIED_STATUS_CHANGED,
-                       G_TYPE_OBJECT,
+                       NACT_TYPE_TREE_VIEW,
                        G_SIGNAL_RUN_LAST,
                        0,
                        NULL,
                        NULL,
-                       g_cclosure_marshal_VOID__BOOLEAN,
+                       NULL,
                        G_TYPE_NONE,
                        1,
                        G_TYPE_BOOLEAN );
 
-       klass->private = g_new0( NactTreeViewClassPrivate, 1 );
+       /**
+        * NactTreeView::tree-selection-changed:
+        *
+        * This signal is emitted on the treeview each time the selection
+        * has changed after having set the current item/profile/context
+        * properties.
+        *
+        * This way, we are sure that notebook edition tabs which required
+        * to have a current item/profile/context will have it, whenever
+        * they have connected to this 'selection-changed' signal.
+        *
+        * Signal args:
+        * - a #GList of currently selected #NAObjectItems.
+        *
+        * Handler prototype:
+        *   void handler( NactTreeView *tview,
+        *                              GList       *selected,
+        *                              void        *user_data );
+        */
+       st_signals[ SELECTION_CHANGED ] = g_signal_new_class_handler(
+                       TREE_SIGNAL_SELECTION_CHANGED,
+                       NACT_TYPE_TREE_VIEW,
+                       G_SIGNAL_RUN_CLEANUP,
+                       G_CALLBACK( on_selection_changed_cleanup_handler ),
+                       NULL,
+                       NULL,
+                       NULL,
+                       G_TYPE_NONE,
+                       1,
+                       G_TYPE_POINTER );
+
+       /**
+        * NactTreeView::tree-signal-open-popup
+        *
+        * This signal is emitted on the treeview when the user right
+        * clicks somewhere (on an active zone).
+        *
+        * Signal args:
+        * - the GdkEvent
+        *
+        * Handler prototype:
+        *   void handler( NactTreeView *tview,
+        *                              GdkEvent    *event,
+        *                              void        *user_data );
+        */
+       st_signals[ OPEN_POPUP ] = g_signal_new(
+                       TREE_SIGNAL_CONTEXT_MENU,
+                       NACT_TYPE_TREE_VIEW,
+                       G_SIGNAL_RUN_LAST,
+                       0,
+                       NULL,
+                       NULL,
+                       NULL,
+                       G_TYPE_NONE,
+                       1,
+                       G_TYPE_POINTER );
 }
 
 static void
@@ -424,120 +402,6 @@ instance_init( GTypeInstance *instance, gpointer klass )
 }
 
 static void
-instance_get_property( GObject *object, guint property_id, GValue *value, GParamSpec *spec )
-{
-       NactTreeView *self;
-
-       g_return_if_fail( NACT_IS_TREE_VIEW( object ));
-       self = NACT_TREE_VIEW( object );
-
-       if( !self->private->dispose_has_run ){
-
-               switch( property_id ){
-                       case TREE_PROP_WINDOW_ID:
-                               g_value_set_pointer( value, self->private->window );
-                               break;
-
-                       case TREE_PROP_PARENT_ID:
-                               g_value_set_pointer( value, self->private->parent );
-                               break;
-
-                       case TREE_PROP_WIDGET_NAME_ID:
-                               g_value_set_string( value, self->private->widget_name );
-                               break;
-
-                       case TREE_PROP_MODE_ID:
-                               g_value_set_uint( value, self->private->mode );
-                               break;
-
-                       case TREE_PROP_NOTIFY_ALLOWED_ID:
-                               g_value_set_boolean( value, self->private->notify_allowed );
-                               break;
-
-                       default:
-                               G_OBJECT_WARN_INVALID_PROPERTY_ID( object, property_id, spec );
-                               break;
-               }
-       }
-}
-
-static void
-instance_set_property( GObject *object, guint property_id, const GValue *value, GParamSpec *spec )
-{
-       NactTreeView *self;
-
-       g_return_if_fail( NACT_IS_TREE_VIEW( object ));
-       self = NACT_TREE_VIEW( object );
-
-       if( !self->private->dispose_has_run ){
-
-               switch( property_id ){
-                       case TREE_PROP_WINDOW_ID:
-                               self->private->window = g_value_get_pointer( value );
-                               break;
-
-                       case TREE_PROP_PARENT_ID:
-                               self->private->parent = g_value_get_pointer( value );
-                               break;
-
-                       case TREE_PROP_WIDGET_NAME_ID:
-                               g_free( self->private->widget_name );
-                               self->private->widget_name = g_value_dup_string( value );
-                               break;
-
-                       case TREE_PROP_MODE_ID:
-                               self->private->mode = g_value_get_uint( value );
-                               break;
-
-                       case TREE_PROP_NOTIFY_ALLOWED_ID:
-                               self->private->notify_allowed = g_value_get_boolean( value );
-                               break;
-
-                       default:
-                               G_OBJECT_WARN_INVALID_PROPERTY_ID( object, property_id, spec );
-                               break;
-               }
-       }
-}
-
-static void
-instance_constructed( GObject *object )
-{
-       static const gchar *thisfn = "nact_tree_view_instance_constructed";
-       NactTreeViewPrivate *priv;
-
-       g_return_if_fail( NACT_IS_TREE_VIEW( object ));
-
-       priv = NACT_TREE_VIEW( object )->private;
-
-       if( !priv->dispose_has_run ){
-
-               /* chain up to the parent class */
-               if( G_OBJECT_CLASS( st_parent_class )->constructed ){
-                       G_OBJECT_CLASS( st_parent_class )->constructed( object );
-               }
-
-               g_debug( "%s: object=%p (%s)", thisfn, ( void * ) object, G_OBJECT_TYPE_NAME( object ));
-
-               base_window_signal_connect(
-                               priv->window,
-                               G_OBJECT( priv->window ),
-                               BASE_SIGNAL_INITIALIZE_WINDOW,
-                               G_CALLBACK( on_base_initialize_view ));
-
-               base_window_signal_connect(
-                               priv->window,
-                               G_OBJECT( priv->window ),
-                               BASE_SIGNAL_SHOW_WIDGETS,
-                               G_CALLBACK( on_base_all_widgets_showed ));
-
-               g_object_set_data( G_OBJECT( priv->window ), WINDOW_DATA_TREE_VIEW, object );
-
-               initialize_gtk( NACT_TREE_VIEW( object ));
-       }
-}
-
-static void
 instance_dispose( GObject *object )
 {
        static const gchar *thisfn = "nact_tree_view_instance_dispose";
@@ -575,8 +439,6 @@ instance_finalize( GObject *instance )
 
        self = NACT_TREE_VIEW( instance );
 
-       g_free( self->private->widget_name );
-
        g_free( self->private );
 
        /* chain call to parent class */
@@ -587,61 +449,53 @@ instance_finalize( GObject *instance )
 
 /**
  * nact_tree_view_new:
- * @window: the BaseWindow which embeds the tree view.
- * @parent: the GtkContainer parent of the tree view.
- * @treeview_name: the GtkTreeView widget name.
- * @mode: management mode.
  *
  * Returns: a newly allocated NactTreeView object, which will be owned
- * by the caller. It is useless to unref it as it will automatically
- * auto-destroys itself at @window finalization.
- *
- * This function is called from NactMainWindow::on_base_initialize_gtk()
- * signal handler, thus only once during the application life.
+ * by the caller. It is useless to unref it as it will be automatically
+ * destroyed at @window finalization.
  */
 NactTreeView *
-nact_tree_view_new( BaseWindow *window, GtkContainer *parent, const gchar *treeview_name, NactTreeMode mode )
+nact_tree_view_new( NactMainWindow *main_window )
 {
        NactTreeView *view;
 
-       view = g_object_new( NACT_TYPE_TREE_VIEW,
-                       TREE_PROP_WINDOW,      window,
-                       TREE_PROP_PARENT,      parent,
-                       TREE_PROP_WIDGET_NAME, treeview_name,
-                       TREE_PROP_MODE,        mode,
-                       NULL );
+       view = g_object_new( NACT_TYPE_TREE_VIEW, NULL );
+       view->private->window = main_window;
+
+       initialize_gtk( view );
+
+       /* delay all other signal connections until the widget be realized */
+       g_signal_connect( view, "realize", G_CALLBACK( on_tree_view_realized ), NULL );
 
        return( view );
 }
 
-/*
- * called from instance_constructed()
- *   from nact_tree_view_new()
- *     from NactMainWindow::on_base_initialize_gtk() signal handler
- */
 static void
-initialize_gtk( NactTreeView *items_view )
+initialize_gtk( NactTreeView *view )
 {
        static const gchar *thisfn = "nact_tree_view_initialize_gtk";
-       GtkTreeView *treeview;
+       NactTreeViewPrivate *priv;
+       GtkWidget *scrolled, *tview;
        NactTreeModel *model;
-       GtkWidget *label;
        GtkTreeViewColumn *column;
        GtkCellRenderer *renderer;
        GtkTreeSelection *selection;
-       GList *renderers;
 
-       g_debug( "%s: items_view=%p", thisfn, ( void * ) items_view );
+       g_debug( "%s: view=%p", thisfn, ( void * ) view );
 
-       treeview = GTK_TREE_VIEW( get_tree_view( items_view ));
-       model = nact_tree_model_new( items_view->private->window, treeview, items_view->private->mode );
-       gtk_tree_view_set_model( treeview, GTK_TREE_MODEL( model ));
-       g_object_unref( model );
-       g_debug( "%s: nact_tree_model_ref_count=%d", thisfn, G_OBJECT( model )->ref_count );
+       priv = view->private;
 
-       /* associates the ItemsView to the label */
-       label = na_gtk_utils_find_widget_by_name( items_view->private->parent, "ActionsListLabel" );
-       gtk_label_set_mnemonic_widget( GTK_LABEL( label ), GTK_WIDGET( treeview ));
+       scrolled = gtk_scrolled_window_new( NULL, NULL );
+       gtk_container_add( GTK_CONTAINER( view ), scrolled );
+
+       tview = gtk_tree_view_new();
+       gtk_container_add( GTK_CONTAINER( scrolled ), tview );
+       priv->tree_view = GTK_TREE_VIEW( tview );
+
+       model = nact_tree_model_new( GTK_TREE_VIEW( tview ));
+       nact_tree_model_set_main_window( model, priv->window );
+       gtk_tree_view_set_model( GTK_TREE_VIEW( tview ), GTK_TREE_MODEL( model ));
+       g_object_unref( model );
 
        /* create visible columns on the tree view
         */
@@ -650,7 +504,7 @@ initialize_gtk( NactTreeView *items_view )
                        gtk_cell_renderer_pixbuf_new(),
                        "pixbuf", TREE_COLUMN_ICON,
                        NULL );
-       gtk_tree_view_append_column( treeview, column );
+       gtk_tree_view_append_column( GTK_TREE_VIEW( tview ), column );
 
        renderer = gtk_cell_renderer_text_new();
        column = gtk_tree_view_column_new_with_attributes(
@@ -659,90 +513,96 @@ initialize_gtk( NactTreeView *items_view )
                        "text", TREE_COLUMN_LABEL,
                        NULL );
        gtk_tree_view_column_set_sort_column_id( column, TREE_COLUMN_LABEL );
-       gtk_tree_view_append_column( treeview, column );
+       gtk_tree_view_append_column( GTK_TREE_VIEW( tview ), column );
 
        /* allow multiple selection
         */
-       selection = gtk_tree_view_get_selection( treeview );
+       selection = gtk_tree_view_get_selection( GTK_TREE_VIEW( tview ));
        gtk_tree_selection_set_mode( selection, GTK_SELECTION_MULTIPLE );
+       g_signal_connect( selection, "changed", G_CALLBACK( on_selection_changed ), view );
 
        /* misc properties
         */
-       gtk_tree_view_set_enable_tree_lines( treeview, TRUE );
-
-       if( items_view->private->mode == TREE_MODE_EDITION ){
-               column = gtk_tree_view_get_column( treeview, TREE_COLUMN_LABEL );
-               renderers = gtk_cell_layout_get_cells( GTK_CELL_LAYOUT( column ));
-               renderer = GTK_CELL_RENDERER( renderers->data );
-               gtk_tree_view_column_set_cell_data_func(
-                               column, renderer, ( GtkTreeCellDataFunc ) display_label, items_view, NULL );
-       }
+       gtk_tree_view_set_enable_tree_lines( GTK_TREE_VIEW( tview ), TRUE );
 }
 
-static void
-on_base_initialize_view( BaseWindow *window, gpointer user_data )
+/**
+ * nact_tree_view_set_mnemonic:
+ * @view: this #NactTreeView
+ * @parent: a parent container of the mnemonic label
+ * @widget_name: the name of the mnemonic label
+ *
+ * Setup the mnemonic label
+ */
+void
+nact_tree_view_set_mnemonic( NactTreeView *view, GtkContainer *parent, const gchar *widget_name )
 {
-       static const gchar *thisfn = "nact_tree_view_on_base_initialize_view";
-       NactTreeView *items_view;
-       GtkTreeView *treeview;
-       GtkTreeSelection *selection;
+       NactTreeViewPrivate *priv;
+       GtkWidget *label;
 
-       items_view = NACT_TREE_VIEW( g_object_get_data( G_OBJECT( window ), WINDOW_DATA_TREE_VIEW ));
+       g_return_if_fail( view && NACT_IS_TREE_VIEW( view ));
+       g_return_if_fail( widget_name && g_utf8_strlen( widget_name, -1 ));
 
-       if( !items_view->private->dispose_has_run ){
+       priv = view->private;
 
-               g_debug( "%s: window=%p (%s), user_data=%p",
-                               thisfn,
-                               ( void * ) window, G_OBJECT_TYPE_NAME( window ),
-                               ( void * ) user_data );
-
-               treeview = GTK_TREE_VIEW( get_tree_view( items_view ));
-               items_view->private->tree_view = treeview;
-
-               /* monitors the selection */
-               selection = gtk_tree_view_get_selection( treeview );
-               base_window_signal_connect(
-                               window,
-                               G_OBJECT( selection ),
-                               "changed",
-                               G_CALLBACK( on_selection_changed ));
-
-               /* delay all other signal connections until the widget be realized
-                */
-               base_window_signal_connect(
-                               window,
-                               G_OBJECT( treeview ),
-                               "realize",
-                               G_CALLBACK( on_tree_view_realized ));
-
-               if( items_view->private->mode == TREE_MODE_EDITION ){
-                       nact_tree_ieditable_initialize( NACT_TREE_IEDITABLE( items_view ), treeview, window );
-               }
+       if( !priv->dispose_has_run ){
+
+               label = na_gtk_utils_find_widget_by_name( parent, widget_name );
+               g_return_if_fail( label && GTK_IS_LABEL( label ));
+               gtk_label_set_mnemonic_widget( GTK_LABEL( label ), GTK_WIDGET( priv->tree_view ));
        }
 }
 
-static void
-on_base_all_widgets_showed( BaseWindow *window, gpointer user_data )
+/**
+ * nact_tree_view_set_edition_mode:
+ * @view: this #NactTreeView
+ * @mode: the edition mode
+ *
+ * Setup the edition mode
+ */
+void
+nact_tree_view_set_edition_mode( NactTreeView *view, guint mode )
 {
-       static const gchar *thisfn = "nact_tree_view_on_base_all_widgets_showed";
-       NactTreeView *items_view;
+       NactTreeViewPrivate *priv;
+       GtkTreeViewColumn *column;
+       GList *renderers;
+       GtkCellRenderer *renderer;
+       GtkTreeModel *tmodel;
+
+       g_return_if_fail( view && NACT_IS_TREE_VIEW( view ));
+
+       priv = view->private;
+
+       if( !priv->dispose_has_run ){
+
+               priv->mode = mode;
+
+               if( priv->mode == TREE_MODE_EDITION ){
 
-       items_view = NACT_TREE_VIEW( g_object_get_data( G_OBJECT( window ), WINDOW_DATA_TREE_VIEW ));
+                       column = gtk_tree_view_get_column( priv->tree_view, TREE_COLUMN_LABEL );
+                       renderers = gtk_cell_layout_get_cells( GTK_CELL_LAYOUT( column ));
+                       renderer = GTK_CELL_RENDERER( renderers->data );
+                       gtk_tree_view_column_set_cell_data_func(
+                                       column, renderer, ( GtkTreeCellDataFunc ) display_label, view, NULL );
 
-       if( !items_view->private->dispose_has_run ){
-               g_debug( "%s: window=%p (%s), user_data=%p",
-                               thisfn, ( void * ) window, G_OBJECT_TYPE_NAME( window ), ( void * ) user_data 
);
+                       nact_tree_ieditable_initialize(
+                                       NACT_TREE_IEDITABLE( view ), priv->tree_view, priv->window );
+               }
+
+               tmodel = gtk_tree_view_get_model( priv->tree_view );
+               g_return_if_fail( tmodel && NACT_IS_TREE_MODEL( tmodel ));
+               nact_tree_model_set_edition_mode( NACT_TREE_MODEL( tmodel ), mode );
        }
 }
 
 static gboolean
-on_button_press_event( GtkWidget *widget, GdkEventButton *event, BaseWindow *window )
+on_button_press_event( GtkWidget *widget, GdkEventButton *event, NactTreeView *view )
 {
        gboolean stop = FALSE;
 
        /* single click on right button */
        if( event->type == GDK_BUTTON_PRESS && event->button == 3 ){
-               do_open_popup( window, event );
+               do_open_popup( view, event );
                stop = TRUE;
        }
 
@@ -756,47 +616,41 @@ on_button_press_event( GtkWidget *widget, GdkEventButton *event, BaseWindow *win
  * delete current row in the list!
  */
 static gboolean
-on_focus_in( GtkWidget *widget, GdkEventFocus *event, BaseWindow *window )
+on_focus_in( GtkWidget *widget, GdkEventFocus *event, NactTreeView *view )
 {
        gboolean stop = FALSE;
 
-       g_signal_emit_by_name( window, TREE_SIGNAL_FOCUS_IN );
+       g_signal_emit_by_name( view, TREE_SIGNAL_FOCUS_IN );
 
        return( stop );
 }
 
 static gboolean
-on_focus_out( GtkWidget *widget, GdkEventFocus *event, BaseWindow *window )
+on_focus_out( GtkWidget *widget, GdkEventFocus *event, NactTreeView *view )
 {
        gboolean stop = FALSE;
 
-       g_signal_emit_by_name( window, TREE_SIGNAL_FOCUS_OUT );
+       g_signal_emit_by_name( view, TREE_SIGNAL_FOCUS_OUT );
 
        return( stop );
 }
 
 static gboolean
-on_key_pressed_event( GtkWidget *widget, GdkEventKey *event, BaseWindow *window )
+on_key_pressed_event( GtkWidget *widget, GdkEventKey *event, NactTreeView *view )
 {
        gboolean stop = FALSE;
-       NactTreeView *items_view;
-
-       items_view = NACT_TREE_VIEW( g_object_get_data( G_OBJECT( window ), WINDOW_DATA_TREE_VIEW ));
 
-       if( !items_view->private->dispose_has_run ){
-
-               if( event->keyval == NACT_KEY_Return || event->keyval == NACT_KEY_KP_Enter ){
-                       toggle_collapse( items_view );
-                       stop = TRUE;
-               }
-               if( event->keyval == NACT_KEY_Right ){
-                       navigate_to_child( items_view );
-                       stop = TRUE;
-               }
-               if( event->keyval == NACT_KEY_Left ){
-                       navigate_to_parent( items_view );
-                       stop = TRUE;
-               }
+       if( event->keyval == NACT_KEY_Return || event->keyval == NACT_KEY_KP_Enter ){
+               toggle_collapse( view );
+               stop = TRUE;
+       }
+       if( event->keyval == NACT_KEY_Right ){
+               navigate_to_child( view );
+               stop = TRUE;
+       }
+       if( event->keyval == NACT_KEY_Left ){
+               navigate_to_parent( view );
+               stop = TRUE;
        }
 
        return( stop );
@@ -806,75 +660,61 @@ on_key_pressed_event( GtkWidget *widget, GdkEventKey *event, BaseWindow *window
  * triggered by the "popup-menu" signal, itself triggered by the keybindings
  */
 static gboolean
-on_popup_menu( GtkWidget *widget, BaseWindow *window )
+on_popup_menu( GtkWidget *widget, NactTreeView *view )
 {
-       do_open_popup( window, NULL );
+       do_open_popup( view, NULL );
        return( TRUE );
 }
 /*
  * handles the "changed" signal emitted on the GtkTreeSelection
  */
 static void
-on_selection_changed( GtkTreeSelection *selection, BaseWindow *window )
+on_selection_changed( GtkTreeSelection *selection, NactTreeView *view )
 {
        static const gchar *thisfn = "nact_tree_view_on_selection_changed";
-       NactTreeView *items_view;
        GList *selected_items;
 
-       items_view = NACT_TREE_VIEW( g_object_get_data( G_OBJECT( window ), WINDOW_DATA_TREE_VIEW ));
-
-       if( !items_view->private->dispose_has_run ){
-               if( items_view->private->notify_allowed ){
-                       g_debug( "%s: selection=%p, window=%p", thisfn, ( void * ) selection, ( void * ) 
window );
-
-                       selected_items = get_selected_items( items_view );
-                       g_signal_emit_by_name( window, MAIN_SIGNAL_SELECTION_CHANGED, selected_items );
-               }
+       if( view->private->notify_allowed ){
+               g_debug( "%s: selection=%p, view=%p", thisfn, ( void * ) selection, ( void * ) view );
+               selected_items = get_selected_items( view );
+               g_signal_emit_by_name( view, TREE_SIGNAL_SELECTION_CHANGED, selected_items );
        }
 }
 
+/*
+ * the NactTreeView is realized
+ */
 static void
-on_tree_view_realized( GtkWidget *treeview, BaseWindow *window )
+on_tree_view_realized( NactTreeView *treeview, void *empty )
 {
+       NactTreeViewPrivate *priv;
+
        g_debug( "nact_tree_view_on_tree_view_realized" );
 
+       priv = treeview->private;
+
        /* expand/collapse with the keyboard */
-       base_window_signal_connect(
-                       window,
-                       G_OBJECT( treeview ),
-                       "key-press-event",
-                       G_CALLBACK( on_key_pressed_event ));
+       g_signal_connect(
+                       priv->tree_view, "key-press-event", G_CALLBACK( on_key_pressed_event ), treeview );
 
        /* monitors whether the focus is on the view */
-       base_window_signal_connect(
-                       window,
-                       G_OBJECT( treeview ),
-                       "focus-in-event",
-                       G_CALLBACK( on_focus_in ));
-
-       base_window_signal_connect(
-                       window,
-                       G_OBJECT( treeview ),
-                       "focus-out-event",
-                       G_CALLBACK( on_focus_out ));
+       g_signal_connect(
+                       priv->tree_view, "focus-in-event", G_CALLBACK( on_focus_in ), treeview );
+
+       g_signal_connect(
+                       priv->tree_view, "focus-out-event", G_CALLBACK( on_focus_out ), treeview );
 
        /* monitors mouse events */
-       base_window_signal_connect(
-                       window,
-                       G_OBJECT( treeview ),
-                       "button-press-event",
-                       G_CALLBACK( on_button_press_event ));
-
-       base_window_signal_connect(
-                       window,
-                       G_OBJECT( treeview ),
-                       "popup-menu",
-                       G_CALLBACK( on_popup_menu ));
+       g_signal_connect(
+                       priv->tree_view, "button-press-event", G_CALLBACK( on_button_press_event ), treeview 
);
+
+       g_signal_connect(
+                       priv->tree_view, "popup-menu", G_CALLBACK( on_popup_menu ), treeview );
 
        /* force the treeview to have the focus at start
         * and select the first row if it exists
         */
-       gtk_widget_grab_focus( treeview );
+       gtk_widget_grab_focus( GTK_WIDGET( priv->tree_view ));
 }
 
 /**
@@ -908,8 +748,8 @@ nact_tree_view_fill( NactTreeView *view, GList *items )
 
                view->private->notify_allowed = TRUE;
                na_object_count_items( items, &nb_menus, &nb_actions, &nb_profiles );
-               g_signal_emit_by_name( view->private->window, TREE_SIGNAL_COUNT_CHANGED, TRUE, nb_menus, 
nb_actions, nb_profiles );
-               g_signal_emit_by_name( view->private->window, TREE_SIGNAL_MODIFIED_STATUS_CHANGED, FALSE );
+               g_signal_emit_by_name( view, TREE_SIGNAL_COUNT_CHANGED, TRUE, nb_menus, nb_actions, 
nb_profiles );
+               g_signal_emit_by_name( view, TREE_SIGNAL_MODIFIED_STATUS_CHANGED, FALSE );
 
                select_row_at_path_by_string( view, "0" );
        }
@@ -1126,7 +966,7 @@ nact_tree_view_select_row_at_path( NactTreeView *view, GtkTreePath *path )
 
                if( !something ){
                        if( view->private->notify_allowed ){
-                               g_signal_emit_by_name( view->private->window, MAIN_SIGNAL_SELECTION_CHANGED, 
NULL );
+                               g_signal_emit_by_name( view, TREE_SIGNAL_SELECTION_CHANGED, NULL );
                        }
                }
        }
@@ -1142,6 +982,21 @@ clear_selection( NactTreeView *view )
 }
 
 /*
+ * signal cleanup handler
+ */
+static void
+on_selection_changed_cleanup_handler( NactTreeView *tview, GList *selected_items )
+{
+       static const gchar *thisfn = "nact_tree_view_on_selection_changed_cleanup_handler";
+
+       g_debug( "%s: tview=%p, selected_items=%p (count=%u)",
+                       thisfn, ( void * ) tview,
+                       ( void * ) selected_items, g_list_length( selected_items ));
+
+       na_object_free_items( selected_items );
+}
+
+/*
  * item modified: italic
  * item not saveable (invalid): red
  */
@@ -1240,14 +1095,6 @@ get_selected_items( NactTreeView *view )
        return( g_list_reverse( items ));
 }
 
-static GtkWidget *
-get_tree_view( NactTreeView *items_view )
-{
-       return( na_gtk_utils_find_widget_by_name(
-                       items_view->private->parent,
-                       items_view->private->widget_name ));
-}
-
 static void
 iter_on_selection( NactTreeView *view, FnIterOnSelection fn_iter, gpointer user_data )
 {
@@ -1366,21 +1213,21 @@ navigate_to_parent( NactTreeView *view )
 }
 
 static void
-do_open_popup( BaseWindow *window, GdkEventButton *event )
+do_open_popup( NactTreeView *view, GdkEventButton *event )
 {
-       NactTreeView *items_view;
+       NactTreeViewPrivate *priv;
        GtkTreePath *path;
 
-       if( event ){
-               items_view = NACT_TREE_VIEW( g_object_get_data( G_OBJECT( window ), WINDOW_DATA_TREE_VIEW ));
+       priv = view->private;
 
-               if( gtk_tree_view_get_path_at_pos( items_view->private->tree_view, event->x, event->y, &path, 
NULL, NULL, NULL )){
-                       nact_tree_view_select_row_at_path( items_view, path );
+       if( event ){
+               if( gtk_tree_view_get_path_at_pos( priv->tree_view, event->x, event->y, &path, NULL, NULL, 
NULL )){
+                       nact_tree_view_select_row_at_path( view, path );
                        gtk_tree_path_free( path );
                }
        }
 
-       g_signal_emit_by_name( window, MAIN_SIGNAL_CONTEXT_MENU, event, "/ui/TreeContext" );
+       g_signal_emit_by_name( view, TREE_SIGNAL_CONTEXT_MENU, event );
 }
 
 /*
diff --git a/src/nact/nact-tree-view.h b/src/nact/nact-tree-view.h
index 355f13d..8364397 100644
--- a/src/nact/nact-tree-view.h
+++ b/src/nact/nact-tree-view.h
@@ -47,9 +47,10 @@
  * construction time.
  */
 
-#include <api/na-object-item.h>
+#include "api/na-object-item.h"
 
 #include "base-window.h"
+#include "nact-main-window-def.h"
 
 G_BEGIN_DECLS
 
@@ -64,37 +65,18 @@ typedef struct _NactTreeViewPrivate        NactTreeViewPrivate;
 
 typedef struct {
        /*< private >*/
-       GObject              parent;
+       GtkBin               parent;
        NactTreeViewPrivate *private;
 }
        NactTreeView;
 
-typedef struct _NactTreeViewClassPrivate   NactTreeViewClassPrivate;
-
 typedef struct {
        /*< private >*/
-       GObjectClass              parent;
-       NactTreeViewClassPrivate *private;
+       GtkBinClass          parent;
 }
        NactTreeViewClass;
 
 /**
- * Properties defined by the NactTreeView class.
- * They should be provided at object instantiation time.
- *
- * @TREE_PROP_WINDOW:         the BaseWindow.
- * @TREE_PROP_PARENT:         the widget which is parent of this tree view.
- * @TREE_PROP_WIDGET_NAME:    the tree view widget name.
- * @TREE_PROP_MODE:           management mode.
- * @TREE_PROP_NOTIFY_ALLOWED: whether notifications are allowed.
- */
-#define TREE_PROP_WINDOW                                               "tree-prop-window"
-#define TREE_PROP_PARENT                                               "tree-prop-parent"
-#define TREE_PROP_WIDGET_NAME                                  "tree-prop-widget-name"
-#define TREE_PROP_MODE                                                 "tree-prop-mode"
-#define TREE_PROP_NOTIFY_ALLOWED                               "tree-prop-notify-allowed"
-
-/**
  * Signals emitted by the NactTreeView instance.
  */
 #define TREE_SIGNAL_COUNT_CHANGED                              "tree-signal-count-changed"
@@ -102,9 +84,11 @@ typedef struct {
 #define TREE_SIGNAL_FOCUS_OUT                                  "tree-signal-focus-out"
 #define TREE_SIGNAL_LEVEL_ZERO_CHANGED                 "tree-signal-level-zero-changed"
 #define TREE_SIGNAL_MODIFIED_STATUS_CHANGED            "tree-signal-modified-status-changed"
+#define TREE_SIGNAL_SELECTION_CHANGED              "tree-selection-changed"
+#define TREE_SIGNAL_CONTEXT_MENU                           "tree-signal-open-popup"
 
 typedef enum {
-       TREE_MODE_EDITION = 0,
+       TREE_MODE_EDITION = 1,
        TREE_MODE_SELECTION,
        /*< private >*/
        TREE_MODE_N_MODES
@@ -112,7 +96,7 @@ typedef enum {
        NactTreeMode;
 
 /**
- * When getting a list of items; these indcators may be OR-ed.
+ * When getting a list of items; these indicators may be OR-ed.
  */
 enum {
        TREE_LIST_SELECTED = 1<<0,
@@ -121,17 +105,18 @@ enum {
        TREE_LIST_DELETED  = 1<<8,
 };
 
-/**
- * The NactTreeView is attached to the parent BaseWindow via a GObject data.
- * Only NactTreeView itself and NactTreeIEditable interface should use it.
- */
-#define WINDOW_DATA_TREE_VIEW                                  "window-data-tree-view"
-
 GType         nact_tree_view_get_type( void );
 
-NactTreeView *nact_tree_view_new( BaseWindow *window, GtkContainer *parent, const gchar *treeview_name, 
NactTreeMode mode );
+NactTreeView *nact_tree_view_new               ( NactMainWindow *main_window );
+
+void          nact_tree_view_set_mnemonic      ( NactTreeView *view,
+                                                                                                             
  GtkContainer *parent,
+                                                                                                             
  const gchar *widget_name );
+
+void          nact_tree_view_set_edition_mode  ( NactTreeView *view,
+                                                                                                             
  NactTreeMode mode );
 
-void          nact_tree_view_fill     ( NactTreeView *view, GList *items );
+void          nact_tree_view_fill              ( NactTreeView *view, GList *items );
 
 gboolean      nact_tree_view_are_notify_allowed( const NactTreeView *view );
 void          nact_tree_view_set_notify_allowed( NactTreeView *view, gboolean allow );
diff --git a/src/nact/nautilus-actions-config-tool.actions b/src/nact/nautilus-actions-config-tool.actions
index c3e9748..69a96cb 100644
--- a/src/nact/nautilus-actions-config-tool.actions
+++ b/src/nact/nautilus-actions-config-tool.actions
@@ -1,107 +1,225 @@
-<?xml version="1.0"?>
-<ui>
-    <menubar name="MainMenubar">
-        <menu action="FileMenu">
-            <menuitem action="NewMenuItem" />
-            <menuitem action="NewActionItem" />
-            <menuitem action="NewProfileItem" />
-            <menuitem action="SaveItem" />
-            <separator />
-            <menuitem action="QuitItem" />
-        </menu>
-        <menu action="EditMenu">
-            <menuitem action="CutItem" />
-            <menuitem action="CopyItem" />
-            <menuitem action="PasteItem" />
-            <menuitem action="PasteIntoItem" />
-            <menuitem action="DuplicateItem" />
-            <menuitem action="DeleteItem" />
-            <separator />
-            <menuitem action="ReloadActionsItem" />
-            <separator />
-            <menuitem action="PreferencesItem" />
-        </menu>
-        <menu action="ViewMenu">
-            <menuitem action="ExpandAllItem" />
-            <menuitem action="CollapseAllItem" />
-            <separator />
-            <menu action="ViewToolbarMenu">
-                <menuitem action="ViewFileToolbarItem" />
-                <menuitem action="ViewEditToolbarItem" />
-                <menuitem action="ViewToolsToolbarItem" />
-                <menuitem action="ViewHelpToolbarItem" />
-            </menu>
-               <menu action="NotebookLabelMenu">
-                   <menuitem action="TabsPosLeftItem" />
-                   <menuitem action="TabsPosRightItem" />
-                   <menuitem action="TabsPosTopItem" />
-                   <menuitem action="TabsPosBottomItem" />
-               </menu>
-        </menu>
-        <menu action="ToolsMenu">
-            <menuitem action="ImportItem" />
-            <menuitem action="ExportItem" />
-        </menu>
-        <placeholder name="MaintainerMenuPlace" />
-        <menu action="HelpMenu">
-            <menuitem action="HelpItem" />
-            <separator />
-            <menuitem action="AboutItem" />
-        </menu>
-    </menubar>
-
-    <popup name="TreeContext">
-            <menuitem action="NewMenuItem" />
-            <menuitem action="NewActionItem" />
-            <menuitem action="NewProfileItem" />
-            <separator />
-            <menuitem action="CutItem" />
-            <menuitem action="CopyItem" />
-            <menuitem action="PasteItem" />
-            <menuitem action="PasteIntoItem" />
-            <menuitem action="DuplicateItem" />
-            <menuitem action="DeleteItem" />
-            <separator />
-            <menuitem action="ImportItem" />
-            <menuitem action="ExportItem" />
-            <separator />
-            <menuitem action="PreferencesItem" />
-            <menuitem action="AboutItem" />
-    </popup>
-
-       <!-- only set in toolbars items which have an icon -->
-
-    <toolbar name="FileToolbar">
-            <toolitem action="NewActionItem" />
-            <toolitem action="SaveItem" />
-            <toolitem action="QuitItem" />
-    </toolbar>
-
-    <toolbar name="EditToolbar">
-            <toolitem action="CutItem" />
-            <toolitem action="CopyItem" />
-            <toolitem action="PasteItem" />
-            <toolitem action="DeleteItem" />
-            <toolitem action="ReloadActionsItem" />
-            <toolitem action="PreferencesItem" />
-    </toolbar>
-
-    <!--
-    <toolbar name="ViewToolbar">
-            <toolitem action="ExpandAllItem" />
-            <toolitem action="CollapseAllItem" />
-    </toolbar>
-    -->
-
-    <toolbar name="ToolsToolbar">
-            <toolitem action="ImportItem" />
-            <!-- not yet an icon: do not set in toolbar
-            <toolitem action="ExportItem" />
-            -->
-    </toolbar>
-
-    <toolbar name="HelpToolbar">
-            <toolitem action="HelpItem" />
-            <toolitem action="AboutItem" />
-    </toolbar>
-</ui>
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <menu id="app-menu">
+      <section>
+        <item>
+          <attribute name="label" translatable="yes">Pre_ferences</attribute>
+          <attribute name="action">app.preferences</attribute>
+        </item>
+      </section>
+      <section>
+        <item>
+          <attribute name="label" translatable="yes">_Content</attribute>
+          <attribute name="action">app.help</attribute>
+          <attribute name="accel">F1</attribute>
+        </item>
+        <item>
+          <attribute name="label" translatable="yes">_About Nautilus-Actions</attribute>
+          <attribute name="action">app.about</attribute>
+        </item>
+      </section>
+      <section>
+        <item>
+          <attribute name="label" translatable="yes">_Quit</attribute>
+          <attribute name="action">win.quit</attribute>
+        </item>
+      </section>
+  </menu>
+  <menu id="menubar">
+    <submenu>
+      <attribute name="label" translatable="yes">_File</attribute>
+      <section>
+        <item>
+          <attribute name="label" translatable="yes">New _menu</attribute>
+          <attribute name="action">win.new-menu</attribute>
+        </item>
+        <item>
+          <attribute name="label" translatable="yes">_New action</attribute>
+          <attribute name="action">win.new-action</attribute>
+        </item>
+        <item>
+          <attribute name="label" translatable="yes">New _profile</attribute>
+          <attribute name="action">win.new-profile</attribute>
+        </item>
+        <item>
+          <attribute name="label" translatable="yes">_Save</attribute>
+          <attribute name="action">win.save</attribute>
+        </item>
+      </section>
+      <section>
+        <item>
+          <attribute name="label" translatable="yes">_Quit</attribute>
+          <attribute name="action">app.quit</attribute>
+        </item>
+      </section>
+    </submenu>
+    <submenu>
+      <attribute name="label" translatable="yes">_Edit</attribute>
+      <section>
+        <item>
+          <attribute name="label" translatable="yes">_Cut</attribute>
+          <attribute name="action">win.cut</attribute>
+        </item>
+        <item>
+          <attribute name="label" translatable="yes">C_opy</attribute>
+          <attribute name="action">win.copy</attribute>
+        </item>
+        <item>
+          <attribute name="label" translatable="yes">_Paste</attribute>
+          <attribute name="action">win.paste</attribute>
+        </item>
+        <item>
+          <attribute name="label" translatable="yes">paste _into</attribute>
+          <attribute name="action">win.paste-into</attribute>
+        </item>
+        <item>
+          <attribute name="label" translatable="yes">D_uplicate</attribute>
+          <attribute name="action">win.duplicate</attribute>
+        </item>
+        <item>
+          <attribute name="label" translatable="yes">_Delete</attribute>
+          <attribute name="action">win.delete</attribute>
+        </item>
+      </section>
+      <section>
+        <item>
+          <attribute name="label" translatable="yes">_Reload the items</attribute>
+          <attribute name="action">win.reload</attribute>
+          <attribute name="accel">F5</attribute>
+        </item>
+      </section>
+      <section>
+        <item>
+          <attribute name="label" translatable="yes">Pre_ferences</attribute>
+          <attribute name="action">app.preferences</attribute>
+        </item>
+      </section>
+    </submenu>
+    <submenu>
+      <attribute name="label" translatable="yes">_View</attribute>
+      <section>
+        <item>
+          <attribute name="label" translatable="yes">E_xpand all</attribute>
+          <attribute name="action">win.expand</attribute>
+        </item>
+        <item>
+          <attribute name="label" translatable="yes">_Collapse all</attribute>
+          <attribute name="action">win.collapse</attribute>
+        </item>
+      </section>
+      <section>
+        <submenu>
+          <attribute name="label" translatable="yes">_Toolbars</attribute>
+          <section>
+            <item>
+              <attribute name="label" translatable="yes">_File</attribute>
+              <attribute name="action">win.view-toolbar-file</attribute>
+            </item>
+            <item>
+              <attribute name="label" translatable="yes">_Edit</attribute>
+              <attribute name="action">win.view-toolbar-edit</attribute>
+            </item>
+            <item>
+              <attribute name="label" translatable="yes">_Tools</attribute>
+              <attribute name="action">win.view-toolbar-tools</attribute>
+            </item>
+            <item>
+              <attribute name="label" translatable="yes">_Help</attribute>
+              <attribute name="action">win.view-toolbar-help</attribute>
+            </item>
+          </section>
+        </submenu>
+      </section>
+      <section>
+        <submenu>
+          <attribute name="label" translatable="yes">_Notebook labels</attribute>
+          <section>
+            <item>
+              <attribute name="label" translatable="yes">_Left</attribute>
+              <attribute name="action">win.tab-left</attribute>
+            </item>
+            <item>
+              <attribute name="label" translatable="yes">_Right</attribute>
+              <attribute name="action">win.tab-right</attribute>
+            </item>
+            <item>
+              <attribute name="label" translatable="yes">_Top</attribute>
+              <attribute name="action">win.tab-top</attribute>
+            </item>
+            <item>
+              <attribute name="label" translatable="yes">_Bottom</attribute>
+              <attribute name="action">win.tab-bottom</attribute>
+            </item>
+          </section>
+        </submenu>
+      </section>
+    </submenu>
+    <submenu>
+      <attribute name="label" translatable="yes">_Tools</attribute>
+      <section>
+        <item>
+          <attribute name="label" translatable="yes">_Import assistant...</attribute>
+          <attribute name="action">win.import</attribute>
+        </item>
+        <item>
+          <attribute name="label" translatable="yes">E_xport assistant...</attribute>
+          <attribute name="action">win.export</attribute>
+        </item>
+      </section>
+    </submenu>
+    <submenu>
+      <attribute name="label" translatable="yes">_Help</attribute>
+      <section>
+        <item>
+          <attribute name="label" translatable="yes">_Content</attribute>
+          <attribute name="action">app.help</attribute>
+          <attribute name="accel">F1</attribute>
+        </item>
+        <item>
+          <attribute name="label" translatable="yes">_About Nautilus-Actions</attribute>
+          <attribute name="action">app.about</attribute>
+        </item>
+      </section>
+    </submenu>
+  </menu>
+  <menu id="maintainer">
+      <section>
+        <item>
+          <attribute name="label" translatable="yes">_Dump the selection</attribute>
+          <attribute name="action">win.dump-selection</attribute>
+        </item>
+        <item>
+          <attribute name="label" translatable="yes">_Brief tree store dump</attribute>
+          <attribute name="action">win.tree-store-dump</attribute>
+        </item>
+        <item>
+          <attribute name="label" translatable="yes">_List modified items</attribute>
+          <attribute name="action">win.list-modified</attribute>
+        </item>
+        <item>
+          <attribute name="label" translatable="yes">_Dump the clipboard</attribute>
+          <attribute name="action">win.dump-clipboard</attribute>
+        </item>
+        <item>
+          <attribute name="label" translatable="yes">_Test a function</attribute>
+          <attribute name="action">win.fntest</attribute>
+        </item>
+      </section>
+  </menu>
+  <menu id="tree-context">
+      <section>
+        <item>
+          <attribute name="label" translatable="yes">New _menu</attribute>
+          <attribute name="action">win.new-menu</attribute>
+        </item>
+        <item>
+          <attribute name="label" translatable="yes">_New action</attribute>
+          <attribute name="action">win.new-action</attribute>
+        </item>
+        <item>
+          <attribute name="label" translatable="yes">New _profile</attribute>
+          <attribute name="action">win.new-profile</attribute>
+        </item>
+      </section>
+  </menu>
+</interface>
diff --git a/src/plugin-tracker/Makefile.am b/src/plugin-tracker/Makefile.am
index 8e47335..f160df6 100644
--- a/src/plugin-tracker/Makefile.am
+++ b/src/plugin-tracker/Makefile.am
@@ -77,7 +77,6 @@ libnautilus_actions_tracker_la_LDFLAGS = \
        $(NULL)
 
 EXTRA_DIST = \
-       na-tracker-dbus-glib.xml                                                                        \
        na-tracker-gdbus.xml                                                                            \
        $(NULL)
 
diff --git a/src/plugin-tracker/na-tracker.c b/src/plugin-tracker/na-tracker.c
index b3648f8..ee7b14b 100644
--- a/src/plugin-tracker/na-tracker.c
+++ b/src/plugin-tracker/na-tracker.c
@@ -31,14 +31,8 @@
 #include <config.h>
 #endif
 
-#ifdef HAVE_GDBUS
 #include <gio/gio.h>
 #include "na-tracker-gdbus.h"
-#else
-# ifdef HAVE_DBUS_GLIB
-#include <dbus/dbus-glib-bindings.h>
-# endif
-#endif
 
 #include <libnautilus-extension/nautilus-extension-types.h>
 #include <libnautilus-extension/nautilus-file-info.h>
@@ -48,10 +42,6 @@
 
 #include "na-tracker.h"
 
-#ifdef HAVE_DBUS_GLIB
-#include "na-tracker-dbus-glib.h"
-#endif
-
 /* private class data
  */
 struct _NATrackerClassPrivate {
@@ -62,10 +52,8 @@ struct _NATrackerClassPrivate {
  */
 struct _NATrackerPrivate {
        gboolean                  dispose_has_run;
-#ifdef HAVE_GDBUS
        guint                     owner_id;     /* the identifier returns by g_bus_own_name */
        GDBusObjectManagerServer *manager;
-#endif
        GList                    *selected;
 };
 
@@ -75,12 +63,10 @@ static GType         st_module_type = 0;
 static void    class_init( NATrackerClass *klass );
 static void    instance_init( GTypeInstance *instance, gpointer klass );
 static void    initialize_dbus_connection( NATracker *tracker );
-#ifdef HAVE_GDBUS
 static void    on_bus_acquired( GDBusConnection *connection, const gchar *name, NATracker *tracker );
 static void    on_name_acquired( GDBusConnection *connection, const gchar *name, NATracker *tracker );
 static void    on_name_lost( GDBusConnection *connection, const gchar *name, NATracker *tracker );
 static gboolean on_properties1_get_selected_paths( NATrackerProperties1 *tracker_properties, 
GDBusMethodInvocation *invocation, NATracker *tracker );
-#endif
 static void    instance_dispose( GObject *object );
 static void    instance_finalize( GObject *object );
 
@@ -171,7 +157,6 @@ instance_init( GTypeInstance *instance, gpointer klass )
 static void
 initialize_dbus_connection( NATracker *tracker )
 {
-#ifdef HAVE_GDBUS
        NATrackerPrivate *priv = tracker->private;
 
        priv->owner_id = g_bus_own_name(
@@ -183,70 +168,8 @@ initialize_dbus_connection( NATracker *tracker )
                        ( GBusNameLostCallback ) on_name_lost,
                        tracker,
                        NULL );
-
-#else /* HAVE_GDBUS */
-
-# ifdef HAVE_DBUS_GLIB
-       static const gchar *thisfn = "na_tracker_initialize_dbus_connection";
-       DBusGConnection *connection;
-       GError *error;
-       DBusGProxy *proxy;
-       guint32 request_name_ret;
-
-       /* get a connection on session DBus
-        */
-       error = NULL;
-       connection = dbus_g_bus_get( DBUS_BUS_SESSION, &error );
-       if( !connection ){
-               g_warning( "%s: unable to get a connection on session DBus: %s", thisfn, error->message );
-               g_error_free( error );
-               return;
-       }
-       g_debug( "%s: connection is ok", thisfn );
-
-       /* get a proxy for this connection
-        * this proxy let us request some standard DBus services
-        */
-       proxy = dbus_g_proxy_new_for_name( connection, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS 
);
-       if( !proxy ){
-               g_warning( "%s: unable to get a proxy for the connection", thisfn );
-               dbus_g_connection_unref( connection );
-               return;
-       }
-       g_debug( "%s: proxy is ok", thisfn );
-
-       /* try to register our service name as a unique 'well known' name
-        */
-       if( !org_freedesktop_DBus_request_name(
-                       proxy, NAUTILUS_ACTIONS_DBUS_SERVICE, 0, &request_name_ret, &error )){
-
-               g_warning( "%s: unable to register %s as a 'well known' name on the bus: %s",
-                               thisfn, NAUTILUS_ACTIONS_DBUS_SERVICE, error->message );
-               g_error_free( error );
-               dbus_g_connection_unref( connection );
-               return;
-       }
-       g_debug( "%s: well known name registration is ok", thisfn );
-
-       if( request_name_ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER ){
-               g_warning("%s: got result code %u from requesting name (not the primary owner of the name)", 
thisfn, request_name_ret );
-               dbus_g_connection_unref( connection );
-               return;
-       }
-       g_debug( "%s: primary owner check is ok", thisfn );
-
-       /* allocate the tracking object and register it
-        * instantiation takes care of installing introspection infos
-        */
-       dbus_g_object_type_install_info( NA_TYPE_TRACKER, &dbus_glib_na_tracker_dbus_object_info );
-       dbus_g_connection_register_g_object( connection, NAUTILUS_ACTIONS_DBUS_TRACKER_PATH "/0", G_OBJECT( 
tracker ));
-
-       g_debug( "%s: registering tracker path is ok", thisfn );
-# endif /* HAVE_DBUS_GLIB */
-#endif
 }
 
-#ifdef HAVE_GDBUS
 static void
 on_bus_acquired( GDBusConnection *connection, const gchar *name, NATracker *tracker )
 {
@@ -324,7 +247,6 @@ on_name_lost( GDBusConnection *connection, const gchar *name, NATracker *tracker
                        name,
                        ( void * ) tracker );
 }
-#endif /* HAVE_GDBUS */
 
 static void
 instance_dispose( GObject *object )
@@ -341,14 +263,12 @@ instance_dispose( GObject *object )
 
                priv->dispose_has_run = TRUE;
 
-#ifdef HAVE_GDBUS
                if( priv->owner_id ){
                        g_bus_unown_name( priv->owner_id );
                }
                if( priv->manager ){
                        g_object_unref( priv->manager );
                }
-#endif
 
                priv->selected = free_selected( priv->selected );
 
@@ -466,7 +386,6 @@ set_uris( NATracker *tracker, GList *files )
        priv->selected = nautilus_file_info_list_copy( files );
 }
 
-#ifdef HAVE_GDBUS
 /*
  * Returns: %TRUE if the method has been handled.
  */
@@ -486,39 +405,6 @@ on_properties1_get_selected_paths( NATrackerProperties1 *tracker_properties, GDB
 
        return( TRUE );
 }
-#endif
-
-#ifdef HAVE_DBUS_GLIB
-/**
- * na_tracker_get_selected_paths:
- * @tracker: this #NATracker object.
- * @paths: the location in which copy the strings to be sent.
- * @error: the location of a GError.
- *
- * Sends on session D-Bus the list of currently selected items, as two
- * strings for each item :
- * - the uri
- * - the mimetype as returned by NautilusFileInfo.
- *
- * This is required as some particular items are only known by Nautilus
- * (e.g. computer), and standard GLib functions are not able to retrieve
- * their mimetype.
- *
- * Exported as GetSelectedPaths method on Tracker.Properties1 interface.
- *
- * Returns: %TRUE if the method has been handled.
- */
-gboolean
-na_tracker_get_selected_paths( NATracker *tracker, char ***paths, GError **error )
-{
-       g_return_val_if_fail( NA_IS_TRACKER( tracker ), FALSE );
-
-       *error = NULL;
-       *paths = get_selected_paths( tracker );
-
-       return( TRUE );
-}
-#endif
 
 /*
  * get_selected_paths:
diff --git a/src/plugin-tracker/na-tracker.h b/src/plugin-tracker/na-tracker.h
index be156b8..9a69dfd 100644
--- a/src/plugin-tracker/na-tracker.h
+++ b/src/plugin-tracker/na-tracker.h
@@ -43,14 +43,6 @@
  * extension, it is instantiated when the module is loaded by the file
  * manager, usually at startup time.
  *
- * glib-dbus
- *
- * The #NATracker object initiates a connection on the session D-Bus, takes
- * ownership of our well-known name, and then register itself as the object
- * which serves our object path (so installing introspection infos).
- *
- * GDBus
- *
  * The #NATracker object instanciates and keeps a new GDBusObjectManagerServer
  * rooted on our D-Bus path.
  * It then allocates an object at this same path, and another object which
@@ -90,10 +82,6 @@ typedef struct {
 GType    na_tracker_get_type          ( void );
 void     na_tracker_register_type     ( GTypeModule *module );
 
-#ifdef HAVE_DBUS_GLIB
-gboolean na_tracker_get_selected_paths( NATracker *tracker, char ***paths, GError **error );
-#endif
-
 G_END_DECLS
 
 #endif /* __NA_TRACKER_H__ */
diff --git a/src/utils/nautilus-actions-run.c b/src/utils/nautilus-actions-run.c
index 3bc9640..a982109 100644
--- a/src/utils/nautilus-actions-run.c
+++ b/src/utils/nautilus-actions-run.c
@@ -265,6 +265,10 @@ targets_from_selection( void )
        GList *selection;
        GError *error;
        gchar **paths;
+       GDBusObjectManager *manager;
+       gchar *name_owner;
+       GDBusObject *object;
+       GDBusInterface *iface;
 
        g_debug( "%s", thisfn );
 
@@ -272,12 +276,6 @@ targets_from_selection( void )
        error = NULL;
        paths = NULL;
 
-#ifdef HAVE_GDBUS
-       GDBusObjectManager *manager;
-       gchar *name_owner;
-       GDBusObject *object;
-       GDBusInterface *iface;
-
        manager = na_tracker_object_manager_client_new_for_bus_sync(
                        G_BUS_TYPE_SESSION,
                        G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE,
@@ -320,50 +318,6 @@ targets_from_selection( void )
                        NULL,
                        &error );
 
-#else
-# ifdef HAVE_DBUS_GLIB
-       DBusGConnection *connection;
-       DBusGProxy *proxy = NULL;
-
-       connection = dbus_g_bus_get( DBUS_BUS_SESSION, &error );
-       if( !connection ){
-               if( error ){
-                       g_printerr( _( "Error: unable to get a connection to session DBus: %s" ), 
error->message );
-                       g_error_free( error );
-               }
-               return( NULL );
-       }
-       g_debug( "%s: connection is ok", thisfn );
-
-       proxy = dbus_g_proxy_new_for_name( connection,
-                       NAUTILUS_ACTIONS_DBUS_SERVICE,
-                       NAUTILUS_ACTIONS_DBUS_TRACKER_PATH "/0",
-                       NAUTILUS_ACTIONS_DBUS_TRACKER_IFACE );
-
-       if( !proxy ){
-               g_printerr( _( "Error: unable to get a proxy on %s service" ), NAUTILUS_ACTIONS_DBUS_SERVICE 
);
-               dbus_g_connection_unref( connection );
-               return( NULL );
-       }
-       g_debug( "%s: proxy is ok", thisfn );
-
-       if( !dbus_g_proxy_call( proxy, "GetSelectedPaths", &error,
-                       G_TYPE_INVALID,
-                       G_TYPE_STRV, &paths, G_TYPE_INVALID )){
-
-               g_printerr( _( "Error on GetSelectedPaths call: %s" ), error->message );
-               g_error_free( error );
-               /* TODO: unref proxy */
-               dbus_g_connection_unref( connection );
-               return( NULL );
-       }
-       g_debug( "%s: function call is ok", thisfn );
-
-       /* TODO: unref proxy */
-       dbus_g_connection_unref( connection );
-# endif
-#endif
-
        selection = get_selection_from_strv(( const gchar ** ) paths, TRUE );
 
        g_strfreev( paths );


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]