Index: /orxonox/trunk/src/story_entities/world.cc
===================================================================
--- /orxonox/trunk/src/story_entities/world.cc	(revision 4500)
+++ /orxonox/trunk/src/story_entities/world.cc	(revision 4501)
@@ -452,6 +452,7 @@
   this->localPlayer->setParentMode(PNODE_ALL);
   Vector* cameraOffset = new Vector (0, 5, -10);
-  trackManager->condition(2, LEFTRIGHT, this->localPlayer);
-  
+  trackManager->condition(1, LEFTRIGHT, this->localPlayer);
+  trackManager->debug(3);
+
   this->sky->setParent(this->localCamera);
 
@@ -544,5 +545,5 @@
       
   trackManager->forkS("testFork1,testFork2");
-  trackManager->workOn("testFork1");
+  trackManager->workOnS("testFork1");
   trackManager->addPointV(Vector(640, 25, -30));
   trackManager->addPointV(Vector(700, 40, -120));
@@ -555,5 +556,5 @@
   trackManager->setDuration(4);
 
-  trackManager->workOn("testFork2");
+  trackManager->workOnS("testFork2");
   trackManager->addPointV(Vector(640, 25, 20));
   trackManager->addPointV(Vector(670, 50, 120));
Index: /orxonox/trunk/src/util/loading/load_param.cc
===================================================================
--- /orxonox/trunk/src/util/loading/load_param.cc	(revision 4500)
+++ /orxonox/trunk/src/util/loading/load_param.cc	(revision 4501)
@@ -34,18 +34,20 @@
   this->loadString = NULL;
 
-  if (likely(!multi))
-    this->loadString = grabParameter(root, paramName);
+  if (paramCount == 0)
+    this->loadString = "none";
   else
     {
-      printf("paramName:::::%s\n", root->Value());
-      if (!strcmp(root->Value(), paramName))
-	{
-	  const TiXmlNode* val = root->FirstChild();
-	  if( val->ToText())
-	    this->loadString = val->Value();
-	}
-    }
-  if (loadString)
-    printf("%s\n", loadString);
+      if (likely(!multi))
+	this->loadString = grabParameter(root, paramName);
+      else
+	{
+	  if (!strcmp(root->Value(), paramName))
+	    {
+	      const TiXmlNode* val = root->FirstChild();
+	      if( val->ToText())
+		this->loadString = val->Value();
+	    }
+	}
+    }
 
   this->paramDesc = NULL;
Index: /orxonox/trunk/src/util/loading/load_param.h
===================================================================
--- /orxonox/trunk/src/util/loading/load_param.h	(revision 4500)
+++ /orxonox/trunk/src/util/loading/load_param.h	(revision 4501)
@@ -247,4 +247,14 @@
 {
  public:
+  LoadParam(const TiXmlElement* root, const char* paramName, T* pt2Object, void(T::*function)(), bool multi = false)
+    : BaseLoadParam(root, pt2Object, paramName, 0, multi, "")
+    { 
+      if (loadString != NULL && root != NULL)
+	(*pt2Object.*function)(); 
+      else 
+	PRINTF(4)("Not loaded parameter %s of %s\n", paramName, pt2Object->getClassName());
+    }
+
+
   //! makes functions with one string loadable
   LoadParam1(l_STRING);
Index: /orxonox/trunk/src/util/track/track_manager.cc
===================================================================
--- /orxonox/trunk/src/util/track/track_manager.cc	(revision 4500)
+++ /orxonox/trunk/src/util/track/track_manager.cc	(revision 4501)
@@ -409,7 +409,11 @@
 	
   element = root->FirstChildElement();
+
 	
   while( element != NULL)
     {
+      LoadParam<TrackManager>(element, "WorkOn", this, &TrackManager::workOnS, true)
+	.describe("Selects a TrackElement (by name) to work on");
+
       LoadParam<TrackManager>(element, "Point", this, &TrackManager::addPoint, true)
 	.describe("Adds a new Point to the currently selected TrackElement");
@@ -418,44 +422,37 @@
 	.describe("Sets the Duration of the currently selected TrackElement");
       
-      LoadParam<TrackManager>(element, "SavePoint", this, &TrackManager::setSavePoint, true);
+      LoadParam<TrackManager>(element, "SavePoint", this, &TrackManager::setSavePointS, true)
+	.describe("Sets the current selected Point to a Savepoint, meaning that the curve will be ended and a new one starts, and that one starts again from this point on");
+
+      LoadParam<TrackManager>(element, "Fork", this, &TrackManager::forkS, true)
+	.describe("Forks the Path into multiple forked Path names seperated by ','");
+
+      LoadParam<TrackManager>(element, "Join", this, &TrackManager::joinS, true)
+	.describe("Joins multiple joining Path names seperated by ','");
 
       /*
-      if( !strcmp( element->Value(), "SavePoint"))
-	{
-	  PRINTF(5)("Loaded Savepoint\n");
-	  setSavePoint();
+	if( !strcmp( element->Value(), "Fork"))
+	{
+	container = element->FirstChild();
+	if( container->ToText())
+	{
+	assert( container->Value() != NULL);
+	PRINTF(4)("Loaded Fork: %s\n", container->Value());
+	forkS(container->Value());
+	}
 	}
       */
-      if( !strcmp( element->Value(), "Fork"))
-	{
-	  container = element->FirstChild();
-	  if( container->ToText())
-	    {
-	      assert( container->Value() != NULL);
-	      PRINTF(4)("Loaded Fork: %s\n", container->Value());
-	      forkS(container->Value());
-	    }
-	}
-      else if( !strcmp( element->Value(), "Join"))
-	{
-	  container = element->FirstChild();
-	  if( container->ToText())
-	    {
-	      assert( container->Value() != NULL);
-	      PRINTF0("Loaded Join: %s\n", container->Value());
-	      joinS(container->Value());
-	    }
-	}
-      else if( !strcmp( element->Value(), "WorkOn"))
-	{
-	  container = element->FirstChild();
-	  if( container->ToText())
-	    {
-	      assert( container->Value() != NULL);
-	      PRINTF(4)("Loaded WorkOn: %s\n", container->Value());
-	      workOn( container->Value());
-	    }
-	}
-		
+      /*
+	if( !strcmp( element->Value(), "Join"))
+	{
+	container = element->FirstChild();
+	if( container->ToText())
+	{
+	assert( container->Value() != NULL);
+	PRINTF0("Loaded Join: %s\n", container->Value());
+	joinS(container->Value());
+	}
+	}
+      */	
       element = element->NextSiblingElement();
     }
@@ -545,5 +542,5 @@
    \param trackName the Name of the Track to work on
 */
-void TrackManager::workOn(const char* trackName)
+void TrackManager::workOnS(const char* trackName)
 {
   TrackElement* tmpElem = this->firstTrackElem->findByName(trackName);
@@ -658,7 +655,7 @@
    \todo this must be better
 */
-void TrackManager::setSavePoint(int isLoadable)
-{
-  this->setSavePoint();
+void TrackManager::setSavePointS(const char* nextElementName)
+{
+  this->firstTrackElem->findByID(this->setSavePoint(NULL))->setName(nextElementName);
 }
 
@@ -743,5 +740,6 @@
     {
       this->firstTrackElem->findByID(trackIDs[i])->setName(strings.getString(i));
-    }  
+    } 
+  delete []trackIDs;
 }
 
Index: /orxonox/trunk/src/util/track/track_manager.h
===================================================================
--- /orxonox/trunk/src/util/track/track_manager.h	(revision 4500)
+++ /orxonox/trunk/src/util/track/track_manager.h	(revision 4501)
@@ -146,5 +146,5 @@
   // Methods to change the Path (initialisation)
   void workOn(unsigned int trackID);
-  void workOn(const char* trackName);
+  void workOnS(const char* trackName);
 
   /** \see setCurveType(CurveType curveType, TrackElement* trackElem); \param curveType the type of the Curve */
@@ -156,5 +156,5 @@
   void addPointV(Vector newPoint, TrackElement* trackElem = NULL);
   int addHotPoint(Vector newPoint, TrackElement* trackElem = NULL);
-  void setSavePoint(int isLoadable);
+  void setSavePointS(const char* nextElementName);
   int setSavePoint(TrackElement* trackElem = NULL);
   void fork(unsigned int count, ...);
