Index: /code/branches/core/bin/levels/sample.oxw
===================================================================
--- /code/branches/core/bin/levels/sample.oxw	(revision 868)
+++ /code/branches/core/bin/levels/sample.oxw	(revision 869)
@@ -1,31 +1,7 @@
-<description>
-  This is an orxonox sample level.
-</description>
-
-<loading>
-  <background color="000000" image="textures/load_screens/ambush.png" />
-  <bar top="200" left="50" width="300" height="20" image="textures/load_screens/ambush-loadbar.png" />
-</loading>
-
-<!--
-<ambient>
-  <ogg src="allgorythm-lift_up" />
-  <ogg src="allgorythm-resonance_blaster" />
-  <ogg src="luke_grey_-_hypermode" />
-  <ogg src="task_horizon_-_menu1" />
-  <ogg src="tha_silent_partner_-_void" />
-</ambient>
--->
-<!-- Keep a minimum distance of >100 to the object, otherwise the camara thinks it's in the object -->
-<!-- the value has to negative, as we want the camara behind the object -->
-<!--
-<Camera name="Camera" pos="0,50,-150" lookat="0,20,0" node="2OgreHeadNode" />
-<SpaceShip camera="true" position="0,0,0" scale="10" yaw="-90" pitch="-90" mesh="assf3.mesh"  forward="250" rotateupdown="100" rotaterightleft="100" looprightleft="100" />
--->
 <Ambient colourvalue="1,1,1" />
 <Skybox src="Orxonox/StarSkyBox" />
 
-<!--Fighter camera="true" position="0,0,0" scale="10" yaw="-90" pitch="-90" mesh="assf3.mesh"  forward="500" rotateupdown="200" rotaterightleft="200" looprightleft="200" /-->
-<SpaceShip camera="true" position="0,0,0" scale="10" yaw="-90" pitch="-90" mesh="assf5.mesh" maxSpeed="500" maxSideAndBackSpeed="50" maxRotation="1.0" transAcc="200" rotAcc="3.0" transDamp="75" rotDamp="1.0" />
+<!--Fighter camera="true" position="0,0,0" scale="10" yawpitchroll="-90,-90,0" mesh="assf3.mesh"  forward="500" rotateupdown="200" rotaterightleft="200" looprightleft="200" /-->
+<SpaceShip camera="true" position="0,0,0" scale="10" yawpitchroll="-90,-90,0" mesh="assf5.mesh" maxSpeed="500" maxSideAndBackSpeed="50" maxRotation="1.0" transAcc="200" rotAcc="3.0" transDamp="75" rotDamp="1.0" />
 
 <NPC position="0,100,400" scale="1" mesh="razor.mesh"/>
@@ -35,20 +11,20 @@
 <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="drone" position="-200,0,500" scale="10" mesh="drone.mesh" yaw="-90" pitch="-90">
+<Model name="starship" position="200,0,500" scale="10" mesh="starship.mesh" yawpitchroll="-90,-90,0" />
+<Model name="drone" position="-200,0,500" scale="10" mesh="drone.mesh" yawpitchroll="-90,-90,0">
   <attached>
-    <Model name="drone2" position="200,-100,-500" scale="10" mesh="drone.mesh" yaw="-90" pitch="-90">
+    <Model name="drone2" position="200,-100,-500" scale="10" mesh="drone.mesh" yawpitchroll="-90,-90,0">
       <attached>
-        <Model name="starship2" position="(500,200,-500)" scale="10" mesh="starship.mesh" yaw="-90" pitch="-90" />
+        <Model name="starship2" position="500,200,-500" scale="10" mesh="starship.mesh" yawpitchroll="-90,-90,0" />
       </attached>
     </Model>
   </attached>
 </Model>
-<!--
-<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" />
-<Model position="-200,1000,500" scale="10" mesh="hoover_gear1.mesh" yaw="-90" pitch="-90" />
-<Model position="-200,1000,500" scale="10" mesh="hoover_gear2.mesh" yaw="-90" pitch="-90" />
-<Model position="-200,1000,500" scale="10" mesh="hoover_turbine.mesh" yaw="-90" pitch="-90" />
+
+<Model position="-200,1000,500" scale="10" mesh="hoover_body.mesh" yawpitchroll="-90,-90,0" />
+<Model position="-200,1000,500" scale="10" mesh="hoover_gear0.mesh" yawpitchroll="-90,-90,0" />
+<Model position="-200,1000,500" scale="10" mesh="hoover_gear1.mesh" yawpitchroll="-90,-90,0" />
+<Model position="-200,1000,500" scale="10" mesh="hoover_gear2.mesh" yawpitchroll="-90,-90,0" />
+<Model position="-200,1000,500" scale="10" mesh="hoover_turbine.mesh" yawpitchroll="-90,-90,0" />
 
 
@@ -56,8 +32,227 @@
 <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" /> -->
-<!--
-<script file="intro.lua" />
--->
+
+    <Model position="-9583,-2284,-19904" scale="33" mesh="ast5.mesh" rotationAxis="0,0.675659,0.0196445" rotationRate="44" />
+    <Model position="-19597,-15494,3163" scale="37" mesh="ast5.mesh" rotationAxis="0.477996,0,0.048639" rotationRate="23" />
+    <Model position="-182,6442,-4496" scale="25" mesh="ast5.mesh" rotationAxis="0.142225,0,0.154393" rotationRate="37" />
+    <Model position="1004,-19639,-13744" scale="21" mesh="ast1.mesh" rotationAxis="0.974865,0.299775,0" rotationRate="29" />
+    <Model position="-13204,-10191,-1555" scale="31" mesh="ast1.mesh" rotationAxis="0.41675,0,0.385001" rotationRate="42" />
+    <Model position="-1843,12203,2346" scale="81" mesh="ast5.mesh" rotationAxis="0.221171,0,0.331917" rotationRate="41" />
+    <Model position="-1560,-1443,-17416" scale="68" mesh="ast1.mesh" rotationAxis="0.653787,0.00935241,0" rotationRate="44" />
+    <Model position="-7723,18661,3363" scale="94" mesh="ast5.mesh" rotationAxis="0.450345,0,0.417313" rotationRate="29" />
+    <Model position="-8122,5764,16342" scale="45" mesh="ast4.mesh" rotationAxis="0.268558,0,0.089161" rotationRate="30" />
+    <Model position="17575,-14054,-16710" scale="80" mesh="ast1.mesh" rotationAxis="0,0.615899,0.571064" rotationRate="18" />
+    <Model position="-15304,-17381,4149" scale="32" mesh="ast6.mesh" rotationAxis="0.015051,0,0.764924" rotationRate="10" />
+    <Model position="5587,2382,-13876" scale="49" mesh="ast4.mesh" rotationAxis="0.501173,0.208012,0" rotationRate="27" />
+    <Model position="12167,-12466,-3364" scale="29" mesh="ast3.mesh" rotationAxis="0.897424,0.896971,0" rotationRate="21" />
+    <Model position="3157,12173,4070" scale="78" mesh="ast2.mesh" rotationAxis="0.496178,0.760223,0" rotationRate="36" />
+    <Model position="-13948,-6497,18368" scale="96" mesh="ast3.mesh" rotationAxis="0,0.0655793,0.17843" rotationRate="47" />
+    <Model position="9304,-16367,-8429" scale="112" mesh="ast3.mesh" rotationAxis="0,0.220054,0.123838" rotationRate="10" />
+    <Model position="-19293,9147,5573" scale="97" mesh="ast6.mesh" rotationAxis="0,0.0590435,0.200379" rotationRate="27" />
+    <Model position="-13022,13902,19960" scale="67" mesh="ast6.mesh" rotationAxis="0,0.637161,0.286825" rotationRate="22" />
+    <Model position="16898,12368,4477" scale="41" mesh="ast3.mesh" rotationAxis="0.962958,0,0.0295571" rotationRate="30" />
+    <Model position="6687,12586,-11721" scale="33" mesh="ast2.mesh" rotationAxis="0.596958,0.326804,0" rotationRate="24" />
+    <Model position="15066,11759,5229" scale="47" mesh="ast5.mesh" rotationAxis="0,0.993547,0.7269" rotationRate="45" />
+    <Model position="7329,-9876,2203" scale="78" mesh="ast4.mesh" rotationAxis="0,0.170628,0.522448" rotationRate="31" />
+    <Model position="-9132,9542,-14753" scale="20" mesh="ast6.mesh" rotationAxis="0.578006,0.738023,0" rotationRate="47" />
+    <Model position="12958,2638,9476" scale="107" mesh="ast2.mesh" rotationAxis="0.815402,0.549519,0" rotationRate="42" />
+    <Model position="3327,-10549,9196" scale="102" mesh="ast3.mesh" rotationAxis="0.403431,0,0.392179" rotationRate="43" />
+    <Model position="-8947,15802,-16153" scale="72" mesh="ast3.mesh" rotationAxis="0,0.863891,0.789231" rotationRate="28" />
+    <Model position="-5340,12944,14528" scale="108" mesh="ast2.mesh" rotationAxis="0.91406,0.865657,0" rotationRate="34" />
+    <Model position="5107,5365,-5004" scale="75" mesh="ast6.mesh" rotationAxis="0,0.663461,0.406224" rotationRate="13" />
+    <Model position="-6998,18403,8238" scale="70" mesh="ast6.mesh" rotationAxis="0.550689,0,0.834949" rotationRate="41" />
+    <Model position="-9089,7495,-15512" scale="59" mesh="ast6.mesh" rotationAxis="0.0784585,0,0.580422" rotationRate="16" />
+    <Model position="-6698,19465,14091" scale="70" mesh="ast5.mesh" rotationAxis="0,0.0536133,0.663091" rotationRate="48" />
+    <Model position="-9943,9390,19361" scale="115" mesh="ast3.mesh" rotationAxis="0.745415,0.302601,0" rotationRate="25" />
+    <Model position="9341,-6947,7223" scale="49" mesh="ast1.mesh" rotationAxis="0.0217983,0.829754,0" rotationRate="40" />
+    <Model position="10259,8970,-7673" scale="70" mesh="ast3.mesh" rotationAxis="0,0.705347,0.0544375" rotationRate="30" />
+    <Model position="4538,-17169,-15829" scale="119" mesh="ast4.mesh" rotationAxis="0.659901,0,0.6408" rotationRate="42" />
+    <Model position="7746,-9746,14917" scale="89" mesh="ast4.mesh" rotationAxis="0.579678,0,0.632015" rotationRate="46" />
+    <Model position="-4550,1554,11166" scale="49" mesh="ast1.mesh" rotationAxis="0.805799,0.905452,0" rotationRate="25" />
+    <Model position="-4571,-14392,14887" scale="20" mesh="ast2.mesh" rotationAxis="0.163796,0.62884,0" rotationRate="38" />
+    <Model position="18390,-19165,-6118" scale="28" mesh="ast2.mesh" rotationAxis="0.386394,0,0.290423" rotationRate="39" />
+    <Model position="-19119,8707,-11377" scale="119" mesh="ast1.mesh" rotationAxis="0.912683,0,0.722097" rotationRate="17" />
+    <Model position="-15827,6956,-3785" scale="32" mesh="ast1.mesh" rotationAxis="0.901503,0,0.548708" rotationRate="29" />
+    <Model position="1956,-13954,18055" scale="59" mesh="ast1.mesh" rotationAxis="0,0.0523992,0.756846" rotationRate="15" />
+    <Model position="2197,-13870,-11528" scale="92" mesh="ast2.mesh" rotationAxis="0.469413,0,0.742143" rotationRate="13" />
+    <Model position="7377,6656,5591" scale="64" mesh="ast6.mesh" rotationAxis="0,0.599119,0.890718" rotationRate="36" />
+    <Model position="16123,8784,-7928" scale="50" mesh="ast6.mesh" rotationAxis="0.648018,0,0.522075" rotationRate="41" />
+    <Model position="-12751,-2191,-11527" scale="94" mesh="ast2.mesh" rotationAxis="0,0.715065,0.332238" rotationRate="36" />
+    <Model position="18020,-16499,18874" scale="31" mesh="ast6.mesh" rotationAxis="0,0.0608362,0.523216" rotationRate="13" />
+    <Model position="-15807,-7678,16780" scale="37" mesh="ast1.mesh" rotationAxis="0,0.658659,0.0366738" rotationRate="18" />
+    <Model position="-17711,-14807,13817" scale="82" mesh="ast6.mesh" rotationAxis="0.16894,0,0.131653" rotationRate="10" />
+    <Model position="-4428,5259,9741" scale="66" mesh="ast6.mesh" rotationAxis="0.424995,0.0971331,0" rotationRate="39" />
+    <Model position="1682,8250,263" scale="34" mesh="ast2.mesh" rotationAxis="0,0.509205,0.22658" rotationRate="35" />
+    <Model position="13624,-5594,12058" scale="61" mesh="ast5.mesh" rotationAxis="0,0.786326,0.21092" rotationRate="41" />
+    <Model position="-5772,8251,15090" scale="89" mesh="ast6.mesh" rotationAxis="0.446662,0,0.039521" rotationRate="46" />
+    <Model position="18732,8386,-17834" scale="115" mesh="ast3.mesh" rotationAxis="0.484641,0.0994628,0" rotationRate="29" />
+    <Model position="-4662,-13023,1337" scale="116" mesh="ast3.mesh" rotationAxis="0.575875,0.380544,0" rotationRate="34" />
+    <Model position="3193,-18575,-13293" scale="55" mesh="ast3.mesh" rotationAxis="0,0.562414,0.669598" rotationRate="23" />
+    <Model position="-18127,15281,-9961" scale="59" mesh="ast5.mesh" rotationAxis="0,0.430401,0.690096" rotationRate="20" />
+    <Model position="-3978,-10245,108" scale="80" mesh="ast4.mesh" rotationAxis="0,0.0821224,0.236512" rotationRate="25" />
+    <Model position="-11319,-12567,5192" scale="109" mesh="ast2.mesh" rotationAxis="0.39942,0,0.537407" rotationRate="24" />
+    <Model position="-4977,-3230,-7025" scale="34" mesh="ast2.mesh" rotationAxis="0,0.464353,0.474219" rotationRate="31" />
+    <Model position="10069,-14931,15176" scale="97" mesh="ast6.mesh" rotationAxis="0.173174,0.520451,0" rotationRate="26" />
+    <Model position="2766,-16062,-10919" scale="78" mesh="ast4.mesh" rotationAxis="0.521386,0,0.717508" rotationRate="36" />
+    <Model position="-9128,12247,2916" scale="67" mesh="ast2.mesh" rotationAxis="0.347868,0.717047,0" rotationRate="28" />
+    <Model position="6440,-16563,-18432" scale="36" mesh="ast5.mesh" rotationAxis="0.265539,0,0.71717" rotationRate="35" />
+    <Model position="12669,-1534,2196" scale="71" mesh="ast2.mesh" rotationAxis="0,0.472099,0.464159" rotationRate="40" />
+    <Model position="172,-18075,11429" scale="108" mesh="ast5.mesh" rotationAxis="0.0320382,0.32207,0" rotationRate="16" />
+    <Model position="2426,8901,-3677" scale="114" mesh="ast5.mesh" rotationAxis="0.778803,0.0691138,0" rotationRate="46" />
+    <Model position="-4576,-13668,14863" scale="40" mesh="ast6.mesh" rotationAxis="0.979052,0.428032,0" rotationRate="30" />
+    <Model position="9222,-15457,4825" scale="24" mesh="ast6.mesh" rotationAxis="0,0.106496,0.409635" rotationRate="38" />
+    <Model position="-3613,-4696,-13838" scale="82" mesh="ast4.mesh" rotationAxis="0.676407,0,0.69673" rotationRate="16" />
+    <Model position="12743,-1674,8050" scale="78" mesh="ast3.mesh" rotationAxis="0.161952,0.389888,0" rotationRate="19" />
+    <Model position="3398,-19196,10512" scale="96" mesh="ast1.mesh" rotationAxis="0,0.799917,0.520012" rotationRate="38" />
+    <Model position="-2837,-9264,-11236" scale="97" mesh="ast4.mesh" rotationAxis="0.892116,0,0.048004" rotationRate="22" />
+    <Model position="13220,-13790,-9710" scale="90" mesh="ast5.mesh" rotationAxis="0,0.931551,0.148539" rotationRate="19" />
+    <Model position="-9560,19189,2493" scale="24" mesh="ast2.mesh" rotationAxis="0.169182,0.962125,0" rotationRate="22" />
+    <Model position="-18545,-13577,5941" scale="92" mesh="ast4.mesh" rotationAxis="0,0.145122,0.499773" rotationRate="24" />
+    <Model position="-12874,-481,7016" scale="89" mesh="ast4.mesh" rotationAxis="0,0.878644,0.744372" rotationRate="31" />
+    <Model position="5290,-11553,-15958" scale="103" mesh="ast4.mesh" rotationAxis="0,0.0858311,0.860834" rotationRate="26" />
+    <Model position="-18189,19019,16471" scale="72" mesh="ast4.mesh" rotationAxis="0,0.206421,0.423981" rotationRate="33" />
+    <Model position="13736,17565,-4338" scale="72" mesh="ast1.mesh" rotationAxis="0.647033,0,0.0993164" rotationRate="26" />
+    <Model position="-11103,-18306,17096" scale="112" mesh="ast6.mesh" rotationAxis="0.938456,0.184833,0" rotationRate="17" />
+    <Model position="16665,322,-13614" scale="57" mesh="ast5.mesh" rotationAxis="0,0.850806,0.942188" rotationRate="30" />
+    <Model position="-13234,-5004,-19934" scale="100" mesh="ast6.mesh" rotationAxis="0.712244,0.214422,0" rotationRate="30" />
+    <Model position="2334,-2954,-17614" scale="50" mesh="ast5.mesh" rotationAxis="0.62725,0,0.646295" rotationRate="22" />
+    <Model position="16214,-12149,-6186" scale="72" mesh="ast1.mesh" rotationAxis="0,0.6434,0.0914027" rotationRate="40" />
+    <Model position="-11746,15630,-12814" scale="92" mesh="ast1.mesh" rotationAxis="0.0516508,0,0.534206" rotationRate="31" />
+    <Model position="19389,-8340,17620" scale="96" mesh="ast5.mesh" rotationAxis="0.806963,0.925497,0" rotationRate="19" />
+    <Model position="12269,18075,5380" scale="103" mesh="ast6.mesh" rotationAxis="0,0.685539,0.0816417" rotationRate="38" />
+    <Model position="16499,13080,-14830" scale="58" mesh="ast3.mesh" rotationAxis="0.776935,0.430662,0" rotationRate="21" />
+    <Model position="14398,-9629,16663" scale="90" mesh="ast2.mesh" rotationAxis="0.405098,0.0716397,0" rotationRate="31" />
+    <Model position="16021,-8497,-11384" scale="73" mesh="ast1.mesh" rotationAxis="0.284874,0.262371,0" rotationRate="22" />
+    <Model position="-12197,19157,-5268" scale="46" mesh="ast6.mesh" rotationAxis="0.301399,0,0.852104" rotationRate="42" />
+    <Model position="3523,-10238,-17036" scale="58" mesh="ast3.mesh" rotationAxis="0.408875,0,0.896493" rotationRate="32" />
+    <Model position="-9942,2328,437" scale="47" mesh="ast6.mesh" rotationAxis="0.391488,0.552897,0" rotationRate="18" />
+    <Model position="-5089,13146,2485" scale="115" mesh="ast3.mesh" rotationAxis="0,0.77605,0.0301674" rotationRate="46" />
+    <Model position="-3325,16428,-42" scale="59" mesh="ast4.mesh" rotationAxis="0.80208,0.306772,0" rotationRate="11" />
+    <Model position="-8399,370,12441" scale="58" mesh="ast4.mesh" rotationAxis="0,0.673135,0.940884" rotationRate="46" />
+    <Model position="12101,13398,-15098" scale="58" mesh="ast2.mesh" rotationAxis="0.168778,0,0.0517661" rotationRate="38" />
+    <Model position="-2875,-11869,11008" scale="55" mesh="ast3.mesh" rotationAxis="0,0.248125,0.642059" rotationRate="40" />
+    <Model position="1690,-9053,14913" scale="52" mesh="ast4.mesh" rotationAxis="0.454649,0.81489,0" rotationRate="23" />
+    <Model position="17507,7536,-8757" scale="29" mesh="ast3.mesh" rotationAxis="0.947894,0,0.283392" rotationRate="41" />
+    <Model position="-1623,-12605,-14277" scale="58" mesh="ast3.mesh" rotationAxis="0,0.253805,0.162647" rotationRate="46" />
+    <Model position="-4045,-535,-14585" scale="88" mesh="ast4.mesh" rotationAxis="0.257327,0,0.894532" rotationRate="24" />
+    <Model position="-9199,715,4150" scale="117" mesh="ast5.mesh" rotationAxis="0.359984,0,0.231855" rotationRate="18" />
+    <Model position="3202,-6145,19403" scale="97" mesh="ast6.mesh" rotationAxis="0,0.470211,0.784929" rotationRate="11" />
+    <Model position="127,-9694,1418" scale="62" mesh="ast1.mesh" rotationAxis="0.0974775,0.108828,0" rotationRate="33" />
+    <Model position="-1033,-8523,14218" scale="89" mesh="ast1.mesh" rotationAxis="0.483568,0,0.581196" rotationRate="14" />
+    <Model position="-28,-1140,7779" scale="47" mesh="ast2.mesh" rotationAxis="0.0572967,0.588805,0" rotationRate="25" />
+    <Model position="-2434,-17785,-6679" scale="104" mesh="ast2.mesh" rotationAxis="0,0.458048,0.639973" rotationRate="37" />
+    <Model position="4260,8520,-1144" scale="51" mesh="ast3.mesh" rotationAxis="0.403191,0,0.167267" rotationRate="33" />
+    <Model position="-3288,-10630,-16957" scale="111" mesh="ast4.mesh" rotationAxis="0.451879,0.909329,0" rotationRate="34" />
+    <Model position="9481,13063,8871" scale="74" mesh="ast6.mesh" rotationAxis="0.962342,0,0.728256" rotationRate="12" />
+    <Model position="-13869,-19298,8075" scale="107" mesh="ast4.mesh" rotationAxis="0.989258,0,0.644457" rotationRate="38" />
+    <Model position="946,11917,5191" scale="109" mesh="ast5.mesh" rotationAxis="0.495949,0,0.243745" rotationRate="20" />
+    <Model position="7633,-4709,8785" scale="77" mesh="ast2.mesh" rotationAxis="0.167179,0,0.393167" rotationRate="10" />
+    <Model position="-19647,-5229,19334" scale="48" mesh="ast6.mesh" rotationAxis="0.358825,0.560023,0" rotationRate="20" />
+    <Model position="-17999,8929,-15681" scale="112" mesh="ast3.mesh" rotationAxis="0,0.243106,0.553743" rotationRate="37" />
+    <Model position="8866,-1606,7639" scale="23" mesh="ast4.mesh" rotationAxis="0,0.605223,0.587725" rotationRate="31" />
+    <Model position="-11575,15941,-9048" scale="32" mesh="ast4.mesh" rotationAxis="0.0341828,0.453673,0" rotationRate="45" />
+    <Model position="13969,15246,-7756" scale="109" mesh="ast5.mesh" rotationAxis="0.755033,0,0.296033" rotationRate="20" />
+    <Model position="-2325,19875,-19124" scale="86" mesh="ast2.mesh" rotationAxis="0.966503,0.242477,0" rotationRate="12" />
+    <Model position="10304,19403,4335" scale="77" mesh="ast4.mesh" rotationAxis="0,0.00236773,0.681625" rotationRate="47" />
+    <Model position="18514,-3055,13163" scale="78" mesh="ast5.mesh" rotationAxis="0,0.515333,0.653287" rotationRate="43" />
+    <Model position="5789,11308,15861" scale="37" mesh="ast5.mesh" rotationAxis="0,0.382628,0.808718" rotationRate="45" />
+    <Model position="-2178,6872,18230" scale="77" mesh="ast2.mesh" rotationAxis="0.297912,0,0.219303" rotationRate="31" />
+    <Model position="7070,-4542,19838" scale="105" mesh="ast5.mesh" rotationAxis="0.687377,0.740396,0" rotationRate="22" />
+    <Model position="-12823,16872,9832" scale="58" mesh="ast1.mesh" rotationAxis="0.58246,0,0.787929" rotationRate="20" />
+    <Model position="2918,6409,8922" scale="68" mesh="ast1.mesh" rotationAxis="0.17433,0,0.826748" rotationRate="39" />
+    <Model position="-8622,5979,-8353" scale="36" mesh="ast5.mesh" rotationAxis="0.0687289,0.268192,0" rotationRate="46" />
+    <Model position="5979,-7415,3301" scale="31" mesh="ast6.mesh" rotationAxis="0,0.0143773,0.425826" rotationRate="46" />
+    <Model position="-7788,19257,6317" scale="106" mesh="ast2.mesh" rotationAxis="0,0.266194,0.403447" rotationRate="39" />
+    <Model position="12192,-12550,8480" scale="60" mesh="ast1.mesh" rotationAxis="0,0.734682,0.846663" rotationRate="25" />
+    <Model position="440,17184,-7600" scale="113" mesh="ast4.mesh" rotationAxis="0.449652,0,0.149964" rotationRate="24" />
+    <Model position="-12127,-16899,-8417" scale="110" mesh="ast6.mesh" rotationAxis="0,0.650716,0.368006" rotationRate="11" />
+    <Model position="-9670,-7112,18003" scale="30" mesh="ast5.mesh" rotationAxis="0,0.139076,0.954704" rotationRate="14" />
+    <Model position="-12697,177,7300" scale="75" mesh="ast3.mesh" rotationAxis="0.266301,0.479015,0" rotationRate="42" />
+    <Model position="8585,-11163,10773" scale="88" mesh="ast4.mesh" rotationAxis="0.466253,0,0.430903" rotationRate="47" />
+    <Model position="11710,-10481,-1554" scale="86" mesh="ast1.mesh" rotationAxis="0,0.964012,0.587305" rotationRate="35" />
+    <Model position="-2643,-17331,-997" scale="77" mesh="ast1.mesh" rotationAxis="0.156293,0,0.663295" rotationRate="39" />
+    <Model position="19531,-19531,-12541" scale="24" mesh="ast2.mesh" rotationAxis="0,0.848482,0.338155" rotationRate="17" />
+    <Model position="7408,8762,3078" scale="26" mesh="ast5.mesh" rotationAxis="0.993064,0.489089,0" rotationRate="21" />
+    <Model position="-14555,8711,8121" scale="20" mesh="ast6.mesh" rotationAxis="0.831339,0,0.151149" rotationRate="32" />
+    <Model position="13295,-1765,5131" scale="26" mesh="ast1.mesh" rotationAxis="0,0.357794,0.743133" rotationRate="30" />
+    <Model position="-19884,7732,-1186" scale="115" mesh="ast3.mesh" rotationAxis="0.958775,0,0.669833" rotationRate="23" />
+    <Model position="18179,-17940,-19923" scale="20" mesh="ast5.mesh" rotationAxis="0.878644,0,0.217331" rotationRate="44" />
+    <Model position="300,-9529,2789" scale="51" mesh="ast3.mesh" rotationAxis="0.54208,0,0.14456" rotationRate="37" />
+    <Model position="14279,-9293,-11689" scale="114" mesh="ast3.mesh" rotationAxis="0,0.601114,0.645571" rotationRate="33" />
+    <Model position="-14721,-14492,-18237" scale="76" mesh="ast3.mesh" rotationAxis="0.261656,0.207217,0" rotationRate="28" />
+    <Model position="-1436,16914,6450" scale="73" mesh="ast1.mesh" rotationAxis="0.0323497,0,0.291569" rotationRate="28" />
+    <Model position="19533,5238,-16963" scale="65" mesh="ast5.mesh" rotationAxis="0.0116926,0.373665,0" rotationRate="18" />
+    <Model position="13828,8837,-12011" scale="111" mesh="ast5.mesh" rotationAxis="0,0.153227,0.382767" rotationRate="22" />
+    <Model position="-18321,8723,2799" scale="49" mesh="ast6.mesh" rotationAxis="0.96622,0.89771,0" rotationRate="30" />
+    <Model position="-15854,16336,11058" scale="103" mesh="ast2.mesh" rotationAxis="0.0964953,0,0.375937" rotationRate="27" />
+    <Model position="-18187,-9952,-18073" scale="22" mesh="ast6.mesh" rotationAxis="0.61819,0.17807,0" rotationRate="33" />
+    <Model position="-15558,-3796,17538" scale="113" mesh="ast2.mesh" rotationAxis="0.384199,0,0.383805" rotationRate="15" />
+    <Model position="1366,12633,14581" scale="97" mesh="ast6.mesh" rotationAxis="0.930072,0,0.824122" rotationRate="22" />
+    <Model position="-17562,12612,-2860" scale="85" mesh="ast1.mesh" rotationAxis="0.872863,0,0.10971" rotationRate="45" />
+    <Model position="-6467,11186,272" scale="43" mesh="ast4.mesh" rotationAxis="0,0.12058,0.8878" rotationRate="32" />
+    <Model position="-9182,-5778,-18432" scale="72" mesh="ast4.mesh" rotationAxis="0,0.317,0.972754" rotationRate="28" />
+    <Model position="-2685,2227,-7017" scale="75" mesh="ast1.mesh" rotationAxis="0.00795897,0.859802,0" rotationRate="13" />
+    <Model position="202,2704,7869" scale="94" mesh="ast5.mesh" rotationAxis="0,0.0867517,0.971227" rotationRate="49" />
+    <Model position="3157,2393,4862" scale="45" mesh="ast2.mesh" rotationAxis="0.143034,0,0.945654" rotationRate="46" />
+    <Model position="17734,11752,-2817" scale="37" mesh="ast3.mesh" rotationAxis="0.380276,0,0.284309" rotationRate="16" />
+    <Model position="5533,9168,-2009" scale="23" mesh="ast5.mesh" rotationAxis="0,0.59324,0.275897" rotationRate="28" />
+    <Model position="-5583,14555,-13629" scale="99" mesh="ast2.mesh" rotationAxis="0.246217,0,0.279914" rotationRate="12" />
+    <Model position="5755,18319,-13966" scale="111" mesh="ast1.mesh" rotationAxis="0.945343,0.981593,0" rotationRate="19" />
+    <Model position="-506,19330,10258" scale="57" mesh="ast2.mesh" rotationAxis="0.156282,0.449472,0" rotationRate="28" />
+    <Model position="-18180,10800,-19387" scale="111" mesh="ast4.mesh" rotationAxis="0,0.138856,0.558955" rotationRate="46" />
+    <Model position="-19442,9153,6667" scale="65" mesh="ast3.mesh" rotationAxis="0.496782,0,0.891285" rotationRate="18" />
+    <Model position="-1991,12109,-18981" scale="39" mesh="ast1.mesh" rotationAxis="0.251609,0.291046,0" rotationRate="16" />
+    <Model position="3016,6118,758" scale="102" mesh="ast4.mesh" rotationAxis="0.0817345,0.394506,0" rotationRate="36" />
+    <Model position="-5930,6728,8780" scale="57" mesh="ast6.mesh" rotationAxis="0.266048,0.376193,0" rotationRate="19" />
+    <Model position="-747,-11495,13870" scale="44" mesh="ast3.mesh" rotationAxis="0.414018,0,0.750772" rotationRate="21" />
+    <Model position="305,-7504,9849" scale="83" mesh="ast1.mesh" rotationAxis="0.984976,0,0.0811671" rotationRate="25" />
+    <Model position="4685,-10642,-2497" scale="85" mesh="ast6.mesh" rotationAxis="0.415558,0.751553,0" rotationRate="27" />
+    <Model position="17354,16699,2394" scale="44" mesh="ast1.mesh" rotationAxis="0.693572,0.147356,0" rotationRate="35" />
+    <Model position="9192,-17477,-14279" scale="61" mesh="ast2.mesh" rotationAxis="0.461486,0,0.928585" rotationRate="41" />
+    <Model position="8023,-15706,-19451" scale="98" mesh="ast6.mesh" rotationAxis="0,0.000410601,0.90886" rotationRate="23" />
+    <Model position="-4958,16296,-4095" scale="109" mesh="ast1.mesh" rotationAxis="0.533062,0,0.249216" rotationRate="47" />
+    <Model position="843,16586,-13247" scale="36" mesh="ast6.mesh" rotationAxis="0,0.594639,0.732396" rotationRate="38" />
+    <Model position="19074,8315,17723" scale="95" mesh="ast2.mesh" rotationAxis="0.966402,0,0.119558" rotationRate="44" />
+    <Model position="-12490,734,18210" scale="35" mesh="ast4.mesh" rotationAxis="0.0976298,0.455641,0" rotationRate="24" />
+    <Model position="-11940,6896,-17968" scale="33" mesh="ast1.mesh" rotationAxis="0,0.77757,0.432964" rotationRate="39" />
+    <Model position="-2941,-2680,-17184" scale="54" mesh="ast2.mesh" rotationAxis="0.350042,0,0.659718" rotationRate="22" />
+    <Model position="-9114,5177,-14254" scale="69" mesh="ast1.mesh" rotationAxis="0.65862,0.380363,0" rotationRate="27" />
+    <Model position="-7909,1216,-6815" scale="44" mesh="ast2.mesh" rotationAxis="0,0.031546,0.392351" rotationRate="31" />
+    <Model position="1091,-3609,53" scale="27" mesh="ast1.mesh" rotationAxis="0.702045,0.669888,0" rotationRate="17" />
+    <Model position="8211,-10441,-7536" scale="30" mesh="ast3.mesh" rotationAxis="0,0.792689,0.311823" rotationRate="17" />
+    <Model position="1533,8849,17655" scale="38" mesh="ast6.mesh" rotationAxis="0,0.742122,0.71549" rotationRate="49" />
+    <Model position="6546,-5931,9791" scale="71" mesh="ast1.mesh" rotationAxis="0.373001,0,0.854548" rotationRate="47" />
+    <Model position="14884,-14921,13589" scale="20" mesh="ast4.mesh" rotationAxis="0,0.874073,0.518839" rotationRate="28" />
+    <Model position="-4888,1727,-581" scale="40" mesh="ast1.mesh" rotationAxis="0,0.612156,0.58926" rotationRate="49" />
+    <Model position="16617,1806,15260" scale="28" mesh="ast1.mesh" rotationAxis="0.437493,0,0.353516" rotationRate="27" />
+    <Model position="17792,4774,-5272" scale="101" mesh="ast3.mesh" rotationAxis="0,0.916476,0.853167" rotationRate="46" />
+    <Model position="12856,255,-5396" scale="47" mesh="ast6.mesh" rotationAxis="0,0.18605,0.637593" rotationRate="26" />
+    <Model position="-17573,-12764,13494" scale="107" mesh="ast5.mesh" rotationAxis="0.573851,0,0.982895" rotationRate="16" />
+    <Model position="19722,-1137,-18060" scale="71" mesh="ast5.mesh" rotationAxis="0.273151,0.392637,0" rotationRate="34" />
+    <Model position="12155,-1739,-17329" scale="31" mesh="ast2.mesh" rotationAxis="0,0.891737,0.832436" rotationRate="22" />
+    <Model position="-4996,-11586,-15279" scale="119" mesh="ast2.mesh" rotationAxis="0,0.123074,0.209338" rotationRate="16" />
+    <Model position="-13104,865,-611" scale="57" mesh="ast3.mesh" rotationAxis="0.393178,0,0.345322" rotationRate="18" />
+    <Model position="15005,-9877,15622" scale="97" mesh="ast1.mesh" rotationAxis="0,0.152896,0.0210835" rotationRate="25" />
+    <Model position="17583,9888,16829" scale="76" mesh="ast2.mesh" rotationAxis="0,0.947973,0.28026" rotationRate="15" />
+    <Model position="-5279,15909,15382" scale="82" mesh="ast1.mesh" rotationAxis="0,0.499884,0.773145" rotationRate="18" />
+    <Model position="-5938,14646,17243" scale="56" mesh="ast6.mesh" rotationAxis="0,0.0967167,0.348338" rotationRate="16" />
+    <Model position="19518,17215,-1274" scale="119" mesh="ast1.mesh" rotationAxis="0.223859,0,0.252346" rotationRate="44" />
+    <Model position="-16237,-17619,-6745" scale="65" mesh="ast6.mesh" rotationAxis="0.0241466,0.491285,0" rotationRate="39" />
+    <Model position="12763,1468,-3165" scale="78" mesh="ast3.mesh" rotationAxis="0.800474,0.278164,0" rotationRate="37" />
+    <Model position="13946,-7517,13683" scale="92" mesh="ast1.mesh" rotationAxis="0.142206,0.894399,0" rotationRate="40" />
+    <Model position="-5491,-1084,-11117" scale="84" mesh="ast2.mesh" rotationAxis="0.174864,0,0.298694" rotationRate="14" />
+    <Model position="2799,9189,7344" scale="54" mesh="ast3.mesh" rotationAxis="0.330476,0.71494,0" rotationRate="31" />
+    <Model position="-18445,-17042,3296" scale="110" mesh="ast6.mesh" rotationAxis="0,0.320011,0.644437" rotationRate="20" />
+    <Model position="-15377,5559,-12082" scale="26" mesh="ast4.mesh" rotationAxis="0,0.451157,0.102375" rotationRate="20" />
+    <Model position="-2331,-14260,17200" scale="85" mesh="ast5.mesh" rotationAxis="0.0446891,0.515642,0" rotationRate="37" />
+    <Model position="-9613,-4258,4537" scale="103" mesh="ast1.mesh" rotationAxis="0.820812,0.60695,0" rotationRate="13" />
+    <Model position="-6169,19264,-4878" scale="69" mesh="ast3.mesh" rotationAxis="0,0.585115,0.235653" rotationRate="32" />
+    <Model position="8717,-16685,9115" scale="37" mesh="ast4.mesh" rotationAxis="0.0512168,0.899599,0" rotationRate="15" />
+    <Model position="18826,17155,4947" scale="84" mesh="ast4.mesh" rotationAxis="0.204495,0,0.838098" rotationRate="48" />
+    <Model position="7971,3645,-9858" scale="65" mesh="ast3.mesh" rotationAxis="0.348379,0,0.384062" rotationRate="19" />
+    <Model position="9202,8689,-6795" scale="37" mesh="ast4.mesh" rotationAxis="0.826781,0,0.641626" rotationRate="40" />
+    <Model position="-12115,6664,5786" scale="105" mesh="ast1.mesh" rotationAxis="0.794331,0.43244,0" rotationRate="40" />
+    <Model position="17142,15709,-8725" scale="57" mesh="ast5.mesh" rotationAxis="0,0.561188,0.300935" rotationRate="36" />
+    <Model position="1991,-11949,-15733" scale="68" mesh="ast1.mesh" rotationAxis="0,0.390655,0.623811" rotationRate="41" />
+    <Model position="-6787,1792,287" scale="71" mesh="ast6.mesh" rotationAxis="0.161019,0.130015,0" rotationRate="36" />
+    <Model position="-7223,-13574,-11873" scale="24" mesh="ast4.mesh" rotationAxis="0.792203,0,0.177188" rotationRate="38" />
Index: /code/branches/core/src/orxonox/CMakeLists.txt
===================================================================
--- /code/branches/core/src/orxonox/CMakeLists.txt	(revision 868)
+++ /code/branches/core/src/orxonox/CMakeLists.txt	(revision 869)
@@ -6,18 +6,18 @@
 #  SpaceshipSteering.cc
 #  hud/HUD.cc
-#  particle/ParticleInterface.cc
-#  tools/BillboardSet.cc
+  particle/ParticleInterface.cc
+  tools/BillboardSet.cc
 #  tools/Light.cc
   tools/Mesh.cc
   tools/Timer.cc
-#  objects/Ambient.cc
+  objects/Ambient.cc
 #  objects/Camera.cc
-#  objects/Explosion.cc
+  objects/Explosion.cc
 #  objects/Fighter.cc
   objects/Model.cc
 #  objects/NPC.cc
-#  objects/Projectile.cc
-#  objects/Skybox.cc
-#  objects/SpaceShip.cc
+  objects/Projectile.cc
+  objects/Skybox.cc
+  objects/SpaceShip.cc
 #  objects/SpaceshipSteeringObject.cc
   objects/test1.cc
Index: /code/branches/core/src/orxonox/Orxonox.cc
===================================================================
--- /code/branches/core/src/orxonox/Orxonox.cc	(revision 868)
+++ /code/branches/core/src/orxonox/Orxonox.cc	(revision 869)
@@ -209,10 +209,10 @@
   {
     //TODO: start modules
-//    ogre_->startRender();
+    ogre_->startRender();
     //TODO: run engine
     Factory::createClassHierarchy();
-//    createScene();
-//    setupScene();
-//    setupInputSystem();
+    createScene();
+    setupScene();
+    setupInputSystem();
     if(mode_!=CLIENT){ // remove this in future ---- presentation hack
     }
@@ -1146,5 +1146,5 @@
         std::cout << "2\n";
 
-//    startRenderLoop();
+    startRenderLoop();
   }
 
Index: /code/branches/core/src/orxonox/core/XMLPort.cc
===================================================================
--- /code/branches/core/src/orxonox/core/XMLPort.cc	(revision 868)
+++ /code/branches/core/src/orxonox/core/XMLPort.cc	(revision 869)
@@ -28,4 +28,5 @@
 #include "XMLPort.h"
 #include "Language.h"
+#include "Loader.h"
 
 namespace orxonox
@@ -82,3 +83,8 @@
         return GetLocalisation(this->description_);
     }
+
+    bool XMLPortObjectContainer::identifierIsIncludedInLoaderMask(const Identifier* identifier)
+    {
+        return Loader::currentMask_s.isIncluded(identifier);
+    }
 }
Index: /code/branches/core/src/orxonox/core/XMLPort.h
===================================================================
--- /code/branches/core/src/orxonox/core/XMLPort.h	(revision 868)
+++ /code/branches/core/src/orxonox/core/XMLPort.h	(revision 869)
@@ -37,5 +37,4 @@
 #include "CoreIncludes.h"
 #include "BaseObject.h"
-#include "Loader.h"
 
 #include "CorePrereqs.h"
@@ -142,12 +141,12 @@
                                 {
                                     COUT(5) << tokens.size() << " parameter (using MultiTypeMath)." << std::endl;
-                                    MultiTypeMath param1, param2, param3, param4, param5;
+                                    MultiTypeMath param1 = MT_null, param2 = MT_null, param3 = MT_null, param4 = MT_null, param5 = MT_null;
                                     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 (tokens.size() >= 2) param2 = tokens[1];
+                                    if (tokens.size() >= 3) param3 = tokens[2];
+                                    if (tokens.size() >= 4) param4 = tokens[3];
+                                    if (tokens.size() >= 5) param5 = tokens[4];
                                     COUT(5) << object->getLoaderIndentation() << "  " << attribute << std::endl;
-                                    COUT(5) << object->getLoaderIndentation() << "  " << tokens[0] << " -> " << param1 << ", " << tokens[1] << " -> " << param2 << ", " << tokens[2] << " -> " << param3 << ", " << tokens[3] << " -> " << param4 << ", " << tokens[4] << " -> " << param5 << std::endl;
+                                    COUT(5) << object->getLoaderIndentation() << "  " << param1 << ", " << param2 << ", " << param3 << ", " << param4 << ", " << param5 << std::endl;
 
                                     (*this->loadfunction_)(object, param1, param2, param3, param4, param5);
@@ -197,4 +196,5 @@
             XMLPortObjectContainer& description(const std::string description);
             const std::string& getDescription();
+            static bool identifierIsIncludedInLoaderMask(const Identifier* identifier);
 
         protected:
@@ -236,5 +236,5 @@
                                     if (identifier->isA(Class(O)))
                                     {
-                                        if (Loader::currentMask_s.isIncluded(identifier))
+                                        if (this->identifierIsIncludedInLoaderMask(identifier))
                                         {
                                             COUT(4) << object->getLoaderIndentation() << "fabricating " << child->Value() << "..." << std::endl;
Index: /code/branches/core/src/orxonox/objects/Ambient.cc
===================================================================
--- /code/branches/core/src/orxonox/objects/Ambient.cc	(revision 868)
+++ /code/branches/core/src/orxonox/objects/Ambient.cc	(revision 869)
@@ -40,4 +40,5 @@
 #include "../core/CoreIncludes.h"
 #include "../Orxonox.h"
+#include "core/XMLPort.h"
 
 #include "Ambient.h"
@@ -58,6 +59,4 @@
     void Ambient::loadParams(TiXmlElement* xmlElem)
     {
-    	Ogre::SceneManager* mgr = orxonox::Orxonox::getSingleton()->getSceneManager();
-
     	if (xmlElem->Attribute("colourvalue"))
     	{
@@ -69,8 +68,28 @@
 	    	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
+    */
+    Element& Ambient::XMLPort(Element& xmlelement, bool loading)
+    {
+        BaseObject::XMLPort(xmlelement, loading);
+
+        XMLPortParamLoadOnly(Ambient, "colourvalue", setAmbientLight, xmlelement, loading);
+
+        return xmlelement;
+    }
 }
Index: /code/branches/core/src/orxonox/objects/Ambient.h
===================================================================
--- /code/branches/core/src/orxonox/objects/Ambient.h	(revision 868)
+++ /code/branches/core/src/orxonox/objects/Ambient.h	(revision 869)
@@ -14,6 +14,7 @@
             virtual ~Ambient();
 
-
             void loadParams(TiXmlElement* xmlElem);
+            virtual Element& XMLPort(Element& xmlelement, bool loading);
+            void setAmbientLight(const ColourValue& colour);
 
         private:
Index: /code/branches/core/src/orxonox/objects/Model.cc
===================================================================
--- /code/branches/core/src/orxonox/objects/Model.cc	(revision 868)
+++ /code/branches/core/src/orxonox/objects/Model.cc	(revision 869)
@@ -33,4 +33,5 @@
 #include "../core/CoreIncludes.h"
 #include "../Orxonox.h"
+#include "core/XMLPort.h"
 
 #include "Model.h"
@@ -60,4 +61,26 @@
     }
 
+    /**
+        @brief XML loading and saving.
+        @param xmlelement The XML-element
+        @param loading Loading (true) or saving (false)
+        @return The XML-element
+    */
+    Element& Model::XMLPort(Element& xmlelement, bool loading)
+    {
+        WorldEntity::XMLPort(xmlelement, loading);
+
+        XMLPortParamLoadOnly(Model, "mesh", setMesh, xmlelement, loading);
+
+        create();
+
+        return xmlelement;
+    }
+
+    void Model::setMesh(const std::string& meshname)
+    {
+        this->meshSrc_ = meshname;
+    }
+
     bool Model::create(){
       if(meshSrc_.compare("")!=0){
Index: /code/branches/core/src/orxonox/objects/Model.h
===================================================================
--- /code/branches/core/src/orxonox/objects/Model.h	(revision 868)
+++ /code/branches/core/src/orxonox/objects/Model.h	(revision 869)
@@ -18,4 +18,6 @@
             virtual ~Model();
             virtual void loadParams(TiXmlElement* xmlElem);
+            virtual Element& XMLPort(Element& xmlelement, bool loading);
+            void setMesh(const std::string& meshname);
             bool create();
 
Index: /code/branches/core/src/orxonox/objects/Skybox.cc
===================================================================
--- /code/branches/core/src/orxonox/objects/Skybox.cc	(revision 868)
+++ /code/branches/core/src/orxonox/objects/Skybox.cc	(revision 869)
@@ -38,4 +38,5 @@
 #include "../core/CoreIncludes.h"
 #include "../core/Debug.h"
+#include "core/XMLPort.h"
 
 #include "Skybox.h"
@@ -56,13 +57,31 @@
     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
+    */
+    Element& Skybox::XMLPort(Element& xmlelement, bool loading)
+    {
+        BaseObject::XMLPort(xmlelement, loading);
+
+        XMLPortParamLoadOnly(Skybox, "src", setSkybox, xmlelement, loading);
+
+        return xmlelement;
+    }
 }
Index: /code/branches/core/src/orxonox/objects/Skybox.h
===================================================================
--- /code/branches/core/src/orxonox/objects/Skybox.h	(revision 868)
+++ /code/branches/core/src/orxonox/objects/Skybox.h	(revision 869)
@@ -16,6 +16,7 @@
             virtual ~Skybox();
 
-
             void loadParams(TiXmlElement* xmlElem);
+            virtual Element& XMLPort(Element& xmlelement, bool loading);
+            void setSkybox(const std::string& skyboxname);
 
         private:
Index: /code/branches/core/src/orxonox/objects/SpaceShip.cc
===================================================================
--- /code/branches/core/src/orxonox/objects/SpaceShip.cc	(revision 868)
+++ /code/branches/core/src/orxonox/objects/SpaceShip.cc	(revision 869)
@@ -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,63 @@
     	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
+    */
+    Element& 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);
+
+        return xmlelement;
     }
 
Index: /code/branches/core/src/orxonox/objects/SpaceShip.h
===================================================================
--- /code/branches/core/src/orxonox/objects/SpaceShip.h	(revision 868)
+++ /code/branches/core/src/orxonox/objects/SpaceShip.h	(revision 869)
@@ -21,7 +21,18 @@
             SpaceShip();
             ~SpaceShip();
+            void init();
             void setConfigValues();
             virtual void loadParams(TiXmlElement* xmlElem);
+            virtual Element& 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);
Index: /code/branches/core/src/orxonox/objects/WorldEntity.cc
===================================================================
--- /code/branches/core/src/orxonox/objects/WorldEntity.cc	(revision 868)
+++ /code/branches/core/src/orxonox/objects/WorldEntity.cc	(revision 869)
@@ -158,4 +158,10 @@
     }
 
+    void WorldEntity::setYawPitchRoll(const Degree& yaw, const Degree& pitch, const Degree& roll)
+    {
+        this->yaw(yaw);
+        this->pitch(pitch);
+        this->roll(roll);
+    }
 
     /**
@@ -169,11 +175,9 @@
         BaseObject::XMLPort(xmlelement, loading);
 
-        XMLPortParam(WorldEntity, "position", setPosition, getPosition, xmlelement, loading);
-//        XMLPortParam(WorldEntity, "direction", setDirection, getDirection, xmlelement, loading);
-        XMLPortParamLoadOnly(WorldEntity, "yaw", setYaw, xmlelement, loading);
-        XMLPortParamLoadOnly(WorldEntity, "pitch", setPitch, xmlelement, loading);
-        XMLPortParamLoadOnly(WorldEntity, "roll", setRoll, 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", setRotationAxis, getRotationAxis, xmlelement, loading);
+        XMLPortParam(WorldEntity, "rotationAxis", setRotationAxisLoader, 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 868)
+++ /code/branches/core/src/orxonox/objects/WorldEntity.h	(revision 869)
@@ -39,6 +39,10 @@
             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 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(); }
@@ -59,4 +63,5 @@
             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 setYaw(const Degree &angle)
@@ -73,4 +78,6 @@
             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); }
@@ -120,8 +127,10 @@
                 { return this->acceleration_; }
 
+            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 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_; }
@@ -130,5 +139,5 @@
 //                { this->rotationRate_ = angle; }
             inline void setRotationRate(const Degree& angle)
-                { this->rotationRate_ = angle; }
+                { this->rotationRate_ = angle; this->setStatic(angle == Degree(0)); }
             inline const Radian& getRotationRate() const
                 { return this->rotationRate_; }
Index: /code/branches/core/src/util/MultiTypeMath.cc
===================================================================
--- /code/branches/core/src/util/MultiTypeMath.cc	(revision 868)
+++ /code/branches/core/src/util/MultiTypeMath.cc	(revision 869)
@@ -88,33 +88,44 @@
 }
 
+MultiTypeMath::operator int() const
+{ return (this->type_ == MT_int) ? this->value_.int_ : ConvertValueAndReturn<MultiTypeMath, int>(*this); }
+MultiTypeMath::operator unsigned int() const
+{ return (this->type_ == MT_uint) ? this->value_.uint_ : ConvertValueAndReturn<MultiTypeMath, unsigned int>(*this); }
+MultiTypeMath::operator char() const
+{ return (this->type_ == MT_char) ? this->value_.char_ : ConvertValueAndReturn<MultiTypeMath, char>(*this); }
+MultiTypeMath::operator unsigned char() const
+{ return (this->type_ == MT_uchar) ? this->value_.uchar_ : ConvertValueAndReturn<MultiTypeMath, unsigned char>(*this); }
+MultiTypeMath::operator short() const
+{ return (this->type_ == MT_short) ? this->value_.short_ : ConvertValueAndReturn<MultiTypeMath, short>(*this); }
+MultiTypeMath::operator unsigned short() const
+{ return (this->type_ == MT_ushort) ? this->value_.ushort_ : ConvertValueAndReturn<MultiTypeMath, unsigned short>(*this); }
+MultiTypeMath::operator long() const
+{ return (this->type_ == MT_long) ? this->value_.long_ : ConvertValueAndReturn<MultiTypeMath, long>(*this); }
+MultiTypeMath::operator unsigned long() const
+{ return (this->type_ == MT_ulong) ? this->value_.ulong_ : ConvertValueAndReturn<MultiTypeMath, unsigned long>(*this); }
+MultiTypeMath::operator float() const
+{ return (this->type_ == MT_float) ? this->value_.float_ : ConvertValueAndReturn<MultiTypeMath, float>(*this); }
+MultiTypeMath::operator double() const
+{ return (this->type_ == MT_double) ? this->value_.double_ : ConvertValueAndReturn<MultiTypeMath, double>(*this); }
+MultiTypeMath::operator long double() const
+{ return (this->type_ == MT_longdouble) ? this->value_.longdouble_ : ConvertValueAndReturn<MultiTypeMath, long double>(*this); }
+MultiTypeMath::operator bool() const
+{ return (this->type_ == MT_bool) ? this->value_.bool_ : ConvertValueAndReturn<MultiTypeMath, bool>(*this); }
+MultiTypeMath::operator std::string() const
+{ return (this->type_ == MT_string) ? this->string_ : ConvertValueAndReturn<MultiTypeMath, std::string>(*this); }
+MultiTypeMath::operator const char*() const
+{ return ((this->type_ == MT_constchar) ? this->string_ : ConvertValueAndReturn<MultiTypeMath, std::string>(*this)).c_str(); }
 MultiTypeMath::operator orxonox::Vector2() const
-{
-    return (this->type_ == MT_vector2) ? this->vector2_ : ConvertValueAndReturn<MultiTypeMath, 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<MultiTypeMath, orxonox::Vector3>(*this);
-}
-
+{ 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<MultiTypeMath, 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<MultiTypeMath, 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<MultiTypeMath, 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<MultiTypeMath, orxonox::Degree>(*this);
-}
+{ return (this->type_ == MT_degree) ? this->degree_ : ConvertValueAndReturn<MultiTypeMath, orxonox::Degree>(*this); }
 
 void MultiTypeMath::setValue(const MultiTypeMath& mtm)
@@ -171,19 +182,5 @@
 std::ostream& operator<<(std::ostream& out, MultiTypeMath& mtm)
 {
-    if (mtm.isA(MT_vector2))
-        out << mtm.getVector2();
-    else if (mtm.isA(MT_vector3))
-        out << mtm.getVector3();
-    else if (mtm.isA(MT_colourvalue))
-        out << mtm.getColourValue();
-    else if (mtm.isA(MT_quaternion))
-        out << mtm.getQuaternion();
-    else if (mtm.isA(MT_radian))
-        out << mtm.getRadian();
-    else if (mtm.isA(MT_degree))
-        out << mtm.getDegree();
-    else
-        out << ((MultiTypeString)mtm);
-
+    out << mtm.toString();
     return out;
 }
Index: /code/branches/core/src/util/MultiTypeMath.h
===================================================================
--- /code/branches/core/src/util/MultiTypeMath.h	(revision 868)
+++ /code/branches/core/src/util/MultiTypeMath.h	(revision 869)
@@ -60,4 +60,5 @@
         inline MultiTypeMath(const orxonox::Degree&      value) { this->setValue(value); }
         inline MultiTypeMath(const MultiTypeMath& mtm)          { this->setValue(mtm);   }
+        virtual inline ~MultiTypeMath() {}
 
         using MultiTypeString::operator=;
@@ -88,10 +89,24 @@
         bool operator!=(const MultiTypeMath& mtm) const;
 
-        operator orxonox::Vector2()     const;
-        operator orxonox::Vector3()     const;
-        operator orxonox::ColourValue() const;
-        operator orxonox::Quaternion()  const;
-        operator orxonox::Radian()      const;
-        operator orxonox::Degree()      const;
+        virtual operator int()                  const;
+        virtual operator unsigned int()         const;
+        virtual operator char()                 const;
+        virtual operator unsigned char()        const;
+        virtual operator short()                const;
+        virtual operator unsigned short()       const;
+        virtual operator long()                 const;
+        virtual operator unsigned long()        const;
+        virtual operator float ()               const;
+        virtual operator double ()              const;
+        virtual operator long double()          const;
+        virtual operator bool()                 const;
+        virtual operator std::string()          const;
+        virtual operator const char*()          const;
+        virtual operator orxonox::Vector2()     const;
+        virtual operator orxonox::Vector3()     const;
+        virtual operator orxonox::ColourValue() const;
+        virtual operator orxonox::Quaternion()  const;
+        virtual operator orxonox::Radian()      const;
+        virtual operator orxonox::Degree()      const;
 
         using MultiTypeString::setValue;
@@ -126,6 +141,6 @@
         inline void getValue(orxonox::Degree*      variable) const { (*variable) = orxonox::Degree      (this->degree_);      }
 
-        std::string toString() const;
-        bool fromString(const std::string value);
+        virtual std::string toString() const;
+        virtual bool fromString(const std::string value);
 
     protected:
Index: /code/branches/core/src/util/MultiTypePrimitive.cc
===================================================================
--- /code/branches/core/src/util/MultiTypePrimitive.cc	(revision 868)
+++ /code/branches/core/src/util/MultiTypePrimitive.cc	(revision 869)
@@ -129,62 +129,27 @@
 
 MultiTypePrimitive::operator int() const
-{
-    return (this->type_ == MT_int) ? this->value_.int_ : ConvertValueAndReturn<MultiTypePrimitive, int>(*this);
-}
-
+{ return (this->type_ == MT_int) ? this->value_.int_ : ConvertValueAndReturn<MultiTypePrimitive, int>(*this); }
 MultiTypePrimitive::operator unsigned int() const
-{
-    return (this->type_ == MT_uint) ? this->value_.uint_ : ConvertValueAndReturn<MultiTypePrimitive, unsigned int>(*this);
-}
-
+{ return (this->type_ == MT_uint) ? this->value_.uint_ : ConvertValueAndReturn<MultiTypePrimitive, unsigned int>(*this); }
 MultiTypePrimitive::operator char() const
-{
-    return (this->type_ == MT_char) ? this->value_.char_ : ConvertValueAndReturn<MultiTypePrimitive, char>(*this);
-}
-
+{ return (this->type_ == MT_char) ? this->value_.char_ : ConvertValueAndReturn<MultiTypePrimitive, char>(*this); }
 MultiTypePrimitive::operator unsigned char() const
-{
-    return (this->type_ == MT_uchar) ? this->value_.uchar_ : ConvertValueAndReturn<MultiTypePrimitive, unsigned char>(*this);
-}
-
+{ return (this->type_ == MT_uchar) ? this->value_.uchar_ : ConvertValueAndReturn<MultiTypePrimitive, unsigned char>(*this); }
 MultiTypePrimitive::operator short() const
-{
-    return (this->type_ == MT_short) ? this->value_.short_ : ConvertValueAndReturn<MultiTypePrimitive, short>(*this);
-}
-
+{ return (this->type_ == MT_short) ? this->value_.short_ : ConvertValueAndReturn<MultiTypePrimitive, short>(*this); }
 MultiTypePrimitive::operator unsigned short() const
-{
-    return (this->type_ == MT_ushort) ? this->value_.ushort_ : ConvertValueAndReturn<MultiTypePrimitive, unsigned short>(*this);
-}
-
+{ return (this->type_ == MT_ushort) ? this->value_.ushort_ : ConvertValueAndReturn<MultiTypePrimitive, unsigned short>(*this); }
 MultiTypePrimitive::operator long() const
-{
-    return (this->type_ == MT_long) ? this->value_.long_ : ConvertValueAndReturn<MultiTypePrimitive, long>(*this);
-}
-
+{ return (this->type_ == MT_long) ? this->value_.long_ : ConvertValueAndReturn<MultiTypePrimitive, long>(*this); }
 MultiTypePrimitive::operator unsigned long() const
-{
-    return (this->type_ == MT_ulong) ? this->value_.ulong_ : ConvertValueAndReturn<MultiTypePrimitive, unsigned long>(*this);
-}
-
+{ return (this->type_ == MT_ulong) ? this->value_.ulong_ : ConvertValueAndReturn<MultiTypePrimitive, unsigned long>(*this); }
 MultiTypePrimitive::operator float() const
-{
-    return (this->type_ == MT_float) ? this->value_.float_ : ConvertValueAndReturn<MultiTypePrimitive, float>(*this);
-}
-
+{ return (this->type_ == MT_float) ? this->value_.float_ : ConvertValueAndReturn<MultiTypePrimitive, float>(*this); }
 MultiTypePrimitive::operator double() const
-{
-    return (this->type_ == MT_double) ? this->value_.double_ : ConvertValueAndReturn<MultiTypePrimitive, double>(*this);
-}
-
+{ return (this->type_ == MT_double) ? this->value_.double_ : ConvertValueAndReturn<MultiTypePrimitive, double>(*this); }
 MultiTypePrimitive::operator long double() const
-{
-    return (this->type_ == MT_longdouble) ? this->value_.longdouble_ : ConvertValueAndReturn<MultiTypePrimitive, long double>(*this);
-}
-
+{ return (this->type_ == MT_longdouble) ? this->value_.longdouble_ : ConvertValueAndReturn<MultiTypePrimitive, long double>(*this); }
 MultiTypePrimitive::operator bool() const
-{
-    return (this->type_ == MT_bool) ? this->value_.bool_ : ConvertValueAndReturn<MultiTypePrimitive, bool>(*this);
-}
+{ return (this->type_ == MT_bool) ? this->value_.bool_ : ConvertValueAndReturn<MultiTypePrimitive, bool>(*this); }
 
 void MultiTypePrimitive::setValue(const MultiTypePrimitive& mtp)
@@ -258,29 +223,5 @@
 std::ostream& operator<<(std::ostream& out, const MultiTypePrimitive& mtp)
 {
-    if (mtp.isA(MT_int))
-        out << mtp.getInt();
-    else if (mtp.isA(MT_uint))
-        out << mtp.getUnsignedInt();
-    else if (mtp.isA(MT_char))
-        out << mtp.getChar();
-    else if (mtp.isA(MT_uchar))
-        out << mtp.getUnsignedChar();
-    else if (mtp.isA(MT_short))
-        out << mtp.getShort();
-    else if (mtp.isA(MT_ushort))
-        out << mtp.getUnsignedShort();
-    else if (mtp.isA(MT_long))
-        out << mtp.getLong();
-    else if (mtp.isA(MT_ulong))
-        out << mtp.getUnsignedLong();
-    else if (mtp.isA(MT_float))
-        out << mtp.getFloat();
-    else if (mtp.isA(MT_double))
-        out << mtp.getDouble();
-    else if (mtp.isA(MT_longdouble))
-        out << mtp.getLongDouble();
-    else if (mtp.isA(MT_bool))
-        out << mtp.getBool();
-
+    out << mtp.toString();
     return out;
 }
Index: /code/branches/core/src/util/MultiTypePrimitive.h
===================================================================
--- /code/branches/core/src/util/MultiTypePrimitive.h	(revision 868)
+++ /code/branches/core/src/util/MultiTypePrimitive.h	(revision 869)
@@ -53,4 +53,5 @@
         inline MultiTypePrimitive(bool           value) { this->setValue(value); }
         inline MultiTypePrimitive(const MultiTypePrimitive& mtp) { this->setValue(mtp); }
+        virtual inline ~MultiTypePrimitive() {}
 
         inline MultiTypePrimitive& operator=(MultiType      value) { this->type_ = MT_null; return *this; }
@@ -97,16 +98,16 @@
         bool operator!=(const MultiTypePrimitive& mtp) const;
 
-        operator int()            const;
-        operator unsigned int()   const;
-        operator char()           const;
-        operator unsigned char()  const;
-        operator short()          const;
-        operator unsigned short() const;
-        operator long()           const;
-        operator unsigned long()  const;
-        operator float ()         const;
-        operator double ()        const;
-        operator long double()    const;
-        operator bool()           const;
+        virtual operator int()            const;
+        virtual operator unsigned int()   const;
+        virtual operator char()           const;
+        virtual operator unsigned char()  const;
+        virtual operator short()          const;
+        virtual operator unsigned short() const;
+        virtual operator long()           const;
+        virtual operator unsigned long()  const;
+        virtual operator float ()         const;
+        virtual operator double ()        const;
+        virtual operator long double()    const;
+        virtual operator bool()           const;
 
         inline void setValue(int            value) { this->type_ = MT_int;        this->value_.int_        = value; }
@@ -166,6 +167,6 @@
         inline bool      isA(MultiType type) const { return (this->type_ == type); }
 
-        std::string toString() const;
-        bool fromString(const std::string value);
+        virtual std::string toString() const;
+        virtual bool fromString(const std::string value);
 
     protected:
Index: /code/branches/core/src/util/MultiTypeString.cc
===================================================================
--- /code/branches/core/src/util/MultiTypeString.cc	(revision 868)
+++ /code/branches/core/src/util/MultiTypeString.cc	(revision 869)
@@ -64,13 +64,32 @@
 }
 
+MultiTypeString::operator int() const
+{ return (this->type_ == MT_int) ? this->value_.int_ : ConvertValueAndReturn<MultiTypeString, int>(*this); }
+MultiTypeString::operator unsigned int() const
+{ return (this->type_ == MT_uint) ? this->value_.uint_ : ConvertValueAndReturn<MultiTypeString, unsigned int>(*this); }
+MultiTypeString::operator char() const
+{ return (this->type_ == MT_char) ? this->value_.char_ : ConvertValueAndReturn<MultiTypeString, char>(*this); }
+MultiTypeString::operator unsigned char() const
+{ return (this->type_ == MT_uchar) ? this->value_.uchar_ : ConvertValueAndReturn<MultiTypeString, unsigned char>(*this); }
+MultiTypeString::operator short() const
+{ return (this->type_ == MT_short) ? this->value_.short_ : ConvertValueAndReturn<MultiTypeString, short>(*this); }
+MultiTypeString::operator unsigned short() const
+{ return (this->type_ == MT_ushort) ? this->value_.ushort_ : ConvertValueAndReturn<MultiTypeString, unsigned short>(*this); }
+MultiTypeString::operator long() const
+{ return (this->type_ == MT_long) ? this->value_.long_ : ConvertValueAndReturn<MultiTypeString, long>(*this); }
+MultiTypeString::operator unsigned long() const
+{ return (this->type_ == MT_ulong) ? this->value_.ulong_ : ConvertValueAndReturn<MultiTypeString, unsigned long>(*this); }
+MultiTypeString::operator float() const
+{ return (this->type_ == MT_float) ? this->value_.float_ : ConvertValueAndReturn<MultiTypeString, float>(*this); }
+MultiTypeString::operator double() const
+{ return (this->type_ == MT_double) ? this->value_.double_ : ConvertValueAndReturn<MultiTypeString, double>(*this); }
+MultiTypeString::operator long double() const
+{ return (this->type_ == MT_longdouble) ? this->value_.longdouble_ : ConvertValueAndReturn<MultiTypeString, long double>(*this); }
+MultiTypeString::operator bool() const
+{ return (this->type_ == MT_bool) ? this->value_.bool_ : ConvertValueAndReturn<MultiTypeString, bool>(*this); }
 MultiTypeString::operator std::string() const
-{
-    return (this->type_ == MT_string) ? this->string_ : ConvertValueAndReturn<MultiTypeString, 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_ : ConvertValueAndReturn<MultiTypeString, std::string>(*this)).c_str();
-}
+{ return ((this->type_ == MT_constchar) ? this->string_ : ConvertValueAndReturn<MultiTypeString, std::string>(*this)).c_str(); }
 
 void MultiTypeString::setValue(const MultiTypeString& mts)
@@ -104,11 +123,5 @@
 std::ostream& operator<<(std::ostream& out, MultiTypeString& mts)
 {
-    if (mts.isA(MT_constchar))
-        out << mts.getConstChar();
-    else if (mts.isA(MT_string))
-        out << mts.getString();
-    else
-        out << ((MultiTypePrimitive)mts);
-
+    out << mts.toString();
     return out;
 }
Index: /code/branches/core/src/util/MultiTypeString.h
===================================================================
--- /code/branches/core/src/util/MultiTypeString.h	(revision 868)
+++ /code/branches/core/src/util/MultiTypeString.h	(revision 869)
@@ -55,4 +55,5 @@
         inline MultiTypeString(const std::string& value)   { this->setValue(value); }
         inline MultiTypeString(const MultiTypeString& mts) { this->setValue(mts);   }
+        virtual inline ~MultiTypeString() {}
 
         using MultiTypePrimitive::operator=;
@@ -71,6 +72,18 @@
         bool operator!=(const MultiTypeString& mts) const;
 
-        operator std::string() const;
-        operator const char*() const;
+        virtual operator int()            const;
+        virtual operator unsigned int()   const;
+        virtual operator char()           const;
+        virtual operator unsigned char()  const;
+        virtual operator short()          const;
+        virtual operator unsigned short() const;
+        virtual operator long()           const;
+        virtual operator unsigned long()  const;
+        virtual operator float ()         const;
+        virtual operator double ()        const;
+        virtual operator long double()    const;
+        virtual operator bool()           const;
+        virtual operator std::string()    const;
+        virtual operator const char*()    const;
 
         using MultiTypePrimitive::setValue;
@@ -89,6 +102,6 @@
         inline void getValue(const char** variable) const { (*variable) = this->string_.c_str(); }
 
-        std::string toString() const;
-        bool fromString(const std::string value);
+        virtual std::string toString() const;
+        virtual bool fromString(const std::string value);
 
     protected:
