[aravis/dom] dom: rename arv_gc_node to arv_gc_feature_node.



commit 55dc90f6a2e180fa42eb5ff71684e8cf2fa06c99
Author: Emmanuel Pacaud <emmanuel gnome org>
Date:   Tue Feb 28 14:36:47 2012 +0100

    dom: rename arv_gc_node to arv_gc_feature_node.

 docs/reference/aravis/aravis.types      |    2 +-
 src/Makefile.am                         |    4 +-
 src/arv.h                               |    2 +-
 src/arvcamera.c                         |    2 +-
 src/arvdevice.c                         |   20 ++--
 src/arvdevice.h                         |    2 +-
 src/arvgc.c                             |   46 +++++-----
 src/arvgc.h                             |    2 +-
 src/arvgcboolean.c                      |   26 +++---
 src/arvgcboolean.h                      |    8 +-
 src/arvgccategory.c                     |    8 +-
 src/arvgccategory.h                     |    8 +-
 src/arvgccommand.c                      |   20 ++--
 src/arvgccommand.h                      |    8 +-
 src/arvgcconverter.c                    |   48 +++++-----
 src/arvgcconverter.h                    |   10 +-
 src/arvgcenumentry.c                    |   14 ++--
 src/arvgcenumentry.h                    |    8 +-
 src/arvgcenumeration.c                  |   52 +++++-----
 src/arvgcenumeration.h                  |    8 +-
 src/{arvgcnode.c => arvgcfeaturenode.c} |  154 +++++++++++++++---------------
 src/arvgcfeaturenode.h                  |   86 +++++++++++++++++
 src/arvgcfloatnode.c                    |   40 ++++----
 src/arvgcfloatnode.h                    |    8 +-
 src/arvgcintegernode.c                  |   40 ++++----
 src/arvgcintegernode.h                  |    8 +-
 src/arvgcnode.h                         |   86 -----------------
 src/arvgcport.c                         |    8 +-
 src/arvgcport.h                         |    8 +-
 src/arvgcpropertynode.c                 |    2 +-
 src/arvgcregister.c                     |   66 +++++++-------
 src/arvgcregister.h                     |   16 ++--
 src/arvgcregisterdescriptionnode.h      |    6 +-
 src/arvgcswissknife.c                   |   30 +++---
 src/arvgcswissknife.h                   |   10 +-
 src/arvtool.c                           |   18 ++--
 src/arvtypes.h                          |    2 +-
 tests/arvgenicamtest.c                  |    2 +-
 tests/arvheartbeattest.c                |    6 +-
 tests/arvtest.c                         |    2 +-
 tests/fake.c                            |    2 +-
 tests/genicam.c                         |   14 ++--
 viewer/arvfeaturewidget.c               |    4 +-
 viewer/arvfeaturewidget.h               |    2 +-
 44 files changed, 459 insertions(+), 459 deletions(-)
---
diff --git a/docs/reference/aravis/aravis.types b/docs/reference/aravis/aravis.types
index 8bb797b..aafbed8 100644
--- a/docs/reference/aravis/aravis.types
+++ b/docs/reference/aravis/aravis.types
@@ -17,7 +17,7 @@ arv_gc_float_node_get_type
 arv_gc_get_type
 arv_gc_integer_get_type
 arv_gc_integer_node_get_type
-arv_gc_node_get_type
+arv_gc_feature_node_get_type
 arv_gc_port_get_type
 arv_gc_register_get_type
 arv_gc_string_get_type
diff --git a/src/Makefile.am b/src/Makefile.am
index 8be286b..310075c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -45,8 +45,8 @@ ARAVIS_SRCS =					\
 	arvdomimplementation.c			\
 	arvcamera.c				\
 	arvgc.c					\
-	arvgcnode.c				\
 	arvgcpropertynode.c			\
+	arvgcfeaturenode.c			\
 	arvgcregisterdescriptionnode.c		\
 	arvgccategory.c				\
 	arvgcboolean.c				\
@@ -100,8 +100,8 @@ ARAVIS_HDRS = 					\
 	arvdomimplementation.h			\
 	arvcamera.h				\
 	arvgc.h					\
-	arvgcnode.h				\
 	arvgcpropertynode.h			\
+	arvgcfeaturenode.h			\
 	arvgcregisterdescriptionnode.h		\
 	arvgccategory.h				\
 	arvgcboolean.h				\
diff --git a/src/arv.h b/src/arv.h
index b24d5fe..87e284f 100644
--- a/src/arv.h
+++ b/src/arv.h
@@ -40,7 +40,7 @@
 #include <arvdomparser.h>
 #include <arvcamera.h>
 #include <arvgc.h>
-#include <arvgcnode.h>
+#include <arvgcfeaturenode.h>
 #include <arvgccategory.h>
 #include <arvgcboolean.h>
 #include <arvgcenumeration.h>
diff --git a/src/arvcamera.c b/src/arvcamera.c
index aa9c898..782e369 100644
--- a/src/arvcamera.c
+++ b/src/arvcamera.c
@@ -347,7 +347,7 @@ arv_camera_get_pixel_format (ArvCamera *camera)
 gint64 *
 arv_camera_get_available_pixel_formats (ArvCamera *camera, guint *n_pixel_formats)
 {
-	ArvGcNode *enumeration;
+	ArvGcFeatureNode *enumeration;
 
 	g_return_val_if_fail (ARV_IS_CAMERA (camera), NULL);
 
diff --git a/src/arvdevice.c b/src/arvdevice.c
index e418f9c..9cd6b9f 100644
--- a/src/arvdevice.c
+++ b/src/arvdevice.c
@@ -150,7 +150,7 @@ void
 arv_device_execute_command (ArvDevice *device, const char *feature)
 {
 	ArvGc *genicam;
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	genicam = arv_device_get_genicam (device);
 	g_return_if_fail (ARV_IS_GC (genicam));
@@ -168,7 +168,7 @@ arv_device_execute_command (ArvDevice *device, const char *feature)
  * Return value: (transfer none): the genicam node corresponding to the feature name, NULL if not found.
  */
 
-ArvGcNode *
+ArvGcFeatureNode *
 arv_device_get_feature (ArvDevice *device, const char *feature)
 {
 	ArvGc *genicam;
@@ -182,7 +182,7 @@ arv_device_get_feature (ArvDevice *device, const char *feature)
 void
 arv_device_set_string_feature_value (ArvDevice *device, const char *feature, const char *value)
 {
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	node = arv_device_get_feature (device, feature);
 
@@ -195,7 +195,7 @@ arv_device_set_string_feature_value (ArvDevice *device, const char *feature, con
 const char *
 arv_device_get_string_feature_value (ArvDevice *device, const char *feature)
 {
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	node = arv_device_get_feature (device, feature);
 
@@ -210,7 +210,7 @@ arv_device_get_string_feature_value (ArvDevice *device, const char *feature)
 void
 arv_device_set_integer_feature_value (ArvDevice *device, const char *feature, gint64 value)
 {
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	node = arv_device_get_feature (device, feature);
 
@@ -225,7 +225,7 @@ arv_device_set_integer_feature_value (ArvDevice *device, const char *feature, gi
 gint64
 arv_device_get_integer_feature_value (ArvDevice *device, const char *feature)
 {
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	node = arv_device_get_feature (device, feature);
 
@@ -242,7 +242,7 @@ arv_device_get_integer_feature_value (ArvDevice *device, const char *feature)
 void
 arv_device_get_integer_feature_bounds (ArvDevice *device, const char *feature, gint64 *min, gint64 *max)
 {
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	node = arv_device_get_feature (device, feature);
 
@@ -258,7 +258,7 @@ arv_device_get_integer_feature_bounds (ArvDevice *device, const char *feature, g
 void
 arv_device_set_float_feature_value (ArvDevice *device, const char *feature, double value)
 {
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	node = arv_device_get_feature (device, feature);
 
@@ -269,7 +269,7 @@ arv_device_set_float_feature_value (ArvDevice *device, const char *feature, doub
 double
 arv_device_get_float_feature_value (ArvDevice *device, const char *feature)
 {
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	node = arv_device_get_feature (device, feature);
 
@@ -282,7 +282,7 @@ arv_device_get_float_feature_value (ArvDevice *device, const char *feature)
 void
 arv_device_get_float_feature_bounds (ArvDevice *device, const char *feature, double *min, double *max)
 {
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	node = arv_device_get_feature (device, feature);
 
diff --git a/src/arvdevice.h b/src/arvdevice.h
index 02560eb..ebb628e 100644
--- a/src/arvdevice.h
+++ b/src/arvdevice.h
@@ -73,7 +73,7 @@ ArvGc *		arv_device_get_genicam			(ArvDevice *device);
 
 void 		arv_device_execute_command 		(ArvDevice *device, const char *feature);
 
-ArvGcNode *	arv_device_get_feature			(ArvDevice *device, const char *feature);
+ArvGcFeatureNode *	arv_device_get_feature			(ArvDevice *device, const char *feature);
 
 void		arv_device_set_string_feature_value	(ArvDevice *device, const char *feature, const char *value);
 const char *	arv_device_get_string_feature_value	(ArvDevice *device, const char *feature);
diff --git a/src/arvgc.c b/src/arvgc.c
index 04dfce0..c42eb1c 100644
--- a/src/arvgc.c
+++ b/src/arvgc.c
@@ -119,10 +119,10 @@ arv_gc_create_element (ArvDomDocument *document, const char *tag_name)
 }
 
 #if 0
-static ArvGcNode *
+static ArvGcFeatureNode *
 arv_gc_create_node (ArvGc *genicam, const char *type)
 {
-	ArvGcNode *node = NULL;
+	ArvGcFeatureNode *node = NULL;
 
 	g_return_val_if_fail (type != NULL, NULL);
 
@@ -160,7 +160,7 @@ arv_gc_create_node (ArvGc *genicam, const char *type)
 		node = arv_gc_port_new ();
 
 	if (node != NULL) {
-		arv_gc_node_set_genicam (node, genicam);
+		arv_gc_feature_node_set_genicam (node, genicam);
 		arv_log_genicam ("[Gc::create_node] Node '%s' created", type);
 	}
 
@@ -170,8 +170,8 @@ arv_gc_create_node (ArvGc *genicam, const char *type)
 typedef struct {
 	int level;
 	ArvGc *genicam;
-	ArvGcNode *level_2_node;
-	ArvGcNode *level_3_node;
+	ArvGcFeatureNode *level_2_node;
+	ArvGcFeatureNode *level_3_node;
 
 	const char *current_element;
 	char **current_attrs;
@@ -206,7 +206,7 @@ arv_gc_parser_start_element(void *user_data,
 			    const xmlChar **attrs)
 {
 	ArvGcParserState *state = user_data;
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	/* Just ignore Group elements */
 	if (g_strcmp0 ((char *) name, "Group") == 0)
@@ -218,7 +218,7 @@ arv_gc_parser_start_element(void *user_data,
 	if (node != NULL) {
 		int i;
 		for (i = 0; attrs[i] != NULL && attrs[i+1] != NULL; i += 2)
-			arv_gc_node_set_attribute (node, (char *) attrs[i], (char *) attrs[i+1]);
+			arv_gc_feature_node_set_attribute (node, (char *) attrs[i], (char *) attrs[i+1]);
 	}
 
 	if (state->level == 2) {
@@ -256,11 +256,11 @@ arv_gc_parser_start_element(void *user_data,
 }
 
 static void
-arv_gc_parser_insert_node (ArvGcParserState *state, ArvGcNode *node)
+arv_gc_parser_insert_node (ArvGcParserState *state, ArvGcFeatureNode *node)
 {
 	const char *node_name;
 
-	node_name = arv_gc_node_get_name (node);
+	node_name = arv_gc_feature_node_get_name (node);
 	if (node_name != NULL) {
 		g_hash_table_insert (state->genicam->nodes, (char *) node_name, node);
 		arv_log_genicam ("[GcParser::end_element] Insert node '%s'", node_name);
@@ -286,16 +286,16 @@ arv_gc_parser_end_element (void *user_data,
 	} else if (state->level > 2) {
 		if (state->level == 3 && state->level_3_node != NULL) {
 			if (state->level_2_node != NULL &&
-			    arv_gc_node_can_add_child (state->level_2_node, state->level_3_node))
-				arv_gc_node_add_child (state->level_2_node, state->level_3_node);
+			    arv_gc_feature_node_can_add_child (state->level_2_node, state->level_3_node))
+				arv_gc_feature_node_add_child (state->level_2_node, state->level_3_node);
 			else
 				g_object_unref (state->level_3_node);
 			state->level_3_node = NULL;
 		} else if (state->level == 3 && state->level_2_node != NULL) {
-			arv_gc_node_add_element (state->level_2_node, state->current_element,
+			arv_gc_feature_node_add_element (state->level_2_node, state->current_element,
 						 state->current_content->str, (const char **) state->current_attrs);
 		} else if (state->level == 4 && state->level_3_node != NULL) {
-			arv_gc_node_add_element (state->level_3_node, state->current_element,
+			arv_gc_feature_node_add_element (state->level_3_node, state->current_element,
 						 state->current_content->str, (const char **) state->current_attrs);
 		}
 	}
@@ -371,12 +371,12 @@ arv_gc_parse_xml (ArvGc *genicam, const char *xml, size_t size)
  * arv_gc_get_node:
  * @genicam: a #ArvGc object
  * @name: node name
- * Return value: (transfer none): a #ArvGcNode, null if not found.
+ * Return value: (transfer none): a #ArvGcFeatureNode, null if not found.
  *
  * Retrieves a genicam node by name.
  */
 
-ArvGcNode *
+ArvGcFeatureNode *
 arv_gc_get_node	(ArvGc *genicam, const char *name)
 {
 	g_return_val_if_fail (ARV_IS_GC (genicam), NULL);
@@ -409,14 +409,14 @@ arv_gc_get_int64_from_value (ArvGc *genicam, GValue *value)
 	if (G_VALUE_HOLDS_INT64 (value))
 		return g_value_get_int64 (value);
 	else if (G_VALUE_HOLDS_STRING (value)) {
-		ArvGcNode *node;
+		ArvGcFeatureNode *node;
 
 		node = arv_gc_get_node (genicam, g_value_get_string (value));
 		if (ARV_IS_GC_INTEGER (node))
 			return arv_gc_integer_get_value (ARV_GC_INTEGER (node));
 		else
 			arv_warning_genicam ("[Gc::set_int64_to_value] Invalid node '%s'",
-					     arv_gc_node_get_name (node));
+					     arv_gc_feature_node_get_name (node));
 	}
 
 	return 0;
@@ -431,14 +431,14 @@ arv_gc_set_int64_to_value (ArvGc *genicam, GValue *value, gint64 v_int64)
 	if (G_VALUE_HOLDS_INT64 (value))
 		return g_value_set_int64 (value, v_int64);
 	else if (G_VALUE_HOLDS_STRING (value)) {
-		ArvGcNode *node;
+		ArvGcFeatureNode *node;
 
 		node = arv_gc_get_node (genicam, g_value_get_string (value));
 		if (ARV_IS_GC_INTEGER (node))
 			arv_gc_integer_set_value (ARV_GC_INTEGER (node), v_int64);
 		else
 			arv_warning_genicam ("[Gc::set_int64_to_value] Invalid node '%s'",
-					     arv_gc_node_get_name (node));
+					     arv_gc_feature_node_get_name (node));
 	}
 }
 
@@ -451,14 +451,14 @@ arv_gc_get_double_from_value (ArvGc *genicam, GValue *value)
 	if (G_VALUE_HOLDS_DOUBLE (value))
 		return g_value_get_double (value);
 	else if (G_VALUE_HOLDS_STRING (value)) {
-		ArvGcNode *node;
+		ArvGcFeatureNode *node;
 
 		node = arv_gc_get_node (genicam, g_value_get_string (value));
 		if (ARV_IS_GC_FLOAT (node))
 			return arv_gc_float_get_value (ARV_GC_FLOAT (node));
 		else
 			arv_warning_genicam ("[Gc::set_double_to_value] Invalid node '%s'",
-					     arv_gc_node_get_name (node));
+					     arv_gc_feature_node_get_name (node));
 	}
 
 	return 0.0;
@@ -473,14 +473,14 @@ arv_gc_set_double_to_value (ArvGc *genicam, GValue *value, double v_double)
 	if (G_VALUE_HOLDS_DOUBLE (value))
 		return g_value_set_double (value, v_double);
 	else if (G_VALUE_HOLDS_STRING (value)) {
-		ArvGcNode *node;
+		ArvGcFeatureNode *node;
 
 		node = arv_gc_get_node (genicam, g_value_get_string (value));
 		if (ARV_IS_GC_FLOAT (node))
 			arv_gc_float_set_value (ARV_GC_FLOAT (node), v_double);
 		else
 			arv_warning_genicam ("[Gc::set_double_to_value] Invalid node '%s'",
-					     arv_gc_node_get_name (node));
+					     arv_gc_feature_node_get_name (node));
 	}
 }
 
diff --git a/src/arvgc.h b/src/arvgc.h
index fe59406..0d05950 100644
--- a/src/arvgc.h
+++ b/src/arvgc.h
@@ -56,7 +56,7 @@ gint64 			arv_gc_get_int64_from_value 	(ArvGc *genicam, GValue *value);
 void 			arv_gc_set_int64_to_value 	(ArvGc *genicam, GValue *value, gint64 v_int64);
 double 			arv_gc_get_double_from_value 	(ArvGc *genicam, GValue *value);
 void 			arv_gc_set_double_to_value 	(ArvGc *genicam, GValue *value, double v_double);
-ArvGcNode *		arv_gc_get_node			(ArvGc *genicam, const char *name);
+ArvGcFeatureNode *		arv_gc_get_node			(ArvGc *genicam, const char *name);
 ArvDevice *		arv_gc_get_device		(ArvGc *genicam);
 
 G_END_DECLS
diff --git a/src/arvgcboolean.c b/src/arvgcboolean.c
index de463c3..0f52f79 100644
--- a/src/arvgcboolean.c
+++ b/src/arvgcboolean.c
@@ -40,10 +40,10 @@ arv_gc_boolean_get_node_name (ArvDomNode *node)
 	return "Boolean";
 }
 
-/* ArvGcNode implementation */
+/* ArvGcFeatureNode implementation */
 
 static void
-arv_gc_boolean_add_element (ArvGcNode *node, const char *name, const char *content, const char **attributes)
+arv_gc_boolean_add_element (ArvGcFeatureNode *node, const char *name, const char *content, const char **attributes)
 {
 	ArvGcBoolean *gc_boolean = ARV_GC_BOOLEAN (node);
 
@@ -57,17 +57,17 @@ arv_gc_boolean_add_element (ArvGcNode *node, const char *name, const char *conte
 	} else if (strcmp (name, "OffValue") == 0) {
 		gc_boolean->off_value = g_ascii_strtoll (content, NULL, 0);
 	} else
-		ARV_GC_NODE_CLASS (parent_class)->add_element (node, name, content, attributes);
+		ARV_GC_FEATURE_NODE_CLASS (parent_class)->add_element (node, name, content, attributes);
 }
 
 static void
-arv_gc_boolean_set_value_from_string (ArvGcNode *node, const char *string)
+arv_gc_boolean_set_value_from_string (ArvGcFeatureNode *node, const char *string)
 {
 	arv_gc_boolean_set_value (ARV_GC_BOOLEAN (node), g_strcmp0 (string, "true") == 0);
 }
 
 static const char *
-arv_gc_boolean_get_value_as_string (ArvGcNode *node)
+arv_gc_boolean_get_value_as_string (ArvGcFeatureNode *node)
 {
 	return arv_gc_boolean_get_value (ARV_GC_BOOLEAN (node)) ? "true" : "false";
 }
@@ -79,7 +79,7 @@ arv_gc_boolean_get_value (ArvGcBoolean *gc_boolean)
 {
 	g_return_val_if_fail (ARV_IS_GC_BOOLEAN (gc_boolean), FALSE);
 
-	return arv_gc_get_int64_from_value (arv_gc_node_get_genicam (ARV_GC_NODE (gc_boolean)),
+	return arv_gc_get_int64_from_value (arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_boolean)),
 					    &gc_boolean->value) == gc_boolean->on_value;
 }
 
@@ -88,15 +88,15 @@ arv_gc_boolean_set_value (ArvGcBoolean *gc_boolean, gboolean v_boolean)
 {
 	g_return_if_fail (ARV_IS_GC_BOOLEAN (gc_boolean));
 
-	arv_gc_set_int64_to_value (arv_gc_node_get_genicam (ARV_GC_NODE (gc_boolean)),
+	arv_gc_set_int64_to_value (arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_boolean)),
 				   &gc_boolean->value,
 				   v_boolean ? gc_boolean->on_value : gc_boolean->off_value);
 }
 
-ArvGcNode *
+ArvGcFeatureNode *
 arv_gc_boolean_new (void)
 {
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	node = g_object_new (ARV_TYPE_GC_BOOLEAN, NULL);
 
@@ -127,15 +127,15 @@ arv_gc_boolean_class_init (ArvGcBooleanClass *this_class)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (this_class);
 	ArvDomNodeClass *dom_node_class = ARV_DOM_NODE_CLASS (this_class);
-	ArvGcNodeClass *gc_node_class = ARV_GC_NODE_CLASS (this_class);
+	ArvGcFeatureNodeClass *gc_feature_node_class = ARV_GC_FEATURE_NODE_CLASS (this_class);
 
 	parent_class = g_type_class_peek_parent (this_class);
 
 	object_class->finalize = arv_gc_boolean_finalize;
 	dom_node_class->get_node_name = arv_gc_boolean_get_node_name;
-	gc_node_class->add_element = arv_gc_boolean_add_element;
-	gc_node_class->set_value_from_string = arv_gc_boolean_set_value_from_string;
-	gc_node_class->get_value_as_string = arv_gc_boolean_get_value_as_string;
+	gc_feature_node_class->add_element = arv_gc_boolean_add_element;
+	gc_feature_node_class->set_value_from_string = arv_gc_boolean_set_value_from_string;
+	gc_feature_node_class->get_value_as_string = arv_gc_boolean_get_value_as_string;
 }
 
 /* ArvGcInteger interface implementation */
diff --git a/src/arvgcboolean.h b/src/arvgcboolean.h
index 3436325..5f3666c 100644
--- a/src/arvgcboolean.h
+++ b/src/arvgcboolean.h
@@ -24,7 +24,7 @@
 #define ARV_GC_BOOLEAN_H
 
 #include <arvtypes.h>
-#include <arvgcnode.h>
+#include <arvgcfeaturenode.h>
 
 G_BEGIN_DECLS
 
@@ -38,7 +38,7 @@ G_BEGIN_DECLS
 typedef struct _ArvGcBooleanClass ArvGcBooleanClass;
 
 struct _ArvGcBoolean {
-	ArvGcNode	node;
+	ArvGcFeatureNode	node;
 
 	GValue value;
 	gint64 on_value;
@@ -46,12 +46,12 @@ struct _ArvGcBoolean {
 };
 
 struct _ArvGcBooleanClass {
-	ArvGcNodeClass parent_class;
+	ArvGcFeatureNodeClass parent_class;
 };
 
 GType 		arv_gc_boolean_get_type 	(void);
 
-ArvGcNode * 	arv_gc_boolean_new 		(void);
+ArvGcFeatureNode * 	arv_gc_boolean_new 		(void);
 gboolean 	arv_gc_boolean_get_value 	(ArvGcBoolean *gc_boolean);
 void 		arv_gc_boolean_set_value 	(ArvGcBoolean *gc_boolean, gboolean v_boolean);
 
diff --git a/src/arvgccategory.c b/src/arvgccategory.c
index e8280b2..f38acbf 100644
--- a/src/arvgccategory.c
+++ b/src/arvgccategory.c
@@ -73,17 +73,17 @@ arv_gc_category_get_features (ArvGcCategory *category)
 	for (iter = arv_dom_node_get_first_child (ARV_DOM_NODE (category));
 	     iter != NULL;
 	     iter = arv_dom_node_get_next_sibling (iter))
-		if (g_strcmp0 (arv_gc_node_get_name (ARV_GC_NODE (iter)), "pFeature") == 0)
+		if (g_strcmp0 (arv_gc_feature_node_get_name (ARV_GC_FEATURE_NODE (iter)), "pFeature") == 0)
 			category->features = g_slist_append (category->features,
-							     g_strdup (arv_gc_node_get_content (ARV_GC_NODE (iter))));
+							     g_strdup (arv_gc_feature_node_get_content (ARV_GC_FEATURE_NODE (iter))));
 
 	return category->features;
 }
 
-ArvGcNode *
+ArvGcFeatureNode *
 arv_gc_category_new (void)
 {
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	node = g_object_new (ARV_TYPE_GC_CATEGORY, NULL);
 
diff --git a/src/arvgccategory.h b/src/arvgccategory.h
index 48dad09..5017b84 100644
--- a/src/arvgccategory.h
+++ b/src/arvgccategory.h
@@ -24,7 +24,7 @@
 #define ARV_GC_CATEGORY_H
 
 #include <arvtypes.h>
-#include <arvgcnode.h>
+#include <arvgcfeaturenode.h>
 
 G_BEGIN_DECLS
 
@@ -38,18 +38,18 @@ G_BEGIN_DECLS
 typedef struct _ArvGcCategoryClass ArvGcCategoryClass;
 
 struct _ArvGcCategory {
-	ArvGcNode	node;
+	ArvGcFeatureNode	node;
 
 	GSList *features;
 };
 
 struct _ArvGcCategoryClass {
-	ArvGcNodeClass parent_class;
+	ArvGcFeatureNodeClass parent_class;
 };
 
 GType 		arv_gc_category_get_type 	(void);
 
-ArvGcNode * 	arv_gc_category_new 		(void);
+ArvGcFeatureNode * 	arv_gc_category_new 		(void);
 const GSList * 	arv_gc_category_get_features 	(ArvGcCategory *category);
 
 G_END_DECLS
diff --git a/src/arvgccommand.c b/src/arvgccommand.c
index 8d6cb4d..70d9211 100644
--- a/src/arvgccommand.c
+++ b/src/arvgccommand.c
@@ -36,7 +36,7 @@
 
 static GObjectClass *parent_class = NULL;
 
-/* ArvGcNode implementation */
+/* ArvGcFeatureNode implementation */
 
 static const char *
 arv_gc_command_get_node_name (ArvDomNode *node)
@@ -44,10 +44,10 @@ arv_gc_command_get_node_name (ArvDomNode *node)
 	return "Command";
 }
 
-/* ArvGcNode implementation */
+/* ArvGcFeatureNode implementation */
 
 static void
-arv_gc_command_add_element (ArvGcNode *node, const char *name, const char *content, const char **attributes)
+arv_gc_command_add_element (ArvGcFeatureNode *node, const char *name, const char *content, const char **attributes)
 {
 	ArvGcCommand *gc_command = ARV_GC_COMMAND (node);
 
@@ -60,7 +60,7 @@ arv_gc_command_add_element (ArvGcNode *node, const char *name, const char *conte
 	} else if (strcmp (name, "pCommandValue") == 0) {
 		arv_force_g_value_to_string (&gc_command->command_value, content);
 	} else
-		ARV_GC_NODE_CLASS (parent_class)->add_element (node, name, content, attributes);
+		ARV_GC_FEATURE_NODE_CLASS (parent_class)->add_element (node, name, content, attributes);
 }
 
 /* ArvGcCommand implementation */
@@ -72,21 +72,21 @@ arv_gc_command_execute (ArvGcCommand *gc_command)
 	gint64 command_value;
 
 	g_return_if_fail (ARV_IS_GC_COMMAND (gc_command));
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_command));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_command));
 	g_return_if_fail (ARV_IS_GC (genicam));
 
 	command_value = arv_gc_get_int64_from_value (genicam, &gc_command->command_value);
 	arv_gc_set_int64_to_value (genicam, &gc_command->value, command_value);
 
 	arv_log_genicam ("[GcCommand::execute] %s (0x%x)",
-			 arv_gc_node_get_name (ARV_GC_NODE (gc_command)),
+			 arv_gc_feature_node_get_name (ARV_GC_FEATURE_NODE (gc_command)),
 			 command_value);
 }
 
-ArvGcNode *
+ArvGcFeatureNode *
 arv_gc_command_new (void)
 {
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	node = g_object_new (ARV_TYPE_GC_COMMAND, NULL);
 
@@ -119,13 +119,13 @@ arv_gc_command_class_init (ArvGcCommandClass *this_class)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (this_class);
 	ArvDomNodeClass *dom_node_class = ARV_DOM_NODE_CLASS (this_class);
-	ArvGcNodeClass *gc_node_class = ARV_GC_NODE_CLASS (this_class);
+	ArvGcFeatureNodeClass *gc_feature_node_class = ARV_GC_FEATURE_NODE_CLASS (this_class);
 
 	parent_class = g_type_class_peek_parent (this_class);
 
 	object_class->finalize = arv_gc_command_finalize;
 	dom_node_class->get_node_name = arv_gc_command_get_node_name;
-	gc_node_class->add_element = arv_gc_command_add_element;
+	gc_feature_node_class->add_element = arv_gc_command_add_element;
 }
 
 G_DEFINE_TYPE (ArvGcCommand, arv_gc_command, ARV_TYPE_GC_NODE)
diff --git a/src/arvgccommand.h b/src/arvgccommand.h
index b9a36a8..6b2e729 100644
--- a/src/arvgccommand.h
+++ b/src/arvgccommand.h
@@ -24,7 +24,7 @@
 #define ARV_GC_COMMAND_H
 
 #include <arvtypes.h>
-#include <arvgcnode.h>
+#include <arvgcfeaturenode.h>
 
 G_BEGIN_DECLS
 
@@ -38,18 +38,18 @@ G_BEGIN_DECLS
 typedef struct _ArvGcCommandClass ArvGcCommandClass;
 
 struct _ArvGcCommand {
-	ArvGcNode	node;
+	ArvGcFeatureNode	node;
 
 	GValue			command_value;
 	GValue			value;
 };
 
 struct _ArvGcCommandClass {
-	ArvGcNodeClass parent_class;
+	ArvGcFeatureNodeClass parent_class;
 };
 
 GType 		arv_gc_command_get_type 	(void);
-ArvGcNode * 	arv_gc_command_new 		(void);
+ArvGcFeatureNode * 	arv_gc_command_new 		(void);
 void 		arv_gc_command_execute 		(ArvGcCommand *gc_command);
 
 G_END_DECLS
diff --git a/src/arvgcconverter.c b/src/arvgcconverter.c
index 1f31a26..9cb9649 100644
--- a/src/arvgcconverter.c
+++ b/src/arvgcconverter.c
@@ -25,7 +25,7 @@
  * @short_description: Class for Converter and IntConverter nodes
  */
 
-#include <arvgcnode.h>
+#include <arvgcfeaturenode.h>
 #include <arvgcconverter.h>
 #include <arvevaluator.h>
 #include <arvgcinteger.h>
@@ -55,10 +55,10 @@ arv_gc_converter_get_node_name (ArvDomNode *node)
 	return "IntConverter";
 }
 
-/* ArvGcNode implementation */
+/* ArvGcFeatureNode implementation */
 
 static void
-arv_gc_converter_add_element (ArvGcNode *node, const char *name, const char *content, const char **attributes)
+arv_gc_converter_add_element (ArvGcFeatureNode *node, const char *name, const char *content, const char **attributes)
 {
 	ArvGcConverter *gc_converter = ARV_GC_CONVERTER (node);
 
@@ -96,20 +96,20 @@ arv_gc_converter_add_element (ArvGcNode *node, const char *name, const char *con
 	} else if (strcmp (name, "Constant") == 0) {
 		g_assert_not_reached ();
 	} else
-		ARV_GC_NODE_CLASS (parent_class)->add_element (node, name, content, attributes);
+		ARV_GC_FEATURE_NODE_CLASS (parent_class)->add_element (node, name, content, attributes);
 }
 
 /* ArvGcConverter implementation */
 
 static GType
-arv_gc_converter_node_get_value_type (ArvGcNode *node)
+arv_gc_converter_node_get_value_type (ArvGcFeatureNode *node)
 {
 	ArvGcConverter *gc_converter = ARV_GC_CONVERTER (node);
 
 	return gc_converter->value_type;
 }
 
-ArvGcNode *
+ArvGcFeatureNode *
 arv_gc_converter_new (void)
 {
 	ArvGcConverter *converter;
@@ -117,10 +117,10 @@ arv_gc_converter_new (void)
 	converter = g_object_new (ARV_TYPE_GC_CONVERTER, NULL);
 	converter->value_type = G_TYPE_DOUBLE;
 
-	return ARV_GC_NODE (converter);
+	return ARV_GC_FEATURE_NODE (converter);
 }
 
-ArvGcNode *
+ArvGcFeatureNode *
 arv_gc_converter_new_integer (void)
 {
 	ArvGcConverter *converter;
@@ -128,7 +128,7 @@ arv_gc_converter_new_integer (void)
 	converter = g_object_new (ARV_TYPE_GC_CONVERTER, NULL);
 	converter->value_type = G_TYPE_INT64;
 
-	return ARV_GC_NODE (converter);
+	return ARV_GC_FEATURE_NODE (converter);
 }
 
 static void
@@ -167,14 +167,14 @@ arv_gc_converter_class_init (ArvGcConverterClass *this_class)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (this_class);
 	ArvDomNodeClass *dom_node_class = ARV_DOM_NODE_CLASS (this_class);
-	ArvGcNodeClass *gc_node_class = ARV_GC_NODE_CLASS (this_class);
+	ArvGcFeatureNodeClass *gc_feature_node_class = ARV_GC_FEATURE_NODE_CLASS (this_class);
 
 	parent_class = g_type_class_peek_parent (this_class);
 
 	object_class->finalize = arv_gc_converter_finalize;
 	dom_node_class->get_node_name = arv_gc_converter_get_node_name;
-	gc_node_class->add_element = arv_gc_converter_add_element;
-	gc_node_class->get_value_type = arv_gc_converter_node_get_value_type;
+	gc_feature_node_class->add_element = arv_gc_converter_add_element;
+	gc_feature_node_class->get_value_type = arv_gc_converter_node_get_value_type;
 }
 
 /* ArvGcInteger interface implementation */
@@ -183,31 +183,31 @@ static void
 _update_from_variables (ArvGcConverter *gc_converter)
 {
 	ArvGc *genicam;
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 	GSList *iter;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_converter));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_converter));
 
 	for (iter = gc_converter->variables; iter != NULL; iter = iter->next) {
 		ArvGcConverterVariableInfos *variable_infos = iter->data;
 
 		node = arv_gc_get_node (genicam, variable_infos->node_name);
-		if (arv_gc_node_get_value_type (node) == G_TYPE_INT64)
+		if (arv_gc_feature_node_get_value_type (node) == G_TYPE_INT64)
 			arv_evaluator_set_int64_variable (gc_converter->formula_from,
 							  variable_infos->name,
 							  arv_gc_integer_get_value (ARV_GC_INTEGER (node)));
-		else if (arv_gc_node_get_value_type (node) == G_TYPE_DOUBLE)
+		else if (arv_gc_feature_node_get_value_type (node) == G_TYPE_DOUBLE)
 			arv_evaluator_set_double_variable (gc_converter->formula_from,
 							   variable_infos->name,
 							   arv_gc_float_get_value (ARV_GC_FLOAT (node)));
 	}
 
 	node = arv_gc_get_node (genicam, gc_converter->value);
-	if (arv_gc_node_get_value_type (node) == G_TYPE_INT64)
+	if (arv_gc_feature_node_get_value_type (node) == G_TYPE_INT64)
 		arv_evaluator_set_int64_variable (gc_converter->formula_from,
 						  "TO",
 						  arv_gc_integer_get_value (ARV_GC_INTEGER (node)));
-	else if (arv_gc_node_get_value_type (node) == G_TYPE_DOUBLE)
+	else if (arv_gc_feature_node_get_value_type (node) == G_TYPE_DOUBLE)
 		arv_evaluator_set_double_variable (gc_converter->formula_from,
 						   "TO",
 						   arv_gc_float_get_value (ARV_GC_FLOAT (node)));
@@ -217,30 +217,30 @@ static void
 _update_to_variables (ArvGcConverter *gc_converter)
 {
 	ArvGc *genicam;
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 	GSList *iter;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_converter));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_converter));
 
 	for (iter = gc_converter->variables; iter != NULL; iter = iter->next) {
 		ArvGcConverterVariableInfos *variable_infos = iter->data;
 
 		node = arv_gc_get_node (genicam, variable_infos->node_name);
-		if (arv_gc_node_get_value_type (node) == G_TYPE_INT64)
+		if (arv_gc_feature_node_get_value_type (node) == G_TYPE_INT64)
 			arv_evaluator_set_int64_variable (gc_converter->formula_to,
 							  variable_infos->name,
 							  arv_gc_integer_get_value (ARV_GC_INTEGER (node)));
-		else if (arv_gc_node_get_value_type (node) == G_TYPE_DOUBLE)
+		else if (arv_gc_feature_node_get_value_type (node) == G_TYPE_DOUBLE)
 			arv_evaluator_set_double_variable (gc_converter->formula_to,
 							   variable_infos->name,
 							   arv_gc_float_get_value (ARV_GC_FLOAT (node)));
 	}
 
 	node = arv_gc_get_node (genicam, gc_converter->value);
-	if (arv_gc_node_get_value_type (node) == G_TYPE_INT64)
+	if (arv_gc_feature_node_get_value_type (node) == G_TYPE_INT64)
 		arv_gc_integer_set_value (ARV_GC_INTEGER (node),
 					  arv_evaluator_evaluate_as_int64 (gc_converter->formula_to, NULL));
-	else if (arv_gc_node_get_value_type (node) == G_TYPE_DOUBLE)
+	else if (arv_gc_feature_node_get_value_type (node) == G_TYPE_DOUBLE)
 		arv_gc_float_set_value (ARV_GC_FLOAT (node),
 					arv_evaluator_evaluate_as_double (gc_converter->formula_to, NULL));
 	else
diff --git a/src/arvgcconverter.h b/src/arvgcconverter.h
index 89c8c86..951ee0d 100644
--- a/src/arvgcconverter.h
+++ b/src/arvgcconverter.h
@@ -24,7 +24,7 @@
 #define ARV_GC_CONVERTER_H
 
 #include <arvtypes.h>
-#include <arvgcnode.h>
+#include <arvgcfeaturenode.h>
 
 G_BEGIN_DECLS
 
@@ -38,7 +38,7 @@ G_BEGIN_DECLS
 typedef struct _ArvGcConverterClass ArvGcConverterClass;
 
 struct _ArvGcConverter {
-	ArvGcNode	node;
+	ArvGcFeatureNode	node;
 
 	GType value_type;
 	char *value;
@@ -48,13 +48,13 @@ struct _ArvGcConverter {
 };
 
 struct _ArvGcConverterClass {
-	ArvGcNodeClass parent_class;
+	ArvGcFeatureNodeClass parent_class;
 };
 
 GType 		arv_gc_converter_get_type 	(void);
 
-ArvGcNode * 	arv_gc_converter_new 		(void);
-ArvGcNode * 	arv_gc_converter_new_integer 	(void);
+ArvGcFeatureNode * 	arv_gc_converter_new 		(void);
+ArvGcFeatureNode * 	arv_gc_converter_new_integer 	(void);
 
 G_END_DECLS
 
diff --git a/src/arvgcenumentry.c b/src/arvgcenumentry.c
index 2a77396..2dfd537 100644
--- a/src/arvgcenumentry.c
+++ b/src/arvgcenumentry.c
@@ -39,17 +39,17 @@ arv_gc_enum_entry_get_node_name (ArvDomNode *node)
 	return "EnumEntry";
 }
 
-/* ArvGcNode implementation */
+/* ArvGcFeatureNode implementation */
 
 static void
-arv_gc_enum_entry_add_element (ArvGcNode *node, const char *name, const char *content, const char **attributes)
+arv_gc_enum_entry_add_element (ArvGcFeatureNode *node, const char *name, const char *content, const char **attributes)
 {
 	ArvGcEnumEntry *gc_enum_entry = ARV_GC_ENUM_ENTRY (node);
 
 	if (strcmp (name, "Value") == 0) {
 		gc_enum_entry->value = g_ascii_strtoll (content, NULL, 0);
 	} else
-		ARV_GC_NODE_CLASS (parent_class)->add_element (node, name, content, attributes);
+		ARV_GC_FEATURE_NODE_CLASS (parent_class)->add_element (node, name, content, attributes);
 }
 
 /* ArvGcEnumEntry implementation */
@@ -62,10 +62,10 @@ arv_gc_enum_entry_get_value (ArvGcEnumEntry *entry)
 	return entry->value;
 }
 
-ArvGcNode *
+ArvGcFeatureNode *
 arv_gc_enum_entry_new (void)
 {
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	node = g_object_new (ARV_TYPE_GC_ENUM_ENTRY, NULL);
 
@@ -91,13 +91,13 @@ arv_gc_enum_entry_class_init (ArvGcEnumEntryClass *this_class)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (this_class);
 	ArvDomNodeClass *dom_node_class = ARV_DOM_NODE_CLASS (this_class);
-	ArvGcNodeClass *gc_node_class = ARV_GC_NODE_CLASS (this_class);
+	ArvGcFeatureNodeClass *gc_feature_node_class = ARV_GC_FEATURE_NODE_CLASS (this_class);
 
 	parent_class = g_type_class_peek_parent (this_class);
 
 	object_class->finalize = arv_gc_enum_entry_finalize;
 	dom_node_class->get_node_name = arv_gc_enum_entry_get_node_name;
-	gc_node_class->add_element = arv_gc_enum_entry_add_element;
+	gc_feature_node_class->add_element = arv_gc_enum_entry_add_element;
 }
 
 G_DEFINE_TYPE (ArvGcEnumEntry, arv_gc_enum_entry, ARV_TYPE_GC_NODE)
diff --git a/src/arvgcenumentry.h b/src/arvgcenumentry.h
index 12d0eef..215f92b 100644
--- a/src/arvgcenumentry.h
+++ b/src/arvgcenumentry.h
@@ -24,7 +24,7 @@
 #define ARV_GC_ENUM_ENTRY_H
 
 #include <arvtypes.h>
-#include <arvgcnode.h>
+#include <arvgcfeaturenode.h>
 
 G_BEGIN_DECLS
 
@@ -38,18 +38,18 @@ G_BEGIN_DECLS
 typedef struct _ArvGcEnumEntryClass ArvGcEnumEntryClass;
 
 struct _ArvGcEnumEntry {
-	ArvGcNode	node;
+	ArvGcFeatureNode	node;
 
 	gint64 value;
 };
 
 struct _ArvGcEnumEntryClass {
-	ArvGcNodeClass parent_class;
+	ArvGcFeatureNodeClass parent_class;
 };
 
 GType 		arv_gc_enum_entry_get_type 	(void);
 
-ArvGcNode * 	arv_gc_enum_entry_new 			(void);
+ArvGcFeatureNode * 	arv_gc_enum_entry_new 			(void);
 gint64		arv_gc_enum_entry_get_value		(ArvGcEnumEntry *entry);
 
 G_END_DECLS
diff --git a/src/arvgcenumeration.c b/src/arvgcenumeration.c
index 5c77256..e91ef50 100644
--- a/src/arvgcenumeration.c
+++ b/src/arvgcenumeration.c
@@ -34,7 +34,7 @@
 
 static GObjectClass *parent_class = NULL;
 
-/* ArvGcNode implementation */
+/* ArvGcFeatureNode implementation */
 
 static const char *
 arv_gc_enumeration_get_node_name (ArvDomNode *node)
@@ -43,7 +43,7 @@ arv_gc_enumeration_get_node_name (ArvDomNode *node)
 }
 
 static gboolean
-arv_gc_enumeration_can_add_child (ArvGcNode *node, ArvGcNode *child)
+arv_gc_enumeration_can_add_child (ArvGcFeatureNode *node, ArvGcFeatureNode *child)
 {
 	if (ARV_IS_GC_ENUM_ENTRY (child))
 		return TRUE;
@@ -52,7 +52,7 @@ arv_gc_enumeration_can_add_child (ArvGcNode *node, ArvGcNode *child)
 }
 
 static void
-arv_gc_enumeration_add_element (ArvGcNode *node, const char *name, const char *content, const char **attributes)
+arv_gc_enumeration_add_element (ArvGcFeatureNode *node, const char *name, const char *content, const char **attributes)
 {
 	ArvGcEnumeration *gc_enumeration = ARV_GC_ENUMERATION (node);
 
@@ -62,17 +62,17 @@ arv_gc_enumeration_add_element (ArvGcNode *node, const char *name, const char *c
 	} else if (strcmp (name, "pValue") == 0) {
 		arv_force_g_value_to_string (&gc_enumeration->value, content);
 	} else
-		ARV_GC_NODE_CLASS (parent_class)->add_element (node, name, content, attributes);
+		ARV_GC_FEATURE_NODE_CLASS (parent_class)->add_element (node, name, content, attributes);
 }
 
 static void
-arv_gc_enumeration_set_value_from_string (ArvGcNode *node, const char *string)
+arv_gc_enumeration_set_value_from_string (ArvGcFeatureNode *node, const char *string)
 {
 	arv_gc_enumeration_set_string_value (ARV_GC_ENUMERATION (node), string);
 }
 
 static const char *
-arv_gc_enumeration_get_value_as_string (ArvGcNode *node)
+arv_gc_enumeration_get_value_as_string (ArvGcFeatureNode *node)
 {
 	return arv_gc_enumeration_get_string_value (ARV_GC_ENUMERATION (node));
 }
@@ -88,14 +88,14 @@ arv_gc_enumeration_get_string_value (ArvGcEnumeration *enumeration)
 
 	g_return_val_if_fail (ARV_IS_GC_ENUMERATION (enumeration), NULL);
 
-	value = arv_gc_get_int64_from_value (arv_gc_node_get_genicam (ARV_GC_NODE (enumeration)),
+	value = arv_gc_get_int64_from_value (arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (enumeration)),
 								      &enumeration->value);
 
-	for (iter = arv_gc_node_get_childs (ARV_GC_NODE (enumeration)); iter != NULL; iter = iter->next) {
+	for (iter = arv_gc_feature_node_get_childs (ARV_GC_FEATURE_NODE (enumeration)); iter != NULL; iter = iter->next) {
 		if (arv_gc_enum_entry_get_value (iter->data) == value) {
 			const char *string;
 
-			string = arv_gc_node_get_name (iter->data);
+			string = arv_gc_feature_node_get_name (iter->data);
 			arv_log_genicam ("[GcEnumeration::get_string_value] value = %Ld - string = %s",
 					 value, string);
 			return string;
@@ -103,7 +103,7 @@ arv_gc_enumeration_get_string_value (ArvGcEnumeration *enumeration)
 	}
 
 	arv_warning_genicam ("[GcEnumeration::get_string_value] value = %Ld not found for node %s",
-			     value, arv_gc_node_get_name (ARV_GC_NODE (enumeration)));
+			     value, arv_gc_feature_node_get_name (ARV_GC_FEATURE_NODE (enumeration)));
 
 	return NULL;
 }
@@ -115,11 +115,11 @@ arv_gc_enumeration_set_string_value (ArvGcEnumeration *enumeration, const char *
 
 	g_return_if_fail (ARV_IS_GC_ENUMERATION (enumeration));
 
-	for (iter = arv_gc_node_get_childs (ARV_GC_NODE (enumeration)); iter != NULL; iter = iter->next)
-		if (g_strcmp0 (arv_gc_node_get_name (iter->data), value) == 0) {
+	for (iter = arv_gc_feature_node_get_childs (ARV_GC_FEATURE_NODE (enumeration)); iter != NULL; iter = iter->next)
+		if (g_strcmp0 (arv_gc_feature_node_get_name (iter->data), value) == 0) {
 			arv_log_genicam ("[GcEnumeration::set_string_value] value = %d - string = %s",
 					 &enumeration->value, value);
-			arv_gc_set_int64_to_value (arv_gc_node_get_genicam (ARV_GC_NODE (enumeration)),
+			arv_gc_set_int64_to_value (arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (enumeration)),
 						   &enumeration->value,
 						   arv_gc_enum_entry_get_value (iter->data));
 			return;
@@ -133,7 +133,7 @@ arv_gc_enumeration_get_int_value (ArvGcEnumeration *enumeration)
 {
 	g_return_val_if_fail (ARV_IS_GC_ENUMERATION (enumeration), 0);
 
-	return arv_gc_get_int64_from_value (arv_gc_node_get_genicam (ARV_GC_NODE (enumeration)),
+	return arv_gc_get_int64_from_value (arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (enumeration)),
 					    &enumeration->value);
 }
 
@@ -154,7 +154,7 @@ arv_gc_enumeration_get_available_int_values (ArvGcEnumeration *enumeration, guin
 
 	*n_values = 0;
 	for (iter = entries; iter != NULL; iter = iter->next)
-		if (arv_gc_node_is_available (iter->data))
+		if (arv_gc_feature_node_is_available (iter->data))
 		    (*n_values)++;
 
 	if (*n_values == 0)
@@ -162,7 +162,7 @@ arv_gc_enumeration_get_available_int_values (ArvGcEnumeration *enumeration, guin
 
 	values = g_new (gint64, *n_values);
 	for (iter = entries, i = 0; iter != NULL; iter = iter->next)
-		if (arv_gc_node_is_available (iter->data)) {
+		if (arv_gc_feature_node_is_available (iter->data)) {
 			values[i] = arv_gc_enum_entry_get_value (iter->data);
 			i++;
 		}
@@ -175,7 +175,7 @@ arv_gc_enumeration_set_int_value (ArvGcEnumeration *enumeration, gint64 value)
 {
 	g_return_if_fail (ARV_IS_GC_ENUMERATION (enumeration));
 
-	arv_gc_set_int64_to_value (arv_gc_node_get_genicam (ARV_GC_NODE (enumeration)),
+	arv_gc_set_int64_to_value (arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (enumeration)),
 				   &enumeration->value, value);
 }
 
@@ -183,7 +183,7 @@ arv_gc_enumeration_set_int_value (ArvGcEnumeration *enumeration, gint64 value)
  * arv_gc_enumeration_get_entries:
  * @enumeration: a #ArvGcEnumeration
  *
- * Returns: (element-type ArvGcNode) (transfer none): the list of enumeration entry nodes.
+ * Returns: (element-type ArvGcFeatureNode) (transfer none): the list of enumeration entry nodes.
  */
 
 const GSList *
@@ -191,13 +191,13 @@ arv_gc_enumeration_get_entries (ArvGcEnumeration *enumeration)
 {
 	g_return_val_if_fail (ARV_IS_GC_ENUMERATION (enumeration), NULL);
 
-	return arv_gc_node_get_childs (ARV_GC_NODE (enumeration));
+	return arv_gc_feature_node_get_childs (ARV_GC_FEATURE_NODE (enumeration));
 }
 
-ArvGcNode *
+ArvGcFeatureNode *
 arv_gc_enumeration_new (void)
 {
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	node = g_object_new (ARV_TYPE_GC_ENUMERATION, NULL);
 
@@ -226,17 +226,17 @@ arv_gc_enumeration_class_init (ArvGcEnumerationClass *this_class)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (this_class);
 	ArvDomNodeClass *dom_node_class = ARV_DOM_NODE_CLASS (this_class);
-	ArvGcNodeClass *gc_node_class = ARV_GC_NODE_CLASS (this_class);
+	ArvGcFeatureNodeClass *gc_feature_node_class = ARV_GC_FEATURE_NODE_CLASS (this_class);
 
 	parent_class = g_type_class_peek_parent (this_class);
 
 	object_class->finalize = arv_gc_enumeration_finalize;
 
 	dom_node_class->get_node_name = arv_gc_enumeration_get_node_name;
-	gc_node_class->add_element = arv_gc_enumeration_add_element;
-	gc_node_class->can_add_child = arv_gc_enumeration_can_add_child;
-	gc_node_class->set_value_from_string = arv_gc_enumeration_set_value_from_string;
-	gc_node_class->get_value_as_string = arv_gc_enumeration_get_value_as_string;
+	gc_feature_node_class->add_element = arv_gc_enumeration_add_element;
+	gc_feature_node_class->can_add_child = arv_gc_enumeration_can_add_child;
+	gc_feature_node_class->set_value_from_string = arv_gc_enumeration_set_value_from_string;
+	gc_feature_node_class->get_value_as_string = arv_gc_enumeration_get_value_as_string;
 }
 
 G_DEFINE_TYPE (ArvGcEnumeration, arv_gc_enumeration, ARV_TYPE_GC_NODE)
diff --git a/src/arvgcenumeration.h b/src/arvgcenumeration.h
index 9a796db..29329db 100644
--- a/src/arvgcenumeration.h
+++ b/src/arvgcenumeration.h
@@ -24,7 +24,7 @@
 #define ARV_GC_ENUMERATION_H
 
 #include <arvtypes.h>
-#include <arvgcnode.h>
+#include <arvgcfeaturenode.h>
 
 G_BEGIN_DECLS
 
@@ -38,18 +38,18 @@ G_BEGIN_DECLS
 typedef struct _ArvGcEnumerationClass ArvGcEnumerationClass;
 
 struct _ArvGcEnumeration {
-	ArvGcNode	node;
+	ArvGcFeatureNode	node;
 
 	GValue value;
 };
 
 struct _ArvGcEnumerationClass {
-	ArvGcNodeClass parent_class;
+	ArvGcFeatureNodeClass parent_class;
 };
 
 GType 		arv_gc_enumeration_get_type 	(void);
 
-ArvGcNode * 	arv_gc_enumeration_new 				(void);
+ArvGcFeatureNode * 	arv_gc_enumeration_new 				(void);
 
 const char *	arv_gc_enumeration_get_string_value		(ArvGcEnumeration *enumeration);
 void		arv_gc_enumeration_set_string_value		(ArvGcEnumeration *enumeration, const char *value);
diff --git a/src/arvgcnode.c b/src/arvgcfeaturenode.c
similarity index 55%
rename from src/arvgcnode.c
rename to src/arvgcfeaturenode.c
index 7ad028d..d17a359 100644
--- a/src/arvgcnode.c
+++ b/src/arvgcfeaturenode.c
@@ -21,14 +21,14 @@
  */
 
 /**
- * SECTION: arvgcnode
+ * SECTION: arvgcfeaturenode
  * @short_description: Base class for all Genicam nodes
  *
- * #ArvGcNode provides a base class for the implementation of the different
+ * #ArvGcFeatureNode provides a base class for the implementation of the different
  * types of Genicam node.
  */
 
-#include <arvgcnode.h>
+#include <arvgcfeaturenode.h>
 #include <arvgc.h>
 #include <arvmisc.h>
 #include <arvdebug.h>
@@ -36,7 +36,7 @@
 
 static GObjectClass *parent_class = NULL;
 
-struct _ArvGcNodePrivate {
+struct _ArvGcFeatureNodePrivate {
 	ArvGc *genicam;
 	char *name;
 	ArvGcNameSpace name_space;
@@ -54,7 +54,7 @@ struct _ArvGcNodePrivate {
 };
 
 const char *
-arv_gc_node_get_content (ArvGcNode *node)
+arv_gc_feature_node_get_content (ArvGcFeatureNode *node)
 {
 	g_assert_not_reached ();
 	return NULL;
@@ -62,7 +62,7 @@ arv_gc_node_get_content (ArvGcNode *node)
 
 
 const char *
-arv_gc_node_get_name (ArvGcNode *node)
+arv_gc_feature_node_get_name (ArvGcFeatureNode *node)
 {
 	g_return_val_if_fail (ARV_IS_GC_NODE (node), NULL);
 
@@ -70,7 +70,7 @@ arv_gc_node_get_name (ArvGcNode *node)
 }
 
 const char *
-arv_gc_node_get_tooltip (ArvGcNode *node)
+arv_gc_feature_node_get_tooltip (ArvGcFeatureNode *node)
 {
 	g_return_val_if_fail (ARV_IS_GC_NODE (node), NULL);
 
@@ -78,7 +78,7 @@ arv_gc_node_get_tooltip (ArvGcNode *node)
 }
 
 const char *
-arv_gc_node_get_description (ArvGcNode *node)
+arv_gc_feature_node_get_description (ArvGcFeatureNode *node)
 {
 	g_return_val_if_fail (ARV_IS_GC_NODE (node), NULL);
 
@@ -86,7 +86,7 @@ arv_gc_node_get_description (ArvGcNode *node)
 }
 
 const char *
-arv_gc_node_get_display_name (ArvGcNode *node)
+arv_gc_feature_node_get_display_name (ArvGcFeatureNode *node)
 {
 	g_return_val_if_fail (ARV_IS_GC_NODE (node), NULL);
 
@@ -94,16 +94,16 @@ arv_gc_node_get_display_name (ArvGcNode *node)
 }
 
 gboolean
-arv_gc_node_is_available (ArvGcNode *gc_node)
+arv_gc_feature_node_is_available (ArvGcFeatureNode *gc_feature_node)
 {
-	g_return_val_if_fail (ARV_IS_GC_NODE (gc_node), FALSE);
+	g_return_val_if_fail (ARV_IS_GC_NODE (gc_feature_node), FALSE);
 
-	return arv_gc_get_int64_from_value (gc_node->priv->genicam, &gc_node->priv->is_implemented) != 0 &&
-		arv_gc_get_int64_from_value (gc_node->priv->genicam, &gc_node->priv->is_available) != 0;
+	return arv_gc_get_int64_from_value (gc_feature_node->priv->genicam, &gc_feature_node->priv->is_implemented) != 0 &&
+		arv_gc_get_int64_from_value (gc_feature_node->priv->genicam, &gc_feature_node->priv->is_available) != 0;
 }
 
 static void
-_set_attribute (ArvGcNode *node, const char *name, const char *value)
+_set_attribute (ArvGcFeatureNode *node, const char *name, const char *value)
 {
 	if (strcmp (name, "Name") == 0) {
 		g_free (node->priv->name);
@@ -117,16 +117,16 @@ _set_attribute (ArvGcNode *node, const char *name, const char *value)
 }
 
 void
-arv_gc_node_set_attribute (ArvGcNode *node, const char *name, const char *value)
+arv_gc_feature_node_set_attribute (ArvGcFeatureNode *node, const char *name, const char *value)
 {
 	g_return_if_fail (ARV_IS_GC_NODE (node));
 	g_return_if_fail (name != NULL);
 
-	ARV_GC_NODE_GET_CLASS (node)->set_attribute (node, name, value);
+	ARV_GC_FEATURE_NODE_GET_CLASS (node)->set_attribute (node, name, value);
 }
 
 static void
-_add_element (ArvGcNode *node, const char *name, const char *content, const char **attributes)
+_add_element (ArvGcFeatureNode *node, const char *name, const char *content, const char **attributes)
 {
 	if (strcmp (name, "ToolTip") == 0) {
 		g_free (node->priv->tooltip);
@@ -145,7 +145,7 @@ _add_element (ArvGcNode *node, const char *name, const char *content, const char
 }
 
 void
-arv_gc_node_add_element (ArvGcNode *node, const char *name, const char *content, const char **attributes)
+arv_gc_feature_node_add_element (ArvGcFeatureNode *node, const char *name, const char *content, const char **attributes)
 {
 	g_return_if_fail (ARV_IS_GC_NODE (node));
 	g_return_if_fail (name != NULL);
@@ -153,18 +153,18 @@ arv_gc_node_add_element (ArvGcNode *node, const char *name, const char *content,
 	arv_log_genicam ("[GcNode::add_element] Add %s [%s]",
 			 name, content);
 
-	ARV_GC_NODE_GET_CLASS (node)->add_element (node, name, content, attributes);
+	ARV_GC_FEATURE_NODE_GET_CLASS (node)->add_element (node, name, content, attributes);
 }
 
 gboolean
-arv_gc_node_can_add_child (ArvGcNode *node, ArvGcNode *child)
+arv_gc_feature_node_can_add_child (ArvGcFeatureNode *node, ArvGcFeatureNode *child)
 {
-	ArvGcNodeClass *node_class;
+	ArvGcFeatureNodeClass *node_class;
 
 	g_return_val_if_fail (ARV_IS_GC_NODE (node), FALSE);
 	g_return_val_if_fail (ARV_IS_GC_NODE (child), FALSE);
 
-	node_class = ARV_GC_NODE_GET_CLASS (node);
+	node_class = ARV_GC_FEATURE_NODE_GET_CLASS (node);
 	if (node_class->can_add_child == NULL)
 		return FALSE;
 
@@ -172,7 +172,7 @@ arv_gc_node_can_add_child (ArvGcNode *node, ArvGcNode *child)
 }
 
 void
-arv_gc_node_add_child (ArvGcNode *node, ArvGcNode *child)
+arv_gc_feature_node_add_child (ArvGcFeatureNode *node, ArvGcFeatureNode *child)
 {
 	g_return_if_fail (ARV_IS_GC_NODE (node));
 	g_return_if_fail (ARV_IS_GC_NODE (child));
@@ -182,34 +182,34 @@ arv_gc_node_add_child (ArvGcNode *node, ArvGcNode *child)
 }
 
 /**
- * arv_gc_node_get_childs:
- * @gc_node: a #ArvGcNode
+ * arv_gc_feature_node_get_childs:
+ * @gc_feature_node: a #ArvGcFeatureNode
  *
  * Get the list of node childs.
  *
- * Returns: (element-type ArvGcNode) (transfer none): a list of #ArvGcNode.
+ * Returns: (element-type ArvGcFeatureNode) (transfer none): a list of #ArvGcFeatureNode.
  */
 
 const GSList *
-arv_gc_node_get_childs (ArvGcNode *gc_node)
+arv_gc_feature_node_get_childs (ArvGcFeatureNode *gc_feature_node)
 {
-	g_return_val_if_fail (ARV_IS_GC_NODE (gc_node), NULL);
+	g_return_val_if_fail (ARV_IS_GC_NODE (gc_feature_node), NULL);
 
-	return gc_node->priv->childs;
+	return gc_feature_node->priv->childs;
 }
 
 unsigned int
-arv_gc_node_get_n_childs (ArvGcNode *node)
+arv_gc_feature_node_get_n_childs (ArvGcFeatureNode *node)
 {
 	g_return_val_if_fail (ARV_IS_GC_NODE (node), 0);
 
 	return node->priv->n_childs;
 }
 
-ArvGcNode *
-arv_gc_node_new (void)
+ArvGcFeatureNode *
+arv_gc_feature_node_new (void)
 {
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	node = g_object_new (ARV_TYPE_GC_NODE, NULL);
 
@@ -217,7 +217,7 @@ arv_gc_node_new (void)
 }
 
 void
-arv_gc_node_set_genicam	(ArvGcNode *node, ArvGc *genicam)
+arv_gc_feature_node_set_genicam	(ArvGcFeatureNode *node, ArvGc *genicam)
 {
 	g_return_if_fail (ARV_IS_GC_NODE (node));
 	g_return_if_fail (genicam == NULL || ARV_IS_GC (genicam));
@@ -226,15 +226,15 @@ arv_gc_node_set_genicam	(ArvGcNode *node, ArvGc *genicam)
 }
 
 /**
- * arv_gc_node_get_genicam:
- * @gc_node: a #ArvGcNode
+ * arv_gc_feature_node_get_genicam:
+ * @gc_feature_node: a #ArvGcFeatureNode
  * Return value: (transfer none): the parent #ArvGc
  *
  * Retrieves the parent genicam document of @node.
  */
 
 ArvGc *
-arv_gc_node_get_genicam	(ArvGcNode *node)
+arv_gc_feature_node_get_genicam	(ArvGcFeatureNode *node)
 {
 	g_return_val_if_fail (ARV_IS_GC_NODE (node), NULL);
 
@@ -242,13 +242,13 @@ arv_gc_node_get_genicam	(ArvGcNode *node)
 }
 
 GType
-arv_gc_node_get_value_type (ArvGcNode *node)
+arv_gc_feature_node_get_value_type (ArvGcFeatureNode *node)
 {
-	ArvGcNodeClass *node_class;
+	ArvGcFeatureNodeClass *node_class;
 
 	g_return_val_if_fail (ARV_IS_GC_NODE (node), 0);
 
-	node_class = ARV_GC_NODE_GET_CLASS (node);
+	node_class = ARV_GC_FEATURE_NODE_GET_CLASS (node);
 	if (node_class->get_value_type != NULL)
 		return node_class->get_value_type (node);
 
@@ -256,29 +256,29 @@ arv_gc_node_get_value_type (ArvGcNode *node)
 }
 
 /**
- * arv_gc_node_set_value_from_string:
- * @gc_node: a #ArvGcNode
+ * arv_gc_feature_node_set_value_from_string:
+ * @gc_feature_node: a #ArvGcFeatureNode
  * @string: new node value, as string
  *
  * Set the node value using a string representation of the value. May not be applicable to every node type, but safe.
  */
 
 void
-arv_gc_node_set_value_from_string (ArvGcNode *gc_node, const char *string)
+arv_gc_feature_node_set_value_from_string (ArvGcFeatureNode *gc_feature_node, const char *string)
 {
-	ArvGcNodeClass *node_class;
+	ArvGcFeatureNodeClass *node_class;
 
-	g_return_if_fail (ARV_IS_GC_NODE (gc_node));
+	g_return_if_fail (ARV_IS_GC_NODE (gc_feature_node));
 	g_return_if_fail (string != NULL);
 
-	node_class = ARV_GC_NODE_GET_CLASS (gc_node);
+	node_class = ARV_GC_FEATURE_NODE_GET_CLASS (gc_feature_node);
 	if (node_class->set_value_from_string != NULL)
-		node_class->set_value_from_string (gc_node, string);
+		node_class->set_value_from_string (gc_feature_node, string);
 }
 
 /**
- * arv_gc_node_get_value_as_string:
- * @gc_node: a #ArvGcNode
+ * arv_gc_feature_node_get_value_as_string:
+ * @gc_feature_node: a #ArvGcFeatureNode
  *
  * Retrieve the node value a string.
  *
@@ -288,29 +288,29 @@ arv_gc_node_set_value_from_string (ArvGcNode *gc_node, const char *string)
  */
 
 const char *
-arv_gc_node_get_value_as_string (ArvGcNode *gc_node)
+arv_gc_feature_node_get_value_as_string (ArvGcFeatureNode *gc_feature_node)
 {
-	ArvGcNodeClass *node_class;
+	ArvGcFeatureNodeClass *node_class;
 
-	g_return_val_if_fail (ARV_IS_GC_NODE (gc_node), NULL);
+	g_return_val_if_fail (ARV_IS_GC_NODE (gc_feature_node), NULL);
 
-	node_class = ARV_GC_NODE_GET_CLASS (gc_node);
+	node_class = ARV_GC_FEATURE_NODE_GET_CLASS (gc_feature_node);
 	if (node_class->get_value_as_string != NULL)
-		return node_class->get_value_as_string (gc_node);
+		return node_class->get_value_as_string (gc_feature_node);
 
 	return NULL;
 }
 
 void
-arv_gc_node_inc_modification_count (ArvGcNode *gc_node)
+arv_gc_feature_node_inc_modification_count (ArvGcFeatureNode *gc_feature_node)
 {
-	g_return_if_fail (ARV_IS_GC_NODE (gc_node));
+	g_return_if_fail (ARV_IS_GC_NODE (gc_feature_node));
 
-	gc_node->priv->modification_count++;
+	gc_feature_node->priv->modification_count++;
 }
 
 gint
-arv_gc_node_get_modification_count (ArvGcNode *node)
+arv_gc_feature_node_get_modification_count (ArvGcFeatureNode *node)
 {
 	g_return_val_if_fail (ARV_IS_GC_NODE (node), 0);
 
@@ -318,29 +318,29 @@ arv_gc_node_get_modification_count (ArvGcNode *node)
 }
 
 static void
-arv_gc_node_init (ArvGcNode *gc_node)
+arv_gc_feature_node_init (ArvGcFeatureNode *gc_feature_node)
 {
-	gc_node->priv = G_TYPE_INSTANCE_GET_PRIVATE (gc_node, ARV_TYPE_GC_NODE, ArvGcNodePrivate);
+	gc_feature_node->priv = G_TYPE_INSTANCE_GET_PRIVATE (gc_feature_node, ARV_TYPE_GC_NODE, ArvGcFeatureNodePrivate);
 
-	gc_node->priv->name = NULL;
-	gc_node->priv->tooltip = NULL;
-	gc_node->priv->description = NULL;
-	gc_node->priv->display_name = NULL;
-	gc_node->priv->childs = NULL;
-	gc_node->priv->n_childs = 0;
+	gc_feature_node->priv->name = NULL;
+	gc_feature_node->priv->tooltip = NULL;
+	gc_feature_node->priv->description = NULL;
+	gc_feature_node->priv->display_name = NULL;
+	gc_feature_node->priv->childs = NULL;
+	gc_feature_node->priv->n_childs = 0;
 
-	g_value_init (&gc_node->priv->is_implemented, G_TYPE_INT64);
-	g_value_set_int64 (&gc_node->priv->is_implemented, 1);
-	g_value_init (&gc_node->priv->is_available, G_TYPE_INT64);
-	g_value_set_int64 (&gc_node->priv->is_available, 1);
+	g_value_init (&gc_feature_node->priv->is_implemented, G_TYPE_INT64);
+	g_value_set_int64 (&gc_feature_node->priv->is_implemented, 1);
+	g_value_init (&gc_feature_node->priv->is_available, G_TYPE_INT64);
+	g_value_set_int64 (&gc_feature_node->priv->is_available, 1);
 
-	gc_node->priv->modification_count = 0;
+	gc_feature_node->priv->modification_count = 0;
 }
 
 static void
-arv_gc_node_finalize (GObject *object)
+arv_gc_feature_node_finalize (GObject *object)
 {
-	ArvGcNode *node = ARV_GC_NODE (object);
+	ArvGcFeatureNode *node = ARV_GC_FEATURE_NODE (object);
 	GSList *iter;
 
 	for (iter = node->priv->childs; iter != NULL; iter = iter->next)
@@ -360,19 +360,19 @@ arv_gc_node_finalize (GObject *object)
 }
 
 static void
-arv_gc_node_class_init (ArvGcNodeClass *node_class)
+arv_gc_feature_node_class_init (ArvGcFeatureNodeClass *node_class)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (node_class);
 
-	g_type_class_add_private (node_class, sizeof (ArvGcNodePrivate));
+	g_type_class_add_private (node_class, sizeof (ArvGcFeatureNodePrivate));
 
 	parent_class = g_type_class_peek_parent (node_class);
 
-	object_class->finalize = arv_gc_node_finalize;
+	object_class->finalize = arv_gc_feature_node_finalize;
 
 	node_class->set_attribute = _set_attribute;
 	node_class->add_element = _add_element;
 	node_class->get_value_type = NULL;
 }
 
-G_DEFINE_TYPE (ArvGcNode, arv_gc_node, ARV_TYPE_DOM_ELEMENT)
+G_DEFINE_TYPE (ArvGcFeatureNode, arv_gc_feature_node, ARV_TYPE_DOM_ELEMENT)
diff --git a/src/arvgcfeaturenode.h b/src/arvgcfeaturenode.h
new file mode 100644
index 0000000..5c8bd1c
--- /dev/null
+++ b/src/arvgcfeaturenode.h
@@ -0,0 +1,86 @@
+/* Aravis - Digital camera library
+ *
+ * Copyright  2009-2012 Emmanuel Pacaud
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Author: Emmanuel Pacaud <emmanuel gnome org>
+ */
+
+#ifndef ARV_GC_FEATURE_NODE_H
+#define ARV_GC_FEATURE_NODE_H
+
+#include <arvtypes.h>
+#include <arvdomelement.h>
+
+G_BEGIN_DECLS
+
+#define ARV_TYPE_GC_NODE             (arv_gc_feature_node_get_type ())
+#define ARV_GC_FEATURE_NODE(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), ARV_TYPE_GC_NODE, ArvGcFeatureNode))
+#define ARV_GC_FEATURE_NODE_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), ARV_TYPE_GC_NODE, ArvGcFeatureNodeClass))
+#define ARV_IS_GC_NODE(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ARV_TYPE_GC_NODE))
+#define ARV_IS_GC_NODE_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), ARV_TYPE_GC_NODE))
+#define ARV_GC_FEATURE_NODE_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj), ARV_TYPE_GC_NODE, ArvGcFeatureNodeClass))
+
+typedef struct _ArvGcFeatureNodePrivate ArvGcFeatureNodePrivate;
+typedef struct _ArvGcFeatureNodeClass ArvGcFeatureNodeClass;
+
+struct _ArvGcFeatureNode {
+	ArvDomElement	base;
+
+	ArvGcFeatureNodePrivate *priv;
+};
+
+struct _ArvGcFeatureNodeClass {
+	ArvDomElementClass parent_class;
+
+	void		(*set_attribute)		(ArvGcFeatureNode *gc_feature_node, const char *name, const char *value);
+	void 		(*add_element)			(ArvGcFeatureNode *gc_feature_node, const char *name, const char *content,
+							 const char **attributes);
+	GType		(*get_value_type)		(ArvGcFeatureNode *gc_feature_node);
+	gboolean 	(*can_add_child) 		(ArvGcFeatureNode *gc_feature_node, ArvGcFeatureNode *child);
+
+	void		(*set_value_from_string)	(ArvGcFeatureNode *gc_feature_node, const char *string);
+	const char *	(*get_value_as_string)		(ArvGcFeatureNode *gc_feature_node);
+};
+
+GType arv_gc_feature_node_get_type (void);
+
+ArvGcFeatureNode * 	arv_gc_feature_node_new 			(void);
+GType 		arv_gc_feature_node_get_value_type 		(ArvGcFeatureNode *gc_feature_node);
+void		arv_gc_feature_node_set_value_from_string	(ArvGcFeatureNode *gc_feature_node, const char *string);
+const char *	arv_gc_feature_node_get_value_as_string		(ArvGcFeatureNode *gc_feature_node);
+void		arv_gc_feature_node_set_genicam			(ArvGcFeatureNode *gc_feature_node, ArvGc *genicam);
+ArvGc * 	arv_gc_feature_node_get_genicam			(ArvGcFeatureNode *gc_feature_node);
+const char *	arv_gc_feature_node_get_name			(ArvGcFeatureNode *gc_feature_node);
+const char *	arv_gc_feature_node_get_tooltip			(ArvGcFeatureNode *gc_feature_node);
+const char *	arv_gc_feature_node_get_description		(ArvGcFeatureNode *gc_feature_node);
+gboolean	arv_gc_feature_node_is_available		(ArvGcFeatureNode *gc_feature_node);
+void		arv_gc_feature_node_set_attribute 		(ArvGcFeatureNode *gc_feature_node, const char *name, const char *value);
+void 		arv_gc_feature_node_add_element 		(ArvGcFeatureNode *gc_feature_node, const char *name, const char *content,
+							 const char **attributes);
+gboolean 	arv_gc_feature_node_can_add_child 		(ArvGcFeatureNode *gc_feature_node, ArvGcFeatureNode *child);
+void 		arv_gc_feature_node_add_child 			(ArvGcFeatureNode *gc_feature_node, ArvGcFeatureNode *child);
+const GSList *	arv_gc_feature_node_get_childs 			(ArvGcFeatureNode *gc_feature_node);
+unsigned int 	arv_gc_feature_node_get_n_childs 		(ArvGcFeatureNode *gc_feature_node);
+void 		arv_gc_feature_node_inc_modification_count 	(ArvGcFeatureNode *gc_feature_node);
+gint 		arv_gc_feature_node_get_modification_count 	(ArvGcFeatureNode *gc_feature_node);
+
+const char * 	arv_gc_feature_node_get_content (ArvGcFeatureNode *node);
+
+G_END_DECLS
+
+#endif
diff --git a/src/arvgcfloatnode.c b/src/arvgcfloatnode.c
index a1da449..bab6dd4 100644
--- a/src/arvgcfloatnode.c
+++ b/src/arvgcfloatnode.c
@@ -42,10 +42,10 @@ arv_gc_float_node_get_node_name (ArvDomNode *node)
 	return "Float";
 }
 
-/* ArvGcNode implementation */
+/* ArvGcFeatureNode implementation */
 
 static void
-arv_gc_float_node_add_element (ArvGcNode *node, const char *name, const char *content, const char **attributes)
+arv_gc_float_node_add_element (ArvGcFeatureNode *node, const char *name, const char *content, const char **attributes)
 {
 	ArvGcFloatNode *gc_float_node = ARV_GC_FLOAT_NODE (node);
 	double value;
@@ -75,24 +75,24 @@ arv_gc_float_node_add_element (ArvGcNode *node, const char *name, const char *co
 		g_free (gc_float_node->unit);
 		gc_float_node->unit = g_strdup (content);
 	} else
-		ARV_GC_NODE_CLASS (parent_class)->add_element (node, name, content, attributes);
+		ARV_GC_FEATURE_NODE_CLASS (parent_class)->add_element (node, name, content, attributes);
 }
 
 static GType
-arv_gc_float_node_get_value_type (ArvGcNode *node)
+arv_gc_float_node_get_value_type (ArvGcFeatureNode *node)
 {
 	return G_TYPE_DOUBLE;
 }
 
 
 static void
-arv_gc_float_node_set_value_from_string (ArvGcNode *node, const char *string)
+arv_gc_float_node_set_value_from_string (ArvGcFeatureNode *node, const char *string)
 {
 	arv_gc_float_set_value (ARV_GC_FLOAT (node), g_ascii_strtod (string, NULL));
 }
 
 static const char *
-arv_gc_float_node_get_value_as_string (ArvGcNode *node)
+arv_gc_float_node_get_value_as_string (ArvGcFeatureNode *node)
 {
 	ArvGcFloatNode *float_node = ARV_GC_FLOAT_NODE (node);
 
@@ -104,10 +104,10 @@ arv_gc_float_node_get_value_as_string (ArvGcNode *node)
 
 /* ArvGcFloatNode implementation */
 
-ArvGcNode *
+ArvGcFeatureNode *
 arv_gc_float_node_new (void)
 {
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	node = g_object_new (ARV_TYPE_GC_FLOAT_NODE, NULL);
 
@@ -150,16 +150,16 @@ arv_gc_float_node_class_init (ArvGcFloatNodeClass *this_class)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (this_class);
 	ArvDomNodeClass *dom_node_class = ARV_DOM_NODE_CLASS (this_class);
-	ArvGcNodeClass *gc_node_class = ARV_GC_NODE_CLASS (this_class);
+	ArvGcFeatureNodeClass *gc_feature_node_class = ARV_GC_FEATURE_NODE_CLASS (this_class);
 
 	parent_class = g_type_class_peek_parent (this_class);
 
 	object_class->finalize = arv_gc_float_node_finalize;
 	dom_node_class->get_node_name = arv_gc_float_node_get_node_name;
-	gc_node_class->add_element = arv_gc_float_node_add_element;
-	gc_node_class->get_value_type = arv_gc_float_node_get_value_type;
-	gc_node_class->set_value_from_string = arv_gc_float_node_set_value_from_string;
-	gc_node_class->get_value_as_string = arv_gc_float_node_get_value_as_string;
+	gc_feature_node_class->add_element = arv_gc_float_node_add_element;
+	gc_feature_node_class->get_value_type = arv_gc_float_node_get_value_type;
+	gc_feature_node_class->set_value_from_string = arv_gc_float_node_set_value_from_string;
+	gc_feature_node_class->get_value_as_string = arv_gc_float_node_get_value_as_string;
 }
 
 /* ArvGcFloat interface implementation */
@@ -170,7 +170,7 @@ arv_gc_float_node_get_float_value (ArvGcFloat *gc_float)
 	ArvGcFloatNode *gc_float_node = ARV_GC_FLOAT_NODE (gc_float);
 	ArvGc *genicam;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_float));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_float));
 	return arv_gc_get_double_from_value (genicam, &gc_float_node->value);
 }
 
@@ -180,7 +180,7 @@ arv_gc_float_node_set_float_value (ArvGcFloat *gc_float, double value)
 	ArvGcFloatNode *gc_float_node = ARV_GC_FLOAT_NODE (gc_float);
 	ArvGc *genicam;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_float));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_float));
 	arv_gc_set_double_to_value (genicam, &gc_float_node->value, value);
 }
 
@@ -190,7 +190,7 @@ arv_gc_float_node_get_min (ArvGcFloat *gc_float)
 	ArvGcFloatNode *gc_float_node = ARV_GC_FLOAT_NODE (gc_float);
 	ArvGc *genicam;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_float));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_float));
 	return arv_gc_get_double_from_value (genicam, &gc_float_node->minimum);
 }
 
@@ -200,7 +200,7 @@ arv_gc_float_node_get_max (ArvGcFloat *gc_float)
 	ArvGcFloatNode *gc_float_node = ARV_GC_FLOAT_NODE (gc_float);
 	ArvGc *genicam;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_float));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_float));
 	return arv_gc_get_double_from_value (genicam, &gc_float_node->maximum);
 }
 
@@ -210,7 +210,7 @@ arv_gc_float_node_get_inc (ArvGcFloat *gc_float)
 	ArvGcFloatNode *gc_float_node = ARV_GC_FLOAT_NODE (gc_float);
 	ArvGc *genicam;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_float));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_float));
 	return arv_gc_get_int64_from_value (genicam, &gc_float_node->increment);
 }
 
@@ -228,7 +228,7 @@ arv_gc_float_node_impose_min (ArvGcFloat *gc_float, double minimum)
 	ArvGcFloatNode *gc_float_node = ARV_GC_FLOAT_NODE (gc_float);
 	ArvGc *genicam;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_float));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_float));
 	arv_gc_set_double_to_value (genicam, &gc_float_node->minimum, minimum);
 }
 
@@ -238,7 +238,7 @@ arv_gc_float_node_impose_max (ArvGcFloat *gc_float, double maximum)
 	ArvGcFloatNode *gc_float_node = ARV_GC_FLOAT_NODE (gc_float);
 	ArvGc *genicam;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_float));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_float));
 	arv_gc_set_double_to_value (genicam, &gc_float_node->minimum, maximum);
 }
 
diff --git a/src/arvgcfloatnode.h b/src/arvgcfloatnode.h
index 07b56e3..2418600 100644
--- a/src/arvgcfloatnode.h
+++ b/src/arvgcfloatnode.h
@@ -24,7 +24,7 @@
 #define ARV_GC_FLOAT_NODE_H
 
 #include <arvtypes.h>
-#include <arvgcnode.h>
+#include <arvgcfeaturenode.h>
 
 G_BEGIN_DECLS
 
@@ -38,7 +38,7 @@ G_BEGIN_DECLS
 typedef struct _ArvGcFloatNodeClass ArvGcFloatNodeClass;
 
 struct _ArvGcFloatNode {
-	ArvGcNode	node;
+	ArvGcFeatureNode	node;
 
 	GValue value;
 	GValue minimum;
@@ -50,12 +50,12 @@ struct _ArvGcFloatNode {
 };
 
 struct _ArvGcFloatNodeClass {
-	ArvGcNodeClass parent_class;
+	ArvGcFeatureNodeClass parent_class;
 };
 
 GType 		arv_gc_float_node_get_type 	(void);
 
-ArvGcNode * 	arv_gc_float_node_new 	(void);
+ArvGcFeatureNode * 	arv_gc_float_node_new 	(void);
 
 G_END_DECLS
 
diff --git a/src/arvgcintegernode.c b/src/arvgcintegernode.c
index 50b2bb2..ab37dce 100644
--- a/src/arvgcintegernode.c
+++ b/src/arvgcintegernode.c
@@ -42,10 +42,10 @@ arv_gc_integer_node_get_node_name (ArvDomNode *node)
 	return "Integer";
 }
 
-/* ArvGcNode implementation */
+/* ArvGcFeatureNode implementation */
 
 static void
-arv_gc_integer_node_add_element (ArvGcNode *node, const char *name, const char *content, const char **attributes)
+arv_gc_integer_node_add_element (ArvGcFeatureNode *node, const char *name, const char *content, const char **attributes)
 {
 	ArvGcIntegerNode *gc_integer_node = ARV_GC_INTEGER_NODE (node);
 
@@ -73,23 +73,23 @@ arv_gc_integer_node_add_element (ArvGcNode *node, const char *name, const char *
 		g_free (gc_integer_node->unit);
 		gc_integer_node->unit = g_strdup (content);
 	} else
-		ARV_GC_NODE_CLASS (parent_class)->add_element (node, name, content, attributes);
+		ARV_GC_FEATURE_NODE_CLASS (parent_class)->add_element (node, name, content, attributes);
 }
 
 static GType
-arv_gc_integer_node_get_value_type (ArvGcNode *node)
+arv_gc_integer_node_get_value_type (ArvGcFeatureNode *node)
 {
 	return G_TYPE_INT64;
 }
 
 static void
-arv_gc_integer_node_set_value_from_string (ArvGcNode *node, const char *string)
+arv_gc_integer_node_set_value_from_string (ArvGcFeatureNode *node, const char *string)
 {
 	arv_gc_integer_set_value (ARV_GC_INTEGER (node), g_ascii_strtoll (string, NULL, 0));
 }
 
 static const char *
-arv_gc_integer_node_get_value_as_string (ArvGcNode *node)
+arv_gc_integer_node_get_value_as_string (ArvGcFeatureNode *node)
 {
 	ArvGcIntegerNode *integer_node = ARV_GC_INTEGER_NODE (node);
 
@@ -101,10 +101,10 @@ arv_gc_integer_node_get_value_as_string (ArvGcNode *node)
 
 /* ArvGcIntegerNode implementation */
 
-ArvGcNode *
+ArvGcFeatureNode *
 arv_gc_integer_node_new (void)
 {
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	node = g_object_new (ARV_TYPE_GC_INTEGER_NODE, NULL);
 
@@ -147,16 +147,16 @@ arv_gc_integer_node_class_init (ArvGcIntegerNodeClass *this_class)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (this_class);
 	ArvDomNodeClass *dom_node_class = ARV_DOM_NODE_CLASS (this_class);
-	ArvGcNodeClass *gc_node_class = ARV_GC_NODE_CLASS (this_class);
+	ArvGcFeatureNodeClass *gc_feature_node_class = ARV_GC_FEATURE_NODE_CLASS (this_class);
 
 	parent_class = g_type_class_peek_parent (this_class);
 
 	object_class->finalize = arv_gc_integer_node_finalize;
 	dom_node_class->get_node_name = arv_gc_integer_node_get_node_name;
-	gc_node_class->add_element = arv_gc_integer_node_add_element;
-	gc_node_class->get_value_type = arv_gc_integer_node_get_value_type;
-	gc_node_class->set_value_from_string = arv_gc_integer_node_set_value_from_string;
-	gc_node_class->get_value_as_string = arv_gc_integer_node_get_value_as_string;
+	gc_feature_node_class->add_element = arv_gc_integer_node_add_element;
+	gc_feature_node_class->get_value_type = arv_gc_integer_node_get_value_type;
+	gc_feature_node_class->set_value_from_string = arv_gc_integer_node_set_value_from_string;
+	gc_feature_node_class->get_value_as_string = arv_gc_integer_node_get_value_as_string;
 }
 
 /* ArvGcInteger interface implementation */
@@ -167,7 +167,7 @@ arv_gc_integer_node_get_integer_value (ArvGcInteger *gc_integer)
 	ArvGcIntegerNode *gc_integer_node = ARV_GC_INTEGER_NODE (gc_integer);
 	ArvGc *genicam;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_integer));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_integer));
 	return arv_gc_get_int64_from_value (genicam, &gc_integer_node->value);
 }
 
@@ -177,7 +177,7 @@ arv_gc_integer_node_set_integer_value (ArvGcInteger *gc_integer, gint64 value)
 	ArvGcIntegerNode *gc_integer_node = ARV_GC_INTEGER_NODE (gc_integer);
 	ArvGc *genicam;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_integer));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_integer));
 	arv_gc_set_int64_to_value (genicam, &gc_integer_node->value, value);
 }
 
@@ -187,7 +187,7 @@ arv_gc_integer_node_get_min (ArvGcInteger *gc_integer)
 	ArvGcIntegerNode *gc_integer_node = ARV_GC_INTEGER_NODE (gc_integer);
 	ArvGc *genicam;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_integer));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_integer));
 	return arv_gc_get_int64_from_value (genicam, &gc_integer_node->minimum);
 }
 
@@ -197,7 +197,7 @@ arv_gc_integer_node_get_max (ArvGcInteger *gc_integer)
 	ArvGcIntegerNode *gc_integer_node = ARV_GC_INTEGER_NODE (gc_integer);
 	ArvGc *genicam;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_integer));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_integer));
 	return arv_gc_get_int64_from_value (genicam, &gc_integer_node->maximum);
 }
 
@@ -207,7 +207,7 @@ arv_gc_integer_node_get_inc (ArvGcInteger *gc_integer)
 	ArvGcIntegerNode *gc_integer_node = ARV_GC_INTEGER_NODE (gc_integer);
 	ArvGc *genicam;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_integer));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_integer));
 	return arv_gc_get_int64_from_value (genicam, &gc_integer_node->increment);
 }
 
@@ -225,7 +225,7 @@ arv_gc_integer_node_impose_min (ArvGcInteger *gc_integer, gint64 minimum)
 	ArvGcIntegerNode *gc_integer_node = ARV_GC_INTEGER_NODE (gc_integer);
 	ArvGc *genicam;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_integer));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_integer));
 	arv_gc_set_int64_to_value (genicam, &gc_integer_node->minimum, minimum);
 }
 
@@ -235,7 +235,7 @@ arv_gc_integer_node_impose_max (ArvGcInteger *gc_integer, gint64 maximum)
 	ArvGcIntegerNode *gc_integer_node = ARV_GC_INTEGER_NODE (gc_integer);
 	ArvGc *genicam;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_integer));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_integer));
 	arv_gc_set_int64_to_value (genicam, &gc_integer_node->minimum, maximum);
 }
 
diff --git a/src/arvgcintegernode.h b/src/arvgcintegernode.h
index db098a3..ee332ce 100644
--- a/src/arvgcintegernode.h
+++ b/src/arvgcintegernode.h
@@ -24,7 +24,7 @@
 #define ARV_GC_INTEGER_NODE_H
 
 #include <arvtypes.h>
-#include <arvgcnode.h>
+#include <arvgcfeaturenode.h>
 
 G_BEGIN_DECLS
 
@@ -38,7 +38,7 @@ G_BEGIN_DECLS
 typedef struct _ArvGcIntegerNodeClass ArvGcIntegerNodeClass;
 
 struct _ArvGcIntegerNode {
-	ArvGcNode	node;
+	ArvGcFeatureNode	node;
 
 	GValue value;
 	GValue minimum;
@@ -50,12 +50,12 @@ struct _ArvGcIntegerNode {
 };
 
 struct _ArvGcIntegerNodeClass {
-	ArvGcNodeClass parent_class;
+	ArvGcFeatureNodeClass parent_class;
 };
 
 GType 		arv_gc_integer_node_get_type 	(void);
 
-ArvGcNode * 	arv_gc_integer_node_new 	(void);
+ArvGcFeatureNode * 	arv_gc_integer_node_new 	(void);
 
 G_END_DECLS
 
diff --git a/src/arvgcport.c b/src/arvgcport.c
index a55aaa5..a583a97 100644
--- a/src/arvgcport.c
+++ b/src/arvgcport.c
@@ -49,7 +49,7 @@ arv_gc_port_read (ArvGcPort *port, void *buffer, guint64 address, guint64 length
 
 	g_return_if_fail (ARV_IS_GC_PORT (port));
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (port));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (port));
 	device = arv_gc_get_device (genicam);
 
 	arv_device_read_memory (device, address, length, buffer);
@@ -63,16 +63,16 @@ arv_gc_port_write (ArvGcPort *port, void *buffer, guint64 address, guint64 lengt
 
 	g_return_if_fail (ARV_IS_GC_PORT (port));
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (port));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (port));
 	device = arv_gc_get_device (genicam);
 
 	arv_device_write_memory (device, address, length, buffer);
 }
 
-ArvGcNode *
+ArvGcFeatureNode *
 arv_gc_port_new (void)
 {
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	node = g_object_new (ARV_TYPE_GC_PORT, NULL);
 
diff --git a/src/arvgcport.h b/src/arvgcport.h
index a225291..0f98ea6 100644
--- a/src/arvgcport.h
+++ b/src/arvgcport.h
@@ -24,7 +24,7 @@
 #define ARV_GC_PORT_H
 
 #include <arvtypes.h>
-#include <arvgcnode.h>
+#include <arvgcfeaturenode.h>
 
 G_BEGIN_DECLS
 
@@ -38,16 +38,16 @@ G_BEGIN_DECLS
 typedef struct _ArvGcPortClass ArvGcPortClass;
 
 struct _ArvGcPort {
-	ArvGcNode node;
+	ArvGcFeatureNode node;
 };
 
 struct _ArvGcPortClass {
-	ArvGcNodeClass parent_class;
+	ArvGcFeatureNodeClass parent_class;
 };
 
 GType arv_gc_port_get_type (void);
 
-ArvGcNode * 		arv_gc_port_new 	(void);
+ArvGcFeatureNode * 		arv_gc_port_new 	(void);
 
 void 			arv_gc_port_read	(ArvGcPort *port, void *buffer, guint64 address, guint64 length);
 void 			arv_gc_port_write	(ArvGcPort *port, void *buffer, guint64 address, guint64 length);
diff --git a/src/arvgcpropertynode.c b/src/arvgcpropertynode.c
index b8021aa..d9d165b 100644
--- a/src/arvgcpropertynode.c
+++ b/src/arvgcpropertynode.c
@@ -21,7 +21,7 @@
  */
 
 /**
- * SECTION: arvgcnode
+ * SECTION: arvgcfeaturenode
  * @short_description: Base class for all Genicam nodes
  *
  * #ArvGcPropertyNode provides a base class for the implementation of the different
diff --git a/src/arvgcregister.c b/src/arvgcregister.c
index 24cb019..8f90a6e 100644
--- a/src/arvgcregister.c
+++ b/src/arvgcregister.c
@@ -66,10 +66,10 @@ arv_gc_register_get_node_name (ArvDomNode *node)
 	return NULL;
 }
 
-/* ArvGcNode implementation */
+/* ArvGcFeatureNode implementation */
 
 static void
-arv_gc_register_add_element (ArvGcNode *node, const char *name, const char *content, const char **attributes)
+arv_gc_register_add_element (ArvGcFeatureNode *node, const char *name, const char *content, const char **attributes)
 {
 	ArvGcRegister *gc_register = ARV_GC_REGISTER (node);
 
@@ -143,11 +143,11 @@ arv_gc_register_add_element (ArvGcNode *node, const char *name, const char *cont
 		gc_register->msb = content != NULL ? atoi (content) : 0;
 		gc_register->lsb = content != NULL ? atoi (content) : 0;
 	} else
-		ARV_GC_NODE_CLASS (parent_class)->add_element (node, name, content, attributes);
+		ARV_GC_FEATURE_NODE_CLASS (parent_class)->add_element (node, name, content, attributes);
 }
 
 static GType
-arv_gc_register_get_value_type (ArvGcNode *node)
+arv_gc_register_get_value_type (ArvGcFeatureNode *node)
 {
 	ArvGcRegister *gc_register = ARV_GC_REGISTER (node);
 
@@ -155,7 +155,7 @@ arv_gc_register_get_value_type (ArvGcNode *node)
 }
 
 static void
-arv_gc_register_set_value_from_string (ArvGcNode *node, const char *string)
+arv_gc_register_set_value_from_string (ArvGcFeatureNode *node, const char *string)
 {
 	ArvGcRegister *gc_register = ARV_GC_REGISTER (node);
 
@@ -175,7 +175,7 @@ arv_gc_register_set_value_from_string (ArvGcNode *node, const char *string)
 }
 
 static const char *
-arv_gc_register_get_value_as_string (ArvGcNode *node)
+arv_gc_register_get_value_as_string (ArvGcFeatureNode *node)
 {
 	ArvGcRegister *gc_register = ARV_GC_REGISTER (node);
 
@@ -207,13 +207,13 @@ _get_cache_validity (ArvGcRegister *gc_register)
 	gint modification_count;
 	gboolean is_cache_valid = gc_register->is_cache_valid;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_register));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_register));
 
 	for (iter = gc_register->invalidators; iter != NULL; iter = iter->next) {
 		ArvGcInvalidator *invalidator = iter->data;
 
 		modification_count = invalidator->modification_count;
-		invalidator->modification_count = arv_gc_node_get_modification_count
+		invalidator->modification_count = arv_gc_feature_node_get_modification_count
 			(arv_gc_get_node (genicam, invalidator->node));
 		if (modification_count != invalidator->modification_count)
 			is_cache_valid = FALSE;
@@ -240,14 +240,14 @@ static void
 _read_cache (ArvGcRegister *gc_register)
 {
 	ArvGc *genicam;
-	ArvGcNode *port;
+	ArvGcFeatureNode *port;
 
 	if (gc_register->is_cache_valid == TRUE) {
 		arv_log_genicam ("[GcRegister::read_cache] Cache is valid");
 		return;
 	}
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_register));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_register));
 	g_return_if_fail (ARV_IS_GC (genicam));
 
 	port = arv_gc_get_node (genicam, gc_register->port_name);
@@ -271,12 +271,12 @@ static void
 _write_cache (ArvGcRegister *gc_register)
 {
 	ArvGc *genicam;
-	ArvGcNode *port;
+	ArvGcFeatureNode *port;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_register));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_register));
 	g_return_if_fail (ARV_IS_GC (genicam));
 
-	arv_gc_node_inc_modification_count (ARV_GC_NODE (gc_register));
+	arv_gc_feature_node_inc_modification_count (ARV_GC_FEATURE_NODE (gc_register));
 
 	port = arv_gc_get_node (genicam, gc_register->port_name);
 	if (!ARV_IS_GC_PORT (port))
@@ -336,14 +336,14 @@ arv_gc_register_get_address (ArvGcRegister *gc_register)
 	guint64 value = 0;
 
 	g_return_val_if_fail (ARV_IS_GC_REGISTER (gc_register), 0);
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_register));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_register));
 	g_return_val_if_fail (ARV_IS_GC (genicam), 0);
 
 	for (iter = gc_register->addresses; iter != NULL; iter = iter->next)
 		value += arv_gc_get_int64_from_value (genicam, iter->data);
 
 	if (gc_register->index != NULL) {
-		ArvGcNode *node;
+		ArvGcFeatureNode *node;
 
 		node = arv_gc_get_node (genicam, gc_register->index);
 		if (ARV_IS_GC_INTEGER (node)) {
@@ -372,13 +372,13 @@ arv_gc_register_get_length (ArvGcRegister *gc_register)
 	ArvGc *genicam;
 
 	g_return_val_if_fail (ARV_IS_GC_REGISTER (gc_register), 0);
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_register));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_register));
 	g_return_val_if_fail (ARV_IS_GC (genicam), 0);
 
 	return arv_gc_get_int64_from_value (genicam, &gc_register->length);
 }
 
-ArvGcNode *
+ArvGcFeatureNode *
 arv_gc_register_new (void)
 {
 	ArvGcRegister *gc_register;
@@ -387,10 +387,10 @@ arv_gc_register_new (void)
 	gc_register->type = ARV_GC_REGISTER_TYPE_REGISTER;
 	gc_register->value_type = G_TYPE_BYTE_ARRAY;
 
-	return ARV_GC_NODE (gc_register);
+	return ARV_GC_FEATURE_NODE (gc_register);
 }
 
-ArvGcNode *
+ArvGcFeatureNode *
 arv_gc_register_new_integer (void)
 {
 	ArvGcRegister *gc_register;
@@ -399,10 +399,10 @@ arv_gc_register_new_integer (void)
 	gc_register->type = ARV_GC_REGISTER_TYPE_INTEGER;
 	gc_register->value_type = G_TYPE_INT64;
 
-	return ARV_GC_NODE (gc_register);
+	return ARV_GC_FEATURE_NODE (gc_register);
 }
 
-ArvGcNode *
+ArvGcFeatureNode *
 arv_gc_register_new_masked_integer (void)
 {
 	ArvGcRegister *gc_register;
@@ -411,10 +411,10 @@ arv_gc_register_new_masked_integer (void)
 	gc_register->type = ARV_GC_REGISTER_TYPE_MASKED_INTEGER;
 	gc_register->value_type = G_TYPE_INT64;
 
-	return ARV_GC_NODE (gc_register);
+	return ARV_GC_FEATURE_NODE (gc_register);
 }
 
-ArvGcNode *
+ArvGcFeatureNode *
 arv_gc_register_new_float (void)
 {
 	ArvGcRegister *gc_register;
@@ -423,10 +423,10 @@ arv_gc_register_new_float (void)
 	gc_register->type = ARV_GC_REGISTER_TYPE_FLOAT;
 	gc_register->value_type = G_TYPE_DOUBLE;
 
-	return ARV_GC_NODE (gc_register);
+	return ARV_GC_FEATURE_NODE (gc_register);
 }
 
-ArvGcNode *
+ArvGcFeatureNode *
 arv_gc_register_new_string (void)
 {
 	ArvGcRegister *gc_register;
@@ -435,7 +435,7 @@ arv_gc_register_new_string (void)
 	gc_register->type = ARV_GC_REGISTER_TYPE_STRING;
 	gc_register->value_type = G_TYPE_STRING;
 
-	return ARV_GC_NODE (gc_register);
+	return ARV_GC_FEATURE_NODE (gc_register);
 }
 
 static void
@@ -487,16 +487,16 @@ arv_gc_register_class_init (ArvGcRegisterClass *this_class)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (this_class);
 	ArvDomNodeClass *dom_node_class = ARV_DOM_NODE_CLASS (this_class);
-	ArvGcNodeClass *gc_node_class = ARV_GC_NODE_CLASS (this_class);
+	ArvGcFeatureNodeClass *gc_feature_node_class = ARV_GC_FEATURE_NODE_CLASS (this_class);
 
 	parent_class = g_type_class_peek_parent (this_class);
 
 	object_class->finalize = arv_gc_register_finalize;
 	dom_node_class->get_node_name = arv_gc_register_get_node_name;
-	gc_node_class->add_element = arv_gc_register_add_element;
-	gc_node_class->get_value_type = arv_gc_register_get_value_type;
-	gc_node_class->set_value_from_string = arv_gc_register_set_value_from_string;
-	gc_node_class->get_value_as_string = arv_gc_register_get_value_as_string;
+	gc_feature_node_class->add_element = arv_gc_register_add_element;
+	gc_feature_node_class->get_value_type = arv_gc_register_get_value_type;
+	gc_feature_node_class->set_value_from_string = arv_gc_register_set_value_from_string;
+	gc_feature_node_class->get_value_as_string = arv_gc_register_get_value_as_string;
 }
 
 /* ArvGcInteger interface implementation */
@@ -628,7 +628,7 @@ arv_gc_register_set_float_value (ArvGcFloat *gc_float, double v_double)
 	ArvGcRegister *gc_register = ARV_GC_REGISTER (gc_float);
 	ArvGc *genicam;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_register));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_register));
 	g_return_if_fail (ARV_IS_GC (genicam));
 
 	_update_cache_size (gc_register, genicam);
@@ -674,7 +674,7 @@ arv_gc_register_set_string_value (ArvGcString *gc_string, const char *value)
 	ArvGcRegister *gc_register = ARV_GC_REGISTER (gc_string);
 	ArvGc *genicam;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_register));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_register));
 	g_return_if_fail (ARV_IS_GC (genicam));
 
 	_update_cache_size (gc_register, genicam);
diff --git a/src/arvgcregister.h b/src/arvgcregister.h
index 5a61b5c..0e11aed 100644
--- a/src/arvgcregister.h
+++ b/src/arvgcregister.h
@@ -24,7 +24,7 @@
 #define ARV_GC_REGISTER_H
 
 #include <arvtypes.h>
-#include <arvgcnode.h>
+#include <arvgcfeaturenode.h>
 
 G_BEGIN_DECLS
 
@@ -67,7 +67,7 @@ typedef enum {
 typedef struct _ArvGcRegisterClass ArvGcRegisterClass;
 
 struct _ArvGcRegister {
-	ArvGcNode	node;
+	ArvGcFeatureNode	node;
 
 	ArvGcRegisterType type;
 	GType value_type;
@@ -94,15 +94,15 @@ struct _ArvGcRegister {
 };
 
 struct _ArvGcRegisterClass {
-	ArvGcNodeClass parent_class;
+	ArvGcFeatureNodeClass parent_class;
 };
 
 GType 		arv_gc_register_get_type 		(void);
-ArvGcNode * 	arv_gc_register_new 			(void);
-ArvGcNode * 	arv_gc_register_new_integer 		(void);
-ArvGcNode * 	arv_gc_register_new_masked_integer 	(void);
-ArvGcNode * 	arv_gc_register_new_float	 	(void);
-ArvGcNode * 	arv_gc_register_new_string 		(void);
+ArvGcFeatureNode * 	arv_gc_register_new 			(void);
+ArvGcFeatureNode * 	arv_gc_register_new_integer 		(void);
+ArvGcFeatureNode * 	arv_gc_register_new_masked_integer 	(void);
+ArvGcFeatureNode * 	arv_gc_register_new_float	 	(void);
+ArvGcFeatureNode * 	arv_gc_register_new_string 		(void);
 void 		arv_gc_register_get			(ArvGcRegister *gc_register, void *buffer, guint64 Length);
 void 		arv_gc_register_set			(ArvGcRegister *gc_register, void *buffer, guint64 Length);
 guint64 	arv_gc_register_get_address 		(ArvGcRegister *gc_register);
diff --git a/src/arvgcregisterdescriptionnode.h b/src/arvgcregisterdescriptionnode.h
index 553b0bb..a1e3821 100644
--- a/src/arvgcregisterdescriptionnode.h
+++ b/src/arvgcregisterdescriptionnode.h
@@ -24,7 +24,7 @@
 #define ARV_GC_REGISTER_DESCRIPTION_NODE_H
 
 #include <arvtypes.h>
-#include <arvgcnode.h>
+#include <arvgcfeaturenode.h>
 
 G_BEGIN_DECLS
 
@@ -38,11 +38,11 @@ G_BEGIN_DECLS
 typedef struct _ArvGcRegisterDescriptionNodeClass ArvGcRegisterDescriptionNodeClass;
 
 struct _ArvGcRegisterDescriptionNode {
-	ArvGcNode	node;
+	ArvGcFeatureNode	node;
 };
 
 struct _ArvGcRegisterDescriptionNodeClass {
-	ArvGcNodeClass parent_class;
+	ArvGcFeatureNodeClass parent_class;
 };
 
 GType 		arv_gc_register_description_node_get_type 	(void);
diff --git a/src/arvgcswissknife.c b/src/arvgcswissknife.c
index 6e1b725..35d6c08 100644
--- a/src/arvgcswissknife.c
+++ b/src/arvgcswissknife.c
@@ -54,10 +54,10 @@ arv_gc_swiss_knife_get_node_name (ArvDomNode *node)
 	return "IntSwissKnife";
 }
 
-/* ArvGcNode implementation */
+/* ArvGcFeatureNode implementation */
 
 static void
-arv_gc_swiss_knife_add_element (ArvGcNode *node, const char *name, const char *content, const char **attributes)
+arv_gc_swiss_knife_add_element (ArvGcFeatureNode *node, const char *name, const char *content, const char **attributes)
 {
 	ArvGcSwissKnife *gc_swiss_knife = ARV_GC_SWISS_KNIFE (node);
 
@@ -90,20 +90,20 @@ arv_gc_swiss_knife_add_element (ArvGcNode *node, const char *name, const char *c
 	} else if (strcmp (name, "Constant") == 0) {
 		g_assert_not_reached ();
 	} else
-		ARV_GC_NODE_CLASS (parent_class)->add_element (node, name, content, attributes);
+		ARV_GC_FEATURE_NODE_CLASS (parent_class)->add_element (node, name, content, attributes);
 }
 
 /* ArvGcSwissKnife implementation */
 
 static GType
-arv_gc_swiss_knife_node_get_value_type (ArvGcNode *node)
+arv_gc_swiss_knife_node_get_value_type (ArvGcFeatureNode *node)
 {
 	ArvGcSwissKnife *gc_swiss_knife = ARV_GC_SWISS_KNIFE (node);
 
 	return gc_swiss_knife->value_type;
 }
 
-ArvGcNode *
+ArvGcFeatureNode *
 arv_gc_swiss_knife_new (void)
 {
 	ArvGcSwissKnife *swiss_knife;
@@ -111,10 +111,10 @@ arv_gc_swiss_knife_new (void)
 	swiss_knife = g_object_new (ARV_TYPE_GC_SWISS_KNIFE, NULL);
 	swiss_knife->value_type = G_TYPE_DOUBLE;
 
-	return ARV_GC_NODE (swiss_knife);
+	return ARV_GC_FEATURE_NODE (swiss_knife);
 }
 
-ArvGcNode *
+ArvGcFeatureNode *
 arv_gc_swiss_knife_new_integer (void)
 {
 	ArvGcSwissKnife *swiss_knife;
@@ -122,7 +122,7 @@ arv_gc_swiss_knife_new_integer (void)
 	swiss_knife = g_object_new (ARV_TYPE_GC_SWISS_KNIFE, NULL);
 	swiss_knife->value_type = G_TYPE_INT64;
 
-	return ARV_GC_NODE (swiss_knife);
+	return ARV_GC_FEATURE_NODE (swiss_knife);
 }
 
 static void
@@ -156,14 +156,14 @@ arv_gc_swiss_knife_class_init (ArvGcSwissKnifeClass *this_class)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (this_class);
 	ArvDomNodeClass *dom_node_class = ARV_DOM_NODE_CLASS (this_class);
-	ArvGcNodeClass *gc_node_class = ARV_GC_NODE_CLASS (this_class);
+	ArvGcFeatureNodeClass *gc_feature_node_class = ARV_GC_FEATURE_NODE_CLASS (this_class);
 
 	parent_class = g_type_class_peek_parent (this_class);
 
 	object_class->finalize = arv_gc_swiss_knife_finalize;
 	dom_node_class->get_node_name = arv_gc_swiss_knife_get_node_name;
-	gc_node_class->add_element = arv_gc_swiss_knife_add_element;
-	gc_node_class->get_value_type = arv_gc_swiss_knife_node_get_value_type;
+	gc_feature_node_class->add_element = arv_gc_swiss_knife_add_element;
+	gc_feature_node_class->get_value_type = arv_gc_swiss_knife_node_get_value_type;
 }
 
 /* ArvGcInteger interface implementation */
@@ -172,20 +172,20 @@ static void
 _update_variables (ArvGcSwissKnife *gc_swiss_knife)
 {
 	ArvGc *genicam;
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 	GSList *iter;
 
-	genicam = arv_gc_node_get_genicam (ARV_GC_NODE (gc_swiss_knife));
+	genicam = arv_gc_feature_node_get_genicam (ARV_GC_FEATURE_NODE (gc_swiss_knife));
 
 	for (iter = gc_swiss_knife->variables; iter != NULL; iter = iter->next) {
 		ArvGcSwissKnifeVariableInfos *variable_infos = iter->data;
 
 		node = arv_gc_get_node (genicam, variable_infos->node_name);
-		if (arv_gc_node_get_value_type (node) == G_TYPE_INT64)
+		if (arv_gc_feature_node_get_value_type (node) == G_TYPE_INT64)
 			arv_evaluator_set_int64_variable (gc_swiss_knife->formula,
 							  variable_infos->name,
 							  arv_gc_integer_get_value (ARV_GC_INTEGER (node)));
-		else if (arv_gc_node_get_value_type (node) == G_TYPE_DOUBLE)
+		else if (arv_gc_feature_node_get_value_type (node) == G_TYPE_DOUBLE)
 			arv_evaluator_set_double_variable (gc_swiss_knife->formula,
 							   variable_infos->name,
 							   arv_gc_float_get_value (ARV_GC_FLOAT (node)));
diff --git a/src/arvgcswissknife.h b/src/arvgcswissknife.h
index b78f759..6fa69da 100644
--- a/src/arvgcswissknife.h
+++ b/src/arvgcswissknife.h
@@ -24,7 +24,7 @@
 #define ARV_GC_SWISS_KNIFE_H
 
 #include <arvtypes.h>
-#include <arvgcnode.h>
+#include <arvgcfeaturenode.h>
 
 G_BEGIN_DECLS
 
@@ -38,7 +38,7 @@ G_BEGIN_DECLS
 typedef struct _ArvGcSwissKnifeClass ArvGcSwissKnifeClass;
 
 struct _ArvGcSwissKnife {
-	ArvGcNode	node;
+	ArvGcFeatureNode	node;
 
 	GType value_type;
 	GSList *variables;
@@ -46,13 +46,13 @@ struct _ArvGcSwissKnife {
 };
 
 struct _ArvGcSwissKnifeClass {
-	ArvGcNodeClass parent_class;
+	ArvGcFeatureNodeClass parent_class;
 };
 
 GType 		arv_gc_swiss_knife_get_type 	(void);
 
-ArvGcNode * 	arv_gc_swiss_knife_new 		(void);
-ArvGcNode * 	arv_gc_swiss_knife_new_integer 	(void);
+ArvGcFeatureNode * 	arv_gc_swiss_knife_new 		(void);
+ArvGcFeatureNode * 	arv_gc_swiss_knife_new_integer 	(void);
 
 G_END_DECLS
 
diff --git a/src/arvtool.c b/src/arvtool.c
index 8ddef07..1a3baba 100644
--- a/src/arvtool.c
+++ b/src/arvtool.c
@@ -6,7 +6,7 @@
 static void
 arv_tool_list_features (ArvGc *genicam, const char *feature, gboolean show_description, int level)
 {
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	node = arv_gc_get_node (genicam, feature);
 	if (ARV_IS_GC_NODE (node)) {
@@ -20,7 +20,7 @@ arv_tool_list_features (ArvGc *genicam, const char *feature, gboolean show_descr
 		if (show_description) {
 			const char *description;
 
-			description = arv_gc_node_get_description (node);
+			description = arv_gc_feature_node_get_description (node);
 			if (description)
 				printf ("%s\n", description);
 		}
@@ -37,14 +37,14 @@ arv_tool_list_features (ArvGc *genicam, const char *feature, gboolean show_descr
 			const GSList *childs;
 			const GSList *iter;
 
-			childs = arv_gc_node_get_childs (node);
+			childs = arv_gc_feature_node_get_childs (node);
 			for (iter = childs; iter != NULL; iter = iter->next) {
 				for (i = 0; i < level + 1; i++)
 					printf ("    ");
 
 				printf ("%s: '%s'\n",
 					arv_dom_node_get_node_name (iter->data),
-					arv_gc_node_get_name (iter->data));
+					arv_gc_feature_node_get_name (iter->data));
 			}
 		}
 	}
@@ -84,7 +84,7 @@ arv_tool_execute_command (int argc, char **argv, const char *device_name)
 			int i;
 
 			for (i = 2; i < argc; i++) {
-				ArvGcNode *node;
+				ArvGcFeatureNode *node;
 
 				node = arv_gc_get_node (genicam, argv[i]);
 				if (ARV_IS_GC_NODE (node)) {
@@ -92,7 +92,7 @@ arv_tool_execute_command (int argc, char **argv, const char *device_name)
 
 					printf ("%s: '%s'\n", arv_dom_node_get_node_name (ARV_DOM_NODE (node)), argv[i]);
 
-					description = arv_gc_node_get_description (node);
+					description = arv_gc_feature_node_get_description (node);
 					if (description)
 						printf ("%s\n", description);
 				}
@@ -102,7 +102,7 @@ arv_tool_execute_command (int argc, char **argv, const char *device_name)
 		int i;
 
 		for (i = 2; i < argc; i++) {
-			ArvGcNode *feature;
+			ArvGcFeatureNode *feature;
 			char **tokens;
 
 			tokens = g_strsplit (argv[i], "=", 2);
@@ -133,10 +133,10 @@ arv_tool_execute_command (int argc, char **argv, const char *device_name)
 						printf ("%s executed\n", tokens[0]);
 					} else {
 						if (tokens[1] != NULL)
-							arv_gc_node_set_value_from_string (feature, tokens[1]);
+							arv_gc_feature_node_set_value_from_string (feature, tokens[1]);
 
 						printf ("%s = %s\n", tokens[0],
-							arv_gc_node_get_value_as_string (feature));
+							arv_gc_feature_node_get_value_as_string (feature));
 					}
 				}
 			g_strfreev (tokens);
diff --git a/src/arvtypes.h b/src/arvtypes.h
index 6106fae..3b6d0d0 100644
--- a/src/arvtypes.h
+++ b/src/arvtypes.h
@@ -42,7 +42,7 @@ typedef struct _ArvDomText 		ArvDomText;
 
 typedef struct _ArvGc ArvGc;
 
-typedef struct _ArvGcNode 			ArvGcNode;
+typedef struct _ArvGcFeatureNode 			ArvGcFeatureNode;
 typedef struct _ArvGcPropertyNode		ArvGcPropertyNode;
 typedef struct _ArvGcRegisterDescriptionNode 	ArvGcRegisterDescriptionNode;
 typedef struct _ArvGcCategory			ArvGcCategory;
diff --git a/tests/arvgenicamtest.c b/tests/arvgenicamtest.c
index c6d3895..cc4823f 100644
--- a/tests/arvgenicamtest.c
+++ b/tests/arvgenicamtest.c
@@ -48,7 +48,7 @@ main (int argc, char **argv)
 		g_file_get_contents (arv_option_filenames[i], &xml, &size, NULL);
 
 		if (xml != NULL) {
-			ArvGcNode *node;
+			ArvGcFeatureNode *node;
 
 			g_print ("Loading '%s'.\n", arv_option_filenames[i]);
 
diff --git a/tests/arvheartbeattest.c b/tests/arvheartbeattest.c
index c84fbab..56e9e3b 100644
--- a/tests/arvheartbeattest.c
+++ b/tests/arvheartbeattest.c
@@ -46,7 +46,7 @@ int main(int argc, char *argv[])
     ArvDevice *device;
     ArvStream *stream;
     ArvCamera *camera;
-    ArvGcNode *feature;
+    ArvGcFeatureNode *feature;
     guint64 n_completed_buffers;
     guint64 n_failures;
     guint64 n_underruns;
@@ -126,9 +126,9 @@ int main(int argc, char *argv[])
 
 			    fprintf (stderr, "Setting %s from %s to %s\n",
 				     arv_option_feature_name,
-				     arv_gc_node_get_value_as_string (feature),
+				     arv_gc_feature_node_get_value_as_string (feature),
 				     value);
-			    arv_gc_node_set_value_from_string (feature, value);
+			    arv_gc_feature_node_set_value_from_string (feature, value);
 
 			    g_free (value);
 		    }
diff --git a/tests/arvtest.c b/tests/arvtest.c
index 7d22bde..987621a 100644
--- a/tests/arvtest.c
+++ b/tests/arvtest.c
@@ -77,7 +77,7 @@ main (int argc, char **argv)
 	device = arv_open_device (arv_option_camera_name);
 	if (device != NULL) {
 		ArvGc *genicam;
-		ArvGcNode *node;
+		ArvGcFeatureNode *node;
 		guint32 value;
 		guint32 maximum;
 		guint32 minimum;
diff --git a/tests/fake.c b/tests/fake.c
index e4dc94f..51db9be 100644
--- a/tests/fake.c
+++ b/tests/fake.c
@@ -20,7 +20,7 @@ trigger_registers_test (void)
 {
 	ArvDevice *device;
 	ArvGc *genicam;
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 	gint64 address;
 
 	device = arv_fake_device_new ("TEST0");
diff --git a/tests/genicam.c b/tests/genicam.c
index 45f760b..f39e289 100644
--- a/tests/genicam.c
+++ b/tests/genicam.c
@@ -6,7 +6,7 @@ integer_test (void)
 {
 	ArvDevice *device;
 	ArvGc *genicam;
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 	gint64 v_int64;
 	const char *v_string;
 
@@ -22,7 +22,7 @@ integer_test (void)
 	v_int64 = arv_gc_integer_get_value (ARV_GC_INTEGER (node));
 	g_assert_cmpint (v_int64, ==, 1);
 
-	v_string = arv_gc_node_get_value_as_string (node);
+	v_string = arv_gc_feature_node_get_value_as_string (node);
 	g_assert_cmpstr (v_string, ==, "1");
 
 	g_object_unref (device);
@@ -33,7 +33,7 @@ boolean_test (void)
 {
 	ArvDevice *device;
 	ArvGc *genicam;
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 	gboolean v_boolean;
 	const char *v_string;
 
@@ -49,7 +49,7 @@ boolean_test (void)
 	v_boolean = arv_gc_boolean_get_value (ARV_GC_BOOLEAN (node));
 	g_assert_cmpint (v_boolean, ==, TRUE);
 
-	v_string = arv_gc_node_get_value_as_string (node);
+	v_string = arv_gc_feature_node_get_value_as_string (node);
 	g_assert_cmpstr (v_string, ==, "true");
 
 	g_object_unref (device);
@@ -60,7 +60,7 @@ float_test (void)
 {
 	ArvDevice *device;
 	ArvGc *genicam;
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 	double v_double;
 	const char *v_string;
 
@@ -76,7 +76,7 @@ float_test (void)
 	v_double = arv_gc_float_get_value (ARV_GC_FLOAT (node));
 	g_assert_cmpfloat (v_double, ==, 0.1);
 
-	v_string = arv_gc_node_get_value_as_string (node);
+	v_string = arv_gc_feature_node_get_value_as_string (node);
 	g_assert_cmpstr (v_string, ==, "0.1");
 
 	g_object_unref (device);
@@ -87,7 +87,7 @@ enumeration_test (void)
 {
 	ArvDevice *device;
 	ArvGc *genicam;
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 	gint64 v_int64;
 	gint64 *values;
 	guint n_values;
diff --git a/viewer/arvfeaturewidget.c b/viewer/arvfeaturewidget.c
index 85ffb1b..6e1d83f 100644
--- a/viewer/arvfeaturewidget.c
+++ b/viewer/arvfeaturewidget.c
@@ -25,7 +25,7 @@
 static GObjectClass *parent_class = NULL;
 
 struct _ArvFeatureWidgetPrivate {
-	ArvGcNode *node;
+	ArvGcFeatureNode *node;
 
 	GtkWidget *entry;
 	GtkWidget *combo_box;
@@ -33,7 +33,7 @@ struct _ArvFeatureWidgetPrivate {
 };
 
 ArvFeatureWidget *
-arv_feature_widget_new (ArvGcNode *node)
+arv_feature_widget_new (ArvGcFeatureNode *node)
 {
 	ArvFeatureWidget *feature;
 
diff --git a/viewer/arvfeaturewidget.h b/viewer/arvfeaturewidget.h
index 3a525c0..eda0dd8 100644
--- a/viewer/arvfeaturewidget.h
+++ b/viewer/arvfeaturewidget.h
@@ -51,7 +51,7 @@ struct _ArvFeatureWidgetClass {
 
 GType arv_feature_widget_get_type (void);
 
-ArvFeatureWidget * 	arv_feature_widget_new 			(ArvGcNode *node);
+ArvFeatureWidget * 	arv_feature_widget_new 			(ArvGcFeatureNode *node);
 
 G_END_DECLS
 



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