[nautilus-actions] libna-common vs libna-runtime are done



commit 9ce5687c430296b67e47c7dba94e0c823fcc582d
Author: Pierre Wieser <pwieser trychlos org>
Date:   Sat Oct 3 00:28:01 2009 +0200

    libna-common vs libna-runtime are done

 src/common/Makefile.am                             |    8 +-
 src/common/na-iprefs.c                             |  451 +-----
 src/common/na-iprefs.h                             |  104 +--
 .../{na-object-action.h => na-object-action-fn.h}  |   25 +-
 src/common/na-object-action.c                      |  504 +-------
 src/common/na-object-api.h                         |   20 +-
 src/common/na-object-fn.h                          |   24 +-
 src/common/na-object-id-fn.h                       |   18 +-
 src/common/na-object-id.c                          |  401 +-----
 src/common/na-object-item-fn.h                     |   14 +-
 src/common/na-object-item.c                        |  717 +---------
 .../{na-object-action.h => na-object-menu-fn.h}    |   34 +-
 src/common/na-object-menu.c                        |  354 +-----
 src/common/na-object-menu.h                        |   79 -
 .../{na-object-action.h => na-object-profile-fn.h} |   32 +-
 src/common/na-object-profile.c                     | 1561 +-------------------
 src/common/na-object-profile.h                     |   82 -
 src/common/na-object.c                             |  708 +---------
 src/common/na-utils.c                              |   54 -
 src/common/na-utils.h                              |    8 +-
 src/common/na-xml-names.h                          |    6 +-
 src/common/na-xml-writer.c                         |    7 +-
 src/common/na-xml-writer.h                         |    8 +-
 src/nact/Makefile.am                               |    2 +-
 src/nact/base-iprefs.c                             |  189 +---
 src/nact/base-iprefs.h                             |   27 +-
 src/nact/nact-application.c                        |    6 +-
 src/nact/nact-application.h                        |    2 +-
 src/nact/nact-assistant-export.c                   |    5 +-
 src/nact/nact-assistant-import.c                   |    7 +-
 src/nact/nact-clipboard.c                          |   25 +-
 src/nact/nact-iaction-tab.c                        |    1 -
 src/nact/nact-iactions-list.c                      |    4 -
 src/nact/nact-iactions-list.h                      |    2 +-
 src/nact/nact-iadvanced-tab.c                      |    2 -
 src/nact/nact-icommand-tab.c                       |   12 +-
 src/nact/nact-iconditions-tab.c                    |    2 -
 src/nact/nact-main-menubar.c                       |   20 +-
 src/nact/nact-main-window.c                        |   22 +-
 src/nact/nact-main-window.h                        |    2 +
 src/nact/nact-preferences-editor.c                 |   12 +-
 src/nact/nact-tree-model.c                         |    3 -
 src/nact/nact-window.c                             |    3 +-
 src/nact/nact-window.h                             |    6 +-
 src/nact/nact-xml-reader.c                         |    7 +-
 src/nact/nact-xml-reader.h                         |    3 +-
 src/plugin/README                                  |    7 +
 src/runtime/Makefile.am                            |    6 +
 src/runtime/README                                 |    6 +
 src/runtime/na-gconf-keys.h                        |    6 +-
 src/runtime/na-gconf-monitor.h                     |    6 +-
 src/runtime/na-gconf-provider-keys.h               |    6 +-
 src/runtime/na-gconf-provider.h                    |    6 +-
 src/runtime/na-gconf-utils.h                       |    6 +-
 src/runtime/na-gnome-vfs-uri.h                     |    6 +-
 src/runtime/na-iabout.h                            |    6 +-
 src/runtime/na-iduplicable.h                       |    6 +-
 src/runtime/na-iio-provider.h                      |    6 +-
 src/runtime/na-ipivot-consumer.h                   |    6 +-
 src/runtime/na-iprefs.c                            |  179 ++-
 src/runtime/na-iprefs.h                            |   32 +-
 src/runtime/na-object-action-class.h               |    6 +-
 src/runtime/na-object-action-fn.h                  |   13 +-
 .../na-object-action-priv.h}                       |   37 +-
 src/runtime/na-object-action.c                     |   20 +-
 src/runtime/na-object-api.h                        |    9 +-
 src/runtime/na-object-class.h                      |    6 +-
 src/runtime/na-object-fn.h                         |    8 +-
 src/runtime/na-object-id-class.h                   |    6 +-
 src/runtime/na-object-id-fn.h                      |    6 +-
 .../na-object-id-priv.h}                           |   35 +-
 src/runtime/na-object-id.c                         |    9 +-
 src/runtime/na-object-item-class.h                 |    6 +-
 src/runtime/na-object-item-fn.h                    |    6 +-
 .../na-object-item-priv.h}                         |   44 +-
 src/runtime/na-object-item.c                       |   22 +-
 src/runtime/na-object-menu-class.h                 |    6 +-
 src/runtime/na-object-menu-fn.h                    |    6 +-
 .../na-object-menu-priv.h}                         |   36 +-
 src/runtime/na-object-menu.c                       |   12 +-
 .../na-object-priv.h}                              |   33 +-
 src/runtime/na-object-profile-class.h              |    6 +-
 src/runtime/na-object-profile-fn.h                 |    6 +-
 .../na-object-profile-priv.h}                      |   47 +-
 src/runtime/na-object-profile.c                    |   23 +-
 src/runtime/na-object.c                            |   89 +-
 src/runtime/na-pivot.h                             |    6 +-
 src/runtime/na-utils.h                             |    6 +-
 src/test/Makefile.am                               |    4 +-
 src/test/test-parse-uris.c                         |    2 +-
 src/utils/Makefile.am                              |    4 +-
 src/utils/nautilus-actions-new.c                   |    7 +-
 92 files changed, 684 insertions(+), 5715 deletions(-)
---
diff --git a/src/common/Makefile.am b/src/common/Makefile.am
index a5ba239..d536c87 100644
--- a/src/common/Makefile.am
+++ b/src/common/Makefile.am
@@ -45,11 +45,11 @@ libna_common_la_SOURCES = \
 	na-object-item.c							\
 	na-object-item-fn.h							\
 	na-object-action.c							\
-	na-object-action.h							\
+	na-object-action-fn.h						\
 	na-object-menu.c							\
-	na-object-menu.h							\
+	na-object-menu-fn.h							\
 	na-object-profile.c							\
-	na-object-profile.h							\
+	na-object-profile-fn.h						\
 	na-utils.c									\
 	na-utils.h									\
 	na-xml-names.h								\
@@ -58,6 +58,4 @@ libna_common_la_SOURCES = \
 	$(NULL)
 
 libna_common_la_LIBADD = \
-	-lxml2										\
-	-luuid										\
 	$(NULL)
diff --git a/src/common/na-iprefs.c b/src/common/na-iprefs.c
index 3ad5025..e585af3 100644
--- a/src/common/na-iprefs.c
+++ b/src/common/na-iprefs.c
@@ -33,33 +33,8 @@
 #include <config.h>
 #endif
 
-#include "na-gconf-utils.h"
 #include "na-iprefs.h"
 
-/* private interface data
- */
-struct NAIPrefsInterfacePrivate {
-	void *empty;						/* so that gcc -pedantic is happy */
-};
-
-/* private data initialized the first time an instance calls a function
- * of the public api
- */
-typedef struct {
-	GConfClient *client;
-}
-	NAIPrefsPrivate;
-
-#define DEFAULT_ORDER_MODE_INT			IPREFS_ORDER_ALPHA_ASCENDING
-#define DEFAULT_ORDER_MODE_STR			"AscendingOrder"
-
-static GConfEnumStringPair order_mode_table[] = {
-	{ IPREFS_ORDER_ALPHA_ASCENDING ,	"AscendingOrder" },
-	{ IPREFS_ORDER_ALPHA_DESCENDING,	"DescendingOrder" },
-	{ IPREFS_ORDER_MANUAL          ,	"ManualOrder" },
-	{ 0, NULL }
-};
-
 #define DEFAULT_IMPORT_MODE_INT			IPREFS_IMPORT_NO_IMPORT
 #define DEFAULT_IMPORT_MODE_STR			"NoImport"
 
@@ -70,243 +45,41 @@ static GConfEnumStringPair import_mode_table[] = {
 	{ 0, NULL }
 };
 
-#define NA_IPREFS_PRIVATE_DATA			"na-iprefs-private-data"
-
-static gboolean st_initialized = FALSE;
-static gboolean st_finalized = FALSE;
-
-static GType        register_type( void );
-static void         interface_base_init( NAIPrefsInterface *klass );
-static void         interface_base_finalize( NAIPrefsInterface *klass );
-
-static gboolean     read_bool( NAIPrefs *instance, const gchar *name, gboolean default_value );
-/*static gint         read_int( NAIPrefs *instance, const gchar *name, gint default_value );*/
-static GSList      *read_string_list( NAIPrefs *instance, const gchar *name );
-static void         write_bool( NAIPrefs *instance, const gchar *name, gboolean value );
-/*static void         write_int( NAIPrefs *instance, const gchar *name, gint value );*/
-static void         write_string_list( NAIPrefs *instance, const gchar *name, GSList *list );
-
-static void         setup_private_data( NAIPrefs *instance );
-static GConfClient *get_gconf_client( NAIPrefs *instance );
-
-GType
-na_iprefs_get_type( void )
-{
-	static GType iface_type = 0;
-
-	if( !iface_type ){
-		iface_type = register_type();
-	}
-
-	return( iface_type );
-}
-
-static GType
-register_type( void )
-{
-	static const gchar *thisfn = "na_iprefs_register_type";
-	GType type;
-
-	static const GTypeInfo info = {
-		sizeof( NAIPrefsInterface ),
-		( GBaseInitFunc ) interface_base_init,
-		( GBaseFinalizeFunc ) interface_base_finalize,
-		NULL,
-		NULL,
-		NULL,
-		0,
-		0,
-		NULL
-	};
-
-	g_debug( "%s", thisfn );
-
-	type = g_type_register_static( G_TYPE_INTERFACE, "NAIPrefs", &info, 0 );
-
-	g_type_interface_add_prerequisite( type, G_TYPE_OBJECT );
-
-	return( type );
-}
-
-static void
-interface_base_init( NAIPrefsInterface *klass )
-{
-	static const gchar *thisfn = "na_iprefs_interface_base_init";
-
-	if( !st_initialized ){
-
-		g_debug( "%s: klass=%p", thisfn, ( void * ) klass );
-
-		klass->private = g_new0( NAIPrefsInterfacePrivate, 1 );
-
-		st_initialized = TRUE;
-	}
-}
-
-static void
-interface_base_finalize( NAIPrefsInterface *klass )
-{
-	static const gchar *thisfn = "na_iprefs_interface_base_finalize";
-
-	if( !st_finalized ){
-
-		st_finalized = TRUE;
-
-		g_debug( "%s: klass=%p", thisfn, ( void * ) klass );
-
-		g_free( klass->private );
-	}
-}
-
-/**
- * na_iprefs_get_level_zero_items:
- * @instance: this #NAIPrefs interface instance.
- *
- * Returns: the ordered list of UUID's of items which are to be
- * displayed at level zero of the hierarchy.
- *
- * The returned list should be na_utils_free_string_list() by the caller.
- */
-GSList *
-na_iprefs_get_level_zero_items( NAIPrefs *instance )
-{
-	GSList *level_zero = NULL;
-
-	g_return_val_if_fail( NA_IS_IPREFS( instance ), NULL );
-
-	if( st_initialized && !st_finalized ){
-		setup_private_data( instance );
-		level_zero = read_string_list( instance, IPREFS_LEVEL_ZERO_ITEMS );
-	}
-
-	return( level_zero );
-}
-
-/**
- * na_iprefs_set_level_zero_items:
- * @instance: this #NAIPrefs interface instance.
- * @order: the ordered #GSList of item UUIDs.
- *
- * Writes the order and the content of the level-zero UUID's.
- */
-void
-na_iprefs_set_level_zero_items( NAIPrefs *instance, GSList *order )
-{
-	g_return_if_fail( NA_IS_IPREFS( instance ));
-
-	if( st_initialized && !st_finalized ){
-		setup_private_data( instance );
-		write_string_list( instance, IPREFS_LEVEL_ZERO_ITEMS, order );
-	}
-}
-
-/**
- * na_iprefs_get_order_mode:
- * @instance: this #NAIPrefs interface instance.
- *
- * Returns: the order mode currently set.
- *
- * Note: this function returns a suitable default value even if the key
- * is not found in GConf preferences or no schema has been installed.
- *
- * Note: please take care of keeping the default value synchronized with
- * those defined in schemas.
- */
-gint
-na_iprefs_get_order_mode( NAIPrefs *instance )
-{
-	gint alpha_order = DEFAULT_ORDER_MODE_INT;
-	gint order_int;
-	gchar *order_str;
-
-	g_return_val_if_fail( NA_IS_IPREFS( instance ), DEFAULT_ORDER_MODE_INT );
-
-	if( st_initialized && !st_finalized ){
-
-		setup_private_data( instance );
-		order_str = na_iprefs_read_string(
-				instance,
-				IPREFS_DISPLAY_ALPHABETICAL_ORDER,
-				DEFAULT_ORDER_MODE_STR );
-		if( gconf_string_to_enum( order_mode_table, order_str, &order_int )){
-			alpha_order = order_int;
-		}
-		g_free( order_str );
-	}
-
-	return( alpha_order );
-}
+static GConfValue *get_value( GConfClient *client, const gchar *path, const gchar *entry );
+static void        set_value( GConfClient *client, const gchar *path, const gchar *entry, GConfValue *value );
 
 /**
- * na_iprefs_set_order_mode:
- * @instance: this #NAIPrefs interface instance.
- * @mode: the new value to be written.
- *
- * Writes the current status of 'alphabetical order' to the GConf
- * preference system.
+ * na_iprefs_migrate_key:
+ * @instance: the #NAIPrefs implementor.
+ * @old_key: the old preference entry.
+ * @new_key: the new preference entry.
+ *
+ * Migrates the content of an entry from an obsoleted key to a new one.
+ * Removes the old key, along with the schema associated to it,
+ * considering that the version which asks for this migration has
+ * installed a schema corresponding to the new key.
  */
 void
-na_iprefs_set_order_mode( NAIPrefs *instance, gint mode )
+na_iprefs_migrate_key( NAIPrefs *instance, const gchar *old_key, const gchar *new_key )
 {
-	const gchar *order_str;
+	static const gchar *thisfn = "na_iprefs_migrate_key";
+	GConfValue *value;
 
+	g_debug( "%s: instance=%p, old_key=%s, new_key=%s", thisfn, ( void * ) instance, old_key, new_key );
 	g_return_if_fail( NA_IS_IPREFS( instance ));
 
-	if( st_initialized && !st_finalized ){
+	value = get_value( na_iprefs_get_gconf_client( instance ), NA_GCONF_PREFS_PATH, old_key );
 
-		setup_private_data( instance );
-		order_str = gconf_enum_to_string( order_mode_table, mode );
-		na_iprefs_write_string(
-				instance,
-				IPREFS_DISPLAY_ALPHABETICAL_ORDER,
-				order_str ? order_str : DEFAULT_ORDER_MODE_STR );
+	if( value ){
+		set_value( na_iprefs_get_gconf_client( instance ), NA_GCONF_PREFS_PATH, new_key, value );
+		gconf_value_free( value );
 	}
-}
 
-/**
- * na_iprefs_should_add_about_item:
- * @instance: this #NAIPrefs interface instance.
- *
- * Returns: #TRUE if an "About Nautilus Actions" item may be added to
- * the first level of Nautilus context submenus (if any), #FALSE else.
- *
- * Note: this function returns a suitable default value if the key is
- * not found in GConf preferences.
- *
- * Note: please take care of keeping the default value synchronized with
- * those defined in schemas.
- */
-gboolean
-na_iprefs_should_add_about_item( NAIPrefs *instance )
-{
-	gboolean about = FALSE;
-
-	g_return_val_if_fail( NA_IS_IPREFS( instance ), FALSE );
-
-	if( st_initialized && !st_finalized ){
-		setup_private_data( instance );
-		about = read_bool( instance, IPREFS_ADD_ABOUT_ITEM, TRUE );
-	}
-
-	return( about );
-}
-
-/**
- * na_iprefs_set_add_about_item:
- * @instance: this #NAIPrefs interface instance.
- * @enabled: the new value to be written.
- *
- * Writes the new value to the GConf preference system.
- */
-void
-na_iprefs_set_add_about_item( NAIPrefs *instance, gboolean enabled )
-{
-	g_return_if_fail( NA_IS_IPREFS( instance ));
-
-	if( st_initialized && !st_finalized ){
-		setup_private_data( instance );
-		write_bool( instance, IPREFS_ADD_ABOUT_ITEM, enabled );
-	}
+	/* do not remove entries which may be always used by another,
+	 * while older, version of NACT
+	 */
+	/*remove_entry( BASE_IPREFS_GET_INTERFACE( window )->private->client, NA_GCONF_PREFS_PATH, old_key );*/
+	/*remove_entry( BASE_IPREFS_GET_INTERFACE( window )->private->client, BASE_IPREFS_SCHEMAS_PATH, old_key );*/
 }
 
 /**
@@ -330,19 +103,17 @@ na_iprefs_get_import_mode( NAIPrefs *instance )
 
 	g_return_val_if_fail( NA_IS_IPREFS( instance ), DEFAULT_IMPORT_MODE_INT );
 
-	if( st_initialized && !st_finalized ){
+	import_str = na_iprefs_read_string(
+			instance,
+			IPREFS_IMPORT_ACTIONS_IMPORT_MODE,
+			DEFAULT_IMPORT_MODE_STR );
 
-		setup_private_data( instance );
-		import_str = na_iprefs_read_string(
-				instance,
-				IPREFS_IMPORT_ACTIONS_IMPORT_MODE,
-				DEFAULT_IMPORT_MODE_STR );
-		if( gconf_string_to_enum( import_mode_table, import_str, &import_int )){
-			import_mode = import_int;
-		}
-		g_free( import_str );
+	if( gconf_string_to_enum( import_mode_table, import_str, &import_int )){
+		import_mode = import_int;
 	}
 
+	g_free( import_str );
+
 	return( import_mode );
 }
 
@@ -361,147 +132,57 @@ na_iprefs_set_import_mode( NAIPrefs *instance, gint mode )
 
 	g_return_if_fail( NA_IS_IPREFS( instance ));
 
-	if( st_initialized && !st_finalized ){
-
-		setup_private_data( instance );
-		import_str = gconf_enum_to_string( import_mode_table, mode );
-		na_iprefs_write_string(
-				instance,
-				IPREFS_IMPORT_ACTIONS_IMPORT_MODE,
-				import_str ? import_str : DEFAULT_IMPORT_MODE_STR );
-	}
-}
-
-/**
- * na_iprefs_read_string:
- * @instance: this #NAIPrefs interface instance.
- * @name: the preference key.
- * @default_value: the default value, used if entry is not found and
- * there is no schema.
- *
- * Returns: the value, as a newly allocated string which should be
- * g_free() by the caller.
- */
-gchar *
-na_iprefs_read_string( NAIPrefs *instance, const gchar *name, const gchar *default_value )
-{
-	gchar *path;
-	gchar *value;
-
-	path = gconf_concat_dir_and_key( NA_GCONF_PREFS_PATH, name );
-	value = na_gconf_utils_read_string( get_gconf_client( instance ), path, TRUE, default_value );
-	g_free( path );
+	import_str = gconf_enum_to_string( import_mode_table, mode );
 
-	return( value );
+	na_iprefs_write_string(
+			instance,
+			IPREFS_IMPORT_ACTIONS_IMPORT_MODE,
+			import_str ? import_str : DEFAULT_IMPORT_MODE_STR );
 }
 
-/**
- * na_iprefs_write_string:
- * @instance: this #NAIPrefs interface instance.
- * @name: the preference key.
- * @value: the value to be written.
- *
- * Writes the value as the given GConf preference.
- */
-void
-na_iprefs_write_string( NAIPrefs *instance, const gchar *name, const gchar *value )
-{
-	gchar *path;
-
-	path = gconf_concat_dir_and_key( NA_GCONF_PREFS_PATH, name );
-	na_gconf_utils_write_string( get_gconf_client( instance ), path, value, NULL );
-	g_free( path );
-}
-
-static gboolean
-read_bool( NAIPrefs *instance, const gchar *name, gboolean default_value )
+static GConfValue *
+get_value( GConfClient *client, const gchar *path, const gchar *entry )
 {
-	gchar *path;
-	gboolean ret;
+	static const gchar *thisfn = "na_iprefs_get_value";
+	GError *error = NULL;
+	gchar *fullpath;
+	GConfValue *value;
 
-	path = gconf_concat_dir_and_key( NA_GCONF_PREFS_PATH, name );
-	ret = na_gconf_utils_read_bool( get_gconf_client( instance ), path, TRUE, default_value );
-	g_free( path );
+	fullpath = gconf_concat_dir_and_key( path, entry );
 
-	return( ret );
-}
-
-/*static gint
-read_int( NAIPrefs *instance, const gchar *name, gint default_value )
-{
-	gchar *path;
-	gint ret;
+	value = gconf_client_get_without_default( client, fullpath, &error );
 
-	path = gconf_concat_dir_and_key( NA_GCONF_PREFS_PATH, name );
-	ret = na_gconf_utils_read_int( get_gconf_client( instance ), path, TRUE, default_value );
-	g_free( path );
-
-	return( ret );
-}*/
-
-static GSList *
-read_string_list( NAIPrefs *instance, const gchar *name )
-{
-	gchar *path;
-	GSList *list;
+	if( error ){
+		g_warning( "%s: key=%s, %s", thisfn, fullpath, error->message );
+		g_error_free( error );
+		if( value ){
+			gconf_value_free( value );
+			value = NULL;
+		}
+	}
 
-	path = gconf_concat_dir_and_key( NA_GCONF_PREFS_PATH, name );
-	list = na_gconf_utils_read_string_list( get_gconf_client( instance ), path );
-	g_free( path );
+	g_free( fullpath );
 
-	return( list );
+	return( value );
 }
 
 static void
-write_bool( NAIPrefs *instance, const gchar *name, gboolean value )
-{
-	gchar *path;
-
-	path = gconf_concat_dir_and_key( NA_GCONF_PREFS_PATH, name );
-	na_gconf_utils_write_bool( get_gconf_client( instance ), path, value, NULL );
-	g_free( path );
-}
-
-/*static void
-write_int( NAIPrefs *instance, const gchar *name, gint value )
+set_value( GConfClient *client, const gchar *path, const gchar *entry, GConfValue *value )
 {
-	gchar *path;
+	static const gchar *thisfn = "na_iprefs_set_value";
+	GError *error = NULL;
+	gchar *fullpath;
 
-	path = gconf_concat_dir_and_key( NA_GCONF_PREFS_PATH, name );
-	na_gconf_utils_write_int( get_gconf_client( instance ), path, value, NULL );
-	g_free( path );
-}*/
+	g_return_if_fail( value );
 
-static void
-write_string_list( NAIPrefs *instance, const gchar *name, GSList *list )
-{
-	gchar *path;
+	fullpath = gconf_concat_dir_and_key( path, entry );
 
-	path = gconf_concat_dir_and_key( NA_GCONF_PREFS_PATH, name );
-	na_gconf_utils_write_string_list( get_gconf_client( instance ), path, list, NULL );
-	g_free( path );
-}
-
-static void
-setup_private_data( NAIPrefs *instance )
-{
-	NAIPrefsPrivate *ipp;
+	gconf_client_set( client, fullpath, value, &error );
 
-	ipp = ( NAIPrefsPrivate * ) g_object_get_data( G_OBJECT( instance ), NA_IPREFS_PRIVATE_DATA );
-	if( !ipp ){
-		ipp = g_new0( NAIPrefsPrivate, 1 );
-		ipp->client = gconf_client_get_default();
-		g_object_set_data( G_OBJECT( instance ), NA_IPREFS_PRIVATE_DATA, ipp );
+	if( error ){
+		g_warning( "%s: key=%s, %s", thisfn, fullpath, error->message );
+		g_error_free( error );
 	}
-}
-
-static GConfClient *
-get_gconf_client( NAIPrefs *instance )
-{
-	NAIPrefsPrivate *ipp;
-
-	ipp = ( NAIPrefsPrivate * ) g_object_get_data( G_OBJECT( instance ), NA_IPREFS_PRIVATE_DATA );
-	g_return_val_if_fail( ipp, NULL );
 
-	return( ipp->client );
+	g_free( fullpath );
 }
diff --git a/src/common/na-iprefs.h b/src/common/na-iprefs.h
index b5d9882..72e53f1 100644
--- a/src/common/na-iprefs.h
+++ b/src/common/na-iprefs.h
@@ -33,107 +33,22 @@
 
 /**
  * SECTION: na_iprefs
- * @short_description: #NAIPrefs interface definition.
+ * @short_description: #NAIPrefs interface definition extension.
  * @include: common/na-iprefs.h
  *
- * This interface should only be implemented by #NAPivot. This is
- * because the interface stores as an implementor structure some data
- * which are only relevant for one client (GConfClient, GConf monitors,
- * etc.).
- *
- * Though all modules may use the public functions na_iprefs_xxx(),
- * only #NAPivot will receive update notifications, taking itself care
- * of proxying them to identified consumers.
- *
- * Displaying the actions.
- *
- * - actions in alphabetical order:
- *
- *   Nautilus-Actions used to display the actions in alphabetical order.
- *   Starting with 1.12.x, Nautilus-Actions lets the user rearrange
- *   himself the order of its actions.
- *
- *   This option may have three values :
- *   - ascending alphabetical order (historical behavior, and default),
- *   - descending alphabetical order,
- *   - manual ordering.
- *
- * - adding a 'About Nautilus Actions' item at end of actions: yes/no
- *
- *   This is used only when there is a root submenu, i.e. when the
- *   Nautilus context menu will only display one item (the root
- *   submenu). Only in this case, and if preference is 'yes', the we
- *   will add the About item at the end of the first level of submenu.
- *
- *   Note that, as a convenience, the NACT user interface provides the
- *   user with a standard item (Nautilus Actions actions) which can be
- *   used as a root menu.
- *
- *   No 'About' item is added when user organize its actions so that
- *   Nautilus context menu will have several entries at the first level.
- *
- * In all cases, the plugin takes care of providing actions to Nautilus
- * if the same order than those they are displayed in NACT.
+ * #NAIPrefs main interface is defined as part of libna-runtime
+ * convenience library, and should only be implemented by #NAPivot.
+ * Found here is public API not shared by the Nautilus Actions plugin.
  */
 
-#include <glib-object.h>
-
-#include "na-gconf-keys-base.h"
+#include <runtime/na-iprefs.h>
 
 G_BEGIN_DECLS
 
-#define NA_IPREFS_TYPE						( na_iprefs_get_type())
-#define NA_IPREFS( object )					( G_TYPE_CHECK_INSTANCE_CAST( object, NA_IPREFS_TYPE, NAIPrefs ))
-#define NA_IS_IPREFS( object )				( G_TYPE_CHECK_INSTANCE_TYPE( object, NA_IPREFS_TYPE ))
-#define NA_IPREFS_GET_INTERFACE( instance )	( G_TYPE_INSTANCE_GET_INTERFACE(( instance ), NA_IPREFS_TYPE, NAIPrefsInterface ))
-
-typedef struct NAIPrefs NAIPrefs;
-
-typedef struct NAIPrefsInterfacePrivate NAIPrefsInterfacePrivate;
-
-typedef struct {
-	GTypeInterface            parent;
-	NAIPrefsInterfacePrivate *private;
-}
-	NAIPrefsInterface;
-
-GType    na_iprefs_get_type( void );
-
-GSList  *na_iprefs_get_level_zero_items( NAIPrefs *instance );
-void     na_iprefs_set_level_zero_items( NAIPrefs *instance, GSList *order );
-
-gint     na_iprefs_get_order_mode( NAIPrefs *instance );
-void     na_iprefs_set_order_mode( NAIPrefs *instance, gint mode );
-
-gboolean na_iprefs_should_add_about_item( NAIPrefs *instance );
-void     na_iprefs_set_add_about_item( NAIPrefs *instance, gboolean enabled );
-
-gint     na_iprefs_get_import_mode( NAIPrefs *instance );
-void     na_iprefs_set_import_mode( NAIPrefs *instance, gint mode );
-
-gchar   *na_iprefs_read_string( NAIPrefs *instance, const gchar *key, const gchar *default_value );
-void     na_iprefs_write_string( NAIPrefs *instance, const gchar *key, const gchar *value );
-
-/* GConf key
- */
-#define NA_GCONF_PREFERENCES				"preferences"
-#define NA_GCONF_PREFS_PATH					NAUTILUS_ACTIONS_GCONF_BASEDIR "/" NA_GCONF_PREFERENCES
-
 /* GConf Preference keys managed by IPrefs interface
  */
-#define IPREFS_LEVEL_ZERO_ITEMS				"iprefs-level-zero"
-#define IPREFS_DISPLAY_ALPHABETICAL_ORDER	"iprefs-alphabetical-order"
-#define IPREFS_ADD_ABOUT_ITEM				"iprefs-add-about-item"
 #define IPREFS_IMPORT_ACTIONS_IMPORT_MODE	"import-mode"
 
-/* alphabetical order values
- */
-enum {
-	IPREFS_ORDER_ALPHA_ASCENDING = 1,
-	IPREFS_ORDER_ALPHA_DESCENDING,
-	IPREFS_ORDER_MANUAL
-};
-
 /* import mode
  */
 enum {
@@ -142,6 +57,15 @@ enum {
 	IPREFS_IMPORT_OVERRIDE
 };
 
+#define IPREFS_RELABEL_MENUS				"iprefs-relabel-menus"
+#define IPREFS_RELABEL_ACTIONS				"iprefs-relabel-actions"
+#define IPREFS_RELABEL_PROFILES				"iprefs-relabel-profiles"
+
+void     na_iprefs_migrate_key( NAIPrefs *instance, const gchar *old_key, const gchar *new_key );
+
+gint     na_iprefs_get_import_mode( NAIPrefs *instance );
+void     na_iprefs_set_import_mode( NAIPrefs *instance, gint mode );
+
 G_END_DECLS
 
 #endif /* __NA_IPREFS_H__ */
diff --git a/src/common/na-object-action.h b/src/common/na-object-action-fn.h
similarity index 72%
copy from src/common/na-object-action.h
copy to src/common/na-object-action-fn.h
index 8ea7e5a..64db65b 100644
--- a/src/common/na-object-action.h
+++ b/src/common/na-object-action-fn.h
@@ -28,32 +28,27 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_ACTION_H__
-#define __NA_OBJECT_ACTION_H__
+#ifndef __NA_COMMON_OBJECT_ACTION_FN_H__
+#define __NA_COMMON_OBJECT_ACTION_FN_H__
 
 /**
  * SECTION: na_object_action
- * @short_description: #NAObjectAction public function declaration.
- * @include: common/na-object-action.h
+ * @short_description: #NAObjectAction public function declaration extension.
+ * @include: common/na-object-action-fn.h
+ *
+ * Define here the public functions of the #NAObjectAction class which are
+ * not shared by the Nautilus Actions plugin.
  */
 
-#include <glib/gi18n.h>
-
-#include "na-object-action-class.h"
-#include "na-object-profile-class.h"
+#include <runtime/na-object-action-class.h>
+#include <runtime/na-object-profile-class.h>
 
 G_BEGIN_DECLS
 
-NAObjectAction *na_object_action_new( void );
 NAObjectAction *na_object_action_new_with_profile( void );
 
 gboolean        na_object_action_is_readonly( const NAObjectAction *action );
 
-void            na_object_action_set_version( NAObjectAction *action, const gchar *version );
-void            na_object_action_set_readonly( NAObjectAction *action, gboolean readonly );
-
-void            na_object_action_attach_profile( NAObjectAction *action, NAObjectProfile *profile );
-
 G_END_DECLS
 
-#endif /* __NA_OBJECT_ACTION_H__ */
+#endif /* __NA_COMMON_OBJECT_ACTION_FN_H__ */
diff --git a/src/common/na-object-action.c b/src/common/na-object-action.c
index c402bff..1b9e3dc 100644
--- a/src/common/na-object-action.c
+++ b/src/common/na-object-action.c
@@ -34,280 +34,10 @@
 
 #include <string.h>
 
-#include "na-iduplicable.h"
-#include "na-object-api.h"
-#include "na-object-action.h"
-#include "na-object-profile.h"
-#include "na-utils.h"
-
-/* private class data
- */
-struct NAObjectActionClassPrivate {
-	void *empty;						/* so that gcc -pedantic is happy */
-};
-
-/* private instance data
- */
-struct NAObjectActionPrivate {
-	gboolean dispose_has_run;
-
-	/* action properties
-	 */
-	gchar   *version;
-
-	/* dynamically set when reading the actions from the I/O storage
-	 * subsystem
-	 * defaults to FALSE unless a write has already returned an error
-	 */
-	gboolean read_only;
-};
-
-/* action properties
- */
-enum {
-	NAACTION_PROP_VERSION_ID = 1,
-	NAACTION_PROP_READONLY_ID
-};
-
-#define NAACTION_PROP_VERSION			"na-action-version"
-#define NAACTION_PROP_READONLY			"na-action-read-only"
-
-static NAObjectItemClass *st_parent_class = NULL;
-
-static GType     register_type( void );
-static void      class_init( NAObjectActionClass *klass );
-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_dispose( GObject *object );
-static void      instance_finalize( GObject *object );
-
-static void      object_dump( const NAObject *object );
-static gchar    *object_get_clipboard_id( const NAObject *action );
-static NAObject *object_new( const NAObject *action );
-static void      object_copy( NAObject *target, const NAObject *source );
-static gboolean  object_are_equal( const NAObject *a, const NAObject *b );
-static gboolean  object_is_valid( const NAObject *object );
-
-GType
-na_object_action_get_type( void )
-{
-	static GType action_type = 0;
-
-	if( !action_type ){
-		action_type = register_type();
-	}
-
-	return( action_type );
-}
-
-static GType
-register_type( void )
-{
-	static const gchar *thisfn = "na_object_register_type";
-
-	static GTypeInfo info = {
-		sizeof( NAObjectActionClass ),
-		( GBaseInitFunc ) NULL,
-		( GBaseFinalizeFunc ) NULL,
-		( GClassInitFunc ) class_init,
-		NULL,
-		NULL,
-		sizeof( NAObjectAction ),
-		0,
-		( GInstanceInitFunc ) instance_init
-	};
-
-	g_debug( "%s", thisfn );
-
-	return( g_type_register_static( NA_OBJECT_ITEM_TYPE, "NAObjectAction", &info, 0 ));
-}
-
-static void
-class_init( NAObjectActionClass *klass )
-{
-	static const gchar *thisfn = "na_object_class_init";
-	GObjectClass *object_class;
-	NAObjectClass *naobject_class;
-	GParamSpec *spec;
-
-	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;
-	object_class->set_property = instance_set_property;
-	object_class->get_property = instance_get_property;
-
-	spec = g_param_spec_string(
-			NAACTION_PROP_VERSION,
-			"Version",
-			"Version of the schema", "",
-			G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE );
-	g_object_class_install_property( object_class, NAACTION_PROP_VERSION_ID, spec );
-
-	spec = g_param_spec_boolean(
-			NAACTION_PROP_READONLY,
-			"Read-only flag",
-			"Is this action only readable", FALSE,
-			G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE );
-	g_object_class_install_property( object_class, NAACTION_PROP_READONLY_ID, spec );
-
-	klass->private = g_new0( NAObjectActionClassPrivate, 1 );
-
-	naobject_class = NA_OBJECT_CLASS( klass );
-	naobject_class->dump = object_dump;
-	naobject_class->get_clipboard_id = object_get_clipboard_id;
-	naobject_class->ref = NULL;
-	naobject_class->new = object_new;
-	naobject_class->copy = object_copy;
-	naobject_class->are_equal = object_are_equal;
-	naobject_class->is_valid = object_is_valid;
-	naobject_class->get_childs = NULL;
-}
-
-static void
-instance_init( GTypeInstance *instance, gpointer klass )
-{
-	/*static const gchar *thisfn = "na_object_action_instance_init";*/
-	NAObjectAction *self;
-
-	/*g_debug( "%s: instance=%p, klass=%p", thisfn, ( void * ) instance, ( void * ) klass );*/
-	g_return_if_fail( NA_IS_OBJECT_ACTION( instance ));
-	self = NA_OBJECT_ACTION( instance );
-
-	self->private = g_new0( NAObjectActionPrivate, 1 );
-
-	self->private->dispose_has_run = FALSE;
-
-	/* initialize suitable default values
-	 */
-	self->private->version = g_strdup( NAUTILUS_ACTIONS_CONFIG_VERSION );
-	self->private->read_only = FALSE;
-}
-
-static void
-instance_get_property( GObject *object, guint property_id, GValue *value, GParamSpec *spec )
-{
-	NAObjectAction *self;
-
-	g_return_if_fail( NA_IS_OBJECT_ACTION( object ));
-	self = NA_OBJECT_ACTION( object );
-
-	if( !self->private->dispose_has_run ){
+#include <runtime/na-object-api.h>
+#include <runtime/na-object-action-priv.h>
 
-		switch( property_id ){
-			case NAACTION_PROP_VERSION_ID:
-				g_value_set_string( value, self->private->version );
-				break;
-
-			case NAACTION_PROP_READONLY_ID:
-				g_value_set_boolean( value, self->private->read_only );
-				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 )
-{
-	NAObjectAction *self;
-
-	g_return_if_fail( NA_IS_OBJECT_ACTION( object ));
-	self = NA_OBJECT_ACTION( object );
-
-	if( !self->private->dispose_has_run ){
-
-		switch( property_id ){
-			case NAACTION_PROP_VERSION_ID:
-				g_free( self->private->version );
-				self->private->version = g_value_dup_string( value );
-				break;
-
-			case NAACTION_PROP_READONLY_ID:
-				self->private->read_only = g_value_get_boolean( value );
-				break;
-
-			default:
-				G_OBJECT_WARN_INVALID_PROPERTY_ID( object, property_id, spec );
-				break;
-		}
-	}
-}
-
-static void
-instance_dispose( GObject *object )
-{
-	/*static const gchar *thisfn = "na_object_instance_dispose";*/
-	NAObjectAction *self;
-
-	/*g_debug( "%s: object=%p", thisfn, ( void * ) object );*/
-
-	g_return_if_fail( NA_IS_OBJECT_ACTION( object ));
-	self = NA_OBJECT_ACTION( object );
-
-	if( !self->private->dispose_has_run ){
-
-		self->private->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 *object )
-{
-	/*static const gchar *thisfn = "na_object_instance_finalize";*/
-	NAObjectAction *self;
-
-	/*g_debug( "%s: object=%p", thisfn, ( void * ) object );*/
-
-	g_return_if_fail( NA_IS_OBJECT_ACTION( object ));
-	self = NA_OBJECT_ACTION( object );
-
-	g_free( self->private->version );
-
-	g_free( self->private );
-
-	/* chain call to parent class */
-	if( G_OBJECT_CLASS( st_parent_class )->finalize ){
-		G_OBJECT_CLASS( st_parent_class )->finalize( object );
-	}
-}
-
-/**
- * na_object_action_new:
- *
- * Allocates a new #NAObjectAction object.
- *
- * The new #NAObjectAction object is initialized with suitable default values,
- * but without any profile.
- *
- * Returns: the newly allocated #NAObjectAction object.
- */
-NAObjectAction *
-na_object_action_new( void )
-{
-	NAObjectAction *action;
-
-	action = g_object_new( NA_OBJECT_ACTION_TYPE, NULL );
-
-	na_object_set_new_id( NA_OBJECT_ITEM( action ));
-
-	/* i18n: default label for a new action */
-	na_object_set_label( action, NA_OBJECT_ACTION_DEFAULT_LABEL );
-
-	return( action );
-}
+#include "na-object-api.h"
 
 /**
  * na_object_action_new_with_profile:
@@ -356,231 +86,3 @@ na_object_action_is_readonly( const NAObjectAction *action )
 
 	return( readonly );
 }
-
-/**
- * na_object_action_set_version:
- * @action: the #NAObjectAction object to be updated.
- * @label: the label to be set.
- *
- * Sets a new version for the action.
- *
- * #NAObjectAction takes a copy of the provided version. This later may so be
- * g_free() by the caller after this function returns.
- *
- * The version describes the schema of the informations in the I/O
- * storage subsystem.
- *
- * Version is stored in the #NAObjectAction object as readen from the I/O
- * storage subsystem, even if the #NAObjectAction object itself only reflects
- * the lastest known version. Conversion is made at load time (cf.
- * na_gconf_load_action()).
- */
-void
-na_object_action_set_version( NAObjectAction *action, const gchar *version )
-{
-	g_return_if_fail( NA_IS_OBJECT_ACTION( action ));
-
-	if( !action->private->dispose_has_run ){
-		g_object_set( G_OBJECT( action ), NAACTION_PROP_VERSION, version, NULL );
-	}
-}
-
-/**
- * na_object_action_set_readonly:
- * @action: the #NAObjectAction object to be updated.
- * @readonly: the indicator to be set.
- *
- * Sets whether the action is readonly.
- */
-void
-na_object_action_set_readonly( NAObjectAction *action, gboolean readonly )
-{
-	g_return_if_fail( NA_IS_OBJECT_ACTION( action ));
-
-	if( !action->private->dispose_has_run ){
-		g_object_set( G_OBJECT( action ), NAACTION_PROP_READONLY, readonly, NULL );
-	}
-}
-
-/**
- * na_object_action_attach_profile:
- * @action: the #NAObjectAction action to which the profile will be attached.
- * @profile: the #NAObjectProfile profile to be attached to @action.
- *
- * Adds a profile at the end of the list of profiles.
- */
-void
-na_object_action_attach_profile( NAObjectAction *action, NAObjectProfile *profile )
-{
-	g_return_if_fail( NA_IS_OBJECT_ACTION( action ));
-	g_return_if_fail( NA_IS_OBJECT_PROFILE( profile ));
-
-	if( !action->private->dispose_has_run ){
-
-		na_object_append_item( action, profile );
-		na_object_profile_set_action( profile, action );
-	}
-}
-
-static void
-object_dump( const NAObject *action )
-{
-	static const gchar *thisfn = "na_object_action_object_dump";
-	NAObjectAction *self;
-
-	g_return_if_fail( NA_IS_OBJECT_ACTION( action ));
-	self = NA_OBJECT_ACTION( action );
-
-	if( !self->private->dispose_has_run ){
-
-		g_debug( "%s:   version='%s'", thisfn, self->private->version );
-		g_debug( "%s: read-only='%s'", thisfn, self->private->read_only ? "True" : "False" );
-	}
-}
-
-static gchar *
-object_get_clipboard_id( const NAObject *action )
-{
-	gchar *uuid;
-	gchar *clipboard_id = NULL;
-
-	if( !NA_OBJECT_ACTION( action )->private->dispose_has_run ){
-
-		uuid = na_object_get_id( action );
-		clipboard_id = g_strdup_printf( "A:%s", uuid );
-		g_free( uuid );
-	}
-
-	return( clipboard_id );
-}
-
-static NAObject *
-object_new( const NAObject *action )
-{
-	return( NA_OBJECT( na_object_action_new()));
-}
-
-void
-object_copy( NAObject *target, const NAObject *source )
-{
-	gchar *version;
-	gboolean readonly;
-	GList *profiles, *ip;
-
-	g_return_if_fail( NA_IS_OBJECT_ACTION( target ));
-	g_return_if_fail( NA_IS_OBJECT_ACTION( source ));
-
-	if( !NA_OBJECT_ACTION( target )->private->dispose_has_run &&
-		!NA_OBJECT_ACTION( source )->private->dispose_has_run ){
-
-		g_object_get( G_OBJECT( source ),
-				NAACTION_PROP_VERSION, &version,
-				NAACTION_PROP_READONLY, &readonly,
-				NULL );
-
-		g_object_set( G_OBJECT( target ),
-				NAACTION_PROP_VERSION, version,
-				NAACTION_PROP_READONLY, readonly,
-				NULL );
-
-		g_free( version );
-
-		/* profiles have been copied (duplicated) as subitems by parent class
-		 * we have to attach new profiles to target action
-		 */
-		profiles = na_object_get_items( target );
-		for( ip = profiles ; ip ; ip = ip->next ){
-			na_object_profile_set_action( NA_OBJECT_PROFILE( ip->data ), NA_OBJECT_ACTION( target ));
-		}
-		na_object_free_items( profiles );
-	}
-}
-
-/*
- * note 1: version is not localized (see configure.ac)
- *
- * note 2: when checking for equality of profiles, we know that NAObjectItem
- * has already checked their edition status, and that the two profiles lists
- * were the sames ; we so only report the modification status to the action
- */
-static gboolean
-object_are_equal( const NAObject *a, const NAObject *b )
-{
-	NAObjectAction *first, *second;
-	gboolean equal = TRUE;
-	GList *profiles, *ip;
-	gchar *id;
-	NAObjectProfile *profile;
-
-	g_return_val_if_fail( NA_IS_OBJECT_ACTION( a ), FALSE );
-	first = NA_OBJECT_ACTION( a );
-
-	g_return_val_if_fail( NA_IS_OBJECT_ACTION( b ), FALSE );
-	second = NA_OBJECT_ACTION( b );
-
-	if( !NA_OBJECT_ACTION( a )->private->dispose_has_run &&
-		!NA_OBJECT_ACTION( b )->private->dispose_has_run ){
-
-		if( equal ){
-			equal = ( strcmp( first->private->version, second->private->version ) == 0 );
-		}
-
-		if( equal ){
-			profiles = na_object_get_items( a );
-			for( ip = profiles ; ip && equal ; ip = ip->next ){
-				id = na_object_get_id( ip->data );
-				profile = NA_OBJECT_PROFILE( na_object_get_item( b, id ));
-				equal = !na_object_is_modified( profile );
-
-#if NA_IDUPLICABLE_EDITION_STATUS_DEBUG
-				if( !equal ){
-					g_debug( "na_object_action_are_equal: profile=%p, equal=False", ( void * ) profile );
-				}
-#endif
-
-				g_free( id );
-			}
-			na_object_free_items( profiles );
-		}
-
-#if NA_IDUPLICABLE_EDITION_STATUS_DEBUG
-		g_debug( "na_object_action_object_are_equal: a=%p (%s), b=%p (%s), are_equal=%s",
-				( void * ) a, G_OBJECT_TYPE_NAME( a ),
-				( void * ) b, G_OBJECT_TYPE_NAME( b ),
-				equal ? "True":"False" );
-#endif
-	}
-
-	return( equal );
-}
-
-/*
- * a valid NAObjectAction requires a not null, not empty label
- * this is checked here as NAObjectId doesn't have this condition
- *
- * and at least one profile
- * checked here because NAObjectItem doesn't have this condition
- */
-gboolean
-object_is_valid( const NAObject *action )
-{
-	gchar *label;
-	gboolean is_valid = TRUE;
-
-	g_return_val_if_fail( NA_IS_OBJECT_ACTION( action ), FALSE );
-
-	if( !NA_OBJECT_ACTION( action )->private->dispose_has_run ){
-
-		if( is_valid ){
-			label = na_object_get_label( NA_OBJECT_ACTION( action ));
-			is_valid = ( label && g_utf8_strlen( label, -1 ) > 0 );
-			g_free( label );
-		}
-
-		if( is_valid ){
-			is_valid = ( na_object_get_items_count( action ) >= 1 );
-		}
-	}
-
-	return( is_valid );
-}
diff --git a/src/common/na-object-api.h b/src/common/na-object-api.h
index 82226bb..cbebf29 100644
--- a/src/common/na-object-api.h
+++ b/src/common/na-object-api.h
@@ -28,32 +28,40 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_API_H__
-#define __NA_OBJECT_API_H__
+#ifndef __NA_COMMON_OBJECT_API_H__
+#define __NA_COMMON_OBJECT_API_H__
 
 /**
  * SECTION: na_object
- * @short_description: #NAObject public API.
+ * @short_description: #NAObject public API extension.
  * @include: common/na-object-api.h
+ *
+ * #NAObject main public API is defined as part of in libna-runtime
+ * convenience library. Found here is public API not shared by the
+ * Nautilus Actions plugin.
  */
 
+#include <runtime/na-object-api.h>
+
 #include "na-object-fn.h"
 #include "na-object-id-fn.h"
 #include "na-object-item-fn.h"
+#include "na-object-menu-fn.h"
+#include "na-object-action-fn.h"
+#include "na-object-profile-fn.h"
 
 G_BEGIN_DECLS
 
 /* NAObject
  */
+#define na_object_reset_origin( object, origin )	na_object_object_reset_origin( NA_OBJECT( object ), ( NAObject * ) origin )
 
 /* NAIDuplicable
  */
 #define na_object_check_edition_status( object )	na_object_iduplicable_check_edition_status( NA_OBJECT( object ))
 #define na_object_is_valid( object )				na_object_iduplicable_is_valid( NA_OBJECT( object ))
-
 #define na_object_get_origin( object )				na_object_iduplicable_get_origin( NA_OBJECT( object ))
 #define na_object_set_origin( object, origin )		na_object_iduplicable_set_origin( NA_OBJECT( object ), NA_OBJECT( origin ))
-#define na_object_reset_origin( object, origin )	na_object_object_reset_origin( NA_OBJECT( object ), NA_OBJECT( origin ))
 
 /* NAObjectId
  */
@@ -67,4 +75,4 @@ G_BEGIN_DECLS
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_API_H__ */
+#endif /* __NA_COMMON_OBJECT_API_H__ */
diff --git a/src/common/na-object-fn.h b/src/common/na-object-fn.h
index 8c5927f..6721ec2 100644
--- a/src/common/na-object-fn.h
+++ b/src/common/na-object-fn.h
@@ -28,21 +28,22 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_FN_H__
-#define __NA_OBJECT_FN_H__
+#ifndef __NA_COMMON_OBJECT_FN_H__
+#define __NA_COMMON_OBJECT_FN_H__
 
 /**
  * SECTION: na_object
- * @short_description: #NAObject public functions declarations.
+ * @short_description: #NAObject public functions declarations extension.
  * @include: common/na-object-fn.h
  *
- * Define here the public functions of the #NAObject class.
+ * Define here the public functions of the #NAObject class which are not
+ * shared by the Nautilus Actions plugin.
  *
  * Note that most users of the class should rather use macros defined
- * in na-object-api.h
+ * in common/na-object-api.h, which itself includes runtime/na-object-api.h.
  */
 
-#include "na-object-class.h"
+#include <runtime/na-object-class.h>
 
 G_BEGIN_DECLS
 
@@ -50,23 +51,14 @@ G_BEGIN_DECLS
  */
 void      na_object_iduplicable_check_edition_status( const NAObject *object );
 
-gboolean  na_object_iduplicable_are_equal( const NAObject *a, const NAObject *b );
 gboolean  na_object_iduplicable_is_valid( const NAObject *object );
 NAObject *na_object_iduplicable_get_origin( const NAObject *object );
 void      na_object_iduplicable_set_origin( NAObject *object, const NAObject *origin );
 
 /* NAObject
  */
-void      na_object_object_dump( const NAObject *object );
-void      na_object_object_dump_norec( const NAObject *object );
-void      na_object_object_dump_tree( GList *tree );
-gchar    *na_object_object_get_clipboard_id( const NAObject *object );
-NAObject *na_object_object_ref( const NAObject *object );
 void      na_object_object_reset_origin( NAObject *object, const NAObject *origin );
 
-GList    *na_object_get_hierarchy( const NAObject *object );
-void      na_object_free_hierarchy( GList *hierarchy );
-
 G_END_DECLS
 
-#endif /* __NA_OBJECT_FN_H__ */
+#endif /* __NA_COMMON_OBJECT_FN_H__ */
diff --git a/src/common/na-object-id-fn.h b/src/common/na-object-id-fn.h
index 19ad8a4..848cd9c 100644
--- a/src/common/na-object-id-fn.h
+++ b/src/common/na-object-id-fn.h
@@ -28,31 +28,27 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_ID_FN_H__
-#define __NA_OBJECT_ID_FN_H__
+#ifndef __NA_COMMON_OBJECT_ID_FN_H__
+#define __NA_COMMON_OBJECT_ID_FN_H__
 
 /**
  * SECTION: na_object_id
- * @short_description: #NAObjectId public function declarations.
+ * @short_description: #NAObjectId public function declarations extension.
  * @include: common/na-object-id-fn.h
  *
- * Define here the public functions of the #NAObjectId class.
+ * Define here the public functions of the #NAObjectId class which are
+ * not shared by the Nautilus Actions plugin.
  *
  * Note that most users of the class should rather use macros defined
  * in na-object-api.h
  */
 
-#include "na-object-id-class.h"
+#include <runtime/na-object-id-class.h>
 
 G_BEGIN_DECLS
 
-gchar *na_object_id_get_id( const NAObjectId *object );
-gchar *na_object_id_get_label( const NAObjectId *object );
-
-void   na_object_id_set_id( NAObjectId *object, const gchar *id );
 void   na_object_id_set_for_copy( NAObjectId *object, gboolean relabel );
-void   na_object_id_set_label( NAObjectId *object, const gchar *label );
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_ID_FN_H__ */
+#endif /* __NA_COMMON_OBJECT_ID_FN_H__ */
diff --git a/src/common/na-object-id.c b/src/common/na-object-id.c
index 8ee2501..86b58f2 100644
--- a/src/common/na-object-id.c
+++ b/src/common/na-object-id.c
@@ -35,11 +35,10 @@
 #include <glib/gi18n.h>
 #include <string.h>
 
-#include "na-iduplicable.h"
+#include <runtime/na-object-api.h>
+#include <runtime/na-object-id-priv.h>
+
 #include "na-object-api.h"
-#include "na-object-fn.h"
-#include "na-object-id-class.h"
-#include "na-object-id-fn.h"
 
 /* private class data
  */
@@ -47,300 +46,6 @@ struct NAObjectIdClassPrivate {
 	void *empty;						/* so that gcc -pedantic is happy */
 };
 
-/* private instance data
- */
-struct NAObjectIdPrivate {
-	gboolean  dispose_has_run;
-	gchar    *id;
-	gchar    *label;
-};
-
-/* object properties
- */
-enum {
-	NAOBJECT_ID_PROP_ID_ID = 1,
-	NAOBJECT_ID_PROP_LABEL_ID
-};
-
-/* instance properties
- */
-#define NAOBJECT_ID_PROP_ID				"na-object-id"
-#define NAOBJECT_ID_PROP_LABEL			"na-object-label"
-
-static NAObjectClass *st_parent_class = NULL;
-
-static GType    register_type( void );
-static void     class_init( NAObjectIdClass *klass );
-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_dispose( GObject *object );
-static void     instance_finalize( GObject *object );
-
-static void     object_dump( const NAObject *object);
-static void     object_copy( NAObject *target, const NAObject *source );
-static gboolean object_are_equal( const NAObject *a, const NAObject *b );
-static gboolean object_is_valid( const NAObject *object );
-
-GType
-na_object_id_get_type( void )
-{
-	static GType object_type = 0;
-
-	if( !object_type ){
-		object_type = register_type();
-	}
-
-	return( object_type );
-}
-
-static GType
-register_type( void )
-{
-	static const gchar *thisfn = "na_object_id_register_type";
-	GType type;
-
-	static GTypeInfo info = {
-		sizeof( NAObjectIdClass ),
-		( GBaseInitFunc ) NULL,
-		( GBaseFinalizeFunc ) NULL,
-		( GClassInitFunc ) class_init,
-		NULL,
-		NULL,
-		sizeof( NAObjectId ),
-		0,
-		( GInstanceInitFunc ) instance_init
-	};
-
-	g_debug( "%s", thisfn );
-
-	type = g_type_register_static( NA_OBJECT_TYPE, "NAObjectId", &info, 0 );
-
-	return( type );
-}
-
-static void
-class_init( NAObjectIdClass *klass )
-{
-	static const gchar *thisfn = "na_object_id_class_init";
-	GObjectClass *object_class;
-	NAObjectClass *naobject_class;
-	GParamSpec *spec;
-
-	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;
-	object_class->set_property = instance_set_property;
-	object_class->get_property = instance_get_property;
-
-	spec = g_param_spec_string(
-			NAOBJECT_ID_PROP_ID,
-			"NAObjectId identifiant",
-			"Internal identifiant of the NAObjectId object (ASCII, case insensitive)", "",
-			G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE );
-	g_object_class_install_property( object_class, NAOBJECT_ID_PROP_ID_ID, spec );
-
-	spec = g_param_spec_string(
-			NAOBJECT_ID_PROP_LABEL,
-			"NAObjectId libelle",
-			"Libelle of the NAObjectId object (UTF-8, localizable)", "",
-			G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE );
-	g_object_class_install_property( object_class, NAOBJECT_ID_PROP_LABEL_ID, spec );
-
-	klass->private = g_new0( NAObjectIdClassPrivate, 1 );
-
-	naobject_class = NA_OBJECT_CLASS( klass );
-	naobject_class->dump = object_dump;
-	naobject_class->get_clipboard_id = NULL;
-	naobject_class->ref = NULL;
-	naobject_class->new = NULL;
-	naobject_class->copy = object_copy;
-	naobject_class->are_equal = object_are_equal;
-	naobject_class->is_valid = object_is_valid;
-	naobject_class->get_childs = NULL;
-
-	klass->new_id = NULL;
-}
-
-static void
-instance_init( GTypeInstance *instance, gpointer klass )
-{
-	/*static const gchar *thisfn = "na_object_id_instance_init";*/
-	NAObjectId *self;
-
-	/*g_debug( "%s: instance=%p, klass=%p", thisfn, ( void * ) instance, ( void * ) klass );*/
-	g_return_if_fail( NA_IS_OBJECT_ID( instance ));
-	self = NA_OBJECT_ID( instance );
-
-	self->private = g_new0( NAObjectIdPrivate, 1 );
-
-	self->private->dispose_has_run = FALSE;
-}
-
-static void
-instance_get_property( GObject *object, guint property_id, GValue *value, GParamSpec *spec )
-{
-	NAObjectId *self;
-
-	g_return_if_fail( NA_IS_OBJECT_ID( object ));
-	self = NA_OBJECT_ID( object );
-
-	if( !self->private->dispose_has_run ){
-
-		switch( property_id ){
-			case NAOBJECT_ID_PROP_ID_ID:
-				g_value_set_string( value, self->private->id );
-				break;
-
-			case NAOBJECT_ID_PROP_LABEL_ID:
-				g_value_set_string( value, self->private->label );
-				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 )
-{
-	NAObjectId *self;
-
-	g_return_if_fail( NA_IS_OBJECT_ID( object ));
-	self = NA_OBJECT_ID( object );
-
-	if( !self->private->dispose_has_run ){
-
-		switch( property_id ){
-			case NAOBJECT_ID_PROP_ID_ID:
-				g_free( self->private->id );
-				self->private->id = g_value_dup_string( value );
-				break;
-
-			case NAOBJECT_ID_PROP_LABEL_ID:
-				g_free( self->private->label );
-				self->private->label = g_value_dup_string( value );
-				break;
-
-			default:
-				G_OBJECT_WARN_INVALID_PROPERTY_ID( object, property_id, spec );
-				break;
-		}
-	}
-}
-
-static void
-instance_dispose( GObject *object )
-{
-	/*static const gchar *thisfn = "na_object_id_instance_dispose";*/
-	NAObjectId *self;
-
-	/*g_debug( "%s: object=%p", thisfn, ( void * ) object );*/
-	g_return_if_fail( NA_IS_OBJECT_ID( object ));
-	self = NA_OBJECT_ID( object );
-
-	if( !self->private->dispose_has_run ){
-
-		self->private->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 *object )
-{
-	NAObjectId *self;
-
-	g_return_if_fail( NA_IS_OBJECT_ID( object ));
-	self = NA_OBJECT_ID( object );
-
-	g_free( self->private->id );
-	g_free( self->private->label );
-
-	g_free( self->private );
-
-	/* chain call to parent class */
-	if( G_OBJECT_CLASS( st_parent_class )->finalize ){
-		G_OBJECT_CLASS( st_parent_class )->finalize( object );
-	}
-}
-
-/**
- * na_object_id_get_id:
- * @object: the #NAObjectId object whose internal identifiant is
- * requested.
- *
- * Returns: the internal identifiant of @object as a new string.
- *
- * The returned string is an ASCII, case insensitive, string.
- * It should be g_free() by the caller.
- */
-gchar *
-na_object_id_get_id( const NAObjectId *object )
-{
-	gchar *id = NULL;
-
-	g_return_val_if_fail( NA_IS_OBJECT_ID( object ), NULL );
-
-	if( !object->private->dispose_has_run ){
-		g_object_get( G_OBJECT( object ), NAOBJECT_ID_PROP_ID, &id, NULL );
-	}
-
-	return( id );
-}
-
-/**
- * na_object_id_get_label:
- * @object: the #NAObjectId object whose label is requested.
- *
- * Returns: the label of @object as a new string.
- *
- * The returned string is an UTF_8 localizable string.
- * It should be g_free() by the caller.
- */
-gchar *
-na_object_id_get_label( const NAObjectId *object )
-{
-	gchar *label = NULL;
-
-	g_return_val_if_fail( NA_IS_OBJECT_ID( object ), NULL );
-
-	if( !object->private->dispose_has_run ){
-		g_object_get( G_OBJECT( object ), NAOBJECT_ID_PROP_LABEL, &label, NULL );
-	}
-
-	return( label );
-}
-
-/**
- * na_object_id_set_id:
- * @object: the #NAObjectId object whose internal identifiant is to be
- * set.
- * @id: internal identifiant to be set.
- *
- * Sets the internal identifiant of @object by taking a copy of the
- * provided one.
- */
-void
-na_object_id_set_id( NAObjectId *object, const gchar *id )
-{
-	g_return_if_fail( NA_IS_OBJECT_ID( object ));
-
-	if( !object->private->dispose_has_run ){
-		g_object_set( G_OBJECT( object ), NAOBJECT_ID_PROP_ID, id, NULL );
-	}
-}
-
 /**
  * na_object_id_set_for_copy:
  * @object: the #NAObjectId object to be copied.
@@ -358,7 +63,8 @@ na_object_id_set_for_copy( NAObjectId *object, gboolean relabel )
 
 	if( !object->private->dispose_has_run ){
 
-		na_object_id_set_new_id( object );
+		/* TODO: review the set_for_copy function */
+		na_object_id_set_new_id( object, NULL );
 
 		if( relabel ){
 			/* i18n: copied items have a label as 'Copy of original label' */
@@ -368,100 +74,3 @@ na_object_id_set_for_copy( NAObjectId *object, gboolean relabel )
 		}
 	}
 }
-
-static void
-object_dump( const NAObject *object )
-{
-	static const char *thisfn = "na_object_id_object_dump";
-
-	g_return_if_fail( NA_IS_OBJECT_ID( object ));
-
-	if( !NA_OBJECT_ID( object )->private->dispose_has_run ){
-
-		g_debug( "%s:    id=%s", thisfn, NA_OBJECT_ID( object )->private->id );
-		g_debug( "%s: label=%s", thisfn, NA_OBJECT_ID( object )->private->label );
-	}
-}
-
-static void
-object_copy( NAObject *target, const NAObject *source )
-{
-	gchar *id, *label;
-
-	g_return_if_fail( NA_IS_OBJECT_ID( target ));
-	g_return_if_fail( NA_IS_OBJECT_ID( source ));
-
-	if( !NA_OBJECT_ID( target )->private->dispose_has_run &&
-		!NA_OBJECT_ID( source )->private->dispose_has_run ){
-
-			g_object_get( G_OBJECT( source ),
-					NAOBJECT_ID_PROP_ID, &id,
-					NAOBJECT_ID_PROP_LABEL, &label,
-					NULL );
-
-			g_object_set( G_OBJECT( target ),
-					NAOBJECT_ID_PROP_ID, id,
-					NAOBJECT_ID_PROP_LABEL, label,
-					NULL );
-
-			g_free( id );
-			g_free( label );
-	}
-}
-
-static gboolean
-object_are_equal( const NAObject *a, const NAObject *b )
-{
-	gboolean equal = TRUE;
-
-	g_return_val_if_fail( NA_IS_OBJECT_ID( a ), FALSE );
-	g_return_val_if_fail( NA_IS_OBJECT_ID( b ), FALSE );
-
-	if( !NA_OBJECT_ID( a )->private->dispose_has_run &&
-		!NA_OBJECT_ID( b )->private->dispose_has_run ){
-
-			if( equal ){
-				if( g_ascii_strcasecmp( NA_OBJECT_ID( a )->private->id, NA_OBJECT_ID( b )->private->id )){
-					/*g_debug( "a->id=%s, b->id=%s", NA_OBJECT_ID( a )->private->id, NA_OBJECT_ID( b )->private->id );*/
-					equal = FALSE;
-				}
-			}
-
-			if( equal ){
-				if( g_utf8_collate( NA_OBJECT_ID( a )->private->label, NA_OBJECT_ID( b )->private->label )){
-					/*g_debug( "a->label=%s, b->label=%s", NA_OBJECT_ID( a )->private->label, NA_OBJECT_ID( b )->private->label );*/
-					equal = FALSE;
-				}
-			}
-
-#if NA_IDUPLICABLE_EDITION_STATUS_DEBUG
-			g_debug( "na_object_id_object_are_equal: a=%p (%s), b=%p (%s), are_equal=%s",
-					( void * ) a, G_OBJECT_TYPE_NAME( a ),
-					( void * ) b, G_OBJECT_TYPE_NAME( b ),
-					equal ? "True":"False" );
-#endif
-	}
-
-	return( equal );
-}
-
-/*
- * from NAObjectId point of view, a valid object requires an id
- * (not null, not empty)
- */
-static gboolean
-object_is_valid( const NAObject *object )
-{
-	gboolean valid = TRUE;
-
-	g_return_val_if_fail( NA_IS_OBJECT_ID( object ), FALSE );
-
-	if( !NA_OBJECT_ID( object )->private->dispose_has_run ){
-
-		if( valid ){
-			valid = ( NA_OBJECT_ID( object )->private->id && strlen( NA_OBJECT_ID( object )->private->id ));
-		}
-	}
-
-	return( valid );
-}
diff --git a/src/common/na-object-item-fn.h b/src/common/na-object-item-fn.h
index 5d7bce3..548251c 100644
--- a/src/common/na-object-item-fn.h
+++ b/src/common/na-object-item-fn.h
@@ -28,15 +28,16 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_ITEM_FN_H__
-#define __NA_OBJECT_ITEM_FN_H__
+#ifndef __NA_COMMON_OBJECT_ITEM_FN_H__
+#define __NA_COMMON_OBJECT_ITEM_FN_H__
 
 /**
  * SECTION: na_object_item
- * @short_description: #NAObjectItem public function declarations.
+ * @short_description: #NAObjectItem public function declarations extension.
  * @include: common/na-object-fn.h
  *
- * Define here the public functions of the #NAObjectItem class.
+ * Define here the public functions of the #NAObjectItem class which are
+ * not shared by the Nautilus Actions plugin.
  *
  * Note that most users of the class should rather use macros defined
  * in na-object-api.h
@@ -44,8 +45,7 @@
 
 #include <gtk/gtk.h>
 
-#include "na-object-item-class.h"
-#include "na-iio-provider.h"
+#include <runtime/na-object-item-class.h>
 
 G_BEGIN_DECLS
 
@@ -56,4 +56,4 @@ void           na_object_item_remove_item( NAObjectItem *item, const NAObject *o
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_ITEM_FN_H__ */
+#endif /* __NA_COMMON_OBJECT_ITEM_FN_H__ */
diff --git a/src/common/na-object-item.c b/src/common/na-object-item.c
index a72daf7..c4aba9e 100644
--- a/src/common/na-object-item.c
+++ b/src/common/na-object-item.c
@@ -35,332 +35,10 @@
 #include <string.h>
 #include <uuid/uuid.h>
 
-#include "na-iduplicable.h"
-#include "na-object-api.h"
-#include "na-object-item-class.h"
-#include "na-object-item-fn.h"
-#include "na-utils.h"
-
-/* private class data
- */
-struct NAObjectItemClassPrivate {
-	void *empty;						/* so that gcc -pedantic is happy */
-};
-
-/* private instance data
- */
-struct NAObjectItemPrivate {
-	gboolean       dispose_has_run;
-
-	/* object_item properties
-	 */
-	gchar         *tooltip;
-	gchar         *icon;
-	gboolean       enabled;
-
-	/* list of NAObjectId subitems
-	 */
-	GList         *items;
-
-	/* the original provider
-	 * required to be able to edit/delete the item
-	 */
-	NAIIOProvider *provider;
-};
-
-/* object properties
- */
-enum {
-	NAOBJECT_ITEM_PROP_TOOLTIP_ID = 1,
-	NAOBJECT_ITEM_PROP_ICON_ID,
-	NAOBJECT_ITEM_PROP_ENABLED_ID,
-	NAOBJECT_ITEM_PROP_PROVIDER_ID,
-	NAOBJECT_ITEM_PROP_ITEMS_ID
-};
-
-#define NAOBJECT_ITEM_PROP_TOOLTIP		"na-object-item-tooltip"
-#define NAOBJECT_ITEM_PROP_ICON			"na-object-item-icon"
-#define NAOBJECT_ITEM_PROP_ENABLED		"na-object-item-enabled"
-#define NAOBJECT_ITEM_PROP_PROVIDER		"na-object-item-provider"
-#define NAOBJECT_ITEM_PROP_ITEMS		"na-object-item-items"
-
-static NAObjectIdClass *st_parent_class = NULL;
-
-static GType    register_type( void );
-static void     class_init( NAObjectItemClass *klass );
-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_dispose( GObject *object );
-static void     instance_finalize( GObject *object );
-
-static void     object_dump( const NAObject *object );
-static void     object_ref( const NAObject *action );
-static void     object_copy( NAObject *target, const NAObject *source );
-static gboolean object_are_equal( const NAObject *a, const NAObject *b );
-static gboolean object_is_valid( const NAObject *object );
-static GList   *object_get_childs( const NAObject *object );
-
-static gchar   *object_id_new_id( const NAObjectId *object );
-
-GType
-na_object_item_get_type( void )
-{
-	static GType object_type = 0;
-
-	if( !object_type ){
-		object_type = register_type();
-	}
-
-	return( object_type );
-}
-
-static GType
-register_type( void )
-{
-	static const gchar *thisfn = "na_object_item_register_type";
-
-	static GTypeInfo info = {
-		sizeof( NAObjectItemClass ),
-		( GBaseInitFunc ) NULL,
-		( GBaseFinalizeFunc ) NULL,
-		( GClassInitFunc ) class_init,
-		NULL,
-		NULL,
-		sizeof( NAObjectItem ),
-		0,
-		( GInstanceInitFunc ) instance_init
-	};
-
-	g_debug( "%s", thisfn );
-
-	return( g_type_register_static( NA_OBJECT_ID_TYPE, "NAObjectItem", &info, 0 ));
-}
-
-static void
-class_init( NAObjectItemClass *klass )
-{
-	static const gchar *thisfn = "na_object_item_class_init";
-	GObjectClass *object_class;
-	NAObjectClass *naobject_class;
-	NAObjectIdClass *objectid_class;
-	GParamSpec *spec;
-
-	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;
-	object_class->set_property = instance_set_property;
-	object_class->get_property = instance_get_property;
-
-	spec = g_param_spec_string(
-			NAOBJECT_ITEM_PROP_TOOLTIP,
-			"Item tooltip",
-			"Context menu tooltip of the item", "",
-			G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE );
-	g_object_class_install_property( object_class, NAOBJECT_ITEM_PROP_TOOLTIP_ID, spec );
-
-	spec = g_param_spec_string(
-			NAOBJECT_ITEM_PROP_ICON,
-			"Icon name",
-			"Context menu displayable icon for the item", "",
-			G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE );
-	g_object_class_install_property( object_class, NAOBJECT_ITEM_PROP_ICON_ID, spec );
-
-	spec = g_param_spec_boolean(
-			NAOBJECT_ITEM_PROP_ENABLED,
-			"Enabled",
-			"Whether this item, and recursively its subitems, is/are enabled", TRUE,
-			G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE );
-	g_object_class_install_property( object_class, NAOBJECT_ITEM_PROP_ENABLED_ID, spec );
-
-	spec = g_param_spec_pointer(
-			NAOBJECT_ITEM_PROP_PROVIDER,
-			"Original provider",
-			"Original provider of the NAObjectItem",
-			G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE );
-	g_object_class_install_property( object_class, NAOBJECT_ITEM_PROP_PROVIDER_ID, spec );
-
-	klass->private = g_new0( NAObjectItemClassPrivate, 1 );
-
-	naobject_class = NA_OBJECT_CLASS( klass );
-	naobject_class->dump = object_dump;
-	naobject_class->get_clipboard_id = NULL;
-	naobject_class->ref = object_ref;
-	naobject_class->new = NULL;
-	naobject_class->copy = object_copy;
-	naobject_class->are_equal = object_are_equal;
-	naobject_class->is_valid = object_is_valid;
-	naobject_class->get_childs = object_get_childs;
-
-	objectid_class = NA_OBJECT_ID_CLASS( klass );
-	objectid_class->new_id = object_id_new_id;
-}
-
-static void
-instance_init( GTypeInstance *instance, gpointer klass )
-{
-	/*static const gchar *thisfn = "na_object_item_instance_init";*/
-	NAObjectItem *self;
-
-	/*g_debug( "%s: instance=%p, klass=%p", thisfn, ( void * ) instance, ( void * ) klass );*/
-	g_return_if_fail( NA_IS_OBJECT_ITEM( instance ));
-	self = NA_OBJECT_ITEM( instance );
-
-	self->private = g_new0( NAObjectItemPrivate, 1 );
-
-	self->private->dispose_has_run = FALSE;
-
-	/* initialize suitable default values
-	 */
-	self->private->tooltip = g_strdup( "" );
-	self->private->icon = g_strdup( "" );
-	self->private->enabled = TRUE;
-	self->private->provider = NULL;
-}
-
-static void
-instance_get_property( GObject *object, guint property_id, GValue *value, GParamSpec *spec )
-{
-	NAObjectItem *self;
-
-	g_return_if_fail( NA_IS_OBJECT_ITEM( object ));
-	self = NA_OBJECT_ITEM( object );
-
-	if( !self->private->dispose_has_run ){
-
-		switch( property_id ){
-			case NAOBJECT_ITEM_PROP_TOOLTIP_ID:
-				g_value_set_string( value, self->private->tooltip );
-				break;
-
-			case NAOBJECT_ITEM_PROP_ICON_ID:
-				g_value_set_string( value, self->private->icon );
-				break;
-
-			case NAOBJECT_ITEM_PROP_ENABLED_ID:
-				g_value_set_boolean( value, self->private->enabled );
-				break;
-
-			case NAOBJECT_ITEM_PROP_PROVIDER_ID:
-				g_value_set_pointer( value, self->private->provider );
-				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 )
-{
-	NAObjectItem *self;
-
-	g_return_if_fail( NA_IS_OBJECT_ITEM( object ));
-	self = NA_OBJECT_ITEM( object );
-
-	if( !self->private->dispose_has_run ){
-
-		switch( property_id ){
-			case NAOBJECT_ITEM_PROP_TOOLTIP_ID:
-				g_free( self->private->tooltip );
-				self->private->tooltip = g_value_dup_string( value );
-				break;
-
-			case NAOBJECT_ITEM_PROP_ICON_ID:
-				g_free( self->private->icon );
-				self->private->icon = g_value_dup_string( value );
-				break;
-
-			case NAOBJECT_ITEM_PROP_ENABLED_ID:
-				self->private->enabled = g_value_get_boolean( value );
-				break;
-
-			case NAOBJECT_ITEM_PROP_PROVIDER_ID:
-				self->private->provider = g_value_get_pointer( value );
-				break;
-
-			default:
-				G_OBJECT_WARN_INVALID_PROPERTY_ID( object, property_id, spec );
-				break;
-		}
-	}
-}
+#include <runtime/na-object-api.h>
+#include <runtime/na-object-item-priv.h>
 
-static void
-instance_dispose( GObject *object )
-{
-	/*static const gchar *thisfn = "na_object_item_instance_dispose";*/
-	NAObjectItem *self;
-
-	/*g_debug( "%s: object=%p", thisfn, ( void * ) object );*/
-	g_return_if_fail( NA_IS_OBJECT_ITEM( object ));
-	self = NA_OBJECT_ITEM( object );
-
-	if( !self->private->dispose_has_run ){
-
-		na_object_item_free_items( self->private->items );
-
-		self->private->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 *object )
-{
-	/*static const gchar *thisfn = "na_object_item_instance_finalize";*/
-	NAObjectItem *self;
-
-	/*g_debug( "%s: object=%p", thisfn, ( void * ) object );*/
-	g_return_if_fail( NA_IS_OBJECT_ITEM( object ));
-	self = NA_OBJECT_ITEM( object );
-
-	g_free( self->private->tooltip );
-	g_free( self->private->icon );
-
-	g_free( self->private );
-
-	/* chain call to parent class */
-	if( G_OBJECT_CLASS( st_parent_class )->finalize ){
-		G_OBJECT_CLASS( st_parent_class )->finalize( object );
-	}
-}
-
-/*
- * TODO: remove this function
- */
-gchar *
-na_object_item_get_verified_icon_name( const NAObjectItem *item )
-{
-	gchar *icon_name;
-
-	g_return_val_if_fail( NA_IS_OBJECT_ITEM( item ), NULL );
-	g_return_val_if_fail( !item->private->dispose_has_run, NULL );
-
-	g_object_get( G_OBJECT( item ), NAOBJECT_ITEM_PROP_ICON, &icon_name, NULL );
-
-	if( icon_name[0] == '/' ){
-		if( !g_file_test( icon_name, G_FILE_TEST_IS_REGULAR )){
-			g_free( icon_name );
-			return NULL;
-		}
-	} else if( strlen( icon_name ) == 0 ){
-		g_free( icon_name );
-		return NULL;
-	}
-
-	return( icon_name );
-}
+#include "na-object-api.h"
 
 /**
  * na_object_item_get_pixbuf:
@@ -414,161 +92,6 @@ GdkPixbuf *na_object_item_get_pixbuf( const NAObjectItem *item, GtkWidget *widge
 }
 
 /**
- * na_object_item_is_enabled:
- * @item: the #NAObjectItem object to be requested.
- *
- * Is the specified item enabled ?
- * When disabled, the item, not its subitems if any, is/are never
- * candidate to any selection.
- *
- * Returns: %TRUE if the item is enabled, %FALSE else.
- */
-gboolean
-na_object_item_is_enabled( const NAObjectItem *item )
-{
-	gboolean enabled = FALSE;
-
-	g_return_val_if_fail( NA_IS_OBJECT_ITEM( item ), FALSE );
-
-	if( !item->private->dispose_has_run ){
-		g_object_get( G_OBJECT( item ), NAOBJECT_ITEM_PROP_ENABLED, &enabled, NULL );
-	}
-
-	return( enabled );
-}
-
-/**
- * na_object_item_set_tooltip:
- * @item: the #NAObjectItem object to be updated.
- * @tooltip: the tooltip to be set.
- *
- * Sets a new tooltip for the @item. Tooltip will be displayed by
- * Nautilus when the user move its mouse over the Nautilus context menu
- * item.
- *
- * #NAObjectItem takes a copy of the provided tooltip. This later may
- * so be g_free() by the caller after this function returns.
- */
-void
-na_object_item_set_tooltip( NAObjectItem *item, const gchar *tooltip )
-{
-	g_return_if_fail( NA_IS_OBJECT_ITEM( item ));
-
-	if( !item->private->dispose_has_run ){
-		g_object_set( G_OBJECT( item ), NAOBJECT_ITEM_PROP_TOOLTIP, tooltip, NULL );
-	}
-}
-
-/**
- * na_object_item_set_icon:
- * @item: the #NAObjectItem object to be updated.
- * @icon: the icon name to be set.
- *
- * Sets a new icon name for the @item.
- *
- * #NAObjectItem takes a copy of the provided icon name. This later may
- * so be g_free() by the caller after this function returns.
- */
-void
-na_object_item_set_icon( NAObjectItem *item, const gchar *icon )
-{
-	g_return_if_fail( NA_IS_OBJECT_ITEM( item ));
-
-	if( !item->private->dispose_has_run ){
-		g_object_set( G_OBJECT( item ), NAOBJECT_ITEM_PROP_ICON, icon, NULL );
-	}
-}
-
-/**
- * na_object_item_set_enabled:
- * @item: the #NAObjectItem object to be updated.
- * @enabled: the indicator to be set.
- *
- * Sets whether the item, and its subitems if any, is/are enabled or not.
- */
-void
-na_object_item_set_enabled( NAObjectItem *item, gboolean enabled )
-{
-	g_return_if_fail( NA_IS_OBJECT_ITEM( item ));
-
-	if( !item->private->dispose_has_run ){
-		g_object_set( G_OBJECT( item ), NAOBJECT_ITEM_PROP_ENABLED, enabled, NULL );
-	}
-}
-
-/**
- * na_object_item_set_provider:
- * @item: the #NAObjectItem object to be updated.
- * @provider: the #NAIIOProvider to be set.
- *
- * Sets the I/O provider for this #NAObjectItem.
- */
-void
-na_object_item_set_provider( NAObjectItem *item, const NAIIOProvider *provider )
-{
-	g_return_if_fail( NA_IS_OBJECT_ITEM( item ));
-
-	if( !item->private->dispose_has_run ){
-		g_object_set( G_OBJECT( item ), NAOBJECT_ITEM_PROP_PROVIDER, provider, NULL );
-	}
-}
-
-/**
- * na_object_item_set_items:
- * @item: the #NAObjectItem whose subitems have to be set.
- * @list: a #GList list of #NAObject subitems to be installed.
- *
- * Sets the list of the subitems for the @item.
- *
- * The previously existing list is removed and replaced by the provided
- * one. As we create here a new list with a new reference on provided
- * subitems, the provided list can be safely na_object_items_free_items()
- * by the caller.
- */
-void
-na_object_item_set_items( NAObjectItem *item, GList *items )
-{
-	GList *it;
-
-	g_return_if_fail( NA_IS_OBJECT_ITEM( item ));
-
-	if( !item->private->dispose_has_run ){
-
-		na_object_item_free_items( item->private->items );
-		item->private->items = NULL;
-
-		for( it = items ; it ; it = it->next ){
-			item->private->items = g_list_prepend( item->private->items, g_object_ref( it->data ));
-		}
-
-		item->private->items = g_list_reverse( item->private->items );
-	}
-}
-
-/**
- * na_object_item_append_item:
- * @item: the #NAObjectItem to which add the subitem.
- * @object: a #NAObject to be added to list of subitems.
- *
- * Appends a new @object to the list of subitems of @item.
- *
- * Doesn't modify the reference count on @object.
- */
-void
-na_object_item_append_item( NAObjectItem *item, const NAObject *object )
-{
-	g_return_if_fail( NA_IS_OBJECT_ITEM( item ));
-	g_return_if_fail( NA_IS_OBJECT( object ));
-
-	if( !item->private->dispose_has_run ){
-
-		if( !g_list_find( item->private->items, ( gpointer ) object )){
-			item->private->items = g_list_append( item->private->items, ( gpointer ) object );
-		}
-	}
-}
-
-/**
  * na_object_item_insert_item:
  * @item: the #NAObjectItem to which add the subitem.
  * @object: a #NAObject to be inserted in the list of subitems.
@@ -630,237 +153,3 @@ na_object_item_remove_item( NAObjectItem *item, const NAObject *object )
 		}
 	}
 }
-
-static void
-object_dump( const NAObject *item )
-{
-	static const gchar *thisfn = "na_object_item_object_dump";
-
-	g_return_if_fail( NA_IS_OBJECT_ITEM( item ));
-
-	if( !NA_OBJECT_ITEM( item )->private->dispose_has_run ){
-
-		g_debug( "%s:  tooltip='%s'", thisfn, NA_OBJECT_ITEM( item )->private->tooltip );
-		g_debug( "%s:     icon='%s'", thisfn, NA_OBJECT_ITEM( item )->private->icon );
-		g_debug( "%s:  enabled='%s'", thisfn, NA_OBJECT_ITEM( item )->private->enabled ? "True" : "False" );
-		g_debug( "%s: provider=%p", thisfn, ( void * ) NA_OBJECT_ITEM( item )->private->provider );
-
-		/* dump subitems */
-		g_debug( "%s: %d subitem(s) at %p",
-				thisfn,
-				NA_OBJECT_ITEM( item )->private->items ? g_list_length( NA_OBJECT_ITEM( item )->private->items ) : 0,
-				( void * ) NA_OBJECT_ITEM( item )->private->items );
-
-		/* do not recurse here, as this is actually dealt with by
-		 * na_object_dump() api ; else, we would have the action body
-		 * being dumped after its childs
-		 */
-	}
-}
-
-static void
-object_ref( const NAObject *item )
-{
-	g_list_foreach( NA_OBJECT_ITEM( item )->private->items, ( GFunc ) g_object_ref, NULL );
-}
-
-static void
-object_copy( NAObject *target, const NAObject *source )
-{
-	gchar *tooltip, *icon;
-	gboolean enabled;
-	gpointer provider;
-	GList *subitems, *it;
-
-	g_return_if_fail( NA_IS_OBJECT_ITEM( target ));
-	g_return_if_fail( NA_IS_OBJECT_ITEM( source ));
-
-	if( !NA_OBJECT_ITEM( target )->private->dispose_has_run &&
-		!NA_OBJECT_ITEM( source )->private->dispose_has_run ){
-
-		g_object_get( G_OBJECT( source ),
-				NAOBJECT_ITEM_PROP_TOOLTIP, &tooltip,
-				NAOBJECT_ITEM_PROP_ICON, &icon,
-				NAOBJECT_ITEM_PROP_ENABLED, &enabled,
-				NAOBJECT_ITEM_PROP_PROVIDER, &provider,
-				NULL );
-
-		g_object_set( G_OBJECT( target ),
-				NAOBJECT_ITEM_PROP_TOOLTIP, tooltip,
-				NAOBJECT_ITEM_PROP_ICON, icon,
-				NAOBJECT_ITEM_PROP_ENABLED, enabled,
-				NAOBJECT_ITEM_PROP_PROVIDER, provider,
-				NULL );
-
-		g_free( tooltip );
-		g_free( icon );
-
-		subitems = NULL;
-		for( it = NA_OBJECT_ITEM( source )->private->items ; it ; it = it->next ){
-			subitems = g_list_prepend( subitems, na_object_duplicate( it->data ));
-		}
-		subitems = g_list_reverse( subitems );
-		na_object_set_items( target, subitems );
-		na_object_free_items( subitems );
-	}
-}
-
-/*
- * @a: original object.
- * @b: the object which has been initially duplicated from @a, and is
- * being checked for modification status.
- *
- * note 1: The provider is not considered as pertinent here
- *
- * note 2: as a particular case, this function is not recursive
- * because the equality test will stop as soon as it fails, and we so
- * cannot be sure to even come here.
- *
- * The recursivity of na_object_check_edition_status() is directly
- * dealt with by the main entry api function.
- *
- * More, the modification status of subitems doesn't have any
- * impact on this object itself, provided that subitems lists are
- * themselves identical
- *
- * note 3: #NAObjectAction is considered as modified when at least one
- * of the profiles is itself modified (because they are saved as a
- * whole). See #NAObjectAction.
- */
-static gboolean
-object_are_equal( const NAObject *a, const NAObject *b )
-{
-	gboolean equal = TRUE;
-	GList *it;
-	gchar *first_id, *second_id;
-	NAObject *first_obj, *second_obj;
-	gint first_pos, second_pos;
-	GList *second_list;
-
-	g_return_val_if_fail( NA_IS_OBJECT_ITEM( a ), FALSE );
-	g_return_val_if_fail( NA_IS_OBJECT_ITEM( b ), FALSE );
-
-	if( !NA_OBJECT_ITEM( a )->private->dispose_has_run &&
-		!NA_OBJECT_ITEM( b )->private->dispose_has_run ){
-
-		if( equal ){
-			equal =
-				( g_utf8_collate( NA_OBJECT_ITEM( a )->private->tooltip, NA_OBJECT_ITEM( b )->private->tooltip ) == 0 ) &&
-				( g_utf8_collate( NA_OBJECT_ITEM( a )->private->icon, NA_OBJECT_ITEM( b )->private->icon ) == 0 );
-		}
-
-		if( equal ){
-			equal = ( NA_OBJECT_ITEM( a )->private->enabled && NA_OBJECT_ITEM( b )->private->enabled ) ||
-					( !NA_OBJECT_ITEM( a )->private->enabled && !NA_OBJECT_ITEM( b )->private->enabled );
-		}
-
-		if( equal ){
-			equal = ( g_list_length( NA_OBJECT_ITEM( a )->private->items ) == g_list_length( NA_OBJECT_ITEM( b )->private->items ));
-		}
-
-		if( equal ){
-			for( it = NA_OBJECT_ITEM( a )->private->items ; it && equal ; it = it->next ){
-				first_id = na_object_get_id( it->data );
-				second_obj = na_object_get_item( b, first_id );
-				if( second_obj ){
-					first_pos = g_list_position( NA_OBJECT_ITEM( a )->private->items, it );
-					second_list = g_list_find( NA_OBJECT_ITEM( b )->private->items, second_obj );
-					second_pos = g_list_position( NA_OBJECT_ITEM( b )->private->items, second_list );
-#if NA_IDUPLICABLE_EDITION_STATUS_DEBUG
-					g_debug( "na_object_item_object_are_equal: first_pos=%u, second_pos=%u", first_pos, second_pos );
-#endif
-					if( first_pos != second_pos ){
-						equal = FALSE;
-					}
-				} else {
-#if NA_IDUPLICABLE_EDITION_STATUS_DEBUG
-					g_debug( "na_object_item_object_are_equal: id=%s not found in b", first_id );
-#endif
-					equal = FALSE;
-				}
-				g_free( first_id );
-			}
-		}
-
-		if( equal ){
-			for( it = NA_OBJECT_ITEM( b )->private->items ; it && equal ; it = it->next ){
-				second_id = na_object_get_id( it->data );
-				first_obj = na_object_get_item( a, second_id );
-				if( !first_obj ){
-#if NA_IDUPLICABLE_EDITION_STATUS_DEBUG
-					g_debug( "na_object_item_object_are_equal: id=%s not found in a", second_id );
-#endif
-					equal = FALSE;
-				}
-				g_free( second_id );
-			}
-		}
-
-#if NA_IDUPLICABLE_EDITION_STATUS_DEBUG
-		g_debug( "na_object_item_object_are_equal: a=%p (%s), b=%p (%s), are_equal=%s",
-				( void * ) a, G_OBJECT_TYPE_NAME( a ),
-				( void * ) b, G_OBJECT_TYPE_NAME( b ),
-				equal ? "True":"False" );
-#endif
-	}
-
-	return( equal );
-}
-
-/*
- * from NAObjectItem point of view, all objects are valid
- */
-static gboolean
-object_is_valid( const NAObject *object )
-{
-	gboolean valid = TRUE;
-
-	g_return_val_if_fail( NA_IS_OBJECT_ITEM( object ), FALSE );
-
-	if( !NA_OBJECT_ITEM( object )->private->dispose_has_run ){
-
-		/* nothing to check here */
-	}
-
-	return( valid );
-}
-
-static GList *
-object_get_childs( const NAObject *object )
-{
-	GList *childs = NULL;
-
-	g_return_val_if_fail( NA_IS_OBJECT_ITEM( object ), NULL );
-
-	if( !NA_OBJECT_ITEM( object )->private->dispose_has_run ){
-		childs = NA_OBJECT_ITEM( object )->private->items;
-	}
-
-	return( childs );
-}
-
-static gchar *
-object_id_new_id( const NAObjectId *item )
-{
-	GList *it;
-	uuid_t uuid;
-	gchar uuid_str[64];
-	gchar *new_uuid = NULL;
-
-	g_return_val_if_fail( NA_IS_OBJECT_ITEM( item ), NULL );
-
-	if( !NA_OBJECT_ITEM( item )->private->dispose_has_run ){
-
-		for( it = NA_OBJECT_ITEM( item )->private->items ; it ; it = it->next ){
-			if( NA_IS_OBJECT_ITEM( it->data )){
-				na_object_set_new_id( it->data );
-			}
-		}
-
-		uuid_generate( uuid );
-		uuid_unparse_lower( uuid, uuid_str );
-		new_uuid = g_strdup( uuid_str );
-	}
-
-	return( new_uuid );
-}
diff --git a/src/common/na-object-action.h b/src/common/na-object-menu-fn.h
similarity index 59%
copy from src/common/na-object-action.h
copy to src/common/na-object-menu-fn.h
index 8ea7e5a..e29909c 100644
--- a/src/common/na-object-action.h
+++ b/src/common/na-object-menu-fn.h
@@ -1,5 +1,5 @@
 /*
- * Nautilus ObjectActions
+ * Nautilus Actions
  * A Nautilus extension which offers configurable context menu actions.
  *
  * Copyright (C) 2005 The GNOME Foundation
@@ -28,32 +28,24 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_ACTION_H__
-#define __NA_OBJECT_ACTION_H__
+#ifndef __NA_COMMON_OBJECT_MENU_FN_H__
+#define __NA_COMMON_OBJECT_MENU_FN_H__
 
 /**
- * SECTION: na_object_action
- * @short_description: #NAObjectAction public function declaration.
- * @include: common/na-object-action.h
+ * SECTION: na_object_menu
+ * @short_description: #NAObjectMenu public functions definition extension.
+ * @include: common/na-object-menu-fn.h
+ *
+ * This is a menu. It embeds other menus and/or actions.
+ *
+ * Define here the public functions of the #NAObjectMenu class which
+ * are not shared by the Nautilus Actions plugin.
  */
 
-#include <glib/gi18n.h>
-
-#include "na-object-action-class.h"
-#include "na-object-profile-class.h"
+#include <runtime/na-object-menu-class.h>
 
 G_BEGIN_DECLS
 
-NAObjectAction *na_object_action_new( void );
-NAObjectAction *na_object_action_new_with_profile( void );
-
-gboolean        na_object_action_is_readonly( const NAObjectAction *action );
-
-void            na_object_action_set_version( NAObjectAction *action, const gchar *version );
-void            na_object_action_set_readonly( NAObjectAction *action, gboolean readonly );
-
-void            na_object_action_attach_profile( NAObjectAction *action, NAObjectProfile *profile );
-
 G_END_DECLS
 
-#endif /* __NA_OBJECT_ACTION_H__ */
+#endif /* __NA_COMMON_OBJECT_MENU_FN_H__ */
diff --git a/src/common/na-object-menu.c b/src/common/na-object-menu.c
index c9f6947..135530b 100644
--- a/src/common/na-object-menu.c
+++ b/src/common/na-object-menu.c
@@ -32,355 +32,7 @@
 #include <config.h>
 #endif
 
-#include "na-iduplicable.h"
-#include "na-object-api.h"
-#include "na-object-action.h"
-#include "na-object-menu.h"
-#include "na-utils.h"
-
-/* private class data
- */
-struct NAObjectMenuClassPrivate {
-	void *empty;						/* so that gcc -pedantic is happy */
-};
-
-/* private instance data
- */
-struct NAObjectMenuPrivate {
-	gboolean dispose_has_run;
-
-	/* this is the list of subitems as a list of id strings
-	 * as readen from IIOProviders
-	 */
-	GSList  *items_ids;
-};
-
-static NAObjectClass *st_parent_class = NULL;
-
-static GType     register_type( void );
-static void      class_init( NAObjectMenuClass *klass );
-static void      instance_init( GTypeInstance *instance, gpointer klass );
-static void      instance_dispose( GObject *object );
-static void      instance_finalize( GObject *object );
-
-static void      object_dump( const NAObject *menu );
-static gchar    *object_get_clipboard_id( const NAObject *menu );
-static NAObject *object_new( const NAObject *menu );
-static void      object_copy( NAObject *target, const NAObject *source );
-static gboolean  object_are_equal( const NAObject *a, const NAObject *b );
-static gboolean  object_is_valid( const NAObject *menu );
-
-GType
-na_object_menu_get_type( void )
-{
-	static GType action_type = 0;
-
-	if( !action_type ){
-		action_type = register_type();
-	}
-
-	return( action_type );
-}
-
-static GType
-register_type( void )
-{
-	static const gchar *thisfn = "na_object_menu_register_type";
-
-	static GTypeInfo info = {
-		sizeof( NAObjectMenuClass ),
-		( GBaseInitFunc ) NULL,
-		( GBaseFinalizeFunc ) NULL,
-		( GClassInitFunc ) class_init,
-		NULL,
-		NULL,
-		sizeof( NAObjectMenu ),
-		0,
-		( GInstanceInitFunc ) instance_init
-	};
-
-	g_debug( "%s", thisfn );
-
-	return( g_type_register_static( NA_OBJECT_ITEM_TYPE, "NAObjectMenu", &info, 0 ));
-}
-
-static void
-class_init( NAObjectMenuClass *klass )
-{
-	static const gchar *thisfn = "na_object_menu_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;
-
-	klass->private = g_new0( NAObjectMenuClassPrivate, 1 );
-
-	NA_OBJECT_CLASS( klass )->dump = object_dump;
-	NA_OBJECT_CLASS( klass )->get_clipboard_id = object_get_clipboard_id;
-	NA_OBJECT_CLASS( klass )->ref = NULL;
-	NA_OBJECT_CLASS( klass )->new = object_new;
-	NA_OBJECT_CLASS( klass )->copy = object_copy;
-	NA_OBJECT_CLASS( klass )->are_equal = object_are_equal;
-	NA_OBJECT_CLASS( klass )->is_valid = object_is_valid;
-	NA_OBJECT_CLASS( klass )->get_childs = NULL;
-}
-
-static void
-instance_init( GTypeInstance *instance, gpointer klass )
-{
-	/*static const gchar *thisfn = "na_object_menu_instance_init";*/
-	NAObjectMenu *self;
-
-	/*g_debug( "%s: instance=%p, klass=%p", thisfn, ( void * ) instance, ( void * ) klass );*/
-	g_return_if_fail( NA_IS_OBJECT_MENU( instance ));
-	self = NA_OBJECT_MENU( instance );
-
-	self->private = g_new0( NAObjectMenuPrivate, 1 );
-
-	self->private->dispose_has_run = FALSE;
-}
-
-static void
-instance_dispose( GObject *object )
-{
-	/*static const gchar *thisfn = "na_object_menu_instance_dispose";*/
-	NAObjectMenu *self;
-
-	/*g_debug( "%s: object=%p", thisfn, ( void * ) object );*/
-	g_return_if_fail( NA_IS_OBJECT_MENU( object ));
-	self = NA_OBJECT_MENU( object );
-
-	if( !self->private->dispose_has_run ){
-
-		self->private->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 *object )
-{
-	/*static const gchar *thisfn = "na_object_menu_instance_finalize";*/
-	NAObjectMenu *self;
-
-	/*g_debug( "%s: object=%p", thisfn, ( void * ) object );*/
-	g_return_if_fail( NA_IS_OBJECT_MENU( object ));
-	self = NA_OBJECT_MENU( object );
-
-	/* release string list of subitems */
-	na_utils_free_string_list( self->private->items_ids );
-
-	g_free( self->private );
-
-	/* chain call to parent class */
-	if( G_OBJECT_CLASS( st_parent_class )->finalize ){
-		G_OBJECT_CLASS( st_parent_class )->finalize( object );
-	}
-}
-
-/**
- * na_object_menu_new:
- *
- * Allocates a new #NAObjectMenu object.
- *
- * The new #NAObjectMenu object is initialized with suitable default values,
- * but without any profile.
- *
- * Returns: the newly allocated #NAObjectMenu object.
- */
-NAObjectMenu *
-na_object_menu_new( void )
-{
-	NAObjectMenu *menu;
-
-	menu = g_object_new( NA_OBJECT_MENU_TYPE, NULL );
-
-	na_object_set_new_id( menu );
-	na_object_set_label( menu, NA_OBJECT_MENU_DEFAULT_LABEL );
-
-	return( menu );
-}
-
-/**
- * na_object_menu_get_items_list:
- * @menu: this #NAObjectMenu object.
- *
- * Returns: the items_ids string list, as readen from the IIOProvider.
- *
- * The returned list should be na_utils_free_string_list() by the caller.
- */
-GSList *
-na_object_menu_get_items_list( const NAObjectMenu *menu )
-{
-	GSList *list = NULL;
-
-	g_return_val_if_fail( NA_IS_OBJECT_MENU( menu ), NULL );
-
-	if( !menu->private->dispose_has_run ){
-		list = na_utils_duplicate_string_list( menu->private->items_ids );
-	}
-
-	return( list );
-}
-
-/**
- * na_object_menu_rebuild_items_list:
- * @menu: this #NAObjectMenu object.
- *
- * Returns: a string list which contains the ordered list of ids of
- * subitems.
- *
- * Note that the returned list is built on each call to this function,
- * and is so an exact image of the current situation.
- *
- * The returned list should be na_utils_free_string_list() by the caller.
- */
-GSList *
-na_object_menu_rebuild_items_list( const NAObjectMenu *menu )
-{
-	GSList *list = NULL;
-	GList *items, *it;
-	gchar *uuid;
-
-	g_return_val_if_fail( NA_IS_OBJECT_MENU( menu ), NULL );
-
-	if( !menu->private->dispose_has_run ){
-
-		items = na_object_get_items( menu );
-
-		for( it = items ; it ; it = it->next ){
-			NAObjectItem *item = NA_OBJECT_ITEM( it->data );
-			uuid = na_object_get_id( item );
-			list = g_slist_prepend( list, uuid );
-		}
-
-		na_object_free_items( items );
-
-		list = g_slist_reverse( list );
-	}
-
-	return( list );
-}
-
-/**
- * na_object_menu_set_items_list:
- * @menu: this #NAObjectMenu object.
- * @items: an ordered list of UUID of subitems.
- *
- * Set the internal list of uuids of subitems.
- *
- * This function takes a copy of the provided list. This later may so
- * be safely released by the caller after this function has returned.
- */
-void
-na_object_menu_set_items_list( NAObjectMenu *menu, GSList *items )
-{
-	g_return_if_fail( NA_IS_OBJECT_MENU( menu ));
-
-	if( !menu->private->dispose_has_run ){
-
-		na_utils_free_string_list( menu->private->items_ids );
-		menu->private->items_ids = na_utils_duplicate_string_list( items );
-	}
-}
-
-static void
-object_dump( const NAObject *menu )
-{
-	static const gchar *thisfn = "na_object_menu_object_dump";
-	/*NAObjectMenu *self;*/
-
-	g_return_if_fail( NA_IS_OBJECT_MENU( menu ));
+#include <runtime/na-object-api.h>
+#include <runtime/na-object-menu-priv.h>
 
-	if( !NA_OBJECT_MENU( menu )->private->dispose_has_run ){
-
-		g_debug( "%s: (nothing to dump)", thisfn );
-	}
-}
-
-static gchar *
-object_get_clipboard_id( const NAObject *menu )
-{
-	gchar *uuid;
-	gchar *clipboard_id = NULL;
-
-	g_return_val_if_fail( NA_IS_OBJECT_MENU( menu ), NULL );
-
-	if( !NA_OBJECT_MENU( menu )->private->dispose_has_run ){
-
-		uuid = na_object_get_id( menu );
-		clipboard_id = g_strdup_printf( "M:%s", uuid );
-		g_free( uuid );
-	}
-
-	return( clipboard_id );
-}
-
-static NAObject *
-object_new( const NAObject *menu )
-{
-	return( NA_OBJECT( na_object_menu_new()));
-}
-
-static void
-object_copy( NAObject *target, const NAObject *source )
-{
-	g_return_if_fail( NA_IS_OBJECT_MENU( target ));
-	g_return_if_fail( NA_IS_OBJECT_MENU( source ));
-
-	if( !NA_OBJECT_MENU( target )->private->dispose_has_run &&
-		!NA_OBJECT_MENU( source )->private->dispose_has_run ){
-
-		/* nothing to do */
-	}
-}
-
-static gboolean
-object_are_equal( const NAObject *a, const NAObject *b )
-{
-	gboolean equal = TRUE;
-
-	g_return_val_if_fail( NA_IS_OBJECT_MENU( a ), FALSE );
-	g_return_val_if_fail( NA_IS_OBJECT_MENU( b ), FALSE );
-
-	if( !NA_OBJECT_MENU( a )->private->dispose_has_run &&
-		!NA_OBJECT_MENU( b )->private->dispose_has_run ){
-
-		/* nothing to compare */
-	}
-
-	return( equal );
-}
-
-/*
- * a valid NAObjectMenu requires a not null, not empty label
- * this is checked here as NAObject doesn't have this condition
- */
-static gboolean
-object_is_valid( const NAObject *menu )
-{
-	gchar *label;
-	gboolean is_valid = TRUE;
-
-	g_return_val_if_fail( NA_IS_OBJECT_MENU( menu ), FALSE );
-
-	if( !NA_OBJECT_MENU( menu )->private->dispose_has_run ){
-
-		if( is_valid ){
-			label = na_object_get_label( menu );
-			is_valid = ( label && g_utf8_strlen( label, -1 ) > 0 );
-			g_free( label );
-		}
-	}
-
-	return( is_valid );
-}
+#include "na-object-api.h"
diff --git a/src/common/na-object-action.h b/src/common/na-object-profile-fn.h
similarity index 59%
copy from src/common/na-object-action.h
copy to src/common/na-object-profile-fn.h
index 8ea7e5a..5fbb6e4 100644
--- a/src/common/na-object-action.h
+++ b/src/common/na-object-profile-fn.h
@@ -1,5 +1,5 @@
 /*
- * Nautilus ObjectActions
+ * Nautilus Actions
  * A Nautilus extension which offers configurable context menu actions.
  *
  * Copyright (C) 2005 The GNOME Foundation
@@ -28,32 +28,24 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_ACTION_H__
-#define __NA_OBJECT_ACTION_H__
+#ifndef __NA_COMMON_OBJECT_PROFILE_FN_H__
+#define __NA_COMMON_OBJECT_PROFILE_FN_H__
 
 /**
- * SECTION: na_object_action
- * @short_description: #NAObjectAction public function declaration.
- * @include: common/na-object-action.h
+ * SECTION: na_object_profile
+ * @short_description: #NAObjectProfile public function declarations extension.
+ * @include: common/na-object-profile-fn.h
+ *
+ * Define here the public functions of the #NAObjectProfile class which
+ * are not shared by the Nautilus Actions plugin.
  */
 
-#include <glib/gi18n.h>
-
-#include "na-object-action-class.h"
-#include "na-object-profile-class.h"
+#include <runtime/na-object-profile-class.h>
 
 G_BEGIN_DECLS
 
-NAObjectAction *na_object_action_new( void );
-NAObjectAction *na_object_action_new_with_profile( void );
-
-gboolean        na_object_action_is_readonly( const NAObjectAction *action );
-
-void            na_object_action_set_version( NAObjectAction *action, const gchar *version );
-void            na_object_action_set_readonly( NAObjectAction *action, gboolean readonly );
-
-void            na_object_action_attach_profile( NAObjectAction *action, NAObjectProfile *profile );
+void    na_object_profile_set_scheme( NAObjectProfile *profile, const gchar *scheme, gboolean selected );
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_ACTION_H__ */
+#endif /* __NA_COMMON_OBJECT_PROFILE_FN_H__ */
diff --git a/src/common/na-object-profile.c b/src/common/na-object-profile.c
index 2006fb3..c521b0d 100644
--- a/src/common/na-object-profile.c
+++ b/src/common/na-object-profile.c
@@ -36,897 +36,11 @@
 
 #include <libnautilus-extension/nautilus-file-info.h>
 
-#include "na-iduplicable.h"
+#include <runtime/na-object-api.h>
+#include <runtime/na-object-profile-priv.h>
+
 #include "na-object-api.h"
-#include "na-object-action.h"
-#include "na-object-profile.h"
 #include "na-utils.h"
-#include "na-gnome-vfs-uri.h"
-
-/* private class data
- */
-struct NAObjectProfileClassPrivate {
-	void *empty;						/* so that gcc -pedantic is happy */
-};
-
-/* private instance data
- */
-struct NAObjectProfilePrivate {
-	gboolean        dispose_has_run;
-
-	/* the NAObjectAction object
-	 */
-	NAObjectAction *action;
-
-	/* profile properties
-	 */
-	gchar          *path;
-	gchar          *parameters;
-	GSList         *basenames;
-	gboolean        match_case;
-	GSList         *mimetypes;
-	gboolean        is_file;
-	gboolean        is_dir;
-	gboolean        accept_multiple;
-	GSList         *schemes;
-};
-
-/* profile properties
- */
-enum {
-	NAPROFILE_PROP_ACTION_ID = 1,
-	NAPROFILE_PROP_PATH_ID,
-	NAPROFILE_PROP_PARAMETERS_ID,
-	NAPROFILE_PROP_BASENAMES_ID,
-	NAPROFILE_PROP_MATCHCASE_ID,
-	NAPROFILE_PROP_MIMETYPES_ID,
-	NAPROFILE_PROP_ISFILE_ID,
-	NAPROFILE_PROP_ISDIR_ID,
-	NAPROFILE_PROP_ACCEPT_MULTIPLE_ID,
-	NAPROFILE_PROP_SCHEMES_ID
-};
-
-#define NAPROFILE_PROP_ACTION				"na-profile-action"
-#define NAPROFILE_PROP_PATH					"na-profile-path"
-#define NAPROFILE_PROP_PARAMETERS			"na-profile-parameters"
-#define NAPROFILE_PROP_BASENAMES			"na-profile-basenames"
-#define NAPROFILE_PROP_MATCHCASE			"na-profile-matchcase"
-#define NAPROFILE_PROP_MIMETYPES			"na-profile-mimetypes"
-#define NAPROFILE_PROP_ISFILE				"na-profile-isfile"
-#define NAPROFILE_PROP_ISDIR				"na-profile-isdir"
-#define NAPROFILE_PROP_ACCEPT_MULTIPLE		"na-profile-accept-multiple"
-#define NAPROFILE_PROP_SCHEMES				"na-profile-schemes"
-
-static NAObjectClass *st_parent_class = NULL;
-
-static GType     register_type( void );
-static void      class_init( NAObjectProfileClass *klass );
-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_dispose( GObject *object );
-static void      instance_finalize( GObject *object );
-
-static int       validate_schemes( GSList* schemes2test, NautilusFileInfo* file );
-
-static void      object_dump( const NAObject *profile );
-static void      object_dump_list( const gchar *thisfn, const gchar *label, GSList *list );
-static gchar    *object_get_clipboard_id( const NAObject *profile );
-static NAObject *object_new( const NAObject *profile );
-static void      object_copy( NAObject *target, const NAObject *source );
-static gboolean  object_are_equal( const NAObject *a, const NAObject *b );
-static gboolean  object_is_valid( const NAObject *profile );
-
-GType
-na_object_profile_get_type( void )
-{
-	static GType object_type = 0;
-
-	if( !object_type ){
-		object_type = register_type();
-	}
-
-	return( object_type );
-}
-
-static GType
-register_type( void )
-{
-	static const gchar *thisfn = "na_object_profile_register_type";
-
-	static GTypeInfo info = {
-		sizeof( NAObjectProfileClass ),
-		( GBaseInitFunc ) NULL,
-		( GBaseFinalizeFunc ) NULL,
-		( GClassInitFunc ) class_init,
-		NULL,
-		NULL,
-		sizeof( NAObjectProfile ),
-		0,
-		( GInstanceInitFunc ) instance_init
-	};
-
-	g_debug( "%s", thisfn );
-
-	return( g_type_register_static( NA_OBJECT_ID_TYPE, "NAObjectProfile", &info, 0 ));
-}
-
-static void
-class_init( NAObjectProfileClass *klass )
-{
-	static const gchar *thisfn = "na_object_profile_class_init";
-	GObjectClass *object_class;
-	GParamSpec *spec;
-
-	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;
-	object_class->set_property = instance_set_property;
-	object_class->get_property = instance_get_property;
-
-	spec = g_param_spec_pointer(
-			NAPROFILE_PROP_ACTION,
-			"NAAction attachment",
-			"The NAAction action to which this profile belongs",
-			G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE );
-	g_object_class_install_property( object_class, NAPROFILE_PROP_ACTION_ID, spec );
-
-	spec = g_param_spec_string(
-			NAPROFILE_PROP_PATH,
-			"Command path",
-			"Command path", "",
-			G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE );
-	g_object_class_install_property( object_class, NAPROFILE_PROP_PATH_ID, spec );
-
-	spec = g_param_spec_string(
-			NAPROFILE_PROP_PARAMETERS,
-			"Command parameters",
-			"Command parameters", "",
-			G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE );
-	g_object_class_install_property( object_class, NAPROFILE_PROP_PARAMETERS_ID, spec );
-
-	spec = g_param_spec_pointer(
-			NAPROFILE_PROP_BASENAMES,
-			"Filenames mask",
-			"Filenames mask",
-			G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE );
-	g_object_class_install_property( object_class, NAPROFILE_PROP_BASENAMES_ID, spec );
-
-	spec = g_param_spec_boolean(
-			NAPROFILE_PROP_MATCHCASE,
-			"Match case",
-			"Whether the filenames are case sensitive", TRUE,
-			G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE );
-	g_object_class_install_property( object_class, NAPROFILE_PROP_MATCHCASE_ID, spec );
-
-	spec = g_param_spec_pointer(
-			NAPROFILE_PROP_MIMETYPES,
-			"Mimetypes",
-			"List of selectable mimetypes",
-			G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE );
-	g_object_class_install_property( object_class, NAPROFILE_PROP_MIMETYPES_ID, spec );
-
-	spec = g_param_spec_boolean(
-			NAPROFILE_PROP_ISFILE,
-			"Only files",
-			"Whether apply when only files are selected", TRUE,
-			G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE );
-	g_object_class_install_property( object_class, NAPROFILE_PROP_ISFILE_ID, spec );
-
-	spec = g_param_spec_boolean(
-			NAPROFILE_PROP_ISDIR,
-			"Only dirs",
-			"Whether apply when only dirs are selected", FALSE,
-			G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE );
-	g_object_class_install_property( object_class, NAPROFILE_PROP_ISDIR_ID, spec );
-
-	spec = g_param_spec_boolean(
-			NAPROFILE_PROP_ACCEPT_MULTIPLE,
-			"Accept multiple selection",
-			"Whether apply when multiple files or folders are selected", TRUE,
-			G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE );
-	g_object_class_install_property( object_class, NAPROFILE_PROP_ACCEPT_MULTIPLE_ID, spec );
-
-	spec = g_param_spec_pointer(
-			NAPROFILE_PROP_SCHEMES,
-			"Schemes",
-			"list of selectable schemes",
-			G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE );
-	g_object_class_install_property( object_class, NAPROFILE_PROP_SCHEMES_ID, spec );
-
-	klass->private = g_new0( NAObjectProfileClassPrivate, 1 );
-
-	NA_OBJECT_CLASS( klass )->dump = object_dump;
-	NA_OBJECT_CLASS( klass )->get_clipboard_id = object_get_clipboard_id;
-	NA_OBJECT_CLASS( klass )->ref = NULL;
-	NA_OBJECT_CLASS( klass )->new = object_new;
-	NA_OBJECT_CLASS( klass )->copy = object_copy;
-	NA_OBJECT_CLASS( klass )->are_equal = object_are_equal;
-	NA_OBJECT_CLASS( klass )->is_valid = object_is_valid;
-	NA_OBJECT_CLASS( klass )->get_childs = NULL;
-}
-
-static void
-instance_init( GTypeInstance *instance, gpointer klass )
-{
-	/*static const gchar *thisfn = "na_object_profile_instance_init";*/
-	NAObjectProfile *self;
-
-	/*g_debug( "%s: instance=%p, klass=%p", thisfn, ( void * ) instance, ( void * ) klass );*/
-	g_return_if_fail( NA_IS_OBJECT_PROFILE( instance ));
-	self = NA_OBJECT_PROFILE( instance );
-
-	self->private = g_new0( NAObjectProfilePrivate, 1 );
-
-	self->private->dispose_has_run = FALSE;
-
-	/* initialize suitable default values
-	 */
-	self->private->path = g_strdup( "" );
-	self->private->parameters = g_strdup( "" );
-	self->private->basenames = NULL;
-	self->private->basenames = g_slist_append( self->private->basenames, g_strdup( "*" ));
-	self->private->match_case = TRUE;
-	self->private->mimetypes = NULL;
-	self->private->mimetypes = g_slist_append( self->private->mimetypes, g_strdup( "*/*" ));
-	self->private->is_file = TRUE;
-	self->private->is_dir = FALSE;
-	self->private->accept_multiple = FALSE;
-	self->private->schemes = NULL;
-	self->private->schemes = g_slist_append( self->private->schemes, g_strdup( "file" ));
-}
-
-static void
-instance_get_property( GObject *object, guint property_id, GValue *value, GParamSpec *spec )
-{
-	NAObjectProfile *self;
-	GSList *list;
-
-	g_return_if_fail( NA_IS_OBJECT_PROFILE( object ));
-	self = NA_OBJECT_PROFILE( object );
-
-	if( !self->private->dispose_has_run ){
-
-		switch( property_id ){
-			case NAPROFILE_PROP_ACTION_ID:
-				g_value_set_pointer( value, self->private->action );
-				break;
-
-			case NAPROFILE_PROP_PATH_ID:
-				g_value_set_string( value, self->private->path );
-				break;
-
-			case NAPROFILE_PROP_PARAMETERS_ID:
-				g_value_set_string( value, self->private->parameters );
-				break;
-
-			case NAPROFILE_PROP_BASENAMES_ID:
-				list = na_utils_duplicate_string_list( self->private->basenames );
-				g_value_set_pointer( value, list );
-				break;
-
-			case NAPROFILE_PROP_MATCHCASE_ID:
-				g_value_set_boolean( value, self->private->match_case );
-				break;
-
-			case NAPROFILE_PROP_MIMETYPES_ID:
-				list = na_utils_duplicate_string_list( self->private->mimetypes );
-				g_value_set_pointer( value, list );
-				break;
-
-			case NAPROFILE_PROP_ISFILE_ID:
-				g_value_set_boolean( value, self->private->is_file );
-				break;
-
-			case NAPROFILE_PROP_ISDIR_ID:
-				g_value_set_boolean( value, self->private->is_dir );
-				break;
-
-			case NAPROFILE_PROP_ACCEPT_MULTIPLE_ID:
-				g_value_set_boolean( value, self->private->accept_multiple );
-				break;
-
-			case NAPROFILE_PROP_SCHEMES_ID:
-				list = na_utils_duplicate_string_list( self->private->schemes );
-				g_value_set_pointer( value, list );
-				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 )
-{
-	NAObjectProfile *self;
-
-	g_return_if_fail( NA_IS_OBJECT_PROFILE( object ));
-	self = NA_OBJECT_PROFILE( object );
-
-	if( !self->private->dispose_has_run ){
-
-		switch( property_id ){
-			case NAPROFILE_PROP_ACTION_ID:
-				self->private->action = g_value_get_pointer( value );
-				break;
-
-			case NAPROFILE_PROP_PATH_ID:
-				g_free( self->private->path );
-				self->private->path = g_value_dup_string( value );
-				break;
-
-			case NAPROFILE_PROP_PARAMETERS_ID:
-				g_free( self->private->parameters );
-				self->private->parameters = g_value_dup_string( value );
-				break;
-
-			case NAPROFILE_PROP_BASENAMES_ID:
-				na_utils_free_string_list( self->private->basenames );
-				self->private->basenames = na_utils_duplicate_string_list( g_value_get_pointer( value ));
-				break;
-
-			case NAPROFILE_PROP_MATCHCASE_ID:
-				self->private->match_case = g_value_get_boolean( value );
-				break;
-
-			case NAPROFILE_PROP_MIMETYPES_ID:
-				na_utils_free_string_list( self->private->mimetypes );
-				self->private->mimetypes = na_utils_duplicate_string_list( g_value_get_pointer( value ));
-				break;
-
-			case NAPROFILE_PROP_ISFILE_ID:
-				self->private->is_file = g_value_get_boolean( value );
-				break;
-
-			case NAPROFILE_PROP_ISDIR_ID:
-				self->private->is_dir = g_value_get_boolean( value );
-				break;
-
-			case NAPROFILE_PROP_ACCEPT_MULTIPLE_ID:
-				self->private->accept_multiple = g_value_get_boolean( value );
-				break;
-
-			case NAPROFILE_PROP_SCHEMES_ID:
-				na_utils_free_string_list( self->private->schemes );
-				self->private->schemes = na_utils_duplicate_string_list( g_value_get_pointer( value ));
-				break;
-
-			default:
-				G_OBJECT_WARN_INVALID_PROPERTY_ID( object, property_id, spec );
-				break;
-		}
-	}
-}
-
-static void
-instance_dispose( GObject *object )
-{
-	/*static const gchar *thisfn = "na_object_profile_instance_dispose";*/
-	NAObjectProfile *self;
-
-	/*g_debug( "%s: object=%p", thisfn, ( void * ) object );*/
-	g_return_if_fail( NA_IS_OBJECT_PROFILE( object ));
-	self = NA_OBJECT_PROFILE( object );
-
-	if( !self->private->dispose_has_run ){
-
-		self->private->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 *object )
-{
-	/*static const gchar *thisfn = "na_object_profile_instance_finalize";*/
-	NAObjectProfile *self;
-
-	/*g_debug( "%s: object=%p", thisfn, (void * ) object );*/
-	g_return_if_fail( NA_IS_OBJECT_PROFILE( object ));
-	self = NA_OBJECT_PROFILE( object );
-
-	g_free( self->private->path );
-	g_free( self->private->parameters );
-	na_utils_free_string_list( self->private->basenames );
-	na_utils_free_string_list( self->private->mimetypes );
-	na_utils_free_string_list( self->private->schemes );
-
-	g_free( self->private );
-
-	/* chain call to parent class */
-	if( G_OBJECT_CLASS( st_parent_class )->finalize ){
-		G_OBJECT_CLASS( st_parent_class )->finalize( object );
-	}
-}
-
-/**
- * na_object_profile_new:
- *
- * Allocates a new profile of the given name.
- *
- * Returns: the newly allocated #NAObjectProfile profile.
- */
-NAObjectProfile *
-na_object_profile_new( void )
-{
-	NAObjectProfile *profile = g_object_new( NA_OBJECT_PROFILE_TYPE, NULL );
-
-	na_object_set_id( profile, OBJECT_PROFILE_PREFIX "zero" );
-
-	/* i18n: default label for a new profile */
-	na_object_set_label( profile, NA_OBJECT_PROFILE_DEFAULT_LABEL );
-
-	return( profile );
-}
-
-/**
- * na_object_profile_get_action:
- * @profile: the #NAObjectProfile to be requested.
- *
- * Returns a pointer to the action to which this profile is attached,
- * or NULL if the profile has never been attached.
- *
- * Returns: a #NAAction pointer.
- *
- * Note that the returned #NAAction pointer is owned by the profile.
- * The caller should not try to g_free() nor g_object_unref() it.
- */
-NAObjectAction *
-na_object_profile_get_action( const NAObjectProfile *profile )
-{
-	NAObjectAction *action = NULL;
-
-	g_return_val_if_fail( NA_IS_OBJECT_PROFILE( profile ), NULL );
-
-	if( !profile->private->dispose_has_run ){
-		g_object_get( G_OBJECT( profile ), NAPROFILE_PROP_ACTION, &action, NULL );
-	}
-
-	return( action );
-}
-
-/**
- * na_object_profile_get_path:
- * @profile: the #NAObjectProfile to be requested.
- *
- * Returns the path of the command attached to the profile.
- *
- * Returns: the command path as a newly allocated string. The returned
- * string must be g_free() by the caller.
- */
-gchar *
-na_object_profile_get_path( const NAObjectProfile *profile )
-{
-	gchar *path = NULL;
-
-	g_return_val_if_fail( NA_IS_OBJECT_PROFILE( profile ), NULL );
-
-	if( !profile->private->dispose_has_run ){
-		g_object_get( G_OBJECT( profile ), NAPROFILE_PROP_PATH, &path, NULL );
-	}
-
-	return( path );
-}
-
-/**
- * na_object_profile_get_parameters:
- * @profile: the #NAObjectProfile to be requested.
- *
- * Returns the parameters of the command attached to the profile.
- *
- * Returns: the command parameters as a newly allocated string. The
- * returned string must be g_free() by the caller.
- */
-gchar *
-na_object_profile_get_parameters( const NAObjectProfile *profile )
-{
-	gchar *parameters = NULL;
-
-	g_return_val_if_fail( NA_IS_OBJECT_PROFILE( profile ), NULL );
-
-	if( !profile->private->dispose_has_run ){
-		g_object_get( G_OBJECT( profile ), NAPROFILE_PROP_PARAMETERS, &parameters, NULL );
-	}
-
-	return( parameters );
-}
-
-/**
- * na_object_profile_get_basenames:
- * @profile: the #NAObjectProfile to be requested.
- *
- * Returns the basenames of the files to which the profile applies.
- *
- * Returns: a GSList of newly allocated strings. The list must be
- * na_utils_free_string_list() by the caller.
- *
- * See na_object_profile_set_basenames() for some rationale about
- * basenames.
- */
-GSList *
-na_object_profile_get_basenames( const NAObjectProfile *profile )
-{
-	GSList *basenames = NULL;
-
-	g_return_val_if_fail( NA_IS_OBJECT_PROFILE( profile ), NULL );
-
-	if( !profile->private->dispose_has_run ){
-		g_object_get( G_OBJECT( profile ), NAPROFILE_PROP_BASENAMES, &basenames, NULL );
-	}
-
-	return( basenames );
-}
-
-/**
- * na_object_profile_get_matchcase:
- * @profile: the #NAObjectProfile to be requested.
- *
- * Are specified basenames case sensitive ?
- *
- * Returns: %TRUE if the provided filenames are case sensitive, %FALSE
- * else.
- *
- * See na_object_profile_set_matchcase() for some rationale about case
- * sensitivity.
- */
-gboolean
-na_object_profile_get_matchcase( const NAObjectProfile *profile )
-{
-	gboolean matchcase = FALSE;
-
-	g_return_val_if_fail( NA_IS_OBJECT_PROFILE( profile ), FALSE );
-
-	if( !profile->private->dispose_has_run ){
-		g_object_get( G_OBJECT( profile ), NAPROFILE_PROP_MATCHCASE, &matchcase, NULL );
-	}
-
-	return( matchcase );
-}
-
-/**
- * na_object_profile_get_mimetypes:
- * @profile: the #NAObjectProfile to be requested.
- *
- * Returns the list of mimetypes this profile applies to.
- *
- * Returns: a GSList of newly allocated strings. The list must be
- * na_utils_free_string_list() by the caller.
- *
- * See na_object_profile_set_mimetypes() for some rationale about
- * mimetypes.
- */
-GSList *
-na_object_profile_get_mimetypes( const NAObjectProfile *profile )
-{
-	GSList *mimetypes = NULL;
-
-	g_return_val_if_fail( NA_IS_OBJECT_PROFILE( profile ), NULL );
-
-	if( !profile->private->dispose_has_run ){
-		g_object_get( G_OBJECT( profile ), NAPROFILE_PROP_MIMETYPES, &mimetypes, NULL );
-	}
-
-	return( mimetypes );
-}
-
-/**
- * na_object_profile_get_is_file:
- * @profile: the #NAObjectProfile to be requested.
- *
- * Does this profile apply if the selection contains files ?
- *
- * Returns: %TRUE if it applies, %FALSE else.
- *
- * See na_object_profile_set_isfiledir() for some rationale about file
- * selection.
- */
-gboolean
-na_object_profile_get_is_file( const NAObjectProfile *profile )
-{
-	gboolean isfile = FALSE;
-
-	g_return_val_if_fail( NA_IS_OBJECT_PROFILE( profile ), FALSE );
-
-	if( !profile->private->dispose_has_run ){
-		g_object_get( G_OBJECT( profile ), NAPROFILE_PROP_ISFILE, &isfile, NULL );
-	}
-
-	return( isfile );
-}
-
-/**
- * na_object_profile_get_is_dir:
- * @profile: the #NAObjectProfile to be requested.
- *
- * Does this profile apply if the selection contains folders ?
- *
- * Returns: %TRUE if it applies, %FALSE else.
- *
- * See na_object_profile_set_isfiledir() for some rationale about file
- * selection.
- */
-gboolean
-na_object_profile_get_is_dir( const NAObjectProfile *profile )
-{
-	gboolean isdir = FALSE;
-
-	g_return_val_if_fail( NA_IS_OBJECT_PROFILE( profile ), FALSE );
-
-	if( !profile->private->dispose_has_run ){
-		g_object_get( G_OBJECT( profile ), NAPROFILE_PROP_ISDIR, &isdir, NULL );
-	}
-
-	return( isdir );
-}
-
-/**
- * na_object_profile_get_multiple:
- * @profile: the #NAObjectProfile to be requested.
- *
- * Does this profile apply if selection contains multiple files or
- * folders ?
- *
- * Returns: %TRUE if it applies, %FALSE else.
- *
- * See na_object_profile_set_multiple() for some rationale about
- * multiple selection.
- */
-gboolean
-na_object_profile_get_multiple( const NAObjectProfile *profile )
-{
-	gboolean multiple = FALSE;
-
-	g_return_val_if_fail( NA_IS_OBJECT_PROFILE( profile ), FALSE );
-
-	if( !profile->private->dispose_has_run ){
-		g_object_get( G_OBJECT( profile ), NAPROFILE_PROP_ACCEPT_MULTIPLE, &multiple, NULL );
-	}
-
-	return( multiple );
-}
-
-/**
- * na_object_profile_get_schemes:
- * @profile: the #NAObjectProfile to be requested.
- *
- * Returns the list of schemes this profile applies to.
- *
- * Returns: a GSList of newly allocated strings. The list must be
- * na_utils_free_string_list() by the caller.
- *
- * See na_object_profile_set_schemes() for some rationale about
- * schemes.
- */
-GSList *
-na_object_profile_get_schemes( const NAObjectProfile *profile )
-{
-	GSList *schemes = NULL;
-
-	g_return_val_if_fail( NA_IS_OBJECT_PROFILE( profile ), NULL );
-
-	if( !profile->private->dispose_has_run ){
-		g_object_get( G_OBJECT( profile ), NAPROFILE_PROP_SCHEMES, &schemes, NULL );
-	}
-
-	return( schemes );
-}
-
-/**
- * na_object_profile_set_action:
- * @profile: the #NAObjectProfile to be updated.
- * @action: the #NAAction action to which this profile is attached.
- *
- * Sets the action to which this profile is attached.
- *
- * The reference count of the @action is not modified.
- */
-void
-na_object_profile_set_action( NAObjectProfile *profile, const NAObjectAction *action )
-{
-	g_return_if_fail( NA_IS_OBJECT_PROFILE( profile ));
-	g_return_if_fail( NA_IS_OBJECT_ACTION( action ));
-
-	if( !profile->private->dispose_has_run ){
-		g_object_set( G_OBJECT( profile ), NAPROFILE_PROP_ACTION, action, NULL );
-	}
-}
-
-/**
- * na_object_profile_set_path:
- * @profile: the #NAObjectProfile to be updated.
- * @path: the command path to be set.
- *
- * Sets the path of the command for this profile.
- *
- * #NAObjectProfile takes a copy of the provided path. This later may
- * so be g_free() by the caller after this function returns.
- */
-void
-na_object_profile_set_path( NAObjectProfile *profile, const gchar *path )
-{
-	g_return_if_fail( NA_IS_OBJECT_PROFILE( profile ));
-
-	if( !profile->private->dispose_has_run ){
-		g_object_set( G_OBJECT( profile ), NAPROFILE_PROP_PATH, path, NULL );
-	}
-}
-
-/**
- * na_object_profile_set_parameters:
- * @profile: the #NAObjectProfile to be updated.
- * @parameters : the command parameters to be set.
- *
- * Sets the parameters of the command for this profile.
- *
- * #NAObjectProfile takes a copy of the provided parameters. This later
- * may so be g_free() by the caller after this function returns.
- */
-void
-na_object_profile_set_parameters( NAObjectProfile *profile, const gchar *parameters )
-{
-	g_return_if_fail( NA_IS_OBJECT_PROFILE( profile ));
-
-	if( !profile->private->dispose_has_run ){
-		g_object_set( G_OBJECT( profile ), NAPROFILE_PROP_PARAMETERS, parameters, NULL );
-	}
-}
-
-/**
- * na_object_profile_set_basenames:
- * @profile: the #NAObjectProfile to be updated.
- * @basenames : the basenames to be set.
- *
- * Sets the basenames of the elements on which this profile applies.
- *
- * #NAObjectProfile takes a copy of the provided basenames. This later
- * may so be na_utils_free_string_list() by the caller after this
- * function returns.
- *
- * The basenames list defaults to the single element "*", which means
- * that the profile will apply to all basenames.
- */
-void
-na_object_profile_set_basenames( NAObjectProfile *profile, GSList *basenames )
-{
-	g_return_if_fail( NA_IS_OBJECT_PROFILE( profile ));
-
-	if( !profile->private->dispose_has_run ){
-		g_object_set( G_OBJECT( profile ), NAPROFILE_PROP_BASENAMES, basenames, NULL );
-	}
-}
-
-/**
- * na_object_profile_set_matchcase:
- * @profile: the #NAObjectProfile to be updated.
- * @matchcase : whether the basenames are case sensitive or not.
- *
- * Sets the 'match_case' flag, indicating if specified basename
- * patterns are, or not, case sensitive.
- *
- * This value defaults to %TRUE, which means that basename patterns
- * default to be case sensitive.
- */
-void
-na_object_profile_set_matchcase( NAObjectProfile *profile, gboolean matchcase )
-{
-	g_return_if_fail( NA_IS_OBJECT_PROFILE( profile ));
-
-	if( !profile->private->dispose_has_run ){
-		g_object_set( G_OBJECT( profile ), NAPROFILE_PROP_MATCHCASE, matchcase, NULL );
-	}
-}
-
-/**
- * na_object_profile_set_mimetypes:
- * @profile: the #NAObjectProfile to be updated.
- * @mimetypes: list of mimetypes to be matched.
- *
- * Sets the mimetypes on which this profile applies.
- *
- * #NAObjectProfile takes a copy of the provided mimetypes. This later
- * may so be na_utils_free_string_list() by the caller after this
- * function returns.
- *
- * The mimetypes list defaults to the single element "* / *", which
- * means that the profile will apply to all types of files.
- */
-void
-na_object_profile_set_mimetypes( NAObjectProfile *profile, GSList *mimetypes )
-{
-	g_return_if_fail( NA_IS_OBJECT_PROFILE( profile ));
-
-	if( !profile->private->dispose_has_run ){
-		g_object_set( G_OBJECT( profile ), NAPROFILE_PROP_MIMETYPES, mimetypes, NULL );
-	}
-}
-
-/**
- * na_object_profile_set_isfile:
- * @profile: the #NAObjectProfile to be updated.
- * @isfile: whether the profile applies only to files.
- *
- * Sets the 'isfile' flag on which this profile applies.
- */
-void
-na_object_profile_set_isfile( NAObjectProfile *profile, gboolean isfile )
-{
-	g_return_if_fail( NA_IS_OBJECT_PROFILE( profile ));
-
-	if( !profile->private->dispose_has_run ){
-		g_object_set( G_OBJECT( profile ), NAPROFILE_PROP_ISFILE, isfile, NULL );
-	}
-}
-
-/**
- * na_object_profile_set_isdir:
- * @profile: the #NAObjectProfile to be updated.
- * @isdir: the profile applies only to folders.
- *
- * Sets the 'isdir' flag on which this profile applies.
- */
-void
-na_object_profile_set_isdir( NAObjectProfile *profile, gboolean isdir )
-{
-	g_return_if_fail( NA_IS_OBJECT_PROFILE( profile ));
-
-	if( !profile->private->dispose_has_run ){
-		g_object_set( G_OBJECT( profile ), NAPROFILE_PROP_ISDIR, isdir, NULL );
-	}
-}
-
-/**
- * na_object_profile_set_isfiledir:
- * @profile: the #NAObjectProfile to be updated.
- * @isfile: whether the profile applies only to files.
- * @isdir: the profile applies only to folders.
- *
- * Sets the 'isfile' and 'isdir' flags on which this profile applies.
- *
- * File selection defaults to %TRUE.
- *
- * Folder selection defaults to %FALSE, which means that this profile will
- * not apply if the selection contains folders.
- */
-void
-na_object_profile_set_isfiledir( NAObjectProfile *profile, gboolean isfile, gboolean isdir )
-{
-	g_return_if_fail( NA_IS_OBJECT_PROFILE( profile ));
-
-	if( !profile->private->dispose_has_run ){
-		g_object_set( G_OBJECT( profile ), NAPROFILE_PROP_ISFILE, isfile, NAPROFILE_PROP_ISDIR, isdir, NULL );
-	}
-}
-
-/**
- * na_object_profile_set_multiple:
- * @profile: the #NAObjectProfile to be updated.
- * @multiple: TRUE if it does.
- *
- * Sets if this profile accept multiple selection ?
- *
- * This value defaults to %FALSE, which means that this profile will
- * not apply if the selection contains more than one element.
- */
-void
-na_object_profile_set_multiple( NAObjectProfile *profile, gboolean multiple )
-{
-	g_return_if_fail( NA_IS_OBJECT_PROFILE( profile ));
-
-	if( !profile->private->dispose_has_run ){
-		g_object_set( G_OBJECT( profile ), NAPROFILE_PROP_ACCEPT_MULTIPLE, multiple, NULL );
-	}
-}
 
 /**
  * na_object_profile_set_scheme:
@@ -957,672 +71,3 @@ na_object_profile_set_scheme( NAObjectProfile *profile, const gchar *scheme, gbo
 		}
 	}
 }
-
-/**
- * na_object_profile_set_schemes:
- * @profile: the #NAObjectProfile to be updated.
- * @schemes: list of schemes which apply.
- *
- * Sets the schemes on which this profile applies.
- *
- * #NAObjectProfile takes a copy of the provided mimetypes. This later
- * may so be na_utils_free_string_list() by the caller after this
- * function returns.
- *
- * The schemes list defaults to the single element "file", which means
- * that the profile will only apply to local files.
- */
-void
-na_object_profile_set_schemes( NAObjectProfile *profile, GSList *schemes )
-{
-	g_return_if_fail( NA_IS_OBJECT_PROFILE( profile ));
-
-	if( !profile->private->dispose_has_run ){
-		g_object_set( G_OBJECT( profile ), NAPROFILE_PROP_SCHEMES, schemes, NULL );
-	}
-}
-
-/**
- * na_object_profile_is_candidate:
- * @profile: the #NAObjectProfile to be checked.
- * @files: the currently selected items, as provided by Nautilus.
- *
- * Determines if the given profile is candidate to be displayed in the
- * Nautilus context menu, regarding the list of currently selected
- * items.
- *
- * Returns: %TRUE if this profile succeeds to all tests and is so a
- * valid candidate to be displayed in Nautilus context menu, %FALSE
- * else.
- */
-gboolean
-na_object_profile_is_candidate( const NAObjectProfile *profile, GList* files )
-{
-	gboolean retv = FALSE;
-	gboolean test_multiple_file = FALSE;
-	gboolean test_file_type = FALSE;
-	gboolean test_scheme = FALSE;
-	gboolean test_basename = FALSE;
-	gboolean test_mimetype = FALSE;
-	GList* glob_patterns = NULL;
-	GList* glob_mime_patterns = NULL;
-	GSList* iter;
-	GList* iter1;
-	GList* iter2;
-	guint dir_count = 0;
-	guint file_count = 0;
-	guint total_count = 0;
-	guint scheme_ok_count = 0;
-	guint glob_ok_count = 0;
-	guint mime_glob_ok_count = 0;
-	gboolean basename_match_ok = FALSE;
-	gboolean mimetype_match_ok = FALSE;
-	gchar *tmp_pattern, *tmp_filename, *tmp_filename2, *tmp_mimetype, *tmp_mimetype2;
-
-	g_return_val_if_fail( NA_IS_OBJECT_PROFILE( profile ), FALSE );
-
-	if( profile->private->dispose_has_run ){
-		return( FALSE );
-	}
-
-	if (profile->private->basenames && profile->private->basenames->next != NULL &&
-			g_ascii_strcasecmp ((gchar*)(profile->private->basenames->data), "*") == 0)
-	{
-		/* if the only pattern is '*' then all files will match, so it
-		 * is not necessary to make the test for each of them
-		 */
-		test_basename = TRUE;
-	}
-	else
-	{
-		for (iter = profile->private->basenames; iter; iter = iter->next)
-		{
-			tmp_pattern = (gchar*)iter->data;
-			if (!profile->private->match_case)
-			{
-				/* --> if case-insensitive asked, lower all the string
-				 * since the pattern matching function don't manage it
-				 * itself.
-				 */
-				tmp_pattern = g_ascii_strdown ((gchar*)iter->data, strlen ((gchar*)iter->data));
-			}
-
-			glob_patterns = g_list_append (glob_patterns, g_pattern_spec_new (tmp_pattern));
-
-			if (!profile->private->match_case)
-			{
-				g_free (tmp_pattern);
-			}
-		}
-	}
-
-	if (profile->private->mimetypes && profile->private->mimetypes->next != NULL &&
-			(g_ascii_strcasecmp ((gchar*)(profile->private->mimetypes->data), "*") == 0 ||
-			 g_ascii_strcasecmp ((gchar*)(profile->private->mimetypes->data), "*/*") == 0))
-	{
-		/* if the only pattern is '*' or * / * then all mimetypes will
-		 * match, so it is not necessary to make the test for each of them
-		 */
-		test_mimetype = TRUE;
-	}
-	else
-	{
-		for (iter = profile->private->mimetypes; iter; iter = iter->next)
-		{
-			glob_mime_patterns = g_list_append (glob_mime_patterns, g_pattern_spec_new ((gchar*)iter->data));
-		}
-	}
-
-	for (iter1 = files; iter1; iter1 = iter1->next)
-	{
-		tmp_filename = nautilus_file_info_get_name ((NautilusFileInfo *)iter1->data);
-
-		if (tmp_filename)
-		{
-			tmp_mimetype = nautilus_file_info_get_mime_type ((NautilusFileInfo *)iter1->data);
-
-			if (!profile->private->match_case)
-			{
-				/* --> if case-insensitive asked, lower all the string
-				 * since the pattern matching function don't manage it
-				 * itself.
-				 */
-				tmp_filename2 = g_ascii_strdown (tmp_filename, strlen (tmp_filename));
-				g_free (tmp_filename);
-				tmp_filename = tmp_filename2;
-			}
-
-			/* --> for the moment we deal with all mimetypes case-insensitively */
-			tmp_mimetype2 = g_ascii_strdown (tmp_mimetype, strlen (tmp_mimetype));
-			g_free (tmp_mimetype);
-			tmp_mimetype = tmp_mimetype2;
-
-			if (nautilus_file_info_is_directory ((NautilusFileInfo *)iter1->data))
-			{
-				dir_count++;
-			}
-			else
-			{
-				file_count++;
-			}
-
-			scheme_ok_count += validate_schemes (profile->private->schemes, (NautilusFileInfo*)iter1->data);
-
-			if (!test_basename) /* if it is already ok, skip the test to improve performance */
-			{
-				basename_match_ok = FALSE;
-				iter2 = glob_patterns;
-				while (iter2 && !basename_match_ok)
-				{
-					if (g_pattern_match_string ((GPatternSpec*)iter2->data, tmp_filename))
-					{
-						basename_match_ok = TRUE;
-					}
-					iter2 = iter2->next;
-				}
-
-				if (basename_match_ok)
-				{
-					glob_ok_count++;
-				}
-			}
-
-			if (!test_mimetype) /* if it is already ok, skip the test to improve performance */
-			{
-				mimetype_match_ok = FALSE;
-				iter2 = glob_mime_patterns;
-				while (iter2 && !mimetype_match_ok)
-				{
-					if (g_pattern_match_string ((GPatternSpec*)iter2->data, tmp_mimetype))
-					{
-						mimetype_match_ok = TRUE;
-					}
-					iter2 = iter2->next;
-				}
-
-				if (mimetype_match_ok)
-				{
-					mime_glob_ok_count++;
-				}
-			}
-
-			g_free (tmp_mimetype);
-			g_free (tmp_filename);
-
-		}
-
-		total_count++;
-	}
-
-	if ((files != NULL) && (files->next == NULL) && (!profile->private->accept_multiple))
-	{
-		test_multiple_file = TRUE;
-	}
-	else if (profile->private->accept_multiple)
-	{
-		test_multiple_file = TRUE;
-	}
-
-	if (profile->private->is_dir && profile->private->is_file)
-	{
-		if (dir_count > 0 || file_count > 0)
-		{
-			test_file_type = TRUE;
-		}
-	}
-	else if (profile->private->is_dir && !profile->private->is_file)
-	{
-		if (file_count == 0)
-		{
-			test_file_type = TRUE;
-		}
-	}
-	else if (!profile->private->is_dir && profile->private->is_file)
-	{
-		if (dir_count == 0)
-		{
-			test_file_type = TRUE;
-		}
-	}
-
-	if (scheme_ok_count == total_count)
-	{
-		test_scheme = TRUE;
-	}
-
-
-	if (!test_basename) /* if not already tested */
-	{
-		if (glob_ok_count == total_count)
-		{
-			test_basename = TRUE;
-		}
-	}
-
-	if (!test_mimetype) /* if not already tested */
-	{
-		if (mime_glob_ok_count == total_count)
-		{
-			test_mimetype = TRUE;
-		}
-	}
-
-	if (test_basename && test_mimetype && test_file_type && test_scheme && test_multiple_file)
-	{
-		retv = TRUE;
-	}
-
-	g_list_foreach (glob_patterns, (GFunc) g_pattern_spec_free, NULL);
-	g_list_free (glob_patterns);
-	g_list_foreach (glob_mime_patterns, (GFunc) g_pattern_spec_free, NULL);
-	g_list_free (glob_mime_patterns);
-
-	return retv;
-}
-
-/**
- * Expands the parameters path, in function of the found tokens.
- *
- * @profile: the selected profile.
- *
- * @files: the list of currently selected items, as provided by Nautilus.
- *
- * Valid parameters are :
- *
- * %d : base dir of the (first) selected file(s)/folder(s)
- * %f : the name of the (first) selected file/folder
- * %h : hostname of the (first) URI
- * %m : list of the basename of the selected files/directories separated by space.
- * %M : list of the selected files/directories with their complete path separated by space.
- * %p : port number from the (first) URI
- * %R : space-separated list of URIs
- * %s : scheme of the (first) URI
- * %u : (first) URI
- * %U : username of the (first) URI
- * %% : a percent sign
- *
- * Adding a parameter requires updating of :
- * - src/common/na/na-action-profile.c:na_object_profile_parse_parameters()
- * - src/common/na/na-xml-names.h
- * - src/nact/nact-icommand-tab.c:parse_parameters()
- * - src/nact/nautilus-actions-config-tool.ui:LegendDialog
- */
-gchar *
-na_object_profile_parse_parameters( const NAObjectProfile *profile, GList* files )
-{
-	gchar *parsed = NULL;
-	GString *string;
-	GList *ifi;
-	gboolean first;
-	gchar *iuri, *ipath, *ibname;
-	GFile *iloc;
-	gchar *uri = NULL;
-	gchar *scheme = NULL;
-	gchar *dirname = NULL;
-	gchar *filename = NULL;
-	gchar *hostname = NULL;
-	gchar *username = NULL;
-	gint port_number = 0;
-	GString *basename_list, *pathname_list, *uris_list;
-	gchar *tmp, *iter, *old_iter;
-	NAGnomeVFSURI *vfs;
-
-	g_return_val_if_fail( NA_IS_OBJECT_PROFILE( profile ), NULL );
-
-	if( profile->private->dispose_has_run ){
-		return( NULL );
-	}
-
-	string = g_string_new( "" );
-	basename_list = g_string_new( "" );
-	pathname_list = g_string_new( "" );
-	uris_list = g_string_new( "" );
-	first = TRUE;
-
-	for( ifi = files ; ifi ; ifi = ifi->next ){
-
-		iuri = nautilus_file_info_get_uri(( NautilusFileInfo * ) ifi->data );
-		iloc = nautilus_file_info_get_location(( NautilusFileInfo * ) ifi->data );
-		ipath = g_file_get_path( iloc );
-		ibname = g_file_get_basename( iloc );
-
-		if( first ){
-
-			vfs = g_new0( NAGnomeVFSURI, 1 );
-			na_gnome_vfs_uri_parse( vfs, iuri );
-
-			uri = g_strdup( iuri );
-			dirname = g_path_get_dirname( ipath );
-			scheme = nautilus_file_info_get_uri_scheme(( NautilusFileInfo * ) ifi->data );
-			filename = g_strdup( ibname );
-			hostname = g_strdup( vfs->host_name );
-			username = g_strdup( vfs->user_name );
-			port_number = vfs->host_port;
-
-			first = FALSE;
-			na_gnome_vfs_uri_free( vfs );
-		}
-
-		tmp = g_shell_quote( ibname );
-		g_string_append_printf( basename_list, " %s", tmp );
-		g_free( tmp );
-
-		tmp = g_shell_quote( ipath );
-		g_string_append_printf( pathname_list, " %s", tmp );
-		g_free( tmp );
-
-		tmp = g_shell_quote( iuri );
-		g_string_append_printf( uris_list, " %s", tmp );
-		g_free( tmp );
-
-		g_free( ibname );
-		g_free( ipath );
-		g_object_unref( iloc );
-		g_free( iuri );
-	}
-
-	iter = g_strdup( profile->private->parameters );
-	old_iter = iter;
-
-	while(( iter = g_strstr_len( iter, strlen( iter ), "%" ))){
-
-		string = g_string_append_len( string, old_iter, strlen( old_iter ) - strlen( iter ));
-		switch( iter[1] ){
-
-			/* base dir of the (first) selected item
-			 */
-			case 'd':
-				tmp = g_shell_quote( dirname );
-				string = g_string_append( string, tmp );
-				g_free( tmp );
-				break;
-
-			/* basename of the (first) selected item
-			 */
-			case 'f':
-				tmp = g_shell_quote( filename );
-				string = g_string_append( string, tmp );
-				g_free( tmp );
-				break;
-
-			/* hostname of the (first) URI
-			 */
-			case 'h':
-				string = g_string_append( string, hostname );
-				break;
-
-			/* space-separated list of the basenames
-			 */
-			case 'm':
-				string = g_string_append( string, basename_list->str );
-				break;
-
-			/* space-separated list of full pathnames
-			 */
-			case 'M':
-				string = g_string_append( string, pathname_list->str );
-				break;
-
-			/* port number of the (first) URI
-			 */
-			case 'p':
-				if( port_number > 0 ){
-					g_string_append_printf( string, "%d", port_number );
-				}
-				break;
-
-			/* list of URIs
-			 */
-			case 'R':
-				string = g_string_append( string, uris_list->str );
-				break;
-
-			/* scheme of the (first) URI
-			 */
-			case 's':
-				string = g_string_append( string, scheme );
-				break;
-
-			/* URI of the first item
-			 */
-			case 'u':
-				string = g_string_append( string, uri );
-				break;
-
-			/* username of the (first) URI
-			 */
-			case 'U':
-				string = g_string_append( string, username );
-				break;
-
-			/* a percent sign
-			 */
-			case '%':
-				string = g_string_append_c( string, '%' );
-				break;
-		}
-
-		iter += 2;			/* skip the % sign and the character after */
-		old_iter = iter;	/* store the new start of the string */
-	}
-
-	string = g_string_append_len( string, old_iter, strlen( old_iter ));
-
-	g_free( uri );
-	g_free( dirname );
-	g_free( scheme );
-	g_free( hostname );
-	g_free( username );
-	g_free( iter );
-	g_string_free( uris_list, TRUE );
-	g_string_free( basename_list, TRUE );
-	g_string_free( pathname_list, TRUE );
-
-	parsed = g_string_free( string, FALSE );
-	return( parsed );
-}
-
-static int
-validate_schemes( GSList* schemes2test, NautilusFileInfo* file )
-{
-	int retv = 0;
-	GSList* iter;
-	gboolean found = FALSE;
-	gchar *scheme;
-
-	iter = schemes2test;
-	while (iter && !found)
-	{
-		scheme = nautilus_file_info_get_uri_scheme (file);
-
-		if (g_ascii_strncasecmp (scheme, (gchar*)iter->data, strlen ((gchar*)iter->data)) == 0)
-		{
-			found = TRUE;
-			retv = 1;
-		}
-
-		g_free (scheme);
-		iter = iter->next;
-	}
-
-	return retv;
-}
-
-static void
-object_dump( const NAObject *object )
-{
-	static const gchar *thisfn = "na_object_profile_object_dump";
-	NAObjectProfile *self;
-
-	g_return_if_fail( NA_IS_OBJECT_PROFILE( object ));
-	self = NA_OBJECT_PROFILE( object );
-
-	if( !self->private->dispose_has_run ){
-
-		g_debug( "%s:          action=%p", thisfn, ( void * ) self->private->action );
-		g_debug( "%s:            path='%s'", thisfn, self->private->path );
-		g_debug( "%s:      parameters='%s'", thisfn, self->private->parameters );
-		g_debug( "%s: accept_multiple='%s'", thisfn, self->private->accept_multiple ? "True" : "False" );
-		g_debug( "%s:          is_dir='%s'", thisfn, self->private->is_dir ? "True" : "False" );
-		g_debug( "%s:         is_file='%s'", thisfn, self->private->is_file ? "True" : "False" );
-		g_debug( "%s:      match_case='%s'", thisfn, self->private->match_case ? "True" : "False" );
-		object_dump_list( thisfn, "basenames", self->private->basenames );
-		object_dump_list( thisfn, "mimetypes", self->private->mimetypes );
-		object_dump_list( thisfn, "  schemes", self->private->schemes );
-	}
-}
-
-static void
-object_dump_list( const gchar *thisfn, const gchar *label, GSList *list )
-{
-	gchar *string = na_utils_gslist_to_schema( list );
-	g_debug( "%s:       %s=%s", thisfn, label, string );
-	g_free( string );
-}
-
-static gchar *
-object_get_clipboard_id( const NAObject *profile )
-{
-	gchar *uuid;
-	gchar *name;
-	gchar *clipboard_id = NULL;
-
-	g_return_val_if_fail( NA_IS_OBJECT_PROFILE( profile ), NULL );
-
-	if( !NA_OBJECT_PROFILE( profile )->private->dispose_has_run ){
-
-		uuid = na_object_get_id( NA_OBJECT_PROFILE( profile )->private->action );
-		name = na_object_get_id( profile );
-		clipboard_id = g_strdup_printf( "P:%s/%s", uuid, name );
-		g_free( uuid );
-		g_free( name );
-	}
-
-	return( clipboard_id );
-}
-
-static NAObject *
-object_new( const NAObject *profile )
-{
-	return( NA_OBJECT( na_object_profile_new()));
-}
-
-static void
-object_copy( NAObject *target, const NAObject *source )
-{
-	gchar *path, *parameters;
-	gboolean matchcase, isfile, isdir, multiple;
-	GSList *basenames, *mimetypes, *schemes;
-
-	g_return_if_fail( NA_IS_OBJECT_PROFILE( target ));
-	g_return_if_fail( NA_IS_OBJECT_PROFILE( source ));
-
-	if( !NA_OBJECT_PROFILE( target )->private->dispose_has_run &&
-		!NA_OBJECT_PROFILE( source )->private->dispose_has_run ){
-
-		g_object_get( G_OBJECT( source ),
-				NAPROFILE_PROP_PATH, &path,
-				NAPROFILE_PROP_PARAMETERS, &parameters,
-				NAPROFILE_PROP_BASENAMES, &basenames,
-				NAPROFILE_PROP_MATCHCASE, &matchcase,
-				NAPROFILE_PROP_MIMETYPES, &mimetypes,
-				NAPROFILE_PROP_ISFILE, &isfile,
-				NAPROFILE_PROP_ISDIR, &isdir,
-				NAPROFILE_PROP_ACCEPT_MULTIPLE, &multiple,
-				NAPROFILE_PROP_SCHEMES, &schemes,
-				NULL );
-
-		g_object_set( G_OBJECT( target ),
-				NAPROFILE_PROP_PATH, path,
-				NAPROFILE_PROP_PARAMETERS, parameters,
-				NAPROFILE_PROP_BASENAMES, basenames,
-				NAPROFILE_PROP_MATCHCASE, matchcase,
-				NAPROFILE_PROP_MIMETYPES, mimetypes,
-				NAPROFILE_PROP_ISFILE, isfile,
-				NAPROFILE_PROP_ISDIR, isdir,
-				NAPROFILE_PROP_ACCEPT_MULTIPLE, multiple,
-				NAPROFILE_PROP_SCHEMES, schemes,
-				NULL );
-
-		g_free( path );
-		g_free( parameters );
-		na_utils_free_string_list( basenames );
-		na_utils_free_string_list( mimetypes );
-		na_utils_free_string_list( schemes );
-	}
-}
-
-gboolean
-object_are_equal( const NAObject *a, const NAObject *b )
-{
-	NAObjectProfile *first = NA_OBJECT_PROFILE( a );
-	NAObjectProfile *second = NA_OBJECT_PROFILE( b );
-	gboolean equal = TRUE;
-
-	g_return_val_if_fail( NA_IS_OBJECT_PROFILE( a ), FALSE );
-	g_return_val_if_fail( NA_IS_OBJECT_PROFILE( b ), FALSE );
-
-	if( !NA_OBJECT_PROFILE( a )->private->dispose_has_run &&
-		!NA_OBJECT_PROFILE( b )->private->dispose_has_run ){
-
-		if( equal ){
-			equal =
-				( g_utf8_collate( first->private->path, second->private->path ) == 0 ) &&
-				( g_utf8_collate( first->private->parameters, second->private->parameters ) == 0 );
-		}
-
-		if( equal ){
-			equal = (( first->private->accept_multiple && second->private->accept_multiple ) ||
-					( !first->private->accept_multiple && !second->private->accept_multiple ));
-		}
-
-		if( equal ){
-			equal = (( first->private->is_dir && second->private->is_dir ) ||
-					( !first->private->is_dir && !second->private->is_dir ));
-		}
-
-		if( equal ){
-			equal = (( first->private->is_file && second->private->is_file ) ||
-					( !first->private->is_file && !second->private->is_file ));
-		}
-
-		if( equal ){
-			equal = na_utils_string_lists_are_equal( first->private->basenames, second->private->basenames ) &&
-					na_utils_string_lists_are_equal( first->private->mimetypes, second->private->mimetypes ) &&
-					na_utils_string_lists_are_equal( first->private->schemes, second->private->schemes );
-		}
-
-#if NA_IDUPLICABLE_EDITION_STATUS_DEBUG
-		g_debug( "na_object_profile_object_are_equal: a=%p (%s), b=%p (%s), are_equal=%s",
-				( void * ) a, G_OBJECT_TYPE_NAME( a ),
-				( void * ) b, G_OBJECT_TYPE_NAME( b ),
-				equal ? "True":"False" );
-#endif
-	}
-
-	return( equal );
-}
-
-/*
- * a valid NAObjectProfile requires a not null, not empty label
- * this is checked here as NAObject doesn't have this condition
- */
-gboolean
-object_is_valid( const NAObject *profile )
-{
-	gchar *label;
-	gboolean is_valid = TRUE;
-
-	g_return_val_if_fail( NA_IS_OBJECT_PROFILE( profile ), FALSE );
-
-	if( !NA_OBJECT_PROFILE( profile )->private->dispose_has_run ){
-
-		if( is_valid ){
-			label = na_object_get_label( profile );
-			is_valid = ( label && g_utf8_strlen( label, -1 ) > 0 );
-			g_free( label );
-		}
-	}
-
-	return( is_valid );
-}
diff --git a/src/common/na-object.c b/src/common/na-object.c
index d06f825..520fb53 100644
--- a/src/common/na-object.c
+++ b/src/common/na-object.c
@@ -34,210 +34,13 @@
 
 #include <string.h>
 
-#include "na-object-api.h"
-#include "na-object-class.h"
-#include "na-object-fn.h"
-#include "na-iduplicable.h"
-
-/* private class data
- */
-struct NAObjectClassPrivate {
-	void *empty;						/* so that gcc -pedantic is happy */
-};
-
-/* private instance data
- */
-struct NAObjectPrivate {
-	gboolean dispose_has_run;
-};
+#include <runtime/na-object-api.h>
+#include <runtime/na-object-priv.h>
 
-static GObjectClass *st_parent_class = NULL;
-
-static GType          register_type( void );
-static void           class_init( NAObjectClass *klass );
-static void           iduplicable_iface_init( NAIDuplicableInterface *iface );
-static void           instance_init( GTypeInstance *instance, gpointer klass );
-static void           instance_constructed( GObject *object );
-static void           instance_dispose( GObject *object );
-static void           instance_finalize( GObject *object );
-
-static NAIDuplicable *iduplicable_new( const NAIDuplicable *object );
-static void           iduplicable_copy( NAIDuplicable *target, const NAIDuplicable *source );
-static gboolean       iduplicable_are_equal( const NAIDuplicable *a, const NAIDuplicable *b );
-static gboolean       iduplicable_is_valid( const NAIDuplicable *object );
+#include "na-object-api.h"
 
 static GList         *v_get_childs( const NAObject *object );
 
-static gboolean       are_equal_hierarchy( const NAObject *a, const NAObject *b );
-static void           copy_hierarchy( NAObject *target, const NAObject *source );
-static gboolean       do_are_equal( const NAObject *a, const NAObject *b );
-static void           do_copy( NAObject *target, const NAObject *source );
-static void           do_dump( const NAObject *object );
-static gboolean       do_is_valid( const NAObject *object );
-static void           dump_hierarchy( const NAObject *object );
-static void           dump_tree( GList *tree, gint level );
-static gboolean       is_valid_hierarchy( const NAObject *object );
-static gchar         *most_derived_clipboard_id( const NAObject *object );
-static GList         *most_derived_get_childs( const NAObject *object );
-static NAObject      *most_derived_new( const NAObject *object );
-static void           ref_hierarchy( const NAObject *object );
-
-GType
-na_object_get_type( void )
-{
-	static GType object_type = 0;
-
-	if( !object_type ){
-		object_type = register_type();
-	}
-
-	return( object_type );
-}
-
-static GType
-register_type( void )
-{
-	static const gchar *thisfn = "na_object_register_type";
-	GType type;
-
-	static GTypeInfo info = {
-		sizeof( NAObjectClass ),
-		( GBaseInitFunc ) NULL,
-		( GBaseFinalizeFunc ) NULL,
-		( GClassInitFunc ) class_init,
-		NULL,
-		NULL,
-		sizeof( NAObject ),
-		0,
-		( GInstanceInitFunc ) instance_init
-	};
-
-	static const GInterfaceInfo iduplicable_iface_info = {
-		( GInterfaceInitFunc ) iduplicable_iface_init,
-		NULL,
-		NULL
-	};
-
-	g_debug( "%s", thisfn );
-
-	type = g_type_register_static( G_TYPE_OBJECT, "NAObject", &info, 0 );
-
-	g_type_add_interface_static( type, NA_IDUPLICABLE_TYPE, &iduplicable_iface_info );
-
-	return( type );
-}
-
-static void
-class_init( NAObjectClass *klass )
-{
-	static const gchar *thisfn = "na_object_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->constructed = instance_constructed;
-	object_class->dispose = instance_dispose;
-	object_class->finalize = instance_finalize;
-
-	klass->private = g_new0( NAObjectClassPrivate, 1 );
-
-	klass->dump = do_dump;
-	klass->get_clipboard_id = NULL;
-	klass->ref = NULL;
-	klass->new = NULL;
-	klass->copy = do_copy;
-	klass->are_equal = do_are_equal;
-	klass->is_valid = do_is_valid;
-	klass->get_childs = NULL;
-}
-
-static void
-iduplicable_iface_init( NAIDuplicableInterface *iface )
-{
-	static const gchar *thisfn = "na_object_iduplicable_iface_init";
-
-	g_debug( "%s: iface=%p", thisfn, ( void * ) iface );
-
-	iface->new = iduplicable_new;
-	iface->copy = iduplicable_copy;
-	iface->are_equal = iduplicable_are_equal;
-	iface->is_valid = iduplicable_is_valid;
-}
-
-static void
-instance_init( GTypeInstance *instance, gpointer klass )
-{
-	static const gchar *thisfn = "na_object_instance_init";
-	NAObject *self;
-
-	g_debug( "%s: instance=%p (%s), klass=%p",
-			thisfn, ( void * ) instance, G_OBJECT_CLASS_NAME( klass ), ( void * ) klass );
-	g_return_if_fail( NA_IS_OBJECT( instance ));
-	self = NA_OBJECT( instance );
-
-	self->private = g_new0( NAObjectPrivate, 1 );
-
-	self->private->dispose_has_run = FALSE;
-}
-
-static void
-instance_constructed( GObject *object )
-{
-	/*static const gchar *thisfn = "na_object_instance_constructed";*/
-
-	/*g_debug( "%s: object=%p", thisfn, ( void * ) object );*/
-	g_return_if_fail( NA_IS_OBJECT( object ));
-
-	na_iduplicable_init( NA_IDUPLICABLE( object ));
-
-	/* chain call to parent class */
-	if( G_OBJECT_CLASS( st_parent_class )->constructed ){
-		G_OBJECT_CLASS( st_parent_class )->constructed( object );
-	}
-}
-
-static void
-instance_dispose( GObject *object )
-{
-	static const gchar *thisfn = "na_object_instance_dispose";
-	NAObject *self;
-
-	g_debug( "%s: object=%p (%s)", thisfn, ( void * ) object, G_OBJECT_TYPE_NAME( object ));
-	g_return_if_fail( NA_IS_OBJECT( object ));
-	self = NA_OBJECT( object );
-
-	if( !self->private->dispose_has_run ){
-
-		na_iduplicable_dispose( NA_IDUPLICABLE( object ));
-
-		self->private->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 *object )
-{
-	NAObject *self;
-
-	g_return_if_fail( NA_IS_OBJECT( object ));
-	self = NA_OBJECT( object );
-
-	g_free( self->private );
-
-	/* chain call to parent class */
-	if( G_OBJECT_CLASS( st_parent_class )->finalize ){
-		G_OBJECT_CLASS( st_parent_class )->finalize( object );
-	}
-}
-
 /**
  * na_object_iduplicable_check_edition_status:
  * @object: the #NAObject object to be checked.
@@ -280,84 +83,6 @@ na_object_iduplicable_check_edition_status( const NAObject *object )
 }
 
 /**
- * na_object_iduplicable_duplicate:
- * @object: the #NAObject object to be dumped.
- *
- * Exactly duplicates a #NAObject-derived object.
- *
- * Returns: the new #NAObject.
- *
- *   na_object_duplicate( origin )
- *   +- na_object_iduplicable_duplicate( origin )
- *      +- na_iduplicable_duplicate( origin )
- *         +- dup = v_new( object )
- *         |  +- interface->new( object)
- *         |     +- iduplicable_new( object )
- *         |        +- most_derived_new( object )
- *         |           +- object_new( ... ) from a derived class
- *         +- v_copy( dup, origin )
- *         |  +- interface->copy( dup, origin )
- *         |     +- iduplicable_copy( target, source )
- *         |        +- copy_hierarchy( target, source )
- *         |           +- object_copy( ... ) from each successive derived class
- *         +- set_origin( dup, origin )
- *         +- set_modified( dup, FALSE )
- *         +- set_valid( dup, FALSE )
- *
- * Though the interface api is not recursive per se, the implementation
- * is ; i.e. duplicating a #NAObjectItem also duplicates the whole tree
- * inside.
- */
-NAObject *
-na_object_iduplicable_duplicate( const NAObject *object )
-{
-	NAIDuplicable *duplicate = NULL;
-
-	g_return_val_if_fail( NA_IS_OBJECT( object ), NULL );
-	g_return_val_if_fail( NA_IS_IDUPLICABLE( object ), NULL );
-
-	if( !object->private->dispose_has_run ){
-
-		duplicate = na_iduplicable_duplicate( NA_IDUPLICABLE( object ));
-
-		/*g_debug( "na_object_iduplicable_duplicate: object=%p (%s), duplicate=%p (%s)",
-				( void * ) object, G_OBJECT_TYPE_NAME( object ),
-				( void * ) duplicate, duplicate ? G_OBJECT_TYPE_NAME( duplicate ) : "" );*/
-	}
-
-	/* do not use NA_OBJECT macro as we may return a (valid) NULL value */
-	return(( NAObject * ) duplicate );
-}
-
-/**
- * na_object_iduplicable_are_equal:
- * @a: a first #NAObject object.
- * @b: a second #NAObject object to be compared to the first one.
- *
- * Compares the two #NAObject objects.
- *
- * At least when it finds that @a and @b are equal, each derived
- * class should call its parent class to give it an opportunity to
- * detect a difference.
- *
- * Returns: %TRUE if @a and @b are identical, %FALSE else.
- */
-gboolean
-na_object_iduplicable_are_equal( const NAObject *a, const NAObject *b )
-{
-	gboolean are_equal = FALSE;
-
-	g_return_val_if_fail( NA_IS_OBJECT( a ), FALSE );
-	g_return_val_if_fail( NA_IS_OBJECT( b ), FALSE );
-
-	if( !a->private->dispose_has_run && !b->private->dispose_has_run ){
-		are_equal = are_equal_hierarchy( a, b );
-	}
-
-	return( are_equal );
-}
-
-/**
  * na_object_iduplicable_is_valid:
  * @object: the #NAObject object whose validity is to be checked.
  *
@@ -433,106 +158,6 @@ na_object_iduplicable_set_origin( NAObject *object, const NAObject *origin )
 }
 
 /**
- * na_object_object_dump:
- * @object: the #NAObject-derived object to be dumped.
- *
- * Dumps via g_debug the actual content of the object.
- *
- * The recursivity is dealt with here. If we let #NAObjectItem do this,
- * the dump of #NAObjectItem-derived object will be splitted, childs
- * being inserted inside.
- */
-void
-na_object_object_dump( const NAObject *object )
-{
-	GList *childs, *ic;
-
-	g_return_if_fail( NA_IS_OBJECT( object ));
-
-	if( !object->private->dispose_has_run ){
-
-		na_object_object_dump_norec( object );
-
-		childs = v_get_childs( object );
-		for( ic = childs ; ic ; ic = ic->next ){
-			na_object_object_dump( NA_OBJECT( ic->data ));
-		}
-	}
-}
-
-/**
- * na_object_object_dump_norec:
- * @object: the #NAObject-derived object to be dumped.
- *
- * Dumps via g_debug the actual content of the object.
- *
- * This function is not recursive.
- */
-void
-na_object_object_dump_norec( const NAObject *object )
-{
-	g_return_if_fail( NA_IS_OBJECT( object ));
-
-	if( !object->private->dispose_has_run ){
-		dump_hierarchy( object );
-	}
-}
-
-/**
- * na_object_object_dump_tree:
- * @tree: a hierarchical list of #NAObject-derived objects.
- *
- * Outputs a brief, hierarchical dump of the provided list.
- */
-void
-na_object_object_dump_tree( GList *tree )
-{
-	dump_tree( tree, 0 );
-}
-
-/**
- * na_object_object_get_clipboard_id:
- * @object: the #NAObject-derived object for which we will get a id.
- *
- * Returns: a newly allocated string which contains an id for the
- * #NAobject. This id is suitable for the internal clipboard.
- *
- * The returned string should be g_free() by the caller.
- */
-gchar *
-na_object_object_get_clipboard_id( const NAObject *object )
-{
-	gchar *id = NULL;
-
-	g_return_val_if_fail( NA_IS_OBJECT( object ), NULL );
-
-	if( !object->private->dispose_has_run ){
-		id = most_derived_clipboard_id( object );
-	}
-
-	return( id );
-}
-
-/**
- * na_object_object_ref:
- * @object: the #NAObject-derived object to be reffed.
- *
- * Returns: a ref on the #NAobject.
- *
- * If the object has childs, then it should also have reffed them.
- */
-NAObject *
-na_object_object_ref( const NAObject *object )
-{
-	g_return_val_if_fail( NA_IS_OBJECT( object ), NULL );
-	g_return_val_if_fail( !object->private->dispose_has_run, NULL );
-
-	ref_hierarchy( object );
-
-	return( g_object_ref(( gpointer ) object ));
-}
-
-/**
  * na_object_object_reset_origin:
  * @object: a #NAObject-derived object.
  * @origin: must be a duplication of @object.
@@ -572,333 +197,8 @@ na_object_object_reset_origin( NAObject *object, const NAObject *origin )
 	}
 }
 
-/**
- * na_object_get_hierarchy:
- *
- * Returns the class hierarchy,
- * from the topmost base class, to the most-derived one.
- */
-GList *
-na_object_get_hierarchy( const NAObject *object )
-{
-	GList *hierarchy = NULL;
-	GObjectClass *class;
-
-	g_return_val_if_fail( NA_IS_OBJECT( object ), NULL );
-
-	if( !object->private->dispose_has_run ){
-
-		class = G_OBJECT_GET_CLASS( object );
-
-		while( G_OBJECT_CLASS_TYPE( class ) != NA_OBJECT_TYPE ){
-			hierarchy = g_list_prepend( hierarchy, class );
-			class = g_type_class_peek_parent( class );
-		}
-
-		hierarchy = g_list_prepend( hierarchy, class );
-	}
-
-	return( hierarchy );
-}
-
-/**
- * na_object_free_hierarchy:
- */
-void
-na_object_free_hierarchy( GList *hierarchy )
-{
-	g_list_free( hierarchy );
-}
-
-static NAIDuplicable *
-iduplicable_new( const NAIDuplicable *object )
-{
-	NAIDuplicable *new_object = NULL;
-
-	g_return_val_if_fail( NA_IS_OBJECT( object ), NULL );
-
-	if( !NA_OBJECT( object )->private->dispose_has_run ){
-		/* do not use NA_IDUPLICABLE macro as we may return a (valid) NULL value */
-		new_object = ( NAIDuplicable * ) most_derived_new( NA_OBJECT( object ));
-	}
-
-	return( new_object );
-}
-
-static void
-iduplicable_copy( NAIDuplicable *target, const NAIDuplicable *source )
-{
-	g_return_if_fail( NA_IS_OBJECT( target ));
-	g_return_if_fail( NA_IS_OBJECT( source ));
-
-	if( !NA_OBJECT( source )->private->dispose_has_run &&
-		!NA_OBJECT( target )->private->dispose_has_run ){
-
-			copy_hierarchy( NA_OBJECT( target ), NA_OBJECT( source ));
-	}
-}
-
-static gboolean
-iduplicable_are_equal( const NAIDuplicable *a, const NAIDuplicable *b )
-{
-	gboolean are_equal = FALSE;
-
-	g_return_val_if_fail( NA_IS_OBJECT( a ), FALSE );
-	g_return_val_if_fail( NA_IS_OBJECT( b ), FALSE );
-
-	if( !NA_OBJECT( a )->private->dispose_has_run &&
-		!NA_OBJECT( b )->private->dispose_has_run ){
-
-		are_equal = are_equal_hierarchy( NA_OBJECT( a ), NA_OBJECT( b ));
-	}
-
-	return( are_equal );
-}
-
-static gboolean
-iduplicable_is_valid( const NAIDuplicable *object )
-{
-	gboolean is_valid = FALSE;
-
-	if( !NA_OBJECT( object )->private->dispose_has_run ){
-		is_valid = is_valid_hierarchy( NA_OBJECT( object ));
-	}
-
-	return( is_valid );
-}
-
 static GList *
 v_get_childs( const NAObject *object ){
 
-	return( most_derived_get_childs( object ));
-}
-
-static gboolean
-are_equal_hierarchy( const NAObject *a, const NAObject *b )
-{
-	gboolean are_equal;
-	GList *hierarchy, *ih;
-
-	are_equal = TRUE;
-	hierarchy = na_object_get_hierarchy( b );
-
-	for( ih = hierarchy ; ih && are_equal ; ih = ih->next ){
-		if( NA_OBJECT_CLASS( ih->data )->are_equal ){
-			are_equal = NA_OBJECT_CLASS( ih->data )->are_equal( a, b );
-		}
-	}
-
-	na_object_free_hierarchy( hierarchy );
-
-	return( are_equal );
-}
-
-static void
-copy_hierarchy( NAObject *target, const NAObject *source )
-{
-	GList *hierarchy, *ih;
-
-	hierarchy = na_object_get_hierarchy( source );
-
-	for( ih = hierarchy ; ih ; ih = ih->next ){
-		if( NA_OBJECT_CLASS( ih->data )->copy ){
-			NA_OBJECT_CLASS( ih->data )->copy( target, source );
-		}
-	}
-
-	na_object_free_hierarchy( hierarchy );
-}
-
-static gboolean
-do_are_equal( const NAObject *a, const NAObject *b )
-{
-	gboolean are_equal;
-
-	/* as there is no data in NAObject, they are considered here as
-	 * equal is both null or both not null
-	 */
-	are_equal = ( a && b ) || ( !a && !b );
-
-#if NA_IDUPLICABLE_EDITION_STATUS_DEBUG
-	g_debug( "na_object_do_are_equal: a=%p (%s), b=%p (%s), are_equal=%s",
-			( void * ) a, G_OBJECT_TYPE_NAME( a ),
-			( void * ) b, G_OBJECT_TYPE_NAME( b ),
-			are_equal ? "True":"False" );
-#endif
-
-	return( are_equal );
-}
-
-static void
-do_copy( NAObject *target, const NAObject *source )
-{
-	/* nothing to do here */
-}
-
-static void
-do_dump( const NAObject *object )
-{
-	static const char *thisfn = "na_object_do_dump";
-
-	g_debug( "%s: object=%p (%s)", thisfn, ( void * ) object, G_OBJECT_TYPE_NAME( object ));
-
-	na_iduplicable_dump( NA_IDUPLICABLE( object ));
-}
-
-static gboolean
-do_is_valid( const NAObject *object )
-{
-	/* as there is no data in NAObject, it is always valid */
-	return( object ? TRUE : FALSE );
-}
-
-static void
-dump_hierarchy( const NAObject *object )
-{
-	GList *hierarchy, *ih;
-
-	hierarchy = na_object_get_hierarchy( object );
-
-	for( ih = hierarchy ; ih ; ih = ih->next ){
-		if( NA_OBJECT_CLASS( ih->data )->dump ){
-			NA_OBJECT_CLASS( ih->data )->dump( object );
-		}
-	}
-
-	na_object_free_hierarchy( hierarchy );
-}
-
-static void
-dump_tree( GList *tree, gint level )
-{
-	GString *prefix;
-	gint i;
-	GList *subitems, *it;
-	gchar *id;
-	gchar *label;
-
-	prefix = g_string_new( "" );
-	for( i = 0 ; i < level ; ++i ){
-		g_string_append_printf( prefix, "  " );
-	}
-
-	for( it = tree ; it ; it = it->next ){
-		id = na_object_get_id( it->data );
-		label = na_object_get_label( it->data );
-		g_debug( "na_object_dump_tree: %s%p (%s) %s \"%s\"",
-				prefix->str, ( void * ) it->data, G_OBJECT_TYPE_NAME( it->data ), id, label );
-		g_free( id );
-		g_free( label );
-
-		if( NA_IS_OBJECT_ITEM( it->data )){
-			subitems = na_object_get_items( it->data );
-			dump_tree( subitems, level+1 );
-			na_object_free_items( subitems );
-		}
-	}
-
-	g_string_free( prefix, TRUE );
-}
-
-static gboolean
-is_valid_hierarchy( const NAObject *object )
-{
-	gboolean is_valid;
-	GList *hierarchy, *ih;
-
-	is_valid = TRUE;
-	hierarchy = na_object_get_hierarchy( object );
-
-	for( ih = hierarchy ; ih && is_valid ; ih = ih->next ){
-		if( NA_OBJECT_CLASS( ih->data )->is_valid ){
-			is_valid = NA_OBJECT_CLASS( ih->data )->is_valid( object );
-		}
-	}
-
-	na_object_free_hierarchy( hierarchy );
-
-	return( is_valid );
-}
-
-static gchar *
-most_derived_clipboard_id( const NAObject *object )
-{
-	gchar *clipboard_id;
-	GList *hierarchy, *ih;
-	gboolean found;
-
-	found = FALSE;
-	clipboard_id = NULL;
-	hierarchy = g_list_reverse( na_object_get_hierarchy( object ));
-
-	for( ih = hierarchy ; ih && !found ; ih = ih->next ){
-		if( NA_OBJECT_CLASS( ih->data )->get_clipboard_id ){
-			clipboard_id = NA_OBJECT_CLASS( ih->data )->get_clipboard_id( object );
-			found = TRUE;
-		}
-	}
-
-	na_object_free_hierarchy( hierarchy );
-
-	return( clipboard_id );
-}
-
-static GList *
-most_derived_get_childs( const NAObject *object )
-{
-	GList *childs;
-	GList *hierarchy, *ih;
-	gboolean found;
-
-	found = FALSE;
-	childs = NULL;
-	hierarchy = g_list_reverse( na_object_get_hierarchy( object ));
-
-	for( ih = hierarchy ; ih && !found ; ih = ih->next ){
-		if( NA_OBJECT_CLASS( ih->data )->get_childs ){
-			childs = NA_OBJECT_CLASS( ih->data )->get_childs( object );
-			found = TRUE;
-		}
-	}
-
-	return( childs );
-}
-
-static NAObject *
-most_derived_new( const NAObject *object )
-{
-	NAObject *new_object;
-	GList *hierarchy, *ih;
-	gboolean found;
-
-	found = FALSE;
-	new_object = NULL;
-	hierarchy = g_list_reverse( na_object_get_hierarchy( object ));
-
-	for( ih = hierarchy ; ih && !found ; ih = ih->next ){
-		if( NA_OBJECT_CLASS( ih->data )->new ){
-			new_object = NA_OBJECT_CLASS( ih->data )->new( object );
-			found = TRUE;
-		}
-	}
-
-	na_object_free_hierarchy( hierarchy );
-
-	return( new_object );
-}
-
-static void
-ref_hierarchy( const NAObject *object )
-{
-	GList *hierarchy, *ih;
-
-	hierarchy = na_object_get_hierarchy( object );
-
-	for( ih = hierarchy ; ih ; ih = ih->next ){
-		if( NA_OBJECT_CLASS( ih->data )->ref ){
-			NA_OBJECT_CLASS( ih->data )->ref( object );
-		}
-	}
-
-	na_object_free_hierarchy( hierarchy );
+	return( na_object_most_derived_get_childs( object ));
 }
diff --git a/src/common/na-utils.c b/src/common/na-utils.c
index cd6fe7f..cee94de 100644
--- a/src/common/na-utils.c
+++ b/src/common/na-utils.c
@@ -41,42 +41,6 @@
 static GSList *text_to_string_list( const gchar *text, const gchar *separator, const gchar *default_value );
 
 /**
- * na_utils_duplicate_string_list:
- * @list: the GSList to be duplicated.
- *
- * Returns: a #GSList of strings.
- *
- * The returned list should be na_utils_free_string_list() by the caller.
- */
-GSList *
-na_utils_duplicate_string_list( GSList *list )
-{
-	GSList *duplist = NULL;
-	GSList *it;
-	for( it = list ; it != NULL ; it = it->next ){
-		gchar *dupstr = g_strdup(( gchar * ) it->data );
-		duplist = g_slist_prepend( duplist, dupstr );
-	}
-	return( duplist );
-}
-
-/**
- * na_utils_free_string_list:
- * @list: the GSList to be freed.
- *
- * Frees a GSList of strings.
- */
-void
-na_utils_free_string_list( GSList *list )
-{
-	GSList *item;
-	for( item = list ; item != NULL ; item = item->next ){
-		g_free(( gchar * ) item->data );
-	}
-	g_slist_free( list );
-}
-
-/**
  * na_utils_remove_ascii_from_string_list:
  * @list: the GSList to be updated.
  * @text: string to remove.
@@ -308,24 +272,6 @@ na_utils_schema_to_boolean( const gchar *value, gboolean default_value )
 }
 
 /**
- * na_utils_path_extract_last_dir:
- * @path: a full path.
- *
- * Extracts the last part of a full path.
- *
- * Returns: a newly allocated string which should be g_free() by the caller.
- */
-gchar *
-na_utils_path_extract_last_dir( const gchar *path )
-{
-	gchar **split = g_strsplit( path, "/", -1 );
-	guint count = g_strv_length( split );
-	gchar *lastdir = g_strdup( split[count-1] );
-	g_strfreev( split );
-	return( lastdir );
-}
-
-/**
  * na_utils_gstring_joinv:
  * @start: a prefix to be written at the beginning of the output string.
  * @separator: a string to be used as separator.
diff --git a/src/common/na-utils.h b/src/common/na-utils.h
index 9b6afa3..2975915 100644
--- a/src/common/na-utils.h
+++ b/src/common/na-utils.h
@@ -28,11 +28,13 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_UTILS_H__
-#define __NA_UTILS_H__
+#ifndef __NA_COMMON_UTILS_H__
+#define __NA_COMMON_UTILS_H__
 
 #include <glib.h>
 
+#include <runtime/na-utils.h>
+
 G_BEGIN_DECLS
 
 /*
@@ -62,4 +64,4 @@ gboolean na_utils_exist_file( const gchar *uri );
 
 G_END_DECLS
 
-#endif /* __NA_UTILS_H__ */
+#endif /* __NA_COMMON_UTILS_H__ */
diff --git a/src/common/na-xml-names.h b/src/common/na-xml-names.h
index f2295c9..c758fcf 100644
--- a/src/common/na-xml-names.h
+++ b/src/common/na-xml-names.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_XML_NAMES_H__
-#define __NA_XML_NAMES_H__
+#ifndef __NA_COMMON_XML_NAMES_H__
+#define __NA_COMMON_XML_NAMES_H__
 
 #include <glib/gi18n.h>
 
@@ -175,4 +175,4 @@ enum {
 
 G_END_DECLS
 
-#endif /* __NA_XML_NAMES_H__ */
+#endif /* __NA_COMMON_XML_NAMES_H__ */
diff --git a/src/common/na-xml-writer.c b/src/common/na-xml-writer.c
index 1343241..b55bf4d 100644
--- a/src/common/na-xml-writer.c
+++ b/src/common/na-xml-writer.c
@@ -35,10 +35,9 @@
 #include <gio/gio.h>
 #include <libxml/tree.h>
 
-#include "na-object-api.h"
-#include "na-object-action.h"
-#include "na-object-profile.h"
-#include "na-gconf-provider-keys.h"
+#include <runtime/na-object-api.h>
+#include <runtime/na-gconf-provider-keys.h>
+
 #include "na-utils.h"
 #include "na-xml-names.h"
 #include "na-xml-writer.h"
diff --git a/src/common/na-xml-writer.h b/src/common/na-xml-writer.h
index 0e6aa63..2a47634 100644
--- a/src/common/na-xml-writer.h
+++ b/src/common/na-xml-writer.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_XML_WRITER_H__
-#define __NA_XML_WRITER_H__
+#ifndef __NA_COMMON_XML_WRITER_H__
+#define __NA_COMMON_XML_WRITER_H__
 
 /**
  * SECTION: na_xml_writer
@@ -42,7 +42,7 @@
  * nautilus-actions-new utility.
  */
 
-#include "na-object-action-class.h"
+#include <runtime/na-object-action-class.h>
 
 G_BEGIN_DECLS
 
@@ -78,4 +78,4 @@ void   na_xml_writer_output_xml( const gchar *xml, const gchar *filename );
 
 G_END_DECLS
 
-#endif /* __NA_XML_WRITER_H__ */
+#endif /* __NA_COMMON_XML_WRITER_H__ */
diff --git a/src/nact/Makefile.am b/src/nact/Makefile.am
index 8800c5f..f6809a6 100644
--- a/src/nact/Makefile.am
+++ b/src/nact/Makefile.am
@@ -93,7 +93,7 @@ nautilus_actions_config_tool_SOURCES = \
 
 nautilus_actions_config_tool_LDADD = \
 	$(top_builddir)/src/common/libna-common.la			\
-	$(top_builddir)/src/common/libna-runtime.la			\
+	$(top_builddir)/src/runtime/libna-runtime.la		\
 	$(NAUTILUS_ACTIONS_LIBS)							\
 	$(NULL)
 
diff --git a/src/nact/base-iprefs.c b/src/nact/base-iprefs.c
index 70deb6b..701ad91 100644
--- a/src/nact/base-iprefs.c
+++ b/src/nact/base-iprefs.c
@@ -33,8 +33,8 @@
 #include <config.h>
 #endif
 
-#include <common/na-gconf-keys-schemas.h>
-#include <common/na-gconf-utils.h>
+#include <runtime/na-gconf-utils.h>
+
 #include <common/na-iprefs.h>
 
 #include "base-iprefs.h"
@@ -45,8 +45,6 @@ struct BaseIPrefsInterfacePrivate {
 	GConfClient *client;
 };
 
-#define BASE_IPREFS_SCHEMAS_PATH		NAUTILUS_ACTIONS_GCONF_SCHEMASDIR NA_GCONF_PREFS_PATH
-
 static gboolean st_initialized = FALSE;
 static gboolean st_finalized = FALSE;
 
@@ -56,18 +54,10 @@ static void        interface_base_finalize( BaseIPrefsInterface *klass );
 
 static gchar      *v_iprefs_get_window_id( BaseWindow *window );
 
-static GConfValue *get_value( GConfClient *client, const gchar *path, const gchar *entry );
-static void        set_value( GConfClient *client, const gchar *path, const gchar *entry, GConfValue *value );
-static gboolean    remove_entry( GConfClient *client, const gchar *path, const gchar *entry );
-
-static gboolean    read_bool( BaseIPrefs *instance, const gchar *name );
 static gint        read_int( BaseWindow *window, const gchar *name );
 static GSList     *read_int_list( BaseWindow *window, const gchar *key );
-
-static void        write_bool( BaseIPrefs *instance, const gchar *name, gboolean value );
 static void        write_int( BaseWindow *window, const gchar *name, gint value );
 static void        write_int_list( BaseWindow *window, const gchar *key, GSList *list );
-
 static void        int_list_to_position( BaseWindow *window, GSList *list, gint *x, gint *y, gint *width, gint *height );
 static GSList     *position_to_int_list( BaseWindow *window, gint x, gint y, gint width, gint height );
 static void        free_int_list( GSList *list );
@@ -145,41 +135,6 @@ interface_base_finalize( BaseIPrefsInterface *klass )
 }
 
 /**
- * base_iprefs_migrate_key:
- * @window: this #BaseWindow-derived window.
- * @old_key: the old preference entry.
- * @new_key: the new preference entry.
- *
- * Migrates the content of an entry from an obsoleted key to a new one.
- * Removes the old key, along with the schema associated to it,
- * considering that the version which asks for this migration has
- * installed a schema corresponding to the new key.
- */
-void
-base_iprefs_migrate_key( BaseWindow *window, const gchar *old_key, const gchar *new_key )
-{
-	static const gchar *thisfn = "base_iprefs_migrate_key";
-	GConfValue *value;
-
-	g_debug( "%s: window=%p, old_key=%s, new_key=%s", thisfn, ( void * ) window, old_key, new_key );
-	g_return_if_fail( BASE_IS_WINDOW( window ));
-	g_return_if_fail( BASE_IS_IPREFS( window ));
-
-	if( st_initialized && !st_finalized ){
-
-		value = get_value( BASE_IPREFS_GET_INTERFACE( window )->private->client, NA_GCONF_PREFS_PATH, old_key );
-
-		if( value ){
-			set_value( BASE_IPREFS_GET_INTERFACE( window )->private->client, NA_GCONF_PREFS_PATH, new_key, value );
-			gconf_value_free( value );
-		}
-
-		remove_entry( BASE_IPREFS_GET_INTERFACE( window )->private->client, NA_GCONF_PREFS_PATH, old_key );
-		remove_entry( BASE_IPREFS_GET_INTERFACE( window )->private->client, BASE_IPREFS_SCHEMAS_PATH, old_key );
-	}
-}
-
-/**
  * base_iprefs_position_window:
  * @window: this #BaseWindow-derived window.
  *
@@ -315,45 +270,6 @@ base_iprefs_save_named_window_position( BaseWindow *window, GtkWindow *toplevel,
 }
 
 /**
- * base_iprefs_get_bool:
- * @istance: this #BaseIPrefs implementation.
- * @name: the entry to be readen.
- *
- * Returns: the named boolean.
- */
-gboolean
-base_iprefs_get_bool( BaseIPrefs *instance, const gchar *name )
-{
-	gboolean ret = FALSE;
-
-	g_return_val_if_fail( BASE_IS_IPREFS( instance ), FALSE );
-
-	if( st_initialized && !st_finalized ){
-		ret = read_bool( instance, name );
-	}
-
-	return( ret );
-}
-
-/**
- * base_iprefs_set_bool:
- * @istance: this #BaseIPrefs implementation.
- * @name: the entry to be readen.
- * @value: the value to be set.
- *
- * Writes the named boolean in GConf.
- */
-void
-base_iprefs_set_bool( BaseIPrefs *instance, const gchar *name, gboolean value )
-{
-	g_return_if_fail( BASE_IS_IPREFS( instance ));
-
-	if( st_initialized && !st_finalized ){
-		write_bool( instance, name, value );
-	}
-}
-
-/**
  * base_iprefs_get_int:
  * @window: this BaseWindow-derived window.
  * @name: the entry to be readen.
@@ -406,89 +322,6 @@ v_iprefs_get_window_id( BaseWindow *window )
 	return( NULL );
 }
 
-static GConfValue *
-get_value( GConfClient *client, const gchar *path, const gchar *entry )
-{
-	static const gchar *thisfn = "base_iprefs_get_value";
-	GError *error = NULL;
-	gchar *fullpath;
-	GConfValue *value;
-
-	fullpath = g_strdup_printf( "%s/%s", path, entry );
-
-	value = gconf_client_get_without_default( client, fullpath, &error );
-
-	if( error ){
-		g_warning( "%s: key=%s, %s", thisfn, fullpath, error->message );
-		g_error_free( error );
-		if( value ){
-			gconf_value_free( value );
-			value = NULL;
-		}
-	}
-
-	g_free( fullpath );
-
-	return( value );
-}
-
-static void
-set_value( GConfClient *client, const gchar *path, const gchar *entry, GConfValue *value )
-{
-	static const gchar *thisfn = "base_iprefs_set_value";
-	GError *error = NULL;
-	gchar *fullpath;
-
-	g_return_if_fail( value );
-
-	fullpath = g_strdup_printf( "%s/%s", path, entry );
-
-	gconf_client_set( client, fullpath, value, &error );
-
-	if( error ){
-		g_warning( "%s: key=%s, %s", thisfn, fullpath, error->message );
-		g_error_free( error );
-	}
-
-	g_free( fullpath );
-}
-
-static gboolean
-remove_entry( GConfClient *client, const gchar *path, const gchar *entry )
-{
-	static const gchar *thisfn = "base_iprefs_remove_entry";
-	GError *error = NULL;
-	gchar *fullpath;
-	gboolean ret;
-
-	fullpath = g_strdup_printf( "%s/%s", path, entry );
-
-	ret = gconf_client_unset( client, fullpath, &error );
-
-	if( error ){
-		g_warning( "%s: key=%s, %s", thisfn, fullpath, error->message );
-		g_error_free( error );
-	}
-
-	g_free( fullpath );
-
-	return( ret );
-}
-
-static gboolean
-read_bool( BaseIPrefs *instance, const gchar *name )
-{
-	gchar *path;
-	gint value;
-
-	path = g_strdup_printf( "%s/%s", NA_GCONF_PREFS_PATH, name );
-
-	value = na_gconf_utils_read_bool( BASE_IPREFS_GET_INTERFACE( instance )->private->client, path, TRUE, FALSE );
-
-	g_free( path );
-	return( value );
-}
-
 static gint
 read_int( BaseWindow *window, const gchar *name )
 {
@@ -497,7 +330,7 @@ read_int( BaseWindow *window, const gchar *name )
 	gchar *path;
 	gint value;
 
-	path = g_strdup_printf( "%s/%s", NA_GCONF_PREFS_PATH, name );
+	path = gconf_concat_dir_and_key( NA_GCONF_PREFS_PATH, name );
 
 	value = gconf_client_get_int( BASE_IPREFS_GET_INTERFACE( window )->private->client, path, &error );
 
@@ -521,7 +354,7 @@ read_int_list( BaseWindow *window, const gchar *key )
 	gchar *path;
 	GSList *list;
 
-	path = g_strdup_printf( "%s/%s", NA_GCONF_PREFS_PATH, key );
+	path = gconf_concat_dir_and_key( NA_GCONF_PREFS_PATH, key );
 
 	list = gconf_client_get_list(
 			BASE_IPREFS_GET_INTERFACE( window )->private->client, path, GCONF_VALUE_INT, &error );
@@ -537,25 +370,13 @@ read_int_list( BaseWindow *window, const gchar *key )
 }
 
 static void
-write_bool( BaseIPrefs *instance, const gchar *name, gboolean value )
-{
-	gchar *path;
-
-	path = g_strdup_printf( "%s/%s", NA_GCONF_PREFS_PATH, name );
-
-	na_gconf_utils_write_bool( BASE_IPREFS_GET_INTERFACE( instance )->private->client, path, value, NULL );
-
-	g_free( path );
-}
-
-static void
 write_int( BaseWindow *window, const gchar *name, gint value )
 {
 	static const gchar *thisfn = "base_iprefs_write_int";
 	GError *error = NULL;
 	gchar *path;
 
-	path = g_strdup_printf( "%s/%s", NA_GCONF_PREFS_PATH, name );
+	path = gconf_concat_dir_and_key( NA_GCONF_PREFS_PATH, name );
 
 	gconf_client_set_int( BASE_IPREFS_GET_INTERFACE( window )->private->client, path, value, &error );
 
diff --git a/src/nact/base-iprefs.h b/src/nact/base-iprefs.h
index 7d54f45..aea7cc3 100644
--- a/src/nact/base-iprefs.h
+++ b/src/nact/base-iprefs.h
@@ -36,10 +36,7 @@
  * @short_description: #BaseIPrefs interface definition.
  * @include: nact/base-iprefs.h
  *
- * This interface may be implemented by all dialogs which wish take
- * benefit of preferences management.
- *
- * As a side effect, it cooperates with #BaseWindow to automatically
+ * This interface cooperates with #BaseWindow to automatically
  * save, then restore, size and position of window on the display.
  * This is made possible by identifying each window by an id specific
  * to this function.
@@ -67,25 +64,17 @@ typedef struct {
 }
 	BaseIPrefsInterface;
 
-#define BASE_IPREFS_RELABEL_MENUS		"iprefs-relabel-menus"
-#define BASE_IPREFS_RELABEL_ACTIONS		"iprefs-relabel-actions"
-#define BASE_IPREFS_RELABEL_PROFILES	"iprefs-relabel-profiles"
-
-GType    base_iprefs_get_type( void );
-
-void     base_iprefs_migrate_key( BaseWindow *window, const gchar *old_key, const gchar *new_key );
+GType base_iprefs_get_type( void );
 
-void     base_iprefs_position_window( BaseWindow *window );
-void     base_iprefs_position_named_window( BaseWindow *window, GtkWindow *toplevel, const gchar *name );
+void  base_iprefs_position_window( BaseWindow *window );
+void  base_iprefs_position_named_window( BaseWindow *window, GtkWindow *toplevel, const gchar *name );
 
-void     base_iprefs_save_window_position( BaseWindow *window );
-void     base_iprefs_save_named_window_position( BaseWindow *window, GtkWindow *toplevel, const gchar *name );
+void  base_iprefs_save_window_position( BaseWindow *window );
+void  base_iprefs_save_named_window_position( BaseWindow *window, GtkWindow *toplevel, const gchar *name );
 
-gboolean base_iprefs_get_bool( BaseIPrefs *instance, const gchar *key );
-void     base_iprefs_set_bool( BaseIPrefs *instance, const gchar *key, gboolean value );
+gint  base_iprefs_get_int( BaseWindow *window, const gchar *name );
+void  base_iprefs_set_int( BaseWindow *window, const gchar *name, gint value );
 
-gint     base_iprefs_get_int( BaseWindow *window, const gchar *key );
-void     base_iprefs_set_int( BaseWindow *window, const gchar *key, gint value );
 
 G_END_DECLS
 
diff --git a/src/nact/nact-application.c b/src/nact/nact-application.c
index 1c1859f..bcc1984 100644
--- a/src/nact/nact-application.c
+++ b/src/nact/nact-application.c
@@ -35,9 +35,9 @@
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
 
-#include <common/na-iabout.h>
-#include <common/na-iduplicable.h>
-#include <common/na-ipivot-consumer.h>
+#include <runtime/na-iabout.h>
+#include <runtime/na-ipivot-consumer.h>
+#include <runtime/na-object-action-fn.h>
 
 #include "nact-application.h"
 #include "nact-main-window.h"
diff --git a/src/nact/nact-application.h b/src/nact/nact-application.h
index ef2c7d9..b509fea 100644
--- a/src/nact/nact-application.h
+++ b/src/nact/nact-application.h
@@ -39,7 +39,7 @@
  * This is the main class for nautilus-actions-config-tool program.
  */
 
-#include <common/na-pivot.h>
+#include <runtime/na-pivot.h>
 
 #include "base-application.h"
 
diff --git a/src/nact/nact-assistant-export.c b/src/nact/nact-assistant-export.c
index 7f49d2c..763f53c 100644
--- a/src/nact/nact-assistant-export.c
+++ b/src/nact/nact-assistant-export.c
@@ -36,9 +36,10 @@
 #include <gtk/gtk.h>
 #include <string.h>
 
+#include <runtime/na-object-api.h>
+#include <runtime/na-pivot.h>
+
 #include <common/na-iprefs.h>
-#include <common/na-object-api.h>
-#include <common/na-pivot.h>
 #include <common/na-utils.h>
 #include <common/na-xml-names.h>
 #include <common/na-xml-writer.h>
diff --git a/src/nact/nact-assistant-import.c b/src/nact/nact-assistant-import.c
index 0d1a73c..9c7d884 100644
--- a/src/nact/nact-assistant-import.c
+++ b/src/nact/nact-assistant-import.c
@@ -37,14 +37,13 @@
 #include <gtk/gtk.h>
 #include <string.h>
 
+#include <runtime/na-iio-provider.h>
+#include <runtime/na-pivot.h>
+
 #include <common/na-object-api.h>
-#include <common/na-object-action-class.h>
-#include <common/na-iio-provider.h>
 #include <common/na-iprefs.h>
-#include <common/na-pivot.h>
 #include <common/na-utils.h>
 
-#include "base-iprefs.h"
 #include "nact-application.h"
 #include "nact-iactions-list.h"
 #include "nact-assistant-import.h"
diff --git a/src/nact/nact-clipboard.c b/src/nact/nact-clipboard.c
index 2da9583..a46c76d 100644
--- a/src/nact/nact-clipboard.c
+++ b/src/nact/nact-clipboard.c
@@ -36,14 +36,10 @@
 #include <string.h>
 
 #include <common/na-object-api.h>
-#include <common/na-object-action-class.h>
-#include <common/na-object-menu.h>
-#include <common/na-object-profile.h>
 #include <common/na-xml-names.h>
 #include <common/na-xml-writer.h>
 #include <common/na-utils.h>
 
-#include "base-iprefs.h"
 #include "nact-tree-model.h"
 #include "nact-clipboard.h"
 
@@ -104,7 +100,6 @@ static GObjectClass *st_parent_class = NULL;
 
 static GType  register_type( void );
 static void   class_init( NactClipboardClass *klass );
-static void   iprefs_iface_init( BaseIPrefsInterface *iface );
 static void   instance_init( GTypeInstance *instance, gpointer klass );
 static void   instance_dispose( GObject *application );
 static void   instance_finalize( GObject *application );
@@ -148,18 +143,10 @@ register_type( void )
 		( GInstanceInitFunc ) instance_init
 	};
 
-	static const GInterfaceInfo iprefs_iface_info = {
-		( GInterfaceInitFunc ) iprefs_iface_init,
-		NULL,
-		NULL
-	};
-
 	g_debug( "%s", thisfn );
 
 	type = g_type_register_static( G_TYPE_OBJECT, "NactClipboard", &info, 0 );
 
-	g_type_add_interface_static( type, BASE_IPREFS_TYPE, &iprefs_iface_info );
-
 	return( type );
 }
 
@@ -181,14 +168,6 @@ class_init( NactClipboardClass *klass )
 }
 
 static void
-iprefs_iface_init( BaseIPrefsInterface *iface )
-{
-	static const gchar *thisfn = "nact_main_window_iprefs_iface_init";
-
-	g_debug( "%s: iface=%p", thisfn, ( void * ) iface );
-}
-
-static void
 instance_init( GTypeInstance *instance, gpointer klass )
 {
 	static const gchar *thisfn = "nact_clipboard_instance_init";
@@ -740,7 +719,7 @@ clear_primary_clipboard_callback( GtkClipboard *clipboard, NactClipboardPrimaryD
 static void
 renumber_items( NactClipboard *clipboard, GList *items )
 {
-	GList *it;
+	/*GList *it;
 	gboolean relabel_menus, relabel_actions, relabel_profiles;
 	gboolean relabel;
 
@@ -760,5 +739,5 @@ renumber_items( NactClipboard *clipboard, GList *items )
 		}
 
 		na_object_set_for_copy( it->data, relabel );
-	}
+	}*/
 }
diff --git a/src/nact/nact-iaction-tab.c b/src/nact/nact-iaction-tab.c
index c88b35d..936df13 100644
--- a/src/nact/nact-iaction-tab.c
+++ b/src/nact/nact-iaction-tab.c
@@ -36,7 +36,6 @@
 #include <string.h>
 
 #include <common/na-object-api.h>
-#include <common/na-object-action-class.h>
 
 #include "base-window.h"
 #include "nact-application.h"
diff --git a/src/nact/nact-iactions-list.c b/src/nact/nact-iactions-list.c
index 87e093e..3a3c820 100644
--- a/src/nact/nact-iactions-list.c
+++ b/src/nact/nact-iactions-list.c
@@ -35,11 +35,7 @@
 #include <gdk/gdkkeysyms.h>
 #include <string.h>
 
-#include <common/na-iduplicable.h>
 #include <common/na-object-api.h>
-#include <common/na-object-action.h>
-#include <common/na-object-menu.h>
-#include <common/na-object-profile.h>
 #include <common/na-iprefs.h>
 
 #include "nact-application.h"
diff --git a/src/nact/nact-iactions-list.h b/src/nact/nact-iactions-list.h
index da5e2cf..ffb68b9 100644
--- a/src/nact/nact-iactions-list.h
+++ b/src/nact/nact-iactions-list.h
@@ -42,7 +42,7 @@
 
 #include <gtk/gtk.h>
 
-#include <common/na-object-class.h>
+#include <runtime/na-object-class.h>
 
 G_BEGIN_DECLS
 
diff --git a/src/nact/nact-iadvanced-tab.c b/src/nact/nact-iadvanced-tab.c
index d095d28..40af342 100644
--- a/src/nact/nact-iadvanced-tab.c
+++ b/src/nact/nact-iadvanced-tab.c
@@ -36,8 +36,6 @@
 #include <string.h>
 
 #include <common/na-object-api.h>
-#include <common/na-object-action-class.h>
-#include <common/na-object-profile.h>
 #include <common/na-utils.h>
 
 #include "base-window.h"
diff --git a/src/nact/nact-icommand-tab.c b/src/nact/nact-icommand-tab.c
index 3db02c3..bd2609c 100644
--- a/src/nact/nact-icommand-tab.c
+++ b/src/nact/nact-icommand-tab.c
@@ -36,7 +36,6 @@
 #include <string.h>
 
 #include <common/na-object-api.h>
-#include <common/na-object-profile.h>
 #include <common/na-iprefs.h>
 #include <common/na-utils.h>
 
@@ -173,15 +172,20 @@ void
 nact_icommand_tab_initial_load_toplevel( NactICommandTab *instance )
 {
 	static const gchar *thisfn = "nact_icommand_tab_initial_load_toplevel";
+	NactApplication *application;
+	NAPivot *pivot;
 
 	g_debug( "%s: instance=%p", thisfn, ( void * ) instance );
 	g_return_if_fail( NACT_IS_ICOMMAND_TAB( instance ));
 
 	if( st_initialized && !st_finalized ){
 
-		base_iprefs_migrate_key( BASE_WINDOW( instance ), "iconditions-legend-dialog", IPREFS_LEGEND_DIALOG );
-		base_iprefs_migrate_key( BASE_WINDOW( instance ), "iconditions-command-chooser", IPREFS_COMMAND_CHOOSER );
-		base_iprefs_migrate_key( BASE_WINDOW( instance ), "iconditions-folder-uri", IPREFS_FOLDER_URI );
+		application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( instance )));
+		pivot = nact_application_get_pivot( application );
+
+		na_iprefs_migrate_key( NA_IPREFS( pivot ), "iconditions-legend-dialog", IPREFS_LEGEND_DIALOG );
+		na_iprefs_migrate_key( NA_IPREFS( pivot ), "iconditions-command-chooser", IPREFS_COMMAND_CHOOSER );
+		na_iprefs_migrate_key( NA_IPREFS( pivot ), "iconditions-folder-uri", IPREFS_FOLDER_URI );
 	}
 }
 
diff --git a/src/nact/nact-iconditions-tab.c b/src/nact/nact-iconditions-tab.c
index 9686f18..a85d015 100644
--- a/src/nact/nact-iconditions-tab.c
+++ b/src/nact/nact-iconditions-tab.c
@@ -36,8 +36,6 @@
 #include <string.h>
 
 #include <common/na-object-api.h>
-#include <common/na-object-action-class.h>
-#include <common/na-object-profile.h>
 #include <common/na-utils.h>
 
 #include "base-iprefs.h"
diff --git a/src/nact/nact-main-menubar.c b/src/nact/nact-main-menubar.c
index c715ef9..9144b9e 100644
--- a/src/nact/nact-main-menubar.c
+++ b/src/nact/nact-main-menubar.c
@@ -34,13 +34,12 @@
 
 #include <glib/gi18n.h>
 
+#include <runtime/na-iabout.h>
+#include <runtime/na-ipivot-consumer.h>
+
 #include <common/na-object-api.h>
-#include <common/na-object-action.h>
-#include <common/na-object-menu.h>
-#include <common/na-iabout.h>
-#include <common/na-ipivot-consumer.h>
+#include <common/na-iprefs.h>
 
-#include "base-iprefs.h"
 #include "nact-application.h"
 #include "nact-assistant-export.h"
 #include "nact-assistant-import.h"
@@ -584,6 +583,8 @@ on_paste_activated( GtkAction *gtk_action, NactMainWindow *window )
 static void
 on_duplicate_activated( GtkAction *gtk_action, NactMainWindow *window )
 {
+	NactApplication *application;
+	NAPivot *pivot;
 	GList *items, *it;
 	GList *dup;
 	NAObject *obj;
@@ -593,9 +594,12 @@ on_duplicate_activated( GtkAction *gtk_action, NactMainWindow *window )
 	g_return_if_fail( GTK_IS_ACTION( gtk_action ));
 	g_return_if_fail( NACT_IS_MAIN_WINDOW( window ));
 
-	relabel_menus = base_iprefs_get_bool( BASE_IPREFS( window ), BASE_IPREFS_RELABEL_MENUS );
-	relabel_actions = base_iprefs_get_bool( BASE_IPREFS( window ), BASE_IPREFS_RELABEL_ACTIONS );
-	relabel_profiles = base_iprefs_get_bool( BASE_IPREFS( window ), BASE_IPREFS_RELABEL_PROFILES );
+	application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( window )));
+	pivot = nact_application_get_pivot( application );
+
+	relabel_menus = na_iprefs_read_bool( NA_IPREFS( pivot ), IPREFS_RELABEL_MENUS, FALSE );
+	relabel_actions = na_iprefs_read_bool( NA_IPREFS( pivot ), IPREFS_RELABEL_ACTIONS, FALSE );
+	relabel_profiles = na_iprefs_read_bool( NA_IPREFS( pivot ), IPREFS_RELABEL_PROFILES, FALSE );
 
 	items = nact_iactions_list_get_selected_items( NACT_IACTIONS_LIST( window ));
 	for( it = items ; it ; it = it->next ){
diff --git a/src/nact/nact-main-window.c b/src/nact/nact-main-window.c
index 55db4d4..0539ce2 100644
--- a/src/nact/nact-main-window.c
+++ b/src/nact/nact-main-window.c
@@ -37,11 +37,12 @@
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
 
+#include <runtime/na-pivot.h>
+#include <runtime/na-iabout.h>
+#include <runtime/na-iio-provider.h>
+#include <runtime/na-ipivot-consumer.h>
+
 #include <common/na-object-api.h>
-#include <common/na-pivot.h>
-#include <common/na-iabout.h>
-#include <common/na-iio-provider.h>
-#include <common/na-ipivot-consumer.h>
 #include <common/na-iprefs.h>
 
 #include "base-iprefs.h"
@@ -778,17 +779,22 @@ nact_main_window_remove_deleted( NactMainWindow *window )
 void
 nact_main_window_prepare_object_for_copy( NactMainWindow *window, NAObject *object, NAObjectAction *new_parent )
 {
+	NactApplication *application;
+	NAPivot *pivot;
 	gboolean relabel = FALSE;
 
+	application = NACT_APPLICATION( base_window_get_application( BASE_WINDOW( window )));
+	pivot = nact_application_get_pivot( application );
+
 	if( NA_IS_OBJECT_MENU( object )){
-		relabel = base_iprefs_get_bool( BASE_IPREFS( window ), BASE_IPREFS_RELABEL_MENUS );
+		relabel = na_iprefs_read_bool( NA_IPREFS( pivot ), IPREFS_RELABEL_MENUS, FALSE );
 	} else if( NA_IS_OBJECT_ACTION( object )){
-		relabel = base_iprefs_get_bool( BASE_IPREFS( window ), BASE_IPREFS_RELABEL_ACTIONS );
+		relabel = na_iprefs_read_bool( NA_IPREFS( pivot ), IPREFS_RELABEL_ACTIONS, FALSE );
 	} else if( NA_IS_OBJECT_PROFILE( object )){
-		relabel = base_iprefs_get_bool( BASE_IPREFS( window ), BASE_IPREFS_RELABEL_PROFILES );
+		relabel = na_iprefs_read_bool( NA_IPREFS( pivot ), IPREFS_RELABEL_PROFILES, FALSE );
 	}
 
-	na_object_set_new_id( object );
+	na_object_set_new_id( object, NULL );
 }
 
 /*
diff --git a/src/nact/nact-main-window.h b/src/nact/nact-main-window.h
index bbadbc0..829013d 100644
--- a/src/nact/nact-main-window.h
+++ b/src/nact/nact-main-window.h
@@ -39,6 +39,8 @@
  * This class is derived from BaseWindow and manages the main window.
  */
 
+#include <runtime/na-object-action-class.h>
+
 #include "nact-clipboard.h"
 #include "nact-window.h"
 
diff --git a/src/nact/nact-preferences-editor.c b/src/nact/nact-preferences-editor.c
index 6f43bf3..0ae4c81 100644
--- a/src/nact/nact-preferences-editor.c
+++ b/src/nact/nact-preferences-editor.c
@@ -308,15 +308,15 @@ on_base_runtime_init_dialog( NactPreferencesEditor *editor, gpointer user_data )
 
 	/* second tab: ui preferences
 	 */
-	relabel = base_iprefs_get_bool( BASE_IPREFS( editor ), BASE_IPREFS_RELABEL_MENUS );
+	relabel = na_iprefs_read_bool( NA_IPREFS( pivot ), IPREFS_RELABEL_MENUS, FALSE );
 	button = base_window_get_widget( BASE_WINDOW( editor ), "RelabelMenuButton" );
 	gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( button ), relabel );
 
-	relabel = base_iprefs_get_bool( BASE_IPREFS( editor ), BASE_IPREFS_RELABEL_ACTIONS );
+	relabel = na_iprefs_read_bool( NA_IPREFS( pivot ), IPREFS_RELABEL_ACTIONS, FALSE );
 	button = base_window_get_widget( BASE_WINDOW( editor ), "RelabelActionButton" );
 	gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( button ), relabel );
 
-	relabel = base_iprefs_get_bool( BASE_IPREFS( editor ), BASE_IPREFS_RELABEL_PROFILES );
+	relabel = na_iprefs_read_bool( NA_IPREFS( pivot ), IPREFS_RELABEL_PROFILES, FALSE );
 	button = base_window_get_widget( BASE_WINDOW( editor ), "RelabelProfileButton" );
 	gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( button ), relabel );
 
@@ -420,15 +420,15 @@ save_preferences( NactPreferencesEditor *editor )
 	 */
 	button = base_window_get_widget( BASE_WINDOW( editor ), "RelabelMenuButton" );
 	relabel = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ));
-	base_iprefs_set_bool( BASE_IPREFS( editor ), BASE_IPREFS_RELABEL_MENUS, relabel );
+	na_iprefs_write_bool( NA_IPREFS( pivot ), IPREFS_RELABEL_MENUS, relabel );
 
 	button = base_window_get_widget( BASE_WINDOW( editor ), "RelabelActionButton" );
 	relabel = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ));
-	base_iprefs_set_bool( BASE_IPREFS( editor ), BASE_IPREFS_RELABEL_ACTIONS, relabel );
+	na_iprefs_write_bool( NA_IPREFS( pivot ), IPREFS_RELABEL_ACTIONS, relabel );
 
 	button = base_window_get_widget( BASE_WINDOW( editor ), "RelabelProfileButton" );
 	relabel = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ));
-	base_iprefs_set_bool( BASE_IPREFS( editor ), BASE_IPREFS_RELABEL_PROFILES, relabel );
+	na_iprefs_write_bool( NA_IPREFS( pivot ), IPREFS_RELABEL_PROFILES, relabel );
 
 	/* third tab: tools preferences
 	 */
diff --git a/src/nact/nact-tree-model.c b/src/nact/nact-tree-model.c
index 2bb423e..1761dad 100644
--- a/src/nact/nact-tree-model.c
+++ b/src/nact/nact-tree-model.c
@@ -35,9 +35,6 @@
 #include <string.h>
 
 #include <common/na-object-api.h>
-#include <common/na-object-action.h>
-#include <common/na-object-menu.h>
-#include <common/na-object-profile.h>
 #include <common/na-iprefs.h>
 #include <common/na-utils.h>
 #include <common/na-xml-writer.h>
diff --git a/src/nact/nact-window.c b/src/nact/nact-window.c
index 8fd3018..798d75f 100644
--- a/src/nact/nact-window.c
+++ b/src/nact/nact-window.c
@@ -35,9 +35,10 @@
 #include <glib.h>
 #include <glib/gi18n.h>
 
+#include <runtime/na-iio-provider.h>
+
 #include <common/na-object-api.h>
 #include <common/na-iprefs.h>
-#include <common/na-iio-provider.h>
 #include <common/na-utils.h>
 
 #include "nact-application.h"
diff --git a/src/nact/nact-window.h b/src/nact/nact-window.h
index 3b686d7..cb0ab48 100644
--- a/src/nact/nact-window.h
+++ b/src/nact/nact-window.h
@@ -40,10 +40,8 @@
  * It is a common base class for all Nautilus Actions window documents.
  */
 
-#include <common/na-object-action.h>
-#include <common/na-object-menu.h>
-#include <common/na-object-profile.h>
-#include <common/na-pivot.h>
+#include <runtime/na-object-item-class.h>
+#include <runtime/na-pivot.h>
 
 #include "base-window.h"
 
diff --git a/src/nact/nact-xml-reader.c b/src/nact/nact-xml-reader.c
index 59b171c..40acbd8 100644
--- a/src/nact/nact-xml-reader.c
+++ b/src/nact/nact-xml-reader.c
@@ -38,8 +38,9 @@
 #include <string.h>
 #include <uuid/uuid.h>
 
-#include <common/na-gconf-provider-keys.h>
-#include <common/na-gconf-utils.h>
+#include <runtime/na-gconf-provider-keys.h>
+#include <runtime/na-gconf-utils.h>
+
 #include <common/na-object-api.h>
 #include <common/na-utils.h>
 #include <common/na-xml-names.h>
@@ -1300,7 +1301,7 @@ manage_import_mode( NactXMLReader *reader )
 
 	switch( reader->private->import_mode ){
 		case RENUMBER_MODE:
-			na_object_set_new_id( reader->private->action );
+			na_object_set_new_id( reader->private->action, NULL );
 			reader->private->relabel = TRUE;
 			ret = TRUE;
 			break;
diff --git a/src/nact/nact-xml-reader.h b/src/nact/nact-xml-reader.h
index 159e3f7..740b176 100644
--- a/src/nact/nact-xml-reader.h
+++ b/src/nact/nact-xml-reader.h
@@ -39,7 +39,8 @@
  * This is the base class for importing actions from XML files.
  */
 
-#include "common/na-object-action-class.h"
+#include <runtime/na-object-action-class.h>
+
 #include "base-assistant.h"
 
 G_BEGIN_DECLS
diff --git a/src/plugin/README b/src/plugin/README
new file mode 100644
index 0000000..5fa9732
--- /dev/null
+++ b/src/plugin/README
@@ -0,0 +1,7 @@
+This is the Nautilus Actions plugin.
+
+The plugin is dynamically loaded by the Nautilus file manager.
+
+Please put only here code relevant to the plugin, and to itself only.
+I.e., code shared by the plugin with some other part of the package
+should go to runtime convenience library.
diff --git a/src/runtime/Makefile.am b/src/runtime/Makefile.am
index 243687b..999d377 100644
--- a/src/runtime/Makefile.am
+++ b/src/runtime/Makefile.am
@@ -59,21 +59,27 @@ libna_runtime_la_SOURCES = \
 	na-object.c									\
 	na-object-class.h							\
 	na-object-fn.h								\
+	na-object-priv.h							\
 	na-object-id.c								\
 	na-object-id-class.h						\
 	na-object-id-fn.h							\
+	na-object-id-priv.h							\
 	na-object-item.c							\
 	na-object-item-class.h						\
 	na-object-item-fn.h							\
+	na-object-item-priv.h						\
 	na-object-action.c							\
 	na-object-action-class.h					\
 	na-object-action-fn.h						\
+	na-object-action-priv.h						\
 	na-object-menu.c							\
 	na-object-menu-class.h						\
 	na-object-menu-fn.h							\
+	na-object-menu-priv.h						\
 	na-object-profile.c							\
 	na-object-profile-class.h					\
 	na-object-profile-fn.h						\
+	na-object-profile-priv.h					\
 	na-pivot.c									\
 	na-pivot.h									\
 	na-utils.c									\
diff --git a/src/runtime/README b/src/runtime/README
new file mode 100644
index 0000000..6a0dd15
--- /dev/null
+++ b/src/runtime/README
@@ -0,0 +1,6 @@
+This is a runtime convenience library linked against the plugin.
+
+in order to keep the plugin as light as possible, thus with as less as
+possible bugs, and, if any, as easy as possible to fix, please only put
+here code which is used by the plugin, and shared by some other part of
+the package.
diff --git a/src/runtime/na-gconf-keys.h b/src/runtime/na-gconf-keys.h
index f5a7158..75476dc 100644
--- a/src/runtime/na-gconf-keys.h
+++ b/src/runtime/na-gconf-keys.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_GCONF_KEYS_H__
-#define __NA_GCONF_KEYS_H__
+#ifndef __NA_RUNTIME_GCONF_KEYS_H__
+#define __NA_RUNTIME_GCONF_KEYS_H__
 
 /**
  * SECTION: na_gconf
@@ -44,4 +44,4 @@
 #define NAUTILUS_ACTIONS_GCONF_BASEDIR			"/apps/" PACKAGE
 #define NAUTILUS_ACTIONS_GCONF_SCHEMASDIR		"/schemas"
 
-#endif /* __NA_GCONF_KEYS_H__ */
+#endif /* __NA_RUNTIME_GCONF_KEYS_H__ */
diff --git a/src/runtime/na-gconf-monitor.h b/src/runtime/na-gconf-monitor.h
index 0663d2d..8ae31b7 100644
--- a/src/runtime/na-gconf-monitor.h
+++ b/src/runtime/na-gconf-monitor.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_GCONF_MONITOR_H__
-#define __NA_GCONF_MONITOR_H__
+#ifndef __NA_RUNTIME_GCONF_MONITOR_H__
+#define __NA_RUNTIME_GCONF_MONITOR_H__
 
 /**
  * SECTION: na_gconf_monitor
@@ -76,4 +76,4 @@ void            na_gconf_monitor_release_monitors( GList *monitors );
 
 G_END_DECLS
 
-#endif /* __NA_GCONF_MONITOR_MONITOR_H__ */
+#endif /* __NA_RUNTIME_GCONF_MONITOR_MONITOR_H__ */
diff --git a/src/runtime/na-gconf-provider-keys.h b/src/runtime/na-gconf-provider-keys.h
index d28f56e..e4c6772 100644
--- a/src/runtime/na-gconf-provider-keys.h
+++ b/src/runtime/na-gconf-provider-keys.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_GCONF_PROVIDER_KEYS_H__
-#define __NA_GCONF_PROVIDER_KEYS_H__
+#ifndef __NA_RUNTIME_GCONF_PROVIDER_KEYS_H__
+#define __NA_RUNTIME_GCONF_PROVIDER_KEYS_H__
 
 #include "na-gconf-keys.h"
 
@@ -65,4 +65,4 @@
 #define ACTION_MULTIPLE_ENTRY			"accept-multiple-files"
 #define ACTION_SCHEMES_ENTRY			"schemes"
 
-#endif /* __NA_GCONF_PROVIDER_KEYS_H__ */
+#endif /* __NA_RUNTIME_GCONF_PROVIDER_KEYS_H__ */
diff --git a/src/runtime/na-gconf-provider.h b/src/runtime/na-gconf-provider.h
index 5bcfcc3..bf0df8d 100644
--- a/src/runtime/na-gconf-provider.h
+++ b/src/runtime/na-gconf-provider.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_GCONF_PROVIDER_H__
-#define __NA_GCONF_PROVIDER_H__
+#ifndef __NA_RUNTIME_GCONF_PROVIDER_H__
+#define __NA_RUNTIME_GCONF_PROVIDER_H__
 
 /**
  * SECTION: na_gconf_provider
@@ -78,4 +78,4 @@ NAGConfProvider *na_gconf_provider_new( NAPivot *notified );
 
 G_END_DECLS
 
-#endif /* __NA_GCONF_PROVIDER_PROVIDER_H__ */
+#endif /* __NA_RUNTIME_GCONF_PROVIDER_PROVIDER_H__ */
diff --git a/src/runtime/na-gconf-utils.h b/src/runtime/na-gconf-utils.h
index f5e1273..b3427a7 100644
--- a/src/runtime/na-gconf-utils.h
+++ b/src/runtime/na-gconf-utils.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_GCONF_UTILS_H__
-#define __NA_GCONF_UTILS_H__
+#ifndef __NA_RUNTIME_GCONF_UTILS_H__
+#define __NA_RUNTIME_GCONF_UTILS_H__
 
 /**
  * SECTION: na_gconf_utils
@@ -65,4 +65,4 @@ gboolean na_gconf_utils_write_string_list( GConfClient *gconf, const gchar *path
 
 G_END_DECLS
 
-#endif /* __NA_GCONF_UTILS_H__ */
+#endif /* __NA_RUNTIME_GCONF_UTILS_H__ */
diff --git a/src/runtime/na-gnome-vfs-uri.h b/src/runtime/na-gnome-vfs-uri.h
index 411040b..851f639 100644
--- a/src/runtime/na-gnome-vfs-uri.h
+++ b/src/runtime/na-gnome-vfs-uri.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_GNOME_VFS_URI_H__
-#define __NA_GNOME_VFS_URI_H__
+#ifndef __NA_RUNTIME_GNOME_VFS_URI_H__
+#define __NA_RUNTIME_GNOME_VFS_URI_H__
 
 /*
  * pwi 2009-07-29
@@ -105,4 +105,4 @@ void na_gnome_vfs_uri_free( NAGnomeVFSURI *vfs );
 
 G_END_DECLS
 
-#endif /* __NA_GNOME_VFS_URI_H__ */
+#endif /* __NA_RUNTIME_GNOME_VFS_URI_H__ */
diff --git a/src/runtime/na-iabout.h b/src/runtime/na-iabout.h
index 392724e..67c3ce9 100644
--- a/src/runtime/na-iabout.h
+++ b/src/runtime/na-iabout.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_IABOUT_H__
-#define __NA_IABOUT_H__
+#ifndef __NA_RUNTIME_IABOUT_H__
+#define __NA_RUNTIME_IABOUT_H__
 
 /**
  * SECTION: na_iabout
@@ -86,4 +86,4 @@ gchar *na_iabout_get_icon_name( void );
 
 G_END_DECLS
 
-#endif /* __NA_IABOUT_H__ */
+#endif /* __NA_RUNTIME_IABOUT_H__ */
diff --git a/src/runtime/na-iduplicable.h b/src/runtime/na-iduplicable.h
index 458025f..b390a6f 100644
--- a/src/runtime/na-iduplicable.h
+++ b/src/runtime/na-iduplicable.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_IDUPLICABLE_H__
-#define __NA_IDUPLICABLE_H__
+#ifndef __NA_RUNTIME_IDUPLICABLE_H__
+#define __NA_RUNTIME_IDUPLICABLE_H__
 
 /**
  * SECTION: na_iduplicable
@@ -164,4 +164,4 @@ void           na_iduplicable_register_consumer( GObject *consumer );
 
 G_END_DECLS
 
-#endif /* __NA_IDUPLICABLE_H__ */
+#endif /* __NA_RUNTIME_IDUPLICABLE_H__ */
diff --git a/src/runtime/na-iio-provider.h b/src/runtime/na-iio-provider.h
index a1ed571..fc0907b 100644
--- a/src/runtime/na-iio-provider.h
+++ b/src/runtime/na-iio-provider.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_IIO_PROVIDER_H__
-#define __NA_IIO_PROVIDER_H__
+#ifndef __NA_RUNTIME_IIO_PROVIDER_H__
+#define __NA_RUNTIME_IIO_PROVIDER_H__
 
 /**
  * SECTION: na_iio_provider
@@ -150,4 +150,4 @@ enum {
 
 G_END_DECLS
 
-#endif /* __NA_IIO_PROVIDER_H__ */
+#endif /* __NA_RUNTIME_IIO_PROVIDER_H__ */
diff --git a/src/runtime/na-ipivot-consumer.h b/src/runtime/na-ipivot-consumer.h
index 8f2098f..1fec091 100644
--- a/src/runtime/na-ipivot-consumer.h
+++ b/src/runtime/na-ipivot-consumer.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_IPIVOT_CONSUMER_H__
-#define __NA_IPIVOT_CONSUMER_H__
+#ifndef __NA_RUNTIME_IPIVOT_CONSUMER_H__
+#define __NA_RUNTIME_IPIVOT_CONSUMER_H__
 
 /**
  * SECTION: na_ipivot_consumer
@@ -105,4 +105,4 @@ void  na_ipivot_consumer_notify_of_display_about_change( NAIPivotConsumer *insta
 
 G_END_DECLS
 
-#endif /* __NA_IPIVOT_CONSUMER_H__ */
+#endif /* __NA_RUNTIME_IPIVOT_CONSUMER_H__ */
diff --git a/src/runtime/na-iprefs.c b/src/runtime/na-iprefs.c
index 563bb24..dc92d05 100644
--- a/src/runtime/na-iprefs.c
+++ b/src/runtime/na-iprefs.c
@@ -28,7 +28,6 @@
  *   ... and many others (see AUTHORS)
  */
 
-
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
@@ -66,17 +65,11 @@ static GConfEnumStringPair order_mode_table[] = {
 static gboolean st_initialized = FALSE;
 static gboolean st_finalized = FALSE;
 
-static GType        register_type( void );
-static void         interface_base_init( NAIPrefsInterface *klass );
-static void         interface_base_finalize( NAIPrefsInterface *klass );
-
-static gboolean     read_bool( NAIPrefs *instance, const gchar *name, gboolean default_value );
-static GSList      *read_string_list( NAIPrefs *instance, const gchar *name );
-static void         write_bool( NAIPrefs *instance, const gchar *name, gboolean value );
-static void         write_string_list( NAIPrefs *instance, const gchar *name, GSList *list );
+static GType register_type( void );
+static void  interface_base_init( NAIPrefsInterface *klass );
+static void  interface_base_finalize( NAIPrefsInterface *klass );
 
-static void         setup_private_data( NAIPrefs *instance );
-static GConfClient *get_gconf_client( NAIPrefs *instance );
+static void  setup_private_data( NAIPrefs *instance );
 
 GType
 na_iprefs_get_type( void )
@@ -167,8 +160,7 @@ na_iprefs_get_level_zero_items( NAIPrefs *instance )
 
 	if( st_initialized && !st_finalized ){
 
-		setup_private_data( instance );
-		level_zero = read_string_list( instance, IPREFS_LEVEL_ZERO_ITEMS );
+		level_zero = na_iprefs_read_string_list( instance, IPREFS_LEVEL_ZERO_ITEMS, NULL );
 	}
 
 	return( level_zero );
@@ -187,8 +179,8 @@ na_iprefs_set_level_zero_items( NAIPrefs *instance, GSList *order )
 	g_return_if_fail( NA_IS_IPREFS( instance ));
 
 	if( st_initialized && !st_finalized ){
-		setup_private_data( instance );
-		write_string_list( instance, IPREFS_LEVEL_ZERO_ITEMS, order );
+
+		na_iprefs_write_string_list( instance, IPREFS_LEVEL_ZERO_ITEMS, order );
 	}
 }
 
@@ -215,14 +207,15 @@ na_iprefs_get_order_mode( NAIPrefs *instance )
 
 	if( st_initialized && !st_finalized ){
 
-		setup_private_data( instance );
 		order_str = na_iprefs_read_string(
 				instance,
 				IPREFS_DISPLAY_ALPHABETICAL_ORDER,
 				DEFAULT_ORDER_MODE_STR );
+
 		if( gconf_string_to_enum( order_mode_table, order_str, &order_int )){
 			alpha_order = order_int;
 		}
+
 		g_free( order_str );
 	}
 
@@ -246,8 +239,8 @@ na_iprefs_set_order_mode( NAIPrefs *instance, gint mode )
 
 	if( st_initialized && !st_finalized ){
 
-		setup_private_data( instance );
 		order_str = gconf_enum_to_string( order_mode_table, mode );
+
 		na_iprefs_write_string(
 				instance,
 				IPREFS_DISPLAY_ALPHABETICAL_ORDER,
@@ -276,8 +269,8 @@ na_iprefs_should_add_about_item( NAIPrefs *instance )
 	g_return_val_if_fail( NA_IS_IPREFS( instance ), FALSE );
 
 	if( st_initialized && !st_finalized ){
-		setup_private_data( instance );
-		about = read_bool( instance, IPREFS_ADD_ABOUT_ITEM, TRUE );
+
+		about = na_iprefs_read_bool( instance, IPREFS_ADD_ABOUT_ITEM, TRUE );
 	}
 
 	return( about );
@@ -296,12 +289,57 @@ na_iprefs_set_add_about_item( NAIPrefs *instance, gboolean enabled )
 	g_return_if_fail( NA_IS_IPREFS( instance ));
 
 	if( st_initialized && !st_finalized ){
-		setup_private_data( instance );
-		write_bool( instance, IPREFS_ADD_ABOUT_ITEM, enabled );
+
+		na_iprefs_write_bool( instance, IPREFS_ADD_ABOUT_ITEM, enabled );
 	}
 }
 
 /**
+ * na_iprefs_get_gconf_client:
+ * @instance: this #NAIPrefs interface instance.
+ *
+ * Returns: a GConfClient object.
+ */
+GConfClient *
+na_iprefs_get_gconf_client( NAIPrefs *instance )
+{
+	NAIPrefsPrivate *ipp;
+
+	g_return_val_if_fail( NA_IS_IPREFS( instance ), NULL );
+
+	setup_private_data( instance );
+	ipp = ( NAIPrefsPrivate * ) g_object_get_data( G_OBJECT( instance ), NA_IPREFS_PRIVATE_DATA );
+	g_return_val_if_fail( ipp, NULL );
+
+	return( ipp->client );
+}
+
+/**
+ * na_iprefs_read_bool:
+ * @instance: this #NAIPrefs interface instance.
+ * @name: the name of the preference entry.
+ * @default_value: default value to be returned if the entry is not found,
+ * no default value is available in the schema, of there is no schema at
+ * all.
+ *
+ * Returns: the boolean value.
+ */
+gboolean
+na_iprefs_read_bool( NAIPrefs *instance, const gchar *name, gboolean default_value )
+{
+	gchar *path;
+	gboolean ret;
+
+	g_return_val_if_fail( NA_IS_IPREFS( instance ), FALSE );
+
+	path = gconf_concat_dir_and_key( NA_GCONF_PREFS_PATH, name );
+	ret = na_gconf_utils_read_bool( na_iprefs_get_gconf_client( instance ), path, TRUE, default_value );
+	g_free( path );
+
+	return( ret );
+}
+
+/**
  * na_iprefs_read_string:
  * @instance: this #NAIPrefs interface instance.
  * @name: the preference key.
@@ -317,74 +355,102 @@ na_iprefs_read_string( NAIPrefs *instance, const gchar *name, const gchar *defau
 	gchar *path;
 	gchar *value;
 
+	g_return_val_if_fail( NA_IS_IPREFS( instance ), NULL );
+
 	path = gconf_concat_dir_and_key( NA_GCONF_PREFS_PATH, name );
-	value = na_gconf_utils_read_string( get_gconf_client( instance ), path, TRUE, default_value );
+	value = na_gconf_utils_read_string( na_iprefs_get_gconf_client( instance ), path, TRUE, default_value );
 	g_free( path );
 
 	return( value );
 }
 
 /**
- * na_iprefs_write_string:
+ * na_iprefs_read_string_list:
  * @instance: this #NAIPrefs interface instance.
  * @name: the preference key.
- * @value: the value to be written.
+ * @default_value: a default value, used if entry is not found, or there
+ * is no default value in the schema, of there is no schema at all.
  *
- * Writes the value as the given GConf preference.
+ * Returns: the list value, which should be na_utils_free_string_list()
+ * by the caller.
  */
-void
-na_iprefs_write_string( NAIPrefs *instance, const gchar *name, const gchar *value )
+GSList *
+na_iprefs_read_string_list( NAIPrefs *instance, const gchar *name, const gchar *default_value )
 {
 	gchar *path;
+	GSList *list;
 
-	path = gconf_concat_dir_and_key( NA_GCONF_PREFS_PATH, name );
-	na_gconf_utils_write_string( get_gconf_client( instance ), path, value, NULL );
-	g_free( path );
-}
-
-static gboolean
-read_bool( NAIPrefs *instance, const gchar *name, gboolean default_value )
-{
-	gchar *path;
-	gboolean ret;
+	g_return_val_if_fail( NA_IS_IPREFS( instance ), NULL );
 
 	path = gconf_concat_dir_and_key( NA_GCONF_PREFS_PATH, name );
-	ret = na_gconf_utils_read_bool( get_gconf_client( instance ), path, TRUE, default_value );
+	list = na_gconf_utils_read_string_list( na_iprefs_get_gconf_client( instance ), path );
 	g_free( path );
 
-	return( ret );
+	if(( !list || !g_slist_length( list )) && default_value ){
+		g_slist_free( list );
+		list = g_slist_append( NULL, g_strdup( default_value ));
+	}
+
+	return( list );
 }
 
-static GSList *
-read_string_list( NAIPrefs *instance, const gchar *name )
+/**
+ * na_iprefs_write_bool:
+ * @instance: this #NAIPrefs interface instance.
+ * @name: the preference entry.
+ * @value: the value to be written.
+ *
+ * Writes the given boolean value.
+ */
+void
+na_iprefs_write_bool( NAIPrefs *instance, const gchar *name, gboolean value )
 {
 	gchar *path;
-	GSList *list;
+
+	g_return_if_fail( NA_IS_IPREFS( instance ));
 
 	path = gconf_concat_dir_and_key( NA_GCONF_PREFS_PATH, name );
-	list = na_gconf_utils_read_string_list( get_gconf_client( instance ), path );
+	na_gconf_utils_write_bool( na_iprefs_get_gconf_client( instance ), path, value, NULL );
 	g_free( path );
-
-	return( list );
 }
 
-static void
-write_bool( NAIPrefs *instance, const gchar *name, gboolean value )
+/**
+ * na_iprefs_write_string:
+ * @instance: this #NAIPrefs interface instance.
+ * @name: the preference key.
+ * @value: the value to be written.
+ *
+ * Writes the value as the given GConf preference.
+ */
+void
+na_iprefs_write_string( NAIPrefs *instance, const gchar *name, const gchar *value )
 {
 	gchar *path;
 
+	g_return_if_fail( NA_IS_IPREFS( instance ));
+
 	path = gconf_concat_dir_and_key( NA_GCONF_PREFS_PATH, name );
-	na_gconf_utils_write_bool( get_gconf_client( instance ), path, value, NULL );
+	na_gconf_utils_write_string( na_iprefs_get_gconf_client( instance ), path, value, NULL );
 	g_free( path );
 }
 
-static void
-write_string_list( NAIPrefs *instance, const gchar *name, GSList *list )
+/**
+ * na_iprefs_write_string_list
+ * @instance: this #NAIPrefs interface instance.
+ * @name: the preference key.
+ * @value: the value to be written.
+ *
+ * Writes the value as the given GConf preference.
+ */
+void
+na_iprefs_write_string_list( NAIPrefs *instance, const gchar *name, GSList *list )
 {
 	gchar *path;
 
+	g_return_if_fail( NA_IS_IPREFS( instance ));
+
 	path = gconf_concat_dir_and_key( NA_GCONF_PREFS_PATH, name );
-	na_gconf_utils_write_string_list( get_gconf_client( instance ), path, list, NULL );
+	na_gconf_utils_write_string_list( na_iprefs_get_gconf_client( instance ), path, list, NULL );
 	g_free( path );
 }
 
@@ -400,14 +466,3 @@ setup_private_data( NAIPrefs *instance )
 		g_object_set_data( G_OBJECT( instance ), NA_IPREFS_PRIVATE_DATA, ipp );
 	}
 }
-
-static GConfClient *
-get_gconf_client( NAIPrefs *instance )
-{
-	NAIPrefsPrivate *ipp;
-
-	ipp = ( NAIPrefsPrivate * ) g_object_get_data( G_OBJECT( instance ), NA_IPREFS_PRIVATE_DATA );
-	g_return_val_if_fail( ipp, NULL );
-
-	return( ipp->client );
-}
diff --git a/src/runtime/na-iprefs.h b/src/runtime/na-iprefs.h
index fa0243f..a98127c 100644
--- a/src/runtime/na-iprefs.h
+++ b/src/runtime/na-iprefs.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_IPREFS_H__
-#define __NA_IPREFS_H__
+#ifndef __NA_RUNTIME_IPREFS_H__
+#define __NA_RUNTIME_IPREFS_H__
 
 /**
  * SECTION: na_iprefs
@@ -67,6 +67,7 @@
  */
 
 #include <glib-object.h>
+#include <gconf/gconf-client.h>
 
 #include "na-gconf-keys.h"
 
@@ -87,19 +88,26 @@ typedef struct {
 }
 	NAIPrefsInterface;
 
-GType    na_iprefs_get_type( void );
+GType        na_iprefs_get_type( void );
 
-GSList  *na_iprefs_get_level_zero_items( NAIPrefs *instance );
-void     na_iprefs_set_level_zero_items( NAIPrefs *instance, GSList *order );
+GSList      *na_iprefs_get_level_zero_items( NAIPrefs *instance );
+void         na_iprefs_set_level_zero_items( NAIPrefs *instance, GSList *order );
 
-gint     na_iprefs_get_order_mode( NAIPrefs *instance );
-void     na_iprefs_set_order_mode( NAIPrefs *instance, gint mode );
+gint         na_iprefs_get_order_mode( NAIPrefs *instance );
+void         na_iprefs_set_order_mode( NAIPrefs *instance, gint mode );
 
-gboolean na_iprefs_should_add_about_item( NAIPrefs *instance );
-void     na_iprefs_set_add_about_item( NAIPrefs *instance, gboolean enabled );
+gboolean     na_iprefs_should_add_about_item( NAIPrefs *instance );
+void         na_iprefs_set_add_about_item( NAIPrefs *instance, gboolean enabled );
 
-gchar   *na_iprefs_read_string( NAIPrefs *instance, const gchar *key, const gchar *default_value );
-void     na_iprefs_write_string( NAIPrefs *instance, const gchar *key, const gchar *value );
+GConfClient *na_iprefs_get_gconf_client( NAIPrefs *instance );
+
+gboolean     na_iprefs_read_bool( NAIPrefs *instance, const gchar *key, gboolean default_value );
+gchar       *na_iprefs_read_string( NAIPrefs *instance, const gchar *key, const gchar *default_value );
+GSList      *na_iprefs_read_string_list( NAIPrefs *instance, const gchar *key, const gchar *default_value );
+
+void         na_iprefs_write_bool( NAIPrefs *instance, const gchar *key, gboolean value );
+void         na_iprefs_write_string( NAIPrefs *instance, const gchar *key, const gchar *value );
+void         na_iprefs_write_string_list( NAIPrefs *instance, const gchar *key, GSList *value );
 
 /* GConf keys
  */
@@ -122,4 +130,4 @@ enum {
 
 G_END_DECLS
 
-#endif /* __NA_IPREFS_H__ */
+#endif /* __NA_RUNTIME_IPREFS_H__ */
diff --git a/src/runtime/na-object-action-class.h b/src/runtime/na-object-action-class.h
index aa20613..ea8603f 100644
--- a/src/runtime/na-object-action-class.h
+++ b/src/runtime/na-object-action-class.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_ACTION_CLASS_H__
-#define __NA_OBJECT_ACTION_CLASS_H__
+#ifndef __NA_RUNTIME_OBJECT_ACTION_CLASS_H__
+#define __NA_RUNTIME_OBJECT_ACTION_CLASS_H__
 
 /**
  * SECTION: na_object_action
@@ -89,4 +89,4 @@ GType na_object_action_get_type( void );
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_ACTION_CLASS_H__ */
+#endif /* __NA_RUNTIME_OBJECT_ACTION_CLASS_H__ */
diff --git a/src/runtime/na-object-action-fn.h b/src/runtime/na-object-action-fn.h
index 901bd9a..508d7da 100644
--- a/src/runtime/na-object-action-fn.h
+++ b/src/runtime/na-object-action-fn.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_ACTION_FN_H__
-#define __NA_OBJECT_ACTION_FN_H__
+#ifndef __NA_RUNTIME_OBJECT_ACTION_FN_H__
+#define __NA_RUNTIME_OBJECT_ACTION_FN_H__
 
 /**
  * SECTION: na_object_action
@@ -44,8 +44,13 @@
 
 G_BEGIN_DECLS
 
+/* #NAObjectAction properties
+ */
+#define NAACTION_PROP_VERSION			"na-action-version"
+#define NAACTION_PROP_READONLY			"na-action-read-only"
+
 /* i18n: default label for a newly created action */
-#define NA_OBJECT_ACTION_DEFAULT_LABEL		_( "New Nautilus action" )
+#define NA_OBJECT_ACTION_DEFAULT_LABEL	_( "New Nautilus action" )
 
 NAObjectAction *na_object_action_new( void );
 
@@ -59,4 +64,4 @@ void            na_object_action_attach_profile( NAObjectAction *action, NAObjec
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_ACTION_FN_H__ */
+#endif /* __NA_RUNTIME_OBJECT_ACTION_FN_H__ */
diff --git a/src/common/na-object-action.h b/src/runtime/na-object-action-priv.h
similarity index 61%
copy from src/common/na-object-action.h
copy to src/runtime/na-object-action-priv.h
index 8ea7e5a..0d5db13 100644
--- a/src/common/na-object-action.h
+++ b/src/runtime/na-object-action-priv.h
@@ -1,5 +1,5 @@
 /*
- * Nautilus ObjectActions
+ * Nautilus Actions
  * A Nautilus extension which offers configurable context menu actions.
  *
  * Copyright (C) 2005 The GNOME Foundation
@@ -28,32 +28,29 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_ACTION_H__
-#define __NA_OBJECT_ACTION_H__
-
-/**
- * SECTION: na_object_action
- * @short_description: #NAObjectAction public function declaration.
- * @include: common/na-object-action.h
- */
-
-#include <glib/gi18n.h>
+#ifndef __NA_RUNTIME_OBJECT_ACTION_PRIV_H__
+#define __NA_RUNTIME_OBJECT_ACTION_PRIV_H__
 
 #include "na-object-action-class.h"
-#include "na-object-profile-class.h"
 
 G_BEGIN_DECLS
 
-NAObjectAction *na_object_action_new( void );
-NAObjectAction *na_object_action_new_with_profile( void );
-
-gboolean        na_object_action_is_readonly( const NAObjectAction *action );
+/* private instance data
+ */
+struct NAObjectActionPrivate {
+	gboolean dispose_has_run;
 
-void            na_object_action_set_version( NAObjectAction *action, const gchar *version );
-void            na_object_action_set_readonly( NAObjectAction *action, gboolean readonly );
+	/* action properties
+	 */
+	gchar   *version;
 
-void            na_object_action_attach_profile( NAObjectAction *action, NAObjectProfile *profile );
+	/* dynamically set when reading the actions from the I/O storage
+	 * subsystem
+	 * defaults to FALSE unless a write has already returned an error
+	 */
+	gboolean read_only;
+};
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_ACTION_H__ */
+#endif /* __NA_RUNTIME_OBJECT_ACTION_PRIV_H__ */
diff --git a/src/runtime/na-object-action.c b/src/runtime/na-object-action.c
index b47bb76..0d74235 100644
--- a/src/runtime/na-object-action.c
+++ b/src/runtime/na-object-action.c
@@ -36,6 +36,7 @@
 
 #include "na-iduplicable.h"
 #include "na-object-api.h"
+#include "na-object-action-priv.h"
 #include "na-utils.h"
 
 /* private class data
@@ -44,22 +45,6 @@ struct NAObjectActionClassPrivate {
 	void *empty;						/* so that gcc -pedantic is happy */
 };
 
-/* private instance data
- */
-struct NAObjectActionPrivate {
-	gboolean dispose_has_run;
-
-	/* action properties
-	 */
-	gchar   *version;
-
-	/* dynamically set when reading the actions from the I/O storage
-	 * subsystem
-	 * defaults to FALSE unless a write has already returned an error
-	 */
-	gboolean read_only;
-};
-
 /* action properties
  */
 enum {
@@ -67,9 +52,6 @@ enum {
 	NAACTION_PROP_READONLY_ID
 };
 
-#define NAACTION_PROP_VERSION			"na-action-version"
-#define NAACTION_PROP_READONLY			"na-action-read-only"
-
 static NAObjectItemClass *st_parent_class = NULL;
 
 static GType     register_type( void );
diff --git a/src/runtime/na-object-api.h b/src/runtime/na-object-api.h
index 9fdb28b..5b518c1 100644
--- a/src/runtime/na-object-api.h
+++ b/src/runtime/na-object-api.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_API_H__
-#define __NA_OBJECT_API_H__
+#ifndef __NA_RUNTIME_OBJECT_API_H__
+#define __NA_RUNTIME_OBJECT_API_H__
 
 /**
  * SECTION: na_object
@@ -43,6 +43,8 @@
  * Only define here the API which is relevant in libna-runtime library.
  */
 
+#include "na-iduplicable.h"
+
 #include "na-object-fn.h"
 #include "na-object-id-fn.h"
 #include "na-object-item-fn.h"
@@ -61,6 +63,7 @@ G_BEGIN_DECLS
 /* NAIDuplicable
  */
 #define na_object_duplicate( object )				na_object_iduplicable_duplicate( NA_OBJECT( object ))
+#define na_object_are_equal( a, b )					na_object_iduplicable_are_equal( NA_OBJECT( a ), NA_OBJECT( b ))
 #define na_object_is_modified( object )				na_object_iduplicable_is_modified( NA_OBJECT( object ))
 
 /* NAObjectId
@@ -93,4 +96,4 @@ G_BEGIN_DECLS
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_API_H__ */
+#endif /* __NA_RUNTIME_OBJECT_API_H__ */
diff --git a/src/runtime/na-object-class.h b/src/runtime/na-object-class.h
index fd53b06..d1b1f44 100644
--- a/src/runtime/na-object-class.h
+++ b/src/runtime/na-object-class.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_CLASS_H__
-#define __NA_OBJECT_CLASS_H__
+#ifndef __NA_RUNTIME_OBJECT_CLASS_H__
+#define __NA_RUNTIME_OBJECT_CLASS_H__
 
 /**
  * SECTION: na_object
@@ -170,4 +170,4 @@ GType     na_object_get_type( void );
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_CLASS_H__ */
+#endif /* __NA_RUNTIME_OBJECT_CLASS_H__ */
diff --git a/src/runtime/na-object-fn.h b/src/runtime/na-object-fn.h
index d07e82a..4ea6264 100644
--- a/src/runtime/na-object-fn.h
+++ b/src/runtime/na-object-fn.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_FN_H__
-#define __NA_OBJECT_FN_H__
+#ifndef __NA_RUNTIME_OBJECT_FN_H__
+#define __NA_RUNTIME_OBJECT_FN_H__
 
 /**
  * SECTION: na_object
@@ -49,6 +49,7 @@ G_BEGIN_DECLS
 /* NAIDuplicable
  */
 NAObject *na_object_iduplicable_duplicate( const NAObject *object );
+gboolean  na_object_iduplicable_are_equal( const NAObject *a, const NAObject *b );
 gboolean  na_object_iduplicable_is_modified( const NAObject *object );
 
 /* NAObject
@@ -57,9 +58,10 @@ void      na_object_object_dump( const NAObject *object );
 void      na_object_object_dump_norec( const NAObject *object );
 void      na_object_object_dump_tree( GList *tree );
 
+GList    *na_object_most_derived_get_childs( const NAObject *object );
 GList    *na_object_get_hierarchy( const NAObject *object );
 void      na_object_free_hierarchy( GList *hierarchy );
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_FN_H__ */
+#endif /* __NA_RUNTIME_OBJECT_FN_H__ */
diff --git a/src/runtime/na-object-id-class.h b/src/runtime/na-object-id-class.h
index 31599f4..5bbc643 100644
--- a/src/runtime/na-object-id-class.h
+++ b/src/runtime/na-object-id-class.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_ID_CLASS_H__
-#define __NA_OBJECT_ID_CLASS_H__
+#ifndef __NA_RUNTIME_OBJECT_ID_CLASS_H__
+#define __NA_RUNTIME_OBJECT_ID_CLASS_H__
 
 /**
  * SECTION: na_object_id
@@ -91,4 +91,4 @@ GType  na_object_id_get_type( void );
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_ID_CLASS_H__ */
+#endif /* __NA_RUNTIME_OBJECT_ID_CLASS_H__ */
diff --git a/src/runtime/na-object-id-fn.h b/src/runtime/na-object-id-fn.h
index 9bf2a0a..6bd9e79 100644
--- a/src/runtime/na-object-id-fn.h
+++ b/src/runtime/na-object-id-fn.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_ID_FN_H__
-#define __NA_OBJECT_ID_FN_H__
+#ifndef __NA_RUNTIME_OBJECT_ID_FN_H__
+#define __NA_RUNTIME_OBJECT_ID_FN_H__
 
 /**
  * SECTION: na_object_id
@@ -55,4 +55,4 @@ void   na_object_id_set_label( NAObjectId *object, const gchar *label );
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_ID_FN_H__ */
+#endif /* __NA_RUNTIME_OBJECT_ID_FN_H__ */
diff --git a/src/common/na-object-action.h b/src/runtime/na-object-id-priv.h
similarity index 59%
copy from src/common/na-object-action.h
copy to src/runtime/na-object-id-priv.h
index 8ea7e5a..bb8764a 100644
--- a/src/common/na-object-action.h
+++ b/src/runtime/na-object-id-priv.h
@@ -1,5 +1,5 @@
 /*
- * Nautilus ObjectActions
+ * Nautilus Actions
  * A Nautilus extension which offers configurable context menu actions.
  *
  * Copyright (C) 2005 The GNOME Foundation
@@ -28,32 +28,21 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_ACTION_H__
-#define __NA_OBJECT_ACTION_H__
+#ifndef __NA_RUNTIME_OBJECT_ID_PRIV_H__
+#define __NA_RUNTIME_OBJECT_ID_PRIV_H__
 
-/**
- * SECTION: na_object_action
- * @short_description: #NAObjectAction public function declaration.
- * @include: common/na-object-action.h
- */
-
-#include <glib/gi18n.h>
-
-#include "na-object-action-class.h"
-#include "na-object-profile-class.h"
+#include "na-object-id-class.h"
 
 G_BEGIN_DECLS
 
-NAObjectAction *na_object_action_new( void );
-NAObjectAction *na_object_action_new_with_profile( void );
-
-gboolean        na_object_action_is_readonly( const NAObjectAction *action );
-
-void            na_object_action_set_version( NAObjectAction *action, const gchar *version );
-void            na_object_action_set_readonly( NAObjectAction *action, gboolean readonly );
-
-void            na_object_action_attach_profile( NAObjectAction *action, NAObjectProfile *profile );
+/* private instance data
+ */
+struct NAObjectIdPrivate {
+	gboolean  dispose_has_run;
+	gchar    *id;
+	gchar    *label;
+};
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_ACTION_H__ */
+#endif /* __NA_RUNTIME_OBJECT_ID_PRIV_H__ */
diff --git a/src/runtime/na-object-id.c b/src/runtime/na-object-id.c
index a8f5824..1d7a26d 100644
--- a/src/runtime/na-object-id.c
+++ b/src/runtime/na-object-id.c
@@ -37,6 +37,7 @@
 
 #include "na-iduplicable.h"
 #include "na-object-api.h"
+#include "na-object-id-priv.h"
 
 /* private class data
  */
@@ -44,14 +45,6 @@ struct NAObjectIdClassPrivate {
 	void *empty;						/* so that gcc -pedantic is happy */
 };
 
-/* private instance data
- */
-struct NAObjectIdPrivate {
-	gboolean  dispose_has_run;
-	gchar    *id;
-	gchar    *label;
-};
-
 /* object properties
  */
 enum {
diff --git a/src/runtime/na-object-item-class.h b/src/runtime/na-object-item-class.h
index 3f748c2..2936149 100644
--- a/src/runtime/na-object-item-class.h
+++ b/src/runtime/na-object-item-class.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_ITEM_CLASS_H__
-#define __NA_OBJECT_ITEM_CLASS_H__
+#ifndef __NA_RUNTIME_OBJECT_ITEM_CLASS_H__
+#define __NA_RUNTIME_OBJECT_ITEM_CLASS_H__
 
 /**
  * SECTION: na_object_item
@@ -86,4 +86,4 @@ GType na_object_item_get_type( void );
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_ITEM_CLASS_H__ */
+#endif /* __NA_RUNTIME_OBJECT_ITEM_CLASS_H__ */
diff --git a/src/runtime/na-object-item-fn.h b/src/runtime/na-object-item-fn.h
index d64b78a..ee8a1e8 100644
--- a/src/runtime/na-object-item-fn.h
+++ b/src/runtime/na-object-item-fn.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_ITEM_FN_H__
-#define __NA_OBJECT_ITEM_FN_H__
+#ifndef __NA_RUNTIME_OBJECT_ITEM_FN_H__
+#define __NA_RUNTIME_OBJECT_ITEM_FN_H__
 
 /**
  * SECTION: na_object_item
@@ -66,4 +66,4 @@ void           na_object_item_append_item( NAObjectItem *item, const NAObject *o
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_ITEM_FN_H__ */
+#endif /* __NA_RUNTIME_OBJECT_ITEM_FN_H__ */
diff --git a/src/common/na-object-action.h b/src/runtime/na-object-item-priv.h
similarity index 55%
copy from src/common/na-object-action.h
copy to src/runtime/na-object-item-priv.h
index 8ea7e5a..1f9e7c2 100644
--- a/src/common/na-object-action.h
+++ b/src/runtime/na-object-item-priv.h
@@ -1,6 +1,6 @@
 /*
- * Nautilus ObjectActions
- * A Nautilus extension which offers configurable context menu actions.
+ * Nautilus ObjectItems
+ * A Nautilus extension which offers configurable context menu object_items.
  *
  * Copyright (C) 2005 The GNOME Foundation
  * Copyright (C) 2006, 2007, 2008 Frederic Ruaudel and others (see AUTHORS)
@@ -28,32 +28,34 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_ACTION_H__
-#define __NA_OBJECT_ACTION_H__
+#ifndef __NA_RUNTIME_OBJECT_ITEM_PRIV_H__
+#define __NA_RUNTIME_OBJECT_ITEM_PRIV_H__
 
-/**
- * SECTION: na_object_action
- * @short_description: #NAObjectAction public function declaration.
- * @include: common/na-object-action.h
- */
-
-#include <glib/gi18n.h>
-
-#include "na-object-action-class.h"
-#include "na-object-profile-class.h"
+#include "na-object-item-class.h"
 
 G_BEGIN_DECLS
 
-NAObjectAction *na_object_action_new( void );
-NAObjectAction *na_object_action_new_with_profile( void );
+/* private instance data
+ */
+struct NAObjectItemPrivate {
+	gboolean       dispose_has_run;
 
-gboolean        na_object_action_is_readonly( const NAObjectAction *action );
+	/* object_item properties
+	 */
+	gchar         *tooltip;
+	gchar         *icon;
+	gboolean       enabled;
 
-void            na_object_action_set_version( NAObjectAction *action, const gchar *version );
-void            na_object_action_set_readonly( NAObjectAction *action, gboolean readonly );
+	/* list of NAObjectId subitems
+	 */
+	GList         *items;
 
-void            na_object_action_attach_profile( NAObjectAction *action, NAObjectProfile *profile );
+	/* the original provider
+	 * required to be able to edit/delete the item
+	 */
+	NAIIOProvider *provider;
+};
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_ACTION_H__ */
+#endif /* __NA_RUNTIME_OBJECT_ITEM_PRIV_H__ */
diff --git a/src/runtime/na-object-item.c b/src/runtime/na-object-item.c
index a6f0c0c..c9a578d 100644
--- a/src/runtime/na-object-item.c
+++ b/src/runtime/na-object-item.c
@@ -37,6 +37,7 @@
 
 #include "na-iduplicable.h"
 #include "na-object-api.h"
+#include "na-object-item-priv.h"
 #include "na-utils.h"
 
 /* private class data
@@ -45,27 +46,6 @@ struct NAObjectItemClassPrivate {
 	void *empty;						/* so that gcc -pedantic is happy */
 };
 
-/* private instance data
- */
-struct NAObjectItemPrivate {
-	gboolean       dispose_has_run;
-
-	/* object_item properties
-	 */
-	gchar         *tooltip;
-	gchar         *icon;
-	gboolean       enabled;
-
-	/* list of NAObjectId subitems
-	 */
-	GList         *items;
-
-	/* the original provider
-	 * required to be able to edit/delete the item
-	 */
-	NAIIOProvider *provider;
-};
-
 /* object properties
  */
 enum {
diff --git a/src/runtime/na-object-menu-class.h b/src/runtime/na-object-menu-class.h
index 89b5ea6..5485795 100644
--- a/src/runtime/na-object-menu-class.h
+++ b/src/runtime/na-object-menu-class.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_MENU_CLASS_H__
-#define __NA_OBJECT_MENU_CLASS_H__
+#ifndef __NA_RUNTIME_OBJECT_MENU_CLASS_H__
+#define __NA_RUNTIME_OBJECT_MENU_CLASS_H__
 
 /**
  * SECTION: na_object_menu
@@ -70,4 +70,4 @@ GType         na_object_menu_get_type( void );
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_MENU_CLASS_H__ */
+#endif /* __NA_RUNTIME_OBJECT_MENU_CLASS_H__ */
diff --git a/src/runtime/na-object-menu-fn.h b/src/runtime/na-object-menu-fn.h
index 2311155..0efdae3 100644
--- a/src/runtime/na-object-menu-fn.h
+++ b/src/runtime/na-object-menu-fn.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_MENU_FN_H__
-#define __NA_OBJECT_MENU_FN_H__
+#ifndef __NA_RUNTIME_OBJECT_MENU_FN_H__
+#define __NA_RUNTIME_OBJECT_MENU_FN_H__
 
 /**
  * SECTION: na_object_menu
@@ -54,4 +54,4 @@ void          na_object_menu_set_items_list( NAObjectMenu *menu, GSList *items )
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_MENU_FN_H__ */
+#endif /* __NA_RUNTIME_OBJECT_MENU_FN_H__ */
diff --git a/src/common/na-object-action.h b/src/runtime/na-object-menu-priv.h
similarity index 59%
copy from src/common/na-object-action.h
copy to src/runtime/na-object-menu-priv.h
index 8ea7e5a..6fd07a5 100644
--- a/src/common/na-object-action.h
+++ b/src/runtime/na-object-menu-priv.h
@@ -1,5 +1,5 @@
 /*
- * Nautilus ObjectActions
+ * Nautilus Actions
  * A Nautilus extension which offers configurable context menu actions.
  *
  * Copyright (C) 2005 The GNOME Foundation
@@ -28,32 +28,24 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_ACTION_H__
-#define __NA_OBJECT_ACTION_H__
+#ifndef __NA_RUNTIME_OBJECT_MENU_PRIV_H__
+#define __NA_RUNTIME_OBJECT_MENU_PRIV_H__
 
-/**
- * SECTION: na_object_action
- * @short_description: #NAObjectAction public function declaration.
- * @include: common/na-object-action.h
- */
-
-#include <glib/gi18n.h>
-
-#include "na-object-action-class.h"
-#include "na-object-profile-class.h"
+#include "na-object-menu-class.h"
 
 G_BEGIN_DECLS
 
-NAObjectAction *na_object_action_new( void );
-NAObjectAction *na_object_action_new_with_profile( void );
-
-gboolean        na_object_action_is_readonly( const NAObjectAction *action );
-
-void            na_object_action_set_version( NAObjectAction *action, const gchar *version );
-void            na_object_action_set_readonly( NAObjectAction *action, gboolean readonly );
+/* private instance data
+ */
+struct NAObjectMenuPrivate {
+	gboolean dispose_has_run;
 
-void            na_object_action_attach_profile( NAObjectAction *action, NAObjectProfile *profile );
+	/* this is the list of subitems as a list of id strings
+	 * as readen from IIOProviders
+	 */
+	GSList  *items_ids;
+};
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_ACTION_H__ */
+#endif /* __NA_RUNTIME_OBJECT_MENU_PRIV_H__ */
diff --git a/src/runtime/na-object-menu.c b/src/runtime/na-object-menu.c
index 295178e..8106c1a 100644
--- a/src/runtime/na-object-menu.c
+++ b/src/runtime/na-object-menu.c
@@ -33,6 +33,7 @@
 #endif
 
 #include "na-object-api.h"
+#include "na-object-menu-priv.h"
 #include "na-utils.h"
 
 /* private class data
@@ -41,17 +42,6 @@ struct NAObjectMenuClassPrivate {
 	void *empty;						/* so that gcc -pedantic is happy */
 };
 
-/* private instance data
- */
-struct NAObjectMenuPrivate {
-	gboolean dispose_has_run;
-
-	/* this is the list of subitems as a list of id strings
-	 * as readen from IIOProviders
-	 */
-	GSList  *items_ids;
-};
-
 static NAObjectClass *st_parent_class = NULL;
 
 static GType     register_type( void );
diff --git a/src/common/na-object-action.h b/src/runtime/na-object-priv.h
similarity index 59%
copy from src/common/na-object-action.h
copy to src/runtime/na-object-priv.h
index 8ea7e5a..5f6e25a 100644
--- a/src/common/na-object-action.h
+++ b/src/runtime/na-object-priv.h
@@ -1,5 +1,5 @@
 /*
- * Nautilus ObjectActions
+ * Nautilus Actions
  * A Nautilus extension which offers configurable context menu actions.
  *
  * Copyright (C) 2005 The GNOME Foundation
@@ -28,32 +28,19 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_ACTION_H__
-#define __NA_OBJECT_ACTION_H__
+#ifndef __NA_RUNTIME_OBJECT_PRIV_H__
+#define __NA_RUNTIME_OBJECT_PRIV_H__
 
-/**
- * SECTION: na_object_action
- * @short_description: #NAObjectAction public function declaration.
- * @include: common/na-object-action.h
- */
-
-#include <glib/gi18n.h>
-
-#include "na-object-action-class.h"
-#include "na-object-profile-class.h"
+#include "na-object-class.h"
 
 G_BEGIN_DECLS
 
-NAObjectAction *na_object_action_new( void );
-NAObjectAction *na_object_action_new_with_profile( void );
-
-gboolean        na_object_action_is_readonly( const NAObjectAction *action );
-
-void            na_object_action_set_version( NAObjectAction *action, const gchar *version );
-void            na_object_action_set_readonly( NAObjectAction *action, gboolean readonly );
-
-void            na_object_action_attach_profile( NAObjectAction *action, NAObjectProfile *profile );
+/* private instance data
+ */
+struct NAObjectPrivate {
+	gboolean dispose_has_run;
+};
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_ACTION_H__ */
+#endif /* __NA_RUNTIME_OBJECT_PRIV_H__ */
diff --git a/src/runtime/na-object-profile-class.h b/src/runtime/na-object-profile-class.h
index ce1af23..e80b43a 100644
--- a/src/runtime/na-object-profile-class.h
+++ b/src/runtime/na-object-profile-class.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_PROFILE_CLASS_H__
-#define __NA_OBJECT_PROFILE_CLASS_H__
+#ifndef __NA_RUNTIME_OBJECT_PROFILE_CLASS_H__
+#define __NA_RUNTIME_OBJECT_PROFILE_CLASS_H__
 
 /**
  * SECTION: na_object_profile
@@ -74,4 +74,4 @@ GType na_object_profile_get_type( void );
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_PROFILE_CLASS_H__ */
+#endif /* __NA_RUNTIME_OBJECT_PROFILE_CLASS_H__ */
diff --git a/src/runtime/na-object-profile-fn.h b/src/runtime/na-object-profile-fn.h
index 1e3699f..f0aa9cd 100644
--- a/src/runtime/na-object-profile-fn.h
+++ b/src/runtime/na-object-profile-fn.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_PROFILE_FN_H__
-#define __NA_OBJECT_PROFILE_FN_H__
+#ifndef __NA_RUNTIME_OBJECT_PROFILE_FN_H__
+#define __NA_RUNTIME_OBJECT_PROFILE_FN_H__
 
 /**
  * SECTION: na_object_profile
@@ -83,4 +83,4 @@ gchar           *na_object_profile_parse_parameters( const NAObjectProfile *prof
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_PROFILE_FN_H__ */
+#endif /* __NA_RUNTIME_OBJECT_PROFILE_FN_H__ */
diff --git a/src/common/na-object-action.h b/src/runtime/na-object-profile-priv.h
similarity index 61%
rename from src/common/na-object-action.h
rename to src/runtime/na-object-profile-priv.h
index 8ea7e5a..41044ca 100644
--- a/src/common/na-object-action.h
+++ b/src/runtime/na-object-profile-priv.h
@@ -1,5 +1,5 @@
 /*
- * Nautilus ObjectActions
+ * Nautilus Actions
  * A Nautilus extension which offers configurable context menu actions.
  *
  * Copyright (C) 2005 The GNOME Foundation
@@ -28,32 +28,35 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_OBJECT_ACTION_H__
-#define __NA_OBJECT_ACTION_H__
+#ifndef __NA_RUNTIME_OBJECT_PROFILE_PRIV_H__
+#define __NA_RUNTIME_OBJECT_PROFILE_PRIV_H__
 
-/**
- * SECTION: na_object_action
- * @short_description: #NAObjectAction public function declaration.
- * @include: common/na-object-action.h
- */
-
-#include <glib/gi18n.h>
-
-#include "na-object-action-class.h"
 #include "na-object-profile-class.h"
 
 G_BEGIN_DECLS
 
-NAObjectAction *na_object_action_new( void );
-NAObjectAction *na_object_action_new_with_profile( void );
-
-gboolean        na_object_action_is_readonly( const NAObjectAction *action );
-
-void            na_object_action_set_version( NAObjectAction *action, const gchar *version );
-void            na_object_action_set_readonly( NAObjectAction *action, gboolean readonly );
-
-void            na_object_action_attach_profile( NAObjectAction *action, NAObjectProfile *profile );
+/* private instance data
+ */
+struct NAObjectProfilePrivate {
+	gboolean        dispose_has_run;
+
+	/* the NAObjectAction object
+	 */
+	NAObjectAction *action;
+
+	/* profile properties
+	 */
+	gchar          *path;
+	gchar          *parameters;
+	GSList         *basenames;
+	gboolean        match_case;
+	GSList         *mimetypes;
+	gboolean        is_file;
+	gboolean        is_dir;
+	gboolean        accept_multiple;
+	GSList         *schemes;
+};
 
 G_END_DECLS
 
-#endif /* __NA_OBJECT_ACTION_H__ */
+#endif /* __NA_RUNTIME_OBJECT_PROFILE_PRIV_H__ */
diff --git a/src/runtime/na-object-profile.c b/src/runtime/na-object-profile.c
index ee9af2e..0346bbb 100644
--- a/src/runtime/na-object-profile.c
+++ b/src/runtime/na-object-profile.c
@@ -38,6 +38,7 @@
 
 #include "na-iduplicable.h"
 #include "na-object-api.h"
+#include "na-object-profile-priv.h"
 #include "na-gnome-vfs-uri.h"
 #include "na-utils.h"
 
@@ -47,28 +48,6 @@ struct NAObjectProfileClassPrivate {
 	void *empty;						/* so that gcc -pedantic is happy */
 };
 
-/* private instance data
- */
-struct NAObjectProfilePrivate {
-	gboolean        dispose_has_run;
-
-	/* the NAObjectAction object
-	 */
-	NAObjectAction *action;
-
-	/* profile properties
-	 */
-	gchar          *path;
-	gchar          *parameters;
-	GSList         *basenames;
-	gboolean        match_case;
-	GSList         *mimetypes;
-	gboolean        is_file;
-	gboolean        is_dir;
-	gboolean        accept_multiple;
-	GSList         *schemes;
-};
-
 /* profile properties
  */
 enum {
diff --git a/src/runtime/na-object.c b/src/runtime/na-object.c
index 8304f5c..2945ab1 100644
--- a/src/runtime/na-object.c
+++ b/src/runtime/na-object.c
@@ -36,6 +36,7 @@
 
 #include "na-object-api.h"
 #include "na-iduplicable.h"
+#include "na-object-priv.h"
 
 /* private class data
  */
@@ -43,12 +44,6 @@ struct NAObjectClassPrivate {
 	void *empty;						/* so that gcc -pedantic is happy */
 };
 
-/* private instance data
- */
-struct NAObjectPrivate {
-	gboolean dispose_has_run;
-};
-
 static GObjectClass *st_parent_class = NULL;
 
 static GType          register_type( void );
@@ -75,7 +70,6 @@ static gboolean       do_is_valid( const NAObject *object );
 static void           dump_hierarchy( const NAObject *object );
 static void           dump_tree( GList *tree, gint level );
 static gboolean       is_valid_hierarchy( const NAObject *object );
-static GList         *most_derived_get_childs( const NAObject *object );
 static NAObject      *most_derived_new( const NAObject *object );
 
 GType
@@ -283,6 +277,34 @@ na_object_iduplicable_duplicate( const NAObject *object )
 }
 
 /**
+ * na_object_iduplicable_are_equal:
+ * @a: a first #NAObject object.
+ * @b: a second #NAObject object to be compared to the first one.
+ *
+ * Compares the two #NAObject objects.
+ *
+ * At least when it finds that @a and @b are equal, each derived
+ * class should call its parent class to give it an opportunity to
+ * detect a difference.
+ *
+ * Returns: %TRUE if @a and @b are identical, %FALSE else.
+ */
+gboolean
+na_object_iduplicable_are_equal( const NAObject *a, const NAObject *b )
+{
+	gboolean are_equal = FALSE;
+
+	g_return_val_if_fail( NA_IS_OBJECT( a ), FALSE );
+	g_return_val_if_fail( NA_IS_OBJECT( b ), FALSE );
+
+	if( !a->private->dispose_has_run && !b->private->dispose_has_run ){
+		are_equal = are_equal_hierarchy( a, b );
+	}
+
+	return( are_equal );
+}
+
+/**
  * na_object_iduplicable_is_modified:
  * @object: the #NAObject object whose status is requested.
  *
@@ -370,6 +392,36 @@ na_object_object_dump_tree( GList *tree )
 }
 
 /**
+ * na_object_most_derived_get_childs:
+ * @object: this #NAObject instance.
+ *
+ * Returns: the list of childs as returned by the most derived class
+ * which implements the virtual function 'get_childs'.
+ *
+ * The returned list should be g_list_free() by the caller.
+ */
+GList *
+na_object_most_derived_get_childs( const NAObject *object )
+{
+	GList *childs;
+	GList *hierarchy, *ih;
+	gboolean found;
+
+	found = FALSE;
+	childs = NULL;
+	hierarchy = g_list_reverse( na_object_get_hierarchy( object ));
+
+	for( ih = hierarchy ; ih && !found ; ih = ih->next ){
+		if( NA_OBJECT_CLASS( ih->data )->get_childs ){
+			childs = NA_OBJECT_CLASS( ih->data )->get_childs( object );
+			found = TRUE;
+		}
+	}
+
+	return( childs );
+}
+
+/**
  * na_object_get_hierarchy:
  *
  * Returns the class hierarchy,
@@ -467,7 +519,7 @@ iduplicable_is_valid( const NAIDuplicable *object )
 static GList *
 v_get_childs( const NAObject *object ){
 
-	return( most_derived_get_childs( object ));
+	return( na_object_most_derived_get_childs( object ));
 }
 
 static gboolean
@@ -617,27 +669,6 @@ is_valid_hierarchy( const NAObject *object )
 	return( is_valid );
 }
 
-static GList *
-most_derived_get_childs( const NAObject *object )
-{
-	GList *childs;
-	GList *hierarchy, *ih;
-	gboolean found;
-
-	found = FALSE;
-	childs = NULL;
-	hierarchy = g_list_reverse( na_object_get_hierarchy( object ));
-
-	for( ih = hierarchy ; ih && !found ; ih = ih->next ){
-		if( NA_OBJECT_CLASS( ih->data )->get_childs ){
-			childs = NA_OBJECT_CLASS( ih->data )->get_childs( object );
-			found = TRUE;
-		}
-	}
-
-	return( childs );
-}
-
 static NAObject *
 most_derived_new( const NAObject *object )
 {
diff --git a/src/runtime/na-pivot.h b/src/runtime/na-pivot.h
index 3df9471..ccc4a4f 100644
--- a/src/runtime/na-pivot.h
+++ b/src/runtime/na-pivot.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_PIVOT_H__
-#define __NA_PIVOT_H__
+#ifndef __NA_RUNTIME_PIVOT_H__
+#define __NA_RUNTIME_PIVOT_H__
 
 /**
  * SECTION: na_pivot
@@ -150,4 +150,4 @@ void       na_pivot_free_notify( NAPivotNotify *data );
 
 G_END_DECLS
 
-#endif /* __NA_PIVOT_H__ */
+#endif /* __NA_RUNTIME_PIVOT_H__ */
diff --git a/src/runtime/na-utils.h b/src/runtime/na-utils.h
index 5e91179..65b323f 100644
--- a/src/runtime/na-utils.h
+++ b/src/runtime/na-utils.h
@@ -28,8 +28,8 @@
  *   ... and many others (see AUTHORS)
  */
 
-#ifndef __NA_UTILS_H__
-#define __NA_UTILS_H__
+#ifndef __NA_RUNTIME_UTILS_H__
+#define __NA_RUNTIME_UTILS_H__
 
 #include <glib.h>
 
@@ -52,4 +52,4 @@ gchar   *na_utils_path_extract_last_dir( const gchar *path );
 
 G_END_DECLS
 
-#endif /* __NA_UTILS_H__ */
+#endif /* __NA_RUNTIME_UTILS_H__ */
diff --git a/src/test/Makefile.am b/src/test/Makefile.am
index 70f7359..92c53fe 100644
--- a/src/test/Makefile.am
+++ b/src/test/Makefile.am
@@ -59,7 +59,7 @@ test_parse_uris_SOURCES = \
 	$(NULL)
 
 test_parse_uris_LDADD = \
-	$(top_builddir)/src/common/libna-runtime.la		\
+	$(top_builddir)/src/runtime/libna-runtime.la	\
 	$(NAUTILUS_ACTIONS_LIBS)						\
 	$(NULL)
 
@@ -68,7 +68,6 @@ test_virtuals_SOURCES = \
 	$(NULL)
 
 test_virtuals_LDADD = \
-	$(top_builddir)/src/common/libna-runtime.la		\
 	$(NAUTILUS_ACTIONS_LIBS)						\
 	$(NULL)
 
@@ -77,7 +76,6 @@ test_virtuals_without_test_SOURCES = \
 	$(NULL)
 
 test_virtuals_Lwithout_test_DADD = \
-	$(top_builddir)/src/common/libnact.la			\
 	$(NAUTILUS_ACTIONS_LIBS)						\
 	$(NULL)
 	
\ No newline at end of file
diff --git a/src/test/test-parse-uris.c b/src/test/test-parse-uris.c
index 848c41b..7f55aed 100644
--- a/src/test/test-parse-uris.c
+++ b/src/test/test-parse-uris.c
@@ -37,7 +37,7 @@
 #include <glib/gi18n.h>
 #include <stdlib.h>
 
-#include <common/na-gnome-vfs-uri.h>
+#include <runtime/na-gnome-vfs-uri.h>
 
 static const gchar *uris[] = {
 		"http://robert:azerty01 mon domain com/path/to/a/document?query#anchor",
diff --git a/src/utils/Makefile.am b/src/utils/Makefile.am
index cd2d10d..0a37e4f 100644
--- a/src/utils/Makefile.am
+++ b/src/utils/Makefile.am
@@ -44,7 +44,7 @@ nautilus_actions_new_SOURCES = \
 
 nautilus_actions_new_LDADD = \
 	$(top_builddir)/src/common/libna-common.la		\
-	$(top_builddir)/src/common/libna-runtime.la		\
+	$(top_builddir)/src/runtime/libna-runtime.la	\
 	$(NAUTILUS_ACTIONS_LIBS)						\
 	$(NULL)
 
@@ -54,6 +54,6 @@ nautilus_actions_schemas_SOURCES = \
 
 nautilus_actions_schemas_LDADD = \
 	$(top_builddir)/src/common/libna-common.la		\
-	$(top_builddir)/src/common/libna-runtime.la		\
+	$(top_builddir)/src/runtime/libna-runtime.la	\
 	$(NAUTILUS_ACTIONS_LIBS)						\
 	$(NULL)
diff --git a/src/utils/nautilus-actions-new.c b/src/utils/nautilus-actions-new.c
index 9ff257f..2ffe667 100644
--- a/src/utils/nautilus-actions-new.c
+++ b/src/utils/nautilus-actions-new.c
@@ -36,11 +36,10 @@
 #include <glib/gi18n.h>
 #include <stdlib.h>
 
+#include <runtime/na-gconf-provider.h>
+#include <runtime/na-iio-provider.h>
+
 #include <common/na-object-api.h>
-#include <common/na-object-action.h>
-#include <common/na-object-profile.h>
-#include <common/na-gconf-provider.h>
-#include <common/na-iio-provider.h>
 #include <common/na-xml-names.h>
 #include <common/na-xml-writer.h>
 



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