Index: /code/branches/core/bin/levels/sample.oxw
===================================================================
--- /code/branches/core/bin/levels/sample.oxw	(revision 852)
+++ /code/branches/core/bin/levels/sample.oxw	(revision 853)
@@ -35,7 +35,7 @@
 <NPC position="100,0,400" scale="1" mesh="razor.mesh"/>
 
-<Model name="starship" position="200,0,500" scale="10" mesh="starship.mesh" yaw="-90" pitch="-90" />
+<Model name="starship" position="(200,0,500)" scale="10" mesh="starship.mesh" yaw="-90" pitch="-90" />
 <Model name="drone" position="-200,0,500" scale="10" mesh="drone.mesh" yaw="-90" pitch="-90" />
-
+<!--
 <Model position="-200,1000,500" scale="10" mesh="hoover_body.mesh" yaw="-90" pitch="-90" />
 <Model position="-200,1000,500" scale="10" mesh="hoover_gear0.mesh" yaw="-90" pitch="-90" />
@@ -48,5 +48,5 @@
 <Model position="12893,-1583,-17939" scale="48" mesh="ast1.mesh" rotationAxis="0.0597998,0.923364,0" rotationRate="36" />
 <Model position="-2107,259,-19814" scale="29" mesh="ast4.mesh" rotationAxis="0.298639,0.96907,0" rotationRate="32" />
-
+-->
 <!-- Unused at the moment -->
 <!--  <SpaceshipSteeringObject node="OgreHeadNode" forward="500" rotateupdown="200" rotaterightleft="200" looprightleft="200" /> -->
Index: /code/branches/core/src/orxonox/core/BaseObject.cc
===================================================================
--- /code/branches/core/src/orxonox/core/BaseObject.cc	(revision 852)
+++ /code/branches/core/src/orxonox/core/BaseObject.cc	(revision 853)
@@ -79,6 +79,7 @@
     Element& BaseObject::XMLPort(Element& xmlelement, bool loading)
     {
+        std::cout << "1_1: " << this->getName() << std::endl;
         XMLPortParam(BaseObject, "name", setName, getName, xmlelement, loading);
-
+std::cout << "1_2: " << this->getName() << std::endl;
         return xmlelement;
     }
Index: /code/branches/core/src/orxonox/core/XMLPort.h
===================================================================
--- /code/branches/core/src/orxonox/core/XMLPort.h	(revision 852)
+++ /code/branches/core/src/orxonox/core/XMLPort.h	(revision 853)
@@ -48,4 +48,12 @@
     xmlcontainer##loadfunction##savefunction->port(this, xmlelement, loading)
 
+#define XMLPortParamLoadOnly(classname, paramname, loadfunction, xmlelement, loading) \
+    orxonox::XMLPortClassParamContainer<classname>* xmlcontainer##loadfunction##savefunction = (orxonox::XMLPortClassParamContainer<classname>*)(this->getIdentifier()->getXMLPortParamContainer(paramname)); \
+    if (!xmlcontainer##loadfunction##savefunction) \
+    { \
+        xmlcontainer##loadfunction##savefunction = new orxonox::XMLPortClassParamContainer<classname>(this->getIdentifier()->getName(), std::string(paramname), createFunctor(&classname::loadfunction), 0); \
+        this->getIdentifier()->addXMLPortParamContainer(paramname, xmlcontainer##loadfunction##savefunction); \
+    } \
+    xmlcontainer##loadfunction##savefunction->port(this, xmlelement, loading)
 
 namespace orxonox
@@ -100,18 +108,31 @@
                 if (loading)
                 {
+std::cout << "3_1: load param " << this->paramname_ << std::endl;
                     std::string attribute = xmlelement.GetAttribute(this->paramname_);
+std::cout << "3_2: attribute " << attribute << std::endl;
                     if (attribute.size() > 0)
                     {
                         SubString tokens(attribute, ",", SubString::WhiteSpaces, false, '\\', '"', '(', ')', '\0');
+std::cout << "3_3: tokens: " << tokens.size() << " params: " << this->loadfunction_->getParamCount() << std::endl;
                         if ((unsigned int)tokens.size() >= (unsigned int)this->loadfunction_->getParamCount())
                         {
-                            MultiTypeMath param1, param2, param3, param4, param5;
-                            if (tokens.size() >= 1) param1 = tokens[0];
-                            if (tokens.size() >= 2) param1 = tokens[1];
-                            if (tokens.size() >= 3) param1 = tokens[2];
-                            if (tokens.size() >= 4) param1 = tokens[3];
-                            if (tokens.size() >= 5) param1 = tokens[4];
+                            if (this->loadfunction_->getParamCount() == 1)
+                            {
+std::cout << "3_4 start: load with whole attribute as input" << std::endl;
+                                (*this->loadfunction_)(object, MultiTypeMath(attribute));
+std::cout << "3_5 end" << std::endl;
+                            }
+                            else
+                            {
+std::cout << "3_4: load with tokens as input" << std::endl;
+                                MultiTypeMath param1, param2, param3, param4, param5;
+                                if (tokens.size() >= 1) param1 = tokens[0];
+                                if (tokens.size() >= 2) param1 = tokens[1];
+                                if (tokens.size() >= 3) param1 = tokens[2];
+                                if (tokens.size() >= 4) param1 = tokens[3];
+                                if (tokens.size() >= 5) param1 = tokens[4];
 
-                            (*this->loadfunction_)(object, param1, param2, param3, param4, param5);
+                                (*this->loadfunction_)(object, param1, param2, param3, param4, param5);
+                            }
                         }
                         else
@@ -123,5 +144,8 @@
                 else
                 {
-//                    xmlelement.SetAttribute(this->paramname_, "...");
+                    if (this->savefunction_)
+                    {
+//                        xmlelement.SetAttribute(this->paramname_, "...");
+                    }
                 }
 
Index: /code/branches/core/src/orxonox/objects/WorldEntity.cc
===================================================================
--- /code/branches/core/src/orxonox/objects/WorldEntity.cc	(revision 852)
+++ /code/branches/core/src/orxonox/objects/WorldEntity.cc	(revision 853)
@@ -172,8 +172,8 @@
         XMLPortParam(WorldEntity, "position", setPosition, getPosition, xmlelement, loading);
 //        XMLPortParam(WorldEntity, "direction", setDirection, getDirection, xmlelement, loading);
-//        XMLPortParam(WorldEntity, "yaw", yaw, getYaw, xmlelement, loading);
-//        XMLPortParam(WorldEntity, "pitch", pitch, getPitch, xmlelement, loading);
-//        XMLPortParam(WorldEntity, "roll", roll, getRoll, xmlelement, loading);
-        XMLPortParam(WorldEntity, "scale", setScale, getScale, xmlelement, loading);
+        XMLPortParamLoadOnly(WorldEntity, "yaw", setYaw, xmlelement, loading);
+        XMLPortParamLoadOnly(WorldEntity, "pitch", setPitch, xmlelement, loading);
+        XMLPortParamLoadOnly(WorldEntity, "roll", setRoll, xmlelement, loading);
+        XMLPortParam(WorldEntity, "scale", setTotalScale, getScale, xmlelement, loading);
         XMLPortParam(WorldEntity, "rotationAxis", setRotationAxis, getRotationAxis, xmlelement, loading);
         XMLPortParam(WorldEntity, "rotationRate", setRotationRate, getRotationRate, xmlelement, loading);
Index: /code/branches/core/src/orxonox/objects/WorldEntity.h
===================================================================
--- /code/branches/core/src/orxonox/objects/WorldEntity.h	(revision 852)
+++ /code/branches/core/src/orxonox/objects/WorldEntity.h	(revision 853)
@@ -57,4 +57,11 @@
                 { this->node_->roll(angle, relativeTo); }
 
+            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 const Ogre::Quaternion& getOrientation()
               { return this->node_->getOrientation(); }
@@ -75,4 +82,6 @@
               { 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
Index: /code/branches/core/src/util/Convert.h
===================================================================
--- /code/branches/core/src/util/Convert.h	(revision 852)
+++ /code/branches/core/src/util/Convert.h	(revision 853)
@@ -397,5 +397,5 @@
     bool operator()(orxonox::Vector2* output, const std::string& input) const
     {
-      SubString tokens(input, ",", SubString::WhiteSpaces, false, '\\', '"', '(', ')', '\0');
+      SubString tokens(input, ",", SubString::WhiteSpaces, false, '\\', '"', '\0', '\0', '\0');
 
       if (tokens.size() >= 2)
@@ -420,5 +420,5 @@
     bool operator()(orxonox::Vector3* output, const std::string& input) const
     {
-      SubString tokens(input, ",", SubString::WhiteSpaces, false, '\\', '"', '(', ')', '\0');
+      SubString tokens(input, ",", SubString::WhiteSpaces, false, '\\', '"', '\0', '\0', '\0');
 
       if (tokens.size() >= 3)
@@ -445,5 +445,5 @@
     bool operator()(orxonox::Vector4* output, const std::string& input) const
     {
-      SubString tokens(input, ",", SubString::WhiteSpaces, false, '\\', '"', '(', ')', '\0');
+      SubString tokens(input, ",", SubString::WhiteSpaces, false, '\\', '"', '\0', '\0', '\0');
 
       if (tokens.size() >= 4)
@@ -472,5 +472,5 @@
     bool operator()(orxonox::Quaternion* output, const std::string& input) const
     {
-      SubString tokens(input, ",", SubString::WhiteSpaces, false, '\\', '"', '(', ')', '\0');
+      SubString tokens(input, ",", SubString::WhiteSpaces, false, '\\', '"', '\0', '\0', '\0');
 
       if (tokens.size() >= 4)
@@ -499,5 +499,5 @@
     bool operator()(orxonox::ColourValue* output, const std::string& input) const
     {
-      SubString tokens(input, ",", SubString::WhiteSpaces, false, '\\', '"', '(', ')', '\0');
+      SubString tokens(input, ",", SubString::WhiteSpaces, false, '\\', '"', '\0', '\0', '\0');
 
       if (tokens.size() >= 4)
Index: /code/branches/core/src/util/MultiTypeMath.cc
===================================================================
--- /code/branches/core/src/util/MultiTypeMath.cc	(revision 852)
+++ /code/branches/core/src/util/MultiTypeMath.cc	(revision 853)
@@ -44,17 +44,4 @@
     else if (type == MT_degree)
         this->degree_ = orxonox::Degree(0);
-}
-
-MultiTypeMath::MultiTypeMath(const MultiTypeMath& mtm) : MultiTypeString(mtm)
-{
-    this->type_ = mtm.type_;
-    this->value_ = mtm.value_;
-}
-
-MultiTypeMath& MultiTypeMath::operator=(const MultiTypeMath& mtm)
-{
-    this->type_ = mtm.type_;
-    this->value_ = mtm.value_;
-    return *this;
 }
 
@@ -103,36 +90,62 @@
 MultiTypeMath::operator orxonox::Vector2() const
 {
-    return (this->type_ == MT_vector2) ? this->vector2_ : ConvertValueAndReturn<MultiTypePrimitive, orxonox::Vector2>(*this);
+    return (this->type_ == MT_vector2) ? this->vector2_ : ConvertValueAndReturn<MultiTypeMath, orxonox::Vector2>(*this);
 }
 
 MultiTypeMath::operator orxonox::Vector3() const
 {
-    return (this->type_ == MT_vector3) ? this->vector3_ : ConvertValueAndReturn<MultiTypePrimitive, orxonox::Vector3>(*this);
+std::cout << "4_2: Convert MultiTypeMath to Vector3:" << std::endl;
+std::cout << "     MultiTypeMath has type " << this->getType() << std::endl;
+std::cout << MT_vector3 << std::endl;
+std::cout << MT_string << std::endl;
+std::cout << MT_vector2 << std::endl;
+std::cout << MT_int << std::endl;
+std::cout << MT_uint << std::endl;
+std::cout << MT_null << std::endl;
+if (this->type_ == MT_vector3)
+{
+    std::cout << "     MultiTypeMath contains already a Vector3" << std::endl;
+    std::cout << "     Returnvalue is " << this->vector3_ << std::endl;
+}
+else
+{
+    std::cout << "     MultiTypeMath doesn't contain a Vector3" << std::endl;
+    std::cout << "     Returnvalue is " << ConvertValueAndReturn<MultiTypeMath, orxonox::Vector3>(*this) << std::endl;
+    std::cout << "     Returnvalue was " << ConvertValueAndReturn<MultiTypePrimitive, orxonox::Vector3>(*this) << std::endl;
+}
+    return (this->type_ == MT_vector3) ? this->vector3_ : ConvertValueAndReturn<MultiTypeMath, orxonox::Vector3>(*this);
 }
 
 MultiTypeMath::operator orxonox::Quaternion() const
 {
-    return (this->type_ == MT_quaternion) ? this->quaternion_ : ConvertValueAndReturn<MultiTypePrimitive, orxonox::Quaternion>(*this);
+    return (this->type_ == MT_quaternion) ? this->quaternion_ : ConvertValueAndReturn<MultiTypeMath, orxonox::Quaternion>(*this);
 }
 
 MultiTypeMath::operator orxonox::ColourValue() const
 {
-    return (this->type_ == MT_colourvalue) ? this->colourvalue_ : ConvertValueAndReturn<MultiTypePrimitive, orxonox::ColourValue>(*this);
+    return (this->type_ == MT_colourvalue) ? this->colourvalue_ : ConvertValueAndReturn<MultiTypeMath, orxonox::ColourValue>(*this);
 }
 
 MultiTypeMath::operator orxonox::Radian() const
 {
-    return (this->type_ == MT_radian) ? this->radian_ : ConvertValueAndReturn<MultiTypePrimitive, orxonox::Radian>(*this);
+    return (this->type_ == MT_radian) ? this->radian_ : ConvertValueAndReturn<MultiTypeMath, orxonox::Radian>(*this);
 }
 
 MultiTypeMath::operator orxonox::Degree() const
 {
-    return (this->type_ == MT_degree) ? this->degree_ : ConvertValueAndReturn<MultiTypePrimitive, orxonox::Degree>(*this);
+    return (this->type_ == MT_degree) ? this->degree_ : ConvertValueAndReturn<MultiTypeMath, orxonox::Degree>(*this);
 }
 
 void MultiTypeMath::setValue(const MultiTypeMath& mtm)
 {
-    this->type_ = mtm.type_;
-    this->value_ = mtm.value_;
+    std::cout << "4_3: setValue in MultiTypeMath with other Multitype as parameter: " << mtm << std::endl;
+
+    MultiTypeString::setValue(mtm);
+    this->vector2_ = mtm.vector2_;
+    this->vector3_ = mtm.vector3_;
+    this->quaternion_ = mtm.quaternion_;
+    this->colourvalue_ = mtm.colourvalue_;
+    this->radian_ = mtm.radian_;
+    this->degree_ = mtm.degree_;
 }
 
Index: /code/branches/core/src/util/MultiTypeMath.h
===================================================================
--- /code/branches/core/src/util/MultiTypeMath.h	(revision 852)
+++ /code/branches/core/src/util/MultiTypeMath.h	(revision 853)
@@ -59,5 +59,5 @@
         inline MultiTypeMath(const orxonox::Radian&      value) { this->setValue(value); }
         inline MultiTypeMath(const orxonox::Degree&      value) { this->setValue(value); }
-        MultiTypeMath(const MultiTypeMath& mtm);
+        inline MultiTypeMath(const MultiTypeMath& mtm)          { this->setValue(mtm);   }
 
         using MultiTypeString::operator=;
@@ -68,5 +68,5 @@
         inline MultiTypeMath& operator=(const orxonox::Radian&      value) { this->setValue(value); return *this; }
         inline MultiTypeMath& operator=(const orxonox::Degree&      value) { this->setValue(value); return *this; }
-        MultiTypeMath& operator=(const MultiTypeMath& mtm);
+        inline MultiTypeMath& operator=(const MultiTypeMath& mtm)          { this->setValue(mtm);   return *this; }
 
         using MultiTypeString::operator==;
@@ -97,5 +97,5 @@
         using MultiTypeString::setValue;
         inline void setValue(const orxonox::Vector2&     value) { this->type_ = MT_vector2;     this->vector2_     = value; }
-        inline void setValue(const orxonox::Vector3&     value) { this->type_ = MT_vector3;     this->vector3_     = value; }
+        inline void setValue(const orxonox::Vector3&     value) { std::cout << "4_4: setValue Vector3: " << value << std::endl; this->type_ = MT_vector3;     this->vector3_     = value; }
         inline void setValue(const orxonox::ColourValue& value) { this->type_ = MT_colourvalue; this->colourvalue_ = value; }
         inline void setValue(const orxonox::Quaternion&  value) { this->type_ = MT_quaternion;  this->quaternion_  = value; }
Index: /code/branches/core/src/util/MultiTypePrimitive.cc
===================================================================
--- /code/branches/core/src/util/MultiTypePrimitive.cc	(revision 852)
+++ /code/branches/core/src/util/MultiTypePrimitive.cc	(revision 853)
@@ -32,4 +32,5 @@
 MultiTypePrimitive::MultiTypePrimitive(MultiType type)
 {
+std::cout << "4_5: Created MultiTypePrimitive with type " << type << std::endl;
     this->type_ = type;
 
@@ -60,17 +61,4 @@
     else
         this->value_.int_ = 0;
-}
-
-MultiTypePrimitive::MultiTypePrimitive(const MultiTypePrimitive& mtp)
-{
-    this->type_ = mtp.type_;
-    this->value_ = mtp.value_;
-}
-
-MultiTypePrimitive& MultiTypePrimitive::operator=(const MultiTypePrimitive& mtp)
-{
-    this->type_ = mtp.type_;
-    this->value_ = mtp.value_;
-    return *this;
 }
 
@@ -203,4 +191,5 @@
 void MultiTypePrimitive::setValue(const MultiTypePrimitive& mtp)
 {
+    std::cout << "4_3: setValue in MultiTypePrimitive with other Multitype as parameter: " << mtp << std::endl;
     this->type_ = mtp.type_;
     this->value_ = mtp.value_;
Index: /code/branches/core/src/util/MultiTypePrimitive.h
===================================================================
--- /code/branches/core/src/util/MultiTypePrimitive.h	(revision 852)
+++ /code/branches/core/src/util/MultiTypePrimitive.h	(revision 853)
@@ -52,5 +52,5 @@
         inline MultiTypePrimitive(long double    value) { this->setValue(value); }
         inline MultiTypePrimitive(bool           value) { this->setValue(value); }
-        MultiTypePrimitive(const MultiTypePrimitive& mtp);
+        inline MultiTypePrimitive(const MultiTypePrimitive& mtp) { this->setValue(mtp); }
 
         inline MultiTypePrimitive& operator=(MultiType      value) { this->type_ = MT_null; return *this; }
@@ -67,5 +67,5 @@
         inline MultiTypePrimitive& operator=(long double    value) { this->setValue(value); return *this; }
         inline MultiTypePrimitive& operator=(bool           value) { this->setValue(value); return *this; }
-        MultiTypePrimitive& operator=(const MultiTypePrimitive& mtp);
+        inline MultiTypePrimitive& operator=(const MultiTypePrimitive& mtp) { this->setValue(mtp); return *this; }
 
         inline bool operator==(int            value) const { return (this->value_.int_        == value); }
Index: /code/branches/core/src/util/MultiTypeString.cc
===================================================================
--- /code/branches/core/src/util/MultiTypeString.cc	(revision 852)
+++ /code/branches/core/src/util/MultiTypeString.cc	(revision 853)
@@ -38,17 +38,4 @@
 }
 
-MultiTypeString::MultiTypeString(const MultiTypeString& mts) : MultiTypePrimitive(mts)
-{
-    this->type_ = mts.type_;
-    this->value_ = mts.value_;
-}
-
-MultiTypeString& MultiTypeString::operator=(const MultiTypeString& mts)
-{
-    this->type_ = mts.type_;
-    this->value_ = mts.value_;
-    return *this;
-}
-
 bool MultiTypeString::operator==(const MultiTypeString& mts) const
 {
@@ -79,16 +66,16 @@
 MultiTypeString::operator std::string() const
 {
-    return (this->type_ == MT_string) ? this->string_ : ConvertValueAndReturn<MultiTypePrimitive, std::string>(*this);
+    return (this->type_ == MT_string) ? this->string_ : ConvertValueAndReturn<MultiTypeString, std::string>(*this);
 }
 
 MultiTypeString::operator const char*() const
 {
-    return (this->type_ == MT_constchar) ? this->string_.c_str() : ConvertValueAndReturn<MultiTypePrimitive, const char*>(*this);
+    return ((this->type_ == MT_constchar) ? this->string_ : ConvertValueAndReturn<MultiTypeString, std::string>(*this)).c_str();
 }
 
 void MultiTypeString::setValue(const MultiTypeString& mts)
 {
-    this->type_ = mts.type_;
-    this->value_ = mts.value_;
+    MultiTypePrimitive::setValue(mts);
+    this->string_ = mts.string_;
 }
 
Index: /code/branches/core/src/util/MultiTypeString.h
===================================================================
--- /code/branches/core/src/util/MultiTypeString.h	(revision 852)
+++ /code/branches/core/src/util/MultiTypeString.h	(revision 853)
@@ -31,5 +31,5 @@
 
 #include <string>
-
+#include <iostream>
 #include "UtilPrereqs.h"
 
@@ -52,22 +52,22 @@
         inline MultiTypeString(long double    value) : MultiTypePrimitive(value) {}
         inline MultiTypeString(bool           value) : MultiTypePrimitive(value) {}
-        inline MultiTypeString(const char*        value) { this->setValue(value); }
-        inline MultiTypeString(const std::string& value) { this->setValue(value); }
-        MultiTypeString(const MultiTypeString& mtp);
+        inline MultiTypeString(const char*        value)   { this->setValue(value); }
+        inline MultiTypeString(const std::string& value)   { this->setValue(value); std::cout << "4_1: Created MultiTypeString with value " << value << " and type " << this->getType() << std::endl; }
+        inline MultiTypeString(const MultiTypeString& mts) { this->setValue(mts);   }
 
         using MultiTypePrimitive::operator=;
-        inline MultiTypeString& operator=(const char*        value) { this->setValue(value); return *this; }
-        inline MultiTypeString& operator=(const std::string& value) { this->setValue(value); return *this; }
-        MultiTypeString& operator=(const MultiTypeString& mtp);
+        inline MultiTypeString& operator=(const char*        value)   { this->setValue(value); return *this; }
+        inline MultiTypeString& operator=(const std::string& value)   { this->setValue(value); return *this; }
+        inline MultiTypeString& operator=(const MultiTypeString& mts) { this->setValue(mts);   return *this; }
 
         using MultiTypePrimitive::operator==;
         inline bool operator==(const char*        value) const { return (this->string_ == std::string(value)); }
         inline bool operator==(const std::string& value) const { return (this->string_ == value);              }
-        bool operator==(const MultiTypeString& mtp) const;
+        bool operator==(const MultiTypeString& mts) const;
 
         using MultiTypePrimitive::operator!=;
         inline bool operator!=(const char*        value) const { return (this->string_ != std::string(value)); }
         inline bool operator!=(const std::string& value) const { return (this->string_ != value);              }
-        bool operator!=(const MultiTypeString& mtp) const;
+        bool operator!=(const MultiTypeString& mts) const;
 
         operator std::string() const;
@@ -77,5 +77,5 @@
         inline void setValue(const char*        value) { this->type_ = MT_string; this->string_ = std::string(value); }
         inline void setValue(const std::string& value) { this->type_ = MT_string; this->string_ = value;              }
-        void setValue(const MultiTypeString& mtp);
+        void setValue(const MultiTypeString& mts);
 
         inline const std::string getString() const { return this->string_;         }
