Index: code/trunk/src/orxonox/objects/Ambient.cc
===================================================================
--- code/trunk/src/orxonox/objects/Ambient.cc	(revision 790)
+++ code/trunk/src/orxonox/objects/Ambient.cc	(revision 871)
@@ -40,4 +40,5 @@
 #include "../core/CoreIncludes.h"
 #include "../Orxonox.h"
+#include "core/XMLPort.h"
 
 #include "Ambient.h"
@@ -45,7 +46,4 @@
 namespace orxonox
 {
-    // create a template instantiations
-    //template class _OrxonoxExport ClassIdentifier<Ambient>;
-
     CreateFactory(Ambient);
 
@@ -61,6 +59,4 @@
     void Ambient::loadParams(TiXmlElement* xmlElem)
     {
-    	Ogre::SceneManager* mgr = orxonox::Orxonox::getSingleton()->getSceneManager();
-
     	if (xmlElem->Attribute("colourvalue"))
     	{
@@ -72,8 +68,26 @@
 	    	String2Number<float>(b, colourvalues[2]);
 
-	    	mgr->setAmbientLight(ColourValue(r,g,b));
+	    	this->setAmbientLight(ColourValue(r, g, b));
 
 	    	COUT(4) << "Loader: Set ambient light: "<<r<<" " << g << " " << b  << std::endl << std::endl;
     	}
    }
+
+   void Ambient::setAmbientLight(const ColourValue& colour)
+   {
+    	Orxonox::getSingleton()->getSceneManager()->setAmbientLight(colour);
+   }
+
+    /**
+        @brief XML loading and saving.
+        @param xmlelement The XML-element
+        @param loading Loading (true) or saving (false)
+        @return The XML-element
+    */
+    void Ambient::XMLPort(Element& xmlelement, bool loading)
+    {
+        BaseObject::XMLPort(xmlelement, loading);
+
+        XMLPortParamLoadOnly(Ambient, "colourvalue", setAmbientLight, xmlelement, loading);
+    }
 }
Index: code/trunk/src/orxonox/objects/Ambient.h
===================================================================
--- code/trunk/src/orxonox/objects/Ambient.h	(revision 790)
+++ code/trunk/src/orxonox/objects/Ambient.h	(revision 871)
@@ -14,12 +14,12 @@
             virtual ~Ambient();
 
-            
             void loadParams(TiXmlElement* xmlElem);
+            virtual void XMLPort(Element& xmlelement, bool loading);
+            void setAmbientLight(const ColourValue& colour);
 
         private:
-            
+
 
     };
-    ExportClass(Ambient, Orxonox);
 }
 
Index: code/trunk/src/orxonox/objects/Camera.h
===================================================================
--- code/trunk/src/orxonox/objects/Camera.h	(revision 790)
+++ code/trunk/src/orxonox/objects/Camera.h	(revision 871)
@@ -14,12 +14,11 @@
             virtual ~Camera();
 
-            
+
             void loadParams(TiXmlElement* xmlElem);
 
         private:
-            
+
 
     };
-    ExportClass(Camera, Orxonox);
 }
 
Index: code/trunk/src/orxonox/objects/Explosion.h
===================================================================
--- code/trunk/src/orxonox/objects/Explosion.h	(revision 790)
+++ code/trunk/src/orxonox/objects/Explosion.h	(revision 871)
@@ -21,5 +21,4 @@
             ParticleInterface* particle_;
     };
-    ExportClass(Explosion, Orxonox);
 }
 
Index: code/trunk/src/orxonox/objects/Fighter.h
===================================================================
--- code/trunk/src/orxonox/objects/Fighter.h	(revision 790)
+++ code/trunk/src/orxonox/objects/Fighter.h	(revision 871)
@@ -90,5 +90,4 @@
             int emitterRate_;
     };
-    ExportClass(Fighter, Orxonox);
 }
 
Index: code/trunk/src/orxonox/objects/Model.cc
===================================================================
--- code/trunk/src/orxonox/objects/Model.cc	(revision 790)
+++ code/trunk/src/orxonox/objects/Model.cc	(revision 871)
@@ -33,4 +33,5 @@
 #include "../core/CoreIncludes.h"
 #include "../Orxonox.h"
+#include "core/XMLPort.h"
 
 #include "Model.h"
@@ -60,4 +61,24 @@
     }
 
+    /**
+        @brief XML loading and saving.
+        @param xmlelement The XML-element
+        @param loading Loading (true) or saving (false)
+        @return The XML-element
+    */
+    void Model::XMLPort(Element& xmlelement, bool loading)
+    {
+        WorldEntity::XMLPort(xmlelement, loading);
+
+        XMLPortParamLoadOnly(Model, "mesh", setMesh, xmlelement, loading);
+
+        create();
+    }
+
+    void Model::setMesh(const std::string& meshname)
+    {
+        this->meshSrc_ = meshname;
+    }
+
     bool Model::create(){
       if(meshSrc_.compare("")!=0){
@@ -71,5 +92,5 @@
 
     void Model::registerAllVariables(){
-      registerVar(&meshSrc_, meshSrc_.length() + 1, network::STRING);
+//      registerVar(&meshSrc_, meshSrc_.length() + 1, network::STRING);
     }
 }
Index: code/trunk/src/orxonox/objects/Model.h
===================================================================
--- code/trunk/src/orxonox/objects/Model.h	(revision 790)
+++ code/trunk/src/orxonox/objects/Model.h	(revision 871)
@@ -18,4 +18,6 @@
             virtual ~Model();
             virtual void loadParams(TiXmlElement* xmlElem);
+            virtual void XMLPort(Element& xmlelement, bool loading);
+            void setMesh(const std::string& meshname);
             bool create();
 
@@ -25,5 +27,4 @@
             void registerAllVariables();
     };
-    ExportClass(Model, Orxonox);
 }
 
Index: code/trunk/src/orxonox/objects/NPC.h
===================================================================
--- code/trunk/src/orxonox/objects/NPC.h	(revision 790)
+++ code/trunk/src/orxonox/objects/NPC.h	(revision 871)
@@ -44,6 +44,4 @@
       static int const NUMELEMENTS = 9;  //number of elements
   };
-  ExportClass(NPC, Orxonox);
-
 }
 #endif /* _NPC_H__ */
Index: code/trunk/src/orxonox/objects/Projectile.h
===================================================================
--- code/trunk/src/orxonox/objects/Projectile.h	(revision 790)
+++ code/trunk/src/orxonox/objects/Projectile.h	(revision 871)
@@ -28,5 +28,4 @@
             Timer<Projectile> destroyTimer_;
     };
-    ExportClass(Projectile, Orxonox);
 }
 
Index: code/trunk/src/orxonox/objects/Skybox.cc
===================================================================
--- code/trunk/src/orxonox/objects/Skybox.cc	(revision 790)
+++ code/trunk/src/orxonox/objects/Skybox.cc	(revision 871)
@@ -38,4 +38,5 @@
 #include "../core/CoreIncludes.h"
 #include "../core/Debug.h"
+#include "core/XMLPort.h"
 
 #include "Skybox.h"
@@ -56,13 +57,29 @@
     void Skybox::loadParams(TiXmlElement* xmlElem)
     {
-    	Ogre::SceneManager* mgr = orxonox::Orxonox::getSingleton()->getSceneManager();
-
     	if (xmlElem->Attribute("src"))
     	{
     		std::string skyboxSrc = xmlElem->Attribute("src");
-	    	mgr->setSkyBox(true, skyboxSrc);
+	    	this->setSkybox(skyboxSrc);
 
 	    	COUT(4) << "Loader: Set skybox: "<< skyboxSrc << std::endl << std::endl;
     	}
    }
+
+   void Skybox::setSkybox(const std::string& skyboxname)
+   {
+    	Orxonox::getSingleton()->getSceneManager()->setSkyBox(true, skyboxname);
+   }
+
+    /**
+        @brief XML loading and saving.
+        @param xmlelement The XML-element
+        @param loading Loading (true) or saving (false)
+        @return The XML-element
+    */
+    void Skybox::XMLPort(Element& xmlelement, bool loading)
+    {
+        BaseObject::XMLPort(xmlelement, loading);
+
+        XMLPortParamLoadOnly(Skybox, "src", setSkybox, xmlelement, loading);
+    }
 }
Index: code/trunk/src/orxonox/objects/Skybox.h
===================================================================
--- code/trunk/src/orxonox/objects/Skybox.h	(revision 790)
+++ code/trunk/src/orxonox/objects/Skybox.h	(revision 871)
@@ -16,12 +16,12 @@
             virtual ~Skybox();
 
-            
             void loadParams(TiXmlElement* xmlElem);
+            virtual void XMLPort(Element& xmlelement, bool loading);
+            void setSkybox(const std::string& skyboxname);
 
         private:
-            
+
 
     };
-    ExportClass(Skybox, Orxonox);
 }
 
Index: code/trunk/src/orxonox/objects/SpaceShip.cc
===================================================================
--- code/trunk/src/orxonox/objects/SpaceShip.cc	(revision 790)
+++ code/trunk/src/orxonox/objects/SpaceShip.cc	(revision 871)
@@ -44,4 +44,5 @@
 #include "../particle/ParticleInterface.h"
 #include "Projectile.h"
+#include "core/XMLPort.h"
 
 #include "SpaceShip.h"
@@ -123,4 +124,6 @@
         this->brakeLoop(loop);
 */
+        this->init();
+
         COUT(3) << "Info: SpaceShip was loaded" << std::endl;
     }
@@ -132,16 +135,6 @@
     }
 
-    void SpaceShip::setConfigValues()
-    {
-        SetConfigValue(bInvertYAxis_, false).description("Set this to true for joystick-like mouse behaviour (mouse up = ship down).");
-        SetConfigValue(reloadTime_, 0.125).description("The reload time of the weapon in seconds");
-        SetConfigValue(testvector_, Vector3()).description("asdfblah");
-    }
-
-    void SpaceShip::loadParams(TiXmlElement* xmlElem)
-    {
-        Model::loadParams(xmlElem);
-
-
+    void SpaceShip::init()
+    {
         // START CREATING THRUSTER
         this->tt_ = new ParticleInterface(Orxonox::getSingleton()->getSceneManager(),"twinthruster" + this->getName(),"Orxonox/engineglow");
@@ -197,5 +190,16 @@
 
         // END of testing crosshair
-
+    }
+
+    void SpaceShip::setConfigValues()
+    {
+        SetConfigValue(bInvertYAxis_, false).description("Set this to true for joystick-like mouse behaviour (mouse up = ship down).");
+        SetConfigValue(reloadTime_, 0.125).description("The reload time of the weapon in seconds");
+        SetConfigValue(testvector_, Vector3()).description("asdfblah");
+    }
+
+    void SpaceShip::loadParams(TiXmlElement* xmlElem)
+    {
+        Model::loadParams(xmlElem);
 /*
         if (xmlElem->Attribute("forward") && xmlElem->Attribute("rotateupdown") && xmlElem->Attribute("rotaterightleft") && xmlElem->Attribute("looprightleft"))
@@ -242,21 +246,61 @@
     	if (xmlElem->Attribute("camera"))
     	{
-            Ogre::Camera *cam = Orxonox::getSingleton()->getSceneManager()->createCamera("ShipCam");
-            this->camNode_ = this->getNode()->createChildSceneNode("CamNode");
-/*
-//            node->setInheritOrientation(false);
-            cam->setPosition(Vector3(0,50,-150));
-            cam->lookAt(Vector3(0,20,0));
-            cam->roll(Degree(0));
-*/
-
-            cam->setPosition(Vector3(-200,0,35));
-//            cam->setPosition(Vector3(0,-350,0));
-            cam->lookAt(Vector3(0,0,35));
-            cam->roll(Degree(-90));
-
-            this->camNode_->attachObject(cam);
-            Orxonox::getSingleton()->getOgrePointer()->getRoot()->getAutoCreatedWindow()->addViewport(cam);
+    	    this->setCamera();
     	}
+    }
+
+    void SpaceShip::setCamera(const std::string& camera)
+    {
+        Ogre::Camera *cam = Orxonox::getSingleton()->getSceneManager()->createCamera("ShipCam");
+        this->camNode_ = this->getNode()->createChildSceneNode("CamNode");
+/*
+//        node->setInheritOrientation(false);
+        cam->setPosition(Vector3(0,50,-150));
+        cam->lookAt(Vector3(0,20,0));
+        cam->roll(Degree(0));
+*/
+
+        cam->setPosition(Vector3(-200,0,35));
+//        cam->setPosition(Vector3(0,-350,0));
+        cam->lookAt(Vector3(0,0,35));
+        cam->roll(Degree(-90));
+
+        this->camNode_->attachObject(cam);
+        Orxonox::getSingleton()->getOgrePointer()->getRoot()->getAutoCreatedWindow()->addViewport(cam);
+    }
+
+    void SpaceShip::setMaxSpeed(float value)
+    { this->maxSpeed_ = value; }
+    void SpaceShip::setMaxSideAndBackSpeed(float value)
+    { this->maxSideAndBackSpeed_ = value; }
+    void SpaceShip::setMaxRotation(float value)
+    { this->maxRotation_ = value; this->maxRotationRadian_ = Radian(value); }
+    void SpaceShip::setTransAcc(float value)
+    { this->translationAcceleration_ = value; }
+    void SpaceShip::setRotAcc(float value)
+    { this->rotationAcceleration_ = value; this->rotationAccelerationRadian_ = Radian(value); }
+    void SpaceShip::setTransDamp(float value)
+    { this->translationDamping_ = value; }
+    void SpaceShip::setRotDamp(float value)
+    { this->rotationDamping_ = value; this->rotationDampingRadian_ = Radian(value); }
+
+    /**
+        @brief XML loading and saving.
+        @param xmlelement The XML-element
+        @param loading Loading (true) or saving (false)
+        @return The XML-element
+    */
+    void SpaceShip::XMLPort(Element& xmlelement, bool loading)
+    {
+        Model::XMLPort(xmlelement, loading);
+
+        XMLPortParamLoadOnly(SpaceShip, "camera", setCamera, xmlelement, loading);
+        XMLPortParamLoadOnly(SpaceShip, "maxSpeed", setMaxSpeed, xmlelement, loading);
+        XMLPortParamLoadOnly(SpaceShip, "maxSideAndBackSpeed", setMaxSideAndBackSpeed, xmlelement, loading);
+        XMLPortParamLoadOnly(SpaceShip, "maxRotation", setMaxRotation, xmlelement, loading);
+        XMLPortParamLoadOnly(SpaceShip, "transAcc", setTransAcc, xmlelement, loading);
+        XMLPortParamLoadOnly(SpaceShip, "rotAcc", setRotAcc, xmlelement, loading);
+        XMLPortParamLoadOnly(SpaceShip, "transDamp", setTransDamp, xmlelement, loading);
+        XMLPortParamLoadOnly(SpaceShip, "rotDamp", setRotDamp, xmlelement, loading);
     }
 
Index: code/trunk/src/orxonox/objects/SpaceShip.h
===================================================================
--- code/trunk/src/orxonox/objects/SpaceShip.h	(revision 790)
+++ code/trunk/src/orxonox/objects/SpaceShip.h	(revision 871)
@@ -21,7 +21,18 @@
             SpaceShip();
             ~SpaceShip();
+            void init();
             void setConfigValues();
             virtual void loadParams(TiXmlElement* xmlElem);
+            virtual void XMLPort(Element& xmlelement, bool loading);
             virtual void tick(float dt);
+
+            void setCamera(const std::string& camera = "");
+            void setMaxSpeed(float value);
+            void setMaxSideAndBackSpeed(float value);
+            void setMaxRotation(float value);
+            void setTransAcc(float value);
+            void setRotAcc(float value);
+            void setTransDamp(float value);
+            void setRotDamp(float value);
 
             bool mouseMoved(const OIS::MouseEvent &e);
@@ -75,5 +86,4 @@
             int emitterRate_;
     };
-    ExportClass(SpaceShip, Orxonox);
 }
 
Index: code/trunk/src/orxonox/objects/SpaceshipSteeringObject.cc
===================================================================
--- code/trunk/src/orxonox/objects/SpaceshipSteeringObject.cc	(revision 790)
+++ code/trunk/src/orxonox/objects/SpaceshipSteeringObject.cc	(revision 871)
@@ -40,6 +40,5 @@
 #include "util/Tokenizer.h"
 #include "util/String2Number.h"
-#include "../core/Debug.h"
-
+#include "core/CoreIncludes.h"
 #include "SpaceshipSteeringObject.h"
 
Index: code/trunk/src/orxonox/objects/Test.h
===================================================================
--- code/trunk/src/orxonox/objects/Test.h	(revision 790)
+++ code/trunk/src/orxonox/objects/Test.h	(revision 871)
@@ -30,5 +30,4 @@
 
 #include "core/BaseObject.h"
-#include "../core/CoreIncludes.h"
 
 namespace orxonox
@@ -74,4 +73,5 @@
         public:
             A1B2() { RegisterObject(A1B2); }
+//            virtual void test() = 0;
     };
 
@@ -116,4 +116,5 @@
         public:
             A1B2C1() { RegisterObject(A1B2C1); }
+//            void test() { std::cout << "test!\n"; }
     };
 
Index: code/trunk/src/orxonox/objects/Tickable.cc
===================================================================
--- code/trunk/src/orxonox/objects/Tickable.cc	(revision 871)
+++ code/trunk/src/orxonox/objects/Tickable.cc	(revision 871)
@@ -0,0 +1,13 @@
+#include "core/CoreIncludes.h"
+#include "Tickable.h"
+
+namespace orxonox
+{
+    /**
+        @brief Constructor: Registers the object in the Tickable-list
+    */
+    Tickable::Tickable()
+    {
+        RegisterRootObject(Tickable);
+    }
+}
Index: code/trunk/src/orxonox/objects/Tickable.h
===================================================================
--- code/trunk/src/orxonox/objects/Tickable.h	(revision 790)
+++ code/trunk/src/orxonox/objects/Tickable.h	(revision 871)
@@ -44,6 +44,5 @@
 
 #include "../OrxonoxPrereqs.h"
-
-#include "../core/CoreIncludes.h"
+#include "core/OrxonoxClass.h"
 
 namespace orxonox
@@ -62,10 +61,6 @@
 
         protected:
-            /**
-                @brief Constructor: Registers the object in the Tickable-list
-            */
-            Tickable() { RegisterRootObject(Tickable); }
+            Tickable();
     };
-    ExportAbstractClass(Tickable, Orxonox);
 
     //! The TickFrameListener calls the tick(dt) function of all Tickables every frame.
Index: code/trunk/src/orxonox/objects/WorldEntity.cc
===================================================================
--- code/trunk/src/orxonox/objects/WorldEntity.cc	(revision 790)
+++ code/trunk/src/orxonox/objects/WorldEntity.cc	(revision 871)
@@ -37,4 +37,5 @@
 #include "../Orxonox.h"
 #include "WorldEntity.h"
+#include "core/XMLPort.h"
 
 namespace orxonox
@@ -86,6 +87,7 @@
     void WorldEntity::loadParams(TiXmlElement* xmlElem)
     {
+
         BaseObject::loadParams(xmlElem);
-
+/*
         if (xmlElem->Attribute("position"))
         {
@@ -153,5 +155,32 @@
 
         create();
-
+*/
+    }
+
+    void WorldEntity::setYawPitchRoll(const Degree& yaw, const Degree& pitch, const Degree& roll)
+    {
+        this->yaw(yaw);
+        this->pitch(pitch);
+        this->roll(roll);
+    }
+
+    /**
+        @brief XML loading and saving.
+        @param xmlelement The XML-element
+        @param loading Loading (true) or saving (false)
+        @return The XML-element
+    */
+    void WorldEntity::XMLPort(Element& xmlelement, bool loading)
+    {
+        BaseObject::XMLPort(xmlelement, loading);
+
+        XMLPortParam(WorldEntity, "position", setPositionLoader2, getPosition, xmlelement, loading);
+        XMLPortParamLoadOnly(WorldEntity, "direction", setDirectionLoader, xmlelement, loading);
+        XMLPortParamLoadOnly(WorldEntity, "yawpitchroll", setYawPitchRoll, xmlelement, loading);
+        XMLPortParam(WorldEntity, "scale", setTotalScale, getScale, xmlelement, loading);
+        XMLPortParam(WorldEntity, "rotationAxis", setRotationAxisLoader, getRotationAxis, xmlelement, loading);
+        XMLPortParam(WorldEntity, "rotationRate", setRotationRate, getRotationRate, xmlelement, loading);
+
+        XMLPortObject(WorldEntity, WorldEntity, "attached", attachWorldEntity, getAttachedWorldEntity, xmlelement, loading);
     }
 
@@ -163,5 +192,5 @@
     void WorldEntity::registerAllVariables()
     {
-      // register coordinates
+/*      // register coordinates
       registerVar( (void*) &(this->getPosition().x), sizeof(this->getPosition().x), network::DATA);
       registerVar( (void*) &(this->getPosition().y), sizeof(this->getPosition().y), network::DATA);
@@ -171,5 +200,5 @@
       registerVar( (void*) &(this->getOrientation().x), sizeof(this->getOrientation().x), network::DATA);
       registerVar( (void*) &(this->getOrientation().y), sizeof(this->getOrientation().y), network::DATA);
-      registerVar( (void*) &(this->getOrientation().z), sizeof(this->getOrientation().z), network::DATA);
+      registerVar( (void*) &(this->getOrientation().z), sizeof(this->getOrientation().z), network::DATA);*/
       // not needed at the moment, because we don't have prediction yet
       /*// register velocity_
@@ -183,3 +212,16 @@
       registerVar( (void*) &(this->getRotationAxis().z), sizeof(this->getRotationAxis().z), network::DATA);*/
     }
+
+    void WorldEntity::attachWorldEntity(WorldEntity* entity)
+    {
+        this->attachedWorldEntities_.push_back(entity);
+    }
+
+    const WorldEntity* WorldEntity::getAttachedWorldEntity(unsigned int index)
+    {
+        if (index < this->attachedWorldEntities_.size())
+            return this->attachedWorldEntities_[index];
+        else
+            return 0;
+    }
 }
Index: code/trunk/src/orxonox/objects/WorldEntity.h
===================================================================
--- code/trunk/src/orxonox/objects/WorldEntity.h	(revision 790)
+++ code/trunk/src/orxonox/objects/WorldEntity.h	(revision 871)
@@ -8,7 +8,7 @@
 
 #include "util/Math.h"
+#include "util/XMLIncludes.h"
 #include "network/Synchronisable.h"
-#include "util/tinyxml/tinyxml.h"
-#include "../core/CoreIncludes.h"
+//#include "util/tinyxml/tinyxml.h"
 #include "core/BaseObject.h"
 #include "Tickable.h"
@@ -17,135 +17,157 @@
 namespace orxonox
 {
-  class _OrxonoxExport WorldEntity : public BaseObject, public Tickable, public network::Synchronisable
-  {
-    public:
-      WorldEntity();
-      virtual ~WorldEntity();
+    class _OrxonoxExport WorldEntity : public BaseObject, public Tickable//, public network::Synchronisable
+    {
+        public:
+            WorldEntity();
+            virtual ~WorldEntity();
 
-      virtual void tick(float dt);
-      virtual void loadParams(TiXmlElement* xmlElem);
-      bool create();
+            virtual void tick(float dt);
+            virtual void loadParams(TiXmlElement* xmlElem);
+            virtual void XMLPort(Element& xmlelement, bool loading);
+            bool create();
 
-      inline Ogre::SceneNode* getNode()
-          { return this->node_; }
+            void attachWorldEntity(WorldEntity* entity);
+            const WorldEntity* getAttachedWorldEntity(unsigned int index);
 
-      inline void setNode(Ogre::SceneNode* node)
-          { this->node_ = node; }
+            inline Ogre::SceneNode* getNode()
+                { return this->node_; }
 
-      inline void setPosition(const Vector3& pos)
-          { this->node_->setPosition(pos); }
-      inline void setPosition(Real x, Real y, Real z)
-          { this->node_->setPosition(x, y, z); }
-      inline const Vector3& getPosition() const
-          { return this->node_->getPosition(); }
+            inline void setNode(Ogre::SceneNode* node)
+                { this->node_ = node; }
 
-      inline void translate(const Vector3 &d, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
-          { this->node_->translate(d, relativeTo); }
-      inline void translate(Real x, Real y, Real z, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
-          { this->node_->translate(x, y, z, relativeTo); }
-      inline void translate(const Matrix3 &axes, const Vector3 &move, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
-          { this->node_->translate(axes, move, relativeTo); }
-      inline void translate(const Matrix3 &axes, Real x, Real y, Real z, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
-          { this->node_->translate(axes, x, y, z, relativeTo); }
+            inline void setPosition(const Vector3& pos)
+                { this->node_->setPosition(pos); }
+            inline void setPositionLoader1(const Vector3& pos)
+                { this->node_->setPosition(pos); }
+            inline void setPositionLoader2(Real x, Real y, Real z)
+                { this->node_->setPosition(x, y, z); }
+            inline void setPosition(Real x, Real y, Real z)
+                { this->node_->setPosition(x, y, z); }
+            inline const Vector3& getPosition() const
+                { return this->node_->getPosition(); }
 
-      inline void yaw(const Radian &angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
-          { this->node_->yaw(angle, relativeTo); }
-      inline void pitch(const Radian &angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
-          { this->node_->pitch(angle, relativeTo); }
-      inline void roll(const Radian &angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
-          { this->node_->roll(angle, relativeTo); }
+            inline void translate(const Vector3 &d, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
+                { this->node_->translate(d, relativeTo); }
+            inline void translate(Real x, Real y, Real z, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
+                { this->node_->translate(x, y, z, relativeTo); }
+            inline void translate(const Matrix3 &axes, const Vector3 &move, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
+                { this->node_->translate(axes, move, relativeTo); }
+            inline void translate(const Matrix3 &axes, Real x, Real y, Real z, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
+                { this->node_->translate(axes, x, y, z, relativeTo); }
 
-      inline const Ogre::Quaternion& getOrientation()
-        { return this->node_->getOrientation(); }
-      inline void setOrientation(const Ogre::Quaternion& quat)
-        { this->node_->setOrientation(quat); }
-      inline void rotate(const Vector3 &axis, const Radian &angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
-        { this->node_->rotate(axis, angle, relativeTo); }
-      inline void setDirection(Real x, Real y, Real z, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL, const Vector3 &localDirectionVector=Vector3::NEGATIVE_UNIT_Z)
-        { this->node_->setDirection(x, y, z, relativeTo, localDirectionVector); }
-      inline void setDirection(const Vector3 &vec, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL, const Vector3 &localDirectionVector=Vector3::NEGATIVE_UNIT_Z)
-        { this->node_->setDirection(vec, relativeTo, localDirectionVector); }
-      inline void lookAt(const Vector3 &targetPoint, Ogre::Node::TransformSpace relativeTo, const Vector3 &localDirectionVector=Vector3::NEGATIVE_UNIT_Z)
-        { this->node_->lookAt(targetPoint, relativeTo, localDirectionVector); }
+            inline void yaw(const Radian &angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
+                { this->node_->yaw(angle, relativeTo); }
+            inline void pitch(const Radian &angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
+                { this->node_->pitch(angle, relativeTo); }
+            inline void roll(const Radian &angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
+                { this->node_->roll(angle, relativeTo); }
+            void setYawPitchRoll(const Degree& yaw, const Degree& pitch, const Degree& roll);
 
-      inline void setScale(const Vector3 &scale)
-        { this->node_->setScale(scale); }
-      inline void setScale(Real x, Real y, Real z)
-        { this->node_->setScale(x, y, z); }
-      inline void setScale(Real scale)
-        { this->node_->setScale(scale, scale, scale); }
-      inline const Vector3& getScale(void) const
-        { return this->node_->getScale(); }
-      inline void scale(const Vector3 &scale)
-        { this->node_->scale(scale); }
-      inline void scale(Real x, Real y, Real z)
-        { this->node_->scale(x, y, z); }
-      inline void scale(Real scale)
-        { this->node_->scale(scale, scale, scale); }
+            inline void setYaw(const Degree &angle)
+                { this->node_->yaw(angle, Ogre::Node::TS_LOCAL); }
+            inline void setPitch(const Degree &angle)
+                { this->node_->pitch(angle, Ogre::Node::TS_LOCAL); }
+            inline void setRoll(const Degree &angle)
+                { this->node_->roll(angle, Ogre::Node::TS_LOCAL); }
 
-      inline void attachObject(Ogre::MovableObject *obj)
-        { this->node_->attachObject(obj); }
-      inline void attachObject(Mesh &mesh)
-        { this->node_->attachObject(mesh.getEntity()); }
-      inline void detachObject(Ogre::MovableObject *obj)
-        { this->node_->detachObject(obj); }
-      inline void detachAllObjects()
-        { this->node_->detachAllObjects(); }
+            inline const Ogre::Quaternion& getOrientation()
+              { return this->node_->getOrientation(); }
+            inline void setOrientation(const Ogre::Quaternion& quat)
+              { this->node_->setOrientation(quat); }
+            inline void rotate(const Vector3 &axis, const Radian &angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
+              { this->node_->rotate(axis, angle, relativeTo); }
+            inline void setDirectionLoader(Real x, Real y, Real z)
+              { this->setDirection(x, y, z); }
+            inline void setDirection(Real x, Real y, Real z, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL, const Vector3 &localDirectionVector=Vector3::NEGATIVE_UNIT_Z)
+              { this->node_->setDirection(x, y, z, relativeTo, localDirectionVector); }
+            inline void setDirection(const Vector3 &vec, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL, const Vector3 &localDirectionVector=Vector3::NEGATIVE_UNIT_Z)
+              { this->node_->setDirection(vec, relativeTo, localDirectionVector); }
+            inline void lookAt(const Vector3 &targetPoint, Ogre::Node::TransformSpace relativeTo, const Vector3 &localDirectionVector=Vector3::NEGATIVE_UNIT_Z)
+              { this->node_->lookAt(targetPoint, relativeTo, localDirectionVector); }
 
-      inline void setVelocity(const Vector3& velocity)
-          { this->velocity_ = velocity; }
-      inline void setVelocity(Real x, Real y, Real z)
-          { this->velocity_.x = x; this->velocity_.y = y; this->velocity_.z = z; }
-      inline const Vector3& getVelocity() const
-          { return this->velocity_; }
+            inline void setScale(const Vector3 &scale)
+              { this->node_->setScale(scale); }
+            inline void setScale(Real x, Real y, Real z)
+              { this->node_->setScale(x, y, z); }
+            inline void setScale(Real scale)
+              { this->node_->setScale(scale, scale, scale); }
+            inline void setTotalScale(Real scale)
+              { this->node_->setScale(scale, scale, scale); }
+            inline const Vector3& getScale(void) const
+              { return this->node_->getScale(); }
+            inline void scale(const Vector3 &scale)
+              { this->node_->scale(scale); }
+            inline void scale(Real x, Real y, Real z)
+              { this->node_->scale(x, y, z); }
+            inline void scale(Real scale)
+              { this->node_->scale(scale, scale, scale); }
 
-      inline void setAcceleration(const Vector3& acceleration)
-          { this->acceleration_ = acceleration; }
-      inline void setAcceleration(Real x, Real y, Real z)
-          { this->acceleration_.x = x; this->acceleration_.y = y; this->acceleration_.z = z; }
-      inline const Vector3& getAcceleration() const
-          { return this->acceleration_; }
+            inline void attachObject(Ogre::MovableObject *obj)
+              { this->node_->attachObject(obj); }
+            inline void attachObject(Mesh &mesh)
+              { this->node_->attachObject(mesh.getEntity()); }
+            inline void detachObject(Ogre::MovableObject *obj)
+              { this->node_->detachObject(obj); }
+            inline void detachAllObjects()
+              { this->node_->detachAllObjects(); }
 
-      inline void setRotationAxis(const Vector3& axis)
-          { this->rotationAxis_ = axis; }
-      inline void setRotationAxis(Real x, Real y, Real z)
-          { this->rotationAxis_.x = x; this->rotationAxis_.y = y; this->rotationAxis_.z = z; }
-      inline const Vector3& getRotationAxis() const
-          { return this->rotationAxis_; }
+            inline void setVelocity(const Vector3& velocity)
+                { this->velocity_ = velocity; }
+            inline void setVelocity(Real x, Real y, Real z)
+                { this->velocity_.x = x; this->velocity_.y = y; this->velocity_.z = z; }
+            inline const Vector3& getVelocity() const
+                { return this->velocity_; }
 
-      inline void setRotationRate(const Radian& angle)
-          { this->rotationRate_ = angle; }
-      inline void setRotationRate(const Degree& angle)
-          { this->rotationRate_ = angle; }
-      inline const Radian& getRotationRate() const
-          { return this->rotationRate_; }
+            inline void setAcceleration(const Vector3& acceleration)
+                { this->acceleration_ = acceleration; }
+            inline void setAcceleration(Real x, Real y, Real z)
+                { this->acceleration_.x = x; this->acceleration_.y = y; this->acceleration_.z = z; }
+            inline const Vector3& getAcceleration() const
+                { return this->acceleration_; }
 
-      inline void setMomentum(const Radian& angle)
-          { this->momentum_ = angle; }
-      inline void setMomentum(const Degree& angle)
-          { this->momentum_ = angle; }
-      inline const Radian& getMomentum() const
-          { return this->momentum_; }
+            inline void setRotationAxisLoader(const Vector3& axis)
+                { this->rotationAxis_ = axis; }
+            inline void setRotationAxis(const Vector3& axis)
+                { this->rotationAxis_ = axis; }
+            inline void setRotationAxis(Real x, Real y, Real z)
+                { this->rotationAxis_.x = x; this->rotationAxis_.y = y; this->rotationAxis_.z = z; }
+            inline const Vector3& getRotationAxis() const
+                { return this->rotationAxis_; }
 
-      inline void setStatic(bool bStatic)
-          { this->bStatic_ = bStatic; }
-      inline bool isStatic()
-          { return this->bStatic_; }
+//            inline void setRotationRate(const Radian& angle)
+//                { this->rotationRate_ = angle; }
+            inline void setRotationRate(const Degree& angle)
+                { this->rotationRate_ = angle; this->setStatic(angle == Degree(0)); }
+            inline const Radian& getRotationRate() const
+                { return this->rotationRate_; }
 
-    protected:
-      void registerAllVariables();
+            inline void setMomentum(const Radian& angle)
+                { this->momentum_ = angle; }
+            inline void setMomentum(const Degree& angle)
+                { this->momentum_ = angle; }
+            inline const Radian& getMomentum() const
+                { return this->momentum_; }
 
-      Vector3 velocity_;
-      Vector3 acceleration_;
-      Vector3 rotationAxis_;
-      Radian rotationRate_;
-      Radian momentum_;
+            inline void setStatic(bool bStatic)
+                { this->bStatic_ = bStatic; }
+            inline bool isStatic()
+                { return this->bStatic_; }
 
-    private:
-      static unsigned int worldEntityCounter_s;
-      Ogre::SceneNode* node_;
-      bool bStatic_;
-  };
-  ExportClass(WorldEntity, Orxonox);
+        protected:
+            void registerAllVariables();
+
+            Vector3 velocity_;
+            Vector3 acceleration_;
+            Vector3 rotationAxis_;
+            Radian rotationRate_;
+            Radian momentum_;
+
+        private:
+            static unsigned int worldEntityCounter_s;
+            Ogre::SceneNode* node_;
+            bool bStatic_;
+            std::vector<WorldEntity*> attachedWorldEntities_;
+    };
 }
 
Index: code/trunk/src/orxonox/objects/test1.cc
===================================================================
--- code/trunk/src/orxonox/objects/test1.cc	(revision 790)
+++ code/trunk/src/orxonox/objects/test1.cc	(revision 871)
@@ -29,7 +29,5 @@
 #include "test2.h"
 #include "test3.h"
-#include "util/tinyxml/tinyxml.h"
-#include "../Orxonox.h"
-#include <OgreSceneManager.h>
+#include "core/CoreIncludes.h"
 
 namespace orxonox
Index: code/trunk/src/orxonox/objects/test2.cc
===================================================================
--- code/trunk/src/orxonox/objects/test2.cc	(revision 790)
+++ code/trunk/src/orxonox/objects/test2.cc	(revision 871)
@@ -29,4 +29,5 @@
 #include "test2.h"
 #include "test3.h"
+#include "core/CoreIncludes.h"
 
 namespace orxonox
Index: code/trunk/src/orxonox/objects/test3.cc
===================================================================
--- code/trunk/src/orxonox/objects/test3.cc	(revision 790)
+++ code/trunk/src/orxonox/objects/test3.cc	(revision 871)
@@ -29,4 +29,5 @@
 #include "test2.h"
 #include "test3.h"
+#include "core/CoreIncludes.h"
 
 namespace orxonox
@@ -63,16 +64,16 @@
     void Test3::configOutput()
     {
-        std::cout << this->value_int_ << std::endl;
-        std::cout << this->value_uint_ << std::endl;
-        std::cout << (int)this->value_char_ << std::endl;
-        std::cout << (int)this->value_uchar_ << std::endl;
-        std::cout << this->value_float_ << std::endl;
-        std::cout << this->value_double_ << std::endl;
-        std::cout << this->value_bool_ << std::endl;
-        std::cout << this->value_string_ << std::endl;
-        std::cout << this->value_constchar_ << std::endl;
-        std::cout << this->value_vector2_ << std::endl;
-        std::cout << this->value_vector3_ << std::endl;
-        std::cout << this->value_colourvalue_ << std::endl;
+        std::cout << "int:         " << this->value_int_ << std::endl;
+        std::cout << "uint:        " << this->value_uint_ << std::endl;
+        std::cout << "char:        " << (int)this->value_char_ << std::endl;
+        std::cout << "uchar:       " << (int)this->value_uchar_ << std::endl;
+        std::cout << "float:       " << this->value_float_ << std::endl;
+        std::cout << "double:      " << this->value_double_ << std::endl;
+        std::cout << "bool:        " << this->value_bool_ << std::endl;
+        std::cout << "string:      " << this->value_string_ << std::endl;
+        std::cout << "constchar:   " << this->value_constchar_ << std::endl;
+        std::cout << "vector2:     " << this->value_vector2_ << std::endl;
+        std::cout << "vector3:     " << this->value_vector3_ << std::endl;
+        std::cout << "colourvalue: " << this->value_colourvalue_ << std::endl;
     }
 
Index: code/trunk/src/orxonox/objects/test3.h
===================================================================
--- code/trunk/src/orxonox/objects/test3.h	(revision 790)
+++ code/trunk/src/orxonox/objects/test3.h	(revision 871)
@@ -3,4 +3,5 @@
 
 #include "core/BaseObject.h"
+#include "util/Math.h"
 
 namespace orxonox
Index: code/trunk/src/orxonox/objects/weapon/AmmunitionDump.cc
===================================================================
--- code/trunk/src/orxonox/objects/weapon/AmmunitionDump.cc	(revision 790)
+++ code/trunk/src/orxonox/objects/weapon/AmmunitionDump.cc	(revision 871)
@@ -31,4 +31,5 @@
 #include "BulletManager.h"
 #include "util/tinyxml/tinyxml.h"
+#include "core/CoreIncludes.h"
 
 #include "AmmunitionDump.h"
Index: code/trunk/src/orxonox/objects/weapon/AmmunitionDump.h
===================================================================
--- code/trunk/src/orxonox/objects/weapon/AmmunitionDump.h	(revision 790)
+++ code/trunk/src/orxonox/objects/weapon/AmmunitionDump.h	(revision 871)
@@ -37,5 +37,4 @@
 
 #include "network/Synchronisable.h"
-//#include "../core/CoreIncludes.h"
 #include "core/BaseObject.h"
 
@@ -66,5 +65,4 @@
     int *capacity_;
   };
-  ExportClass(AmmunitionDump, Orxonox);
 }
 
Index: code/trunk/src/orxonox/objects/weapon/BarrelGun.cc
===================================================================
--- code/trunk/src/orxonox/objects/weapon/BarrelGun.cc	(revision 790)
+++ code/trunk/src/orxonox/objects/weapon/BarrelGun.cc	(revision 871)
@@ -38,4 +38,5 @@
 #include "AmmunitionDump.h"
 #include "BaseWeapon.h"
+#include "core/CoreIncludes.h"
 
 #include "BarrelGun.h"
Index: code/trunk/src/orxonox/objects/weapon/BarrelGun.h
===================================================================
--- code/trunk/src/orxonox/objects/weapon/BarrelGun.h	(revision 790)
+++ code/trunk/src/orxonox/objects/weapon/BarrelGun.h	(revision 871)
@@ -60,5 +60,4 @@
 
   };
-  ExportClass(BarrelGun, Orxonox);
 }
 
Index: code/trunk/src/orxonox/objects/weapon/BaseWeapon.cc
===================================================================
--- code/trunk/src/orxonox/objects/weapon/BaseWeapon.cc	(revision 790)
+++ code/trunk/src/orxonox/objects/weapon/BaseWeapon.cc	(revision 871)
@@ -38,4 +38,5 @@
 #include "BulletManager.h"
 #include "AmmunitionDump.h"
+#include "core/CoreIncludes.h"
 
 #include "BaseWeapon.h"
Index: code/trunk/src/orxonox/objects/weapon/BaseWeapon.h
===================================================================
--- code/trunk/src/orxonox/objects/weapon/BaseWeapon.h	(revision 790)
+++ code/trunk/src/orxonox/objects/weapon/BaseWeapon.h	(revision 871)
@@ -122,5 +122,4 @@
 
   };
-  ExportAbstractClass(BaseWeapon, Orxonox);
 }
 
Index: code/trunk/src/orxonox/objects/weapon/Bullet.cc
===================================================================
--- code/trunk/src/orxonox/objects/weapon/Bullet.cc	(revision 790)
+++ code/trunk/src/orxonox/objects/weapon/Bullet.cc	(revision 871)
@@ -27,4 +27,5 @@
 
 #include "OrxonoxStableHeaders.h"
+#include "core/CoreIncludes.h"
 
 #include "Bullet.h"
Index: code/trunk/src/orxonox/objects/weapon/Bullet.h
===================================================================
--- code/trunk/src/orxonox/objects/weapon/Bullet.h	(revision 790)
+++ code/trunk/src/orxonox/objects/weapon/Bullet.h	(revision 871)
@@ -47,5 +47,4 @@
     inline virtual void loadParams(TiXmlElement* xmlElem) { Model::loadParams(xmlElem); };
  };
-  ExportClass(Bullet, Orxonox);
 }
 
Index: code/trunk/src/orxonox/objects/weapon/BulletManager.cc
===================================================================
--- code/trunk/src/orxonox/objects/weapon/BulletManager.cc	(revision 790)
+++ code/trunk/src/orxonox/objects/weapon/BulletManager.cc	(revision 871)
@@ -30,4 +30,5 @@
 #include "BulletManager.h"
 #include "Bullet.h"
+#include "core/CoreIncludes.h"
 
 
Index: code/trunk/src/orxonox/objects/weapon/BulletManager.h
===================================================================
--- code/trunk/src/orxonox/objects/weapon/BulletManager.h	(revision 790)
+++ code/trunk/src/orxonox/objects/weapon/BulletManager.h	(revision 871)
@@ -38,5 +38,4 @@
 #include "network/Synchronisable.h"
 #include "util/tinyxml/tinyxml.h"
-#include "../../core/CoreIncludes.h"
 #include "core/BaseObject.h"
 #include "../Tickable.h"
@@ -67,5 +66,4 @@
 	  int bulletsIndex_;
   };
-  ExportClass(BulletManager, Orxonox);
 }
 
