Index: /osgVisual/trunk/bin/osgVisualConfig.xml
===================================================================
--- /osgVisual/trunk/bin/osgVisualConfig.xml	(revision 233)
+++ /osgVisual/trunk/bin/osgVisualConfig.xml	(revision 234)
@@ -71,5 +71,5 @@
         </geometry>
       </model>
-      <trackmodel id="2" updater_slot=""></trackmodel> 
+      <trackmodel id="2" updater_slot="trackID"></trackmodel> 
     </models>
     <datetime day="0" month="0" year="0" hour="12" minute="30"></datetime>
Index: /osgVisual/trunk/include/core/core_manipulator.h
===================================================================
--- /osgVisual/trunk/include/core/core_manipulator.h	(revision 233)
+++ /osgVisual/trunk/include/core/core_manipulator.h	(revision 234)
@@ -63,6 +63,33 @@
 	void trackNode( int trackingID );
 	int getCurrentTrackingID(){return _currentTrackingID;};
+	void setTrackingIdUpdaterSlot(std::string updaterSlot){_updaterSlot=updaterSlot;};
+	std::string getTrackingIdUpdaterSlot(){return _updaterSlot;};
 
 private:
+	class core_manipulatorCallback : public osg::NodeCallback
+	{
+	public: 
+		/**
+		 * \brief Constructor, for setting the member variables.
+		 * 
+		 * @param manipulators : Pointer to the manipulator and tracking class.
+		 */ 
+		core_manipulatorCallback(core_manipulator* manipulators):_manipulators(manipulators){};
+
+		/**
+		 * \brief This function is executed as callback during event traversal.
+		 * 
+		 */ 
+		virtual void operator()(osg::Node* node, osg::NodeVisitor* nv);
+	private:
+		/** Pointer to the manipulator class to edit its value */
+		core_manipulator* _manipulators;
+	};
+
+	/** Pointer to the callback isntalled to update the tracking ID */
+	osg::ref_ptr<core_manipulatorCallback> _callback;
+
+	/** core_manipulatorCallback must be a freind of this class to allow the callback to edit the member values of this class directly */ 
+	friend class core_manipulatorCallback;
 
 #ifdef USE_SPACENAVIGATOR
@@ -93,8 +120,16 @@
 	int _currentTrackingID;
 
+	/** Slotname to use for dynamic updated tracking ID. */
+	std::string _updaterSlot;
+
 	/**
 	 * Pointer to the  scene root node
 	 */ 
 	osg::ref_ptr<osg::Node> _rootNode;
+
+	/**
+	 * Referenced pointer to the applications viewer.
+	 */ 
+	osg::ref_ptr<osgViewer::Viewer> _viewer;
 };
 
Index: /osgVisual/trunk/include/dataIO/visual_dataIO.h
===================================================================
--- /osgVisual/trunk/include/dataIO/visual_dataIO.h	(revision 233)
+++ /osgVisual/trunk/include/dataIO/visual_dataIO.h	(revision 234)
@@ -80,11 +80,10 @@
 		 * \brief Constructor, for setting the member variables.
 		 * 
-		 * @param viewer_ : Pointer to the viewer.
-		 * @param sceneCamera_ : Pointer to the scene camera.
+		 * @param dataIO_ : Pointer to the dataIO class.
 		 */ 
 		dataIO_eventCallback(visual_dataIO* dataIO_):dataIO(dataIO_){};
 
 		/**
-		 * \brief This function is execute d as callback during update traversal.
+		 * \brief This function is executed as callback during event traversal.
 		 * 
 		 */ 
Index: /osgVisual/trunk/src/core/core_manipulator.cpp
===================================================================
--- /osgVisual/trunk/src/core/core_manipulator.cpp	(revision 233)
+++ /osgVisual/trunk/src/core/core_manipulator.cpp	(revision 234)
@@ -31,4 +31,5 @@
 {
 	_rootNode = rootNode;
+	_viewer = viewer;
 
 	// Setup manipulators
@@ -87,5 +88,7 @@
     viewer->addEventHandler(new osgViewer::ScreenCaptureHandler);			// add the screen capture handler
 
-
+	// Install Callback
+	_callback = new core_manipulatorCallback(this);
+	viewer->getCamera()->addEventCallback(_callback);
 
 	return true;
@@ -94,4 +97,8 @@
 void core_manipulator::shutdown()
 {
+	// Remove and Delete Callback
+	_viewer->getCamera()->removeEventCallback(_callback);
+	_callback= NULL;
+
 #ifdef USE_SPACENAVIGATOR
 	//Delete SpaceMouse driver
@@ -107,4 +114,5 @@
 	_nt = NULL;
 	_rootNode = NULL;
+	_viewer = NULL;
 }
 
@@ -160,2 +168,16 @@
 	}
 }
+
+void core_manipulator::core_manipulatorCallback::operator()(osg::Node* node, osg::NodeVisitor* nv)
+{
+	//OSG_NOTIFY( osg::ALWAYS ) << "---- Executing core_manipulatorCallback .." <<  std::endl;
+
+	if(!_manipulators->_updaterSlot.empty())
+	{
+		int idToTrack = visual_dataIO::getInstance()->getSlotDataAsDouble(_manipulators->_updaterSlot, osgVisual::dataIO_slot::TO_OBJ );
+		if(idToTrack!=_manipulators->_currentTrackingID)
+			_manipulators->trackNode(idToTrack);
+	}
+
+	traverse(node, nv);
+}
Index: /osgVisual/trunk/src/core/visual_core.cpp
===================================================================
--- /osgVisual/trunk/src/core/visual_core.cpp	(revision 233)
+++ /osgVisual/trunk/src/core/visual_core.cpp	(revision 234)
@@ -215,6 +215,5 @@
 						std::string attr_value=reinterpret_cast<const char*>(attr->children->content);
 						if( attr_name == "id" ) manipulators->trackNode( util::strToInt(attr_value) );
-
-
+						if( attr_name == "updater_slot" ) manipulators->setTrackingIdUpdaterSlot(attr_value);
 						attr = attr->next; 
 					}
