Index: /code/branches/presentation3/src/libraries/network/synchronisable/Serialise.h
===================================================================
--- /code/branches/presentation3/src/libraries/network/synchronisable/Serialise.h	(revision 6960)
+++ /code/branches/presentation3/src/libraries/network/synchronisable/Serialise.h	(revision 6961)
@@ -38,4 +38,6 @@
 #include "util/TypeTraits.h"
 #include "core/CorePrereqs.h"
+#include "core/CoreIncludes.h"
+#include "core/SmartPtr.h"
 
 namespace orxonox{
@@ -74,4 +76,39 @@
             return *(uint32_t*)(mem) == OBJECTID_UNKNOWN;
     }
+    
+    // These functions implement loading / saving / etc. for SmartPtr<T>
+    
+    /** @brief returns the size of the objectID needed to synchronise the pointer */
+    template <class T> inline uint32_t returnSize( const SmartPtr<T>& variable )
+    {
+        return sizeof(uint32_t);
+    }
+    
+    /** @brief reads the objectID of a pointer out of the bytestream and increases the mem pointer */
+    template <class T> inline void loadAndIncrease( const SmartPtr<T>& variable, uint8_t*& mem )
+    {
+//         *const_cast<typename Loki::TypeTraits<T*>::UnqualifiedType*>(&variable) = dynamic_cast<T*>(variable->getSynchronisable( *(uint32_t*)(mem) ));
+        *const_cast<typename Loki::TypeTraits<SmartPtr<T> >::UnqualifiedType*>(&variable) = orxonox_cast<T*>(T::getSynchronisable(*(uint32_t*)(mem)));
+        mem += returnSize( variable );
+    }
+    
+    /** @brief saves the objectID of a pointer into the bytestream and increases the mem pointer */
+    template <class T> inline void saveAndIncrease( const SmartPtr<T>& variable, uint8_t*& mem )
+    {
+        if ( variable.get() )
+            *(uint32_t*)(mem) = static_cast<uint32_t>(variable->getObjectID());
+        else
+            *(uint32_t*)(mem) = OBJECTID_UNKNOWN;
+        mem += returnSize( variable );
+    }
+    
+    /** @brief checks whether the objectID of the variable is the same as in the bytestream */
+    template <class T> inline  bool checkEquality( const SmartPtr<T>& variable, uint8_t* mem )
+    {
+        if ( variable.get() )
+            return *(uint32_t*)(mem) == variable->getObjectID();
+        else
+            return *(uint32_t*)(mem) == OBJECTID_UNKNOWN;
+    }
 }
 
Index: /code/branches/presentation3/src/libraries/network/synchronisable/Synchronisable.cc
===================================================================
--- /code/branches/presentation3/src/libraries/network/synchronisable/Synchronisable.cc	(revision 6960)
+++ /code/branches/presentation3/src/libraries/network/synchronisable/Synchronisable.cc	(revision 6961)
@@ -177,4 +177,6 @@
     no->setClassID(header.getClassID());
     assert(no->creatorID_ == header.getCreatorID());
+    if( creator )
+      bo->setLevel(creator->getLevel());          // Note: this ensures that the level is known on the client for child objects of the scene (and the scene itself)
     //assert(no->classID_ == header.getClassID());
     COUT(4) << "fabricate objectID_: " << no->objectID_ << " classID_: " << no->classID_ << std::endl;
Index: /code/branches/presentation3/src/orxonox/Level.cc
===================================================================
--- /code/branches/presentation3/src/orxonox/Level.cc	(revision 6960)
+++ /code/branches/presentation3/src/orxonox/Level.cc	(revision 6961)
@@ -127,5 +127,5 @@
         this->objects_.push_back(object);
         object->setGametype(this->getGametype());
-    object->setLevel(this);
+        object->setLevel(this);
     }
 
Index: /code/branches/presentation3/src/orxonox/Scene.cc
===================================================================
--- /code/branches/presentation3/src/orxonox/Scene.cc	(revision 6960)
+++ /code/branches/presentation3/src/orxonox/Scene.cc	(revision 6961)
@@ -47,4 +47,5 @@
 #include "Radar.h"
 #include "worldentities/WorldEntity.h"
+#include "Level.h"
 
 namespace orxonox
@@ -133,4 +134,5 @@
         registerVariable(this->bHasPhysics_,        VariableDirection::ToClient, new NetworkCallback<Scene>(this, &Scene::networkcallback_hasPhysics));
         registerVariable(this->bShadows_,           VariableDirection::ToClient, new NetworkCallback<Scene>(this, &Scene::networkcallback_applyShadows));
+        registerVariable(this->getLevel(),          VariableDirection::ToClient, new NetworkCallback<Scene>(this, &Scene::changedLevel));
     }
 
Index: /code/branches/presentation3/src/orxonox/graphics/Model.cc
===================================================================
--- /code/branches/presentation3/src/orxonox/graphics/Model.cc	(revision 6960)
+++ /code/branches/presentation3/src/orxonox/graphics/Model.cc	(revision 6961)
@@ -115,8 +115,7 @@
                     Level* level_ = this->getLevel();
                     
-                    MeshLodInformation* lodInfo = level_->getLodInfo(this->meshSrc_);
-                    
-                    if(lodInfo!=0)
-                        setLodLevel(lodInfo->getLodLevel());
+                    // TODO: make this also working on the client (there is currently no level pointer in the baseobject on the client)
+                    if( level_ != 0 && level_->getLodInfo(this->meshSrc_)!=0 )
+                        setLodLevel(level_->getLodInfo(this->meshSrc_)->getLodLevel());
                     
                     COUT(4) << "Setting lodLevel for " << this->meshSrc_<< " with lodLevel_: " << this->lodLevel_ <<" and scale: "<< scaleFactor << ":" << std::endl;
Index: /code/branches/presentation3/src/orxonox/interfaces/RadarViewable.cc
===================================================================
--- /code/branches/presentation3/src/orxonox/interfaces/RadarViewable.cc	(revision 6960)
+++ /code/branches/presentation3/src/orxonox/interfaces/RadarViewable.cc	(revision 6961)
@@ -31,4 +31,5 @@
 #include "util/StringUtils.h"
 #include "core/CoreIncludes.h"
+#include "core/GameMode.h"
 #include "worldentities/WorldEntity.h"
 #include "Radar.h"
@@ -52,6 +53,9 @@
 
         this->uniqueId_=getUniqueNumberString();
-        this->radar_ = this->creator_->getScene()->getRadar();
-        this->radar_->addRadarObject(this);
+        if( GameMode::showsGraphics() )
+        {
+            this->radar_ = this->creator_->getScene()->getRadar();
+            this->radar_->addRadarObject(this);
+        }
         this->bInitialized_ = true;
     }
@@ -60,6 +64,12 @@
     RadarViewable::~RadarViewable()
     {
+        
         if( this->bInitialized_ )
-            this->radar_->removeRadarObject(this);
+        {
+            if( GameMode::showsGraphics() )
+            {
+                this->radar_->removeRadarObject(this);
+            }
+        }
     }
 
@@ -101,5 +111,8 @@
     void RadarViewable::settingsChanged()
     {
-        this->radar_->radarObjectChanged(this);
+        if( GameMode::showsGraphics() )
+        {
+            this->radar_->radarObjectChanged(this);
+        }
     }
 }
