Index: code/branches/objecthierarchy2/src/core/BaseObject.cc
===================================================================
--- code/branches/objecthierarchy2/src/core/BaseObject.cc	(revision 2172)
+++ code/branches/objecthierarchy2/src/core/BaseObject.cc	(revision 2173)
@@ -109,5 +109,5 @@
             std::list<std::string> eventnames;
 
-            if (mode == XMLPort::LoadObject)
+            if (mode == XMLPort::LoadObject || mode == XMLPort::ExpandObject)
             {
                 for (ticpp::Iterator<ticpp::Element> child = events->FirstChildElement(false); child != child.end(); child++)
Index: code/branches/objecthierarchy2/src/core/CorePrereqs.h
===================================================================
--- code/branches/objecthierarchy2/src/core/CorePrereqs.h	(revision 2172)
+++ code/branches/objecthierarchy2/src/core/CorePrereqs.h	(revision 2173)
@@ -69,5 +69,6 @@
     {
       LoadObject,
-      SaveObject
+      SaveObject,
+      ExpandObject
     };
   }
Index: code/branches/objecthierarchy2/src/core/Template.cc
===================================================================
--- code/branches/objecthierarchy2/src/core/Template.cc	(revision 2172)
+++ code/branches/objecthierarchy2/src/core/Template.cc	(revision 2173)
@@ -43,4 +43,5 @@
 
         this->bIsLink_ = false;
+        this->bLoadDefaults_ = true;
         this->bIsReturningXMLElement_ = false;
         this->baseclassIdentifier_ = 0;
@@ -56,6 +57,7 @@
         SUPER(Template, XMLPort, xmlelement, mode);
 
-        XMLPortParam(Template, "link", setLink, getLink, xmlelement, mode);
-        XMLPortParam(Template, "baseclass", setBaseclass, getBaseclass, xmlelement, mode);
+        XMLPortParam(Template, "link",      setLink,         getLink,         xmlelement, mode);
+        XMLPortParam(Template, "baseclass", setBaseclass,    getBaseclass,    xmlelement, mode);
+        XMLPortParam(Template, "defaults",  setLoadDefaults, getLoadDefaults, xmlelement, mode).defaultValues(true);
 
         Element* element = xmlelement.FirstChildElement(false);
@@ -134,5 +136,9 @@
 
         Element temp = ((TiXmlElement*)&this->getXMLElement());
-        object->XMLPort(temp, XMLPort::LoadObject);
+
+        if (this->bLoadDefaults_)
+            object->XMLPort(temp, XMLPort::LoadObject);
+        else
+            object->XMLPort(temp, XMLPort::ExpandObject);
     }
 
Index: code/branches/objecthierarchy2/src/core/Template.h
===================================================================
--- code/branches/objecthierarchy2/src/core/Template.h	(revision 2172)
+++ code/branches/objecthierarchy2/src/core/Template.h	(revision 2173)
@@ -53,4 +53,9 @@
                 { return this->link_; }
 
+            inline void setLoadDefaults(bool bLoadDefaults)
+                { this->bLoadDefaults_ = bLoadDefaults; }
+            inline bool getLoadDefaults() const
+                { return this->bLoadDefaults_; }
+
             inline void setXMLElement(const TiXmlElement& xmlelement)
                 { this->xmlelement_ = xmlelement; }
@@ -75,4 +80,5 @@
             Identifier* baseclassIdentifier_;
             bool bIsLink_;
+            bool bLoadDefaults_;
             mutable bool bIsReturningXMLElement_;
     };
Index: code/branches/objecthierarchy2/src/core/XMLPort.h
===================================================================
--- code/branches/objecthierarchy2/src/core/XMLPort.h	(revision 2172)
+++ code/branches/objecthierarchy2/src/core/XMLPort.h	(revision 2173)
@@ -336,17 +336,19 @@
                 this->parseParams_.mode = mode;
 
-                if (mode == XMLPort::LoadObject)
+                if ((mode == XMLPort::LoadObject) || (mode == XMLPort::ExpandObject))
                 {
                     try
                     {
                         std::string attribute = xmlelement.GetAttribute(this->paramname_);
-                        if ((attribute.size() > 0) || (this->loadexecutor_->allDefaultValuesSet()))
+                        if ((attribute.size() > 0) || ((mode != XMLPort::ExpandObject) && this->loadexecutor_->allDefaultValuesSet()))
                         {
                             COUT(5) << this->owner_->getLoaderIndentation() << "Loading parameter " << this->paramname_ << " in " << this->identifier_->getName() << " (objectname " << this->owner_->getName() << ")." << std::endl << this->owner_->getLoaderIndentation();
-                            if (this->loadexecutor_->parse(object, attribute, ","))
+                            if (this->loadexecutor_->parse(object, attribute, ",") || (mode  == XMLPort::ExpandObject))
                                 this->parseResult_ = PR_finished;
                             else
                                 this->parseResult_ = PR_waiting_for_default_values;
                         }
+                        else if (mode == XMLPort::ExpandObject)
+                            this->parseResult_ = PR_finished;
                         else
                             this->parseResult_ = PR_waiting_for_default_values;
@@ -473,5 +475,5 @@
             XMLPortObjectContainer& port(T* object, Element& xmlelement, XMLPort::Mode mode)
             {
-                if (mode == XMLPort::LoadObject)
+                if ((mode == XMLPort::LoadObject) || (mode == XMLPort::ExpandObject))
                 {
                     try
Index: code/branches/objecthierarchy2/src/orxonox/LevelManager.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/LevelManager.cc	(revision 2172)
+++ code/branches/objecthierarchy2/src/orxonox/LevelManager.cc	(revision 2173)
@@ -42,4 +42,6 @@
         assert(singletonRef_s == 0);
         singletonRef_s = this;
+
+        PlayerManager::getInstance(); // ensure existence of PlayerManager
     }
 
Index: code/branches/objecthierarchy2/src/orxonox/gamestates/GSLevel.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/gamestates/GSLevel.cc	(revision 2172)
+++ code/branches/objecthierarchy2/src/orxonox/gamestates/GSLevel.cc	(revision 2173)
@@ -51,5 +51,5 @@
 namespace orxonox
 {
-    SetCommandLineArgument(level, "sample2.oxw").shortcut("l");
+    SetCommandLineArgument(level, "sample3.oxw").shortcut("l");
 
     GSLevel::GSLevel()
Index: code/branches/objecthierarchy2/src/orxonox/objects/Level.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/Level.cc	(revision 2172)
+++ code/branches/objecthierarchy2/src/orxonox/objects/Level.cc	(revision 2173)
@@ -141,5 +141,5 @@
     void Level::playerEntered(PlayerInfo* player)
     {
-        COUT(3) << "player entered level" << std::endl;
+        COUT(3) << "player entered level (id: " << player->getClientID() << ", name: " << player->getName() << ")" << std::endl;
         player->setGametype(this->getGametype());
     }
@@ -147,5 +147,5 @@
     void Level::playerLeft(PlayerInfo* player)
     {
-        COUT(3) << "player left level" << std::endl;
+        COUT(3) << "player left level (id: " << player->getClientID() << ", name: " << player->getName() << ")" << std::endl;
         player->setGametype(0);
     }
