Index: /orxonox/branches/levelloader/src/game_loader.cc
===================================================================
--- /orxonox/branches/levelloader/src/game_loader.cc	(revision 3556)
+++ /orxonox/branches/levelloader/src/game_loader.cc	(revision 3557)
@@ -282,4 +282,6 @@
 BaseObject* GameLoader::fabricate( TiXmlElement* element)
 {
+	assert( element != NULL);
+	
 	if( first == NULL)
 	{
@@ -288,4 +290,15 @@
 	}
 	
-	return first->fabricate( element);
-}
+	if( element->Value() != NULL)
+	{
+		PRINTF0("Attempting fabrication of a '%s'\n", element->Value());
+		BaseObject* b = first->fabricate( element);
+		if( b == NULL) PRINTF0("Failed to fabricate a '%s'\n", element->Value());
+		else PRINTF0("Successfully fabricated a '%s'\n", element->Value());
+		return b;
+	}
+	
+	PRINTF0("Fabricate failed, TiXmlElement did not contain a value\n");
+	
+	return NULL;
+}
Index: /orxonox/branches/levelloader/src/lib/coord/p_node.cc
===================================================================
--- /orxonox/branches/levelloader/src/lib/coord/p_node.cc	(revision 3556)
+++ /orxonox/branches/levelloader/src/lib/coord/p_node.cc	(revision 3557)
@@ -40,4 +40,5 @@
   this->bAbsDirChanged = false;
   this->parent = NULL;
+  this->objectName = NULL;
 }
 
@@ -59,5 +60,6 @@
   this->bAbsDirChanged = false;
   this->parent = parent;
-
+  this->objectName = NULL;
+  
   parent->addChild (this);
 }
@@ -79,4 +81,5 @@
   */
   this->parent = NULL;
+  if( this->objectName) delete this->objectName;
   /* there is currently a problem with cleaning up - fix*/
 }
@@ -442,9 +445,22 @@
   \brief set the name of the node
 
+	\todo Error free assignment of name by copying the string instead of keeping just the pointer
+	
   for debug purposes realy usefull, not used to work properly
 */
-void PNode::setName (char* newName)
-{
-  this->objectName = newName;
+void PNode::setName (const char* newName)
+{
+	int l = strlen( newName);
+	
+	if( this->objectName != NULL) delete this->objectName;
+	this->objectName = NULL;
+	
+	if( newName != NULL)
+	{
+		this->objectName = new char[l+1];
+		
+		for( int i = 0; i < l+1; i++)
+			this->objectName[i] = newName[i];
+	}
 }
 
@@ -453,5 +469,5 @@
   \brief gets the name of the node
 */
-char* PNode::getName ()
+const char* PNode::getName ()
 {
   return this->objectName;
Index: /orxonox/branches/levelloader/src/lib/coord/p_node.h
===================================================================
--- /orxonox/branches/levelloader/src/lib/coord/p_node.h	(revision 3556)
+++ /orxonox/branches/levelloader/src/lib/coord/p_node.h	(revision 3557)
@@ -73,6 +73,6 @@
   virtual void tick (float dt);
 
-  void setName (char* newName);
-  char* getName ();
+  void setName (const char* newName);
+  const char* getName ();
 
 
Index: /orxonox/branches/levelloader/src/story_entities/campaign.cc
===================================================================
--- /orxonox/branches/levelloader/src/story_entities/campaign.cc	(revision 3556)
+++ /orxonox/branches/levelloader/src/story_entities/campaign.cc	(revision 3557)
@@ -42,4 +42,6 @@
 	int id;
 	
+	PRINTF0("Loading Campaign...\n");
+	
 	assert( root != NULL);
 	GameLoader* loader = GameLoader::getInstance();
@@ -52,5 +54,5 @@
 	if( string == NULL || sscanf(string, "%d", &id) != 1)
 	{
-		PRINTF(1)("Campaign is missing a proper 'identifier'\n");
+		PRINTF0("Campaign is missing a proper 'identifier'\n");
 		this->setStoryID( -1);
 	}
@@ -59,4 +61,10 @@
   // find WorldList
   element = root->FirstChildElement( "WorldList");
+  if( element == NULL)
+  {
+		PRINTF0("Campaign is missing a proper 'WorldList'\n");
+  }
+  else
+  	element = element->FirstChildElement();
   
   // load Worlds/Subcampaigns/Whatever
@@ -81,14 +89,7 @@
 }
 
-
-ErrorMessage Campaign::start()
-{
-  this->start(0);
-}
-
-
-ErrorMessage Campaign::start(int storyID = 0)
-{
-  printf("World::start() - starting new StoryEntity Nr:%i\n", storyID);
+ErrorMessage Campaign::start(int storyID)
+{
+  printf("Camapaign::start() - starting new StoryEntity Nr:%i\n", storyID);
   ErrorMessage errorCode;
   if( !this->isInit) return errorCode; 
@@ -97,4 +98,9 @@
   StoryEntity* se = this->getStoryEntity(storyID);
   this->currentEntity = se;
+  if( se == NULL)
+  {
+  	printf("Camapaign::start() - Start StoryEntity not found\n");
+  	return errorCode;
+  }
   while( se != NULL && this->running)
     {
Index: /orxonox/branches/levelloader/src/story_entities/campaign.h
===================================================================
--- /orxonox/branches/levelloader/src/story_entities/campaign.h	(revision 3556)
+++ /orxonox/branches/levelloader/src/story_entities/campaign.h	(revision 3557)
@@ -19,6 +19,5 @@
 
   virtual ErrorMessage init();
-  virtual ErrorMessage start();
-  virtual ErrorMessage start(int storyID);
+  virtual ErrorMessage start(int storyID = 0);
   virtual ErrorMessage pause();
   virtual ErrorMessage resume();
Index: /orxonox/branches/levelloader/src/story_entities/world.cc
===================================================================
--- /orxonox/branches/levelloader/src/story_entities/world.cc	(revision 3556)
+++ /orxonox/branches/levelloader/src/story_entities/world.cc	(revision 3557)
@@ -68,4 +68,5 @@
 	
 	localPlayer = NULL;
+  this->entities = new tList<WorldEntity>();
 		
 }
@@ -142,5 +143,5 @@
 {
 	
-	PRINTF0("Loading world: '%s'\n", getPath());
+	PRINTF0("> Loading world: '%s'\n", getPath());
 	
 	GameLoader* loader = GameLoader::getInstance();
@@ -166,7 +167,5 @@
 	assert( root != NULL);
 	
-	TiXmlElement* element = root->FirstChildElement( "WorldDataFile");
-	
-	if( root == NULL )
+	if( root == NULL || root->Value() == NULL || strcmp( root->Value(), "WorldDataFile"))
 	{
 		// report an error
@@ -197,5 +196,5 @@
 	
 	// find WorldEntities
-  element = root->FirstChildElement( "WorldEntities");
+  TiXmlElement* element = root->FirstChildElement( "WorldEntities");
   
   if( element == NULL)
@@ -207,13 +206,14 @@
   	element = element->FirstChildElement();
 	  // load Players/Objects/Whatever
+		PRINTF0("Loading WorldEntities\n");
 		while( element != NULL)
 		{
 			WorldEntity* created = (WorldEntity*) loader->fabricate( element);
-			if( created != NULL) spawn( created);
-			assert( element->Value() != NULL);
+			if( created != NULL) this->spawn( created);
 				// if we load a 'Player' we use it as localPlayer
-			if( !strcmp( element->Value(), "Player")) localPlayer = (Player*) created;
+			// if( element->Value() != NULL && !strcmp( element->Value(), "Player")) localPlayer = (Player*) created;
 			element = element->NextSiblingElement();
 		}
+		PRINTF0("Done loading WorldEntities\n");
 	}
 	
@@ -227,7 +227,9 @@
   {	
   	//load track
-  	trackManager = TrackManager::getInstance();
+ 		PRINTF0("Loading Track\n");
+ 		trackManager = TrackManager::getInstance();
   	trackManager->loadTrack( element);
   	trackManager->finalize();
+		PRINTF0("Done loading Track\n");
 	}
 
@@ -495,5 +497,6 @@
   //gluNurbsProperty (theNurb, GLU_NURBS_MODE, GLU_NURBS_TESSELLATOR);
   //gluNurbsProperty (theNurb, GLU_NURBS_VERTEX, vertexCallback );
-
+	
+	PRINTF0("> Done Loading world: '%s'\n", getPath());
 }
 
Index: /orxonox/branches/levelloader/src/track_manager.cc
===================================================================
--- /orxonox/branches/levelloader/src/track_manager.cc	(revision 3556)
+++ /orxonox/branches/levelloader/src/track_manager.cc	(revision 3557)
@@ -705,9 +705,12 @@
 			{
 				assert( container->Value() != NULL);
-				if( sscanf( container->Value(), "%f,%f,%f", &x, &y, &z) == 3)
+				if( sscanf( container->Value(), "%lf,%lf,%lf", &x, &y, &z) == 3)
+				{
+					PRINTF0("Loaded Point: %lf,%lf,%lf (%s)\n", x, y, z, container->Value());
 					addPoint( Vector( x, y, z));
+				}
 				else
 				{
-					PRINTF(1)("Invalid Point in Track (skipped)\n");
+					PRINTF0("Invalid Point in Track (skipped)\n");
 				}			
 			}
@@ -719,9 +722,12 @@
 			{
 				assert( container->Value() != NULL);
-				if( sscanf( container->Value(), "%f", &d) == 1)
+				if( sscanf( container->Value(), "%lf", &d) == 1)
+				{
+					PRINTF0("Loaded Duration: %lf (%s)\n", d, container->Value());
 					setDuration( d);
+				}
 				else
 				{
-					PRINTF(1)("Invalid Duration in Track (skipped)\n");
+					PRINTF0("Invalid Duration in Track (skipped)\n");
 				}			
 			}
@@ -729,4 +735,5 @@
 		else if( !strcmp( element->Value(), "SavePoint"))
 		{
+			PRINTF0("Loaded Savepoint\n");
 			setSavePoint();
 		}
@@ -737,4 +744,5 @@
 			{
 				assert( container->Value() != NULL);
+				PRINTF0("Loaded Fork: %s\n", container->Value());
 				forkS( container->Value());
 			}
@@ -746,4 +754,5 @@
 			{
 				assert( container->Value() != NULL);
+				PRINTF0("Loaded Join: %s\n", container->Value());
 				joinS( container->Value());
 			}
@@ -755,4 +764,5 @@
 			{
 				assert( container->Value() != NULL);
+				PRINTF0("Loaded WorkOn: %s\n", container->Value());
 				workOnS( container->Value());
 			}
Index: /orxonox/branches/levelloader/src/world_entities/environment.cc
===================================================================
--- /orxonox/branches/levelloader/src/world_entities/environment.cc	(revision 3556)
+++ /orxonox/branches/levelloader/src/world_entities/environment.cc	(revision 3557)
@@ -35,19 +35,18 @@
 Environment::Environment ( TiXmlElement* root)
 {
+	assert( root != NULL);
+	
 	char* temp;
 	const char* string = grabParameter( root, "name");
+
 	if( string == NULL)
 	{
-		PRINTF(1)("Environment is missing a proper 'name'\n");
+		PRINTF0("Environment is missing a proper 'name'\n");
 		string = "Unknown";
-		temp = new char[strlen(string + 2)];
-		strcpy( temp, string);
-		this->setName( temp);
+		this->setName( string);
 	}
 	else
 	{
-		temp = new char[strlen(string + 2)];
-		strcpy( temp, string);
-		this->setName( temp);
+		this->setName( string);
 	}
 	
@@ -58,10 +57,10 @@
 	else
 	{
-		PRINTF(1)("Environment is missing a proper 'model'\n");
+		PRINTF0("Environment is missing a proper 'model'\n");
 		this->model = new OBJModel( "../data/models/reaplow.obj");
 	}
 	if( this->model == NULL)
 	{
-		PRINTF(1)("Environment model '%s' could not be loaded\n", string);
+		PRINTF0("Environment model '%s' could not be loaded\n", string);
 	}
 	
@@ -69,5 +68,5 @@
 	
 	string = grabParameter( root, "position");
-	if( string != NULL && sscanf( string, "%f,%f,%f", &(buff[0]), &(buff[1]), &(buff[2])) == 3)
+	if( string != NULL && sscanf( string, "%lf,%lf,%lf", &(buff[0]), &(buff[1]), &(buff[2])) == 3)
 	{
 		Vector* es = new Vector( buff[0], buff[1], buff[2]);
@@ -77,12 +76,12 @@
 	else
 	{
-		PRINTF(1)("Environment is missing a proper 'position'\n");
+		PRINTF0("Environment is missing a proper 'position'\n");
 		Vector* es = new Vector();
 		this->setAbsCoor(es);
 		delete es;
 	}
-	
+		
 	string = grabParameter( root, "orientation");
-	if( string != NULL && sscanf( string, "%f,%f,%f", &(buff[0]), &(buff[1]), &(buff[2])) == 3)
+	if( string != NULL && sscanf( string, "%lf,%lf,%lf", &(buff[0]), &(buff[1]), &(buff[2])) == 3)
 	{
 		Quaternion* qs = new Quaternion( buff[0], buff[1], buff[2]);
@@ -92,5 +91,5 @@
 	else
 	{
-		PRINTF(1)("Environment is missing a proper 'orientation'\n");
+		PRINTF0("Environment is missing a proper 'orientation'\n");
   	Quaternion* qs = new Quaternion ();
 		this->setAbsDir(qs);
