Index: osgVisual/src/extLink/dataIO_extLinkVCL.cpp
===================================================================
--- osgVisual/src/extLink/dataIO_extLinkVCL.cpp	(revision 88)
+++ osgVisual/src/extLink/dataIO_extLinkVCL.cpp	(revision 116)
@@ -35,8 +35,11 @@
 	OSG_NOTIFY( osg::ALWAYS ) << "extLinkVCL init()" << std::endl;
 
-	std::string VCLConfigFilename = "osgVisual.xml";
+	VCLConfigFilename = "osgVisual.xml";
+	
 	if ( osgDB::fileExists( VCLConfigFilename ) )
 	{
 		CVCLIO::GetInstance().LoadProject(VCLConfigFilename.c_str());
+
+		parseVCLConfig();
 		bool error = false;
 
@@ -145,2 +148,111 @@
 	return true;
 }
+
+bool dataIO_extLinkVCL::parseVCLConfig()
+{
+	configFileValid = false;
+	xmlDoc *doc = NULL;
+    xmlNode *root_element = NULL;
+  	
+	doc = xmlReadFile(VCLConfigFilename.c_str(), NULL, 0);
+	if (doc == NULL)
+	{
+		configFileValid = false;
+		std::cout << "error: could not parse file" << VCLConfigFilename;
+	}
+	else
+	{
+		//  Get the root element node
+		root_element = xmlDocGetRootElement(doc);
+
+		checkXMLNode(root_element);
+
+		// free the document
+		xmlFreeDoc(doc);;
+	}
+	// Free the global variables that may have been allocated by the parser.
+	xmlCleanupParser();
+
+	if(!configFileValid)
+		OSG_ALWAYS << "ERROR: XML file seems not to be a valid VCL configuration file!" << std::endl;
+
+	return true;
+}
+
+void dataIO_extLinkVCL::checkXMLNode(xmlNode * a_node)
+{
+    for (xmlNode *cur_node = a_node; cur_node; cur_node = cur_node->next)
+	{
+		std::string node_name=reinterpret_cast<const char*>(cur_node->name);
+		if(cur_node->type == XML_ELEMENT_NODE && node_name == "CONFIGURATION")
+		{
+			std::cout << "XML node CONFIGURATION found" << std::endl;
+			configFileValid = true;
+		}
+
+        if (cur_node->type == XML_ELEMENT_NODE && node_name == "CHANNEL")
+		{
+			std::cout << "XML node CHANNEL found" << std::endl;
+
+			// Extract channel infos like name, direction and extract channels
+			std::string name;
+			dataIO_slot::dataDirection direction;
+			xmlAttr  *attr = cur_node->properties;
+			while ( attr ) 
+			{ 
+				std::string attr_name=reinterpret_cast<const char*>(attr->name);
+				if( attr_name == "name" )
+					name = reinterpret_cast<const char*>(attr->children->content);
+				if( attr_name == "multicast_in_group" )
+					direction = dataIO_slot::TO_OBJ;
+				if( attr_name == "multicast_out_group" )
+					direction = dataIO_slot::FROM_OBJ;
+				//std::cout << "Attribute name: " << attr->name << " value: " << attr->children->content << std::endl;
+				attr = attr->next; 
+			} 
+			addChannels(cur_node->children, name, direction );
+	
+            //printf("node type: Element, name: %s\n", cur_node->name);
+			std::cout << "Processing children at " << cur_node->children << std::endl;
+        }	// IF(CHANNEL) END
+
+		// Iterate to the next nodes to find channels.
+        checkXMLNode(cur_node->children);		
+    }	// FOR END
+}
+
+void dataIO_extLinkVCL::addChannels(xmlNode * a_node, std::string channelName_, dataIO_slot::dataDirection direction_ )
+{
+	if(!a_node)
+		return;
+
+	OSG_ALWAYS << "Processing channels for channel " << channelName_ << " with the direction " << direction_ << std::endl;
+
+	for (xmlNode *cur_node = a_node; cur_node; cur_node = cur_node->next)
+	{
+		OSG_ALWAYS << "Found entry!" << std::endl;
+
+		// Extract ENTRY - name
+		std::string entryName;
+		xmlAttr  *attr = cur_node->properties;
+		while ( attr ) 
+		{ 
+			std::string attr_name=reinterpret_cast<const char*>(attr->name);
+			if( attr_name == "name" )
+				entryName = reinterpret_cast<const char*>(attr->children->content);
+			//std::cout << "Attribute name: " << attr->name << " value: " << attr->children->content << std::endl;
+			attr = attr->next; 
+		} 
+
+		// Store VCL variable
+		CVCLVariable<double>* tmp = new CVCLVariable<double>;
+		extLinkChannels.push_back(tmp);
+
+		// Attach VCL variable to channel:
+		if( !tmp->Attach(channelName_.c_str(), entryName.c_str() ) )
+			OSG_ALWAYS << "ERROR - dataIO_extLinkVCL::addChannels(): unable to attach VCL variable entryName: " << entryName << " to channel: " << channelName_ << std::endl;
+
+		// Set SLOT data and store SLOT pointer 
+		extLinkSlots.push_back( osgVisual::visual_dataIO::getInstance()->setSlotData( entryName, direction_, 0 ) );
+	}	// FOR each ENTRY END
+}
