Index: osgVisual/trunk/include/cluster/dataIO_cluster.h
===================================================================
--- osgVisual/trunk/include/cluster/dataIO_cluster.h	(revision 185)
+++ osgVisual/trunk/include/cluster/dataIO_cluster.h	(revision 186)
@@ -69,5 +69,5 @@
 
 	/**
-	 * \brief Pure virtual function for initialization. Must be implemented in derived class.
+	 * \brief Pure virtual function for XML configuration. Must be implemented in derived class.
 	 * 
 	 */ 
@@ -82,5 +82,5 @@
 
 	/**
-	 * \brief Pure virtual function for initialization. Must be implemented in derived class.
+	 * \brief Pure virtual function for shutdown. Must be implemented in derived class.
 	 * 
 	 */ 
Index: osgVisual/trunk/include/dataIO/visual_dataIO.h
===================================================================
--- osgVisual/trunk/include/dataIO/visual_dataIO.h	(revision 185)
+++ osgVisual/trunk/include/dataIO/visual_dataIO.h	(revision 186)
@@ -133,5 +133,5 @@
 	 * @return : True if parsing was successful.
 	 */ 
-	bool processXMLConfiguration(xmlNode* extLinkConfig_); 
+	bool processXMLConfiguration(); 
 
 	/**
Index: osgVisual/trunk/include/extLink/dataIO_extLink.h
===================================================================
--- osgVisual/trunk/include/extLink/dataIO_extLink.h	(revision 185)
+++ osgVisual/trunk/include/extLink/dataIO_extLink.h	(revision 186)
@@ -19,4 +19,9 @@
 #include <osg/Node>
 #include <dataIO_slot.h>
+
+// XML Parser
+#include <stdio.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
 
 
@@ -54,6 +59,16 @@
 	 * 
 	 */ 
-	virtual void init() = 0;
+	virtual bool init( xmlNode* configurationNode) = 0;
 
+	/**
+	 * \brief Pure virtual function for XML configuration. Must be implemented in derived class.
+	 * 
+	 */ 
+	virtual bool processXMLConfiguration(xmlNode* extLinkConfig_) = 0;
+
+	/**
+	 * \brief Pure virtual function for shutdown. Must be implemented in derived class.
+	 * 
+	 */ 
 	virtual void shutdown() = 0;
 
Index: osgVisual/trunk/include/extLink/dataIO_extLinkDummy.h
===================================================================
--- osgVisual/trunk/include/extLink/dataIO_extLinkDummy.h	(revision 185)
+++ osgVisual/trunk/include/extLink/dataIO_extLinkDummy.h	(revision 186)
@@ -37,5 +37,6 @@
 	virtual ~dataIO_extLinkDummy(void);
 
-	void init();
+	bool processXMLConfiguration(xmlNode* extLinkConfig_);
+	bool init(xmlNode* configurationNode);
 	void shutdown();
 
Index: osgVisual/trunk/include/extLink/dataIO_extLinkVCL.h
===================================================================
--- osgVisual/trunk/include/extLink/dataIO_extLinkVCL.h	(revision 185)
+++ osgVisual/trunk/include/extLink/dataIO_extLinkVCL.h	(revision 186)
@@ -79,5 +79,6 @@
 	virtual ~dataIO_extLinkVCL(void);
 
-	void init();
+	bool init(xmlNode* configurationNode);
+	bool processXMLConfiguration(xmlNode* extLinkConfig_);
 	void shutdown();
 
Index: osgVisual/trunk/src/cluster/dataIO_clusterDummy.cpp
===================================================================
--- osgVisual/trunk/src/cluster/dataIO_clusterDummy.cpp	(revision 185)
+++ osgVisual/trunk/src/cluster/dataIO_clusterDummy.cpp	(revision 186)
@@ -32,5 +32,5 @@
 {
 	sendContainer = sendContainer_;
-	OSG_NOTIFY( osg::ALWAYS ) << "clusterDummy init();" << std::endl;
+	OSG_NOTIFY( osg::ALWAYS ) << "clusterDummy init()" << std::endl;
 	return true;
 }
@@ -38,5 +38,5 @@
 bool dataIO_clusterDummy::processXMLConfiguration(xmlNode* clusterConfig_)
 {
-	OSG_NOTIFY( osg::ALWAYS ) << "clusterDummy processXMLConfiguration();" << std::endl;
+	OSG_NOTIFY( osg::ALWAYS ) << "clusterDummy processXMLConfiguration()" << std::endl;
 	return true;
 }
Index: osgVisual/trunk/src/cluster/dataIO_clusterENet.cpp
===================================================================
--- osgVisual/trunk/src/cluster/dataIO_clusterENet.cpp	(revision 185)
+++ osgVisual/trunk/src/cluster/dataIO_clusterENet.cpp	(revision 186)
@@ -109,47 +109,47 @@
 bool dataIO_clusterENet::processXMLConfiguration(xmlNode* clusterConfig_)
 {
-				// Extract cluster role
-				xmlAttr  *attr = clusterConfig_->properties;
-				while ( attr ) 
-				{ 
-					std::string attr_name=reinterpret_cast<const char*>(attr->name);
-					std::string attr_value=reinterpret_cast<const char*>(attr->children->content);
-					if( attr_name == "implementation" )
-					{
-						if(attr_value != "enet")
-						{
-							OSG_NOTIFY( osg::ALWAYS ) << "WARNING: Cluster configuration does not match the currently used 'enet' implementation, falling back to clusterDummy" << std::endl;
-							return false;
-						}
-					}
-					if( attr_name == "hardsync" )
-					{
-						if(attr_value == "yes")
-							hardSync = true;
-						else
-							hardSync = false;
-					}
-					if( attr_name == "master_ip" )
-					{
-						serverToConnect = attr_value;
-					}
-					if( attr_name == "port" )
-					{
-						std::istringstream i(attr_value);
-						if (!(i >> port))
-						{
-							OSG_NOTIFY( osg::ALWAYS ) << "WARNING: Cluster configuration : Invalid port number '" << attr_value << "', falling back to clusterDummy" << std::endl;
-							return false;
-						}
-					}
-					if( attr_name == "use_zlib_compressor" )
-					{
-						if(attr_value == "yes")
-							compressionEnabled = true;
-						else
-							compressionEnabled = false;
-					}
-					attr = attr->next; 
-				}	// WHILE attrib END
+	// Extract cluster role
+	xmlAttr  *attr = clusterConfig_->properties;
+	while ( attr ) 
+	{ 
+		std::string attr_name=reinterpret_cast<const char*>(attr->name);
+		std::string attr_value=reinterpret_cast<const char*>(attr->children->content);
+		if( attr_name == "implementation" )
+		{
+			if(attr_value != "enet")
+			{
+				OSG_NOTIFY( osg::ALWAYS ) << "WARNING: Cluster configuration does not match the currently used 'enet' implementation, falling back to clusterDummy" << std::endl;
+				return false;
+			}
+		}
+		if( attr_name == "hardsync" )
+		{
+			if(attr_value == "yes")
+				hardSync = true;
+			else
+				hardSync = false;
+		}
+		if( attr_name == "master_ip" )
+		{
+			serverToConnect = attr_value;
+		}
+		if( attr_name == "port" )
+		{
+			std::istringstream i(attr_value);
+			if (!(i >> port))
+			{
+				OSG_NOTIFY( osg::ALWAYS ) << "WARNING: Cluster configuration : Invalid port number '" << attr_value << "', falling back to clusterDummy" << std::endl;
+				return false;
+			}
+		}
+		if( attr_name == "use_zlib_compressor" )
+		{
+			if(attr_value == "yes")
+				compressionEnabled = true;
+			else
+				compressionEnabled = false;
+		}
+		attr = attr->next; 
+	}	// WHILE attrib END
 
 	return true;
Index: osgVisual/trunk/src/dataIO/visual_dataIO.cpp
===================================================================
--- osgVisual/trunk/src/dataIO/visual_dataIO.cpp	(revision 185)
+++ osgVisual/trunk/src/dataIO/visual_dataIO.cpp	(revision 186)
@@ -54,20 +54,9 @@
 	viewer = viewer_;
 
-	// Process XML configuration
+	// Process XML configuration - all XML dependen initializations are performed in processXMLConfiguration()
 	this->configFileName = configFileName;
-	xmlNode *extLinkConfig=NULL;
-	if(!processXMLConfiguration(extLinkConfig))
+	if(!processXMLConfiguration())
 		OSG_FATAL << "ERROR: visual_dataIO::init() - Failed to initialize dataIO via XML configuration!";
 
-	// Create extLink.
-	#ifdef USE_EXTLINK_DUMMY
-		extLink = new dataIO_extLinkDummy( dataSlots );
-	#endif
-	#ifdef USE_EXTLINK_VCL
-		extLink = new dataIO_extLinkVCL( dataSlots );
-	#endif
-	extLink->init();
-
-	
 	// Install callbacks to perform DataIO activities every frame:
 	//// EventCallback at the absolute beginning of the frame
@@ -81,5 +70,5 @@
 }
 
-bool visual_dataIO::processXMLConfiguration(xmlNode* extLinkConfig_)
+bool visual_dataIO::processXMLConfiguration()
 {
 	// Init XML
@@ -87,5 +76,5 @@
 	bool disabled;
 	xmlNode* config = util::getModuleXMLConfig( configFileName, "dataio", tmpDoc, disabled );
-	xmlNode* clusterConfig = NULL;
+	xmlNode* clusterConfig = NULL, *extLinkConfig = NULL;
 
 	if( disabled)
@@ -147,11 +136,10 @@
 			if(cur_node->type == XML_ELEMENT_NODE && node_name == "extlink")
 			{
-				// Check Attributes to determine if the dummy implementation or any other implementation must be instantiated
-
-				// Pass XML attributes to extlink to analyse and configure it by extLink itself
+				// Pass extLink configuration to the used extLink implementation. 
+				// The implementation will use the configuration if it matches, otherwise falls back to dummy extLink
+				extLinkConfig = cur_node;
 			}
 
 		}	// FOR all nodes END
-
 
 
@@ -169,4 +157,13 @@
 		}
 
+		// Create extLink.
+		#ifdef USE_EXTLINK_VCL
+			extLink = new dataIO_extLinkVCL( dataSlots );
+		#endif
+		if( !extLink.valid() || !extLinkConfig || !extLink->init(extLinkConfig) )
+		{
+			extLink = new dataIO_extLinkDummy( dataSlots );
+			extLink->init(extLinkConfig);
+		}
 
 
Index: osgVisual/trunk/src/extLink/dataIO_extLinkDummy.cpp
===================================================================
--- osgVisual/trunk/src/extLink/dataIO_extLinkDummy.cpp	(revision 185)
+++ osgVisual/trunk/src/extLink/dataIO_extLinkDummy.cpp	(revision 186)
@@ -32,7 +32,14 @@
 }
 
-void dataIO_extLinkDummy::init()
+bool dataIO_extLinkDummy::init(xmlNode* configurationNode)
 {
 	OSG_NOTIFY( osg::ALWAYS ) << "extLinkDummy init()" << std::endl;
+	return true;
+}
+
+bool dataIO_extLinkDummy::processXMLConfiguration(xmlNode* extLinkConfig_)
+{
+	OSG_NOTIFY( osg::ALWAYS ) << "extLinkDummy processXMLConfiguration()" << std::endl;
+	return true;
 }
 
Index: osgVisual/trunk/src/extLink/dataIO_extLinkVCL.cpp
===================================================================
--- osgVisual/trunk/src/extLink/dataIO_extLinkVCL.cpp	(revision 185)
+++ osgVisual/trunk/src/extLink/dataIO_extLinkVCL.cpp	(revision 186)
@@ -31,10 +31,11 @@
 }
 
-void dataIO_extLinkVCL::init()
-{
+bool dataIO_extLinkVCL::init(xmlNode* configurationNode)
+{
+	if (!configurationNode || !processXMLConfiguration(configurationNode))
+		return false;
+
 	OSG_NOTIFY( osg::ALWAYS ) << "extLinkVCL init()" << std::endl;
 
-	VCLConfigFilename = "osgVisual.xml";
-	
 	if ( osgDB::fileExists( VCLConfigFilename ) )
 	{
@@ -47,8 +48,34 @@
 	else
 	{
-		OSG_NOTIFY( osg::FATAL ) << "ERROR: Could not find VCL Configuration file " << VCLConfigFilename << std::endl;
-		exit(-1);
-	}
-
+		OSG_NOTIFY( osg::FATAL ) << "ERROR: Could not find VCL Configuration file '" << VCLConfigFilename << "', falling back to extLinkDummy" << std::endl;
+		return false;
+	}
+	return true;
+}
+
+bool dataIO_extLinkVCL::processXMLConfiguration(xmlNode* extLinkConfig_)
+{
+	// Extract VCL config file
+	xmlAttr  *attr = extLinkConfig_->properties;
+	while ( attr ) 
+	{ 
+		std::string attr_name=reinterpret_cast<const char*>(attr->name);
+		std::string attr_value=reinterpret_cast<const char*>(attr->children->content);
+		if( attr_name == "implementation" )
+		{
+			if(attr_value != "vcl")
+			{
+				OSG_NOTIFY( osg::ALWAYS ) << "WARNING: extLink configuration does not match the currently used 'vcl' implementation, falling back to extLinkDummy" << std::endl;
+				return false;
+			}
+		}
+		if( attr_name == "filename" )
+		{
+			VCLConfigFilename = attr_value;
+		}
+		attr = attr->next; 
+	}	// WHILE attrib END
+
+	return true;
 }
 
