Index: code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/CollisionShape.cc
===================================================================
--- code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/CollisionShape.cc	(revision 2402)
+++ code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/CollisionShape.cc	(revision 2403)
@@ -52,4 +52,7 @@
         this->parentID_ = (unsigned int)-1;
         this->collisionShape_ = 0;
+        this->position_ = Vector3::ZERO;
+        this->orientation_ = Quaternion::IDENTITY;
+        this->scale_ = Vector3::UNIT_SCALE;
     }
 
Index: code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/CompoundCollisionShape.cc
===================================================================
--- code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/CompoundCollisionShape.cc	(revision 2402)
+++ code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/CompoundCollisionShape.cc	(revision 2403)
@@ -44,5 +44,4 @@
         RegisterObject(CompoundCollisionShape);
 
-        this->collisionShape_ = 0;
         this->compoundShape_  = new btCompoundShape();
     }
@@ -67,5 +66,5 @@
         if (this->collisionShape_)
             return this->collisionShape_;
-        else if (this->childShapes_.size() != 0)
+        else if (!this->empty())
             return this->compoundShape_;
         else
@@ -75,19 +74,24 @@
     void CompoundCollisionShape::addChildShape(CollisionShape* shape)
     {
-        if (!shape || !shape->getCollisionShape())
+        if (!shape)
             return;
-        assert(this->compoundShape_);
-        btTransform transf(omni_cast<btQuaternion>(shape->getOrientation()), omni_cast<btVector3>(shape->getPosition()));
-        this->compoundShape_->addChildShape(transf, shape->getCollisionShape());
+        this->childShapes_.push_back(shape);
 
-        if (this->childShapes_.size() == 1 && this->childShapes_[0] && !this->childShapes_[0]->hasTransform())
+        if (shape->getCollisionShape())
         {
-            // --> Only shape to be added, no transform; add it directly
-            this->collisionShape_ = shape->getCollisionShape();
-        }
-        else
-        {
-            // Make sure we use the compound shape
-            this->collisionShape_ = 0;
+            // Only actually attach if we didn't pick a CompoundCollisionShape with no content
+            btTransform transf(omni_cast<btQuaternion>(shape->getOrientation()), omni_cast<btVector3>(shape->getPosition()));
+            this->compoundShape_->addChildShape(transf, shape->getCollisionShape());
+
+            if (this->childShapes_.size() == 1 && !this->childShapes_[0]->hasTransform())
+            {
+                // --> Only shape to be added, no transform; add it directly
+                this->collisionShape_ = shape->getCollisionShape();
+            }
+            else
+            {
+                // Make sure we use the compound shape when returning the btCollisionShape
+                this->collisionShape_ = 0;
+            }
         }
 
Index: code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/CompoundCollisionShape.h
===================================================================
--- code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/CompoundCollisionShape.h	(revision 2402)
+++ code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/CompoundCollisionShape.h	(revision 2403)
@@ -50,6 +50,9 @@
             virtual btCollisionShape* getCollisionShape() const;
 
+            inline bool empty() const
+                { return this->childShapes_.size() == 0; }
+
         private:
-            btCompoundShape* compoundShape_;
+            btCompoundShape*             compoundShape_;
             std::vector<CollisionShape*> childShapes_;
     };
Index: code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/PlaneCollisionShape.cc
===================================================================
--- code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/PlaneCollisionShape.cc	(revision 2402)
+++ code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/PlaneCollisionShape.cc	(revision 2403)
@@ -42,8 +42,9 @@
         RegisterObject(PlaneCollisionShape);
 
-        this->planeShape_ = new btStaticPlaneShape(btVector3(1, 1, 1), 0);
-        this->collisionShape_ = this->planeShape_;
-        this->planeNormal_ = Vector3(1, 1, 1);
-        this->planeOffset_ = 0.0f;
+        this->normal_ = Vector3(0, 1, 0);
+        this->offset_ = 0.0f;
+        updatePlane();
+
+        this->registerVariables();
     }
 
@@ -51,11 +52,11 @@
     {
         if (this->isInitialized())
-            delete this->planeShape_;
+            delete this->collisionShape_;
     }
 
     void PlaneCollisionShape::registerVariables()
     {
-        REGISTERDATA(this->planeNormal_, network::direction::toclient, new network::NetworkCallback<PlaneCollisionShape>(this, &PlaneCollisionShape::planeNormalChanged));
-        REGISTERDATA(this->planeOffset_, network::direction::toclient, new network::NetworkCallback<PlaneCollisionShape>(this, &PlaneCollisionShape::planeOffsetChanged));
+        REGISTERDATA(this->normal_, network::direction::toclient, new network::NetworkCallback<PlaneCollisionShape>(this, &PlaneCollisionShape::updatePlane));
+        REGISTERDATA(this->offset_, network::direction::toclient, new network::NetworkCallback<PlaneCollisionShape>(this, &PlaneCollisionShape::updatePlane));
     }
 
@@ -64,22 +65,13 @@
         SUPER(PlaneCollisionShape, XMLPort, xmlelement, mode);
 
-        XMLPortParam(PlaneCollisionShape, "planeNormal", setNormal, getNormal, xmlelement, mode);
-        XMLPortParam(PlaneCollisionShape, "planeOffset", setOffset, getOffset, xmlelement, mode);    
+        XMLPortParam(PlaneCollisionShape, "normal", setNormal, getNormal, xmlelement, mode);
+        XMLPortParam(PlaneCollisionShape, "offset", setOffset, getOffset, xmlelement, mode);    
     }
 
-    void PlaneCollisionShape::setNormal(const Vector3& normal)
+    void PlaneCollisionShape::updatePlane()
     {
-        delete this->planeShape_;
-        this->planeNormal_ = normal;
-        this->planeShape_ = new btStaticPlaneShape(omni_cast<btVector3>(normal), this->planeOffset_);
-        this->collisionShape_ = this->planeShape_;
-    }
-
-    void PlaneCollisionShape::setOffset(float offset)
-    {
-        delete this->planeShape_;
-        this->planeOffset_ = offset;
-        this->planeShape_ = new btStaticPlaneShape(omni_cast<btVector3>(this->planeNormal_), offset);
-        this->collisionShape_ = this->planeShape_;
+        if (this->collisionShape_)
+            delete this->collisionShape_;
+        this->collisionShape_ = new btStaticPlaneShape(omni_cast<btVector3>(this->normal_), this->offset_);
     }
 }
Index: code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/PlaneCollisionShape.h
===================================================================
--- code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/PlaneCollisionShape.h	(revision 2402)
+++ code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/PlaneCollisionShape.h	(revision 2403)
@@ -46,22 +46,19 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
 
+            inline void setNormal(const Vector3& normal)
+                { this->normal_ = normal; updatePlane(); }
+            inline const Vector3& getNormal()
+                { return normal_;}
+
+            inline void setOffset(float offset)
+                { this->offset_ = offset; updatePlane(); }
             inline float getOffset()
-                { return this->planeShape_->getPlaneConstant();}
-            void setOffset(float offset);
+                { return this->offset_;}
 
-            inline btVector3 getNormal()
-                { return this->planeShape_->getPlaneNormal();}
-            void setNormal(const Vector3& normal);
-
-            inline void planeNormalChanged()
-                { this->setNormal(this->planeNormal_); }
-
-            inline void planeOffsetChanged()
-                { this->setOffset(this->planeOffset_); }
+            void updatePlane();
 
         private:
-            btStaticPlaneShape* planeShape_;
-            Vector3             planeNormal_;
-            float               planeOffset_;
+            Vector3 normal_;
+            float   offset_;
      };
 }
Index: code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/SphereCollisionShape.cc
===================================================================
--- code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/SphereCollisionShape.cc	(revision 2402)
+++ code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/SphereCollisionShape.cc	(revision 2403)
@@ -44,6 +44,6 @@
         RegisterObject(SphereCollisionShape);
 
-        this->sphereShape_ = new btSphereShape(1.0f);
-        this->collisionShape_ = this->sphereShape_;
+        this->radius_ = 1.0f;
+        updateSphere();
 
         this->registerVariables();
@@ -58,5 +58,5 @@
     void SphereCollisionShape::registerVariables()
     {
-        REGISTERDATA(this->radius_, network::direction::toclient, new network::NetworkCallback<SphereCollisionShape>(this, &SphereCollisionShape::radiusChanged));
+        REGISTERDATA(this->radius_, network::direction::toclient, new network::NetworkCallback<SphereCollisionShape>(this, &SphereCollisionShape::updateSphere));
     }
 
@@ -68,10 +68,9 @@
     }
 
-    void SphereCollisionShape::setRadius(float radius)
+    void SphereCollisionShape::updateSphere()
     {
-        // TODO: Think about where this could be referenced already.
-        this->radius_ = radius;
-        delete this->sphereShape_;
-        this->sphereShape_ = new btSphereShape(radius);
+        if (this->collisionShape_)
+            delete this->collisionShape_;
+        this->collisionShape_ = new btSphereShape(this->radius_);
     }
 }
Index: code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/SphereCollisionShape.h
===================================================================
--- code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/SphereCollisionShape.h	(revision 2402)
+++ code/branches/physics/src/orxonox/objects/worldentities/collisionshapes/SphereCollisionShape.h	(revision 2403)
@@ -45,14 +45,13 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
 
-            void setRadius(float radius);
+            inline void setRadius(float radius)
+                { this->radius_ = radius; updateSphere(); }
             inline float getRadius() const
                 { return this->radius_;}
 
-            inline void radiusChanged()
-                { this->setRadius(this->radius_); }
+            void updateSphere();
 
         private:
-            btSphereShape* sphereShape_;
-            float          radius_;
+            float radius_;
     };
 }
