Index: code/trunk/bin/resources.cfg
===================================================================
--- code/trunk/bin/resources.cfg	(revision 1023)
+++ 	(revision )
@@ -1,25 +1,0 @@
-# Resource locations to be added to the 'boostrap' path
-# This also contains the minimum you need to use the Ogre example framework
-[Bootstrap]
-Zip=../Media/packs/OgreCore.zip
-
-# Resource locations to be added to the default path
-[General]
-FileSystem=../Media
-FileSystem=../Media/fonts
-#FileSystem=../Media/materials/programs
-FileSystem=../Media/materials/scripts
-FileSystem=../Media/materials/textures
-FileSystem=../Media/models
-FileSystem=../Media/overlay
-FileSystem=../Media/particle
-FileSystem=../Media/gui
-#FileSystem=../Media/levels
-#FileSystem=../Media/audio
-Zip=../Media/packs/cubemap.zip
-#Zip=../Media/packs/cubemapsJS.zip
-#Zip=../Media/packs/dragon.zip
-#Zip=../Media/packs/fresneldemo.zip
-#Zip=../Media/packs/ogretestmap.zip
-Zip=../Media/packs/skybox.zip
-
Index: code/trunk/src/CMakeLists.txt
===================================================================
--- code/trunk/src/CMakeLists.txt	(revision 1023)
+++ code/trunk/src/CMakeLists.txt	(revision 1024)
@@ -6,4 +6,3 @@
 ADD_SUBDIRECTORY(audio)
 ADD_SUBDIRECTORY(network)
-#ADD_SUBDIRECTORY(loader)
 ADD_SUBDIRECTORY(orxonox)
Index: code/trunk/src/asylum/audio/_AudioObject.cc
===================================================================
--- code/trunk/src/asylum/audio/_AudioObject.cc	(revision 1024)
+++ code/trunk/src/asylum/audio/_AudioObject.cc	(revision 1024)
@@ -0,0 +1,142 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   License notice:
+*
+*   This program is free software; you can redistribute it and/or
+*   modify it under the terms of the GNU General Public License
+*   as published by the Free Software Foundation; either version 2
+*   of the License, or (at your option) any later version.
+*
+*   This program is distributed in the hope that it will be useful,
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*   GNU General Public License for more details.
+*
+*   You should have received a copy of the GNU General Public License
+*   along with this program; if not, write to the Free Software
+*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*
+*   Author:
+*      ...
+*   Co-authors:
+*      ...
+*
+*/
+
+
+#include <iostream>
+#include <string>
+
+#include "core/Debug.h"
+#include "AudioObject.h"
+
+namespace audio
+{
+  AudioObject::AudioObject(std::string audioFile)
+  {
+    audioFile_ = audioFile;
+    SourcePos[0]=0;
+    SourcePos[1]=0;
+    SourcePos[2]=0;
+
+    SourceVel[0]=0;
+    SourceVel[1]=0;
+    SourceVel[2]=0;
+
+    ListenerPos[0]=0;
+    ListenerPos[1]=0;
+    ListenerPos[2]=0;
+
+    ListenerVel[0]=0;
+    ListenerVel[1]=0;
+    ListenerVel[2]=0;
+
+    ListenerOri[0]=0;
+    ListenerOri[1]=0;
+    ListenerOri[2]=-1;
+    ListenerOri[3]=0;
+    ListenerOri[4]=1;
+    ListenerOri[5]=0;
+
+
+    // Initialize OpenAL and clear the error bit.
+
+    alutInit(NULL, 0);
+    alGetError();
+
+    // Load the wav data.
+
+    if(LoadALData() == AL_FALSE)
+    {
+      printf("Error loading sound data.");
+
+    }
+
+    SetListenerValues();
+    COUT(3) << "Info: Play sone ambient background sound";
+  }
+
+  AudioObject::~AudioObject()
+  {
+    KillALData();
+  }
+
+  ALboolean AudioObject::LoadALData()
+  {
+    ALenum format;
+    ALsizei size;
+    ALvoid* data;
+    ALsizei freq;
+    ALboolean loop;
+
+
+    alGenBuffers(1, &Buffer);
+
+    if(alGetError() != AL_NO_ERROR)
+      return AL_FALSE;
+
+    alutLoadWAVFile((ALbyte*)audioFile_.c_str(), &format, &data, &size, &freq, &loop);
+    alBufferData(Buffer, format, data, size, freq);
+    alutUnloadWAV(format, data, size, freq);
+
+    alGenSources(1, &Source);
+
+    if(alGetError() != AL_NO_ERROR)
+      return AL_FALSE;
+
+    alSourcei (Source, AL_BUFFER,   Buffer   );
+    alSourcef (Source, AL_PITCH,    1.0      );
+    alSourcef (Source, AL_GAIN,     1.0      );
+    alSourcefv(Source, AL_POSITION, SourcePos);
+    alSourcefv(Source, AL_VELOCITY, SourceVel);
+    alSourcei (Source, AL_LOOPING,  loop     );
+
+    if(alGetError() == AL_NO_ERROR)
+      return AL_TRUE;
+
+
+    return AL_FALSE;
+  }
+
+  void AudioObject::SetListenerValues()
+  {
+    alListenerfv(AL_POSITION,    ListenerPos);
+    alListenerfv(AL_VELOCITY,    ListenerVel);
+    alListenerfv(AL_ORIENTATION, ListenerOri);
+  }
+
+  void AudioObject::KillALData()
+  {
+    alDeleteBuffers(1, &Buffer);
+    alDeleteSources(1, &Source);
+    alutExit();
+  }
+
+  void AudioObject::play()
+  {
+    alSourcePlay(Source);
+  }
+
+}
Index: code/trunk/src/asylum/loader/CMakeLists.txt
===================================================================
--- code/trunk/src/asylum/loader/CMakeLists.txt	(revision 1024)
+++ code/trunk/src/asylum/loader/CMakeLists.txt	(revision 1024)
@@ -0,0 +1,15 @@
+SET( LOADER_SRC_FILES
+  LevelLoader.cc
+)
+
+IF (WIN32)
+  ADD_LIBRARY( loader ${LOADER_SRC_FILES} )
+ELSE (WIN32)
+  ADD_LIBRARY( loader SHARED ${LOADER_SRC_FILES})
+ENDIF (WIN32)
+
+SET_TARGET_PROPERTIES( loader PROPERTIES LINK_FLAGS "--no-undefined" )
+
+TARGET_LINK_LIBRARIES( loader
+  util
+)
Index: code/trunk/src/asylum/loader/LevelLoader.cc
===================================================================
--- code/trunk/src/asylum/loader/LevelLoader.cc	(revision 1024)
+++ code/trunk/src/asylum/loader/LevelLoader.cc	(revision 1024)
@@ -0,0 +1,213 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   License notice:
+*
+*   This program is free software; you can redistribute it and/or
+*   modify it under the terms of the GNU General Public License
+*   as published by the Free Software Foundation; either version 2
+*   of the License, or (at your option) any later version.
+*
+*   This program is distributed in the hope that it will be useful,
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*   GNU General Public License for more details.
+*
+*   You should have received a copy of the GNU General Public License
+*   along with this program; if not, write to the Free Software
+*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*
+*   Author:
+*     Nicolas Perrenoud <nicolape@ee.ethz.ch>
+*   Co-authors:
+*      ...
+*
+*/
+
+#include "OrxonoxStableHeaders.h"
+
+#include <OgreOverlay.h>
+#include <OgreOverlayManager.h>
+
+#include "core/Error.h"
+#include "core/Debug.h"
+#include "core/CoreIncludes.h"
+
+#include "audio/AudioManager.h"
+#include "core/BaseObject.h"
+#include "orxonox/Orxonox.h"
+
+#include "LevelLoader.h"
+
+namespace loader
+{
+
+  LevelLoader::LevelLoader(std::string file, std::string path)
+  {
+    valid_ = false;
+
+    // Load XML level file
+    path.append("/");
+    path.append(file);
+
+    // Open xml file
+    doc_.LoadFile(path.c_str());
+
+    // Check if file was loaded
+    if (doc_.LoadFile())
+    {
+      TiXmlHandle hDoc(&doc_);
+      TiXmlHandle hRoot(0);
+      TiXmlElement* pElem;
+
+      // Check for root element
+      pElem = hDoc.FirstChildElement("orxonoxworld").Element();
+      if (pElem)
+      {
+        // Set root element
+        hRoot = TiXmlHandle(pElem);
+        rootElement_ = hRoot.Element();
+
+        // Set level description
+        pElem = hRoot.FirstChild("description").Element();
+        if (pElem)
+        {
+          description_ = pElem->GetText();
+        }
+
+        // Set level name
+        name_ = rootElement_->Attribute("name");
+        image_ = rootElement_->Attribute("image");
+
+        valid_ = true;
+      }
+      else
+      {
+        orxonox::Error("Level file has no valid root node");
+      }
+    }
+    else
+    {
+      orxonox::Error("Could not load level file ");
+    }
+  }
+
+  void LevelLoader::loadLevel()
+  {
+    if (valid_)
+    {
+      TiXmlElement* loadElem;
+      TiXmlElement* audioElem;
+      TiXmlElement* worldElem;
+      TiXmlElement* tElem;
+      TiXmlNode* tNode;
+
+      Ogre::OverlayManager& omgr = Ogre::OverlayManager::getSingleton();
+      Ogre::Overlay* mLoadOverlay; // FIXME: may be uninitialized
+
+      // Set loading screen
+      loadElem = rootElement_->FirstChildElement("loading");
+      if (loadElem)
+      {
+        // Set background
+        tElem = loadElem->FirstChildElement("background");
+        if (tElem)
+        {
+          loadingBackgroundColor_ = tElem->Attribute("color");
+          loadingBackgroundImage_ = tElem->Attribute("image");
+        }
+        // Set bar
+        tElem = loadElem->FirstChildElement("bar");
+        if (tElem)
+        {
+          loadingBarImage_ = tElem->Attribute("image");;
+          loadingBarTop_ = tElem->Attribute("top");
+          loadingBarLeft_ = tElem->Attribute("left");
+          loadingBarWidth_ = tElem->Attribute("width");
+          loadingBarHeight_ = tElem->Attribute("height");
+        }
+
+
+        mLoadOverlay = (Ogre::Overlay*)omgr.getByName("Orxonox/LoadingScreenSample");
+        mLoadOverlay->show();
+
+        COUT(0) << "This is Orxonox" << std::endl;
+        COUT(0) << "the hottest 3D action shooter ever to exist" << std::endl;
+        COUT(0) << "Level: " << name() << std::endl << "Description:" << description() << std::endl << "Image:" << image() << std::endl;
+        COUT(4) << "Backgroundcolor: " << loadingBackgroundColor_ << std::endl << "Backgroundimage:" << loadingBackgroundImage_ << std::endl;
+
+      }
+
+      // Load audio
+      audio::AudioManager* auMan = orxonox::Orxonox::getSingleton()->getAudioManagerPointer();
+      audioElem = rootElement_->FirstChildElement("audio");
+
+      if (audioElem)
+      {
+        audioElem = audioElem->FirstChildElement("ambient");
+        if (audioElem)
+        {
+          tNode = 0;
+          //FIXME something is wrong, probably missing ==
+          while( tNode = audioElem->IterateChildren( tNode ) )
+          {
+            if (tNode->Type() == TiXmlNode::ELEMENT)
+            {
+
+              tElem = tNode->ToElement();
+              std::string elemVal = tElem->Value();
+              if (elemVal == "ogg")
+              {
+                COUT(3) << "Adding sound "<< tElem->Attribute("src") << std::endl;
+
+                auMan->ambientAdd(tElem->Attribute("src"));
+              }
+            }
+          }
+          auMan->ambientStart();
+        }
+      }
+
+      // Load world
+      worldElem = rootElement_->FirstChildElement("world");
+      if (worldElem)
+      {
+        tNode = 0;
+        //FIXME something is wrong, probably missing ==
+        while (tNode = worldElem->IterateChildren(tNode))
+        {
+          if (tNode->Type() == TiXmlNode::ELEMENT)
+          {
+            tElem = tNode->ToElement();
+            orxonox::Identifier* id = ID(tElem->Value());
+            if (id)
+            {
+              orxonox::BaseObject* obj = id->fabricate();
+              obj->loadParams(tElem);
+            }
+            else
+            {
+              COUT(2) << "Warning: '"<< tElem->Value() <<"' is not a valid classname." << std::endl;
+            }
+          }
+        }
+      }
+
+      if (loadElem)
+      {
+        // FIXME: check for potential initialisation of mLoadOverlay
+        mLoadOverlay->hide();
+      }
+
+
+      COUT(0) << "Loading finished!" << std::endl << std::endl;
+    }
+  }
+
+  LevelLoader::~LevelLoader()
+  {
+
+  }
+
+}
Index: code/trunk/src/asylum/loader/LevelLoader.h
===================================================================
--- code/trunk/src/asylum/loader/LevelLoader.h	(revision 1024)
+++ code/trunk/src/asylum/loader/LevelLoader.h	(revision 1024)
@@ -0,0 +1,57 @@
+/**
+* Orxonox - www.orxonox.net
+* Level Loader class
+*
+* @author Nicolas Perrenoud <nicolape@ee.ethz.ch>
+*/
+
+#ifndef _LevelLoader_H__
+#define _LevelLoader_H__
+
+#include <string>
+
+#include "LoaderPrereqs.h"
+#include "util/tinyxml/tinyxml.h"
+
+class TiXmlDocument;   // Forward declaration
+class TiXmlElement;    // Forward declaration
+
+namespace loader
+{
+  class _LoaderExport LevelLoader
+  {
+  public:
+    // Constructors, loads the level file and some information data
+    LevelLoader(std::string file, std::string dir = "levels");
+    // Destructor
+    virtual ~LevelLoader();
+    // Loads all level data
+    void loadLevel();
+
+    // Getters
+    inline std::string name() {return name_; };
+    inline std::string description() {return description_; };
+    inline std::string image() {return image_; };
+  private:
+    //! Level information
+    std::string name_;
+    std::string description_;
+    std::string image_;
+    std::string loadingBackgroundColor_;
+    std::string loadingBackgroundImage_;
+    std::string loadingBarImage_;
+    std::string loadingBarTop_;
+    std::string loadingBarLeft_;
+    std::string loadingBarWidth_;
+    std::string loadingBarHeight_;
+
+    //! Set to true if it was possible to load the level file
+    bool valid_;
+
+    // Xml-Stuff
+    TiXmlDocument doc_;
+    TiXmlElement *rootElement_;
+  };
+}
+
+#endif /* _LevelLoader_H__ */
Index: code/trunk/src/asylum/loader/LoaderPrereqs.h
===================================================================
--- code/trunk/src/asylum/loader/LoaderPrereqs.h	(revision 1024)
+++ code/trunk/src/asylum/loader/LoaderPrereqs.h	(revision 1024)
@@ -0,0 +1,70 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Reto Grieder
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+ @file  OrxonoxPrereq.cc
+ @brief Contains all the necessary forward declarations for all classes, structs and enums.
+ */
+
+#ifndef _LoaderPrereqs_H__
+#define _LoaderPrereqs_H__
+
+#include "orxonox/OrxonoxPlatform.h"
+
+// Compile loader directly in orxonox executable, if on Visual Studio platform
+#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC && defined(ORXONOX_SHARED_BUILD)
+#  define LOADER_SHARED_BUILD
+#endif
+
+//-----------------------------------------------------------------------
+// Shared library settings
+//-----------------------------------------------------------------------
+#if (ORXONOX_PLATFORM == ORXONOX_PLATFORM_WIN32) && !defined( LOADER_STATIC_BUILD )
+#  ifdef LOADER_SHARED_BUILD
+#    define _LoaderExport __declspec(dllexport)
+#  else
+#    if defined( __MINGW32__ )
+#      define _LoaderExport
+#    else
+#      define _LoaderExport __declspec(dllimport)
+#    endif
+#  endif
+#elif defined ( ORXONOX_GCC_VISIBILITY )
+#  define _LoaderExport  __attribute__ ((visibility("default")))
+#else
+#  define _LoaderExport
+#endif
+
+
+//-----------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------
+namespace loader {
+  class LevelLoader;
+}
+
+#endif /* _LoaderPrereqs_H__ */
Index: code/trunk/src/asylum/network/PacketBufferTestExt.cc
===================================================================
--- code/trunk/src/asylum/network/PacketBufferTestExt.cc	(revision 1024)
+++ code/trunk/src/asylum/network/PacketBufferTestExt.cc	(revision 1024)
@@ -0,0 +1,81 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   License notice:
+*
+*   This program is free software; you can redistribute it and/or
+*   modify it under the terms of the GNU General Public License
+*   as published by the Free Software Foundation; either version 2
+*   of the License, or (at your option) any later version.
+*
+*   This program is distributed in the hope that it will be useful,
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*   GNU General Public License for more details.
+*
+*   You should have received a copy of the GNU General Public License
+*   along with this program; if not, write to the Free Software
+*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*
+*   Author:
+*      ...
+*   Co-authors:
+*      ...
+*
+*/
+
+#include <string>
+#include <iostream>
+#include <enet/enet.h>
+#include <boost/thread/thread.hpp>
+
+#include "util/Sleep.h"
+#include "PacketBuffer.h"
+#include "PacketBuffer.cc"
+
+using namespace network;
+
+void write(PacketBuffer *test){
+  ENetEvent event;
+  ENetPacket *packet;
+  if(test->isEmpty())
+    std::cout << "empty buffer" << std::endl;
+  for(int i=0; i<10; i++){
+    std::string temp = "packet ";
+    packet = enet_packet_create("packet", strlen("packet ")+1,
+      ENET_PACKET_FLAG_RELIABLE);
+    std::cout << i << ": pushing " << packet->data << std::endl;
+    event.packet=packet;
+    test->push(&event);
+    if(i==5)
+      usleep(200000);
+  }
+  test->setClosed(true);
+  return;
+}
+
+void read(PacketBuffer *test){
+  //test->print();
+  // exit if the queue is closed and empty
+  while(!test->isClosed() || !test->isEmpty()){
+    // only pop if the queue isn't empty
+    while(!test->isEmpty()){
+      std::cout << "We popped the value " << test->pop()->data << std::endl;
+    }
+  }
+  return;
+}
+
+
+int main(int argc, char **argv[]){
+  PacketBuffer test = PacketBuffer();
+  boost::thread thrd1(boost::bind(&write, &test));
+  boost::thread thrd2(boost::bind(&read, &test));
+
+  thrd1.join();
+  thrd2.join();
+
+  return 0;
+}
+
Index: code/trunk/src/asylum/orxonox/AIClass.h
===================================================================
--- code/trunk/src/asylum/orxonox/AIClass.h	(revision 1024)
+++ code/trunk/src/asylum/orxonox/AIClass.h	(revision 1024)
@@ -0,0 +1,95 @@
+#ifndef _AIClass_H__
+#define _AIClass_H__
+
+#include "util/Vector3.h"
+
+namespace orxonox
+{
+  class AIPilot
+  {
+
+
+    /*
+    TASKS:                                                                         Requirements:
+
+    - Change actual Speed to required Speed                                          - Speed as Vector3 , spaceship(?) -> pilot attached to it or vice versa (?)
+    - Open fire, if allowed                                                          - Status of the fleet commander -> allowed to fire , fly etc.
+    - differ friend, ally and enemy                                                  - Lists of ships + who controls them
+    - report ship status to fleet commander                                          - Call own ship status -> ammo, damage etc.
+
+
+
+    */
+
+  public:
+    Vector3 speed;
+
+
+
+    //default constructor
+    AIPilot() {
+      speed = (1,0,0);
+    }
+
+    Vector3 steer(Vector3 reqSpeed) {
+      Quaternion sRotation = speed.getRotationTo(reqSpeed);
+      Radian rollarc = sRotation.getRoll();
+      Radian pitcharc = sRotation.getPitch();
+      Radian yawarc = sRotation.getYaw();
+      return Vector3((float)rollarc.valueRadians(), (float)pitcharc.valueRadians(), (float)yawarc.valueRadians());
+    }
+
+
+  };
+
+  class AIFleetCommander : public  AIPilot {
+
+
+    /*
+    TASKS:                                                                       Requirements:
+
+    - Same tasks as AI_Pilot (only if shipcontrol)                                   - Same as AI_Pilot
+    - Calculate required Speed for any ship in Fleet                                 - Knows all calculation functions
+    - Request fleet status and report to commander                                   - Better list of all ships -> more data for fleet ships
+
+
+
+    */
+
+  public:
+
+
+    //default constructor
+    AIFleetCommander() {
+
+    }
+
+
+
+  };
+
+  class AICommander : public  AIFleetCommander
+  {
+
+
+    /*
+    TASKS:                                                                     Requirements:
+
+    - Decide on general tactics                                                      - List of general fleet status + all possible information on enemies
+    - Save and load tactical data (?)                                                - files with tactical data, e.g. success of strategy etc.
+
+
+
+    */
+
+    //default constructor
+    AICommander() {
+
+    }
+
+
+  };
+
+}
+
+#endif /* _AIClass_H__ */
Index: code/trunk/src/asylum/orxonox/Arrival.h
===================================================================
--- code/trunk/src/asylum/orxonox/Arrival.h	(revision 1024)
+++ code/trunk/src/asylum/orxonox/Arrival.h	(revision 1024)
@@ -0,0 +1,82 @@
+
+// Arrival Class
+
+
+#ifndef _Arrival_H__
+#define _Arrival_H__
+
+#include "util/Math.h"
+
+namespace orxonox
+{
+  class Arrival
+  {
+  public:
+    Vector3 location;           //!< locationvector of the element
+    Vector3 speed;              //!< speedvector of the element
+    Vector3 acceleration;       //!< accelerationvector of the element
+    Vector3 target;             //!< target to arrive
+    int accelerationForwards;   //!< from steering-interface
+    int MaxSpeed;               //!< from steering-interface
+
+
+    Arrival() {
+      acceleration = (0,0,0);
+      speed = (0,0,0);
+      location = (0,0,0);
+      target = (0,0,0);
+    }
+
+    Arrival(Vector3 location_, Vector3 speed_, Vector3 acceleration_, Vector3 target_) {
+      acceleration = acceleration_;
+      speed = speed_;
+      location = location_;
+      target = target_;
+    }
+
+    void setValues(Vector3 location_, Vector3 speed_, Vector3 acceleration_, Vector3 target_) {
+      acceleration = acceleration_;
+      speed = speed_;
+      location = location_;
+      target = target_;
+    }
+
+    void setTarget(Vector3 target_) {
+      setValues(this->location, this->speed, this->acceleration, target_);
+    }
+
+    Vector3 getDirection() {
+      Vector3 direction = target-location;
+    }
+
+    double relativeDirectApproach() {
+      // Maxspeed / accelerationForwards = time needed to break with max acceleration
+      // 2*getDistance()length/(MaxSpeed/accelerationForwards)^2 = required acceleration to arrive at the target with speed = 0
+      return (accelerationForwards / (2*getDirection().length() / ((MaxSpeed/accelerationForwards)*(MaxSpeed/accelerationForwards))) );
+    }
+
+    void Approach() {
+      Quaternion rotation = Quaternion(0,0,0,0);
+      if (relativeDirectApproach() > 1)
+      {
+        float length = speed.length();
+        speed = (speed+getDirection());
+        speed.normalise();
+        speed = speed*length;
+        if (relativeDirectApproach() > 4)
+        {
+          //accelerate
+        }
+        else
+        {
+          // speed will stay constant
+        }
+      }
+      else {
+      }
+    }
+
+  };
+}
+
+#endif /* _Arrival_H__ */
Index: code/trunk/src/asylum/orxonox/Flocking.h
===================================================================
--- code/trunk/src/asylum/orxonox/Flocking.h	(revision 1024)
+++ code/trunk/src/asylum/orxonox/Flocking.h	(revision 1024)
@@ -0,0 +1,140 @@
+
+//Headerfile: Flocking.h
+
+#ifndef _Flocking_H__
+#define _Flocking_H__
+
+#include "util/Math.h"
+
+namespace orxonox
+{
+  class Element // An element that flocks
+  {
+
+  public:
+    Vector3 location;                       //!< locationvector of the element
+    Vector3 speed;                          //!< speedvector of the element
+    Vector3 acceleration;                   //!< accelerationvector of the element
+    bool movable;                                 //!< movability of the element, (false) gives the possiblity that an object can`t be moved by flocking but still gets into the calculation
+    static int const SEPERATIONDISTANCE = 300;    //!< detectionradius of seperation
+    static int const ALIGNMENTDISTANCE = 300;     //!< detectionradius of alignment
+    static int const COHESIONDISTANCE = 5000;     //!< detectionradius of cohesion
+    static int const ANZELEMENTS = 9;             //!< number of elements
+
+    //! default constructor
+    Element() {
+      acceleration = Vector3(0,0,0);
+      speed = Vector3(0,0,0);
+      location = Vector3(0,0,0);
+      movable = true;
+    }
+
+    /** constructor
+    *  @param location_ sets locationvector of the element
+    *  @param speed_ sets speedvector of the element
+    *  @param acceleration_ sets accelerationvector of the element
+    *  @param movable_ sets movability of the element
+    */
+    Element(Vector3 location_, Vector3 speed_, Vector3 acceleration_, bool movable_) {
+      acceleration = acceleration_;
+      speed = speed_;
+      location = location_;
+      movable = movable_;
+    }
+
+    //! function to chance values of an element
+    void setValues(Vector3 location_, Vector3 speed_, Vector3 acceleration_, bool movable_) {
+      acceleration = acceleration_;
+      speed = speed_;
+      location = location_;
+      movable = movable_;
+    }
+
+    /** calculates the distance between the element and an other point given by temp
+    * @param e remote object to calculate distance to
+    */
+    float getDistance(Element e) {
+      Vector3 distance = e.location - location;
+      return distance.length();
+    }
+
+    //! updates the data of an element
+    void update(Element arrayOfElements[]) {
+      if (this->movable == true) {calculateAcceleration(arrayOfElements);} //if element is movable, calculate acceleration
+    }
+
+    //! calculates the new acceleration of an element
+    void calculateAcceleration(Element arrayOfElements[]) {
+      acceleration = separation(arrayOfElements) + alignment(arrayOfElements) + cohesion(arrayOfElements);  //acceleration consisting of flocking-functions
+    }
+
+    //! separation-function (keep elements separated, avoid crashs)
+    Vector3 separation(Element arrayOfElements[]) {
+      using namespace Ogre;
+      Vector3 steering = Vector3(0,0,0); //steeringvector
+      Vector3 inverseDistance = Vector3(0,0,0);  //vector pointing away from possible collisions
+      int numberOfNeighbour = 0;  //number of observed neighbours
+      float distance = 0;  // distance to the actual element
+      for(int i=0; i<ANZELEMENTS; i++) {  //go through all elements
+        Element actual = arrayOfElements[i];  //get the actual element
+        distance = getDistance(actual);  //get distance between this and actual
+        if ((distance > 0) && (distance < SEPERATIONDISTANCE)) {  //do only if actual is inside detectionradius
+          inverseDistance = (0,0,0);
+          inverseDistance = location-actual.location;  //calculate the distancevector heading towards this
+          //adaptation of the inverseDistance to the distance
+          if ((distance < 200) && (distance >= 120)) {inverseDistance = 2*inverseDistance;}
+          if ((distance < 120) && (distance >= 80)) {inverseDistance = 5*inverseDistance;}
+          if ((distance < 80) && (distance >= 40)) {inverseDistance = 10*inverseDistance;}
+          if ((distance < 40) && (distance > 0)) {inverseDistance = 10*inverseDistance;}
+          steering = steering + inverseDistance;  //add up all significant steeringvectors
+          numberOfNeighbour++;  //counts the elements inside the detectionradius
+        }
+      }
+      if(numberOfNeighbour > 0) { steering = steering / (float)numberOfNeighbour; }  //devide the sum of steeringvectors by the number of elements -> separation steeringvector
+      return steering;
+    }
+
+    //! alignment-function (lead elements to the same heading)
+    Vector3 alignment(Element arrayOfElements[]) {
+      using namespace Ogre;
+      Vector3 steering = Vector3(0,0,0); //steeringvector
+      int numberOfNeighbour = 0;  //number of observed neighbours
+      float distance = 0;
+      //go through all elements
+      for(int i=0; i<ANZELEMENTS; i++) {  //just working with 3 elements at the moment
+        Element actual = arrayOfElements[i];  //get the actual element
+        float distance = getDistance(actual);  //get distance between this and actual
+        if ((distance > 0) && (distance < ALIGNMENTDISTANCE)) {  //check if actual element is inside detectionradius
+          steering = steering + actual.speed;  //add up all speedvectors inside the detectionradius
+          numberOfNeighbour++;  //counts the elements inside the detectionradius
+        }
+      }
+      if(numberOfNeighbour > 0) { steering = steering / (float)numberOfNeighbour; }  //devide the sum of steeringvectors by the number of elements -> alignment steeringvector
+      return steering;
+    }
+
+    //! cohseion-function (keep elements close to each other)
+    Vector3 cohesion(Element arrayOfElements[]) {
+      using namespace Ogre;
+      Vector3 steering = Vector3(0,0,0); //steeringvector
+      int numberOfNeighbour = 0;  //number of observed neighbours
+      float distance = 0;
+      //go through all elements
+      for(int i=0; i<ANZELEMENTS; i++) {  //just working with 3 elements at the moment
+        Element actual = arrayOfElements[i];  //get the actual element
+        float distance = getDistance(actual);  //get distance between this and actual
+        if ((distance > 0) && (distance < COHESIONDISTANCE)) {  //check if actual element is inside detectionradius
+          steering = steering + actual.location;  //add up all locations of elements inside the detectionradius
+          numberOfNeighbour++;  //counts the elements inside the detectionradius
+        }
+      }
+      if(numberOfNeighbour > 0) {
+        steering = steering  / (float)numberOfNeighbour;  //devide the sum steeringvector by the number of elements -> cohesion steeringvector
+        steering = steering - this->location;  //transform the vector for the ship
+      }
+      return steering;
+    }
+  };     //End of class Element
+}
+
+#endif /* _Flocking_H__*/
Index: code/trunk/src/asylum/orxonox/InputManager.cc
===================================================================
--- code/trunk/src/asylum/orxonox/InputManager.cc	(revision 1024)
+++ code/trunk/src/asylum/orxonox/InputManager.cc	(revision 1024)
@@ -0,0 +1,390 @@
+#include "OrxonoxStableHeaders.h"
+
+#include "InputManager.h"
+
+InputManager *InputManager::mInputManager;
+
+InputManager::InputManager( void ) :
+    mMouse( 0 ), mKeyboard( 0 ), mInputSystem( 0 ) {}
+
+InputManager::~InputManager( void ) {
+  if( mInputSystem ) {
+    if( mMouse ) {
+      mInputSystem->destroyInputObject( mMouse );
+      mMouse = 0;
+    }
+
+    if( mKeyboard ) {
+      mInputSystem->destroyInputObject( mKeyboard );
+      mKeyboard = 0;
+    }
+
+    if( mJoysticks.size() > 0 ) {
+      itJoystick    = mJoysticks.begin();
+      itJoystickEnd = mJoysticks.end();
+      for(; itJoystick != itJoystickEnd; ++itJoystick ) {
+        mInputSystem->destroyInputObject( *itJoystick );
+      }
+
+      mJoysticks.clear();
+    }
+
+        // If you use OIS1.0RC1 or above, uncomment this line
+        // and comment the line below it
+    mInputSystem->destroyInputSystem( mInputSystem );
+        //mInputSystem->destroyInputSystem();
+    mInputSystem = 0;
+
+        // Clear Listeners
+    mKeyListeners.clear();
+    mMouseListeners.clear();
+    mJoystickListeners.clear();
+  }
+}
+
+void InputManager::initialise( Ogre::RenderWindow *renderWindow ) {
+  if( !mInputSystem ) {
+        // Setup basic variables
+    OIS::ParamList paramList;
+    size_t windowHnd = 0;
+    std::ostringstream windowHndStr;
+
+        // Get window handle
+    renderWindow->getCustomAttribute( "WINDOW", &windowHnd );
+
+        // Fill parameter list
+    windowHndStr << (unsigned int) windowHnd;
+    paramList.insert( std::make_pair( std::string( "WINDOW" ), windowHndStr.str() ) );
+
+        // Create inputsystem
+    mInputSystem = OIS::InputManager::createInputSystem( paramList );
+
+        // If possible create a buffered keyboard
+        // (note: if below line doesn't compile, try:  if (mInputSystem->getNumberOfDevices(OIS::OISKeyboard) > 0) {
+      if( mInputSystem->numKeyboards() > 0 ) {
+//     if (mInputSystem->getNumberOfDevices(OIS::OISKeyboard) > 0) {
+      mKeyboard = static_cast<OIS::Keyboard*>( mInputSystem->createInputObject( OIS::OISKeyboard, true ) );
+      mKeyboard->setEventCallback( this );
+    }
+
+        // If possible create a buffered mouse
+        // (note: if below line doesn't compile, try:  if (mInputSystem->getNumberOfDevices(OIS::OISMouse) > 0) {
+      if( mInputSystem->numMice() > 0 ) {
+//     if (mInputSystem->getNumberOfDevices(OIS::OISMouse) > 0) {
+      mMouse = static_cast<OIS::Mouse*>( mInputSystem->createInputObject( OIS::OISMouse, true ) );
+      mMouse->setEventCallback( this );
+
+            // Get window size
+      unsigned int width, height, depth;
+      int left, top;
+      renderWindow->getMetrics( width, height, depth, left, top );
+
+            // Set mouse region
+      this->setWindowExtents( width, height );
+    }
+
+        // If possible create all joysticks in buffered mode
+        // (note: if below line doesn't compile, try:  if (mInputSystem->getNumberOfDevices(OIS::OISJoyStick) > 0) {
+    if( mInputSystem->numJoySticks() > 0 ) {
+//     if (mInputSystem->getNumberOfDevices(OIS::OISJoyStick) > 0) {
+       mJoysticks.resize( mInputSystem->numJoySticks() );
+//       mJoysticks.resize( mInputSystem->getNumberOfDevices(OIS::OISJoyStick) );
+
+      itJoystick    = mJoysticks.begin();
+      itJoystickEnd = mJoysticks.end();
+      for(; itJoystick != itJoystickEnd; ++itJoystick ) {
+        (*itJoystick) = static_cast<OIS::JoyStick*>( mInputSystem->createInputObject( OIS::OISJoyStick, true ) );
+        (*itJoystick)->setEventCallback( this );
+      }
+    }
+  }
+}
+
+void InputManager::capture( void ) {
+    // Need to capture / update each device every frame
+  if( mMouse ) {
+    mMouse->capture();
+  }
+
+  if( mKeyboard ) {
+    mKeyboard->capture();
+  }
+
+  if( mJoysticks.size() > 0 ) {
+    itJoystick    = mJoysticks.begin();
+    itJoystickEnd = mJoysticks.end();
+    for(; itJoystick != itJoystickEnd; ++itJoystick ) {
+      (*itJoystick)->capture();
+    }
+  }
+}
+
+void InputManager::addKeyListener( OIS::KeyListener *keyListener, const std::string& instanceName ) {
+  if( mKeyboard ) {
+        // Check for duplicate items
+    itKeyListener = mKeyListeners.find( instanceName );
+    if( itKeyListener == mKeyListeners.end() ) {
+      mKeyListeners[ instanceName ] = keyListener;
+    }
+    else {
+            // Duplicate Item
+    }
+  }
+}
+
+void InputManager::addMouseListener( OIS::MouseListener *mouseListener, const std::string& instanceName ) {
+  if( mMouse ) {
+        // Check for duplicate items
+    itMouseListener = mMouseListeners.find( instanceName );
+    if( itMouseListener == mMouseListeners.end() ) {
+      mMouseListeners[ instanceName ] = mouseListener;
+    }
+    else {
+            // Duplicate Item
+    }
+  }
+}
+
+void InputManager::addJoystickListener( OIS::JoyStickListener *joystickListener, const std::string& instanceName ) {
+  if( mJoysticks.size() > 0 ) {
+        // Check for duplicate items
+    itJoystickListener = mJoystickListeners.find( instanceName );
+    if( itJoystickListener == mJoystickListeners.end() ) {
+      mJoystickListeners[ instanceName ] = joystickListener;
+    }
+    else {
+            // Duplicate Item
+    }
+  }
+}
+
+void InputManager::removeKeyListener( const std::string& instanceName ) {
+    // Check if item exists
+  itKeyListener = mKeyListeners.find( instanceName );
+  if( itKeyListener != mKeyListeners.end() ) {
+    mKeyListeners.erase( itKeyListener );
+  }
+  else {
+        // Doesn't Exist
+  }
+}
+
+void InputManager::removeMouseListener( const std::string& instanceName ) {
+    // Check if item exists
+  itMouseListener = mMouseListeners.find( instanceName );
+  if( itMouseListener != mMouseListeners.end() ) {
+    mMouseListeners.erase( itMouseListener );
+  }
+  else {
+        // Doesn't Exist
+  }
+}
+
+void InputManager::removeJoystickListener( const std::string& instanceName ) {
+    // Check if item exists
+  itJoystickListener = mJoystickListeners.find( instanceName );
+  if( itJoystickListener != mJoystickListeners.end() ) {
+    mJoystickListeners.erase( itJoystickListener );
+  }
+  else {
+        // Doesn't Exist
+  }
+}
+
+void InputManager::removeKeyListener( OIS::KeyListener *keyListener ) {
+  itKeyListener    = mKeyListeners.begin();
+  itKeyListenerEnd = mKeyListeners.end();
+  for(; itKeyListener != itKeyListenerEnd; ++itKeyListener ) {
+    if( itKeyListener->second == keyListener ) {
+      mKeyListeners.erase( itKeyListener );
+      break;
+    }
+  }
+}
+
+void InputManager::removeMouseListener( OIS::MouseListener *mouseListener ) {
+  itMouseListener    = mMouseListeners.begin();
+  itMouseListenerEnd = mMouseListeners.end();
+  for(; itMouseListener != itMouseListenerEnd; ++itMouseListener ) {
+    if( itMouseListener->second == mouseListener ) {
+      mMouseListeners.erase( itMouseListener );
+      break;
+    }
+  }
+}
+
+void InputManager::removeJoystickListener( OIS::JoyStickListener *joystickListener ) {
+  itJoystickListener    = mJoystickListeners.begin();
+  itJoystickListenerEnd = mJoystickListeners.end();
+  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
+    if( itJoystickListener->second == joystickListener ) {
+      mJoystickListeners.erase( itJoystickListener );
+      break;
+    }
+  }
+}
+
+void InputManager::removeAllListeners( void ) {
+  mKeyListeners.clear();
+  mMouseListeners.clear();
+  mJoystickListeners.clear();
+}
+
+void InputManager::removeAllKeyListeners( void ) {
+  mKeyListeners.clear();
+}
+
+void InputManager::removeAllMouseListeners( void ) {
+  mMouseListeners.clear();
+}
+
+void InputManager::removeAllJoystickListeners( void ) {
+  mJoystickListeners.clear();
+}
+
+void InputManager::setWindowExtents( int width, int height ) {
+    // Set mouse region (if window resizes, we should alter this to reflect as well)
+  const OIS::MouseState &mouseState = mMouse->getMouseState();
+  mouseState.width  = width;
+  mouseState.height = height;
+}
+
+OIS::Mouse* InputManager::getMouse( void ) {
+  return mMouse;
+}
+
+OIS::Keyboard* InputManager::getKeyboard( void ) {
+  return mKeyboard;
+}
+
+OIS::JoyStick* InputManager::getJoystick( unsigned int index ) {
+    // Make sure it's a valid index
+  if( index < mJoysticks.size() ) {
+    return mJoysticks[ index ];
+  }
+
+  return 0;
+}
+
+int InputManager::getNumOfJoysticks( void ) {
+    // Cast to keep compiler happy ^^
+  return (int) mJoysticks.size();
+}
+
+bool InputManager::keyPressed( const OIS::KeyEvent &e ) {
+  itKeyListener    = mKeyListeners.begin();
+  itKeyListenerEnd = mKeyListeners.end();
+  for(; itKeyListener != itKeyListenerEnd; ++itKeyListener ) {
+    if(!itKeyListener->second->keyPressed( e ))
+      break;
+  }
+
+  return true;
+}
+
+bool InputManager::keyReleased( const OIS::KeyEvent &e ) {
+  itKeyListener    = mKeyListeners.begin();
+  itKeyListenerEnd = mKeyListeners.end();
+  for(; itKeyListener != itKeyListenerEnd; ++itKeyListener ) {
+    if(!itKeyListener->second->keyReleased( e ))
+      break;
+  }
+
+  return true;
+}
+
+bool InputManager::mouseMoved( const OIS::MouseEvent &e ) {
+  itMouseListener    = mMouseListeners.begin();
+  itMouseListenerEnd = mMouseListeners.end();
+  for(; itMouseListener != itMouseListenerEnd; ++itMouseListener ) {
+    if(!itMouseListener->second->mouseMoved( e ))
+      break;
+  }
+
+  return true;
+}
+
+bool InputManager::mousePressed( const OIS::MouseEvent &e, OIS::MouseButtonID id ) {
+  itMouseListener    = mMouseListeners.begin();
+  itMouseListenerEnd = mMouseListeners.end();
+  for(; itMouseListener != itMouseListenerEnd; ++itMouseListener ) {
+    if(!itMouseListener->second->mousePressed( e, id ))
+      break;
+  }
+
+  return true;
+}
+
+bool InputManager::mouseReleased( const OIS::MouseEvent &e, OIS::MouseButtonID id ) {
+  itMouseListener    = mMouseListeners.begin();
+  itMouseListenerEnd = mMouseListeners.end();
+  for(; itMouseListener != itMouseListenerEnd; ++itMouseListener ) {
+    if(!itMouseListener->second->mouseReleased( e, id ))
+      break;
+  }
+
+  return true;
+}
+
+bool InputManager::povMoved( const OIS::JoyStickEvent &e, int pov ) {
+  itJoystickListener    = mJoystickListeners.begin();
+  itJoystickListenerEnd = mJoystickListeners.end();
+  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
+    if(!itJoystickListener->second->povMoved( e, pov ))
+      break;
+  }
+
+  return true;
+}
+
+bool InputManager::axisMoved( const OIS::JoyStickEvent &e, int axis ) {
+  itJoystickListener    = mJoystickListeners.begin();
+  itJoystickListenerEnd = mJoystickListeners.end();
+  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
+    if(!itJoystickListener->second->axisMoved( e, axis ))
+      break;
+  }
+
+  return true;
+}
+
+bool InputManager::sliderMoved( const OIS::JoyStickEvent &e, int sliderID ) {
+  itJoystickListener    = mJoystickListeners.begin();
+  itJoystickListenerEnd = mJoystickListeners.end();
+  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
+    if(!itJoystickListener->second->sliderMoved( e, sliderID ))
+      break;
+  }
+
+  return true;
+}
+
+bool InputManager::buttonPressed( const OIS::JoyStickEvent &e, int button ) {
+  itJoystickListener    = mJoystickListeners.begin();
+  itJoystickListenerEnd = mJoystickListeners.end();
+  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
+    if(!itJoystickListener->second->buttonPressed( e, button ))
+      break;
+  }
+
+  return true;
+}
+
+bool InputManager::buttonReleased( const OIS::JoyStickEvent &e, int button ) {
+  itJoystickListener    = mJoystickListeners.begin();
+  itJoystickListenerEnd = mJoystickListeners.end();
+  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
+    if(!itJoystickListener->second->buttonReleased( e, button ))
+      break;
+  }
+
+  return true;
+}
+
+InputManager* InputManager::getSingletonPtr( void ) {
+  if( !mInputManager ) {
+    mInputManager = new InputManager();
+  }
+
+  return mInputManager;
+}
Index: code/trunk/src/asylum/orxonox/InputManager.h
===================================================================
--- code/trunk/src/asylum/orxonox/InputManager.h	(revision 1024)
+++ code/trunk/src/asylum/orxonox/InputManager.h	(revision 1024)
@@ -0,0 +1,93 @@
+#ifndef _InputManager_H__
+#define _InputManager_H__
+
+#ifdef WIN32
+#include <OIS/OISMouse.h>
+#include <OIS/OISKeyboard.h>
+#include <OIS/OISJoyStick.h>
+#include <OIS/OISInputManager.h>
+#else
+#include <OISMouse.h>
+#include <OISKeyboard.h>
+#include <OISJoyStick.h>
+#include <OISInputManager.h>
+#endif
+
+#include <OgreRenderWindow.h>
+
+#include "OrxonoxPrereqs.h"
+
+class _OrxonoxExport InputManager : public OIS::KeyListener, public OIS::MouseListener, public OIS::JoyStickListener {
+  public:
+    virtual ~InputManager( void );
+
+    void initialise( Ogre::RenderWindow *renderWindow );
+    void capture( void );
+
+    void addKeyListener( OIS::KeyListener *keyListener, const std::string& instanceName );
+    void addMouseListener( OIS::MouseListener *mouseListener, const std::string& instanceName );
+    void addJoystickListener( OIS::JoyStickListener *joystickListener, const std::string& instanceName );
+
+    void removeKeyListener( const std::string& instanceName );
+    void removeMouseListener( const std::string& instanceName );
+    void removeJoystickListener( const std::string& instanceName );
+
+    void removeKeyListener( OIS::KeyListener *keyListener );
+    void removeMouseListener( OIS::MouseListener *mouseListener );
+    void removeJoystickListener( OIS::JoyStickListener *joystickListener );
+
+    void removeAllListeners( void );
+    void removeAllKeyListeners( void );
+    void removeAllMouseListeners( void );
+    void removeAllJoystickListeners( void );
+
+    void setWindowExtents( int width, int height );
+
+    OIS::Mouse*    getMouse( void );
+    OIS::Keyboard* getKeyboard( void );
+    OIS::JoyStick* getJoystick( unsigned int index );
+
+    int getNumOfJoysticks( void );
+
+    static InputManager* getSingletonPtr( void );
+  private:
+    InputManager( void );
+    InputManager( const InputManager& ) { }
+    InputManager & operator = ( const InputManager& );
+
+    bool keyPressed( const OIS::KeyEvent &e );
+    bool keyReleased( const OIS::KeyEvent &e );
+
+    bool mouseMoved( const OIS::MouseEvent &e );
+    bool mousePressed( const OIS::MouseEvent &e, OIS::MouseButtonID id );
+    bool mouseReleased( const OIS::MouseEvent &e, OIS::MouseButtonID id );
+
+    bool povMoved( const OIS::JoyStickEvent &e, int pov );
+    bool axisMoved( const OIS::JoyStickEvent &e, int axis );
+    bool sliderMoved( const OIS::JoyStickEvent &e, int sliderID );
+    bool buttonPressed( const OIS::JoyStickEvent &e, int button );
+    bool buttonReleased( const OIS::JoyStickEvent &e, int button );
+
+    OIS::Mouse        *mMouse;
+    OIS::Keyboard     *mKeyboard;
+    OIS::InputManager *mInputSystem;
+
+    std::vector<OIS::JoyStick*> mJoysticks;
+    std::vector<OIS::JoyStick*>::iterator itJoystick;
+    std::vector<OIS::JoyStick*>::iterator itJoystickEnd;
+
+    std::map<std::string, OIS::KeyListener*> mKeyListeners;
+    std::map<std::string, OIS::MouseListener*> mMouseListeners;
+    std::map<std::string, OIS::JoyStickListener*> mJoystickListeners;
+
+    std::map<std::string, OIS::KeyListener*>::iterator itKeyListener;
+    std::map<std::string, OIS::MouseListener*>::iterator itMouseListener;
+    std::map<std::string, OIS::JoyStickListener*>::iterator itJoystickListener;
+
+    std::map<std::string, OIS::KeyListener*>::iterator itKeyListenerEnd;
+    std::map<std::string, OIS::MouseListener*>::iterator itMouseListenerEnd;
+    std::map<std::string, OIS::JoyStickListener*>::iterator itJoystickListenerEnd;
+
+    static InputManager *mInputManager;
+};
+#endif /* _InputManager_H__ */
Index: code/trunk/src/asylum/orxonox/SpaceshipSteering.cc
===================================================================
--- code/trunk/src/asylum/orxonox/SpaceshipSteering.cc	(revision 1024)
+++ code/trunk/src/asylum/orxonox/SpaceshipSteering.cc	(revision 1024)
@@ -0,0 +1,233 @@
+/*
+*   ORXONOX - the hottest 3D action shooter ever to exist
+*
+*
+*   License notice:
+*
+*   This program is free software; you can redistribute it and/or
+*   modify it under the terms of the GNU General Public License
+*   as published by the Free Software Foundation; either version 2
+*   of the License, or (at your option) any later version.
+*
+*   This program is distributed in the hope that it will be useful,
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*   GNU General Public License for more details.
+*
+*   You should have received a copy of the GNU General Public License
+*   along with this program; if not, write to the Free Software
+*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*
+*   Author:
+*      ...
+*   Co-authors:
+*      ...
+*
+*/
+
+#include "OrxonoxStableHeaders.h"
+
+#include <OgreNode.h>
+#include <OgreSceneNode.h>
+
+#include "core/Debug.h"
+#include "util/Math.h"
+#include "SpaceshipSteering.h"
+
+namespace orxonox
+{
+
+  SpaceshipSteering::SpaceshipSteering(float maxSpeedForward, float
+    maxSpeedRotateUpDown, float maxSpeedRotateRightLeft, float
+    maxSpeedLoopRightLeft)
+  {
+
+      COUT(3) << "Info: Steering was loaded" << std::endl;
+      moveForward_ = 0;
+      rotateUp_ = 0;
+      rotateDown_ = 0;
+      rotateRight_ = 0;
+      rotateLeft_ = 0;
+      loopRight_ = 0;
+      loopLeft_ = 0;
+      brakeForward_ = 0;
+      brakeRotate_ = 0;
+      brakeLoop_ = 0;
+      speedForward_ = 0;
+      speedRotateUpDown_ = 0;
+      speedRotateRightLeft_ = 0;
+      speedLoopRightLeft_ = 0;
+      maxSpeedForward_ = maxSpeedForward;
+      maxSpeedRotateUpDown_ = maxSpeedRotateUpDown;
+      maxSpeedRotateRightLeft_ = maxSpeedRotateRightLeft;
+      maxSpeedLoopRightLeft_ = maxSpeedLoopRightLeft;
+      accelerationForward_ = 0;
+      accelerationRotateUpDown_ = 0;
+      accelerationRotateRightLeft_ = 0;
+      accelerationLoopRightLeft_ = 0;
+  }
+
+  void SpaceshipSteering::tick(float time)
+  {
+
+    if(moveForward_ > 0) {
+      accelerationForward_ = moveForward_;
+      if(speedForward_ < maxSpeedForward_)
+        speedForward_ += accelerationForward_*time;
+      if(speedForward_ > maxSpeedForward_)
+        speedForward_ = maxSpeedForward_;
+    }
+    if(moveForward_ <= 0) {
+      accelerationForward_ = brakeForward_;
+      if(speedForward_ > 0)
+        speedForward_ -= accelerationForward_*time;
+      if(speedForward_ < 0)
+        speedForward_ = 0;
+    }
+
+    if(rotateUp_ > 0) {
+      accelerationRotateUpDown_ = rotateUp_;
+      if(speedRotateUpDown_ < maxSpeedRotateUpDown_)
+        speedRotateUpDown_ += accelerationRotateUpDown_*time;
+      if(speedRotateUpDown_ > maxSpeedRotateUpDown_)
+        speedRotateUpDown_ = maxSpeedRotateUpDown_;
+    }
+    if(rotateDown_ > 0) {
+      accelerationRotateUpDown_ = rotateDown_;
+      if(speedRotateUpDown_ > -maxSpeedRotateUpDown_)
+        speedRotateUpDown_ -= accelerationRotateUpDown_*time;
+      if(speedRotateUpDown_ < -maxSpeedRotateUpDown_)
+        speedRotateUpDown_ = -maxSpeedRotateUpDown_;
+    }
+    if(rotateUp_ == 0 && rotateDown_ == 0) {
+      accelerationRotateUpDown_ = brakeRotate_;
+      if(speedRotateUpDown_ > 0)
+        speedRotateUpDown_ -= accelerationRotateUpDown_*time;
+      if(speedRotateUpDown_ < 0)
+        speedRotateUpDown_ += accelerationRotateUpDown_*time;
+      if(fabsf(speedRotateUpDown_)<accelerationRotateUpDown_*time)
+        speedRotateUpDown_ = 0;
+    }
+
+    if(rotateRight_ > 0) {
+      accelerationRotateRightLeft_ = rotateRight_;
+      if(speedRotateRightLeft_ > -maxSpeedRotateRightLeft_)
+        speedRotateRightLeft_ -= accelerationRotateRightLeft_*time;
+      if(speedRotateRightLeft_ < -maxSpeedRotateRightLeft_)
+        speedRotateRightLeft_ = -maxSpeedRotateRightLeft_;
+    }
+    if(rotateLeft_ > 0) {
+      accelerationRotateRightLeft_ = rotateLeft_;
+      if(speedRotateRightLeft_ < maxSpeedRotateRightLeft_)
+        speedRotateRightLeft_ += accelerationRotateRightLeft_*time;
+      if(speedRotateRightLeft_ > maxSpeedRotateRightLeft_)
+        speedRotateRightLeft_ = maxSpeedRotateRightLeft_;
+    }
+    if(rotateRight_ == 0 && rotateLeft_ == 0) {
+      accelerationRotateRightLeft_ = brakeRotate_;
+      if(speedRotateRightLeft_ > 0)
+        speedRotateRightLeft_ -= accelerationRotateRightLeft_*time;
+      if(speedRotateRightLeft_ < 0)
+        speedRotateRightLeft_ += accelerationRotateRightLeft_*time;
+      if(fabsf(speedRotateRightLeft_)<accelerationRotateRightLeft_*time)
+        speedRotateRightLeft_ = 0;
+    }
+
+    if(loopRight_ > 0) {
+      accelerationLoopRightLeft_ = loopRight_;
+      if(speedLoopRightLeft_ < maxSpeedLoopRightLeft_)
+        speedLoopRightLeft_ += accelerationLoopRightLeft_*time;
+      if(speedLoopRightLeft_ > maxSpeedLoopRightLeft_)
+        speedLoopRightLeft_ = maxSpeedLoopRightLeft_;
+    }
+    if(loopLeft_ > 0) {
+      accelerationLoopRightLeft_ = loopLeft_;
+      if(speedLoopRightLeft_ > -maxSpeedLoopRightLeft_)
+        speedLoopRightLeft_ -= accelerationLoopRightLeft_*time;
+      if(speedLoopRightLeft_ < -maxSpeedLoopRightLeft_)
+        speedLoopRightLeft_ = -maxSpeedLoopRightLeft_;
+    }
+    if(loopLeft_ == 0 && loopRight_ == 0) {
+      accelerationLoopRightLeft_ = brakeLoop_;
+      if(speedLoopRightLeft_ > 0)
+        speedLoopRightLeft_ -= accelerationLoopRightLeft_*time;
+      if(speedLoopRightLeft_ < 0)
+        speedLoopRightLeft_ += accelerationLoopRightLeft_*time;
+      if(fabsf(speedLoopRightLeft_)<accelerationLoopRightLeft_*time)
+        speedLoopRightLeft_ = 0;
+    }
+
+    Vector3 transVector = Vector3::ZERO;
+    transVector.z = 1;
+    steeringNode_->translate(transVector*speedForward_*time,
+      Ogre::SceneNode::TS_LOCAL);
+    steeringNode_->pitch(Degree(speedRotateUpDown_*time),
+      Ogre::SceneNode::TS_LOCAL);
+    steeringNode_->yaw(Degree(speedRotateRightLeft_*time),
+      Ogre::SceneNode::TS_LOCAL);
+    steeringNode_->roll(Degree(speedLoopRightLeft_*time),
+      Ogre::SceneNode::TS_LOCAL);
+
+  }
+
+  void SpaceshipSteering::moveForward(float moveForward) {
+    moveForward_ = moveForward;
+  }
+
+  void SpaceshipSteering::rotateUp(float rotateUp) {
+    rotateUp_ = rotateUp;
+  }
+
+  void SpaceshipSteering::rotateDown(float rotateDown) {
+    rotateDown_ = rotateDown;
+  }
+
+  void SpaceshipSteering::rotateLeft(float rotateLeft) {
+    rotateLeft_ = rotateLeft;
+  }
+
+  void SpaceshipSteering::rotateRight(float rotateRight) {
+    rotateRight_ = rotateRight;
+  }
+
+  void SpaceshipSteering::loopLeft(float loopLeft) {
+    loopLeft_ = loopLeft;
+  }
+
+  void SpaceshipSteering::loopRight(float loopRight) {
+    loopRight_ = loopRight;
+  }
+
+  void SpaceshipSteering::brakeForward(float brakeForward) {
+    brakeForward_ = brakeForward;
+  }
+
+  void SpaceshipSteering::brakeRotate(float brakeRotate) {
+    brakeRotate_ = brakeRotate;
+  }
+
+  void SpaceshipSteering::brakeLoop(float brakeLoop) {
+    brakeLoop_ = brakeLoop;
+  }
+
+  void SpaceshipSteering::maxSpeedForward(float maxSpeedForward) {
+    maxSpeedForward_ = maxSpeedForward;
+  }
+
+  void SpaceshipSteering::maxSpeedRotateUpDown(float maxSpeedRotateUpDown) {
+    maxSpeedRotateUpDown_ = maxSpeedRotateUpDown;
+  }
+
+  void SpaceshipSteering::maxSpeedRotateRightLeft(float maxSpeedRotateRightLeft) {
+    maxSpeedRotateRightLeft_ = maxSpeedRotateRightLeft;
+  }
+
+  void SpaceshipSteering::maxSpeedLoopRightLeft(float maxSpeedLoopRightLeft) {
+    maxSpeedLoopRightLeft_ = maxSpeedLoopRightLeft;
+  }
+
+  void SpaceshipSteering::addNode(Ogre::SceneNode *steeringNode) {
+    steeringNode_ = steeringNode;
+  }
+
+}
Index: code/trunk/src/asylum/orxonox/SpaceshipSteering.h
===================================================================
--- code/trunk/src/asylum/orxonox/SpaceshipSteering.h	(revision 1024)
+++ code/trunk/src/asylum/orxonox/SpaceshipSteering.h	(revision 1024)
@@ -0,0 +1,66 @@
+#ifndef _SpaceShipSteering_H__
+#define _SpaceShipSteering_H__
+
+#include <OgrePrerequisites.h>
+
+#include "OrxonoxPrereqs.h"
+
+namespace orxonox
+{
+  class _OrxonoxExport SpaceshipSteering
+  {
+  public:
+    SpaceshipSteering(float maxSpeedForward, float maxSpeedRotateUpDown,
+      float maxSpeedRotateRightLeft, float maxSpeedLoopRightLeft);
+    void tick(float time);
+    void moveForward(float moveForward);
+    void rotateUp(float rotateUp);
+    void rotateDown(float rotateDown);
+    void rotateRight(float rotateRight);
+    void rotateLeft(float rotateLeft);
+    void loopRight(float loopRight);
+    void loopLeft(float loopLeft);
+    void brakeForward(float brakeForward);
+    void brakeRotate(float brakeRotate);
+    void brakeLoop(float brakeLoop);
+    void maxSpeedForward(float maxSpeedForward);
+    void maxSpeedRotateUpDown(float maxSpeedRotateUpDown);
+    void maxSpeedRotateRightLeft(float maxSpeedRotateRightLeft);
+    void maxSpeedLoopRightLeft(float maxSpeedLoopRightLeft);
+    void addNode(Ogre::SceneNode *steeringNode);
+
+  protected:
+    Ogre::SceneNode *steeringNode_;
+
+  private:
+    float moveForward_;
+    float rotateUp_;
+    float rotateDown_;
+    float rotateRight_;
+    float rotateLeft_;
+    float loopRight_;
+    float loopLeft_;
+    float brakeForward_;
+    float brakeRotate_;
+    float brakeLoop_;
+
+    float speedForward_;
+    float speedRotateUpDown_;
+    float speedRotateRightLeft_;
+    float speedLoopRightLeft_;
+
+    float maxSpeedForward_;
+    float maxSpeedRotateUpDown_;
+    float maxSpeedRotateRightLeft_;
+    float maxSpeedLoopRightLeft_;
+
+    float accelerationForward_;
+    float accelerationRotateUpDown_;
+    float accelerationRotateRightLeft_;
+    float accelerationLoopRightLeft_;
+
+  };
+}
+
+
+#endif /* _SpaceShipSteering_H__ */
Index: code/trunk/src/asylum/orxonox/objects/SpaceshipSteeringObject.cc
===================================================================
--- code/trunk/src/asylum/orxonox/objects/SpaceshipSteeringObject.cc	(revision 1024)
+++ code/trunk/src/asylum/orxonox/objects/SpaceshipSteeringObject.cc	(revision 1024)
@@ -0,0 +1,91 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      ...
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "OrxonoxStableHeaders.h"
+
+#include <OgreSceneManager.h>
+#include <OgreSceneNode.h>
+#include <OgreRoot.h>
+#include <OgreRenderWindow.h>
+
+#include <string>
+
+#include "../Orxonox.h"
+#include "../GraphicsEngine.h"
+#include "util/tinyxml/tinyxml.h"
+#include "util/Tokenizer.h"
+#include "util/String2Number.h"
+#include "core/CoreIncludes.h"
+#include "SpaceshipSteeringObject.h"
+
+#include "../SpaceshipSteering.h"
+
+namespace orxonox
+{
+    CreateFactory(SpaceshipSteeringObject);
+
+    SpaceshipSteeringObject::SpaceshipSteeringObject()
+    {
+        RegisterObject(SpaceshipSteeringObject);
+    }
+
+    SpaceshipSteeringObject::~SpaceshipSteeringObject()
+    {
+    }
+
+    void SpaceshipSteeringObject::loadParams(TiXmlElement* xmlElem)
+    {
+      SpaceshipSteering* steering = orxonox::Orxonox::getSingleton()->getSteeringPointer();
+
+      if (xmlElem->Attribute("node") && xmlElem->Attribute("forward") && xmlElem->Attribute("rotateupdown") && xmlElem->Attribute("rotaterightleft") && xmlElem->Attribute("looprightleft"))
+      {
+        std::string nodeStr = xmlElem->Attribute("node");
+        std::string forwardStr = xmlElem->Attribute("forward");
+        std::string rotateupdownStr = xmlElem->Attribute("rotateupdown");
+        std::string rotaterightleftStr = xmlElem->Attribute("rotaterightleft");
+        std::string looprightleftStr = xmlElem->Attribute("looprightleft");
+
+        float forward, rotateupdown, rotaterightleft, looprightleft;
+        String2Number<float>(forward, forwardStr);
+        String2Number<float>(rotateupdown, rotateupdownStr);
+        String2Number<float>(rotaterightleft, rotaterightleftStr);
+        String2Number<float>(looprightleft, looprightleftStr);
+
+        steering = new SpaceshipSteering(forward, rotateupdown, rotaterightleft, looprightleft);
+
+        Ogre::SceneManager* mgr = orxonox::Orxonox::getSingleton()->getSceneManager();
+        Ogre::SceneNode* sceneNode = (Ogre::SceneNode*)mgr->getRootSceneNode()->getChild(nodeStr);
+
+        steering->addNode(sceneNode);
+
+
+
+
+        COUT(4) << "Loader: Initialized spaceship steering at node " << nodeStr << " values "<< forward << " " << rotateupdown << " "<< rotaterightleft << " "<< looprightleft << " "<< std::endl << std::endl;
+      }
+   }
+}
Index: code/trunk/src/asylum/orxonox/objects/SpaceshipSteeringObject.h
===================================================================
--- code/trunk/src/asylum/orxonox/objects/SpaceshipSteeringObject.h	(revision 1024)
+++ code/trunk/src/asylum/orxonox/objects/SpaceshipSteeringObject.h	(revision 1024)
@@ -0,0 +1,24 @@
+#ifndef _OBJECT_SPACESHIPSTEERING_H__
+#define _OBJECT_SPACESHIPSTEERING_H__
+
+#include "core/BaseObject.h"
+#include "util/tinyxml/tinyxml.h"
+
+namespace orxonox
+{
+    class SpaceshipSteeringObject : public BaseObject
+    {
+        public:
+            SpaceshipSteeringObject();
+            virtual ~SpaceshipSteeringObject();
+
+
+            void loadParams(TiXmlElement* xmlElem);
+
+        private:
+
+
+    };
+}
+
+#endif
Index: code/trunk/src/asylum/orxonox/objects/Test.h
===================================================================
--- code/trunk/src/asylum/orxonox/objects/Test.h	(revision 1024)
+++ code/trunk/src/asylum/orxonox/objects/Test.h	(revision 1024)
@@ -0,0 +1,177 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#ifndef _Test_H__
+#define _Test_H__
+
+#include "core/BaseObject.h"
+
+namespace orxonox
+{
+    class Interface1 : virtual public OrxonoxClass
+    {
+        protected:
+            Interface1() { RegisterRootObject(Interface1); }
+    };
+
+    class Interface2 : virtual public OrxonoxClass
+    {
+        protected:
+            Interface2() { RegisterRootObject(Interface2); }
+    };
+
+    class A1 : public BaseObject
+    {
+        public:
+            A1() { RegisterObject(A1); }
+    };
+
+    class A2 : public BaseObject
+    {
+        public:
+            A2() { RegisterObject(A2); }
+    };
+
+    class A3: public BaseObject, public Interface1
+    {
+        public:
+            A3() { RegisterObject(A3); }
+    };
+
+    class A1B1 : public A1
+    {
+        public:
+            A1B1() { RegisterObject(A1B1); }
+    };
+
+    class A1B2 : public A1
+    {
+        public:
+            A1B2() { RegisterObject(A1B2); }
+//            virtual void test() = 0;
+    };
+
+    class A2B1 : public A2
+    {
+        public:
+            A2B1() { RegisterObject(A2B1); }
+    };
+
+    class A2B2 : public A2, Interface1
+    {
+        public:
+            A2B2() { RegisterObject(A2B2); }
+    };
+
+    class A3B1 : public A3
+    {
+        public:
+            A3B1() { RegisterObject(A3B1); }
+    };
+
+    class A3B2 : public A3, Interface2
+    {
+        public:
+            A3B2() { RegisterObject(A3B2); }
+    };
+
+    class A1B1C1 : public A1B1
+    {
+        public:
+            A1B1C1() { RegisterObject(A1B1C1); }
+    };
+
+    class A1B1C2 : public A1B1
+    {
+        public:
+            A1B1C2() { RegisterObject(A1B1C2); }
+    };
+
+    class A1B2C1 : public A1B2
+    {
+        public:
+            A1B2C1() { RegisterObject(A1B2C1); }
+//            void test() { std::cout << "test!\n"; }
+    };
+
+    class A2B1C1 : public A2B1, Interface2
+    {
+        public:
+            A2B1C1() { RegisterObject(A2B1C1); }
+    };
+
+    class A2B2C1 : public A2B2
+    {
+        public:
+            A2B2C1() { RegisterObject(A2B2C1); }
+    };
+
+    class A3B1C1 : public A3B1
+    {
+        public:
+            A3B1C1() { RegisterObject(A3B1C1); }
+    };
+
+    class A3B1C2 : public A3B1, Interface2
+    {
+        public:
+            A3B1C2() { RegisterObject(A3B1C2); }
+    };
+
+    class A3B2C1 : public A3B2
+    {
+        public:
+            A3B2C1() { RegisterObject(A3B2C1); }
+    };
+
+    class A3B2C2 : public A3B2
+    {
+        public:
+            A3B2C2() { RegisterObject(A3B2C2); }
+    };
+
+    CreateFactory(A1);
+    CreateFactory(A2);
+    CreateFactory(A3);
+    CreateFactory(A1B1);
+    CreateFactory(A1B2);
+    CreateFactory(A2B1);
+    CreateFactory(A2B2);
+    CreateFactory(A3B1);
+    CreateFactory(A3B2);
+    CreateFactory(A1B1C1);
+    CreateFactory(A1B1C2);
+    CreateFactory(A1B2C1);
+    CreateFactory(A2B1C1);
+    CreateFactory(A2B2C1);
+    CreateFactory(A3B1C1);
+    CreateFactory(A3B1C2);
+    CreateFactory(A3B2C1);
+    CreateFactory(A3B2C2);
+}
+
+#endif
Index: code/trunk/src/asylum/orxonox/objects/test1.cc
===================================================================
--- code/trunk/src/asylum/orxonox/objects/test1.cc	(revision 1024)
+++ code/trunk/src/asylum/orxonox/objects/test1.cc	(revision 1024)
@@ -0,0 +1,103 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "test1.h"
+#include "test2.h"
+#include "test3.h"
+#include "core/CoreIncludes.h"
+
+namespace orxonox
+{
+    CreateFactory(Test1);
+
+    Test1::Test1()
+    {
+        RegisterObject(Test1);
+
+        this->usefullClass1_ = Class(Test1);
+        this->usefullClass2_ = Class(Test2);
+        this->usefullClass3_ = Class(Test3);
+    }
+
+    Test1::~Test1()
+    {
+    }
+
+    void Test1::tick(float dt)
+    {
+        std::cout << "Test1: " << this << std::endl;
+    }
+
+    bool Test1::usefullClass1isA(Identifier* identifier)
+    {
+        return this->usefullClass1_->isA(identifier);
+    }
+
+    bool Test1::usefullClass2isA(Identifier* identifier)
+    {
+        return this->usefullClass2_->isA(identifier);
+    }
+
+    bool Test1::usefullClass3isA(Identifier* identifier)
+    {
+        return this->usefullClass3_.isA(identifier);
+    }
+
+    void Test1::setUsefullClass1(Identifier* identifier)
+    {
+        std::cout << std::endl;
+        std::cout << "Test1: usefullClass1->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
+        std::cout << "Test1: usefullClass1->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
+        std::cout << "Test1: usefullClass1->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
+        this->usefullClass1_ = identifier;
+    }
+
+    void Test1::setUsefullClass2(Identifier* identifier)
+    {
+        std::cout << std::endl;
+        std::cout << "Test1: usefullClass2->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
+        std::cout << "Test1: usefullClass2->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
+        std::cout << "Test1: usefullClass2->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
+        this->usefullClass2_ = identifier;
+    }
+
+    void Test1::setUsefullClassOfTypeTest3(Identifier* identifier)
+    {
+        std::cout << std::endl;
+        std::cout << "Test1: usefullClass3->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
+        std::cout << "Test1: usefullClass3->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
+        std::cout << "Test1: usefullClass3->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
+        this->usefullClass3_ = identifier;
+    }
+
+    void Test1::loadParams(TiXmlElement* xmlElem)
+    {
+
+
+
+    }
+}
Index: code/trunk/src/asylum/orxonox/objects/test1.h
===================================================================
--- code/trunk/src/asylum/orxonox/objects/test1.h	(revision 1024)
+++ code/trunk/src/asylum/orxonox/objects/test1.h	(revision 1024)
@@ -0,0 +1,36 @@
+#ifndef _Test1_H__
+#define _Test1_H__
+
+#include "core/BaseObject.h"
+#include "Tickable.h"
+#include "test3.h"
+#include "util/tinyxml/tinyxml.h"
+
+namespace orxonox
+{
+    class Test1 : public BaseObject, public Tickable
+    {
+        public:
+            Test1();
+            virtual ~Test1();
+
+            virtual void tick(float dt);
+
+            bool usefullClass1isA(Identifier* identifier);
+            bool usefullClass2isA(Identifier* identifier);
+            bool usefullClass3isA(Identifier* identifier);
+            void setUsefullClass1(Identifier* identifier);
+            void setUsefullClass2(Identifier* identifier);
+            void setUsefullClassOfTypeTest3(Identifier* identifier);
+
+            void loadParams(TiXmlElement* xmlElem);
+
+        private:
+            Identifier* usefullClass1_;
+            Identifier* usefullClass2_;
+            SubclassIdentifier<Test3> usefullClass3_;
+
+    };
+}
+
+#endif
Index: code/trunk/src/asylum/orxonox/objects/test2.cc
===================================================================
--- code/trunk/src/asylum/orxonox/objects/test2.cc	(revision 1024)
+++ code/trunk/src/asylum/orxonox/objects/test2.cc	(revision 1024)
@@ -0,0 +1,110 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "test1.h"
+#include "test2.h"
+#include "test3.h"
+#include "core/CoreIncludes.h"
+
+namespace orxonox
+{
+    CreateFactory(Test2);
+
+    Test2::Test2()
+    {
+        RegisterObject(Test2);
+
+        this->usefullClass1_ = Class(Test1);
+        this->usefullClass2_ = Class(Test2);
+        this->usefullClass3_ = Class(Test3);
+
+        timer1.setTimer(1, true, this, &Test2::timerFunction1);
+        timer2.setTimer(5, true, this, &Test2::timerFunction2);
+        timer3.setTimer(10, false, this, &Test2::timerFunction3);
+    }
+
+    Test2::~Test2()
+    {
+    }
+
+    void Test2::timerFunction1()
+    {
+        std::cout << "Test2: 1 Sekunde" << std::endl;
+    }
+
+    void Test2::timerFunction2()
+    {
+        std::cout << "Test2: 5 Sekunden" << std::endl;
+    }
+
+    void Test2::timerFunction3()
+    {
+        std::cout << "Test2: 10 Sekunden sind um!" << std::endl;
+    }
+
+    bool Test2::usefullClass1isA(Identifier* identifier)
+    {
+        return this->usefullClass1_->isA(identifier);
+    }
+
+    bool Test2::usefullClass2isA(Identifier* identifier)
+    {
+        return this->usefullClass2_->isA(identifier);
+    }
+
+    bool Test2::usefullClass3isA(Identifier* identifier)
+    {
+        return this->usefullClass3_.isA(identifier);
+    }
+
+    void Test2::setUsefullClass1(Identifier* identifier)
+    {
+        std::cout << std::endl;
+        std::cout << "Test2: usefullClass1->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
+        std::cout << "Test2: usefullClass1->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
+        std::cout << "Test2: usefullClass1->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
+        this->usefullClass1_ = identifier;
+    }
+
+    void Test2::setUsefullClass2(Identifier* identifier)
+    {
+        std::cout << std::endl;
+        std::cout << "Test2: usefullClass2->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
+        std::cout << "Test2: usefullClass2->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
+        std::cout << "Test2: usefullClass2->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
+        this->usefullClass2_ = identifier;
+    }
+
+    void Test2::setUsefullClassOfTypeTest3(Identifier* identifier)
+    {
+        std::cout << std::endl;
+        std::cout << "Test2: usefullClass3->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
+        std::cout << "Test2: usefullClass3->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
+        std::cout << "Test2: usefullClass3->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
+        this->usefullClass3_ = identifier;
+    }
+}
Index: code/trunk/src/asylum/orxonox/objects/test2.h
===================================================================
--- code/trunk/src/asylum/orxonox/objects/test2.h	(revision 1024)
+++ code/trunk/src/asylum/orxonox/objects/test2.h	(revision 1024)
@@ -0,0 +1,39 @@
+#ifndef _Test2_H__
+#define _Test2_H__
+
+#include "core/BaseObject.h"
+#include "../tools/Timer.h"
+
+namespace orxonox
+{
+    class Test3;
+
+    class Test2 : public BaseObject
+    {
+        public:
+            Test2();
+            virtual ~Test2();
+
+            bool usefullClass1isA(Identifier* identifier);
+            bool usefullClass2isA(Identifier* identifier);
+            bool usefullClass3isA(Identifier* identifier);
+            void setUsefullClass1(Identifier* identifier);
+            void setUsefullClass2(Identifier* identifier);
+            void setUsefullClassOfTypeTest3(Identifier* identifier);
+
+            void timerFunction1();
+            void timerFunction2();
+            void timerFunction3();
+
+        private:
+            Identifier* usefullClass1_;
+            Identifier* usefullClass2_;
+            SubclassIdentifier<Test3> usefullClass3_;
+
+            Timer<Test2> timer1;
+            Timer<Test2> timer2;
+            Timer<Test2> timer3;
+    };
+}
+
+#endif
Index: code/trunk/src/asylum/orxonox/objects/test3.cc
===================================================================
--- code/trunk/src/asylum/orxonox/objects/test3.cc	(revision 1024)
+++ code/trunk/src/asylum/orxonox/objects/test3.cc	(revision 1024)
@@ -0,0 +1,116 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "test1.h"
+#include "test2.h"
+#include "test3.h"
+#include "core/CoreIncludes.h"
+
+namespace orxonox
+{
+    CreateFactory(Test3);
+
+    Test3::Test3()
+    {
+        RegisterObject(Test3);
+
+        this->setConfigValues();
+    }
+
+    void Test3::setConfigValues()
+    {
+        SetConfigValue(value_int_, 1);
+        SetConfigValue(value_uint_, 1);
+        SetConfigValue(value_char_, 1);
+        SetConfigValue(value_uchar_, 1);
+        SetConfigValue(value_float_, 1);
+        SetConfigValue(value_double_, 1);
+        SetConfigValue(value_bool_, 1);
+        SetConfigValue(value_string_, "This is a test");
+        SetConfigValue(value_constchar_, "This is another test");
+        SetConfigValue(value_vector2_, Vector2(101, 202));
+        SetConfigValue(value_vector3_, Vector3(13, 26, 39));
+        SetConfigValue(value_colourvalue_, ColourValue(1.0, 0.5, 0.25, 0.887));
+    }
+
+    Test3::~Test3()
+    {
+    }
+
+    void Test3::configOutput()
+    {
+        std::cout << "int:         " << this->value_int_ << std::endl;
+        std::cout << "uint:        " << this->value_uint_ << std::endl;
+        std::cout << "char:        " << (int)this->value_char_ << std::endl;
+        std::cout << "uchar:       " << (int)this->value_uchar_ << std::endl;
+        std::cout << "float:       " << this->value_float_ << std::endl;
+        std::cout << "double:      " << this->value_double_ << std::endl;
+        std::cout << "bool:        " << this->value_bool_ << std::endl;
+        std::cout << "string:      " << this->value_string_ << std::endl;
+        std::cout << "constchar:   " << this->value_constchar_ << std::endl;
+        std::cout << "vector2:     " << this->value_vector2_ << std::endl;
+        std::cout << "vector3:     " << this->value_vector3_ << std::endl;
+        std::cout << "colourvalue: " << this->value_colourvalue_ << std::endl;
+    }
+
+    #define testandcout(code) \
+      std::cout << #code << " " << code << std::endl
+
+    void Test3::usefullClassesIsATest(Test1* test1)
+    {
+        std::cout << std::endl;
+        std::cout << "Test1:" << std::endl;
+        testandcout(test1->usefullClass1isA(Class(Test1)));
+        testandcout(test1->usefullClass1isA(Class(Test2)));
+        testandcout(test1->usefullClass1isA(Class(Test3)));
+        std::cout << std::endl;
+        testandcout(test1->usefullClass2isA(Class(Test1)));
+        testandcout(test1->usefullClass2isA(Class(Test2)));
+        testandcout(test1->usefullClass2isA(Class(Test3)));
+        std::cout << std::endl;
+        testandcout(test1->usefullClass3isA(Class(Test1)));
+        testandcout(test1->usefullClass3isA(Class(Test2)));
+        testandcout(test1->usefullClass3isA(Class(Test3)));
+    }
+
+    void Test3::usefullClassesIsATest(Test2* test2)
+    {
+        std::cout << std::endl;
+        std::cout << "Test2:" << std::endl;
+        testandcout(test2->usefullClass1isA(Class(Test1)));
+        testandcout(test2->usefullClass1isA(Class(Test2)));
+        testandcout(test2->usefullClass1isA(Class(Test3)));
+        std::cout << std::endl;
+        testandcout(test2->usefullClass2isA(Class(Test1)));
+        testandcout(test2->usefullClass2isA(Class(Test2)));
+        testandcout(test2->usefullClass2isA(Class(Test3)));
+        std::cout << std::endl;
+        testandcout(test2->usefullClass3isA(Class(Test1)));
+        testandcout(test2->usefullClass3isA(Class(Test2)));
+        testandcout(test2->usefullClass3isA(Class(Test3)));
+    }
+}
Index: code/trunk/src/asylum/orxonox/objects/test3.h
===================================================================
--- code/trunk/src/asylum/orxonox/objects/test3.h	(revision 1024)
+++ code/trunk/src/asylum/orxonox/objects/test3.h	(revision 1024)
@@ -0,0 +1,41 @@
+#ifndef _Test3_H__
+#define _Test3_H__
+
+#include "core/BaseObject.h"
+#include "util/Math.h"
+
+namespace orxonox
+{
+    class Test1;
+    class Test2;
+
+    class Test3 : public BaseObject
+    {
+        public:
+            Test3();
+            virtual ~Test3();
+
+            void setConfigValues();
+
+            void usefullClassesIsATest(Test1* test1);
+            void usefullClassesIsATest(Test2* test2);
+
+            void configOutput();
+
+        private:
+            int                 value_int_;
+            unsigned int        value_uint_;
+            char                value_char_;
+            unsigned char       value_uchar_;
+            float               value_float_;
+            double              value_double_;
+            bool                value_bool_;
+            std::string         value_string_;
+            const char*         value_constchar_;
+            Vector2             value_vector2_;
+            Vector3             value_vector3_;
+            ColourValue         value_colourvalue_;
+    };
+}
+
+#endif
Index: code/trunk/src/audio/AudioPrereqs.h
===================================================================
--- code/trunk/src/audio/AudioPrereqs.h	(revision 1023)
+++ code/trunk/src/audio/AudioPrereqs.h	(revision 1024)
@@ -27,7 +27,7 @@
 
 /**
- @file  AudioPrereqs.h
- @brief Contains all the necessary forward declarations for all classes, structs and enums.
- */
+  @file
+  @brief Contains all the necessary forward declarations for all classes and structs.
+*/
 
 #ifndef _AudioPrereqs_H__
Index: code/trunk/src/audio/_AudioObject.cc
===================================================================
--- code/trunk/src/audio/_AudioObject.cc	(revision 1023)
+++ 	(revision )
@@ -1,142 +1,0 @@
-/*
-*   ORXONOX - the hottest 3D action shooter ever to exist
-*
-*
-*   License notice:
-*
-*   This program is free software; you can redistribute it and/or
-*   modify it under the terms of the GNU General Public License
-*   as published by the Free Software Foundation; either version 2
-*   of the License, or (at your option) any later version.
-*
-*   This program is distributed in the hope that it will be useful,
-*   but WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*   GNU General Public License for more details.
-*
-*   You should have received a copy of the GNU General Public License
-*   along with this program; if not, write to the Free Software
-*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-*
-*   Author:
-*      ...
-*   Co-authors:
-*      ...
-*
-*/
-
-
-#include <iostream>
-#include <string>
-
-#include "core/Debug.h"
-#include "AudioObject.h"
-
-namespace audio
-{
-  AudioObject::AudioObject(std::string audioFile)
-  {
-    audioFile_ = audioFile;
-    SourcePos[0]=0;
-    SourcePos[1]=0;
-    SourcePos[2]=0;
-
-    SourceVel[0]=0;
-    SourceVel[1]=0;
-    SourceVel[2]=0;
-
-    ListenerPos[0]=0;
-    ListenerPos[1]=0;
-    ListenerPos[2]=0;
-
-    ListenerVel[0]=0;
-    ListenerVel[1]=0;
-    ListenerVel[2]=0;
-
-    ListenerOri[0]=0;
-    ListenerOri[1]=0;
-    ListenerOri[2]=-1;
-    ListenerOri[3]=0;
-    ListenerOri[4]=1;
-    ListenerOri[5]=0;
-
-
-    // Initialize OpenAL and clear the error bit.
-
-    alutInit(NULL, 0);
-    alGetError();
-
-    // Load the wav data.
-
-    if(LoadALData() == AL_FALSE)
-    {
-      printf("Error loading sound data.");
-
-    }
-
-    SetListenerValues();
-    COUT(3) << "Info: Play sone ambient background sound";
-  }
-
-  AudioObject::~AudioObject()
-  {
-    KillALData();
-  }
-
-  ALboolean AudioObject::LoadALData()
-  {
-    ALenum format;
-    ALsizei size;
-    ALvoid* data;
-    ALsizei freq;
-    ALboolean loop;
-
-
-    alGenBuffers(1, &Buffer);
-
-    if(alGetError() != AL_NO_ERROR)
-      return AL_FALSE;
-
-    alutLoadWAVFile((ALbyte*)audioFile_.c_str(), &format, &data, &size, &freq, &loop);
-    alBufferData(Buffer, format, data, size, freq);
-    alutUnloadWAV(format, data, size, freq);
-
-    alGenSources(1, &Source);
-
-    if(alGetError() != AL_NO_ERROR)
-      return AL_FALSE;
-
-    alSourcei (Source, AL_BUFFER,   Buffer   );
-    alSourcef (Source, AL_PITCH,    1.0      );
-    alSourcef (Source, AL_GAIN,     1.0      );
-    alSourcefv(Source, AL_POSITION, SourcePos);
-    alSourcefv(Source, AL_VELOCITY, SourceVel);
-    alSourcei (Source, AL_LOOPING,  loop     );
-
-    if(alGetError() == AL_NO_ERROR)
-      return AL_TRUE;
-
-
-    return AL_FALSE;
-  }
-
-  void AudioObject::SetListenerValues()
-  {
-    alListenerfv(AL_POSITION,    ListenerPos);
-    alListenerfv(AL_VELOCITY,    ListenerVel);
-    alListenerfv(AL_ORIENTATION, ListenerOri);
-  }
-
-  void AudioObject::KillALData()
-  {
-    alDeleteBuffers(1, &Buffer);
-    alDeleteSources(1, &Source);
-    alutExit();
-  }
-
-  void AudioObject::play()
-  {
-    alSourcePlay(Source);
-  }
-
-}
Index: code/trunk/src/network/NetworkPrereqs.h
===================================================================
--- code/trunk/src/network/NetworkPrereqs.h	(revision 1023)
+++ code/trunk/src/network/NetworkPrereqs.h	(revision 1024)
@@ -27,7 +27,7 @@
 
 /**
- @file  NetworkPrereqs.h
- @brief Contains all the necessary forward declarations for all classes, structs and enums.
- */
+  @file
+  @brief Contains all the necessary forward declarations for all classes and structs.
+*/
 
 #ifndef _NetworkPrereqs_H__
@@ -84,5 +84,5 @@
   struct PacketEnvelope;
   struct QueueItem;
-  struct synchData;
+  struct syncData;
   struct synchronisableVariable;
 }
Index: code/trunk/src/network/PacketBufferTestExt.cc
===================================================================
--- code/trunk/src/network/PacketBufferTestExt.cc	(revision 1023)
+++ 	(revision )
@@ -1,81 +1,0 @@
-/*
-*   ORXONOX - the hottest 3D action shooter ever to exist
-*
-*
-*   License notice:
-*
-*   This program is free software; you can redistribute it and/or
-*   modify it under the terms of the GNU General Public License
-*   as published by the Free Software Foundation; either version 2
-*   of the License, or (at your option) any later version.
-*
-*   This program is distributed in the hope that it will be useful,
-*   but WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*   GNU General Public License for more details.
-*
-*   You should have received a copy of the GNU General Public License
-*   along with this program; if not, write to the Free Software
-*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-*
-*   Author:
-*      ...
-*   Co-authors:
-*      ...
-*
-*/
-
-#include <string>
-#include <iostream>
-#include <enet/enet.h>
-#include <boost/thread/thread.hpp>
-
-#include "util/Sleep.h"
-#include "PacketBuffer.h"
-#include "PacketBuffer.cc"
-
-using namespace network;
-
-void write(PacketBuffer *test){
-  ENetEvent event;
-  ENetPacket *packet;
-  if(test->isEmpty())
-    std::cout << "empty buffer" << std::endl;
-  for(int i=0; i<10; i++){
-    std::string temp = "packet ";
-    packet = enet_packet_create("packet", strlen("packet ")+1,
-      ENET_PACKET_FLAG_RELIABLE);
-    std::cout << i << ": pushing " << packet->data << std::endl;
-    event.packet=packet;
-    test->push(&event);
-    if(i==5)
-      usleep(200000);
-  }
-  test->setClosed(true);
-  return;
-}
-
-void read(PacketBuffer *test){
-  //test->print();
-  // exit if the queue is closed and empty
-  while(!test->isClosed() || !test->isEmpty()){
-    // only pop if the queue isn't empty
-    while(!test->isEmpty()){
-      std::cout << "We popped the value " << test->pop()->data << std::endl;
-    }
-  }
-  return;
-}
-
-
-int main(int argc, char **argv[]){
-  PacketBuffer test = PacketBuffer();
-  boost::thread thrd1(boost::bind(&write, &test));
-  boost::thread thrd2(boost::bind(&read, &test));
-
-  thrd1.join();
-  thrd2.join();
-
-  return 0;
-}
-
Index: code/trunk/src/orxonox/AIClass.h
===================================================================
--- code/trunk/src/orxonox/AIClass.h	(revision 1023)
+++ 	(revision )
@@ -1,95 +1,0 @@
-#ifndef _AIClass_H__
-#define _AIClass_H__
-
-#include "util/Vector3.h"
-
-namespace orxonox
-{
-  class AIPilot
-  {
-
-
-    /*
-    TASKS:                                                                         Requirements:
-
-    - Change actual Speed to required Speed                                          - Speed as Vector3 , spaceship(?) -> pilot attached to it or vice versa (?)
-    - Open fire, if allowed                                                          - Status of the fleet commander -> allowed to fire , fly etc.
-    - differ friend, ally and enemy                                                  - Lists of ships + who controls them
-    - report ship status to fleet commander                                          - Call own ship status -> ammo, damage etc.
-
-
-
-    */
-
-  public:
-    Vector3 speed;
-
-
-
-    //default constructor
-    AIPilot() {
-      speed = (1,0,0);
-    }
-
-    Vector3 steer(Vector3 reqSpeed) {
-      Quaternion sRotation = speed.getRotationTo(reqSpeed);
-      Radian rollarc = sRotation.getRoll();
-      Radian pitcharc = sRotation.getPitch();
-      Radian yawarc = sRotation.getYaw();
-      return Vector3((float)rollarc.valueRadians(), (float)pitcharc.valueRadians(), (float)yawarc.valueRadians());
-    }
-
-
-  };
-
-  class AIFleetCommander : public  AIPilot {
-
-
-    /*
-    TASKS:                                                                       Requirements:
-
-    - Same tasks as AI_Pilot (only if shipcontrol)                                   - Same as AI_Pilot
-    - Calculate required Speed for any ship in Fleet                                 - Knows all calculation functions
-    - Request fleet status and report to commander                                   - Better list of all ships -> more data for fleet ships
-
-
-
-    */
-
-  public:
-
-
-    //default constructor
-    AIFleetCommander() {
-
-    }
-
-
-
-  };
-
-  class AICommander : public  AIFleetCommander
-  {
-
-
-    /*
-    TASKS:                                                                     Requirements:
-
-    - Decide on general tactics                                                      - List of general fleet status + all possible information on enemies
-    - Save and load tactical data (?)                                                - files with tactical data, e.g. success of strategy etc.
-
-
-
-    */
-
-    //default constructor
-    AICommander() {
-
-    }
-
-
-  };
-
-}
-
-#endif /* _AIClass_H__ */
Index: code/trunk/src/orxonox/Arrival.h
===================================================================
--- code/trunk/src/orxonox/Arrival.h	(revision 1023)
+++ 	(revision )
@@ -1,82 +1,0 @@
-
-// Arrival Class
-
-
-#ifndef _Arrival_H__
-#define _Arrival_H__
-
-#include "util/Math.h"
-
-namespace orxonox
-{
-  class Arrival
-  {
-  public:
-    Vector3 location;           //!< locationvector of the element
-    Vector3 speed;              //!< speedvector of the element
-    Vector3 acceleration;       //!< accelerationvector of the element
-    Vector3 target;             //!< target to arrive
-    int accelerationForwards;   //!< from steering-interface
-    int MaxSpeed;               //!< from steering-interface
-
-
-    Arrival() {
-      acceleration = (0,0,0);
-      speed = (0,0,0);
-      location = (0,0,0);
-      target = (0,0,0);
-    }
-
-    Arrival(Vector3 location_, Vector3 speed_, Vector3 acceleration_, Vector3 target_) {
-      acceleration = acceleration_;
-      speed = speed_;
-      location = location_;
-      target = target_;
-    }
-
-    void setValues(Vector3 location_, Vector3 speed_, Vector3 acceleration_, Vector3 target_) {
-      acceleration = acceleration_;
-      speed = speed_;
-      location = location_;
-      target = target_;
-    }
-
-    void setTarget(Vector3 target_) {
-      setValues(this->location, this->speed, this->acceleration, target_);
-    }
-
-    Vector3 getDirection() {
-      Vector3 direction = target-location;
-    }
-
-    double relativeDirectApproach() {
-      // Maxspeed / accelerationForwards = time needed to break with max acceleration
-      // 2*getDistance()length/(MaxSpeed/accelerationForwards)^2 = required acceleration to arrive at the target with speed = 0
-      return (accelerationForwards / (2*getDirection().length() / ((MaxSpeed/accelerationForwards)*(MaxSpeed/accelerationForwards))) );
-    }
-
-    void Approach() {
-      Quaternion rotation = Quaternion(0,0,0,0);
-      if (relativeDirectApproach() > 1)
-      {
-        float length = speed.length();
-        speed = (speed+getDirection());
-        speed.normalise();
-        speed = speed*length;
-        if (relativeDirectApproach() > 4)
-        {
-          //accelerate
-        }
-        else
-        {
-          // speed will stay constant
-        }
-      }
-      else {
-      }
-    }
-
-  };
-}
-
-#endif /* _Arrival_H__ */
Index: code/trunk/src/orxonox/CMakeLists.txt
===================================================================
--- code/trunk/src/orxonox/CMakeLists.txt	(revision 1023)
+++ code/trunk/src/orxonox/CMakeLists.txt	(revision 1024)
@@ -1,6 +1,4 @@
 SET( ORXONOX_SRC_FILES
   GraphicsEngine.cc
-  InputEventListener.cc
-  InputHandler.cc
   Main.cc
   Orxonox.cc
Index: code/trunk/src/orxonox/Flocking.h
===================================================================
--- code/trunk/src/orxonox/Flocking.h	(revision 1023)
+++ 	(revision )
@@ -1,140 +1,0 @@
-
-//Headerfile: Flocking.h
-
-#ifndef _Flocking_H__
-#define _Flocking_H__
-
-#include "util/Math.h"
-
-namespace orxonox
-{
-  class Element // An element that flocks
-  {
-
-  public:
-    Vector3 location;                       //!< locationvector of the element
-    Vector3 speed;                          //!< speedvector of the element
-    Vector3 acceleration;                   //!< accelerationvector of the element
-    bool movable;                                 //!< movability of the element, (false) gives the possiblity that an object can`t be moved by flocking but still gets into the calculation
-    static int const SEPERATIONDISTANCE = 300;    //!< detectionradius of seperation
-    static int const ALIGNMENTDISTANCE = 300;     //!< detectionradius of alignment
-    static int const COHESIONDISTANCE = 5000;     //!< detectionradius of cohesion
-    static int const ANZELEMENTS = 9;             //!< number of elements
-
-    //! default constructor
-    Element() {
-      acceleration = Vector3(0,0,0);
-      speed = Vector3(0,0,0);
-      location = Vector3(0,0,0);
-      movable = true;
-    }
-
-    /** constructor
-    *  @param location_ sets locationvector of the element
-    *  @param speed_ sets speedvector of the element
-    *  @param acceleration_ sets accelerationvector of the element
-    *  @param movable_ sets movability of the element
-    */
-    Element(Vector3 location_, Vector3 speed_, Vector3 acceleration_, bool movable_) {
-      acceleration = acceleration_;
-      speed = speed_;
-      location = location_;
-      movable = movable_;
-    }
-
-    //! function to chance values of an element
-    void setValues(Vector3 location_, Vector3 speed_, Vector3 acceleration_, bool movable_) {
-      acceleration = acceleration_;
-      speed = speed_;
-      location = location_;
-      movable = movable_;
-    }
-
-    /** calculates the distance between the element and an other point given by temp
-    * @param e remote object to calculate distance to
-    */
-    float getDistance(Element e) {
-      Vector3 distance = e.location - location;
-      return distance.length();
-    }
-
-    //! updates the data of an element
-    void update(Element arrayOfElements[]) {
-      if (this->movable == true) {calculateAcceleration(arrayOfElements);} //if element is movable, calculate acceleration
-    }
-
-    //! calculates the new acceleration of an element
-    void calculateAcceleration(Element arrayOfElements[]) {
-      acceleration = separation(arrayOfElements) + alignment(arrayOfElements) + cohesion(arrayOfElements);  //acceleration consisting of flocking-functions
-    }
-
-    //! separation-function (keep elements separated, avoid crashs)
-    Vector3 separation(Element arrayOfElements[]) {
-      using namespace Ogre;
-      Vector3 steering = Vector3(0,0,0); //steeringvector
-      Vector3 inverseDistance = Vector3(0,0,0);  //vector pointing away from possible collisions
-      int numberOfNeighbour = 0;  //number of observed neighbours
-      float distance = 0;  // distance to the actual element
-      for(int i=0; i<ANZELEMENTS; i++) {  //go through all elements
-        Element actual = arrayOfElements[i];  //get the actual element
-        distance = getDistance(actual);  //get distance between this and actual
-        if ((distance > 0) && (distance < SEPERATIONDISTANCE)) {  //do only if actual is inside detectionradius
-          inverseDistance = (0,0,0);
-          inverseDistance = location-actual.location;  //calculate the distancevector heading towards this
-          //adaptation of the inverseDistance to the distance
-          if ((distance < 200) && (distance >= 120)) {inverseDistance = 2*inverseDistance;}
-          if ((distance < 120) && (distance >= 80)) {inverseDistance = 5*inverseDistance;}
-          if ((distance < 80) && (distance >= 40)) {inverseDistance = 10*inverseDistance;}
-          if ((distance < 40) && (distance > 0)) {inverseDistance = 10*inverseDistance;}
-          steering = steering + inverseDistance;  //add up all significant steeringvectors
-          numberOfNeighbour++;  //counts the elements inside the detectionradius
-        }
-      }
-      if(numberOfNeighbour > 0) { steering = steering / (float)numberOfNeighbour; }  //devide the sum of steeringvectors by the number of elements -> separation steeringvector
-      return steering;
-    }
-
-    //! alignment-function (lead elements to the same heading)
-    Vector3 alignment(Element arrayOfElements[]) {
-      using namespace Ogre;
-      Vector3 steering = Vector3(0,0,0); //steeringvector
-      int numberOfNeighbour = 0;  //number of observed neighbours
-      float distance = 0;
-      //go through all elements
-      for(int i=0; i<ANZELEMENTS; i++) {  //just working with 3 elements at the moment
-        Element actual = arrayOfElements[i];  //get the actual element
-        float distance = getDistance(actual);  //get distance between this and actual
-        if ((distance > 0) && (distance < ALIGNMENTDISTANCE)) {  //check if actual element is inside detectionradius
-          steering = steering + actual.speed;  //add up all speedvectors inside the detectionradius
-          numberOfNeighbour++;  //counts the elements inside the detectionradius
-        }
-      }
-      if(numberOfNeighbour > 0) { steering = steering / (float)numberOfNeighbour; }  //devide the sum of steeringvectors by the number of elements -> alignment steeringvector
-      return steering;
-    }
-
-    //! cohseion-function (keep elements close to each other)
-    Vector3 cohesion(Element arrayOfElements[]) {
-      using namespace Ogre;
-      Vector3 steering = Vector3(0,0,0); //steeringvector
-      int numberOfNeighbour = 0;  //number of observed neighbours
-      float distance = 0;
-      //go through all elements
-      for(int i=0; i<ANZELEMENTS; i++) {  //just working with 3 elements at the moment
-        Element actual = arrayOfElements[i];  //get the actual element
-        float distance = getDistance(actual);  //get distance between this and actual
-        if ((distance > 0) && (distance < COHESIONDISTANCE)) {  //check if actual element is inside detectionradius
-          steering = steering + actual.location;  //add up all locations of elements inside the detectionradius
-          numberOfNeighbour++;  //counts the elements inside the detectionradius
-        }
-      }
-      if(numberOfNeighbour > 0) {
-        steering = steering  / (float)numberOfNeighbour;  //devide the sum steeringvector by the number of elements -> cohesion steeringvector
-        steering = steering - this->location;  //transform the vector for the ship
-      }
-      return steering;
-    }
-  };     //End of class Element
-}
-
-#endif /* _Flocking_H__*/
Index: code/trunk/src/orxonox/GraphicsEngine.cc
===================================================================
--- code/trunk/src/orxonox/GraphicsEngine.cc	(revision 1023)
+++ code/trunk/src/orxonox/GraphicsEngine.cc	(revision 1024)
@@ -35,4 +35,5 @@
 #include <OgreException.h>
 #include <OgreConfigFile.h>
+#include <OgreLogManager.h>
 #include <OgreTextureManager.h>
 #include <OgreRenderWindow.h>
@@ -62,14 +63,27 @@
   GraphicsEngine::~GraphicsEngine()
   {
-    if (!this->root_)
+    if (this->root_)
       delete this->root_;
+    // delete the ogre log and the logManager (sine we have created it).
+    if (LogManager::getSingletonPtr() != 0)
+    {
+      LogManager::getSingleton().getDefaultLog()->removeListener(this);
+      LogManager::getSingleton().destroyLog(LogManager::getSingleton().getDefaultLog());
+      delete LogManager::getSingletonPtr();
+    }
   }
 
   void GraphicsEngine::setConfigValues()
   {
-    SetConfigValue(dataPath_, dataPath_).description("relative path to media data");
-
-  }
-
+    SetConfigValue(dataPath_, "../../media/").description("relative path to media data");
+    SetConfigValue(ogreLogfile_, "ogre.log").description("Logfile for messages from Ogre. Use \"\" to suppress log file creation.");
+    SetConfigValue(ogreLogLevelTrivial_ , 5).description("relative path to media data");
+    SetConfigValue(ogreLogLevelNormal_  , 4).description("relative path to media data");
+    SetConfigValue(ogreLogLevelCritical_, 2).description("relative path to media data");
+  }
+
+  /**
+    @brief Creates the Ogre Root object and sets up the ogre log.
+  */
   void GraphicsEngine::setup()
   {
@@ -86,4 +100,23 @@
     std::string plugin_filename = "plugins.cfg";
 #endif
+
+    // create a logManager
+    LogManager *logger;
+		if(LogManager::getSingletonPtr() == 0)
+			logger = new LogManager();
+    else
+      logger = LogManager::getSingletonPtr();
+
+    // create our own log that we can listen to
+    Log *myLog;
+    if (this->ogreLogfile_ == "")
+      myLog = logger->createLog("ogre.log", true, false, true);
+    else
+      myLog = logger->createLog(this->ogreLogfile_, true, false, false);
+
+    myLog->setLogDetail(LL_BOREME);
+    myLog->addListener(this);
+
+    // Root will detect that we've already created a Log
     root_ = new Root(plugin_filename);
   }
@@ -106,5 +139,5 @@
     // temporary overwrite of dataPath, change ini file for permanent change
     if( dataPath != "" )
-      dataPath_ = dataPath;
+      dataPath_ = dataPath + "/";
     loadRessourceLocations(this->dataPath_);
     if (!root_->restoreConfig() && !root_->showConfigDialog())
@@ -196,3 +229,33 @@
   }
 
+  /**
+    @brief Method called by the LogListener interface from Ogre.
+    We use it to capture Ogre log messages and handle it ourselves.
+    @param message The message to be logged
+    @param lml The message level the log is using
+    @param maskDebug If we are printing to the console or not
+    @param logName the name of this log (so you can have several listeners
+                   for different logs, and identify them)
+  */
+  void GraphicsEngine::messageLogged(const std::string& message,
+    LogMessageLevel lml, bool maskDebug, const std::string &logName)
+  {
+    int orxonoxLevel;
+    switch (lml)
+    {
+      case LML_TRIVIAL:
+        orxonoxLevel = this->ogreLogLevelTrivial_;
+        break;
+      case LML_NORMAL:
+        orxonoxLevel = this->ogreLogLevelNormal_;
+        break;
+      case LML_CRITICAL:
+        orxonoxLevel = this->ogreLogLevelCritical_;
+        break;
+      default:
+        orxonoxLevel = 0;
+    }
+    OutputHandler::getOutStream().setOutputLevel(orxonoxLevel)
+        << "*** Ogre: " << message << std::endl;
+  }
 }
Index: code/trunk/src/orxonox/GraphicsEngine.h
===================================================================
--- code/trunk/src/orxonox/GraphicsEngine.h	(revision 1023)
+++ code/trunk/src/orxonox/GraphicsEngine.h	(revision 1024)
@@ -11,4 +11,5 @@
 
 #include <OgrePrerequisites.h>
+#include <OgreLog.h>
 #include <OgreRoot.h>
 #include <OgreSceneManager.h>
@@ -23,9 +24,9 @@
    * graphics engine manager class
  */
-  class _OrxonoxExport GraphicsEngine : public OrxonoxClass
+  class _OrxonoxExport GraphicsEngine : public OrxonoxClass, public Ogre::LogListener
   {
     public:
       GraphicsEngine();
-      inline void setConfigPath(std::string path) { this->configPath_ = path; };
+      void setConfigPath(std::string path) { this->configPath_ = path; };
       // find a better way for this
       //inline Ogre::Root* getRoot() { return root_; };
@@ -54,4 +55,8 @@
 
     private:
+      //! Method called by the LogListener from Ogre
+      void messageLogged(const std::string& message, Ogre::LogMessageLevel lml,
+                         bool maskDebug, const std::string &logName);
+
       Ogre::Root*         root_;        //!< Ogre's root
       std::string         configPath_;  //!< path to config file
@@ -60,4 +65,8 @@
       Ogre::RenderWindow* renderWindow_;//!< the current render window
       //bool               bOverwritePath_; //!< overwrites path
+      std::string         ogreLogfile_; //!< log file name for Ogre log messages
+      int ogreLogLevelTrivial_;         //!< Corresponding Orxonx debug level for LL_TRIVIAL
+      int ogreLogLevelNormal_;          //!< Corresponding Orxonx debug level for LL_NORMAL
+      int ogreLogLevelCritical_;        //!< Corresponding Orxonx debug level for LL_CRITICAL
 
   };
Index: code/trunk/src/orxonox/InputEvent.h
===================================================================
--- code/trunk/src/orxonox/InputEvent.h	(revision 1023)
+++ 	(revision )
@@ -1,52 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *
- *
- *   License notice:
- *
- *   This program is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU General Public License
- *   as published by the Free Software Foundation; either version 2
- *   of the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Reto Grieder
- *   Co-authors:
- *      ...
- *
- */
-
-/**
- @file
- @brief InputEvent Structure declaration
- */
-
-#ifndef _InputEvent_H__
-#define _InputEvent_H__
-
-#include "OrxonoxPrereqs.h"
-
-namespace orxonox
-{
-  /**
-    @brief Interface that any class can use to get key independent input.
-  */
-  struct InputEvent
-  {
-    unsigned char id;      //!< Event ID
-    bool bStarted;         //!< Tells whether the Event started or ended (e.g. firing started)
-    int data1, data2;      //!< Two additional integer datafields, for instance for the mouse moved event
-    void* dataRef;         //!< Additional pointer to any further data
-  };
-}
-
-#endif /* _InputEvent_H__ */
Index: code/trunk/src/orxonox/InputEventListener.cc
===================================================================
--- code/trunk/src/orxonox/InputEventListener.cc	(revision 1023)
+++ 	(revision )
@@ -1,53 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *
- *
- *   License notice:
- *
- *   This program is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU General Public License
- *   as published by the Free Software Foundation; either version 2
- *   of the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Reto Grieder
- *   Co-authors:
- *      Some guy writing the example code from Ogre
- *
- */
-
-/**
- @file
- @brief Core relevant parts of InputEventListener
- */
-
-#include "OrxonoxStableHeaders.h"
-
-#include "core/CoreIncludes.h"
-#include "InputEventListener.h"
-
-namespace orxonox
-{
-  /**
-    @brief standard constructor
-  */
-  InputEventListener::InputEventListener()
-  {
-    RegisterRootObject(InputEventListener);
-    this->bActive_ = true;
-  }
-
-  InputEventListener::~InputEventListener()
-  {
-  }
-
-}
Index: code/trunk/src/orxonox/InputEventListener.h
===================================================================
--- code/trunk/src/orxonox/InputEventListener.h	(revision 1023)
+++ 	(revision )
@@ -1,60 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *
- *
- *   License notice:
- *
- *   This program is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU General Public License
- *   as published by the Free Software Foundation; either version 2
- *   of the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Reto Grieder
- *   Co-authors:
- *      ...
- *
- */
-
-/**
- @file
- @brief InputEventListener Interface declaration
- */
-
-#ifndef _InputEventListener_H__
-#define _InputEventListener_H__
-
-#include "OrxonoxPrereqs.h"
-
-#include "core/OrxonoxClass.h"
-#include "InputEvent.h"
-
-namespace orxonox
-{
-  /**
-    @brief Interface that any class can use to get key independent input.
-  */
-  class _OrxonoxExport InputEventListener : virtual public OrxonoxClass
-  {
-    friend class InputHandler;
-  public:
-    InputEventListener();
-    virtual ~InputEventListener();
-    /** Method is called every time an Input event occurs && bActive */
-    virtual void eventOccured(InputEvent &evt) = 0;
-
-  private:
-    bool bActive_;
-  };
-}
-
-#endif /* _InputEventListener_H__ */
Index: code/trunk/src/orxonox/InputHandler.cc
===================================================================
--- code/trunk/src/orxonox/InputHandler.cc	(revision 1023)
+++ 	(revision )
@@ -1,272 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *
- *
- *   License notice:
- *
- *   This program is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU General Public License
- *   as published by the Free Software Foundation; either version 2
- *   of the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Reto Grieder
- *   Co-authors:
- *      ...
- *
- */
-
-/**
- @file
- @brief Implementation of a little Input handler that distributes everything
-        coming from OIS.
- */
-
-#include "OrxonoxStableHeaders.h"
-
-#include "core/CoreIncludes.h"
-#include "core/Debug.h"
-#include "Orxonox.h"
-#include "InputEventListener.h"
-#include "InputHandler.h"
-
-namespace orxonox
-{
-  /**
-    @brief The reference to the singleton
-  */
-  InputHandler* InputHandler::singletonRef_s = 0;
-
-  /**
-    @brief Constructor only resets the pointer values to 0.
-  */
-  InputHandler::InputHandler() :
-      mouse_(0), keyboard_(0), inputSystem_(0)
-  {
-    //RegisterObject(InputHandler);
-  }
-
-  /**
-    @brief Destructor only called at the end of the program
-  */
-  InputHandler::~InputHandler()
-  {
-  }
-
-  /**
-    @brief The one instance of the InputHandler is stored in this function.
-    @return The pointer to the only instance of the InputHandler
-  */
-  InputHandler *InputHandler::getSingleton()
-  {
-    if (!singletonRef_s)
-      singletonRef_s = new InputHandler();
-    return singletonRef_s;
-    //static InputHandler theOnlyInstance;
-    //return &theOnlyInstance;
-  }
-
-  /**
-    @brief Creates the OIS::InputMananger, the keyboard and the mouse and
-           assigns the key bindings.
-    @param windowHnd The window handle of the render window
-    @param windowWidth The width of the render window
-    @param windowHeight The height of the render window
-  */
-  bool InputHandler::initialise(size_t windowHnd, int windowWidth, int windowHeight)
-  {
-    if (!this->inputSystem_)
-    {
-      // Setup basic variables
-      OIS::ParamList paramList;
-      std::ostringstream windowHndStr;
-
-      // Fill parameter list
-      windowHndStr << (unsigned int)windowHnd;
-      paramList.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
-
-#if defined OIS_LINUX_PLATFORM
-      paramList.insert(std::make_pair(std::string("XAutoRepeatOn"), std::string("true")));
-#endif
-
-      try
-      {
-        // Create inputsystem
-        inputSystem_ = OIS::InputManager::createInputSystem(paramList);
-        //if (getSoftDebugLevel() >= ORX_DEBUG)
-        //  orxonox::OutputHandler::getOutStream().setOutputLevel(4) << "asdfblah" << std::endl;
-        COUT(ORX_DEBUG) << "*** InputHandler: Created OIS input system" << std::endl;
-
-        // If possible create a buffered keyboard
-        /*if (inputSystem_->getNumberOfDevices(OIS::OISKeyboard) > 0)
-        {*/
-          keyboard_ = static_cast<OIS::Keyboard*>(inputSystem_->createInputObject(OIS::OISKeyboard, true));
-          keyboard_->setEventCallback(this);
-          COUT(ORX_DEBUG) << "*** InputHandler: Created OIS mouse" << std::endl;
-        //}
-
-        // If possible create a buffered mouse
-        /*if (inputSystem_->numMice() > 0 )
-        {*/
-          mouse_ = static_cast<OIS::Mouse*>(inputSystem_->createInputObject(OIS::OISMouse, true));
-          mouse_->setEventCallback(this);
-          COUT(ORX_DEBUG) << "*** InputHandler: Created OIS keyboard" << std::endl;
-
-          // Set mouse region
-          this->setWindowExtents(windowWidth, windowHeight);
-        //}
-      }
-      catch (OIS::Exception ex)
-      {
-        // something went wrong with the initialisation
-        COUT(ORX_ERROR) << "Error: Failed creating an input system. Message: \"" << ex.eText << "\"" << std::endl;
-        this->inputSystem_ = 0;
-        return false;
-      }
-    }
-
-    COUT(ORX_DEBUG) << "*** InputHandler: Loading key bindings..." << std::endl;
-    // temporary solution: create event list
-    //InputEvent[] list = this->createEventList();
-    // load the key bindings
-    InputEvent empty = {0, false, 0, 0, 0};
-    for (int i = 0; i < this->numberOfKeys_; i++)
-      this->bindingsKeyPressed_[i] = empty;
-
-    //assign 'abort' to the escape key
-    this->bindingsKeyPressed_[(int)OIS::KC_ESCAPE].id = 1;
-    COUT(ORX_DEBUG) << "*** InputHandler: Loading done." << std::endl;
-
-    return true;
-  }
-
-  /**
-    @brief Destroys all the created input devices.
-  */
-  void InputHandler::destroyDevices()
-  {
-    COUT(ORX_DEBUG) << "*** InputHandler: Destroying InputHandler..." << std::endl;
-    if (this->mouse_)
-      this->inputSystem_->destroyInputObject(mouse_);
-    if (this->keyboard_)
-      this->inputSystem_->destroyInputObject(keyboard_);
-    if (this->inputSystem_)
-      OIS::InputManager::destroyInputSystem(this->inputSystem_);
-
-    this->mouse_         = 0;
-    this->keyboard_      = 0;
-    this->inputSystem_   = 0;
-    COUT(ORX_DEBUG) << "*** InputHandler: Destroying done." << std::endl;
-  }
-
-  /**
-    @brief Destroys the singleton.
-  */
-  void InputHandler::destroy()
-  {
-    if (singletonRef_s)
-      delete singletonRef_s;
-    singletonRef_s = 0;
-  }
-
-  /**
-    @brief Updates the InputHandler
-    @param dt Delta time
-  */
-  void InputHandler::tick(float dt)
-  {
-    // capture all the input. That calls the event handlers.
-    if (mouse_)
-      mouse_->capture();
-
-    if (keyboard_)
-      keyboard_->capture();
-  }
-
-  /**
-    @brief Adjusts the mouse window metrics.
-    This method has to be called every time the size of the window changes.
-    @param width The new width of the render window
-    @param height the new height of the render window
-  */
-  void InputHandler::setWindowExtents(int width, int height)
-  {
-    // Set mouse region (if window resizes, we should alter this to reflect as well)
-    const OIS::MouseState &mouseState = mouse_->getMouseState();
-    mouseState.width  = width;
-    mouseState.height = height;
-  }
-
-  /**
-    @brief Calls all the objects from classes that derive from InputEventListener.
-    @param evt The input event that occured.
-  */
-  inline void InputHandler::callListeners(orxonox::InputEvent &evt)
-  {
-    for (Iterator<InputEventListener> it = ObjectList<InputEventListener>::start(); it; )
-    {
-      if (it->bActive_)
-        (it++)->eventOccured(evt);
-      else
-        it++;
-    }
-  }
-
-  /**
-    @brief Event handler for the keyPressed Event.
-    @param e Event information
-  */
-  bool InputHandler::keyPressed(const OIS::KeyEvent &e)
-  {
-    callListeners(this->bindingsKeyPressed_[(int)e.key]);
-    return true;
-  }
-
-  /**
-    @brief Event handler for the keyReleased Event.
-    @param e Event information
-  */
-  bool InputHandler::keyReleased(const OIS::KeyEvent &e)
-  {
-    return true;
-  }
-
-  /**
-    @brief Event handler for the mouseMoved Event.
-    @param e Event information
-  */
-  bool InputHandler::mouseMoved(const OIS::MouseEvent &e)
-  {
-    return true;
-  }
-
-  /**
-    @brief Event handler for the mousePressed Event.
-    @param e Event information
-    @param id The ID of the mouse button
-  */
-  bool InputHandler::mousePressed(const OIS::MouseEvent &e, OIS::MouseButtonID id)
-  {
-    return true;
-  }
-
-  /**
-    @brief Event handler for the mouseReleased Event.
-    @param e Event information
-    @param id The ID of the mouse button
-  */
-  bool InputHandler::mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id)
-  {
-    return true;
-  }
-
-}
Index: code/trunk/src/orxonox/InputHandler.h
===================================================================
--- code/trunk/src/orxonox/InputHandler.h	(revision 1023)
+++ 	(revision )
@@ -1,108 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *
- *
- *   License notice:
- *
- *   This program is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU General Public License
- *   as published by the Free Software Foundation; either version 2
- *   of the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Reto Grieder
- *   Co-authors:
- *      ...
- *
- */
-
-/**
- @file
- @brief Implementation of a little Input handler that distributes everything
-        coming from OIS.
- */
-
-#ifndef _InputHandler_H__
-#define _InputHandler_H__
-
-#include <OIS/OIS.h>
-
-#include "OrxonoxPrereqs.h"
-#include "core/Tickable.h"
-#include "InputEvent.h"
-
-namespace orxonox
-{
-  /**
-    @brief Captures and distributes mouse and keyboard input.
-    It resolves the key bindings to InputEvents which can be heard by
-    implementing the InputEventListener interface.
-  */
-  class _OrxonoxExport InputHandler
-        : public Tickable, public OIS::KeyListener, public OIS::MouseListener
-  {
-    //friend class ClassIdentifier<InputHandler>;
-  public:
-    bool initialise(size_t windowHnd, int windowWidth, int windowHeight);
-    void destroyDevices();
-    void tick(float dt);
-    void setWindowExtents(int width, int height);
-
-    // Temporary solutions. Will be removed soon!
-    OIS::Mouse    *getMouse()    { return this->mouse_   ; }
-    OIS::Keyboard *getKeyboard() { return this->keyboard_; }
-
-    static InputHandler* getSingleton();
-    static void destroy();
-
-  private:
-    // don't mess with a Singleton
-    InputHandler ();
-    InputHandler (const InputHandler&);
-    InputHandler& operator=(const InputHandler& instance);
-    ~InputHandler();
-
-    void callListeners(InputEvent &evt);
-
-    // input events
-		bool mousePressed (const OIS::MouseEvent &arg, OIS::MouseButtonID id);
-		bool mouseReleased(const OIS::MouseEvent &arg, OIS::MouseButtonID id);
-    bool mouseMoved   (const OIS::MouseEvent &arg);
-		bool keyPressed   (const OIS::KeyEvent   &arg);
-		bool keyReleased  (const OIS::KeyEvent   &arg);
-
-    OIS::InputManager *inputSystem_;    //!< OIS input manager
-    OIS::Keyboard     *keyboard_;       //!< OIS mouse
-    OIS::Mouse        *mouse_;          //!< OIS keyboard
-
-    /** denotes the maximum number of different keys there are in OIS.
-        256 should be ok since the highest number in the enum is 237. */
-    static const int numberOfKeys_ = 256;
-    //! Array of input events for every pressed key
-    InputEvent bindingsKeyPressed_[numberOfKeys_];
-    //! Array of input events for every released key
-    InputEvent bindingsKeyReleased_[numberOfKeys_];
-
-    /** denotes the maximum number of different buttons there are in OIS.
-        16 should be ok since the highest number in the enum is 7. */
-    static const int numberOfButtons_ = 16;
-    //! Array of input events for every pressed key
-    InputEvent bindingsButtonPressed_[numberOfButtons_];
-    //! Array of input events for every released key
-    InputEvent bindingsButtonReleased_[numberOfButtons_];
-
-    //! Pointer to the instance of the singleton
-    static InputHandler *singletonRef_s;
-  };
-}
-
-#endif /* _InputHandler_H__ */
Index: code/trunk/src/orxonox/InputManager.cc
===================================================================
--- code/trunk/src/orxonox/InputManager.cc	(revision 1023)
+++ 	(revision )
@@ -1,390 +1,0 @@
-#include "OrxonoxStableHeaders.h"
-
-#include "InputManager.h"
-
-InputManager *InputManager::mInputManager;
-
-InputManager::InputManager( void ) :
-    mMouse( 0 ), mKeyboard( 0 ), mInputSystem( 0 ) {}
-
-InputManager::~InputManager( void ) {
-  if( mInputSystem ) {
-    if( mMouse ) {
-      mInputSystem->destroyInputObject( mMouse );
-      mMouse = 0;
-    }
-
-    if( mKeyboard ) {
-      mInputSystem->destroyInputObject( mKeyboard );
-      mKeyboard = 0;
-    }
-
-    if( mJoysticks.size() > 0 ) {
-      itJoystick    = mJoysticks.begin();
-      itJoystickEnd = mJoysticks.end();
-      for(; itJoystick != itJoystickEnd; ++itJoystick ) {
-        mInputSystem->destroyInputObject( *itJoystick );
-      }
-
-      mJoysticks.clear();
-    }
-
-        // If you use OIS1.0RC1 or above, uncomment this line
-        // and comment the line below it
-    mInputSystem->destroyInputSystem( mInputSystem );
-        //mInputSystem->destroyInputSystem();
-    mInputSystem = 0;
-
-        // Clear Listeners
-    mKeyListeners.clear();
-    mMouseListeners.clear();
-    mJoystickListeners.clear();
-  }
-}
-
-void InputManager::initialise( Ogre::RenderWindow *renderWindow ) {
-  if( !mInputSystem ) {
-        // Setup basic variables
-    OIS::ParamList paramList;
-    size_t windowHnd = 0;
-    std::ostringstream windowHndStr;
-
-        // Get window handle
-    renderWindow->getCustomAttribute( "WINDOW", &windowHnd );
-
-        // Fill parameter list
-    windowHndStr << (unsigned int) windowHnd;
-    paramList.insert( std::make_pair( std::string( "WINDOW" ), windowHndStr.str() ) );
-
-        // Create inputsystem
-    mInputSystem = OIS::InputManager::createInputSystem( paramList );
-
-        // If possible create a buffered keyboard
-        // (note: if below line doesn't compile, try:  if (mInputSystem->getNumberOfDevices(OIS::OISKeyboard) > 0) {
-      if( mInputSystem->numKeyboards() > 0 ) {
-//     if (mInputSystem->getNumberOfDevices(OIS::OISKeyboard) > 0) {
-      mKeyboard = static_cast<OIS::Keyboard*>( mInputSystem->createInputObject( OIS::OISKeyboard, true ) );
-      mKeyboard->setEventCallback( this );
-    }
-
-        // If possible create a buffered mouse
-        // (note: if below line doesn't compile, try:  if (mInputSystem->getNumberOfDevices(OIS::OISMouse) > 0) {
-      if( mInputSystem->numMice() > 0 ) {
-//     if (mInputSystem->getNumberOfDevices(OIS::OISMouse) > 0) {
-      mMouse = static_cast<OIS::Mouse*>( mInputSystem->createInputObject( OIS::OISMouse, true ) );
-      mMouse->setEventCallback( this );
-
-            // Get window size
-      unsigned int width, height, depth;
-      int left, top;
-      renderWindow->getMetrics( width, height, depth, left, top );
-
-            // Set mouse region
-      this->setWindowExtents( width, height );
-    }
-
-        // If possible create all joysticks in buffered mode
-        // (note: if below line doesn't compile, try:  if (mInputSystem->getNumberOfDevices(OIS::OISJoyStick) > 0) {
-    if( mInputSystem->numJoySticks() > 0 ) {
-//     if (mInputSystem->getNumberOfDevices(OIS::OISJoyStick) > 0) {
-       mJoysticks.resize( mInputSystem->numJoySticks() );
-//       mJoysticks.resize( mInputSystem->getNumberOfDevices(OIS::OISJoyStick) );
-
-      itJoystick    = mJoysticks.begin();
-      itJoystickEnd = mJoysticks.end();
-      for(; itJoystick != itJoystickEnd; ++itJoystick ) {
-        (*itJoystick) = static_cast<OIS::JoyStick*>( mInputSystem->createInputObject( OIS::OISJoyStick, true ) );
-        (*itJoystick)->setEventCallback( this );
-      }
-    }
-  }
-}
-
-void InputManager::capture( void ) {
-    // Need to capture / update each device every frame
-  if( mMouse ) {
-    mMouse->capture();
-  }
-
-  if( mKeyboard ) {
-    mKeyboard->capture();
-  }
-
-  if( mJoysticks.size() > 0 ) {
-    itJoystick    = mJoysticks.begin();
-    itJoystickEnd = mJoysticks.end();
-    for(; itJoystick != itJoystickEnd; ++itJoystick ) {
-      (*itJoystick)->capture();
-    }
-  }
-}
-
-void InputManager::addKeyListener( OIS::KeyListener *keyListener, const std::string& instanceName ) {
-  if( mKeyboard ) {
-        // Check for duplicate items
-    itKeyListener = mKeyListeners.find( instanceName );
-    if( itKeyListener == mKeyListeners.end() ) {
-      mKeyListeners[ instanceName ] = keyListener;
-    }
-    else {
-            // Duplicate Item
-    }
-  }
-}
-
-void InputManager::addMouseListener( OIS::MouseListener *mouseListener, const std::string& instanceName ) {
-  if( mMouse ) {
-        // Check for duplicate items
-    itMouseListener = mMouseListeners.find( instanceName );
-    if( itMouseListener == mMouseListeners.end() ) {
-      mMouseListeners[ instanceName ] = mouseListener;
-    }
-    else {
-            // Duplicate Item
-    }
-  }
-}
-
-void InputManager::addJoystickListener( OIS::JoyStickListener *joystickListener, const std::string& instanceName ) {
-  if( mJoysticks.size() > 0 ) {
-        // Check for duplicate items
-    itJoystickListener = mJoystickListeners.find( instanceName );
-    if( itJoystickListener == mJoystickListeners.end() ) {
-      mJoystickListeners[ instanceName ] = joystickListener;
-    }
-    else {
-            // Duplicate Item
-    }
-  }
-}
-
-void InputManager::removeKeyListener( const std::string& instanceName ) {
-    // Check if item exists
-  itKeyListener = mKeyListeners.find( instanceName );
-  if( itKeyListener != mKeyListeners.end() ) {
-    mKeyListeners.erase( itKeyListener );
-  }
-  else {
-        // Doesn't Exist
-  }
-}
-
-void InputManager::removeMouseListener( const std::string& instanceName ) {
-    // Check if item exists
-  itMouseListener = mMouseListeners.find( instanceName );
-  if( itMouseListener != mMouseListeners.end() ) {
-    mMouseListeners.erase( itMouseListener );
-  }
-  else {
-        // Doesn't Exist
-  }
-}
-
-void InputManager::removeJoystickListener( const std::string& instanceName ) {
-    // Check if item exists
-  itJoystickListener = mJoystickListeners.find( instanceName );
-  if( itJoystickListener != mJoystickListeners.end() ) {
-    mJoystickListeners.erase( itJoystickListener );
-  }
-  else {
-        // Doesn't Exist
-  }
-}
-
-void InputManager::removeKeyListener( OIS::KeyListener *keyListener ) {
-  itKeyListener    = mKeyListeners.begin();
-  itKeyListenerEnd = mKeyListeners.end();
-  for(; itKeyListener != itKeyListenerEnd; ++itKeyListener ) {
-    if( itKeyListener->second == keyListener ) {
-      mKeyListeners.erase( itKeyListener );
-      break;
-    }
-  }
-}
-
-void InputManager::removeMouseListener( OIS::MouseListener *mouseListener ) {
-  itMouseListener    = mMouseListeners.begin();
-  itMouseListenerEnd = mMouseListeners.end();
-  for(; itMouseListener != itMouseListenerEnd; ++itMouseListener ) {
-    if( itMouseListener->second == mouseListener ) {
-      mMouseListeners.erase( itMouseListener );
-      break;
-    }
-  }
-}
-
-void InputManager::removeJoystickListener( OIS::JoyStickListener *joystickListener ) {
-  itJoystickListener    = mJoystickListeners.begin();
-  itJoystickListenerEnd = mJoystickListeners.end();
-  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
-    if( itJoystickListener->second == joystickListener ) {
-      mJoystickListeners.erase( itJoystickListener );
-      break;
-    }
-  }
-}
-
-void InputManager::removeAllListeners( void ) {
-  mKeyListeners.clear();
-  mMouseListeners.clear();
-  mJoystickListeners.clear();
-}
-
-void InputManager::removeAllKeyListeners( void ) {
-  mKeyListeners.clear();
-}
-
-void InputManager::removeAllMouseListeners( void ) {
-  mMouseListeners.clear();
-}
-
-void InputManager::removeAllJoystickListeners( void ) {
-  mJoystickListeners.clear();
-}
-
-void InputManager::setWindowExtents( int width, int height ) {
-    // Set mouse region (if window resizes, we should alter this to reflect as well)
-  const OIS::MouseState &mouseState = mMouse->getMouseState();
-  mouseState.width  = width;
-  mouseState.height = height;
-}
-
-OIS::Mouse* InputManager::getMouse( void ) {
-  return mMouse;
-}
-
-OIS::Keyboard* InputManager::getKeyboard( void ) {
-  return mKeyboard;
-}
-
-OIS::JoyStick* InputManager::getJoystick( unsigned int index ) {
-    // Make sure it's a valid index
-  if( index < mJoysticks.size() ) {
-    return mJoysticks[ index ];
-  }
-
-  return 0;
-}
-
-int InputManager::getNumOfJoysticks( void ) {
-    // Cast to keep compiler happy ^^
-  return (int) mJoysticks.size();
-}
-
-bool InputManager::keyPressed( const OIS::KeyEvent &e ) {
-  itKeyListener    = mKeyListeners.begin();
-  itKeyListenerEnd = mKeyListeners.end();
-  for(; itKeyListener != itKeyListenerEnd; ++itKeyListener ) {
-    if(!itKeyListener->second->keyPressed( e ))
-      break;
-  }
-
-  return true;
-}
-
-bool InputManager::keyReleased( const OIS::KeyEvent &e ) {
-  itKeyListener    = mKeyListeners.begin();
-  itKeyListenerEnd = mKeyListeners.end();
-  for(; itKeyListener != itKeyListenerEnd; ++itKeyListener ) {
-    if(!itKeyListener->second->keyReleased( e ))
-      break;
-  }
-
-  return true;
-}
-
-bool InputManager::mouseMoved( const OIS::MouseEvent &e ) {
-  itMouseListener    = mMouseListeners.begin();
-  itMouseListenerEnd = mMouseListeners.end();
-  for(; itMouseListener != itMouseListenerEnd; ++itMouseListener ) {
-    if(!itMouseListener->second->mouseMoved( e ))
-      break;
-  }
-
-  return true;
-}
-
-bool InputManager::mousePressed( const OIS::MouseEvent &e, OIS::MouseButtonID id ) {
-  itMouseListener    = mMouseListeners.begin();
-  itMouseListenerEnd = mMouseListeners.end();
-  for(; itMouseListener != itMouseListenerEnd; ++itMouseListener ) {
-    if(!itMouseListener->second->mousePressed( e, id ))
-      break;
-  }
-
-  return true;
-}
-
-bool InputManager::mouseReleased( const OIS::MouseEvent &e, OIS::MouseButtonID id ) {
-  itMouseListener    = mMouseListeners.begin();
-  itMouseListenerEnd = mMouseListeners.end();
-  for(; itMouseListener != itMouseListenerEnd; ++itMouseListener ) {
-    if(!itMouseListener->second->mouseReleased( e, id ))
-      break;
-  }
-
-  return true;
-}
-
-bool InputManager::povMoved( const OIS::JoyStickEvent &e, int pov ) {
-  itJoystickListener    = mJoystickListeners.begin();
-  itJoystickListenerEnd = mJoystickListeners.end();
-  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
-    if(!itJoystickListener->second->povMoved( e, pov ))
-      break;
-  }
-
-  return true;
-}
-
-bool InputManager::axisMoved( const OIS::JoyStickEvent &e, int axis ) {
-  itJoystickListener    = mJoystickListeners.begin();
-  itJoystickListenerEnd = mJoystickListeners.end();
-  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
-    if(!itJoystickListener->second->axisMoved( e, axis ))
-      break;
-  }
-
-  return true;
-}
-
-bool InputManager::sliderMoved( const OIS::JoyStickEvent &e, int sliderID ) {
-  itJoystickListener    = mJoystickListeners.begin();
-  itJoystickListenerEnd = mJoystickListeners.end();
-  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
-    if(!itJoystickListener->second->sliderMoved( e, sliderID ))
-      break;
-  }
-
-  return true;
-}
-
-bool InputManager::buttonPressed( const OIS::JoyStickEvent &e, int button ) {
-  itJoystickListener    = mJoystickListeners.begin();
-  itJoystickListenerEnd = mJoystickListeners.end();
-  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
-    if(!itJoystickListener->second->buttonPressed( e, button ))
-      break;
-  }
-
-  return true;
-}
-
-bool InputManager::buttonReleased( const OIS::JoyStickEvent &e, int button ) {
-  itJoystickListener    = mJoystickListeners.begin();
-  itJoystickListenerEnd = mJoystickListeners.end();
-  for(; itJoystickListener != itJoystickListenerEnd; ++itJoystickListener ) {
-    if(!itJoystickListener->second->buttonReleased( e, button ))
-      break;
-  }
-
-  return true;
-}
-
-InputManager* InputManager::getSingletonPtr( void ) {
-  if( !mInputManager ) {
-    mInputManager = new InputManager();
-  }
-
-  return mInputManager;
-}
Index: code/trunk/src/orxonox/InputManager.h
===================================================================
--- code/trunk/src/orxonox/InputManager.h	(revision 1023)
+++ 	(revision )
@@ -1,93 +1,0 @@
-#ifndef _InputManager_H__
-#define _InputManager_H__
-
-#ifdef WIN32
-#include <OIS/OISMouse.h>
-#include <OIS/OISKeyboard.h>
-#include <OIS/OISJoyStick.h>
-#include <OIS/OISInputManager.h>
-#else
-#include <OISMouse.h>
-#include <OISKeyboard.h>
-#include <OISJoyStick.h>
-#include <OISInputManager.h>
-#endif
-
-#include <OgreRenderWindow.h>
-
-#include "OrxonoxPrereqs.h"
-
-class _OrxonoxExport InputManager : public OIS::KeyListener, public OIS::MouseListener, public OIS::JoyStickListener {
-  public:
-    virtual ~InputManager( void );
-
-    void initialise( Ogre::RenderWindow *renderWindow );
-    void capture( void );
-
-    void addKeyListener( OIS::KeyListener *keyListener, const std::string& instanceName );
-    void addMouseListener( OIS::MouseListener *mouseListener, const std::string& instanceName );
-    void addJoystickListener( OIS::JoyStickListener *joystickListener, const std::string& instanceName );
-
-    void removeKeyListener( const std::string& instanceName );
-    void removeMouseListener( const std::string& instanceName );
-    void removeJoystickListener( const std::string& instanceName );
-
-    void removeKeyListener( OIS::KeyListener *keyListener );
-    void removeMouseListener( OIS::MouseListener *mouseListener );
-    void removeJoystickListener( OIS::JoyStickListener *joystickListener );
-
-    void removeAllListeners( void );
-    void removeAllKeyListeners( void );
-    void removeAllMouseListeners( void );
-    void removeAllJoystickListeners( void );
-
-    void setWindowExtents( int width, int height );
-
-    OIS::Mouse*    getMouse( void );
-    OIS::Keyboard* getKeyboard( void );
-    OIS::JoyStick* getJoystick( unsigned int index );
-
-    int getNumOfJoysticks( void );
-
-    static InputManager* getSingletonPtr( void );
-  private:
-    InputManager( void );
-    InputManager( const InputManager& ) { }
-    InputManager & operator = ( const InputManager& );
-
-    bool keyPressed( const OIS::KeyEvent &e );
-    bool keyReleased( const OIS::KeyEvent &e );
-
-    bool mouseMoved( const OIS::MouseEvent &e );
-    bool mousePressed( const OIS::MouseEvent &e, OIS::MouseButtonID id );
-    bool mouseReleased( const OIS::MouseEvent &e, OIS::MouseButtonID id );
-
-    bool povMoved( const OIS::JoyStickEvent &e, int pov );
-    bool axisMoved( const OIS::JoyStickEvent &e, int axis );
-    bool sliderMoved( const OIS::JoyStickEvent &e, int sliderID );
-    bool buttonPressed( const OIS::JoyStickEvent &e, int button );
-    bool buttonReleased( const OIS::JoyStickEvent &e, int button );
-
-    OIS::Mouse        *mMouse;
-    OIS::Keyboard     *mKeyboard;
-    OIS::InputManager *mInputSystem;
-
-    std::vector<OIS::JoyStick*> mJoysticks;
-    std::vector<OIS::JoyStick*>::iterator itJoystick;
-    std::vector<OIS::JoyStick*>::iterator itJoystickEnd;
-
-    std::map<std::string, OIS::KeyListener*> mKeyListeners;
-    std::map<std::string, OIS::MouseListener*> mMouseListeners;
-    std::map<std::string, OIS::JoyStickListener*> mJoystickListeners;
-
-    std::map<std::string, OIS::KeyListener*>::iterator itKeyListener;
-    std::map<std::string, OIS::MouseListener*>::iterator itMouseListener;
-    std::map<std::string, OIS::JoyStickListener*>::iterator itJoystickListener;
-
-    std::map<std::string, OIS::KeyListener*>::iterator itKeyListenerEnd;
-    std::map<std::string, OIS::MouseListener*>::iterator itMouseListenerEnd;
-    std::map<std::string, OIS::JoyStickListener*>::iterator itJoystickListenerEnd;
-
-    static InputManager *mInputManager;
-};
-#endif /* _InputManager_H__ */
Index: code/trunk/src/orxonox/Main.cc
===================================================================
--- code/trunk/src/orxonox/Main.cc	(revision 1023)
+++ code/trunk/src/orxonox/Main.cc	(revision 1024)
@@ -84,5 +84,5 @@
 
     orx->start();
-    orx->destroy();
+    orx->destroySingleton();
   }
   catch (std::exception &ex)
Index: code/trunk/src/orxonox/Orxonox.cc
===================================================================
--- code/trunk/src/orxonox/Orxonox.cc	(revision 1023)
+++ code/trunk/src/orxonox/Orxonox.cc	(revision 1024)
@@ -50,4 +50,5 @@
 //misc
 //#include "util/Sleep.h"
+#include "util/ArgReader.h"
 
 // audio
@@ -61,5 +62,4 @@
 
 // objects
-#include "core/ArgReader.h"
 #include "core/Debug.h"
 #include "core/Factory.h"
@@ -70,5 +70,5 @@
 #include "objects/weapon/BulletManager.h"
 
-#include "InputHandler.h"
+#include "core/InputManager.h"
 
 #include "Orxonox.h"
@@ -108,5 +108,5 @@
       delete this->orxonoxHUD_;
     Loader::close();
-    InputHandler::destroy();
+    InputManager::destroySingleton();
     if (this->auMan_)
       delete this->auMan_;
@@ -147,6 +147,4 @@
       singletonRef_s = new Orxonox();
     return singletonRef_s;
-    //static Orxonox theOnlyInstance;
-    //return &theOnlyInstance;
   }
 
@@ -154,5 +152,5 @@
     @brief Destroys the Orxonox singleton.
   */
-  void Orxonox::destroy()
+  void Orxonox::destroySingleton()
   {
     if (singletonRef_s)
@@ -174,5 +172,5 @@
     std::string mode;
 
-    ArgReader ar = ArgReader(argc, argv);
+    ArgReader ar(argc, argv);
     ar.checkArgument("mode", mode, false);
     ar.checkArgument("data", this->dataPath_, false);
@@ -327,8 +325,9 @@
   void Orxonox::setupInputSystem()
   {
-    inputHandler_ = InputHandler::getSingleton();
+    inputHandler_ = InputManager::getSingleton();
     if (!inputHandler_->initialise(ogre_->getWindowHandle(),
           ogre_->getWindowWidth(), ogre_->getWindowHeight()))
       abortImmediate();
+    inputHandler_->setInputMode(IM_INGAME);
   }
 
Index: code/trunk/src/orxonox/Orxonox.h
===================================================================
--- code/trunk/src/orxonox/Orxonox.h	(revision 1023)
+++ code/trunk/src/orxonox/Orxonox.h	(revision 1024)
@@ -17,5 +17,5 @@
 
 #include "GraphicsEngine.h"
-#include "InputEventListener.h"
+#include "core/InputEventListener.h"
 
 
@@ -44,5 +44,5 @@
 
       static Orxonox* getSingleton();
-      static void destroy();
+      static void destroySingleton();
 
    private:
@@ -75,5 +75,5 @@
       audio::AudioManager*  auMan_;         //!< audio manager
       BulletManager*        bulletMgr_;     //!< Keeps track of the thrown bullets
-      InputHandler*         inputHandler_;  //!< Handles input with key bindings
+      InputManager*         inputHandler_;  //!< Handles input with key bindings
       Ogre::Root*           root_;          //!< Holy grail of Ogre
       Ogre::Timer*          timer_;         //!< Main loop timer
Index: code/trunk/src/orxonox/OrxonoxPlatform.h
===================================================================
--- code/trunk/src/orxonox/OrxonoxPlatform.h	(revision 1023)
+++ code/trunk/src/orxonox/OrxonoxPlatform.h	(revision 1024)
@@ -190,7 +190,8 @@
 
 // Integer formats of fixed bit width
-typedef unsigned int uint32;
+// FIXME: consider 64 bit platforms!
+/*typedef unsigned int uint32;
 typedef unsigned short uint16;
-typedef unsigned char uint8;
+typedef unsigned char uint8;*/
 
 #ifdef ORXONOX_DOUBLE_PRECISION
@@ -232,5 +233,5 @@
 // disable: 'MultiTypeString' : multiple assignment operators specified
 // Used in MultiType and works fine so far
-#   pragma warning (disable : 4522)
+//#   pragma warning (disable : 4522)
 
 // disable: "non dll-interface class used as base for dll-interface class"
@@ -270,3 +271,6 @@
 } /* namespace orxonox */
 
+// include visual leak detector to search for memory links
+//#include <vld.h>
+
 #endif /* _OrxonoxPlatform_H__ */
Index: code/trunk/src/orxonox/OrxonoxPrereqs.h
===================================================================
--- code/trunk/src/orxonox/OrxonoxPrereqs.h	(revision 1023)
+++ code/trunk/src/orxonox/OrxonoxPrereqs.h	(revision 1024)
@@ -27,7 +27,7 @@
 
 /**
- @file  OrxonoxPrereqs.h
- @brief Contains all the necessary forward declarations for all classes and structs.
- */
+  @file
+  @brief Contains all the necessary forward declarations for all classes and structs.
+*/
 
 #ifndef _OrxonoxPrereqs_H__
@@ -59,29 +59,18 @@
 //-----------------------------------------------------------------------
 
-// classes that have not yet been put into a namespace
-class InputManager;
-class SpaceShipSteering;
+namespace orxonox {
+  class GraphicsEngine;
+  class Orxonox;
 
-namespace orxonox {
+  // objects
   class Ambient;
-  class BaseObject;
   class Camera;
-  class GraphicsEngine;
-  struct InputEvent;
-  class InputEventListener;
-  class InputHandler;
-  class Mesh;
+  class Explosion;
+  class Fighter;
   class Model;
   class NPC;
-  class OrxListener;
-  class Orxonox;
+  class Projectile;
   class Skybox;
   class SpaceShip;
-  class Tickable;
-  class TickFrameListener;
-  template <class T>
-  class Timer;
-  class TimerBase;
-  class TimerFrameListener;
   class WorldEntity;
 
@@ -93,5 +82,16 @@
   class WeaponStation;
 
+  // tools
+  class BillboardSet;
+  class Light;
+  class Mesh;
+  template <class T>
+  class Timer;
+  class TimerBase;
+
+  // particle
   class ParticleInterface;
+
+  // hud
   class HUD;
 }
Index: code/trunk/src/orxonox/OrxonoxStableHeaders.h
===================================================================
--- code/trunk/src/orxonox/OrxonoxStableHeaders.h	(revision 1023)
+++ code/trunk/src/orxonox/OrxonoxStableHeaders.h	(revision 1024)
@@ -40,9 +40,9 @@
 // including std headers here is useless since they're already precompiled
 
-// not including the entire Ogre.h doesn't exceed the default heap size for pch
 #ifndef WIN32_LEAN_AND_MEAN
 // prevent Ogre from including winsock.h that messes with winsock2.h from enet
 #  define WIN32_LEAN_AND_MEAN
 #endif
+// not including the entire Ogre.h doesn't exceed the default heap size for pch
 //#include <Ogre.h>
 #include <OgreBillboardSet.h>
Index: code/trunk/src/orxonox/SpaceshipSteering.cc
===================================================================
--- code/trunk/src/orxonox/SpaceshipSteering.cc	(revision 1023)
+++ 	(revision )
@@ -1,233 +1,0 @@
-/*
-*   ORXONOX - the hottest 3D action shooter ever to exist
-*
-*
-*   License notice:
-*
-*   This program is free software; you can redistribute it and/or
-*   modify it under the terms of the GNU General Public License
-*   as published by the Free Software Foundation; either version 2
-*   of the License, or (at your option) any later version.
-*
-*   This program is distributed in the hope that it will be useful,
-*   but WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*   GNU General Public License for more details.
-*
-*   You should have received a copy of the GNU General Public License
-*   along with this program; if not, write to the Free Software
-*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-*
-*   Author:
-*      ...
-*   Co-authors:
-*      ...
-*
-*/
-
-#include "OrxonoxStableHeaders.h"
-
-#include <OgreNode.h>
-#include <OgreSceneNode.h>
-
-#include "core/Debug.h"
-#include "util/Math.h"
-#include "SpaceshipSteering.h"
-
-namespace orxonox
-{
-
-  SpaceshipSteering::SpaceshipSteering(float maxSpeedForward, float
-    maxSpeedRotateUpDown, float maxSpeedRotateRightLeft, float
-    maxSpeedLoopRightLeft)
-  {
-
-      COUT(3) << "Info: Steering was loaded" << std::endl;
-      moveForward_ = 0;
-      rotateUp_ = 0;
-      rotateDown_ = 0;
-      rotateRight_ = 0;
-      rotateLeft_ = 0;
-      loopRight_ = 0;
-      loopLeft_ = 0;
-      brakeForward_ = 0;
-      brakeRotate_ = 0;
-      brakeLoop_ = 0;
-      speedForward_ = 0;
-      speedRotateUpDown_ = 0;
-      speedRotateRightLeft_ = 0;
-      speedLoopRightLeft_ = 0;
-      maxSpeedForward_ = maxSpeedForward;
-      maxSpeedRotateUpDown_ = maxSpeedRotateUpDown;
-      maxSpeedRotateRightLeft_ = maxSpeedRotateRightLeft;
-      maxSpeedLoopRightLeft_ = maxSpeedLoopRightLeft;
-      accelerationForward_ = 0;
-      accelerationRotateUpDown_ = 0;
-      accelerationRotateRightLeft_ = 0;
-      accelerationLoopRightLeft_ = 0;
-  }
-
-  void SpaceshipSteering::tick(float time)
-  {
-
-    if(moveForward_ > 0) {
-      accelerationForward_ = moveForward_;
-      if(speedForward_ < maxSpeedForward_)
-        speedForward_ += accelerationForward_*time;
-      if(speedForward_ > maxSpeedForward_)
-        speedForward_ = maxSpeedForward_;
-    }
-    if(moveForward_ <= 0) {
-      accelerationForward_ = brakeForward_;
-      if(speedForward_ > 0)
-        speedForward_ -= accelerationForward_*time;
-      if(speedForward_ < 0)
-        speedForward_ = 0;
-    }
-
-    if(rotateUp_ > 0) {
-      accelerationRotateUpDown_ = rotateUp_;
-      if(speedRotateUpDown_ < maxSpeedRotateUpDown_)
-        speedRotateUpDown_ += accelerationRotateUpDown_*time;
-      if(speedRotateUpDown_ > maxSpeedRotateUpDown_)
-        speedRotateUpDown_ = maxSpeedRotateUpDown_;
-    }
-    if(rotateDown_ > 0) {
-      accelerationRotateUpDown_ = rotateDown_;
-      if(speedRotateUpDown_ > -maxSpeedRotateUpDown_)
-        speedRotateUpDown_ -= accelerationRotateUpDown_*time;
-      if(speedRotateUpDown_ < -maxSpeedRotateUpDown_)
-        speedRotateUpDown_ = -maxSpeedRotateUpDown_;
-    }
-    if(rotateUp_ == 0 && rotateDown_ == 0) {
-      accelerationRotateUpDown_ = brakeRotate_;
-      if(speedRotateUpDown_ > 0)
-        speedRotateUpDown_ -= accelerationRotateUpDown_*time;
-      if(speedRotateUpDown_ < 0)
-        speedRotateUpDown_ += accelerationRotateUpDown_*time;
-      if(fabsf(speedRotateUpDown_)<accelerationRotateUpDown_*time)
-        speedRotateUpDown_ = 0;
-    }
-
-    if(rotateRight_ > 0) {
-      accelerationRotateRightLeft_ = rotateRight_;
-      if(speedRotateRightLeft_ > -maxSpeedRotateRightLeft_)
-        speedRotateRightLeft_ -= accelerationRotateRightLeft_*time;
-      if(speedRotateRightLeft_ < -maxSpeedRotateRightLeft_)
-        speedRotateRightLeft_ = -maxSpeedRotateRightLeft_;
-    }
-    if(rotateLeft_ > 0) {
-      accelerationRotateRightLeft_ = rotateLeft_;
-      if(speedRotateRightLeft_ < maxSpeedRotateRightLeft_)
-        speedRotateRightLeft_ += accelerationRotateRightLeft_*time;
-      if(speedRotateRightLeft_ > maxSpeedRotateRightLeft_)
-        speedRotateRightLeft_ = maxSpeedRotateRightLeft_;
-    }
-    if(rotateRight_ == 0 && rotateLeft_ == 0) {
-      accelerationRotateRightLeft_ = brakeRotate_;
-      if(speedRotateRightLeft_ > 0)
-        speedRotateRightLeft_ -= accelerationRotateRightLeft_*time;
-      if(speedRotateRightLeft_ < 0)
-        speedRotateRightLeft_ += accelerationRotateRightLeft_*time;
-      if(fabsf(speedRotateRightLeft_)<accelerationRotateRightLeft_*time)
-        speedRotateRightLeft_ = 0;
-    }
-
-    if(loopRight_ > 0) {
-      accelerationLoopRightLeft_ = loopRight_;
-      if(speedLoopRightLeft_ < maxSpeedLoopRightLeft_)
-        speedLoopRightLeft_ += accelerationLoopRightLeft_*time;
-      if(speedLoopRightLeft_ > maxSpeedLoopRightLeft_)
-        speedLoopRightLeft_ = maxSpeedLoopRightLeft_;
-    }
-    if(loopLeft_ > 0) {
-      accelerationLoopRightLeft_ = loopLeft_;
-      if(speedLoopRightLeft_ > -maxSpeedLoopRightLeft_)
-        speedLoopRightLeft_ -= accelerationLoopRightLeft_*time;
-      if(speedLoopRightLeft_ < -maxSpeedLoopRightLeft_)
-        speedLoopRightLeft_ = -maxSpeedLoopRightLeft_;
-    }
-    if(loopLeft_ == 0 && loopRight_ == 0) {
-      accelerationLoopRightLeft_ = brakeLoop_;
-      if(speedLoopRightLeft_ > 0)
-        speedLoopRightLeft_ -= accelerationLoopRightLeft_*time;
-      if(speedLoopRightLeft_ < 0)
-        speedLoopRightLeft_ += accelerationLoopRightLeft_*time;
-      if(fabsf(speedLoopRightLeft_)<accelerationLoopRightLeft_*time)
-        speedLoopRightLeft_ = 0;
-    }
-
-    Vector3 transVector = Vector3::ZERO;
-    transVector.z = 1;
-    steeringNode_->translate(transVector*speedForward_*time,
-      Ogre::SceneNode::TS_LOCAL);
-    steeringNode_->pitch(Degree(speedRotateUpDown_*time),
-      Ogre::SceneNode::TS_LOCAL);
-    steeringNode_->yaw(Degree(speedRotateRightLeft_*time),
-      Ogre::SceneNode::TS_LOCAL);
-    steeringNode_->roll(Degree(speedLoopRightLeft_*time),
-      Ogre::SceneNode::TS_LOCAL);
-
-  }
-
-  void SpaceshipSteering::moveForward(float moveForward) {
-    moveForward_ = moveForward;
-  }
-
-  void SpaceshipSteering::rotateUp(float rotateUp) {
-    rotateUp_ = rotateUp;
-  }
-
-  void SpaceshipSteering::rotateDown(float rotateDown) {
-    rotateDown_ = rotateDown;
-  }
-
-  void SpaceshipSteering::rotateLeft(float rotateLeft) {
-    rotateLeft_ = rotateLeft;
-  }
-
-  void SpaceshipSteering::rotateRight(float rotateRight) {
-    rotateRight_ = rotateRight;
-  }
-
-  void SpaceshipSteering::loopLeft(float loopLeft) {
-    loopLeft_ = loopLeft;
-  }
-
-  void SpaceshipSteering::loopRight(float loopRight) {
-    loopRight_ = loopRight;
-  }
-
-  void SpaceshipSteering::brakeForward(float brakeForward) {
-    brakeForward_ = brakeForward;
-  }
-
-  void SpaceshipSteering::brakeRotate(float brakeRotate) {
-    brakeRotate_ = brakeRotate;
-  }
-
-  void SpaceshipSteering::brakeLoop(float brakeLoop) {
-    brakeLoop_ = brakeLoop;
-  }
-
-  void SpaceshipSteering::maxSpeedForward(float maxSpeedForward) {
-    maxSpeedForward_ = maxSpeedForward;
-  }
-
-  void SpaceshipSteering::maxSpeedRotateUpDown(float maxSpeedRotateUpDown) {
-    maxSpeedRotateUpDown_ = maxSpeedRotateUpDown;
-  }
-
-  void SpaceshipSteering::maxSpeedRotateRightLeft(float maxSpeedRotateRightLeft) {
-    maxSpeedRotateRightLeft_ = maxSpeedRotateRightLeft;
-  }
-
-  void SpaceshipSteering::maxSpeedLoopRightLeft(float maxSpeedLoopRightLeft) {
-    maxSpeedLoopRightLeft_ = maxSpeedLoopRightLeft;
-  }
-
-  void SpaceshipSteering::addNode(Ogre::SceneNode *steeringNode) {
-    steeringNode_ = steeringNode;
-  }
-
-}
Index: code/trunk/src/orxonox/SpaceshipSteering.h
===================================================================
--- code/trunk/src/orxonox/SpaceshipSteering.h	(revision 1023)
+++ 	(revision )
@@ -1,66 +1,0 @@
-#ifndef _SpaceShipSteering_H__
-#define _SpaceShipSteering_H__
-
-#include <OgrePrerequisites.h>
-
-#include "OrxonoxPrereqs.h"
-
-namespace orxonox
-{
-  class _OrxonoxExport SpaceshipSteering
-  {
-  public:
-    SpaceshipSteering(float maxSpeedForward, float maxSpeedRotateUpDown,
-      float maxSpeedRotateRightLeft, float maxSpeedLoopRightLeft);
-    void tick(float time);
-    void moveForward(float moveForward);
-    void rotateUp(float rotateUp);
-    void rotateDown(float rotateDown);
-    void rotateRight(float rotateRight);
-    void rotateLeft(float rotateLeft);
-    void loopRight(float loopRight);
-    void loopLeft(float loopLeft);
-    void brakeForward(float brakeForward);
-    void brakeRotate(float brakeRotate);
-    void brakeLoop(float brakeLoop);
-    void maxSpeedForward(float maxSpeedForward);
-    void maxSpeedRotateUpDown(float maxSpeedRotateUpDown);
-    void maxSpeedRotateRightLeft(float maxSpeedRotateRightLeft);
-    void maxSpeedLoopRightLeft(float maxSpeedLoopRightLeft);
-    void addNode(Ogre::SceneNode *steeringNode);
-
-  protected:
-    Ogre::SceneNode *steeringNode_;
-
-  private:
-    float moveForward_;
-    float rotateUp_;
-    float rotateDown_;
-    float rotateRight_;
-    float rotateLeft_;
-    float loopRight_;
-    float loopLeft_;
-    float brakeForward_;
-    float brakeRotate_;
-    float brakeLoop_;
-
-    float speedForward_;
-    float speedRotateUpDown_;
-    float speedRotateRightLeft_;
-    float speedLoopRightLeft_;
-
-    float maxSpeedForward_;
-    float maxSpeedRotateUpDown_;
-    float maxSpeedRotateRightLeft_;
-    float maxSpeedLoopRightLeft_;
-
-    float accelerationForward_;
-    float accelerationRotateUpDown_;
-    float accelerationRotateRightLeft_;
-    float accelerationLoopRightLeft_;
-
-  };
-}
-
-
-#endif /* _SpaceShipSteering_H__ */
Index: code/trunk/src/orxonox/core/ArgReader.cc
===================================================================
--- code/trunk/src/orxonox/core/ArgReader.cc	(revision 1023)
+++ 	(revision )
@@ -1,113 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *
- *
- *   License notice:
- *
- *   This program is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU General Public License
- *   as published by the Free Software Foundation; either version 2
- *   of the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Benjamin Knecht <beni_at_orxonox.net>, (C) 2007
- *   Co-authors:
- *      ...
- *
- */
-
-/**
- @file  ArgReader.cc
- @brief Argument Reader
- */
-
-#include <iostream>
-
-#include "ArgReader.h"
-
-namespace orxonox {
-
-  ArgReader::ArgReader(int argc, char** argv)
-  {
-    counter_ = argc;
-    arguments_ = argv;
-    fail_ = false;
-    errorStr_ = "";
-  }
-
-  void ArgReader::checkArgument(std::string option, std::string &string, bool must)
-  {
-    int argpos = checkOption(option) + 1;
-    if(argpos != 0)
-    {
-      string = arguments_[argpos];
-    }
-    else
-    {
-      if(must) {
-        errorStr_ = errorStr_ + "Cannot find mandatory argument \"" + option + "\"\n";
-        fail_ = true;
-      }
-    }
-
-  }
-
-  void ArgReader::checkArgument(std::string option, int &integer, bool must)
-  {
-    int argpos = checkOption(option) + 1;
-    if(argpos != 0)
-    {
-      integer = atoi(arguments_[argpos]);
-    }
-    else
-    {
-      if(must) {
-        errorStr_ = errorStr_ + "Cannot find mandatory argument \"" + option + "\"\n";
-        fail_ = true;
-      }
-    }
-  }
-
-  void ArgReader::checkArgument(std::string option, float &floating, bool must)
-  {
-    int argpos = checkOption(option) + 1;
-    if(argpos != 0)
-    {
-      floating = (float)atof(arguments_[argpos]);
-    }
-    else
-    {
-      if(must) {
-        errorStr_ = errorStr_ + "Cannot find mandatory argument \"" + option + "\"\n";
-        fail_ = true;
-      }
-    }
-  }
-
-  int ArgReader::checkOption(std::string option)
-  {
-    for(int i = 1; i < counter_; i++)
-    {
-      if(arguments_[i] == "--" + option)
-          return i;
-    }
-    return -1;
-  }
-
-  bool ArgReader::errorHandling()
-  {
-    if(fail_)
-      std::cout << errorStr_;
-    return fail_;
-  }
-}
-
Index: code/trunk/src/orxonox/core/ArgReader.h
===================================================================
--- code/trunk/src/orxonox/core/ArgReader.h	(revision 1023)
+++ 	(revision )
@@ -1,62 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *
- *
- *   License notice:
- *
- *   This program is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU General Public License
- *   as published by the Free Software Foundation; either version 2
- *   of the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Benjamin Knecht <beni_at_orxonox.net>
- *   Co-authors:
- *      ...
- *
- */
-
-/**
- @file  Argreader.h
- @brief reads arguments
- @author Benjamin Knecht <beni_at_orxonox.net>
- */
-
-#ifndef _ArgReader_H__
-#define _ArgReader_H__
-
-#include <string>
-
-#include "CorePrereqs.h"
-
-namespace orxonox {
-
-  class _CoreExport ArgReader
-  {
-    public:
-      ArgReader(int argc, char **argv);
-      void checkArgument(std::string option, std::string& string, bool must=false);
-      void checkArgument(std::string option, int& integer, bool must=false);
-      void checkArgument(std::string option, float& floating, bool must=false);
-      bool errorHandling();
-    private:
-      int checkOption(std::string option);
-
-    private:
-      int counter_;
-      char **arguments_;
-      bool fail_;
-      std::string errorStr_;
-  };
-
-}
-#endif /* _ArgReader_H__ */
Index: code/trunk/src/orxonox/core/CMakeLists.txt
===================================================================
--- code/trunk/src/orxonox/core/CMakeLists.txt	(revision 1023)
+++ code/trunk/src/orxonox/core/CMakeLists.txt	(revision 1024)
@@ -5,9 +5,10 @@
   Identifier.cc
   IdentifierDistributor.cc
+  InputHandler.cc
+  InputManager.cc
   MetaObjectList.cc
   ConfigValueContainer.cc
   Error.cc
   SignalHandler.cc
-  ArgReader.cc
   DebugLevel.cc
   OutputHandler.cc
Index: code/trunk/src/orxonox/core/CorePrereqs.h
===================================================================
--- code/trunk/src/orxonox/core/CorePrereqs.h	(revision 1023)
+++ code/trunk/src/orxonox/core/CorePrereqs.h	(revision 1024)
@@ -27,6 +27,6 @@
 
 /**
-    @file  CorePrereq.h
-    @brief Contains all the necessary forward declarations for all classes, structs and enums.
+  @file
+  @brief Contains all the necessary forward declarations for all classes and structs.
 */
 
@@ -36,5 +36,5 @@
 #include <string>
 
-#include "orxonox/OrxonoxPlatform.h"
+#include "OrxonoxPlatform.h"
 
 //-----------------------------------------------------------------------
@@ -67,7 +67,7 @@
   typedef std::string LanguageEntryLabel;
 
-  class ArgReader;
   class BaseFactory;
   class BaseMetaObjectListElement;
+  class BaseObject;
   template <class T>
   class ClassFactory;
@@ -86,4 +86,7 @@
   class Identifier;
   class IdentifierDistributor;
+  class InputHandlerGame;
+  class InputHandlerGUI;
+  class InputManager;
   template <class T>
   class Iterator;
@@ -103,4 +106,5 @@
   template <class T>
   class SubclassIdentifier;
+  class Tickable;
   template <class T, class O>
   class XMLPortClassObjectContainer;
Index: code/trunk/src/orxonox/core/Factory.h
===================================================================
--- code/trunk/src/orxonox/core/Factory.h	(revision 1023)
+++ code/trunk/src/orxonox/core/Factory.h	(revision 1024)
@@ -51,6 +51,4 @@
 namespace orxonox
 {
-    class BaseObject; // Forward declaration
-
     // ###############################
     // ###         Factory         ###
Index: code/trunk/src/orxonox/core/Identifier.h
===================================================================
--- code/trunk/src/orxonox/core/Identifier.h	(revision 1023)
+++ code/trunk/src/orxonox/core/Identifier.h	(revision 1024)
@@ -33,5 +33,5 @@
      - the name
      - a list with all objects
-     - parents and childs
+     - parents and children
      - the factory (if available)
      - the networkID that can be synchronised with the server
@@ -65,7 +65,4 @@
 namespace orxonox
 {
-    class BaseFactory; // Forward declaration
-    class BaseObject;  // Forward declaration
-
     // ###############################
     // ###       Identifier        ###
Index: code/trunk/src/orxonox/core/InputEvent.h
===================================================================
--- code/trunk/src/orxonox/core/InputEvent.h	(revision 1024)
+++ code/trunk/src/orxonox/core/InputEvent.h	(revision 1024)
@@ -0,0 +1,52 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Reto Grieder
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+ @file
+ @brief InputEvent Structure declaration
+ */
+
+#ifndef _InputEvent_H__
+#define _InputEvent_H__
+
+#include "CorePrereqs.h"
+
+namespace orxonox
+{
+  /**
+    @brief Interface that any class can use to get key independent input.
+  */
+  struct InputEvent
+  {
+    unsigned char id;      //!< Event ID
+    bool bStarted;         //!< Tells whether the Event started or ended (e.g. firing started)
+    int data1, data2;      //!< Two additional integer datafields, for instance for the mouse moved event
+    void* dataRef;         //!< Additional pointer to any further data
+  };
+}
+
+#endif /* _InputEvent_H__ */
Index: code/trunk/src/orxonox/core/InputEventListener.cc
===================================================================
--- code/trunk/src/orxonox/core/InputEventListener.cc	(revision 1024)
+++ code/trunk/src/orxonox/core/InputEventListener.cc	(revision 1024)
@@ -0,0 +1,51 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Reto Grieder
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+ @file
+ @brief Core relevant parts of InputEventListener
+ */
+
+#include "core/CoreIncludes.h"
+#include "InputEventListener.h"
+
+namespace orxonox
+{
+  /**
+    @brief standard constructor
+  */
+  InputEventListener::InputEventListener()
+  {
+    RegisterRootObject(InputEventListener);
+    this->bActive_ = true;
+  }
+
+  InputEventListener::~InputEventListener()
+  {
+  }
+
+}
Index: code/trunk/src/orxonox/core/InputEventListener.h
===================================================================
--- code/trunk/src/orxonox/core/InputEventListener.h	(revision 1024)
+++ code/trunk/src/orxonox/core/InputEventListener.h	(revision 1024)
@@ -0,0 +1,60 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Reto Grieder
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+ @file
+ @brief InputEventListener Interface declaration
+ */
+
+#ifndef _InputEventListener_H__
+#define _InputEventListener_H__
+
+#include "CorePrereqs.h"
+
+#include "core/OrxonoxClass.h"
+#include "InputEvent.h"
+
+namespace orxonox
+{
+  /**
+    @brief Interface that any class can use to get key independent input.
+  */
+  class _CoreExport InputEventListener : virtual public OrxonoxClass
+  {
+    friend class InputHandlerGame;
+  public:
+    InputEventListener();
+    virtual ~InputEventListener();
+    /** Method is called every time an Input event occurs && bActive */
+    virtual void eventOccured(InputEvent &evt) = 0;
+
+  private:
+    bool bActive_;
+  };
+}
+
+#endif /* _InputEventListener_H__ */
Index: code/trunk/src/orxonox/core/InputHandler.cc
===================================================================
--- code/trunk/src/orxonox/core/InputHandler.cc	(revision 1024)
+++ code/trunk/src/orxonox/core/InputHandler.cc	(revision 1024)
@@ -0,0 +1,222 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Reto Grieder
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+ @file
+ @brief Implementation of the different input handlers.
+ */
+
+#include "Debug.h"
+#include "util/Convert.h"
+#include "InputEventListener.h"
+#include "InputEvent.h"
+#include "InputHandler.h"
+
+namespace orxonox
+{
+  // ###############################
+  // ###    InputHandlerGame     ###
+  // ###############################
+
+  /**
+    @brief standard constructor
+  */
+  InputHandlerGame::InputHandlerGame()
+  {
+  }
+
+  /**
+    @brief Destructor
+  */
+  InputHandlerGame::~InputHandlerGame()
+  {
+  }
+
+  /**
+    @brief Loads the key bindings from the ini file.
+    Currently, this is just a simple test routine that fills the list with numbers.
+  */
+  bool InputHandlerGame::loadBindings()
+  {
+    for (int i = 0; i < numberOfKeys_s; i++)
+    {
+      // simply write the key number (i) in the string
+      this->bindingsKeyPressed_[i] = ConvertValueAndReturn<int, std::string>(i);
+      this->bindingsKeyReleased_[i] = ConvertValueAndReturn<int, std::string>(i);
+    }
+    return true;
+  }
+
+  /**
+    @brief Event handler for the keyPressed Event.
+    @param e Event information
+  */
+  bool InputHandlerGame::keyPressed(const OIS::KeyEvent &e)
+  {
+    if (e.key == OIS::KC_ESCAPE)
+    {
+      InputEvent e = {1, true, 0, 0, 0};
+      InputHandlerGame::callListeners(e);
+    }
+    else
+    {
+      // find the appropriate key binding
+      std::string cmdStr = bindingsKeyPressed_[int(e.key)];
+      //COUT(3) << cmdStr << " pressed" << std::endl;
+    }
+    return true;
+  }
+
+  /**
+    @brief Event handler for the keyReleased Event.
+    @param e Event information
+  */
+  bool InputHandlerGame::keyReleased(const OIS::KeyEvent &e)
+  {
+    // find the appropriate key binding
+    std::string cmdStr = bindingsKeyReleased_[int(e.key)];
+    //COUT(3) << cmdStr << " released" << std::endl;
+    return true;
+  }
+
+  /**
+    @brief Event handler for the mouseMoved Event.
+    @param e Event information
+  */
+  bool InputHandlerGame::mouseMoved(const OIS::MouseEvent &e)
+  {
+    return true;
+  }
+
+  /**
+    @brief Event handler for the mousePressed Event.
+    @param e Event information
+    @param id The ID of the mouse button
+  */
+  bool InputHandlerGame::mousePressed(const OIS::MouseEvent &e, OIS::MouseButtonID id)
+  {
+    return true;
+  }
+
+  /**
+    @brief Event handler for the mouseReleased Event.
+    @param e Event information
+    @param id The ID of the mouse button
+  */
+  bool InputHandlerGame::mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id)
+  {
+    return true;
+  }
+
+  /**
+    @brief Calls all the objects from classes that derive from InputEventListener.
+    @param evt The input event that occured.
+  */
+  inline void InputHandlerGame::callListeners(orxonox::InputEvent &evt)
+  {
+    for (Iterator<InputEventListener> it = ObjectList<InputEventListener>::start(); it; )
+    {
+      if (it->bActive_)
+        (it++)->eventOccured(evt);
+      else
+        it++;
+    }
+  }
+
+
+  // ###############################
+  // ###     InputHandlerGUI     ###
+  // ###############################
+
+  /**
+    @brief standard constructor
+  */
+  InputHandlerGUI::InputHandlerGUI()
+  {
+  }
+
+  /**
+    @brief Destructor
+  */
+  InputHandlerGUI::~InputHandlerGUI()
+  {
+  }
+
+  /**
+    @brief Event handler for the keyPressed Event.
+    @param e Event information
+  */
+  bool InputHandlerGUI::keyPressed(const OIS::KeyEvent &e)
+  {
+		//CEGUI::System::getSingleton().injectKeyDown( arg.key );
+		//CEGUI::System::getSingleton().injectChar( arg.text );
+    return true;
+  }
+
+  /**
+    @brief Event handler for the keyReleased Event.
+    @param e Event information
+  */
+  bool InputHandlerGUI::keyReleased(const OIS::KeyEvent &e)
+  {
+		//CEGUI::System::getSingleton().injectKeyUp( arg.key );
+    return true;
+  }
+
+  /**
+    @brief Event handler for the mouseMoved Event.
+    @param e Event information
+  */
+  bool InputHandlerGUI::mouseMoved(const OIS::MouseEvent &e)
+  {
+		//CEGUI::System::getSingleton().injectMouseMove( arg.state.X.rel, arg.state.Y.rel );
+    return true;
+  }
+
+  /**
+    @brief Event handler for the mousePressed Event.
+    @param e Event information
+    @param id The ID of the mouse button
+  */
+  bool InputHandlerGUI::mousePressed(const OIS::MouseEvent &e, OIS::MouseButtonID id)
+  {
+		//CEGUI::System::getSingleton().injectMouseButtonDown(convertOISMouseButtonToCegui(id));
+    return true;
+  }
+
+  /**
+    @brief Event handler for the mouseReleased Event.
+    @param e Event information
+    @param id The ID of the mouse button
+  */
+  bool InputHandlerGUI::mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id)
+  {
+		//CEGUI::System::getSingleton().injectMouseButtonUp(convertOISMouseButtonToCegui(id));
+    return true;
+  }
+
+}
Index: code/trunk/src/orxonox/core/InputHandler.h
===================================================================
--- code/trunk/src/orxonox/core/InputHandler.h	(revision 1024)
+++ code/trunk/src/orxonox/core/InputHandler.h	(revision 1024)
@@ -0,0 +1,110 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Reto Grieder
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+ @file
+ @brief Different definitions of input processing.
+ */
+
+#ifndef _InputHandler_H__
+#define _InputHandler_H__
+
+#include <string>
+
+#include <OIS/OIS.h>
+
+#include "CorePrereqs.h"
+#include "InputEvent.h"
+
+namespace orxonox
+{
+  /**
+    @brief Captures mouse and keyboard input while in the actual game mode.
+    Manages the key bindings.
+  */
+  class _CoreExport InputHandlerGame
+        : public OIS::KeyListener, public OIS::MouseListener
+  {
+  public:
+    InputHandlerGame ();
+    ~InputHandlerGame();
+
+    bool loadBindings();
+
+  private:
+    // input events
+		bool mousePressed (const OIS::MouseEvent &arg, OIS::MouseButtonID id);
+		bool mouseReleased(const OIS::MouseEvent &arg, OIS::MouseButtonID id);
+    bool mouseMoved   (const OIS::MouseEvent &arg);
+		bool keyPressed   (const OIS::KeyEvent   &arg);
+		bool keyReleased  (const OIS::KeyEvent   &arg);
+
+    // temporary hack
+    void callListeners(InputEvent &evt);
+
+    /** denotes the maximum number of different keys there are in OIS.
+        256 should be ok since the highest number in the enum is 237. */
+    static const int numberOfKeys_s = 256;
+    //! Array of input events for every pressed key
+    std::string bindingsKeyPressed_[numberOfKeys_s];
+    //! Array of input events for every released key
+    std::string bindingsKeyReleased_[numberOfKeys_s];
+
+    /** denotes the maximum number of different buttons there are in OIS.
+        16 should be ok since the highest number in the enum is 7. */
+    static const int numberOfButtons_s = 16;
+    //! Array of input events for every pressed key
+    std::string bindingsButtonPressed_[numberOfButtons_s];
+    //! Array of input events for every released key
+    std::string bindingsButtonReleased_[numberOfButtons_s];
+
+  };
+
+
+  /**
+    @brief Captures mouse and keyboard input and distributes it to the
+    GUI.
+  */
+  class _CoreExport InputHandlerGUI
+        : public OIS::KeyListener, public OIS::MouseListener
+  {
+  public:
+    InputHandlerGUI ();
+    ~InputHandlerGUI();
+
+  private:
+    // input events
+		bool mousePressed (const OIS::MouseEvent &arg, OIS::MouseButtonID id);
+		bool mouseReleased(const OIS::MouseEvent &arg, OIS::MouseButtonID id);
+    bool mouseMoved   (const OIS::MouseEvent &arg);
+		bool keyPressed   (const OIS::KeyEvent   &arg);
+		bool keyReleased  (const OIS::KeyEvent   &arg);
+  };
+
+}
+
+#endif /* _InputHandler_H__ */
Index: code/trunk/src/orxonox/core/InputManager.cc
===================================================================
--- code/trunk/src/orxonox/core/InputManager.cc	(revision 1024)
+++ code/trunk/src/orxonox/core/InputManager.cc	(revision 1024)
@@ -0,0 +1,244 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Reto Grieder
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+ @file
+ @brief Implementation of a little Input handler that distributes everything
+        coming from OIS.
+ */
+
+#include "core/CoreIncludes.h"
+#include "core/Debug.h"
+#include "InputEventListener.h"
+#include "InputHandler.h"
+#include "InputManager.h"
+
+namespace orxonox
+{
+  /**
+    @brief The reference to the singleton
+  */
+  InputManager* InputManager::singletonRef_s = 0;
+
+  /**
+    @brief Constructor only resets the pointer values to 0.
+  */
+  InputManager::InputManager() :
+      mouse_(0), keyboard_(0), inputSystem_(0),
+      currentMode_(IM_UNINIT), setMode_(IM_UNINIT),
+      handlerGUI_(0), handlerGame_(0), handlerBuffer_(0)
+  {
+  }
+
+  /**
+    @brief Destructor only called at the end of the program
+  */
+  InputManager::~InputManager()
+  {
+    this->destroyDevices();
+  }
+
+  /**
+    @brief The one instance of the InputManager is stored in this function.
+    @return The pointer to the only instance of the InputManager
+  */
+  InputManager *InputManager::getSingleton()
+  {
+    if (!singletonRef_s)
+      singletonRef_s = new InputManager();
+    return singletonRef_s;
+  }
+
+  /**
+    @brief Creates the OIS::InputMananger, the keyboard and the mouse and
+           assigns the key bindings.
+    @param windowHnd The window handle of the render window
+    @param windowWidth The width of the render window
+    @param windowHeight The height of the render window
+  */
+  bool InputManager::initialise(size_t windowHnd, int windowWidth, int windowHeight)
+  {
+    if (!this->inputSystem_)
+    {
+      // Setup basic variables
+      OIS::ParamList paramList;
+      std::ostringstream windowHndStr;
+
+      // Fill parameter list
+      windowHndStr << (unsigned int)windowHnd;
+      paramList.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
+
+#if defined OIS_LINUX_PLATFORM
+      paramList.insert(std::make_pair(std::string("XAutoRepeatOn"), std::string("true")));
+#endif
+
+      try
+      {
+        // Create inputsystem
+        inputSystem_ = OIS::InputManager::createInputSystem(paramList);
+        COUT(ORX_DEBUG) << "*** InputManager: Created OIS input system" << std::endl;
+
+        // create a keyboard. If none are available the exception is caught.
+        keyboard_ = static_cast<OIS::Keyboard*>(inputSystem_->createInputObject(OIS::OISKeyboard, true));
+        COUT(ORX_DEBUG) << "*** InputManager: Created OIS mouse" << std::endl;
+
+        // create a mouse. If none are available the exception is caught.
+        mouse_ = static_cast<OIS::Mouse*>(inputSystem_->createInputObject(OIS::OISMouse, true));
+        COUT(ORX_DEBUG) << "*** InputManager: Created OIS keyboard" << std::endl;
+
+        // Set mouse region
+        this->setWindowExtents(windowWidth, windowHeight);
+      }
+      catch (OIS::Exception ex)
+      {
+        // something went wrong with the initialisation
+        COUT(ORX_ERROR) << "Error: Failed creating an input system/keyboard/mouse. Message: \"" << ex.eText << "\"" << std::endl;
+        this->inputSystem_ = 0;
+        return false;
+      }
+    }
+
+    // create the handlers
+    this->handlerGUI_ = new InputHandlerGUI();
+    this->handlerGame_ = new InputHandlerGame();
+    this->handlerGame_->loadBindings();
+
+    /*COUT(ORX_DEBUG) << "*** InputManager: Loading key bindings..." << std::endl;
+    // load the key bindings
+    InputEvent empty = {0, false, 0, 0, 0};
+    for (int i = 0; i < this->numberOfKeys_; i++)
+      this->bindingsKeyPressed_[i] = empty;
+
+    //assign 'abort' to the escape key
+    this->bindingsKeyPressed_[(int)OIS::KC_ESCAPE].id = 1;
+    COUT(ORX_DEBUG) << "*** InputManager: Loading done." << std::endl;*/
+
+    return true;
+  }
+
+  /**
+    @brief Destroys all the created input devices.
+  */
+  void InputManager::destroyDevices()
+  {
+    COUT(ORX_DEBUG) << "*** InputManager: Destroying InputManager..." << std::endl;
+    if (this->mouse_)
+      this->inputSystem_->destroyInputObject(mouse_);
+    if (this->keyboard_)
+      this->inputSystem_->destroyInputObject(keyboard_);
+    if (this->inputSystem_)
+      OIS::InputManager::destroyInputSystem(this->inputSystem_);
+
+    this->mouse_         = 0;
+    this->keyboard_      = 0;
+    this->inputSystem_   = 0;
+    COUT(ORX_DEBUG) << "*** InputManager: Destroying done." << std::endl;
+  }
+
+  /**
+    @brief Destroys the singleton.
+  */
+  void InputManager::destroySingleton()
+  {
+    if (singletonRef_s)
+      delete singletonRef_s;
+    singletonRef_s = 0;
+  }
+
+  /**
+    @brief Updates the InputManager
+    @param dt Delta time
+  */
+  void InputManager::tick(float dt)
+  {
+    // reset the game if it has changed
+    if (this->currentMode_ != this->setMode_)
+    {
+      switch (this->setMode_)
+      {
+      case IM_GUI:
+        this->mouse_->setEventCallback(this->handlerGUI_);
+        this->keyboard_->setEventCallback(this->handlerGUI_);
+        break;
+      case IM_INGAME:
+        this->mouse_->setEventCallback(this->handlerGame_);
+        this->keyboard_->setEventCallback(this->handlerGame_);
+        break;
+      case IM_KEYBOARD:
+        this->mouse_->setEventCallback(this->handlerGame_);
+        this->keyboard_->setEventCallback(this->handlerBuffer_);
+        break;
+      case IM_UNINIT:
+        this->mouse_->setEventCallback(0);
+        this->keyboard_->setEventCallback(0);
+        break;
+      }
+      this->currentMode_ = this->setMode_;
+    }
+
+    // capture all the input. That calls the event handlers.
+    if (mouse_)
+      mouse_->capture();
+
+    if (keyboard_)
+      keyboard_->capture();
+  }
+
+  /**
+    @brief Adjusts the mouse window metrics.
+    This method has to be called every time the size of the window changes.
+    @param width The new width of the render window
+    @param height the new height of the render window
+  */
+  void InputManager::setWindowExtents(int width, int height)
+  {
+    // Set mouse region (if window resizes, we should alter this to reflect as well)
+    const OIS::MouseState &mouseState = mouse_->getMouseState();
+    mouseState.width  = width;
+    mouseState.height = height;
+  }
+
+  /**
+    @brief Sets the input mode to either GUI, inGame or Buffer
+    @param mode The new input mode
+    @remark Only has an affect if the mode actually changes
+  */
+  void InputManager::setInputMode(InputMode mode)
+  {
+    this->setMode_ = mode;
+  }
+
+  /**
+    @brief Returns the current input handling method
+    @return The current input mode.
+  */
+  InputMode InputManager::getInputMode()
+  {
+    return this->currentMode_;
+  }
+
+}
Index: code/trunk/src/orxonox/core/InputManager.h
===================================================================
--- code/trunk/src/orxonox/core/InputManager.h	(revision 1024)
+++ code/trunk/src/orxonox/core/InputManager.h	(revision 1024)
@@ -0,0 +1,105 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Reto Grieder
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+ @file
+ @brief Implementation of a little Input handler that distributes everything
+        coming from OIS.
+ */
+
+#ifndef _InputManager_H__
+#define _InputManager_H__
+
+#include <OIS/OIS.h>
+
+#include "CorePrereqs.h"
+#include "core/Tickable.h"
+#include "InputEvent.h"
+
+namespace orxonox
+{
+  /**
+    @brief Designates the way input is handled currently.
+    IM_GUI:      All the OIS input events are passed to CEGUI
+    IM_KEYBOARD: Only keyboard input is captured and passed to the InputBuffer
+    IM_INGAME:   Normal game mode. Key bindings and mouse are active.
+  */
+  enum InputMode
+  {
+    IM_GUI      = 0,
+    IM_KEYBOARD = 1,
+    IM_INGAME   = 2,
+    IM_UNINIT   = 3,
+  };
+
+  /**
+    @brief Captures and distributes mouse and keyboard input.
+    It resolves the key bindings to InputEvents which can be heard by
+    implementing the InputEventListener interface.
+  */
+  class _CoreExport InputManager
+        : public Tickable
+  {
+  public:
+    bool initialise(size_t windowHnd, int windowWidth, int windowHeight);
+    void destroyDevices();
+    void tick(float dt);
+    void setWindowExtents(int width, int height);
+    void setInputMode(InputMode mode);
+    InputMode getInputMode();
+
+    // Temporary solutions. Will be removed soon!
+    OIS::Mouse    *getMouse()    { return this->mouse_   ; }
+    OIS::Keyboard *getKeyboard() { return this->keyboard_; }
+
+    static InputManager* getSingleton();
+    static void destroySingleton();
+
+  private:
+    // don't mess with a Singleton
+    InputManager ();
+    InputManager (const InputManager&);
+    InputManager& operator=(const InputManager& instance);
+    ~InputManager();
+
+    OIS::InputManager *inputSystem_;    //!< OIS input manager
+    OIS::Keyboard     *keyboard_;       //!< OIS mouse
+    OIS::Mouse        *mouse_;          //!< OIS keyboard
+
+    InputMode          currentMode_;    //!< Input mode currently used
+    InputMode          setMode_;        //!< Input mode that has been set lately
+    InputHandlerGUI   *handlerGUI_;     //!< Handles the input if in GUI mode
+    // FIXME: insert the InputBuffer once merged with core2
+    InputHandlerGUI   *handlerBuffer_;  //!< Handles the input if in Buffer mode
+    InputHandlerGame  *handlerGame_;    //!< Handles the input if in Game mode
+
+    //! Pointer to the instance of the singleton
+    static InputManager *singletonRef_s;
+  };
+}
+
+#endif /* _InputManager_H__ */
Index: code/trunk/src/orxonox/core/MetaObjectList.h
===================================================================
--- code/trunk/src/orxonox/core/MetaObjectList.h	(revision 1023)
+++ code/trunk/src/orxonox/core/MetaObjectList.h	(revision 1024)
@@ -113,5 +113,5 @@
         This allows much faster deletion of objects because no iteration is needed.
     */
-    class MetaObjectList
+    class _CoreExport MetaObjectList
     {
         public:
Index: code/trunk/src/orxonox/core/Script.cc
===================================================================
--- code/trunk/src/orxonox/core/Script.cc	(revision 1023)
+++ code/trunk/src/orxonox/core/Script.cc	(revision 1024)
@@ -38,6 +38,6 @@
 }
 
-#include "tolua++.h"
-#include "../../util/tolua/tolua_bind.h"
+#include "util/tolua/tolua++.h"
+#include "util/tolua/tolua_bind.h"
 
 namespace orxonox
@@ -57,5 +57,5 @@
   {
     output_ += str;
-    COUT(0) << "Lua_output!:" << std::endl << str << std::endl << "***" << std::endl;
+    COUT(4) << "Lua_output!:" << std::endl << str << std::endl << "***" << std::endl;
   }
 
@@ -89,5 +89,5 @@
 
     if (luaTags) luaSource_ = replaceLuaTags(levelString);
-    COUT(0) << "ParsedSourceCode: " << luaSource_ << std::endl;
+    COUT(4) << "ParsedSourceCode: " << luaSource_ << std::endl;
   }
 
@@ -100,5 +100,5 @@
     if (error == 0)
       error = lua_pcall(luaState_, 0, 0, 0);
-    if (error != 0) COUT(0) << "Error in Lua-script: " << lua_tostring(luaState_, -1) << std::endl;
+    if (error != 0) COUT(2) << "Error in Lua-script: " << lua_tostring(luaState_, -1) << std::endl;
   }
 
Index: code/trunk/src/orxonox/core/Tickable.h
===================================================================
--- code/trunk/src/orxonox/core/Tickable.h	(revision 1023)
+++ code/trunk/src/orxonox/core/Tickable.h	(revision 1024)
@@ -46,6 +46,4 @@
 namespace orxonox
 {
-    //class TickFrameListener; // Forward declaration
-
     //! The Tickable interface provides a tick(dt) function, that gets called every frame.
     class _CoreExport Tickable : virtual public OrxonoxClass
Index: code/trunk/src/orxonox/objects/Fighter.cc
===================================================================
--- code/trunk/src/orxonox/objects/Fighter.cc	(revision 1023)
+++ code/trunk/src/orxonox/objects/Fighter.cc	(revision 1024)
@@ -39,5 +39,5 @@
 #include "core/CoreIncludes.h"
 #include "Orxonox.h"
-#include "InputHandler.h"
+#include "core/InputManager.h"
 #include "particle/ParticleInterface.h"
 #include "weapon/AmmunitionDump.h"
@@ -255,7 +255,7 @@
         if (!this->setMouseEventCallback_)
         {
-            if (InputHandler::getSingleton()->getMouse())
+            if (InputManager::getSingleton()->getMouse())
             {
-                InputHandler::getSingleton()->getMouse()->setEventCallback(this);
+                InputManager::getSingleton()->getMouse()->setEventCallback(this);
                 this->setMouseEventCallback_ = true;
             }
@@ -264,9 +264,9 @@
         WorldEntity::tick(dt);
 
-        OIS::Keyboard* mKeyboard = InputHandler::getSingleton()->getKeyboard();
-        OIS::Mouse* mMouse = InputHandler::getSingleton()->getMouse();
-
-        mKeyboard->capture();
-        mMouse->capture();
+        OIS::Keyboard* mKeyboard = InputManager::getSingleton()->getKeyboard();
+        OIS::Mouse* mMouse = InputManager::getSingleton()->getMouse();
+
+        //mKeyboard->capture();
+        //mMouse->capture();
 
         if (leftButtonPressed_)
Index: code/trunk/src/orxonox/objects/Fighter.h
===================================================================
--- code/trunk/src/orxonox/objects/Fighter.h	(revision 1023)
+++ code/trunk/src/orxonox/objects/Fighter.h	(revision 1024)
@@ -7,6 +7,4 @@
 
 #include "Model.h"
-
-class TiXmlElement; // Forward declaration
 
 namespace orxonox
Index: code/trunk/src/orxonox/objects/Model.h
===================================================================
--- code/trunk/src/orxonox/objects/Model.h	(revision 1023)
+++ code/trunk/src/orxonox/objects/Model.h	(revision 1024)
@@ -6,6 +6,4 @@
 #include "WorldEntity.h"
 #include "../tools/Mesh.h"
-
-class TiXmlElement; // Forward declaration
 
 namespace orxonox
Index: code/trunk/src/orxonox/objects/NPC.h
===================================================================
--- code/trunk/src/orxonox/objects/NPC.h	(revision 1023)
+++ code/trunk/src/orxonox/objects/NPC.h	(revision 1024)
@@ -11,6 +11,4 @@
 
 #include "Model.h"
-
-class TiXmlElement; // Forward declaration
 
 namespace orxonox {
Index: code/trunk/src/orxonox/objects/Projectile.h
===================================================================
--- code/trunk/src/orxonox/objects/Projectile.h	(revision 1023)
+++ code/trunk/src/orxonox/objects/Projectile.h	(revision 1024)
@@ -10,6 +10,4 @@
 namespace orxonox
 {
-    class SpaceShip; // Forward declaration
-
     class _OrxonoxExport Projectile : public WorldEntity
     {
Index: code/trunk/src/orxonox/objects/Skybox.h
===================================================================
--- code/trunk/src/orxonox/objects/Skybox.h	(revision 1023)
+++ code/trunk/src/orxonox/objects/Skybox.h	(revision 1024)
@@ -5,6 +5,4 @@
 
 #include "core/BaseObject.h"
-
-class TiXmlElement; // Forward declaration
 
 namespace orxonox
Index: code/trunk/src/orxonox/objects/SpaceShip.cc
===================================================================
--- code/trunk/src/orxonox/objects/SpaceShip.cc	(revision 1023)
+++ code/trunk/src/orxonox/objects/SpaceShip.cc	(revision 1024)
@@ -42,5 +42,5 @@
 #include "core/Debug.h"
 #include "Orxonox.h"
-#include "InputHandler.h"
+#include "core/InputManager.h"
 #include "particle/ParticleInterface.h"
 #include "Projectile.h"
@@ -417,9 +417,9 @@
     void SpaceShip::tick(float dt)
     {
-        if (!this->setMouseEventCallback_)
-        {
-            if (InputHandler::getSingleton()->getMouse())
+      if (InputManager::getSingleton()->getMouse()->getEventCallback() != this)
+        {
+            if (InputManager::getSingleton()->getMouse())
             {
-                InputHandler::getSingleton()->getMouse()->setEventCallback(this);
+                InputManager::getSingleton()->getMouse()->setEventCallback(this);
                 this->setMouseEventCallback_ = true;
             }
@@ -446,9 +446,6 @@
         }
 
-        OIS::Keyboard* mKeyboard = InputHandler::getSingleton()->getKeyboard();
-        OIS::Mouse* mMouse = InputHandler::getSingleton()->getMouse();
-
-        mKeyboard->capture();
-        mMouse->capture();
+        OIS::Keyboard* mKeyboard = InputManager::getSingleton()->getKeyboard();
+        OIS::Mouse* mMouse = InputManager::getSingleton()->getMouse();
 
 
Index: code/trunk/src/orxonox/objects/SpaceShip.h
===================================================================
--- code/trunk/src/orxonox/objects/SpaceShip.h	(revision 1023)
+++ code/trunk/src/orxonox/objects/SpaceShip.h	(revision 1024)
@@ -10,10 +10,6 @@
 #include "../tools/BillboardSet.h"
 
-class TiXmlElement;          // Forward declaration
-
 namespace orxonox
 {
-    class ParticleInterface; // Forward declaration
-
     class _OrxonoxExport SpaceShip : public Model, public OIS::MouseListener
     {
Index: code/trunk/src/orxonox/objects/SpaceshipSteeringObject.cc
===================================================================
--- code/trunk/src/orxonox/objects/SpaceshipSteeringObject.cc	(revision 1023)
+++ 	(revision )
@@ -1,91 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *
- *
- *   License notice:
- *
- *   This program is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU General Public License
- *   as published by the Free Software Foundation; either version 2
- *   of the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      ...
- *   Co-authors:
- *      ...
- *
- */
-
-#include "OrxonoxStableHeaders.h"
-
-#include <OgreSceneManager.h>
-#include <OgreSceneNode.h>
-#include <OgreRoot.h>
-#include <OgreRenderWindow.h>
-
-#include <string>
-
-#include "../Orxonox.h"
-#include "../GraphicsEngine.h"
-#include "util/tinyxml/tinyxml.h"
-#include "util/Tokenizer.h"
-#include "util/String2Number.h"
-#include "core/CoreIncludes.h"
-#include "SpaceshipSteeringObject.h"
-
-#include "../SpaceshipSteering.h"
-
-namespace orxonox
-{
-    CreateFactory(SpaceshipSteeringObject);
-
-    SpaceshipSteeringObject::SpaceshipSteeringObject()
-    {
-        RegisterObject(SpaceshipSteeringObject);
-    }
-
-    SpaceshipSteeringObject::~SpaceshipSteeringObject()
-    {
-    }
-
-    void SpaceshipSteeringObject::loadParams(TiXmlElement* xmlElem)
-    {
-      SpaceshipSteering* steering = orxonox::Orxonox::getSingleton()->getSteeringPointer();
-
-      if (xmlElem->Attribute("node") && xmlElem->Attribute("forward") && xmlElem->Attribute("rotateupdown") && xmlElem->Attribute("rotaterightleft") && xmlElem->Attribute("looprightleft"))
-      {
-        std::string nodeStr = xmlElem->Attribute("node");
-        std::string forwardStr = xmlElem->Attribute("forward");
-        std::string rotateupdownStr = xmlElem->Attribute("rotateupdown");
-        std::string rotaterightleftStr = xmlElem->Attribute("rotaterightleft");
-        std::string looprightleftStr = xmlElem->Attribute("looprightleft");
-
-        float forward, rotateupdown, rotaterightleft, looprightleft;
-        String2Number<float>(forward, forwardStr);
-        String2Number<float>(rotateupdown, rotateupdownStr);
-        String2Number<float>(rotaterightleft, rotaterightleftStr);
-        String2Number<float>(looprightleft, looprightleftStr);
-
-        steering = new SpaceshipSteering(forward, rotateupdown, rotaterightleft, looprightleft);
-
-        Ogre::SceneManager* mgr = orxonox::Orxonox::getSingleton()->getSceneManager();
-        Ogre::SceneNode* sceneNode = (Ogre::SceneNode*)mgr->getRootSceneNode()->getChild(nodeStr);
-
-        steering->addNode(sceneNode);
-
-
-
-
-        COUT(4) << "Loader: Initialized spaceship steering at node " << nodeStr << " values "<< forward << " " << rotateupdown << " "<< rotaterightleft << " "<< looprightleft << " "<< std::endl << std::endl;
-      }
-   }
-}
Index: code/trunk/src/orxonox/objects/SpaceshipSteeringObject.h
===================================================================
--- code/trunk/src/orxonox/objects/SpaceshipSteeringObject.h	(revision 1023)
+++ 	(revision )
@@ -1,24 +1,0 @@
-#ifndef _OBJECT_SPACESHIPSTEERING_H__
-#define _OBJECT_SPACESHIPSTEERING_H__
-
-#include "core/BaseObject.h"
-#include "util/tinyxml/tinyxml.h"
-
-namespace orxonox
-{
-    class SpaceshipSteeringObject : public BaseObject
-    {
-        public:
-            SpaceshipSteeringObject();
-            virtual ~SpaceshipSteeringObject();
-
-
-            void loadParams(TiXmlElement* xmlElem);
-
-        private:
-
-
-    };
-}
-
-#endif
Index: code/trunk/src/orxonox/objects/Test.h
===================================================================
--- code/trunk/src/orxonox/objects/Test.h	(revision 1023)
+++ 	(revision )
@@ -1,177 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *
- *
- *   License notice:
- *
- *   This program is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU General Public License
- *   as published by the Free Software Foundation; either version 2
- *   of the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      ...
- *
- */
-
-#ifndef _Test_H__
-#define _Test_H__
-
-#include "core/BaseObject.h"
-
-namespace orxonox
-{
-    class Interface1 : virtual public OrxonoxClass
-    {
-        protected:
-            Interface1() { RegisterRootObject(Interface1); }
-    };
-
-    class Interface2 : virtual public OrxonoxClass
-    {
-        protected:
-            Interface2() { RegisterRootObject(Interface2); }
-    };
-
-    class A1 : public BaseObject
-    {
-        public:
-            A1() { RegisterObject(A1); }
-    };
-
-    class A2 : public BaseObject
-    {
-        public:
-            A2() { RegisterObject(A2); }
-    };
-
-    class A3: public BaseObject, public Interface1
-    {
-        public:
-            A3() { RegisterObject(A3); }
-    };
-
-    class A1B1 : public A1
-    {
-        public:
-            A1B1() { RegisterObject(A1B1); }
-    };
-
-    class A1B2 : public A1
-    {
-        public:
-            A1B2() { RegisterObject(A1B2); }
-//            virtual void test() = 0;
-    };
-
-    class A2B1 : public A2
-    {
-        public:
-            A2B1() { RegisterObject(A2B1); }
-    };
-
-    class A2B2 : public A2, Interface1
-    {
-        public:
-            A2B2() { RegisterObject(A2B2); }
-    };
-
-    class A3B1 : public A3
-    {
-        public:
-            A3B1() { RegisterObject(A3B1); }
-    };
-
-    class A3B2 : public A3, Interface2
-    {
-        public:
-            A3B2() { RegisterObject(A3B2); }
-    };
-
-    class A1B1C1 : public A1B1
-    {
-        public:
-            A1B1C1() { RegisterObject(A1B1C1); }
-    };
-
-    class A1B1C2 : public A1B1
-    {
-        public:
-            A1B1C2() { RegisterObject(A1B1C2); }
-    };
-
-    class A1B2C1 : public A1B2
-    {
-        public:
-            A1B2C1() { RegisterObject(A1B2C1); }
-//            void test() { std::cout << "test!\n"; }
-    };
-
-    class A2B1C1 : public A2B1, Interface2
-    {
-        public:
-            A2B1C1() { RegisterObject(A2B1C1); }
-    };
-
-    class A2B2C1 : public A2B2
-    {
-        public:
-            A2B2C1() { RegisterObject(A2B2C1); }
-    };
-
-    class A3B1C1 : public A3B1
-    {
-        public:
-            A3B1C1() { RegisterObject(A3B1C1); }
-    };
-
-    class A3B1C2 : public A3B1, Interface2
-    {
-        public:
-            A3B1C2() { RegisterObject(A3B1C2); }
-    };
-
-    class A3B2C1 : public A3B2
-    {
-        public:
-            A3B2C1() { RegisterObject(A3B2C1); }
-    };
-
-    class A3B2C2 : public A3B2
-    {
-        public:
-            A3B2C2() { RegisterObject(A3B2C2); }
-    };
-
-    CreateFactory(A1);
-    CreateFactory(A2);
-    CreateFactory(A3);
-    CreateFactory(A1B1);
-    CreateFactory(A1B2);
-    CreateFactory(A2B1);
-    CreateFactory(A2B2);
-    CreateFactory(A3B1);
-    CreateFactory(A3B2);
-    CreateFactory(A1B1C1);
-    CreateFactory(A1B1C2);
-    CreateFactory(A1B2C1);
-    CreateFactory(A2B1C1);
-    CreateFactory(A2B2C1);
-    CreateFactory(A3B1C1);
-    CreateFactory(A3B1C2);
-    CreateFactory(A3B2C1);
-    CreateFactory(A3B2C2);
-}
-
-#endif
Index: code/trunk/src/orxonox/objects/test1.cc
===================================================================
--- code/trunk/src/orxonox/objects/test1.cc	(revision 1023)
+++ 	(revision )
@@ -1,103 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *
- *
- *   License notice:
- *
- *   This program is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU General Public License
- *   as published by the Free Software Foundation; either version 2
- *   of the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      ...
- *
- */
-
-#include "test1.h"
-#include "test2.h"
-#include "test3.h"
-#include "core/CoreIncludes.h"
-
-namespace orxonox
-{
-    CreateFactory(Test1);
-
-    Test1::Test1()
-    {
-        RegisterObject(Test1);
-
-        this->usefullClass1_ = Class(Test1);
-        this->usefullClass2_ = Class(Test2);
-        this->usefullClass3_ = Class(Test3);
-    }
-
-    Test1::~Test1()
-    {
-    }
-
-    void Test1::tick(float dt)
-    {
-        std::cout << "Test1: " << this << std::endl;
-    }
-
-    bool Test1::usefullClass1isA(Identifier* identifier)
-    {
-        return this->usefullClass1_->isA(identifier);
-    }
-
-    bool Test1::usefullClass2isA(Identifier* identifier)
-    {
-        return this->usefullClass2_->isA(identifier);
-    }
-
-    bool Test1::usefullClass3isA(Identifier* identifier)
-    {
-        return this->usefullClass3_.isA(identifier);
-    }
-
-    void Test1::setUsefullClass1(Identifier* identifier)
-    {
-        std::cout << std::endl;
-        std::cout << "Test1: usefullClass1->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
-        std::cout << "Test1: usefullClass1->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
-        std::cout << "Test1: usefullClass1->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
-        this->usefullClass1_ = identifier;
-    }
-
-    void Test1::setUsefullClass2(Identifier* identifier)
-    {
-        std::cout << std::endl;
-        std::cout << "Test1: usefullClass2->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
-        std::cout << "Test1: usefullClass2->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
-        std::cout << "Test1: usefullClass2->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
-        this->usefullClass2_ = identifier;
-    }
-
-    void Test1::setUsefullClassOfTypeTest3(Identifier* identifier)
-    {
-        std::cout << std::endl;
-        std::cout << "Test1: usefullClass3->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
-        std::cout << "Test1: usefullClass3->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
-        std::cout << "Test1: usefullClass3->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
-        this->usefullClass3_ = identifier;
-    }
-
-    void Test1::loadParams(TiXmlElement* xmlElem)
-    {
-
-
-
-    }
-}
Index: code/trunk/src/orxonox/objects/test1.h
===================================================================
--- code/trunk/src/orxonox/objects/test1.h	(revision 1023)
+++ 	(revision )
@@ -1,36 +1,0 @@
-#ifndef _Test1_H__
-#define _Test1_H__
-
-#include "core/BaseObject.h"
-#include "Tickable.h"
-#include "test3.h"
-#include "util/tinyxml/tinyxml.h"
-
-namespace orxonox
-{
-    class Test1 : public BaseObject, public Tickable
-    {
-        public:
-            Test1();
-            virtual ~Test1();
-
-            virtual void tick(float dt);
-
-            bool usefullClass1isA(Identifier* identifier);
-            bool usefullClass2isA(Identifier* identifier);
-            bool usefullClass3isA(Identifier* identifier);
-            void setUsefullClass1(Identifier* identifier);
-            void setUsefullClass2(Identifier* identifier);
-            void setUsefullClassOfTypeTest3(Identifier* identifier);
-
-            void loadParams(TiXmlElement* xmlElem);
-
-        private:
-            Identifier* usefullClass1_;
-            Identifier* usefullClass2_;
-            SubclassIdentifier<Test3> usefullClass3_;
-
-    };
-}
-
-#endif
Index: code/trunk/src/orxonox/objects/test2.cc
===================================================================
--- code/trunk/src/orxonox/objects/test2.cc	(revision 1023)
+++ 	(revision )
@@ -1,110 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *
- *
- *   License notice:
- *
- *   This program is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU General Public License
- *   as published by the Free Software Foundation; either version 2
- *   of the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      ...
- *
- */
-
-#include "test1.h"
-#include "test2.h"
-#include "test3.h"
-#include "core/CoreIncludes.h"
-
-namespace orxonox
-{
-    CreateFactory(Test2);
-
-    Test2::Test2()
-    {
-        RegisterObject(Test2);
-
-        this->usefullClass1_ = Class(Test1);
-        this->usefullClass2_ = Class(Test2);
-        this->usefullClass3_ = Class(Test3);
-
-        timer1.setTimer(1, true, this, &Test2::timerFunction1);
-        timer2.setTimer(5, true, this, &Test2::timerFunction2);
-        timer3.setTimer(10, false, this, &Test2::timerFunction3);
-    }
-
-    Test2::~Test2()
-    {
-    }
-
-    void Test2::timerFunction1()
-    {
-        std::cout << "Test2: 1 Sekunde" << std::endl;
-    }
-
-    void Test2::timerFunction2()
-    {
-        std::cout << "Test2: 5 Sekunden" << std::endl;
-    }
-
-    void Test2::timerFunction3()
-    {
-        std::cout << "Test2: 10 Sekunden sind um!" << std::endl;
-    }
-
-    bool Test2::usefullClass1isA(Identifier* identifier)
-    {
-        return this->usefullClass1_->isA(identifier);
-    }
-
-    bool Test2::usefullClass2isA(Identifier* identifier)
-    {
-        return this->usefullClass2_->isA(identifier);
-    }
-
-    bool Test2::usefullClass3isA(Identifier* identifier)
-    {
-        return this->usefullClass3_.isA(identifier);
-    }
-
-    void Test2::setUsefullClass1(Identifier* identifier)
-    {
-        std::cout << std::endl;
-        std::cout << "Test2: usefullClass1->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
-        std::cout << "Test2: usefullClass1->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
-        std::cout << "Test2: usefullClass1->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
-        this->usefullClass1_ = identifier;
-    }
-
-    void Test2::setUsefullClass2(Identifier* identifier)
-    {
-        std::cout << std::endl;
-        std::cout << "Test2: usefullClass2->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
-        std::cout << "Test2: usefullClass2->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
-        std::cout << "Test2: usefullClass2->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
-        this->usefullClass2_ = identifier;
-    }
-
-    void Test2::setUsefullClassOfTypeTest3(Identifier* identifier)
-    {
-        std::cout << std::endl;
-        std::cout << "Test2: usefullClass3->isA(Class(Test1)): " << identifier->isA(Class(Test1)) << std::endl;
-        std::cout << "Test2: usefullClass3->isA(Class(Test2)): " << identifier->isA(Class(Test2)) << std::endl;
-        std::cout << "Test2: usefullClass3->isA(Class(Test3)): " << identifier->isA(Class(Test3)) << std::endl;
-        this->usefullClass3_ = identifier;
-    }
-}
Index: code/trunk/src/orxonox/objects/test2.h
===================================================================
--- code/trunk/src/orxonox/objects/test2.h	(revision 1023)
+++ 	(revision )
@@ -1,39 +1,0 @@
-#ifndef _Test2_H__
-#define _Test2_H__
-
-#include "core/BaseObject.h"
-#include "../tools/Timer.h"
-
-namespace orxonox
-{
-    class Test3;
-
-    class Test2 : public BaseObject
-    {
-        public:
-            Test2();
-            virtual ~Test2();
-
-            bool usefullClass1isA(Identifier* identifier);
-            bool usefullClass2isA(Identifier* identifier);
-            bool usefullClass3isA(Identifier* identifier);
-            void setUsefullClass1(Identifier* identifier);
-            void setUsefullClass2(Identifier* identifier);
-            void setUsefullClassOfTypeTest3(Identifier* identifier);
-
-            void timerFunction1();
-            void timerFunction2();
-            void timerFunction3();
-
-        private:
-            Identifier* usefullClass1_;
-            Identifier* usefullClass2_;
-            SubclassIdentifier<Test3> usefullClass3_;
-
-            Timer<Test2> timer1;
-            Timer<Test2> timer2;
-            Timer<Test2> timer3;
-    };
-}
-
-#endif
Index: code/trunk/src/orxonox/objects/test3.cc
===================================================================
--- code/trunk/src/orxonox/objects/test3.cc	(revision 1023)
+++ 	(revision )
@@ -1,116 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *
- *
- *   License notice:
- *
- *   This program is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU General Public License
- *   as published by the Free Software Foundation; either version 2
- *   of the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      ...
- *
- */
-
-#include "test1.h"
-#include "test2.h"
-#include "test3.h"
-#include "core/CoreIncludes.h"
-
-namespace orxonox
-{
-    CreateFactory(Test3);
-
-    Test3::Test3()
-    {
-        RegisterObject(Test3);
-
-        this->setConfigValues();
-    }
-
-    void Test3::setConfigValues()
-    {
-        SetConfigValue(value_int_, 1);
-        SetConfigValue(value_uint_, 1);
-        SetConfigValue(value_char_, 1);
-        SetConfigValue(value_uchar_, 1);
-        SetConfigValue(value_float_, 1);
-        SetConfigValue(value_double_, 1);
-        SetConfigValue(value_bool_, 1);
-        SetConfigValue(value_string_, "This is a test");
-        SetConfigValue(value_constchar_, "This is another test");
-        SetConfigValue(value_vector2_, Vector2(101, 202));
-        SetConfigValue(value_vector3_, Vector3(13, 26, 39));
-        SetConfigValue(value_colourvalue_, ColourValue(1.0, 0.5, 0.25, 0.887));
-    }
-
-    Test3::~Test3()
-    {
-    }
-
-    void Test3::configOutput()
-    {
-        std::cout << "int:         " << this->value_int_ << std::endl;
-        std::cout << "uint:        " << this->value_uint_ << std::endl;
-        std::cout << "char:        " << (int)this->value_char_ << std::endl;
-        std::cout << "uchar:       " << (int)this->value_uchar_ << std::endl;
-        std::cout << "float:       " << this->value_float_ << std::endl;
-        std::cout << "double:      " << this->value_double_ << std::endl;
-        std::cout << "bool:        " << this->value_bool_ << std::endl;
-        std::cout << "string:      " << this->value_string_ << std::endl;
-        std::cout << "constchar:   " << this->value_constchar_ << std::endl;
-        std::cout << "vector2:     " << this->value_vector2_ << std::endl;
-        std::cout << "vector3:     " << this->value_vector3_ << std::endl;
-        std::cout << "colourvalue: " << this->value_colourvalue_ << std::endl;
-    }
-
-    #define testandcout(code) \
-      std::cout << #code << " " << code << std::endl
-
-    void Test3::usefullClassesIsATest(Test1* test1)
-    {
-        std::cout << std::endl;
-        std::cout << "Test1:" << std::endl;
-        testandcout(test1->usefullClass1isA(Class(Test1)));
-        testandcout(test1->usefullClass1isA(Class(Test2)));
-        testandcout(test1->usefullClass1isA(Class(Test3)));
-        std::cout << std::endl;
-        testandcout(test1->usefullClass2isA(Class(Test1)));
-        testandcout(test1->usefullClass2isA(Class(Test2)));
-        testandcout(test1->usefullClass2isA(Class(Test3)));
-        std::cout << std::endl;
-        testandcout(test1->usefullClass3isA(Class(Test1)));
-        testandcout(test1->usefullClass3isA(Class(Test2)));
-        testandcout(test1->usefullClass3isA(Class(Test3)));
-    }
-
-    void Test3::usefullClassesIsATest(Test2* test2)
-    {
-        std::cout << std::endl;
-        std::cout << "Test2:" << std::endl;
-        testandcout(test2->usefullClass1isA(Class(Test1)));
-        testandcout(test2->usefullClass1isA(Class(Test2)));
-        testandcout(test2->usefullClass1isA(Class(Test3)));
-        std::cout << std::endl;
-        testandcout(test2->usefullClass2isA(Class(Test1)));
-        testandcout(test2->usefullClass2isA(Class(Test2)));
-        testandcout(test2->usefullClass2isA(Class(Test3)));
-        std::cout << std::endl;
-        testandcout(test2->usefullClass3isA(Class(Test1)));
-        testandcout(test2->usefullClass3isA(Class(Test2)));
-        testandcout(test2->usefullClass3isA(Class(Test3)));
-    }
-}
Index: code/trunk/src/orxonox/objects/test3.h
===================================================================
--- code/trunk/src/orxonox/objects/test3.h	(revision 1023)
+++ 	(revision )
@@ -1,41 +1,0 @@
-#ifndef _Test3_H__
-#define _Test3_H__
-
-#include "core/BaseObject.h"
-#include "util/Math.h"
-
-namespace orxonox
-{
-    class Test1;
-    class Test2;
-
-    class Test3 : public BaseObject
-    {
-        public:
-            Test3();
-            virtual ~Test3();
-
-            void setConfigValues();
-
-            void usefullClassesIsATest(Test1* test1);
-            void usefullClassesIsATest(Test2* test2);
-
-            void configOutput();
-
-        private:
-            int                 value_int_;
-            unsigned int        value_uint_;
-            char                value_char_;
-            unsigned char       value_uchar_;
-            float               value_float_;
-            double              value_double_;
-            bool                value_bool_;
-            std::string         value_string_;
-            const char*         value_constchar_;
-            Vector2             value_vector2_;
-            Vector3             value_vector3_;
-            ColourValue         value_colourvalue_;
-    };
-}
-
-#endif
Index: code/trunk/src/util/ArgReader.cc
===================================================================
--- code/trunk/src/util/ArgReader.cc	(revision 1024)
+++ code/trunk/src/util/ArgReader.cc	(revision 1024)
@@ -0,0 +1,109 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Benjamin Knecht <beni_at_orxonox.net>, (C) 2007
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+ @file  ArgReader.cc
+ @brief Argument Reader
+ */
+
+#include <iostream>
+
+#include "ArgReader.h"
+
+ArgReader::ArgReader(int argc, char** argv)
+{
+  counter_ = argc;
+  arguments_ = argv;
+  fail_ = false;
+  errorStr_ = "";
+}
+
+void ArgReader::checkArgument(std::string option, std::string &string, bool must)
+{
+  int argpos = checkOption(option) + 1;
+  if(argpos != 0)
+  {
+    string = arguments_[argpos];
+  }
+  else
+  {
+    if(must) {
+      errorStr_ = errorStr_ + "Cannot find mandatory argument \"" + option + "\"\n";
+      fail_ = true;
+    }
+  }
+
+}
+
+void ArgReader::checkArgument(std::string option, int &integer, bool must)
+{
+  int argpos = checkOption(option) + 1;
+  if(argpos != 0)
+  {
+    integer = atoi(arguments_[argpos]);
+  }
+  else
+  {
+    if(must) {
+      errorStr_ = errorStr_ + "Cannot find mandatory argument \"" + option + "\"\n";
+      fail_ = true;
+    }
+  }
+}
+
+void ArgReader::checkArgument(std::string option, float &floating, bool must)
+{
+  int argpos = checkOption(option) + 1;
+  if(argpos != 0)
+  {
+    floating = (float)atof(arguments_[argpos]);
+  }
+  else
+  {
+    if(must) {
+      errorStr_ = errorStr_ + "Cannot find mandatory argument \"" + option + "\"\n";
+      fail_ = true;
+    }
+  }
+}
+
+int ArgReader::checkOption(std::string option)
+{
+  for(int i = 1; i < counter_; i++)
+  {
+    if(arguments_[i] == "--" + option)
+        return i;
+  }
+  return -1;
+}
+
+bool ArgReader::errorHandling()
+{
+  if(fail_)
+    std::cout << errorStr_;
+  return fail_;
+}
Index: code/trunk/src/util/ArgReader.h
===================================================================
--- code/trunk/src/util/ArgReader.h	(revision 1024)
+++ code/trunk/src/util/ArgReader.h	(revision 1024)
@@ -0,0 +1,59 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Benjamin Knecht <beni_at_orxonox.net>
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+ @file  Argreader.h
+ @brief reads arguments
+ @author Benjamin Knecht <beni_at_orxonox.net>
+ */
+
+#ifndef _ArgReader_H__
+#define _ArgReader_H__
+
+#include <string>
+
+#include "UtilPrereqs.h"
+
+class _UtilExport ArgReader
+{
+  public:
+    ArgReader(int argc, char **argv);
+    void checkArgument(std::string option, std::string& string, bool must=false);
+    void checkArgument(std::string option, int& integer, bool must=false);
+    void checkArgument(std::string option, float& floating, bool must=false);
+    bool errorHandling();
+  private:
+    int checkOption(std::string option);
+
+  private:
+    int counter_;
+    char **arguments_;
+    bool fail_;
+    std::string errorStr_;
+};
+
+#endif /* _ArgReader_H__ */
Index: code/trunk/src/util/CMakeLists.txt
===================================================================
--- code/trunk/src/util/CMakeLists.txt	(revision 1023)
+++ code/trunk/src/util/CMakeLists.txt	(revision 1024)
@@ -5,4 +5,5 @@
 
 SET (UTIL_SRC_FILES
+  ArgReader.cc
   Math.cc
   String.cc
Index: code/trunk/src/util/UtilPrereqs.h
===================================================================
--- code/trunk/src/util/UtilPrereqs.h	(revision 1023)
+++ code/trunk/src/util/UtilPrereqs.h	(revision 1024)
@@ -27,7 +27,7 @@
 
 /**
- @file  UtilPrereq.h
- @brief Contains all the necessary forward declarations for all classes, structs and enums.
- */
+  @file
+  @brief Contains all the necessary forward declarations for all classes and structs.
+*/
 
 #ifndef _UtilPrereqs_H__
@@ -59,4 +59,5 @@
 // Forward declarations
 //-----------------------------------------------------------------------
+class ArgReader;
 class Convert;
 template <typename FromType, typename ToType>
Index: code/trunk/visual_studio/audio_properties.vsprops
===================================================================
--- code/trunk/visual_studio/audio_properties.vsprops	(revision 1023)
+++ code/trunk/visual_studio/audio_properties.vsprops	(revision 1024)
@@ -9,4 +9,5 @@
 		Name="VCCLCompilerTool"
 		PreprocessorDefinitions="AUDIO_SHARED_BUILD"
+		DisableSpecificWarnings="4244"
 	/>
 	<Tool
Index: code/trunk/visual_studio/base_properties.vsprops
===================================================================
--- code/trunk/visual_studio/base_properties.vsprops	(revision 1023)
+++ code/trunk/visual_studio/base_properties.vsprops	(revision 1024)
@@ -9,7 +9,7 @@
 		Name="VCCLCompilerTool"
 		AdditionalIncludeDirectories="&quot;$(RootDir)src&quot;;&quot;$(RootDir)src\orxonox&quot;;&quot;$(DependencyDir)include&quot;"
-		PreprocessorDefinitions="WIN32;__WIN32__;_WIN32;BOOST_ALL_DYN_LINK"
+		PreprocessorDefinitions="WIN32;__WIN32__;_WIN32;BOOST_ALL_DYN_LINK;OIS_DYNAMIC_LIB; ZLIB_WINAPI"
 		WarningLevel="3"
-		DisableSpecificWarnings="4244;4251"
+		DisableSpecificWarnings="4522;4251"
 	/>
 	<Tool
@@ -23,5 +23,5 @@
 		OutputFile="$(OutDir)$(ProjectName)$(CS).dll"
 		AdditionalLibraryDirectories="$(DependencyDir)lib"
-		SubSystem="2"
+		SubSystem="1"
 		ImportLibrary="$(LibOutDir)$(TargetName).lib"
 		TargetMachine="1"
@@ -33,5 +33,5 @@
 	<UserMacro
 		Name="DependencyDir"
-		Value="D:\orxonox\dependencies\orxonox\"
+		Value="$(RootDir)..\dependencies\"
 	/>
 	<UserMacro
@@ -41,5 +41,5 @@
 	<UserMacro
 		Name="CSS"
-		Value="$(CS)"
+		Value=""
 	/>
 </VisualStudioPropertySheet>
Index: code/trunk/visual_studio/base_properties_debug.vsprops
===================================================================
--- code/trunk/visual_studio/base_properties_debug.vsprops	(revision 1023)
+++ code/trunk/visual_studio/base_properties_debug.vsprops	(revision 1024)
@@ -26,5 +26,5 @@
 	<UserMacro
 		Name="CSS"
-		Value="$(CS)"
+		Value="_d"
 	/>
 </VisualStudioPropertySheet>
Index: code/trunk/visual_studio/base_properties_release.vsprops
===================================================================
--- code/trunk/visual_studio/base_properties_release.vsprops	(revision 1023)
+++ code/trunk/visual_studio/base_properties_release.vsprops	(revision 1024)
@@ -12,5 +12,5 @@
 		PreprocessorDefinitions="NDEBUG"
 		RuntimeLibrary="2"
-		DebugInformationFormat="0"
+		DebugInformationFormat="3"
 	/>
 	<Tool
@@ -27,5 +27,5 @@
 	<UserMacro
 		Name="CSS"
-		Value="$(CS)"
+		Value=""
 	/>
 </VisualStudioPropertySheet>
Index: code/trunk/visual_studio/base_properties_release_sse.vsprops
===================================================================
--- code/trunk/visual_studio/base_properties_release_sse.vsprops	(revision 1023)
+++ code/trunk/visual_studio/base_properties_release_sse.vsprops	(revision 1024)
@@ -1,21 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioPropertySheet
-	ProjectType="Visual C++"
-	Version="8.00"
-	Name="base_properties_release_sse"
-	InheritedPropertySheets=".\base_properties_release.vsprops"
-	>
-	<Tool
-		Name="VCCLCompilerTool"
-		PreprocessorDefinitions="NDEBUG"
-		EnableEnhancedInstructionSet="1"
-	/>
-	<UserMacro
-		Name="CS"
-		Value="_sse"
-	/>
-	<UserMacro
-		Name="CSS"
-		Value=""
-	/>
-</VisualStudioPropertySheet>
Index: code/trunk/visual_studio/base_properties_release_sse2.vsprops
===================================================================
--- code/trunk/visual_studio/base_properties_release_sse2.vsprops	(revision 1023)
+++ code/trunk/visual_studio/base_properties_release_sse2.vsprops	(revision 1024)
@@ -1,20 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioPropertySheet
-	ProjectType="Visual C++"
-	Version="8.00"
-	Name="base_properties_release_sse2"
-	InheritedPropertySheets=".\base_properties_release.vsprops"
-	>
-	<Tool
-		Name="VCCLCompilerTool"
-		EnableEnhancedInstructionSet="2"
-	/>
-	<UserMacro
-		Name="CS"
-		Value="_sse2"
-	/>
-	<UserMacro
-		Name="CSS"
-		Value=""
-	/>
-</VisualStudioPropertySheet>
Index: code/trunk/visual_studio/core_properties.vsprops
===================================================================
--- code/trunk/visual_studio/core_properties.vsprops	(revision 1023)
+++ code/trunk/visual_studio/core_properties.vsprops	(revision 1024)
@@ -12,5 +12,5 @@
 	<Tool
 		Name="VCLinkerTool"
-		AdditionalDependencies="OgreMain$(CS).lib"
+		AdditionalDependencies="OgreMain$(CS).lib OIS$(CSS).lib lua$(CS).lib"
 	/>
 </VisualStudioPropertySheet>
Index: code/trunk/visual_studio/network_properties.vsprops
===================================================================
--- code/trunk/visual_studio/network_properties.vsprops	(revision 1023)
+++ code/trunk/visual_studio/network_properties.vsprops	(revision 1024)
@@ -8,5 +8,5 @@
 	<Tool
 		Name="VCCLCompilerTool"
-		PreprocessorDefinitions="NETWORK_SHARED_BUILD; ZLIB_WINAPI;WIN32_LEAN_AND_MEAN"
+		PreprocessorDefinitions="NETWORK_SHARED_BUILD;WIN32_LEAN_AND_MEAN"
 	/>
 	<Tool
Index: code/trunk/visual_studio/orxonox_properties.vsprops
===================================================================
--- code/trunk/visual_studio/orxonox_properties.vsprops	(revision 1023)
+++ code/trunk/visual_studio/orxonox_properties.vsprops	(revision 1024)
@@ -8,5 +8,5 @@
 	<Tool
 		Name="VCCLCompilerTool"
-		PreprocessorDefinitions="ORXONOX_SHARED_BUILD; LOADER_STATIC_BUILD"
+		PreprocessorDefinitions="ORXONOX_SHARED_BUILD"
 		UsePrecompiledHeader="2"
 		PrecompiledHeaderThrough="OrxonoxStableHeaders.h"
Index: code/trunk/visual_studio/orxonox_vc8.sln
===================================================================
--- code/trunk/visual_studio/orxonox_vc8.sln	(revision 1023)
+++ code/trunk/visual_studio/orxonox_vc8.sln	(revision 1024)
@@ -7,6 +7,6 @@
 	EndProjectSection
 	ProjectSection(ProjectDependencies) = postProject
+		{2240ECD7-2F48-4431-8E1B-25466A384CCC} = {2240ECD7-2F48-4431-8E1B-25466A384CCC}
 		{271715F3-5B90-4110-A552-70C788084A86} = {271715F3-5B90-4110-A552-70C788084A86}
-		{2240ECD7-2F48-4431-8E1B-25466A384CCC} = {2240ECD7-2F48-4431-8E1B-25466A384CCC}
 	EndProjectSection
 EndProject
@@ -17,4 +17,5 @@
 	EndProjectSection
 	ProjectSection(ProjectDependencies) = postProject
+		{35E36A06-0A5C-4A0D-9AB6-5A05EAA87626} = {35E36A06-0A5C-4A0D-9AB6-5A05EAA87626}
 		{2240ECD7-2F48-4431-8E1B-25466A384CCC} = {2240ECD7-2F48-4431-8E1B-25466A384CCC}
 		{F101C2F0-1CB9-4A57-827B-6C399A99B28F} = {F101C2F0-1CB9-4A57-827B-6C399A99B28F}
@@ -27,6 +28,6 @@
 	EndProjectSection
 	ProjectSection(ProjectDependencies) = postProject
+		{2240ECD7-2F48-4431-8E1B-25466A384CCC} = {2240ECD7-2F48-4431-8E1B-25466A384CCC}
 		{271715F3-5B90-4110-A552-70C788084A86} = {271715F3-5B90-4110-A552-70C788084A86}
-		{2240ECD7-2F48-4431-8E1B-25466A384CCC} = {2240ECD7-2F48-4431-8E1B-25466A384CCC}
 	EndProjectSection
 EndProject
@@ -37,9 +38,9 @@
 	EndProjectSection
 	ProjectSection(ProjectDependencies) = postProject
+		{4733BD1A-E04C-458D-8BFB-5010250EA497} = {4733BD1A-E04C-458D-8BFB-5010250EA497}
+		{F101C2F0-1CB9-4A57-827B-6C399A99B28F} = {F101C2F0-1CB9-4A57-827B-6C399A99B28F}
+		{271715F3-5B90-4110-A552-70C788084A86} = {271715F3-5B90-4110-A552-70C788084A86}
+		{2240ECD7-2F48-4431-8E1B-25466A384CCC} = {2240ECD7-2F48-4431-8E1B-25466A384CCC}
 		{35575B59-E1AE-40E8-89C4-2862B5B09B68} = {35575B59-E1AE-40E8-89C4-2862B5B09B68}
-		{2240ECD7-2F48-4431-8E1B-25466A384CCC} = {2240ECD7-2F48-4431-8E1B-25466A384CCC}
-		{271715F3-5B90-4110-A552-70C788084A86} = {271715F3-5B90-4110-A552-70C788084A86}
-		{F101C2F0-1CB9-4A57-827B-6C399A99B28F} = {F101C2F0-1CB9-4A57-827B-6C399A99B28F}
-		{4733BD1A-E04C-458D-8BFB-5010250EA497} = {4733BD1A-E04C-458D-8BFB-5010250EA497}
 	EndProjectSection
 EndProject
@@ -56,9 +57,13 @@
 	EndProjectSection
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tolua++", "vc8\tolua++.vcproj", "{35E36A06-0A5C-4A0D-9AB6-5A05EAA87626}"
+	ProjectSection(WebsiteProperties) = preProject
+		Debug.AspNetCompiler.Debug = "True"
+		Release.AspNetCompiler.Debug = "False"
+	EndProjectSection
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Win32 = Debug|Win32
-		Release_SSE|Win32 = Release_SSE|Win32
-		Release_SSE2|Win32 = Release_SSE2|Win32
 		Release|Win32 = Release|Win32
 	EndGlobalSection
@@ -66,50 +71,26 @@
 		{4733BD1A-E04C-458D-8BFB-5010250EA497}.Debug|Win32.ActiveCfg = Debug|Win32
 		{4733BD1A-E04C-458D-8BFB-5010250EA497}.Debug|Win32.Build.0 = Debug|Win32
-		{4733BD1A-E04C-458D-8BFB-5010250EA497}.Release_SSE|Win32.ActiveCfg = Release_SSE|Win32
-		{4733BD1A-E04C-458D-8BFB-5010250EA497}.Release_SSE|Win32.Build.0 = Release_SSE|Win32
-		{4733BD1A-E04C-458D-8BFB-5010250EA497}.Release_SSE2|Win32.ActiveCfg = Release_SSE2|Win32
-		{4733BD1A-E04C-458D-8BFB-5010250EA497}.Release_SSE2|Win32.Build.0 = Release_SSE2|Win32
 		{4733BD1A-E04C-458D-8BFB-5010250EA497}.Release|Win32.ActiveCfg = Release|Win32
 		{4733BD1A-E04C-458D-8BFB-5010250EA497}.Release|Win32.Build.0 = Release|Win32
 		{271715F3-5B90-4110-A552-70C788084A86}.Debug|Win32.ActiveCfg = Debug|Win32
 		{271715F3-5B90-4110-A552-70C788084A86}.Debug|Win32.Build.0 = Debug|Win32
-		{271715F3-5B90-4110-A552-70C788084A86}.Release_SSE|Win32.ActiveCfg = Release_SSE|Win32
-		{271715F3-5B90-4110-A552-70C788084A86}.Release_SSE|Win32.Build.0 = Release_SSE|Win32
-		{271715F3-5B90-4110-A552-70C788084A86}.Release_SSE2|Win32.ActiveCfg = Release_SSE2|Win32
-		{271715F3-5B90-4110-A552-70C788084A86}.Release_SSE2|Win32.Build.0 = Release_SSE2|Win32
 		{271715F3-5B90-4110-A552-70C788084A86}.Release|Win32.ActiveCfg = Release|Win32
 		{271715F3-5B90-4110-A552-70C788084A86}.Release|Win32.Build.0 = Release|Win32
 		{35575B59-E1AE-40E8-89C4-2862B5B09B68}.Debug|Win32.ActiveCfg = Debug|Win32
 		{35575B59-E1AE-40E8-89C4-2862B5B09B68}.Debug|Win32.Build.0 = Debug|Win32
-		{35575B59-E1AE-40E8-89C4-2862B5B09B68}.Release_SSE|Win32.ActiveCfg = Release_SSE|Win32
-		{35575B59-E1AE-40E8-89C4-2862B5B09B68}.Release_SSE|Win32.Build.0 = Release_SSE|Win32
-		{35575B59-E1AE-40E8-89C4-2862B5B09B68}.Release_SSE2|Win32.ActiveCfg = Release_SSE2|Win32
-		{35575B59-E1AE-40E8-89C4-2862B5B09B68}.Release_SSE2|Win32.Build.0 = Release_SSE2|Win32
 		{35575B59-E1AE-40E8-89C4-2862B5B09B68}.Release|Win32.ActiveCfg = Release|Win32
 		{35575B59-E1AE-40E8-89C4-2862B5B09B68}.Release|Win32.Build.0 = Release|Win32
 		{0B6C5CFD-F91B-432A-80A3-2610F61E060B}.Debug|Win32.ActiveCfg = Debug|Win32
 		{0B6C5CFD-F91B-432A-80A3-2610F61E060B}.Debug|Win32.Build.0 = Debug|Win32
-		{0B6C5CFD-F91B-432A-80A3-2610F61E060B}.Release_SSE|Win32.ActiveCfg = Release_SSE|Win32
-		{0B6C5CFD-F91B-432A-80A3-2610F61E060B}.Release_SSE|Win32.Build.0 = Release_SSE|Win32
-		{0B6C5CFD-F91B-432A-80A3-2610F61E060B}.Release_SSE2|Win32.ActiveCfg = Release_SSE2|Win32
-		{0B6C5CFD-F91B-432A-80A3-2610F61E060B}.Release_SSE2|Win32.Build.0 = Release_SSE2|Win32
 		{0B6C5CFD-F91B-432A-80A3-2610F61E060B}.Release|Win32.ActiveCfg = Release|Win32
 		{0B6C5CFD-F91B-432A-80A3-2610F61E060B}.Release|Win32.Build.0 = Release|Win32
 		{2240ECD7-2F48-4431-8E1B-25466A384CCC}.Debug|Win32.ActiveCfg = Debug|Win32
 		{2240ECD7-2F48-4431-8E1B-25466A384CCC}.Debug|Win32.Build.0 = Debug|Win32
-		{2240ECD7-2F48-4431-8E1B-25466A384CCC}.Release_SSE|Win32.ActiveCfg = Release_SSE|Win32
-		{2240ECD7-2F48-4431-8E1B-25466A384CCC}.Release_SSE|Win32.Build.0 = Release_SSE|Win32
-		{2240ECD7-2F48-4431-8E1B-25466A384CCC}.Release_SSE2|Win32.ActiveCfg = Release_SSE2|Win32
-		{2240ECD7-2F48-4431-8E1B-25466A384CCC}.Release_SSE2|Win32.Build.0 = Release_SSE2|Win32
 		{2240ECD7-2F48-4431-8E1B-25466A384CCC}.Release|Win32.ActiveCfg = Release|Win32
 		{2240ECD7-2F48-4431-8E1B-25466A384CCC}.Release|Win32.Build.0 = Release|Win32
 		{F101C2F0-1CB9-4A57-827B-6C399A99B28F}.Debug|Win32.ActiveCfg = Debug|Win32
-		{F101C2F0-1CB9-4A57-827B-6C399A99B28F}.Debug|Win32.Build.0 = Debug|Win32
-		{F101C2F0-1CB9-4A57-827B-6C399A99B28F}.Release_SSE|Win32.ActiveCfg = Release_SSE|Win32
-		{F101C2F0-1CB9-4A57-827B-6C399A99B28F}.Release_SSE|Win32.Build.0 = Release_SSE|Win32
-		{F101C2F0-1CB9-4A57-827B-6C399A99B28F}.Release_SSE2|Win32.ActiveCfg = Release_SSE2|Win32
-		{F101C2F0-1CB9-4A57-827B-6C399A99B28F}.Release_SSE2|Win32.Build.0 = Release_SSE2|Win32
 		{F101C2F0-1CB9-4A57-827B-6C399A99B28F}.Release|Win32.ActiveCfg = Release|Win32
-		{F101C2F0-1CB9-4A57-827B-6C399A99B28F}.Release|Win32.Build.0 = Release|Win32
+		{35E36A06-0A5C-4A0D-9AB6-5A05EAA87626}.Debug|Win32.ActiveCfg = Debug|Win32
+		{35E36A06-0A5C-4A0D-9AB6-5A05EAA87626}.Release|Win32.ActiveCfg = Release|Win32
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: code/trunk/visual_studio/tixml_properties.vsprops
===================================================================
--- code/trunk/visual_studio/tixml_properties.vsprops	(revision 1023)
+++ code/trunk/visual_studio/tixml_properties.vsprops	(revision 1024)
@@ -3,14 +3,6 @@
 	ProjectType="Visual C++"
 	Version="8.00"
-	Name="util_properties"
+	Name="tixml_properties"
 	InheritedPropertySheets=".\directory_properties.vsprops"
 	>
-	<Tool
-		Name="VCCLCompilerTool"
-		PreprocessorDefinitions="UTIL_SHARED_BUILD"
-	/>
-	<Tool
-		Name="VCLinkerTool"
-		AdditionalDependencies="OgreMain$(CS).lib"
-	/>
 </VisualStudioPropertySheet>
Index: code/trunk/visual_studio/tolua++_properties.vsprops
===================================================================
--- code/trunk/visual_studio/tolua++_properties.vsprops	(revision 1024)
+++ code/trunk/visual_studio/tolua++_properties.vsprops	(revision 1024)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="tolua++_properties"
+	InheritedPropertySheets=".\directory_properties.vsprops"
+	>
+	<Tool
+		Name="VCLinkerTool"
+		AdditionalDependencies="lua$(CS).lib"
+	/>
+</VisualStudioPropertySheet>
Index: code/trunk/visual_studio/vc8/audio.vcproj
===================================================================
--- code/trunk/visual_studio/vc8/audio.vcproj	(revision 1023)
+++ code/trunk/visual_studio/vc8/audio.vcproj	(revision 1024)
@@ -139,128 +139,4 @@
 			/>
 		</Configuration>
-		<Configuration
-			Name="Release_SSE|Win32"
-			ConfigurationType="2"
-			InheritedPropertySheets="..\base_properties_release_sse.vsprops;..\audio_properties.vsprops"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release_SSE2|Win32"
-			ConfigurationType="2"
-			InheritedPropertySheets="..\base_properties_release_sse2.vsprops;..\audio_properties.vsprops"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
 	</Configurations>
 	<References>
@@ -273,40 +149,4 @@
 			>
 			<File
-				RelativePath="..\..\src\audio\_AudioObject.cc"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release_SSE|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release_SSE2|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
 				RelativePath="..\..\src\audio\AudioBuffer.cc"
 				>
Index: code/trunk/visual_studio/vc8/core.vcproj
===================================================================
--- code/trunk/visual_studio/vc8/core.vcproj	(revision 1023)
+++ code/trunk/visual_studio/vc8/core.vcproj	(revision 1024)
@@ -139,128 +139,4 @@
 			/>
 		</Configuration>
-		<Configuration
-			Name="Release_SSE|Win32"
-			ConfigurationType="2"
-			InheritedPropertySheets="..\base_properties_release_sse.vsprops;..\core_properties.vsprops"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release_SSE2|Win32"
-			ConfigurationType="2"
-			InheritedPropertySheets="..\base_properties_release_sse2.vsprops;..\core_properties.vsprops"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
 	</Configurations>
 	<References>
@@ -273,8 +149,4 @@
 			>
 			<File
-				RelativePath="..\..\src\orxonox\core\ArgReader.cc"
-				>
-			</File>
-			<File
 				RelativePath="..\..\src\orxonox\core\BaseObject.cc"
 				>
@@ -313,4 +185,16 @@
 			</File>
 			<File
+				RelativePath="..\..\src\orxonox\core\InputEventListener.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\orxonox\core\InputHandler.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\orxonox\core\InputManager.cc"
+				>
+			</File>
+			<File
 				RelativePath="..\..\src\orxonox\core\Language.cc"
 				>
@@ -330,4 +214,8 @@
 			<File
 				RelativePath="..\..\src\orxonox\core\OutputHandler.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\orxonox\core\Script.cc"
 				>
 			</File>
@@ -351,8 +239,4 @@
 			>
 			<File
-				RelativePath="..\..\src\orxonox\core\ArgReader.h"
-				>
-			</File>
-			<File
 				RelativePath="..\..\src\orxonox\core\BaseObject.h"
 				>
@@ -415,4 +299,20 @@
 			</File>
 			<File
+				RelativePath="..\..\src\orxonox\core\InputEvent.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\orxonox\core\InputEventListener.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\orxonox\core\InputHandler.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\orxonox\core\InputManager.h"
+				>
+			</File>
+			<File
 				RelativePath="..\..\src\orxonox\core\Iterator.h"
 				>
@@ -444,4 +344,8 @@
 			<File
 				RelativePath="..\..\src\orxonox\core\OutputHandler.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\orxonox\core\Script.h"
 				>
 			</File>
Index: code/trunk/visual_studio/vc8/loader.vcproj
===================================================================
--- code/trunk/visual_studio/vc8/loader.vcproj	(revision 1023)
+++ 	(revision )
@@ -1,296 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="8.00"
-	Name="loader"
-	ProjectGUID="{E283910F-F911-40FB-A09D-D025CA821912}"
-	RootNamespace="FICN"
-	Keyword="Win32Proj"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			ConfigurationType="2"
-			InheritedPropertySheets="$(SolutionDir)base_properties_debug.vsprops;..\loader_properties.vsprops"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			ConfigurationType="2"
-			InheritedPropertySheets="..\base_properties_release.vsprops;..\loader_properties.vsprops"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release_SSE|Win32"
-			ConfigurationType="2"
-			InheritedPropertySheets="..\base_properties_release_sse.vsprops;..\loader_properties.vsprops"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release_SSE2|Win32"
-			ConfigurationType="2"
-			InheritedPropertySheets="..\base_properties_release_sse2.vsprops;..\loader_properties.vsprops"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
-			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
-			>
-			<File
-				RelativePath="..\..\src\loader\LevelLoader.cc"
-				>
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;inc;xsd"
-			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
-			>
-			<File
-				RelativePath="..\..\src\loader\LevelLoader.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\loader\LoaderPrereqs.h"
-				>
-			</File>
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
Index: code/trunk/visual_studio/vc8/network.vcproj
===================================================================
--- code/trunk/visual_studio/vc8/network.vcproj	(revision 1023)
+++ code/trunk/visual_studio/vc8/network.vcproj	(revision 1024)
@@ -139,128 +139,4 @@
 			/>
 		</Configuration>
-		<Configuration
-			Name="Release_SSE|Win32"
-			ConfigurationType="2"
-			InheritedPropertySheets="..\base_properties_release_sse.vsprops;..\network_properties.vsprops"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release_SSE2|Win32"
-			ConfigurationType="2"
-			InheritedPropertySheets="..\base_properties_release_sse2.vsprops;..\network_properties.vsprops"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
 	</Configurations>
 	<References>
@@ -307,20 +183,4 @@
 					/>
 				</FileConfiguration>
-				<FileConfiguration
-					Name="Release_SSE|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release_SSE2|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
@@ -343,20 +203,4 @@
 					/>
 				</FileConfiguration>
-				<FileConfiguration
-					Name="Release_SSE|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release_SSE2|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
@@ -379,20 +223,4 @@
 					/>
 				</FileConfiguration>
-				<FileConfiguration
-					Name="Release_SSE|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release_SSE2|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
@@ -415,20 +243,4 @@
 					/>
 				</FileConfiguration>
-				<FileConfiguration
-					Name="Release_SSE|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release_SSE2|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
@@ -451,20 +263,4 @@
 					/>
 				</FileConfiguration>
-				<FileConfiguration
-					Name="Release_SSE|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release_SSE2|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
@@ -479,40 +275,4 @@
 				RelativePath="..\..\src\network\PacketBuffer.cc"
 				>
-			</File>
-			<File
-				RelativePath="..\..\src\network\PacketBufferTestExt.cc"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release_SSE|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release_SSE2|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
Index: code/trunk/visual_studio/vc8/orxonox.vcproj
===================================================================
--- code/trunk/visual_studio/vc8/orxonox.vcproj	(revision 1023)
+++ code/trunk/visual_studio/vc8/orxonox.vcproj	(revision 1024)
@@ -143,132 +143,4 @@
 			/>
 		</Configuration>
-		<Configuration
-			Name="Release_SSE|Win32"
-			ConfigurationType="1"
-			InheritedPropertySheets="..\base_properties_release_sse.vsprops;..\orxonox_properties.vsprops"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				AdditionalOptions="/Zm200"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				EntryPointSymbol=""
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release_SSE2|Win32"
-			ConfigurationType="1"
-			InheritedPropertySheets="..\base_properties_release_sse2.vsprops;..\orxonox_properties.vsprops"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				AdditionalOptions="/Zm200"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				EntryPointSymbol=""
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
 	</Configurations>
 	<References>
@@ -285,24 +157,4 @@
 			</File>
 			<File
-				RelativePath="..\..\src\orxonox\InputEventListener.cc"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\orxonox\InputHandler.cc"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\orxonox\InputManager.cc"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
 				RelativePath="..\..\src\orxonox\Main.cc"
 				>
@@ -331,56 +183,4 @@
 					/>
 				</FileConfiguration>
-				<FileConfiguration
-					Name="Release_SSE|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						UsePrecompiledHeader="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release_SSE2|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						UsePrecompiledHeader="1"
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\..\src\orxonox\SpaceshipSteering.cc"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release_SSE|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release_SSE2|Win32"
-					ExcludedFromBuild="true"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-					/>
-				</FileConfiguration>
 			</File>
 			<Filter
@@ -430,160 +230,4 @@
 					RelativePath="..\..\src\orxonox\objects\SpaceShip.cc"
 					>
-				</File>
-				<File
-					RelativePath="..\..\src\orxonox\objects\SpaceshipSteeringObject.cc"
-					>
-					<FileConfiguration
-						Name="Debug|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release_SSE|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release_SSE2|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-						/>
-					</FileConfiguration>
-				</File>
-				<File
-					RelativePath="..\..\src\orxonox\objects\test1.cc"
-					>
-					<FileConfiguration
-						Name="Debug|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							UsePrecompiledHeader="0"
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							UsePrecompiledHeader="0"
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release_SSE|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							UsePrecompiledHeader="0"
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release_SSE2|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							UsePrecompiledHeader="0"
-						/>
-					</FileConfiguration>
-				</File>
-				<File
-					RelativePath="..\..\src\orxonox\objects\test2.cc"
-					>
-					<FileConfiguration
-						Name="Debug|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							UsePrecompiledHeader="0"
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							UsePrecompiledHeader="0"
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release_SSE|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							UsePrecompiledHeader="0"
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release_SSE2|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							UsePrecompiledHeader="0"
-						/>
-					</FileConfiguration>
-				</File>
-				<File
-					RelativePath="..\..\src\orxonox\objects\test3.cc"
-					>
-					<FileConfiguration
-						Name="Debug|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							UsePrecompiledHeader="0"
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							UsePrecompiledHeader="0"
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release_SSE|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							UsePrecompiledHeader="0"
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release_SSE2|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							UsePrecompiledHeader="0"
-						/>
-					</FileConfiguration>
 				</File>
 				<File
@@ -659,20 +303,4 @@
 			</File>
 			<File
-				RelativePath="..\..\src\orxonox\InputEvent.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\orxonox\InputEventListener.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\orxonox\InputHandler.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\orxonox\InputManager.h"
-				>
-			</File>
-			<File
 				RelativePath="..\..\src\orxonox\Orxonox.h"
 				>
@@ -690,8 +318,4 @@
 				>
 			</File>
-			<File
-				RelativePath="..\..\src\orxonox\SpaceshipSteering.h"
-				>
-			</File>
 			<Filter
 				Name="hud"
@@ -739,24 +363,4 @@
 				<File
 					RelativePath="..\..\src\orxonox\objects\SpaceShip.h"
-					>
-				</File>
-				<File
-					RelativePath="..\..\src\orxonox\objects\SpaceshipSteeringObject.h"
-					>
-				</File>
-				<File
-					RelativePath="..\..\src\orxonox\objects\Test.h"
-					>
-				</File>
-				<File
-					RelativePath="..\..\src\orxonox\objects\test1.h"
-					>
-				</File>
-				<File
-					RelativePath="..\..\src\orxonox\objects\test2.h"
-					>
-				</File>
-				<File
-					RelativePath="..\..\src\orxonox\objects\test3.h"
 					>
 				</File>
@@ -828,68 +432,4 @@
 			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
 			>
-			<File
-				RelativePath="..\..\bin\media.cfg"
-				>
-			</File>
-			<File
-				RelativePath="..\..\bin\ogre.cfg"
-				>
-			</File>
-			<File
-				RelativePath="..\..\bin\ogre.cfg-init"
-				>
-			</File>
-			<File
-				RelativePath="..\..\bin\Ogre.log"
-				>
-			</File>
-			<File
-				RelativePath="..\..\bin\orxonox.bat"
-				>
-			</File>
-			<File
-				RelativePath="..\..\bin\orxonox.ini"
-				>
-			</File>
-			<File
-				RelativePath="..\..\bin\orxonox.log"
-				>
-			</File>
-			<File
-				RelativePath="..\..\bin\orxonox_d.bat"
-				>
-			</File>
-			<File
-				RelativePath="..\..\bin\plugins.cfg"
-				>
-			</File>
-			<File
-				RelativePath="..\..\bin\plugins.cfg-init"
-				>
-			</File>
-			<File
-				RelativePath="..\..\bin\plugins_d.cfg"
-				>
-			</File>
-			<File
-				RelativePath="..\..\bin\quake3settings.cfg"
-				>
-			</File>
-			<File
-				RelativePath="..\..\bin\resources.cfg"
-				>
-			</File>
-			<File
-				RelativePath="..\..\bin\run-script"
-				>
-			</File>
-			<File
-				RelativePath="..\..\bin\translation_default.lang"
-				>
-			</File>
-			<File
-				RelativePath="..\..\bin\translation_german.lang"
-				>
-			</File>
 		</Filter>
 	</Files>
Index: code/trunk/visual_studio/vc8/tixml.vcproj
===================================================================
--- code/trunk/visual_studio/vc8/tixml.vcproj	(revision 1023)
+++ code/trunk/visual_studio/vc8/tixml.vcproj	(revision 1024)
@@ -19,5 +19,5 @@
 			Name="Debug|Win32"
 			ConfigurationType="4"
-			InheritedPropertySheets="$(SolutionDir)base_properties_debug.vsprops;..\util_properties.vsprops"
+			InheritedPropertySheets="$(SolutionDir)base_properties_debug.vsprops;..\tixml_properties.vsprops"
 			CharacterSet="1"
 			>
@@ -71,111 +71,5 @@
 			Name="Release|Win32"
 			ConfigurationType="4"
-			InheritedPropertySheets="$(SolutionDir)base_properties_release.vsprops;..\util_properties.vsprops"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release_SSE|Win32"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\base_properties_release_sse.vsprops;..\util_properties.vsprops"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release_SSE2|Win32"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\base_properties_release_sse2.vsprops;..\util_properties.vsprops"
+			InheritedPropertySheets="$(SolutionDir)base_properties_release.vsprops;..\tixml_properties.vsprops"
 			CharacterSet="1"
 			WholeProgramOptimization="1"
@@ -278,8 +172,4 @@
 				>
 			</File>
-			<File
-				RelativePath="..\..\src\util\tinyxml\TinyXMLPrereqs.h"
-				>
-			</File>
 		</Filter>
 	</Files>
Index: code/trunk/visual_studio/vc8/tolua++.vcproj
===================================================================
--- code/trunk/visual_studio/vc8/tolua++.vcproj	(revision 1024)
+++ code/trunk/visual_studio/vc8/tolua++.vcproj	(revision 1024)
@@ -0,0 +1,194 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="tolua++"
+	ProjectGUID="{35E36A06-0A5C-4A0D-9AB6-5A05EAA87626}"
+	RootNamespace="FICN"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			ConfigurationType="4"
+			InheritedPropertySheets="$(SolutionDir)base_properties_debug.vsprops;..\tolua++_properties.vsprops"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			ConfigurationType="4"
+			InheritedPropertySheets="$(SolutionDir)base_properties_release.vsprops;..\tixml_properties.vsprops"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\src\util\tolua\tolua.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\util\tolua\tolua_bind.cc"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\util\tolua\tolua_event.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\util\tolua\tolua_is.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\util\tolua\tolua_map.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\util\tolua\tolua_push.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\util\tolua\tolua_to.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\util\tolua\toluabind.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath="..\..\src\util\tolua\tolua++.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\util\tolua\tolua_bind.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\util\tolua\tolua_event.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\util\tolua\toluabind.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\src\util\tolua\toluabind_default.h"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
Index: code/trunk/visual_studio/vc8/util.vcproj
===================================================================
--- code/trunk/visual_studio/vc8/util.vcproj	(revision 1023)
+++ code/trunk/visual_studio/vc8/util.vcproj	(revision 1024)
@@ -139,128 +139,4 @@
 			/>
 		</Configuration>
-		<Configuration
-			Name="Release_SSE|Win32"
-			ConfigurationType="2"
-			InheritedPropertySheets="..\base_properties_release_sse.vsprops;..\util_properties.vsprops"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release_SSE2|Win32"
-			ConfigurationType="2"
-			InheritedPropertySheets="..\base_properties_release_sse2.vsprops;..\util_properties.vsprops"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
 	</Configurations>
 	<References>
@@ -273,4 +149,8 @@
 			>
 			<File
+				RelativePath="..\..\src\util\ArgReader.cc"
+				>
+			</File>
+			<File
 				RelativePath="..\..\src\util\Math.cc"
 				>
@@ -293,5 +173,5 @@
 			</File>
 			<File
-				RelativePath="..\..\src\util\substring.cc"
+				RelativePath="..\..\src\util\SubString.cc"
 				>
 			</File>
@@ -303,4 +183,8 @@
 			>
 			<File
+				RelativePath="..\..\src\util\ArgReader.h"
+				>
+			</File>
+			<File
 				RelativePath="..\..\src\util\Convert.h"
 				>
@@ -339,5 +223,5 @@
 			</File>
 			<File
-				RelativePath="..\..\src\util\substring.h"
+				RelativePath="..\..\src\util\SubString.h"
 				>
 			</File>
