Index: sandbox_light/src/libraries/core/BaseObject.cc
===================================================================
--- sandbox_light/src/libraries/core/BaseObject.cc	(revision 5788)
+++ 	(revision )
@@ -1,60 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Implementation of the BaseObject class.
-*/
-
-#include "BaseObject.h"
-#include "CoreIncludes.h"
-
-namespace orxonox
-{
-    CreateFactory(BaseObject);
-
-    /**
-        @brief Constructor: Registers the object in the BaseObject-list.
-    */
-    BaseObject::BaseObject(BaseObject* creator) : bInitialized_(false)
-    {
-        RegisterRootObject(BaseObject);
-
-        this->bInitialized_ = true;
-    }
-
-    /**
-        @brief Destructor
-    */
-    BaseObject::~BaseObject()
-    {
-        if (this->isInitialized())
-        {
-        }
-    }
-}
Index: sandbox_light/src/libraries/core/BaseObject.h
===================================================================
--- sandbox_light/src/libraries/core/BaseObject.h	(revision 5788)
+++ 	(revision )
@@ -1,63 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Definition of the BaseObject class.
-
-    The BaseObject is the parent of all classes representing an instance in the game.
-*/
-
-#ifndef _BaseObject_H__
-#define _BaseObject_H__
-
-#include "CorePrereqs.h"
-#include "OrxonoxClass.h"
-
-namespace orxonox
-{
-    //! The BaseObject is the parent of all classes representing an instance in the game.
-    class _CoreExport BaseObject : virtual public OrxonoxClass
-    {
-        public:
-            BaseObject(BaseObject* creator);
-            virtual ~BaseObject();
-
-            /** @brief Returns if the object was initialized (passed the object registration). @return True was the object is initialized */
-            inline bool isInitialized() const { return this->bInitialized_; }
-
-            inline void setCreator(BaseObject* creator) { this->creator_ = creator; }
-            inline BaseObject* getCreator() const { return this->creator_; }
-
-        private:
-            bool                   bInitialized_;              //!< True if the object was initialized (passed the object registration)
-            BaseObject*            creator_;
-    };
-}
-
-#endif /* _BaseObject_H__ */
Index: sandbox_light/src/libraries/core/CMakeLists.txt
===================================================================
--- sandbox_light/src/libraries/core/CMakeLists.txt	(revision 5788)
+++ sandbox_light/src/libraries/core/CMakeLists.txt	(revision 5789)
@@ -20,31 +20,7 @@
 SET_SOURCE_FILES(CORE_SRC_FILES
   Clock.cc
-  ConfigFileManager.cc
-  ConfigValueContainer.cc
+  CommandLine.cc
   Core.cc
-  DynLib.cc
-  DynLibManager.cc
-  Game.cc
-  GameState.cc
-  Language.cc
   LuaState.cc
-  ObjectListBase.cc
-  OrxonoxClass.cc
-
-  # command
-  CommandLine.cc
-  Executor.cc
-
-  # hierarchy
-  Factory.cc
-  Identifier.cc
-  MetaObjectList.cc
-
-  # level
-  BaseObject.cc
-
-  # multithreading
-  Thread.cc
-  ThreadPool.cc
 )
 
@@ -55,13 +31,9 @@
   DEFINE_SYMBOL
     "CORE_SHARED_BUILD"
-  PCH_FILE
-    CorePrecompiledHeaders.h
   LINK_LIBRARIES
-    ${OGRE_LIBRARY}
     ${Boost_FILESYSTEM_LIBRARY}
     ${Boost_SYSTEM_LIBRARY} # Filesystem dependency
-    ${Boost_THREAD_LIBRARY}
-    ${Boost_DATE_TIME_LIBRARY} # Thread dependency
     ${LUA_LIBRARIES}
+    ogremath_orxonox
     tolua++_orxonox
     util
Index: sandbox_light/src/libraries/core/ClassFactory.h
===================================================================
--- sandbox_light/src/libraries/core/ClassFactory.h	(revision 5788)
+++ 	(revision )
@@ -1,105 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Definition and implementation of the ClassFactory class
-
-    The ClassFactory is able to create new objects of a specific class.
-*/
-
-#ifndef _ClassFactory_H__
-#define _ClassFactory_H__
-
-#include "CorePrereqs.h"
-
-#include <string>
-
-#include "util/Debug.h"
-#include "Factory.h"
-#include "Identifier.h"
-
-namespace orxonox
-{
-    // ###############################
-    // ###      ClassFactory       ###
-    // ###############################
-    //! The ClassFactory is able to create new objects of a specific class.
-    template <class T>
-    class ClassFactory : public BaseFactory
-    {
-        public:
-            static bool create(const std::string& name);
-            BaseObject* fabricate(BaseObject* creator);
-
-        private:
-            ClassFactory() {}                               // Don't create
-            ClassFactory(const ClassFactory& factory) {}    // Don't copy
-            virtual ~ClassFactory() {}                      // Don't delete
-
-            static T* createNewObject(BaseObject* creator);
-    };
-
-    /**
-        @brief Adds the ClassFactory to the Identifier of the same type and the Identifier to the Factory.
-        @param name The name of the class
-        @param bLoadable True if the class can be loaded through XML
-        @return Always true (this is needed because the compiler only allows assignments before main())
-    */
-    template <class T>
-    bool ClassFactory<T>::create(const std::string& name)
-    {
-        COUT(4) << "*** ClassFactory: Create entry for " << name << " in Factory." << std::endl;
-        ClassIdentifier<T>::getIdentifier(name)->addFactory(new ClassFactory<T>);
-        Factory::add(name, ClassIdentifier<T>::getIdentifier());
-
-        return true;
-    }
-
-    /**
-        @brief Creates and returns a new object of class T.
-        @return The new object
-    */
-    template <class T>
-    inline BaseObject* ClassFactory<T>::fabricate(BaseObject* creator)
-    {
-        return ClassFactory<T>::createNewObject(creator);
-    }
-
-    /**
-        @brief Creates and returns a new object of class T; this is a wrapper for the new operator.
-        @return The new object
-    */
-    template <class T>
-    inline T* ClassFactory<T>::createNewObject(BaseObject* creator)
-    {
-        return new T(creator);
-    }
-}
-
-#endif /* _ClassFactory_H__ */
Index: sandbox_light/src/libraries/core/Clock.cc
===================================================================
--- sandbox_light/src/libraries/core/Clock.cc	(revision 5788)
+++ sandbox_light/src/libraries/core/Clock.cc	(revision 5789)
@@ -33,5 +33,5 @@
 
 #include "Clock.h"
-#include <OgreTimer.h>
+#include <ogremath/OgreTimer.h>
 
 namespace orxonox
Index: sandbox_light/src/libraries/core/CommandLine.cc
===================================================================
--- sandbox_light/src/libraries/core/CommandLine.cc	(revision 5788)
+++ sandbox_light/src/libraries/core/CommandLine.cc	(revision 5789)
@@ -31,5 +31,4 @@
 #include <algorithm>
 #include <sstream>
-#include <boost/filesystem.hpp>
 
 #include "util/Convert.h"
@@ -348,10 +347,9 @@
     {
         std::string filename = CommandLine::getValue("optionsFile").getString();
-        boost::filesystem::path filepath(Core::getConfigPath() / filename);
 
         // look for additional arguments in given file or start.ini as default
         // They will not overwrite the arguments given directly
         std::ifstream file;
-        file.open(filepath.string().c_str());
+        file.open((Core::getConfigPathString() + filename).c_str());
         std::vector<std::string> args;
         if (file)
Index: sandbox_light/src/libraries/core/ConfigFileManager.cc
===================================================================
--- sandbox_light/src/libraries/core/ConfigFileManager.cc	(revision 5788)
+++ 	(revision )
@@ -1,566 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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 "ConfigFileManager.h"
-
-#include <boost/filesystem.hpp>
-
-#include "util/Convert.h"
-#include "util/Math.h"
-#include "util/StringUtils.h"
-#include "ConfigValueContainer.h"
-#include "Core.h"
-
-namespace orxonox
-{
-    bool config(const std::string& classname, const std::string& varname, const std::string& value)
-    {
-        std::map<std::string, Identifier*>::const_iterator identifier = Identifier::getLowercaseIdentifierMap().find(getLowercase(classname));
-        if (identifier != Identifier::getLowercaseIdentifierMapEnd())
-        {
-            std::map<std::string, ConfigValueContainer*>::const_iterator variable = (*identifier).second->getLowercaseConfigValueMap().find(getLowercase(varname));
-            if (variable != (*identifier).second->getLowercaseConfigValueMapEnd())
-                return (*variable).second->set(value);
-        }
-        return false;
-    }
-
-    bool tconfig(const std::string& classname, const std::string& varname, const std::string& value)
-    {
-        std::map<std::string, Identifier*>::const_iterator identifier = Identifier::getLowercaseIdentifierMap().find(getLowercase(classname));
-        if (identifier != Identifier::getLowercaseIdentifierMapEnd())
-        {
-            std::map<std::string, ConfigValueContainer*>::const_iterator variable = (*identifier).second->getLowercaseConfigValueMap().find(getLowercase(varname));
-            if (variable != (*identifier).second->getLowercaseConfigValueMapEnd())
-                return (*variable).second->tset(value);
-        }
-        return false;
-    }
-
-    void reloadConfig()
-    {
-        ConfigFileManager::getInstance().load();
-    }
-
-    void cleanConfig()
-    {
-        ConfigFileManager::getInstance().clean(false);
-    }
-
-    void loadSettings(const std::string& filename)
-    {
-        ConfigFileManager::getInstance().setFilename(ConfigFileType::Settings, filename);
-    }
-
-    //////////////////////////
-    // ConfigFileEntryValue //
-    //////////////////////////
-
-    void ConfigFileEntryValue::setValue(const std::string& value)
-    {
-        if (!this->bString_)
-            this->value_ = value;
-        else
-            this->value_ = "\"" + addSlashes(stripEnclosingQuotes(value)) + "\"";
-    }
-
-    std::string ConfigFileEntryValue::getValue() const
-    {
-        if (!this->bString_)
-            return this->value_;
-        else
-            return removeSlashes(stripEnclosingQuotes(this->value_));
-    }
-
-    std::string ConfigFileEntryValue::getFileEntry() const
-    {
-        if (this->additionalComment_ == "" || this->additionalComment_.size() == 0)
-            return (this->name_ + "=" + this->value_);
-        else
-            return (this->name_ + "=" + this->value_ + " " + this->additionalComment_);
-    }
-
-
-    ////////////////////////////////
-    // ConfigFileEntryVectorValue //
-    ////////////////////////////////
-    std::string ConfigFileEntryVectorValue::getFileEntry() const
-    {
-        if (this->additionalComment_ == "" || this->additionalComment_.size() == 0)
-            return (this->name_ + "[" + multi_cast<std::string>(this->index_) + "]" + "=" + this->value_);
-        else
-            return (this->name_ + "[" + multi_cast<std::string>(this->index_) + "]=" + this->value_ + " " + this->additionalComment_);
-    }
-
-
-    ///////////////////////
-    // ConfigFileSection //
-    ///////////////////////
-    ConfigFileSection::~ConfigFileSection()
-    {
-        for (std::list<ConfigFileEntry*>::iterator it = this->entries_.begin(); it != this->entries_.end(); )
-            delete (*(it++));
-    }
-
-    void ConfigFileSection::deleteVectorEntries(const std::string& name, unsigned int startindex)
-    {
-        for (std::list<ConfigFileEntry*>::iterator it = this->entries_.begin(); it != this->entries_.end(); )
-        {
-            if (((*it)->getName() == name) && ((*it)->getIndex() >= startindex))
-            {
-                delete (*it);
-                this->entries_.erase(it++);
-            }
-            else
-            {
-                ++it;
-            }
-        }
-    }
-
-    unsigned int ConfigFileSection::getVectorSize(const std::string& name)
-    {
-        unsigned int size = 0;
-        for (std::list<ConfigFileEntry*>::const_iterator it = this->entries_.begin(); it != this->entries_.end(); ++it)
-            if ((*it)->getName() == name)
-                if ((*it)->getIndex() > size)
-                    size = (*it)->getIndex();
-        if (size == 0)
-            return 0;
-        else
-            return (size + 1);
-    }
-
-    std::string ConfigFileSection::getFileEntry() const
-    {
-        if (this->additionalComment_ == "" || this->additionalComment_.size() == 0)
-            return ("[" + this->name_ + "]");
-        else
-            return ("[" + this->name_ + "] " + this->additionalComment_);
-    }
-
-    std::list<ConfigFileEntry*>::iterator ConfigFileSection::getEntryIterator(const std::string& name, const std::string& fallback, bool bString)
-    {
-        for (std::list<ConfigFileEntry*>::iterator it = this->entries_.begin(); it != this->entries_.end(); ++it)
-        {
-            if ((*it)->getName() == name)
-            {
-                (*it)->setString(bString);
-                return it;
-            }
-        }
-
-        this->bUpdated_ = true;
-
-        return this->entries_.insert(this->entries_.end(), static_cast<ConfigFileEntry*>(new ConfigFileEntryValue(name, fallback, bString)));
-    }
-
-    std::list<ConfigFileEntry*>::iterator ConfigFileSection::getEntryIterator(const std::string& name, unsigned int index, const std::string& fallback, bool bString)
-    {
-        for (std::list<ConfigFileEntry*>::iterator it = this->entries_.begin(); it != this->entries_.end(); ++it)
-        {
-            if (((*it)->getName() == name) && ((*it)->getIndex() == index))
-            {
-                (*it)->setString(bString);
-                return it;
-            }
-        }
-
-        this->bUpdated_ = true;
-
-        if (index == 0)
-            return this->entries_.insert(this->entries_.end(), static_cast<ConfigFileEntry*>(new ConfigFileEntryVectorValue(name, index, fallback, bString)));
-        else
-            return this->entries_.insert(++this->getEntryIterator(name, index - 1, "", bString), static_cast<ConfigFileEntry*>(new ConfigFileEntryVectorValue(name, index, fallback, bString)));
-    }
-
-
-    ////////////////
-    // ConfigFile //
-    ////////////////
-    ConfigFile::~ConfigFile()
-    {
-        this->clear();
-    }
-
-    void ConfigFile::load(bool bCreateIfNotExisting)
-    {
-        // Be sure we start from new in the memory
-        this->clear();
-
-        // Get default file if necessary and available
-        boost::filesystem::path filepath(Core::getConfigPath() / this->filename_);
-        if (!boost::filesystem::exists(filepath))
-        {
-            // Try to get default one from the data folder
-            boost::filesystem::path defaultFilepath(Core::getDataPath() / "defaultConfig" / this->filename_);
-            if (boost::filesystem::exists(defaultFilepath))
-            {
-                COUT(3) << "Copied " << this->filename_ << " from the defaultConfig folder." << std::endl;
-                boost::filesystem::copy_file(defaultFilepath, filepath);
-            }
-        }
-
-        // Open the file
-        std::ifstream file;
-        file.open(filepath.string().c_str(), std::fstream::in);
-        if (file.is_open())
-        {
-            ConfigFileSection* newsection = 0;
-
-            while (file.good() && !file.eof())
-            {
-                std::string line;
-                std::getline(file, line);
-
-                std::string temp = getStripped(line);
-                if (!isEmpty(temp) && !isComment(temp))
-                {
-                    size_t   pos1 = temp.find('[');
-                    if (pos1 == 0) pos1 = line.find('['); else pos1 = std::string::npos;
-                    size_t   pos2 = line.find(']');
-
-                    if (pos1 != std::string::npos && pos2 != std::string::npos && pos2 > pos1 + 1)
-                    {
-                        // New section
-                        std::string comment = line.substr(pos2 + 1);
-                        if (isComment(comment))
-                            newsection = new ConfigFileSection(line.substr(pos1 + 1, pos2 - pos1 - 1), comment);
-                        else
-                            newsection = new ConfigFileSection(line.substr(pos1 + 1, pos2 - pos1 - 1));
-                        this->sections_.insert(this->sections_.end(), newsection);
-                        continue;
-                    }
-                }
-
-                if (newsection != 0)
-                {
-                    if (isComment(line))
-                    {
-                        // New comment
-                        newsection->getEntries().insert(newsection->getEntries().end(), new ConfigFileEntryComment(removeTrailingWhitespaces(line)));
-                        continue;
-                    }
-                    else
-                    {
-                        size_t pos1 = line.find('=');
-
-                        if (pos1 != std::string::npos && pos1 > 0)
-                        {
-                            // New entry
-                            size_t pos2 = line.find('[');
-                            size_t pos3 = line.find(']');
-                            size_t commentposition = getNextCommentPosition(line, pos1 + 1);
-                            while (isBetweenQuotes(line, commentposition))
-                            {
-                                commentposition = getNextCommentPosition(line, commentposition + 1);
-                            }
-                            std::string value = "", comment = "";
-                            if (commentposition == std::string::npos)
-                            {
-                                value = removeTrailingWhitespaces(line.substr(pos1 + 1));
-                            }
-                            else
-                            {
-                                value = removeTrailingWhitespaces(line.substr(pos1 + 1, commentposition - pos1 - 1));
-                                comment = removeTrailingWhitespaces(line.substr(commentposition));
-                            }
-
-                            if (pos2 != std::string::npos && pos3 != std::string::npos && pos3 > pos2 + 1)
-                            {
-                                // There might be an array index
-                                unsigned int index = 0;
-                                if (convertValue(&index, line.substr(pos2 + 1, pos3 - pos2 - 1)))
-                                {
-                                    // New array
-                                    std::list<ConfigFileEntry*>::iterator it = newsection->getEntryIterator(getStripped(line.substr(0, pos2)), index, value, false);
-                                    (*it)->setValue(value);
-                                    (*it)->setComment(comment);
-                                    continue;
-                                }
-                            }
-
-                            // New value
-                            newsection->getEntries().insert(newsection->getEntries().end(), new ConfigFileEntryValue(getStripped(line.substr(0, pos1)), value, false, comment));
-                            continue;
-                        }
-                    }
-                }
-            }
-
-            file.close();
-
-            COUT(3) << "Loaded config file \"" << this->filename_ << "\"." << std::endl;
-
-            // Save the file in case something changed (like stripped whitespaces)
-            this->save();
-
-            // Update all ConfigValueContainers
-            this->updateConfigValues();
-        } // end file.is_open()
-    }
-
-    void ConfigFile::save() const
-    {
-        std::ofstream file;
-        file.open((Core::getConfigPathString() + filename_).c_str(), std::fstream::out);
-        file.setf(std::ios::fixed, std::ios::floatfield);
-        file.precision(6);
-
-        if (!file.is_open())
-        {
-            COUT(1) << "An error occurred in ConfigFileManager.cc:" << std::endl;
-            COUT(1) << "Error: Couldn't open config-file \"" << this->filename_ << "\"." << std::endl;
-            return;
-        }
-
-        for (std::list<ConfigFileSection*>::const_iterator it = this->sections_.begin(); it != this->sections_.end(); ++it)
-        {
-            file << (*it)->getFileEntry() << std::endl;
-
-            for (std::list<ConfigFileEntry*>::const_iterator it_entries = (*it)->getEntriesBegin(); it_entries != (*it)->getEntriesEnd(); ++it_entries)
-            {
-                file << (*it_entries)->getFileEntry() << std::endl;
-            }
-
-            file << std::endl;
-        }
-
-        file.close();
-
-        COUT(4) << "Saved config file \"" << this->filename_ << "\"." << std::endl;
-    }
-
-    void ConfigFile::saveAs(const std::string& filename)
-    {
-        std::string temp = this->filename_;
-        this->filename_ = filename;
-        this->save();
-        this->filename_ = temp;
-    }
-
-    void ConfigFile::clean(bool bCleanComments)
-    {
-        for (std::list<ConfigFileSection*>::iterator it1 = this->sections_.begin(); it1 != this->sections_.end(); )
-        {
-            std::map<std::string, Identifier*>::const_iterator it2 = Identifier::getIdentifierMap().find((*it1)->getName());
-            if (it2 != Identifier::getIdentifierMapEnd() && (*it2).second->hasConfigValues())
-            {
-                // The section exists, delete comment
-                if (bCleanComments)
-                    (*it1)->setComment("");
-                for (std::list<ConfigFileEntry*>::iterator it3 = (*it1)->entries_.begin(); it3 != (*it1)->entries_.end(); )
-                {
-                    std::map<std::string, ConfigValueContainer*>::const_iterator it4 = (*it2).second->getConfigValueMap().find((*it3)->getName());
-                    if (it4 != (*it2).second->getConfigValueMapEnd())
-                    {
-                        // The config-value exists, delete comment
-                        if (bCleanComments)
-                            (*it3)->setComment("");
-                        ++it3;
-                    }
-                    else
-                    {
-                        // The config-value doesn't exist
-                        delete (*it3);
-                        (*it1)->entries_.erase(it3++);
-                    }
-                }
-                ++it1;
-            }
-            else
-            {
-                // The section doesn't exist
-                delete (*it1);
-                this->sections_.erase(it1++);
-            }
-        }
-
-        // Save the file
-        this->save();
-    }
-
-    void ConfigFile::clear()
-    {
-        for (std::list<ConfigFileSection*>::iterator it = this->sections_.begin(); it != this->sections_.end(); )
-            delete (*(it++));
-        this->sections_.clear();
-    }
-
-    ConfigFileSection* ConfigFile::getSection(const std::string& section)
-    {
-        for (std::list<ConfigFileSection*>::iterator it = this->sections_.begin(); it != this->sections_.end(); ++it)
-            if ((*it)->getName() == section)
-                return (*it);
-
-        this->bUpdated_ = true;
-
-        return (*this->sections_.insert(this->sections_.end(), new ConfigFileSection(section)));
-    }
-
-    void ConfigFile::saveIfUpdated()
-    {
-        bool sectionsUpdated = false;
-
-        for (std::list<ConfigFileSection*>::iterator it = this->sections_.begin(); it != this->sections_.end(); ++it)
-        {
-            if ((*it)->bUpdated_)
-            {
-                sectionsUpdated = true;
-                (*it)->bUpdated_ = false;
-            }
-        }
-
-        if (this->bUpdated_ || sectionsUpdated)
-        {
-            this->bUpdated_ = false;
-            this->save();
-        }
-    }
-
-    void ConfigFile::updateConfigValues()
-    {
-        if (this->type_ == ConfigFileType::Settings)
-        {
-            for (std::map<std::string, Identifier*>::const_iterator it = Identifier::getIdentifierMapBegin(); it != Identifier::getIdentifierMapEnd(); ++it)
-            {
-                if (it->second->hasConfigValues())
-                {
-                    for (std::map<std::string, ConfigValueContainer*>::const_iterator it2 = (*it).second->getConfigValueMapBegin(); it2 != (*it).second->getConfigValueMapEnd(); ++it2)
-                        it2->second->update();
-
-                    it->second->updateConfigValues();
-                }
-            }
-        }
-    }
-
-
-    ///////////////////////
-    // ConfigFileManager //
-    ///////////////////////
-
-    ConfigFileManager* ConfigFileManager::singletonPtr_s = 0;
-
-    std::string ConfigFileManager::DEFAULT_CONFIG_FILE = "default.ini";
-
-    ConfigFileManager::ConfigFileManager()
-         : mininmalFreeType_(ConfigFileType::numberOfReservedTypes)
-    {
-    }
-
-    ConfigFileManager::~ConfigFileManager()
-    {
-        for(std::map<ConfigFileType, ConfigFile*>::const_iterator it = this->configFiles_.begin(); it != this->configFiles_.end(); )
-            delete (it++)->second;
-    }
-
-    void ConfigFileManager::setFilename(ConfigFileType type, const std::string& filename)
-    {
-        std::map<ConfigFileType, ConfigFile*>::const_iterator it = this->configFiles_.find(type);
-        if (it != this->configFiles_.end())
-        {
-            assert(it->second);
-            delete it->second;
-        }
-        this->configFiles_[type] = new ConfigFile(filename, type);
-        this->load(type);
-    }
-
-    void ConfigFileManager::load()
-    {
-        for(std::map<ConfigFileType, ConfigFile*>::const_iterator it = this->configFiles_.begin(); it != this->configFiles_.end(); ++it)
-            it->second->load();
-    }
-
-    void ConfigFileManager::save()
-    {
-        for(std::map<ConfigFileType, ConfigFile*>::const_iterator it = this->configFiles_.begin(); it != this->configFiles_.end(); ++it)
-            it->second->save();
-    }
-
-    void ConfigFileManager::clean(bool bCleanComments)
-    {
-        for(std::map<ConfigFileType, ConfigFile*>::const_iterator it = this->configFiles_.begin(); it != this->configFiles_.end(); ++it)
-            this->clean(it->first, bCleanComments);
-    }
-
-    void ConfigFileManager::load(ConfigFileType type)
-    {
-        this->getFile(type)->load();
-    }
-
-    void ConfigFileManager::save(ConfigFileType type)
-    {
-        this->getFile(type)->save();
-    }
-
-    void ConfigFileManager::saveAs(ConfigFileType type, const std::string& saveFilename)
-    {
-        this->getFile(type)->saveAs(saveFilename);
-    }
-
-    void ConfigFileManager::clean(ConfigFileType type, bool bCleanComments)
-    {
-        this->getFile(type)->clean(bCleanComments);
-    }
-
-    void ConfigFileManager::updateConfigValues()
-    {
-        for(std::map<ConfigFileType, ConfigFile*>::const_iterator it = this->configFiles_.begin(); it != this->configFiles_.end(); ++it)
-            it->second->updateConfigValues();
-    }
-
-    void ConfigFileManager::updateConfigValues(ConfigFileType type)
-    {
-        this->getFile(type)->updateConfigValues();
-    }
-
-    const std::string& ConfigFileManager::getFilename(ConfigFileType type)
-    {
-        std::map<ConfigFileType, ConfigFile*>::const_iterator it = this->configFiles_.find(type);
-        if (it != this->configFiles_.end())
-            return it->second->getFilename();
-        else
-            return BLANKSTRING;
-    }
-
-    ConfigFile* ConfigFileManager::getFile(ConfigFileType type)
-    {
-        std::map<ConfigFileType, ConfigFile*>::const_iterator it = this->configFiles_.find(type);
-        if (it != this->configFiles_.end())
-            return it->second;
-        else
-        {
-            COUT(1) << "ConfigFileManager: Can't find a config file for type with ID " << static_cast<int>(type) << std::endl;
-            COUT(1) << "Using " << DEFAULT_CONFIG_FILE << " file." << std::endl;
-            this->setFilename(type, DEFAULT_CONFIG_FILE);
-            return getFile(type);
-        }
-    }
-}
Index: sandbox_light/src/libraries/core/ConfigFileManager.h
===================================================================
--- sandbox_light/src/libraries/core/ConfigFileManager.h	(revision 5788)
+++ 	(revision )
@@ -1,323 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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 _ConfigFileManager_H__
-#define _ConfigFileManager_H__
-
-#include "CorePrereqs.h"
-
-#include <cassert>
-#include <string>
-#include <list>
-#include <map>
-
-#include "util/OrxEnum.h"
-#include "util/Singleton.h"
-
-namespace orxonox
-{
-    // Use int as config file type to have an arbitrary number of files
-    struct ConfigFileType : OrxEnum<ConfigFileType>
-    {
-        OrxEnumConstructors(ConfigFileType);
-
-        static const int NoType              = 0;
-        static const int Settings            = 1;
-        static const int JoyStickCalibration = 2;
-
-        static const int numberOfReservedTypes = 1024;
-    };
-
-    bool config(const std::string& classname, const std::string& varname, const std::string& value);
-    bool tconfig(const std::string& classname, const std::string& varname, const std::string& value);
-    void reloadConfig();
-    void saveConfig();
-    void cleanConfig();
-    void loadSettings(const std::string& filename);
-
-
-    /////////////////////
-    // ConfigFileEntry //
-    /////////////////////
-    class _CoreExport ConfigFileEntry
-    {
-        public:
-            virtual ~ConfigFileEntry() {};
-            virtual void setValue(const std::string& value) = 0;
-            virtual std::string getValue() const = 0;
-            virtual const std::string& getName() const = 0;
-            virtual void setComment(const std::string& comment) = 0;
-            virtual unsigned int getIndex() const { return 0; }
-            virtual void setString(bool bString) = 0;
-            virtual std::string getFileEntry() const = 0;
-    };
-
-
-    //////////////////////////
-    // ConfigFileEntryValue //
-    //////////////////////////
-    class _CoreExport ConfigFileEntryValue : public ConfigFileEntry
-    {
-        public:
-            inline ConfigFileEntryValue(const std::string& name, const std::string& value = "", bool bString = false, const std::string& additionalComment = "") : name_(name), value_(value), bString_(bString), additionalComment_(additionalComment) {}
-            inline virtual ~ConfigFileEntryValue() {}
-
-            inline virtual const std::string& getName() const
-                { return this->name_; }
-
-            inline virtual void setComment(const std::string& comment)
-                { this->additionalComment_ = comment; }
-
-            virtual void setValue(const std::string& value);
-            virtual std::string getValue() const;
-
-            inline bool isString() const
-                { return this->bString_; }
-            inline void setString(bool bString)
-                { this->bString_ = bString; }
-
-            virtual std::string getFileEntry() const;
-
-        protected:
-            std::string name_;
-            std::string value_;
-            bool bString_;
-            std::string additionalComment_;
-    };
-
-
-    ///////////////////////////////
-    // ConfigFileEntryVectorValue //
-    ///////////////////////////////
-    class _CoreExport ConfigFileEntryVectorValue : public ConfigFileEntryValue
-    {
-        public:
-            inline ConfigFileEntryVectorValue(const std::string& name, unsigned int index, const std::string& value = "", bool bString = false, const std::string& additionalComment = "") : ConfigFileEntryValue(name, value, bString, additionalComment), index_(index) {}
-            inline virtual ~ConfigFileEntryVectorValue() {}
-
-            inline virtual unsigned int getIndex() const
-                { return this->index_; }
-
-            virtual std::string getFileEntry() const;
-
-        private:
-            unsigned int index_;
-    };
-
-
-    ////////////////////////////
-    // ConfigFileEntryComment //
-    ////////////////////////////
-    class _CoreExport ConfigFileEntryComment : public ConfigFileEntry
-    {
-        public:
-            inline ConfigFileEntryComment(const std::string& comment) : comment_(comment) {}
-            inline virtual ~ConfigFileEntryComment() {}
-
-            inline virtual const std::string& getName() const
-                { return this->comment_; }
-
-            inline virtual void setComment(const std::string& comment)
-                { this->comment_ = comment; }
-
-            inline virtual void setValue(const std::string& value)
-                {}
-            inline virtual std::string getValue() const
-                { return this->comment_; }
-
-            inline void setString(bool bString) {}
-
-            inline virtual std::string getFileEntry() const
-                { return this->comment_; }
-
-        private:
-            std::string comment_;
-    };
-
-
-    ///////////////////////
-    // ConfigFileSection //
-    ///////////////////////
-    class _CoreExport ConfigFileSection
-    {
-        friend class ConfigFile;
-
-        public:
-            inline ConfigFileSection(const std::string& name, const std::string& additionalComment = "") : name_(name), additionalComment_(additionalComment), bUpdated_(false) {}
-            ~ConfigFileSection();
-
-            inline const std::string& getName() const
-                { return this->name_; }
-
-            inline void setComment(const std::string& comment)
-                { this->additionalComment_ = comment; }
-
-            inline void setValue(const std::string& name, const std::string& value, bool bString)
-                { this->getEntry(name, value, bString)->setValue(value); }
-            inline std::string getValue(const std::string& name, const std::string& fallback, bool bString)
-                { return this->getEntry(name, fallback, bString)->getValue(); }
-
-            inline void setValue(const std::string& name, unsigned int index, const std::string& value, bool bString)
-                { this->getEntry(name, index, value, bString)->setValue(value); }
-            inline std::string getValue(const std::string& name, unsigned int index, const std::string& fallback, bool bString)
-                { return this->getEntry(name, index, fallback, bString)->getValue(); }
-
-            void deleteVectorEntries(const std::string& name, unsigned int startindex = 0);
-            unsigned int getVectorSize(const std::string& name);
-
-            std::string getFileEntry() const;
-
-        private:
-            std::list<ConfigFileEntry*>& getEntries()
-                { return this->entries_; }
-            std::list<ConfigFileEntry*>::const_iterator getEntriesBegin() const
-                { return this->entries_.begin(); }
-            std::list<ConfigFileEntry*>::const_iterator getEntriesEnd() const
-                { return this->entries_.end(); }
-
-            std::list<ConfigFileEntry*>::iterator getEntryIterator(const std::string& name, const std::string& fallback, bool bString);
-            std::list<ConfigFileEntry*>::iterator getEntryIterator(const std::string& name, unsigned int index, const std::string& fallback, bool bString);
-
-            inline ConfigFileEntry* getEntry(const std::string& name, const std::string& fallback, bool bString)
-                { return (*this->getEntryIterator(name, fallback, bString)); }
-            inline ConfigFileEntry* getEntry(const std::string& name, unsigned int index, const std::string& fallback, bool bString)
-                { return (*this->getEntryIterator(name, index, fallback, bString)); }
-
-            std::string name_;
-            std::string additionalComment_;
-            std::list<ConfigFileEntry*> entries_;
-            bool bUpdated_;
-    };
-
-
-    ////////////////
-    // ConfigFile //
-    ////////////////
-    class _CoreExport ConfigFile
-    {
-        public:
-            inline ConfigFile(const std::string& filename, ConfigFileType type)
-                : filename_(filename)
-                , type_(type)
-                , bUpdated_(false)
-            { }
-            ~ConfigFile();
-
-            void load(bool bCreateIfNotExisting = true);
-            void save() const;
-            void saveAs(const std::string& filename);
-            void clean(bool bCleanComments = false);
-            void clear();
-
-            const std::string& getFilename() { return this->filename_; }
-
-            inline void setValue(const std::string& section, const std::string& name, const std::string& value, bool bString)
-                { this->getSection(section)->setValue(name, value, bString); this->save(); }
-            inline std::string getValue(const std::string& section, const std::string& name, const std::string& fallback, bool bString)
-                { std::string output = this->getSection(section)->getValue(name, fallback, bString); this->saveIfUpdated(); return output; }
-
-            inline void setValue(const std::string& section, const std::string& name, unsigned int index, const std::string& value, bool bString)
-                { this->getSection(section)->setValue(name, index, value, bString); this->save(); }
-            inline std::string getValue(const std::string& section, const std::string& name, unsigned int index, const std::string& fallback, bool bString)
-                { std::string output = this->getSection(section)->getValue(name, index, fallback, bString); this->saveIfUpdated(); return output; }
-
-            inline void deleteVectorEntries(const std::string& section, const std::string& name, unsigned int startindex = 0)
-                { this->getSection(section)->deleteVectorEntries(name, startindex); }
-            inline unsigned int getVectorSize(const std::string& section, const std::string& name)
-                { return this->getSection(section)->getVectorSize(name); }
-
-            void updateConfigValues();
-
-        private:
-            ConfigFileSection* getSection(const std::string& section);
-            void saveIfUpdated();
-
-            std::string filename_;
-            ConfigFileType type_;
-            std::list<ConfigFileSection*> sections_;
-            bool bUpdated_;
-    };
-
-
-    ///////////////////////
-    // ConfigFileManager //
-    ///////////////////////
-    class _CoreExport ConfigFileManager : public Singleton<ConfigFileManager>
-    {
-        friend class Singleton<ConfigFileManager>;
-        public:
-            ConfigFileManager();
-            ~ConfigFileManager();
-
-            void load();
-            void save();
-            void clean(bool bCleanComments = false);
-
-            void setFilename(ConfigFileType type, const std::string& filename);
-            const std::string& getFilename(ConfigFileType type);
-
-            ConfigFileType getNewConfigFileType() { return mininmalFreeType_++; }
-
-            void load(ConfigFileType type);
-            void save(ConfigFileType type);
-            void saveAs(ConfigFileType type, const std::string& saveFilename);
-            void clean(ConfigFileType type, bool bCleanComments = false);
-
-            inline void setValue(ConfigFileType type, const std::string& section, const std::string& name, const std::string& value, bool bString)
-                { this->getFile(type)->setValue(section, name, value, bString); }
-            inline std::string getValue(ConfigFileType type, const std::string& section, const std::string& name, const std::string& fallback, bool bString)
-                { return this->getFile(type)->getValue(section, name, fallback, bString); }
-
-            inline void setValue(ConfigFileType type, const std::string& section, const std::string& name, unsigned int index, const std::string& value, bool bString)
-                { this->getFile(type)->setValue(section, name, index, value, bString); }
-            inline std::string getValue(ConfigFileType type, const std::string& section, const std::string& name, unsigned int index, const std::string& fallback, bool bString)
-                { return this->getFile(type)->getValue(section, name, index, fallback, bString); }
-
-            inline void deleteVectorEntries(ConfigFileType type, const std::string& section, const std::string& name, unsigned int startindex = 0)
-                { this->getFile(type)->deleteVectorEntries(section, name, startindex); }
-            inline unsigned int getVectorSize(ConfigFileType type, const std::string& section, const std::string& name)
-                { return this->getFile(type)->getVectorSize(section, name); }
-
-            void updateConfigValues();
-            void updateConfigValues(ConfigFileType type);
-
-            static std::string DEFAULT_CONFIG_FILE;
-
-        private:
-            ConfigFileManager(const ConfigFileManager&);
-
-            ConfigFile* getFile(ConfigFileType type);
-
-            std::map<ConfigFileType, ConfigFile*> configFiles_;
-            unsigned int mininmalFreeType_;
-
-            static ConfigFileManager* singletonPtr_s;
-    };
-}
-
-#endif /* _ConfigFileManager_H__ */
Index: sandbox_light/src/libraries/core/ConfigValueContainer.cc
===================================================================
--- sandbox_light/src/libraries/core/ConfigValueContainer.cc	(revision 5788)
+++ 	(revision )
@@ -1,344 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Implementation of the ConfigValueContainer class.
-*/
-
-#include "ConfigValueContainer.h"
-
-#include "util/Convert.h"
-#include "util/SubString.h"
-#include "Language.h"
-
-namespace orxonox
-{
-    const unsigned int MAX_VECTOR_INDEX  = 255; // to avoid up to 4*10^9 vector entries in the config file after accidentally using a wrong argument
-
-    /**
-        @brief Initializes the ConfigValueContainer with defaultvalues.
-    */
-    void ConfigValueContainer::init(ConfigFileType type, Identifier* identifier, const std::string& sectionname, const std::string& varname)
-    {
-        this->type_ = type;
-        this->identifier_ = identifier;
-        this->sectionname_ = sectionname;
-        this->varname_ = varname;
-        this->callback_ = 0;
-        this->bContainerIsNew_ = true;
-        this->bDoInitialCallback_ = false;
-        this->bAddedDescription_ = false;
-    }
-
-    /**
-        @brief Does some special initialization for single config-values.
-    */
-    void ConfigValueContainer::initValue(const MultiType& defvalue)
-    {
-        this->value_ = defvalue;
-        this->bIsVector_ = false;
-
-        this->defvalueString_ = this->value_.getString();
-        this->update();
-    }
-
-    /**
-        @brief Does some special initialization for vector config-values.
-    */
-    void ConfigValueContainer::initVector()
-    {
-        this->bIsVector_ = true;
-
-        for (unsigned int i = 0; i < this->valueVector_.size(); i++)
-        {
-            ConfigFileManager::getInstance().getValue(this->type_, this->sectionname_, this->varname_, i, this->valueVector_[i], this->value_.isType(MT_Type::String));
-            this->defvalueStringVector_.push_back(this->valueVector_[i]);
-        }
-
-        this->update();
-    }
-
-    /**
-        @brief Destructor: Deletes the callback object if necessary.
-    */
-    ConfigValueContainer::~ConfigValueContainer()
-    {
-        if (this->callback_)
-            delete this->callback_;
-    }
-
-    /**
-        @brief Assigns a new value to the config-value of all objects and writes the change into the config-file.
-        @param input The new value
-        @return True if the new value was successfully assigned
-    */
-    bool ConfigValueContainer::set(const MultiType& input)
-    {
-        if (this->bIsVector_)
-        {
-            return this->callFunctionWithIndex(&ConfigValueContainer::set, input);
-        }
-        else
-        {
-            if (this->tset(input))
-            {
-                ConfigFileManager::getInstance().setValue(this->type_, this->sectionname_, this->varname_, input, this->value_.isType(MT_Type::String));
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-        @brief Assigns a new value to the config-value of all objects and writes the change into the config-file.
-        @param index The index in the vector
-        @param input The new value
-        @return True if the new value was successfully assigned
-    */
-    bool ConfigValueContainer::set(unsigned int index, const MultiType& input)
-    {
-        if (this->bIsVector_)
-        {
-            if (this->tset(index, input))
-            {
-                ConfigFileManager::getInstance().setValue(this->type_, this->sectionname_, this->varname_, index, input, this->value_.isType(MT_Type::String));
-                return true;
-            }
-        }
-        else
-        {
-            COUT(1) << "Error: Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is not a vector." << std::endl;
-        }
-        return false;
-    }
-
-    /**
-        @brief Assigns a new value to the config-value of all objects, but doesn't change the config-file (t stands for temporary).
-        @param input The new value. If bIsVector_ then write "index value"
-        @return True if the new value was successfully assigned
-    */
-    bool ConfigValueContainer::tset(const MultiType& input)
-    {
-        if (this->bIsVector_)
-        {
-            return this->callFunctionWithIndex(&ConfigValueContainer::tset, input);
-            return false;
-        }
-        else
-        {
-            this->value_ = input;
-
-            if (this->identifier_)
-                this->identifier_->updateConfigValues();
-
-            return true;
-        }
-    }
-
-    /**
-        @brief Assigns a new value to the config-value of all objects, but doesn't change the config-file (t stands for temporary).
-        @param index The index in the vector
-        @param input The new value
-        @return True if the new value was successfully assigned
-    */
-    bool ConfigValueContainer::tset(unsigned int index, const MultiType& input)
-    {
-        if (this->bIsVector_)
-        {
-            if (index > MAX_VECTOR_INDEX)
-            {
-                COUT(1) << "Error: Index " << index << " is too large." << std::endl;
-                return false;
-            }
-
-            if (index >= this->valueVector_.size())
-            {
-                for (unsigned int i = this->valueVector_.size(); i <= index; i++)
-                {
-                    this->valueVector_.push_back(MultiType());
-                }
-            }
-
-            this->valueVector_[index] = input;
-
-            if (this->identifier_)
-                this->identifier_->updateConfigValues();
-
-            return true;
-        }
-        else
-        {
-            COUT(1) << "Error: Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is not a vector." << std::endl;
-            return false;
-        }
-    }
-
-    /**
-        @brief Adds a new entry to the end of the vector.
-        @param input The new entry
-        @return True if the new entry was successfully added
-    */
-    bool ConfigValueContainer::add(const MultiType& input)
-    {
-        if (this->bIsVector_)
-            return this->set(this->valueVector_.size(), input);
-
-        COUT(1) << "Error: Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is not a vector." << std::endl;
-        return false;
-    }
-
-    /**
-        @brief Removes an existing entry from the vector.
-        @param index The index of the entry
-        @return True if the entry was removed
-    */
-    bool ConfigValueContainer::remove(unsigned int index)
-    {
-        if (this->bIsVector_)
-        {
-            if (index < this->valueVector_.size())
-            {
-                // Erase the entry from the vector, change (shift) all entries beginning with index in the config file, remove the last entry from the file
-                this->valueVector_.erase(this->valueVector_.begin() + index);
-                for (unsigned int i = index; i < this->valueVector_.size(); i++)
-                    ConfigFileManager::getInstance().setValue(this->type_, this->sectionname_, this->varname_, i, this->valueVector_[i], this->value_.isType(MT_Type::String));
-                ConfigFileManager::getInstance().deleteVectorEntries(this->type_, this->sectionname_, this->varname_, this->valueVector_.size());
-
-                return true;
-            }
-            COUT(1) << "Error: Invalid vector-index." << std::endl;
-        }
-
-        COUT(1) << "Error: Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is not a vector." << std::endl;
-        return false;
-    }
-
-    /**
-        @brief Sets the value of the variable back to the default value and resets the config-file entry.
-    */
-    bool ConfigValueContainer::reset()
-    {
-        if (!this->bIsVector_)
-            return this->set(this->defvalueString_);
-        else
-        {
-            bool success = true;
-            for (unsigned int i = 0; i < this->defvalueStringVector_.size(); i++)
-                if (!this->set(i, this->defvalueStringVector_[i]))
-                    success = false;
-            ConfigFileManager::getInstance().deleteVectorEntries(this->type_, this->sectionname_, this->varname_, this->defvalueStringVector_.size());
-            return success;
-        }
-    }
-
-    /**
-        @brief Retrieves the configured value from the currently loaded config-file.
-    */
-    void ConfigValueContainer::update()
-    {
-        if (!this->bIsVector_)
-            this->value_ = ConfigFileManager::getInstance().getValue(this->type_, this->sectionname_, this->varname_, this->defvalueString_, this->value_.isType(MT_Type::String));
-        else
-        {
-            this->valueVector_.clear();
-            unsigned int vectorSize = ConfigFileManager::getInstance().getVectorSize(this->type_, this->sectionname_, this->varname_);
-            for (unsigned int i = 0; i < vectorSize; i++)
-            {
-                if (i < this->defvalueStringVector_.size())
-                {
-                    this->value_ = ConfigFileManager::getInstance().getValue(this->type_, this->sectionname_, this->varname_, i, this->defvalueStringVector_[i], this->value_.isType(MT_Type::String));
-                }
-                else
-                {
-                    this->value_ = ConfigFileManager::getInstance().getValue(this->type_, this->sectionname_, this->varname_, i, MultiType(), this->value_.isType(MT_Type::String));
-                }
-
-                this->valueVector_.push_back(this->value_);
-            }
-        }
-    }
-
-    /**
-        @brief Calls the given function with parsed index and the parsed argument from the input string.
-        @param function The function to call
-        @param input The input string
-        @return The returnvalue of the functioncall
-    */
-    bool ConfigValueContainer::callFunctionWithIndex(bool (ConfigValueContainer::* function) (unsigned int, const MultiType&), const std::string& input)
-    {
-        SubString token(input, " ", SubString::WhiteSpaces, true, '\\', false, '"', false, '(', ')', false, '\0');
-        int index = -1;
-        bool success = false;
-
-        if (token.size() > 0)
-            success = convertValue(&index, token[0]);
-
-        if (!success || index < 0 || index > (signed int)MAX_VECTOR_INDEX)
-        {
-            if (!success)
-            {
-                COUT(1) << "Error: Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is a vector." << std::endl;
-            }
-            else
-            {
-                COUT(1) << "Error: Invalid vector-index." << std::endl;
-            }
-            return false;
-        }
-
-        if (token.size() >= 2)
-            return (this->*function)(index, token.subSet(1).join());
-        else
-            return (this->*function)(index, "");
-    }
-
-    /**
-        @brief Adds a description to the config-value.
-        @param description The description
-    */
-    ConfigValueContainer& ConfigValueContainer::description(const std::string& description)
-    {
-        if (!this->bAddedDescription_)
-        {
-            this->description_ = std::string("ConfigValueDescription::" + this->sectionname_ + "::" + this->varname_);
-            AddLanguageEntry(this->description_, description);
-            this->bAddedDescription_ = true;
-        }
-        return (*this);
-    }
-
-    /**
-        @brief Returns the description of the config-value.
-        @return The description
-    */
-    const std::string& ConfigValueContainer::getDescription() const
-    {
-        return GetLocalisation(this->description_);
-    }
-}
Index: sandbox_light/src/libraries/core/ConfigValueContainer.h
===================================================================
--- sandbox_light/src/libraries/core/ConfigValueContainer.h	(revision 5788)
+++ 	(revision )
@@ -1,301 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Definition of the ConfigValueContainer class.
-
-    The ConfigValueContainer class contains all needed information about a configurable variable:
-     - the name of the variable
-     - the name of the class the variable belongs to
-     - the default value
-     - the user-specified value
-     - a pointer to the entry in the config-file
-
-    This is needed to assign the configured values to all newly created objects.
-*/
-
-#ifndef _ConfigValueContainer_H__
-#define _ConfigValueContainer_H__
-
-#include "CorePrereqs.h"
-
-#include <string>
-#include <vector>
-
-#include "util/MultiType.h"
-#include "ConfigFileManager.h"
-#include "Identifier.h"
-
-namespace orxonox
-{
-    class ConfigValueCallbackBase
-    {
-        public:
-            virtual void call(void* object) = 0;
-            inline virtual ~ConfigValueCallbackBase() {}
-    };
-
-    template <class T>
-    class ConfigValueCallback: public ConfigValueCallbackBase
-    {
-        public:
-            inline ConfigValueCallback(void (T::*function) (void)) : function_(function) {}
-            inline virtual ~ConfigValueCallback() {}
-            inline virtual void call(void* object)
-            {
-                if (!Identifier::isCreatingHierarchy())
-                    (static_cast<T*>(object)->*this->function_)();
-            }
-
-        private:
-            void (T::*function_) (void);
-    };
-
-
-    //! The ConfigValuecontainer contains all needed information about a configurable variable.
-    /**
-        The ConfigValueContainer class contains all needed information about a configurable variable:
-         - the name of the variable
-         - the name of the class the variable belongs to
-         - the default value
-         - the user-specified value
-         - a pointer to the entry in the config-file
-
-        This is needed to assign the configured values to all newly created objects.
-
-        The container searches for the entry in the config file.
-        If there is an entry, it parses the specified value and assigns it to the variable of the right type.
-        If there is no entry, it adds the entry with the default-value to the section of the variables class.
-        If there is no section, the section and the entry are added to the end of the config-file.
-    */
-    class _CoreExport ConfigValueContainer
-    {
-        public:
-            /**
-                @brief Constructor: Converts the default-value to a string, checks the config-file for a changed value, sets the intern value variable.
-                @param type The type of the corresponding config-file
-                @param identifier The identifier of the class the variable belongs to
-                @param sectionname Name of the section the configValue should be put in.
-                @param varname The name of the variable
-                @param defvalue The default-value
-                @param value Only needed do determine the right type.
-            */
-            template <class D, class V>
-            ConfigValueContainer(ConfigFileType type, Identifier* identifier, const std::string& sectionname, const std::string& varname, const D& defvalue, const V& value)
-            {
-                this->init(type, identifier, sectionname, varname);
-                this->initValue(static_cast<V>(defvalue));
-            }
-
-            /**
-                @brief Constructor: Converts the default-value to a string, checks the config-file for a changed value, sets the intern value variable.
-                @param type The type of the corresponding config-file
-                @param identifier The identifier of the class the variable belongs to
-                @param varname The name of the variable
-                @param defvalue The default-value
-            */
-            template <class V>
-            ConfigValueContainer(ConfigFileType type, Identifier* identifier, const std::string& sectionname, const std::string& varname, const std::vector<V>& defvalue)
-            {
-                this->init(type, identifier, sectionname, varname);
-
-                this->value_ = V();
-                for (unsigned int i = 0; i < defvalue.size(); i++)
-                    this->valueVector_.push_back(MultiType(defvalue[i]));
-
-                this->initVector();
-            }
-
-            ~ConfigValueContainer();
-
-            /**
-                @brief Returns the configured value.
-                @param value A pointer to the variable to store the value.
-                @param object The object calling this function
-                @return The ConfigValueContainer
-            */
-            template <typename T, class C>
-            ConfigValueContainer& getValue(T* value, C* object)
-            {
-                if ((this->callback_ && object) || this->bContainerIsNew_)
-                {
-                    if (this->bContainerIsNew_)
-                        this->bContainerIsNew_ = false;
-
-                    T temp = *value;
-                    this->value_.getValue(value);
-                    if ((*value) != temp)
-                    {
-                        if (this->callback_ && object)
-                            this->callback_->call(object);
-                        else
-                            this->bDoInitialCallback_ = true;
-                    }
-                }
-                else
-                {
-                    this->value_.getValue(value);
-                }
-                return *this;
-            }
-
-            /**
-                @brief Returns the configured vector.
-                @param value A pointer to the vector to store the values.
-                @param object The object calling this function
-                @return The ConfigValueContainer
-            */
-            template <typename T, class C>
-            ConfigValueContainer& getValue(std::vector<T>* value, C* object)
-            {
-                if ((this->callback_ && object) || this->bContainerIsNew_)
-                {
-                    if (this->bContainerIsNew_)
-                        this->bContainerIsNew_ = false;
-
-                    std::vector<T> temp = *value;
-                    value->clear();
-                    for (unsigned int i = 0; i < this->valueVector_.size(); ++i)
-                        value->push_back(this->valueVector_[i]);
-
-                    if (value->size() != temp.size())
-                    {
-                        if (this->callback_ && object)
-                            this->callback_->call(object);
-                        else
-                            this->bDoInitialCallback_ = true;
-                    }
-                    else
-                    {
-                        for (unsigned int i = 0; i < value->size(); ++i)
-                        {
-                            if ((*value)[i] != temp[i])
-                            {
-                                if (this->callback_ && object)
-                                    this->callback_->call(object);
-                                else
-                                    this->bDoInitialCallback_ = true;
-                                break;
-                            }
-                        }
-                    }
-                }
-                else
-                {
-                    value->clear();
-                    for (unsigned int i = 0; i < this->valueVector_.size(); ++i)
-                        value->push_back(this->valueVector_[i]);
-                }
-                return *this;
-            }
-
-            /** @brief Returns the name of this container. */
-            inline const std::string& getName() const
-                { return this->varname_; }
-            /** @brief Retuns the name of the section this config value is in. */
-            inline const std::string& getSectionName() const
-                { return this->sectionname_; }
-            /** @brief Returns true if this config-value is a vector */
-            inline bool isVector() const
-                { return this->bIsVector_; }
-            /** @brief Returns the vectors size (or zero if it's not a vector). */
-            inline unsigned int getVectorSize() const
-                { return this->valueVector_.size(); }
-
-            ConfigValueContainer& description(const std::string& description);
-            const std::string& getDescription() const;
-
-            /**
-                @brief Adds a callback function, that gets called after getValue() if the newly assigned value differs from the old value of the variable.
-                @param object The object to call the function
-                @param function The callback function
-            */
-            template <class T>
-            inline ConfigValueContainer& callback(T* object, void (T::*function) (void))
-            {
-                if (!this->callback_)
-                {
-                    this->callback_ = new ConfigValueCallback<T>(function);
-
-                    if (this->bDoInitialCallback_)
-                    {
-                        this->bDoInitialCallback_ = false;
-                        this->callback_->call(object);
-                    }
-                }
-
-                return (*this);
-            }
-
-            bool set(const MultiType& input);
-            bool tset(const MultiType& input);
-
-            bool set(unsigned int index, const MultiType& input);
-            bool tset(unsigned int index, const MultiType& input);
-            bool add(const MultiType& input);
-            bool remove(unsigned int index);
-
-            bool reset();
-            void update();
-
-            /** @brief Converts the config-value to a string. @return The string */
-            inline std::string toString() const
-                { return this->value_; }
-            /** @brief Returns the typename of the assigned config-value. @return The typename */
-            inline std::string getTypename() const
-                { return this->value_.getTypename(); }
-
-        private:
-            void init(ConfigFileType type, Identifier* identifier, const std::string& sectionname, const std::string& varname);
-            void initValue(const MultiType& defvalue);
-            void initVector();
-            bool callFunctionWithIndex(bool (ConfigValueContainer::* function) (unsigned int, const MultiType&), const std::string& input);
-
-            bool                       bIsVector_;                  //!< True if the container contains a std::vector
-
-            ConfigFileType             type_;                       //!< The type of the corresponding config-file
-            Identifier*                identifier_;                 //!< The identifier of the class
-            std::string                sectionname_;                //!< The name of the class the variable belongs to
-            std::string                varname_;                    //!< The name of the variable
-            std::string                defvalueString_;             //!< The string of the default-value
-            std::vector<std::string>   defvalueStringVector_;       //!< A vector, containg the strings of the default-values in case we're storing a vector
-
-            MultiType                  value_;                      //!< The value
-            std::vector<MultiType>     valueVector_;                //!< A vector, containg the values in case we're storing a vector
-
-            bool                       bAddedDescription_;          //!< True if a description was added
-            LanguageEntryLabel         description_;                //!< The description
-            ConfigValueCallbackBase*   callback_;                   //!< A callback function to call after getValue if the value changed
-
-            bool                       bContainerIsNew_;            //!< True if it's the first time getValue() gets called
-            bool                       bDoInitialCallback_;         //!< True if the callback should be called as soon as it gets created
-    };
-}
-
-#endif /* _ConfigValueContainer_H__ */
Index: sandbox_light/src/libraries/core/ConfigValueIncludes.h
===================================================================
--- sandbox_light/src/libraries/core/ConfigValueIncludes.h	(revision 5788)
+++ 	(revision )
@@ -1,114 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Definition of macros for config-values.
-*/
-
-#ifndef _ConfigValueIncludes_H__
-#define _ConfigValueIncludes_H__
-
-#include "CorePrereqs.h"
-
-#include "Identifier.h"
-#include "ConfigValueContainer.h"
-#include "ConfigFileManager.h"
-
-
-/**
-    @brief Assigns the value, defined in the config-file, to the variable (or the default-value, if there is no entry in the file).
-    @param varname The name of the variable
-    @param defvalue The default-value of the variable
-*/
-#define SetConfigValueGeneric(type, varname, defvalue) \
-    static orxonox::Identifier* identifier##varname = this->getIdentifier(); \
-    orxonox::ConfigValueContainer* container##varname = identifier##varname->getConfigValueContainer(#varname); \
-    if (!container##varname) \
-    { \
-        container##varname = new orxonox::ConfigValueContainer(type, identifier##varname, identifier##varname->getName(), #varname, defvalue, varname); \
-        identifier##varname->addConfigValueContainer(#varname, container##varname); \
-    } \
-    container##varname->getValue(&varname, this)
-
-#define SetConfigValue(varname, defvalue) SetConfigValueGeneric(ConfigFileType::Settings, varname, defvalue)
-
-
-/**
-    @brief Assigns the vector-values, defined in the config-file, to the vector (or the default-value, if there are no entries in the file).
-    @param varname The name of the std::vector
-    @param defvalue The default-value
-*/
-#define SetConfigValueVectorGeneric(type, varname, defvalue) \
-    static orxonox::Identifier* identifier##varname = this->getIdentifier(); \
-    orxonox::ConfigValueContainer* container##varname = identifier##varname->getConfigValueContainer(#varname); \
-    if (!container##varname) \
-    { \
-        container##varname = new orxonox::ConfigValueContainer(type, identifier##varname, identifier##varname->getName(), #varname, defvalue); \
-        identifier##varname->addConfigValueContainer(#varname, container##varname); \
-    } \
-    container##varname->getValue(&varname, this)
-
-#define SetConfigValueVector(varname, defvalue) SetConfigValueVectorGeneric(ConfigFileType::Settings, varname, defvalue)
-
-
-/**
-    @brief Sets the variable and the config-file entry back to the previously defined default-value.
-    @param varname The name of the variable
-*/
-#define ResetConfigValue(varname) \
-    orxonox::ConfigValueContainer* container##varname##reset = this->getIdentifier()->getConfigValueContainer(#varname); \
-    if (container##varname##reset) \
-    { \
-        container##varname##reset->reset(); \
-        container##varname##reset->getValue(&varname, this); \
-    } \
-    else \
-    { \
-        COUT(2) << "Warning: Couldn't reset config-value '" << #varname << "', corresponding container doesn't exist." << std::endl; \
-    }
-
-
-/**
-    @brief Modifies a config-value by using a modifier and some arguments.
-    @param varname The name of the config-value
-    @param modifier The name of the modifier: set, tset, add, remove, reset, update
-*/
-#define ModifyConfigValue(varname, modifier, ...) \
-    orxonox::ConfigValueContainer* container##varname##modify##modifier = this->getIdentifier()->getConfigValueContainer(#varname); \
-    if (container##varname##modify##modifier) \
-    { \
-        container##varname##modify##modifier->modifier(__VA_ARGS__); \
-        container##varname##modify##modifier->getValue(&varname, this); \
-    } \
-    else \
-    { \
-        COUT(2) << "Warning: Couln't modify config-value '" << #varname << "', corresponding container doesn't exist." << std::endl; \
-    }
-
-#endif /* _ConfigValueIncludes_H__ */
Index: sandbox_light/src/libraries/core/Core.cc
===================================================================
--- sandbox_light/src/libraries/core/Core.cc	(revision 5788)
+++ sandbox_light/src/libraries/core/Core.cc	(revision 5789)
@@ -64,11 +64,4 @@
 #include "Clock.h"
 #include "CommandLine.h"
-#include "ConfigFileManager.h"
-#include "ConfigValueIncludes.h"
-#include "CoreIncludes.h"
-#include "DynLibManager.h"
-#include "Factory.h"
-#include "Identifier.h"
-#include "Language.h"
 #include "LuaState.h"
 
@@ -85,5 +78,4 @@
     Core* Core::singletonPtr_s  = 0;
 
-    SetCommandLineArgument(externalDataPath, "").information("Path to the external data files");
     SetCommandLineOnlyArgument(writingPathSuffix, "").information("Additional subfolder for config and log files");
     SetCommandLineArgument(settingsFile, "orxonox.ini").information("THE configuration file");
@@ -98,5 +90,5 @@
         destruction in the Core destructor.
     */
-    class CoreConfiguration : public OrxonoxClass
+    class CoreConfiguration
     {
     public:
@@ -106,13 +98,4 @@
 
         void initialise()
-        {
-            RegisterRootObject(CoreConfiguration);
-            this->setConfigValues();
-        }
-
-        /**
-            @brief Function to collect the SetConfigValue-macro calls.
-        */
-        void setConfigValues()
         {
 #ifdef NDEBUG
@@ -125,20 +108,11 @@
             const unsigned int defaultLevelShell   = 3;
 #endif
-            SetConfigValue(softDebugLevelConsole_, defaultLevelConsole)
-                .description("The maximal level of debug output shown in the console")
-                .callback(this, &CoreConfiguration::debugLevelChanged);
-            SetConfigValue(softDebugLevelLogfile_, defaultLevelLogfile)
-                .description("The maximal level of debug output shown in the logfile")
-                .callback(this, &CoreConfiguration::debugLevelChanged);
-            SetConfigValue(softDebugLevelShell_, defaultLevelShell)
-                .description("The maximal level of debug output shown in the ingame shell")
-                .callback(this, &CoreConfiguration::debugLevelChanged);
-
-            SetConfigValue(language_, Language::getInstance().defaultLanguage_)
-                .description("The language of the ingame text")
-                .callback(this, &CoreConfiguration::languageChanged);
-            SetConfigValue(bInitializeRandomNumberGenerator_, true)
-                .description("If true, all random actions are different each time you start the game")
-                .callback(this, &CoreConfiguration::initializeRandomNumberGenerator);
+            softDebugLevelConsole_ = defaultLevelConsole;
+            softDebugLevelLogfile_ = defaultLevelLogfile;
+            softDebugLevelShell_   = defaultLevelShell;
+            this->debugLevelChanged();
+
+            bInitializeRandomNumberGenerator_ = true;
+            this->initializeRandomNumberGenerator();
         }
 
@@ -159,21 +133,4 @@
             OutputHandler::setSoftDebugLevel(OutputHandler::LD_Logfile, this->softDebugLevelLogfile_);
             OutputHandler::setSoftDebugLevel(OutputHandler::LD_Shell,   this->softDebugLevelShell_);
-        }
-
-        /**
-            @brief Callback function if the language has changed.
-        */
-        void languageChanged()
-        {
-            // Read the translation file after the language was configured
-            Language::getInstance().readTranslatedLanguageFile();
-        }
-
-        /**
-            @brief Sets the language in the config-file back to the default.
-        */
-        void resetLanguage()
-        {
-            ResetConfigValue(language_);
         }
 
@@ -193,5 +150,4 @@
         int softDebugLevelLogfile_;                     //!< The debug level for the logfile
         int softDebugLevelShell_;                       //!< The debug level for the ingame shell
-        std::string language_;                          //!< The language
         bool bInitializeRandomNumberGenerator_;         //!< If true, srand(time(0)) is called
 
@@ -199,5 +155,4 @@
         boost::filesystem::path rootPath_;
         boost::filesystem::path executablePath_;        //!< Path to the executable
-        boost::filesystem::path modulePath_;            //!< Path to the modules
         boost::filesystem::path dataPath_;              //!< Path to the data file folder
         boost::filesystem::path configPath_;            //!< Path to the config file folder
@@ -208,63 +163,9 @@
     Core::Core(const std::string& cmdLine)
         // Cleanup guard for identifier destruction (incl. XMLPort, configValues, consoleCommands)
-        : identifierDestroyer_(Identifier::destroyAllIdentifiers)
-        , configuration_(new CoreConfiguration()) // Don't yet create config values!
+        : configuration_(new CoreConfiguration()) // Don't yet create config values!
         , bDevRun_(false)
     {
         // Set the hard coded fixed paths
         this->setFixedPaths();
-
-        // Create a new dynamic library manager
-        this->dynLibManager_.reset(new DynLibManager());
-
-        // Load modules
-        try
-        {
-            // We search for helper files with the following extension
-            std::string moduleextension = specialConfig::moduleExtension;
-            size_t moduleextensionlength = moduleextension.size();
-
-            // Search in the directory of our executable
-            boost::filesystem::path searchpath = this->configuration_->modulePath_;
-
-            // Add that path to the PATH variable in case a module depends on another one
-            std::string pathVariable = getenv("PATH");
-            putenv(const_cast<char*>(("PATH=" + pathVariable + ";" + configuration_->modulePath_.string()).c_str()));
-
-            boost::filesystem::directory_iterator file(searchpath);
-            boost::filesystem::directory_iterator end;
-
-            // Iterate through all files
-            while (file != end)
-            {
-                std::string filename = file->BOOST_LEAF_FUNCTION();
-
-                // Check if the file ends with the exension in question
-                if (filename.size() > moduleextensionlength)
-                {
-                    if (filename.substr(filename.size() - moduleextensionlength) == moduleextension)
-                    {
-                        // We've found a helper file - now load the library with the same name
-                        std::string library = filename.substr(0, filename.size() - moduleextensionlength);
-                        boost::filesystem::path librarypath = searchpath / library;
-
-                        try
-                        {
-                            DynLibManager::getInstance().load(librarypath.string());
-                        }
-                        catch (...)
-                        {
-                            COUT(1) << "Couldn't load module \"" << librarypath.string() << "\": " << Exception::handleMessage() << std::endl;
-                        }
-                    }
-                }
-
-                ++file;
-            }
-        }
-        catch (...)
-        {
-            COUT(1) << "An error occurred while loading modules: " << Exception::handleMessage() << std::endl;
-        }
 
         // Parse command line arguments AFTER the modules have been loaded (static code!)
@@ -293,15 +194,4 @@
             setThreadAffinity(static_cast<unsigned int>(limitToCPU));
 #endif
-
-        // Manage ini files and set the default settings file (usually orxonox.ini)
-        this->configFileManager_.reset(new ConfigFileManager());
-        this->configFileManager_->setFilename(ConfigFileType::Settings,
-            CommandLine::getValue("settingsFile").getString());
-
-        // Required as well for the config values
-        this->languageInstance_.reset(new Language());
-
-        // creates the class hierarchy for all classes with factories
-        Factory::createClassHierarchy();
 
         // Do this soon after the ConfigFileManager has been created to open up the
@@ -360,20 +250,4 @@
     }
 
-    /**
-        @brief Returns the configured language.
-    */
-    /*static*/ const std::string& Core::getLanguage()
-    {
-        return Core::getInstance().configuration_->language_;
-    }
-
-    /**
-        @brief Sets the language in the config-file back to the default.
-    */
-    /*static*/ void Core::resetLanguage()
-    {
-        Core::getInstance().configuration_->resetLanguage();
-    }
-
     /*static*/ const boost::filesystem::path& Core::getDataPath()
     {
@@ -524,5 +398,4 @@
             COUT(1) << "Running from the build tree." << std::endl;
             Core::bDevRun_ = true;
-            configuration_->modulePath_ = specialConfig::moduleDevDirectory;
         }
         else
@@ -539,13 +412,4 @@
             if (configuration_->rootPath_.empty())
                 ThrowException(General, "Could not derive a root directory. Might the binary installation directory contain '..' when taken relative to the installation prefix path?");
-
-            // Module path is fixed as well
-            configuration_->modulePath_ = configuration_->rootPath_ / specialConfig::defaultModulePath;
-
-#else
-
-            // There is no root path, so don't set it at all
-            // Module path is fixed as well
-            configuration_->modulePath_ = specialConfig::moduleInstallDirectory;
 
 #endif
@@ -626,11 +490,3 @@
         }
     }
-
-    void Core::preUpdate(const Clock& time)
-    {
-    }
-
-    void Core::postUpdate(const Clock& time)
-    {
-    }
 }
Index: sandbox_light/src/libraries/core/Core.h
===================================================================
--- sandbox_light/src/libraries/core/Core.h	(revision 5788)
+++ sandbox_light/src/libraries/core/Core.h	(revision 5789)
@@ -65,5 +65,4 @@
         typedef Loki::ScopeGuardImpl0<void (*)()> SimpleScopeGuard;
         friend class Singleton<Core>;
-        friend class Game;
 
         public:
@@ -82,6 +81,4 @@
             static int   getSoftDebugLevel(OutputHandler::OutputDevice device = OutputHandler::LD_All);
             static void  setSoftDebugLevel(OutputHandler::OutputDevice device, int level);
-            static const std::string& getLanguage();
-            static void  resetLanguage();
 
             //! Returns the path to the data files as boost::filesystem::path
@@ -107,7 +104,4 @@
             Core(const Core&); //!< Don't use (undefined symbol)
 
-            void preUpdate(const Clock& time);
-            void postUpdate(const Clock& time);
-
             void setFixedPaths();
             void setConfigurablePaths();
@@ -115,9 +109,5 @@
 
             // Mind the order for the destruction!
-            scoped_ptr<DynLibManager>     dynLibManager_;
             scoped_ptr<SignalHandler>     signalHandler_;
-            SimpleScopeGuard              identifierDestroyer_;
-            scoped_ptr<ConfigFileManager> configFileManager_;
-            scoped_ptr<Language>          languageInstance_;
             scoped_ptr<CoreConfiguration> configuration_;
 
Index: sandbox_light/src/libraries/core/CoreIncludes.h
===================================================================
--- sandbox_light/src/libraries/core/CoreIncludes.h	(revision 5788)
+++ 	(revision )
@@ -1,113 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Definition of macros for Identifier and Factory.
-
-    Every class needs the RegisterObject(class) macro in its constructor. If the class is an interface
-    or the BaseObject itself, it needs the macro RegisterRootObject(class) instead.
-
-    To allow the object being created through the factory, use the CreateFactory(class) macro outside
-    the of the class implementation, so it gets executed before main().
-*/
-
-#ifndef _CoreIncludes_H__
-#define _CoreIncludes_H__
-
-#include "CorePrereqs.h"
-
-#include "util/Debug.h"
-#include "Identifier.h"
-#include "Factory.h"
-#include "ClassFactory.h"
-#include "ObjectList.h"
-
-
-/**
-    @brief Intern macro, containing the common parts of RegisterObject and RegisterRootObject.
-    @param ClassName The name of the class
-    @param bRootClass True if the class is directly derived from OrxonoxClass
-*/
-#define InternRegisterObject(ClassName, bRootClass) \
-    if (ClassIdentifier<ClassName>::getIdentifier(#ClassName)->initialiseObject(this, #ClassName, bRootClass)) \
-        return; \
-    else \
-        ((void)0)
-
-/**
-    @brief RegisterObject - with and without debug output.
-    @param ClassName The name of the class
-*/
-#define RegisterObject(ClassName) \
-    InternRegisterObject(ClassName, false)
-
-/**
-    @brief RegisterRootObject - with and without debug output.
-    @param ClassName The name of the class
-*/
-#define RegisterRootObject(ClassName) \
-    InternRegisterObject(ClassName, true)
-
-/**
-    @brief Creates the entry in the Factory.
-    @param ClassName The name of the class
-*/
-#define CreateFactory(ClassName) \
-    bool bCreated##ClassName##Factory = orxonox::ClassFactory<ClassName>::create(#ClassName)
-
-/**
-    @brief Returns the Identifier of the given class.
-    @param ClassName The name of the class
-*/
-#define Class(ClassName) \
-    orxonox::ClassIdentifier<ClassName>::getIdentifier()
-
-
-namespace orxonox
-{
-    /**
-        @brief Returns the Identifier with a given name through the factory.
-        @param String The name of the class
-    */
-    inline Identifier* ClassByString(const std::string& name)
-    {
-        return Factory::getIdentifier(name);
-    }
-
-    /**
-        @brief Returns the Identifier with a given network ID through the factory.
-        @param networkID The network ID of the class
-    */
-    inline Identifier* ClassByID(uint32_t id)
-    {
-        return Factory::getIdentifier(id);
-    }
-}
-
-#endif /* _CoreIncludes_H__ */
Index: sandbox_light/src/libraries/core/CorePrecompiledHeaders.h
===================================================================
--- sandbox_light/src/libraries/core/CorePrecompiledHeaders.h	(revision 5788)
+++ 	(revision )
@@ -1,82 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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
-    Compilation of the most often used header files in the core library
-@details
-    Updated: 13. September 2009
-    Total Files: 56
-*/
-
-#include "OrxonoxConfig.h"
-
-///////////////////////////////////////////
-/////          Stable Headers         /////
-///////////////////////////////////////////
-
-#include <string>   // 54
-#include <vector>   // 54
-#include <cassert>  // 53
-#include <fstream>  // 53
-#include <iostream> // 53
-#include <map>      // 53
-#include <sstream>  // 53
-#include <set>      // 50
-
-#include "util/Debug.h" // 48
-
-#include <deque>    // 43
-#include <list>     // 44
-#include <cmath>    // 42
-
-#include "util/ScopeGuard.h" // 38
-
-#include <OgreMath.h>        // 36
-#include <OgreVector2.h>     // 36
-#include <OgreVector3.h>     // 36
-#include <OgreVector4.h>     // 36
-#include <OgreQuaternion.h>  // 36
-#include <OgreColourValue.h> // 36
-#include <boost/preprocessor/cat.hpp> // 27
-#include <boost/shared_ptr.hpp> // 21
-
-#ifdef ORXONOX_COMPILER_MSVC
-
-#include "util/SubString.h"  // 14
-
-#include <boost/scoped_ptr.hpp> // 13
-#include <stack> // 12
-
-#endif /*ORXONOX_COMPILER_MSVC */
-
-
-// Just in case some header included windows.h
-#undef min
-#undef max
Index: sandbox_light/src/libraries/core/DynLib.cc
===================================================================
--- sandbox_light/src/libraries/core/DynLib.cc	(revision 5788)
+++ 	(revision )
@@ -1,138 +1,0 @@
-/*
------------------------------------------------------------------------------
-This source file is part of OGRE
-    (Object-oriented Graphics Rendering Engine)
-For the latest info, see http://www.ogre3d.org/
-
-Copyright (c) 2000-2006 Torus Knot Software Ltd
-Also see acknowledgements in Readme.html
-
-This program is free software; you can redistribute it and/or modify it under
-the terms of the GNU Lesser 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 Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public License along with
-this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-Place - Suite 330, Boston, MA 02111-1307, USA, or go to
-http://www.gnu.org/copyleft/lesser.txt.
-
-You may alternatively use this source under the terms of a specific version of
-the OGRE Unrestricted License provided you have obtained such a license from
-Torus Knot Software Ltd.
------------------------------------------------------------------------------
-*/
-
-// 08/11/2009: Small adjustments for Orxonox by Fabian 'x3n' Landau
-
-#include "DynLib.h"
-
-#include "util/Exception.h"
-
-#ifdef ORXONOX_PLATFORM_WINDOWS
-#  define WIN32_LEAN_AND_MEAN
-#  ifndef NOMINMAX
-#    define NOMINMAX // required to stop windows.h messing up std::min
-#  endif
-#  include <windows.h>
-#endif
-
-#ifdef ORXONOX_PLATFORM_LINUX
-#  include <dlfcn.h>
-#endif
-
-#ifdef ORXONOX_PLATFORM_APPLE
-#  include <macPlugins.h>
-#endif
-
-namespace orxonox
-{
-    //-----------------------------------------------------------------------
-    DynLib::DynLib( const std::string& name )
-    {
-        mName = name;
-        m_hInst = NULL;
-    }
-
-    //-----------------------------------------------------------------------
-    DynLib::~DynLib()
-    {
-    }
-
-    //-----------------------------------------------------------------------
-    void DynLib::load()
-    {
-        // Log library load
-        COUT(2) << "Loading module " << mName << std::endl;
-
-		std::string name = mName;
-#ifdef ORXONOX_PLATFORM_LINUX
-        // dlopen() does not add .so to the filename, like windows does for .dll
-        if (name.substr(name.length() - 3, 3) != ".so")
-           name += ".so";
-#endif
-
-        m_hInst = (DYNLIB_HANDLE)DYNLIB_LOAD( name.c_str() );
-
-        if( !m_hInst )
-            ThrowException(
-                General,
-                "Could not load dynamic library " + mName +
-                ".  System Error: " + dynlibError());
-    }
-
-    //-----------------------------------------------------------------------
-    void DynLib::unload()
-    {
-        // Log library unload
-        COUT(4) << "Unloading module " << mName << std::endl;
-
-        if( DYNLIB_UNLOAD( m_hInst ) )
-		{
-            ThrowException(
-                General,
-                "Could not unload dynamic library " + mName +
-                ".  System Error: " + dynlibError());
-		}
-
-    }
-
-    //-----------------------------------------------------------------------
-    void* DynLib::getSymbol( const std::string& strName ) const throw()
-    {
-        return (void*)DYNLIB_GETSYM( m_hInst, strName.c_str() );
-    }
-    //-----------------------------------------------------------------------
-    std::string DynLib::dynlibError( void )
-    {
-#if defined(ORXONOX_PLATFORM_WINDOWS)
-        LPVOID lpMsgBuf;
-        FormatMessage(
-            FORMAT_MESSAGE_ALLOCATE_BUFFER |
-            FORMAT_MESSAGE_FROM_SYSTEM |
-            FORMAT_MESSAGE_IGNORE_INSERTS,
-            NULL,
-            GetLastError(),
-            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
-            (LPTSTR) &lpMsgBuf,
-            0,
-            NULL
-            );
-        std::string ret = (char*)lpMsgBuf;
-        // Free the buffer.
-        LocalFree( lpMsgBuf );
-        return ret;
-#elif defined(ORXONOX_PLATFORM_LINUX)
-        return std::string(dlerror());
-#elif defined(ORXONOX_PLATFORM_APPLE)
-        return std::string(mac_errorBundle());
-#else
-        return std::string("");
-#endif
-    }
-
-}
Index: sandbox_light/src/libraries/core/DynLib.h
===================================================================
--- sandbox_light/src/libraries/core/DynLib.h	(revision 5788)
+++ 	(revision )
@@ -1,121 +1,0 @@
-/*
------------------------------------------------------------------------------
-This source file is part of OGRE
-    (Object-oriented Graphics Rendering Engine)
-For the latest info, see http://www.ogre3d.org/
-
-Copyright (c) 2000-2006 Torus Knot Software Ltd
-Also see acknowledgements in Readme.html
-
-This program is free software; you can redistribute it and/or modify it under
-the terms of the GNU Lesser 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 Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public License along with
-this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-Place - Suite 330, Boston, MA 02111-1307, USA, or go to
-http://www.gnu.org/copyleft/lesser.txt.
-
-You may alternatively use this source under the terms of a specific version of
-the OGRE Unrestricted License provided you have obtained such a license from
-Torus Knot Software Ltd.
------------------------------------------------------------------------------
-*/
-
-// 08/11/2009: Small adjustments for Orxonox by Fabian 'x3n' Landau
-
-#ifndef _Core_DynLib_H__
-#define _Core_DynLib_H__
-
-#include "CorePrereqs.h"
-
-#include <string>
-
-#if defined(ORXONOX_PLATFORM_WINDOWS)
-#    define DYNLIB_HANDLE hInstance
-#    define DYNLIB_LOAD( a ) LoadLibraryEx( a, NULL, LOAD_WITH_ALTERED_SEARCH_PATH )
-#    define DYNLIB_GETSYM( a, b ) GetProcAddress( a, b )
-#    define DYNLIB_UNLOAD( a ) !FreeLibrary( a )
-
-struct HINSTANCE__;
-typedef struct HINSTANCE__* hInstance;
-
-#elif defined(ORXONOX_PLATFORM_LINUX)
-#    define DYNLIB_HANDLE void*
-#    define DYNLIB_LOAD( a ) dlopen( a, RTLD_LAZY | RTLD_GLOBAL)
-#    define DYNLIB_GETSYM( a, b ) dlsym( a, b )
-#    define DYNLIB_UNLOAD( a ) dlclose( a )
-
-#elif defined(ORXONOX_PLATFORM_APPLE)
-#    define DYNLIB_HANDLE CFBundleRef
-#    define DYNLIB_LOAD( a ) mac_loadExeBundle( a )
-#    define DYNLIB_GETSYM( a, b ) mac_getBundleSym( a, b )
-#    define DYNLIB_UNLOAD( a ) mac_unloadExeBundle( a )
-#endif
-
-namespace orxonox
-{
-    /** Resource holding data about a dynamic library.
-        @remarks
-            This class holds the data required to get symbols from
-            libraries loaded at run-time (i.e. from DLL's for so's)
-        @author
-            Adrian Cearnãu (cearny@cearny.ro)
-        @since
-            27 January 2002
-        @see
-            Resource
-    */
-	class _CoreExport DynLib
-    {
-	protected:
-		std::string mName;
-        /// Gets the last loading error
-        std::string dynlibError(void);
-    public:
-        /** Default constructor - used by DynLibManager.
-            @warning
-                Do not call directly
-        */
-        DynLib( const std::string& name );
-
-        /** Default destructor.
-        */
-        ~DynLib();
-
-        /** Load the library
-        */
-        void load();
-        /** Unload the library
-        */
-        void unload();
-		/// Get the name of the library
-		const std::string& getName(void) const { return mName; }
-
-        /**
-            Returns the address of the given symbol from the loaded library.
-            @param
-                strName The name of the symbol to search for
-            @returns
-                If the function succeeds, the returned value is a handle to
-                the symbol.
-            @par
-                If the function fails, the returned value is <b>NULL</b>.
-
-        */
-        void* getSymbol( const std::string& strName ) const throw();
-
-    protected:
-
-        /// Handle to the loaded library.
-        DYNLIB_HANDLE m_hInst;
-    };
-
-}
-
-#endif /* _Core_DynLib_H__ */
Index: sandbox_light/src/libraries/core/DynLibManager.cc
===================================================================
--- sandbox_light/src/libraries/core/DynLibManager.cc	(revision 5788)
+++ 	(revision )
@@ -1,86 +1,0 @@
-/*
------------------------------------------------------------------------------
-This source file is part of OGRE
-    (Object-oriented Graphics Rendering Engine)
-For the latest info, see http://www.ogre3d.org/
-
-Copyright (c) 2000-2006 Torus Knot Software Ltd
-Also see acknowledgements in Readme.html
-
-This program is free software; you can redistribute it and/or modify it under
-the terms of the GNU Lesser 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 Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public License along with
-this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-Place - Suite 330, Boston, MA 02111-1307, USA, or go to
-http://www.gnu.org/copyleft/lesser.txt.
-
-You may alternatively use this source under the terms of a specific version of
-the OGRE Unrestricted License provided you have obtained such a license from
-Torus Knot Software Ltd.
------------------------------------------------------------------------------
-*/
-
-// 08/11/2009: Small adjustments for Orxonox by Fabian 'x3n' Landau
-
-#include "DynLibManager.h"
-
-#include "DynLib.h"
-
-namespace orxonox
-{
-    //-----------------------------------------------------------------------
-    //! Static pointer to the singleton
-    DynLibManager* DynLibManager::singletonPtr_s  = 0;
-
-    //-----------------------------------------------------------------------
-	DynLibManager::DynLibManager()
-	{
-	}
-	//-----------------------------------------------------------------------
-    DynLib* DynLibManager::load( const std::string& filename)
-    {
-		DynLibList::iterator i = mLibList.find(filename);
-		if (i != mLibList.end())
-		{
-			return i->second;
-		}
-		else
-		{
-	        DynLib* pLib = new DynLib(filename);
-			pLib->load();
-        	mLibList[filename] = pLib;
-	        return pLib;
-		}
-    }
-	//-----------------------------------------------------------------------
-	void DynLibManager::unload(DynLib* lib)
-	{
-		DynLibList::iterator i = mLibList.find(lib->getName());
-		if (i != mLibList.end())
-		{
-			mLibList.erase(i);
-		}
-		lib->unload();
-		delete lib;
-	}
-	//-----------------------------------------------------------------------
-    DynLibManager::~DynLibManager()
-    {
-        // Unload & delete resources in turn
-        for( DynLibList::iterator it = mLibList.begin(); it != mLibList.end(); ++it )
-        {
-            it->second->unload();
-            delete it->second;
-        }
-
-        // Empty the list
-        mLibList.clear();
-    }
-}
Index: sandbox_light/src/libraries/core/DynLibManager.h
===================================================================
--- sandbox_light/src/libraries/core/DynLibManager.h	(revision 5788)
+++ 	(revision )
@@ -1,90 +1,0 @@
-/*
------------------------------------------------------------------------------
-This source file is part of OGRE
-    (Object-oriented Graphics Rendering Engine)
-For the latest info, see http://www.ogre3d.org/
-
-Copyright (c) 2000-2006 Torus Knot Software Ltd
-Also see acknowledgements in Readme.html
-
-This program is free software; you can redistribute it and/or modify it under
-the terms of the GNU Lesser 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 Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public License along with
-this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-Place - Suite 330, Boston, MA 02111-1307, USA, or go to
-http://www.gnu.org/copyleft/lesser.txt.
-
-You may alternatively use this source under the terms of a specific version of
-the OGRE Unrestricted License provided you have obtained such a license from
-Torus Knot Software Ltd.
------------------------------------------------------------------------------
-*/
-
-// 08/11/2009: Small adjustments for Orxonox by Fabian 'x3n' Landau
-
-#ifndef _Core_DynLibManager_H__
-#define _Core_DynLibManager_H__
-
-#include "CorePrereqs.h"
-
-#include <map>
-#include <string>
-#include "util/Singleton.h"
-
-namespace orxonox
-{
-    /** Manager for Dynamic-loading Libraries.
-        @remarks
-            This manager keeps a track of all the open dynamic-loading
-            libraries, opens them and returns references to already-open
-            libraries.
-    */
-    class _CoreExport DynLibManager: public Singleton<DynLibManager>
-    {
-        friend class Singleton<DynLibManager>;
-
-        protected:
-            typedef std::map<std::string, DynLib*> DynLibList;
-            DynLibList mLibList;
-
-        public:
-            /** Default constructor.
-                @note
-                    <br>Should never be called as the singleton is automatically
-                    created during the creation of the Root object.
-                @see
-                    Root::Root
-            */
-            DynLibManager();
-
-            /** Default destructor.
-                @see
-                    Root::~Root
-            */
-            virtual ~DynLibManager();
-
-            /** Loads the passed library.
-                @param
-                    filename The name of the library. The extension can be omitted
-            */
-            DynLib* load(const std::string& filename);
-
-            /** Unloads the passed library.
-            @param
-            filename The name of the library. The extension can be omitted
-            */
-            void unload(DynLib* lib);
-
-        private:
-            static DynLibManager* singletonPtr_s;
-    };
-}
-
-#endif /* _Core_DynLibManager_H__ */
Index: sandbox_light/src/libraries/core/Executor.cc
===================================================================
--- sandbox_light/src/libraries/core/Executor.cc	(revision 5788)
+++ 	(revision )
@@ -1,252 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- *   Inspiration: Executor by Benjamin Grauer
- */
-
-#include "Executor.h"
-
-#include "util/Convert.h"
-#include "Language.h"
-
-namespace orxonox
-{
-    Executor::Executor(Functor* functor, const std::string& name)
-    {
-        this->functor_ = functor;
-        this->name_ = name;
-
-        this->bAddedDescription_ = false;
-        this->bAddedDescriptionReturnvalue_ = false;
-
-        this->bAddedDescriptionParam_[0] = false;
-        this->bAddedDescriptionParam_[1] = false;
-        this->bAddedDescriptionParam_[2] = false;
-        this->bAddedDescriptionParam_[3] = false;
-        this->bAddedDescriptionParam_[4] = false;
-
-        this->bAddedDefaultValue_[0] = false;
-        this->bAddedDefaultValue_[1] = false;
-        this->bAddedDefaultValue_[2] = false;
-        this->bAddedDefaultValue_[3] = false;
-        this->bAddedDefaultValue_[4] = false;
-    }
-
-    Executor::~Executor()
-    {
-        delete this->functor_;
-    }
-
-    bool Executor::parse(const std::string& params, const std::string& delimiter) const
-    {
-        EXECUTOR_PARSE(normal);
-    }
-
-    bool Executor::evaluate(const std::string& params, MultiType param[5], const std::string& delimiter) const
-    {
-        unsigned int paramCount = this->functor_->getParamCount();
-
-        if (paramCount == 1)
-        {
-            // only one param: check if there are params given, otherwise try to use default values
-            std::string temp = getStripped(params);
-            if ((temp != "") && (temp.size() != 0))
-            {
-                param[0] = params;
-                this->functor_->evaluateParam(0, param[0]);
-                return true;
-            }
-            else if (this->bAddedDefaultValue_[0])
-            {
-                param[0] = this->defaultValue_[0];
-                this->functor_->evaluateParam(0, param[0]);
-                return true;
-            }
-            return false;
-        }
-        else
-        {
-            // more than one param
-            SubString tokens(params, delimiter, SubString::WhiteSpaces, false, '\\', true, '"', true, '(', ')', true, '\0');
-
-            // if there are not enough params given, check if there are default values
-            for (unsigned int i = tokens.size(); i < this->functor_->getParamCount(); i++)
-                if (!this->bAddedDefaultValue_[i])
-                    return false;
-
-            // assign all given arguments to the multitypes
-            for (unsigned int i = 0; i < std::min(tokens.size(), MAX_FUNCTOR_ARGUMENTS); i++)
-                param[i] = tokens[i];
-
-            // fill the remaining multitypes with default values
-            for (unsigned int i = tokens.size(); i < std::min(paramCount, MAX_FUNCTOR_ARGUMENTS); i++)
-                param[i] = this->defaultValue_[i];
-
-            // evaluate the param types through the functor
-            for (unsigned int i = 0; i < std::min(paramCount, MAX_FUNCTOR_ARGUMENTS); i++)
-                this->functor_->evaluateParam(i, param[i]);
-
-            return true;
-        }
-    }
-
-    Executor& Executor::setDescription(const std::string& description)
-    {
-        if (!this->bAddedDescription_)
-        {
-            this->description_ = std::string("ExecutorDescription::" + this->name_ + "::function");
-            AddLanguageEntry(this->description_, description);
-            this->bAddedDescription_ = true;
-        }
-        return (*this);
-    }
-
-    const std::string& Executor::getDescription() const
-    {
-        return GetLocalisation(this->description_);
-    }
-
-    Executor& Executor::setDescriptionParam(unsigned int param, const std::string& description)
-    {
-        if (param < MAX_FUNCTOR_ARGUMENTS)
-        {
-            if (!this->bAddedDescriptionParam_[param])
-            {
-                std::string paramnumber;
-                if (!convertValue(&paramnumber, param))
-                    return (*this);
-
-                this->descriptionParam_[param] = std::string("ExecutorDescription::" + this->name_ + "::param" + paramnumber);
-                AddLanguageEntry(this->descriptionParam_[param], description);
-                this->bAddedDescriptionParam_[param] = true;
-            }
-        }
-        return (*this);
-    }
-
-    const std::string& Executor::getDescriptionParam(unsigned int param) const
-    {
-        if (param < MAX_FUNCTOR_ARGUMENTS)
-            return GetLocalisation(this->descriptionParam_[param]);
-
-        return this->descriptionParam_[0];
-    }
-
-    Executor& Executor::setDescriptionReturnvalue(const std::string& description)
-    {
-        if (!this->bAddedDescriptionReturnvalue_)
-        {
-            this->descriptionReturnvalue_ = std::string("ExecutorDescription::" + this->name_ + "::returnvalue");
-            AddLanguageEntry(this->descriptionReturnvalue_, description);
-            this->bAddedDescriptionReturnvalue_ = true;
-        }
-        return (*this);
-    }
-
-    const std::string& Executor::getDescriptionReturnvalue(int param) const
-    {
-        return GetLocalisation(this->descriptionReturnvalue_);
-    }
-
-    Executor& Executor::setDefaultValues(const MultiType& param1)
-    {
-        this->defaultValue_[0] = param1;
-        this->bAddedDefaultValue_[0] = true;
-
-        return (*this);
-    }
-
-    Executor& Executor::setDefaultValues(const MultiType& param1, const MultiType& param2)
-    {
-        this->defaultValue_[0] = param1;
-        this->bAddedDefaultValue_[0] = true;
-        this->defaultValue_[1] = param2;
-        this->bAddedDefaultValue_[1] = true;
-
-        return (*this);
-    }
-
-    Executor& Executor::setDefaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3)
-    {
-        this->defaultValue_[0] = param1;
-        this->bAddedDefaultValue_[0] = true;
-        this->defaultValue_[1] = param2;
-        this->bAddedDefaultValue_[1] = true;
-        this->defaultValue_[2] = param3;
-        this->bAddedDefaultValue_[2] = true;
-
-        return (*this);
-    }
-
-    Executor& Executor::setDefaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4)
-    {
-        this->defaultValue_[0] = param1;
-        this->bAddedDefaultValue_[0] = true;
-        this->defaultValue_[1] = param2;
-        this->bAddedDefaultValue_[1] = true;
-        this->defaultValue_[2] = param3;
-        this->bAddedDefaultValue_[2] = true;
-        this->defaultValue_[3] = param4;
-        this->bAddedDefaultValue_[3] = true;
-
-        return (*this);
-    }
-
-    Executor& Executor::setDefaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType& param5)
-    {
-        this->defaultValue_[0] = param1;
-        this->bAddedDefaultValue_[0] = true;
-        this->defaultValue_[1] = param2;
-        this->bAddedDefaultValue_[1] = true;
-        this->defaultValue_[2] = param3;
-        this->bAddedDefaultValue_[2] = true;
-        this->defaultValue_[3] = param4;
-        this->bAddedDefaultValue_[3] = true;
-        this->defaultValue_[4] = param5;
-        this->bAddedDefaultValue_[4] = true;
-
-        return (*this);
-    }
-
-    Executor& Executor::setDefaultValue(unsigned int index, const MultiType& param)
-    {
-        if (index < MAX_FUNCTOR_ARGUMENTS)
-        {
-            this->defaultValue_[index] = param;
-            this->bAddedDefaultValue_[index] = true;
-        }
-        return (*this);
-    }
-
-    bool Executor::allDefaultValuesSet() const
-    {
-        for (unsigned int i = 0; i < this->functor_->getParamCount(); i++)
-            if (!this->bAddedDefaultValue_[i])
-                return false;
-
-        return true;
-    }
-}
Index: sandbox_light/src/libraries/core/Executor.h
===================================================================
--- sandbox_light/src/libraries/core/Executor.h	(revision 5788)
+++ 	(revision )
@@ -1,312 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- *   Inspiration: Executor by Benjamin Grauer
- */
-
-#ifndef _Executor_H__
-#define _Executor_H__
-
-#include "CorePrereqs.h"
-
-#include <algorithm>
-#include <string>
-
-#include "util/Debug.h"
-#include "util/Math.h"
-#include "util/StringUtils.h"
-#include "util/SubString.h"
-#include "Functor.h"
-
-
-#define EXECUTOR_PARSE_FUNCTORCALL(mode) EXECUTOR_PARSE_FUNCTORCALL##mode
-#define EXECUTOR_PARSE_FUNCTORCALLnormal (*this->functor_)
-#define EXECUTOR_PARSE_FUNCTORCALLobject (*((FunctorMember<T>*)this->functor_))
-
-#define EXECUTOR_PARSE_OBJECT(mode, comma) EXECUTOR_PARSE_OBJECT##mode##comma
-#define EXECUTOR_PARSE_OBJECTnormal0
-#define EXECUTOR_PARSE_OBJECTnormal1
-#define EXECUTOR_PARSE_OBJECTobject0 object
-#define EXECUTOR_PARSE_OBJECTobject1 object,
-
-#define EXECUTOR_PARSE(mode) \
-    unsigned int paramCount = this->functor_->getParamCount(); \
-    \
-    if (paramCount == 0) \
-    { \
-        COUT(5) << "Calling Executor " << this->name_ << " through parser without parameters." << std::endl; \
-        EXECUTOR_PARSE_FUNCTORCALL(mode)(EXECUTOR_PARSE_OBJECT(mode, 0)); \
-    } \
-    else if (paramCount == 1) \
-    { \
-        std::string temp = getStripped(params); \
-        if ((temp != "") && (temp.size() != 0)) \
-        { \
-            COUT(5) << "Calling Executor " << this->name_ << " through parser with one parameter, using whole string: " << params << std::endl; \
-            EXECUTOR_PARSE_FUNCTORCALL(mode)(EXECUTOR_PARSE_OBJECT(mode, 1) MultiType(params)); \
-        } \
-        else if (this->bAddedDefaultValue_[0]) \
-        { \
-            COUT(5) << "Calling Executor " << this->name_ << " through parser with one parameter, using default value: " << this->defaultValue_[0] << std::endl; \
-            EXECUTOR_PARSE_FUNCTORCALL(mode)(EXECUTOR_PARSE_OBJECT(mode, 1) this->defaultValue_[0]); \
-        } \
-        else \
-        { \
-            COUT(2) << "Warning: Can't call executor " << this->name_ << " through parser: Not enough parameters or default values given (input: " << temp << ")." << std::endl; \
-            return false; \
-        } \
-    } \
-    else \
-    { \
-        SubString tokens(params, delimiter, SubString::WhiteSpaces, false, '\\', true, '"', true, '(', ')', true, '\0'); \
-        \
-        for (unsigned int i = tokens.size(); i < this->functor_->getParamCount(); i++) \
-        { \
-            if (!this->bAddedDefaultValue_[i]) \
-            { \
-                COUT(2) << "Warning: Can't call executor " << this->name_ << " through parser: Not enough parameters or default values given (input:" << params << ")." << std::endl; \
-                return false; \
-            } \
-        } \
-        \
-        MultiType param[MAX_FUNCTOR_ARGUMENTS]; \
-        COUT(5) << "Calling Executor " << this->name_ << " through parser with " << paramCount << " parameters, using " << tokens.size() << " tokens ("; \
-        for (unsigned int i = 0; i < tokens.size() && i < MAX_FUNCTOR_ARGUMENTS; i++) \
-        { \
-            param[i] = tokens[i]; \
-            if (i != 0) \
-            { \
-                COUT(5) << ", "; \
-            } \
-            COUT(5) << tokens[i]; \
-        } \
-        COUT(5) << ") and " << std::max(static_cast<int>(paramCount) - static_cast<int>(tokens.size()), 0) << " default values ("; \
-        for (unsigned int i = tokens.size(); i < paramCount; i++) \
-        { \
-            param[i] = this->defaultValue_[i]; \
-            if (i != 0) \
-            { \
-                COUT(5) << ", "; \
-            } \
-            COUT(5) << this->defaultValue_[i]; \
-        } \
-        COUT(5) << ")." << std::endl; \
-        \
-        if ((tokens.size() > paramCount) && (this->functor_->getTypenameParam(paramCount - 1) == "string")) \
-            param[paramCount - 1] = tokens.subSet(paramCount - 1).join(); \
-        \
-        switch(paramCount) \
-        { \
-            case 2: \
-                EXECUTOR_PARSE_FUNCTORCALL(mode)(EXECUTOR_PARSE_OBJECT(mode, 1) param[0], param[1]); \
-                break; \
-            case 3: \
-                EXECUTOR_PARSE_FUNCTORCALL(mode)(EXECUTOR_PARSE_OBJECT(mode, 1) param[0], param[1], param[2]); \
-                break; \
-            case 4: \
-                EXECUTOR_PARSE_FUNCTORCALL(mode)(EXECUTOR_PARSE_OBJECT(mode, 1) param[0], param[1], param[2], param[3]); \
-                break; \
-            case 5: \
-                EXECUTOR_PARSE_FUNCTORCALL(mode)(EXECUTOR_PARSE_OBJECT(mode, 1) param[0], param[1], param[2], param[3], param[4]); \
-                break; \
-        } \
-    } \
-    \
-    return true
-
-namespace orxonox
-{
-    class _CoreExport Executor
-    {
-        public:
-            Executor(Functor* functor, const std::string& name = "");
-            virtual ~Executor();
-
-            inline void operator()() const
-                { (*this->functor_)(this->defaultValue_[0], this->defaultValue_[1], this->defaultValue_[2], this->defaultValue_[3], this->defaultValue_[4]); }
-            inline void operator()(const MultiType& param1) const
-                { (*this->functor_)(param1, this->defaultValue_[1], this->defaultValue_[2], this->defaultValue_[3], this->defaultValue_[4]); }
-            inline void operator()(const MultiType& param1, const MultiType& param2) const
-                { (*this->functor_)(param1, param2, this->defaultValue_[2], this->defaultValue_[3], this->defaultValue_[4]); }
-            inline void operator()(const MultiType& param1, const MultiType& param2, const MultiType& param3) const
-                { (*this->functor_)(param1, param2, param3, this->defaultValue_[3], this->defaultValue_[4]); }
-            inline void operator()(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4) const
-                { (*this->functor_)(param1, param2, param3, param4, this->defaultValue_[4]); }
-            inline void operator()(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType& param5) const
-                { (*this->functor_)(param1, param2, param3, param4, param5); }
-
-            bool parse(const std::string& params, const std::string& delimiter = " ") const;
-
-            bool evaluate(const std::string& params, MultiType param[5], const std::string& delimiter = " ") const;
-
-            Executor& setDescription(const std::string& description);
-            const std::string& getDescription() const;
-
-            Executor& setDescriptionParam(unsigned int param, const std::string& description);
-            const std::string& getDescriptionParam(unsigned int param) const;
-
-            Executor& setDescriptionReturnvalue(const std::string& description);
-            const std::string& getDescriptionReturnvalue(int param) const;
-
-            inline Functor* getFunctor() const
-                { return this->functor_; }
-            inline unsigned int getParamCount() const
-                { return this->functor_->getParamCount(); }
-            inline bool hasReturnvalue() const
-                { return this->functor_->hasReturnvalue(); }
-            inline FunctionType::Value getType() const
-                { return this->functor_->getType(); }
-            inline const MultiType& getReturnvalue() const
-                { return this->functor_->getReturnvalue(); }
-            inline const std::string& getTypenameParam(unsigned int param) const
-                { return this->functor_->getTypenameParam(param); }
-            inline const std::string& getTypenameReturnvalue() const
-                { return this->functor_->getTypenameReturnvalue(); }
-
-            inline void setName(const std::string name)
-                { this->name_ = name; }
-            inline const std::string& getName() const
-                { return this->name_; }
-
-            Executor& setDefaultValues(const MultiType& param1);
-            Executor& setDefaultValues(const MultiType& param1, const MultiType& param2);
-            Executor& setDefaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3);
-            Executor& setDefaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4);
-            Executor& setDefaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType& param5);
-            Executor& setDefaultValue(unsigned int index, const MultiType& param);
-
-            inline MultiType getDefaultValue(unsigned int index) const
-            {
-                if (index < MAX_FUNCTOR_ARGUMENTS)
-                    return this->defaultValue_[index];
-
-                return MT_Type::Null;
-            }
-
-            bool allDefaultValuesSet() const;
-            inline bool defaultValueSet(unsigned int index) const
-            {
-                if (index < MAX_FUNCTOR_ARGUMENTS)
-                    return this->bAddedDefaultValue_[index];
-
-                return false;
-            }
-
-        protected:
-            Functor* functor_;
-            std::string name_;
-            MultiType defaultValue_[MAX_FUNCTOR_ARGUMENTS];
-            bool bAddedDefaultValue_[MAX_FUNCTOR_ARGUMENTS];
-
-        private:
-            LanguageEntryLabel description_;
-            LanguageEntryLabel descriptionReturnvalue_;
-            LanguageEntryLabel descriptionParam_[MAX_FUNCTOR_ARGUMENTS];
-
-            bool bAddedDescription_;
-            bool bAddedDescriptionReturnvalue_;
-            bool bAddedDescriptionParam_[MAX_FUNCTOR_ARGUMENTS];
-    };
-
-    class _CoreExport ExecutorStatic : public Executor
-    {
-        public:
-            ExecutorStatic(FunctorStatic* functor, const std::string& name = "") : Executor(functor, name) {}
-            virtual ~ExecutorStatic() {}
-    };
-
-    template <class T>
-    class ExecutorMember : public Executor
-    {
-        public:
-            ExecutorMember(FunctorMember<T>* functor, const std::string& name = "") : Executor(functor, name) {}
-            virtual ~ExecutorMember() {}
-
-            using Executor::operator();
-
-            inline void operator()(T* object) const
-                { (*((FunctorMember<T>*)this->functor_))(object, this->defaultValue_[0], this->defaultValue_[1], this->defaultValue_[2], this->defaultValue_[3], this->defaultValue_[4]); }
-            inline void operator()(T* object, const MultiType& param1) const
-                { (*((FunctorMember<T>*)this->functor_))(object, param1, this->defaultValue_[1], this->defaultValue_[2], this->defaultValue_[3], this->defaultValue_[4]); }
-            inline void operator()(T* object, const MultiType& param1, const MultiType& param2) const
-                { (*((FunctorMember<T>*)this->functor_))(object, param1, param2, this->defaultValue_[2], this->defaultValue_[3], this->defaultValue_[4]); }
-            inline void operator()(T* object, const MultiType& param1, const MultiType& param2, const MultiType& param3) const
-                { (*((FunctorMember<T>*)this->functor_))(object, param1, param2, param3, this->defaultValue_[3], this->defaultValue_[4]); }
-            inline void operator()(T* object, const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4) const
-                { (*((FunctorMember<T>*)this->functor_))(object, param1, param2, param3, param4, this->defaultValue_[4]); }
-            inline void operator()(T* object, const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType& param5) const
-                { (*((FunctorMember<T>*)this->functor_))(object, param1, param2, param3, param4, param5); }
-
-
-            inline void operator()(const T* object) const
-                { (*((FunctorMember<T>*)this->functor_))(object, this->defaultValue_[0], this->defaultValue_[1], this->defaultValue_[2], this->defaultValue_[3], this->defaultValue_[4]); }
-            inline void operator()(const T* object, const MultiType& param1) const
-                { (*((FunctorMember<T>*)this->functor_))(object, param1, this->defaultValue_[1], this->defaultValue_[2], this->defaultValue_[3], this->defaultValue_[4]); }
-            inline void operator()(const T* object, const MultiType& param1, const MultiType& param2) const
-                { (*((FunctorMember<T>*)this->functor_))(object, param1, param2, this->defaultValue_[2], this->defaultValue_[3], this->defaultValue_[4]); }
-            inline void operator()(const T* object, const MultiType& param1, const MultiType& param2, const MultiType& param3) const
-                { (*((FunctorMember<T>*)this->functor_))(object, param1, param2, param3, this->defaultValue_[3], this->defaultValue_[4]); }
-            inline void operator()(const T* object, const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4) const
-                { (*((FunctorMember<T>*)this->functor_))(object, param1, param2, param3, param4, this->defaultValue_[4]); }
-            inline void operator()(const T* object, const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType& param5) const
-                { (*((FunctorMember<T>*)this->functor_))(object, param1, param2, param3, param4, param5); }
-
-            inline void setObject(T* object) const
-                { ((FunctorMember<T>*)this->functor_)->setObject(object); }
-            inline void setObject(const T* object) const
-                { ((FunctorMember<T>*)this->functor_)->setObject(object); }
-
-            using Executor::parse;
-
-            bool parse(T* object, const std::string& params, const std::string& delimiter = " ") const
-            {
-                EXECUTOR_PARSE(object);
-            }
-
-            bool parse(const T* object, const std::string& params, const std::string& delimiter = " ") const
-            {
-                EXECUTOR_PARSE(object);
-            }
-    };
-
-    inline Executor* createExecutor(Functor* functor, const std::string& name = "")
-    {
-        return new Executor(functor, name);
-    }
-
-    template <class T>
-    inline ExecutorMember<T>* createExecutor(FunctorMember<T>* functor, const std::string& name = "")
-    {
-        return new ExecutorMember<T>(functor, name);
-    }
-
-    inline ExecutorStatic* createExecutor(FunctorStatic* functor, const std::string& name = "")
-    {
-        return new ExecutorStatic(functor, name);
-    }
-}
-
-#endif /* _Executor_H__ */
Index: sandbox_light/src/libraries/core/Factory.cc
===================================================================
--- sandbox_light/src/libraries/core/Factory.cc	(revision 5788)
+++ 	(revision )
@@ -1,94 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Implementation of the Factory class.
-*/
-
-#include "Factory.h"
-
-#include "util/Debug.h"
-#include "Identifier.h"
-#include "BaseObject.h"
-
-namespace orxonox
-{
-    /**
-        @brief Returns the Identifier with a given name.
-        @param name The name of the wanted Identifier
-        @return The Identifier
-    */
-    Identifier* Factory::getIdentifier(const std::string& name)
-    {
-        std::map<std::string, Identifier*>::const_iterator it = getFactoryPointer()->identifierStringMap_.find(name);
-        if (it != getFactoryPointer()->identifierStringMap_.end())
-            return it->second;
-        else
-            return 0;
-    }
-
-    /**
-        @brief Adds a new Identifier to both maps.
-        @param name The name of the identifier
-        @param identifier The identifier to add
-    */
-    void Factory::add(const std::string& name, Identifier* identifier)
-    {
-        getFactoryPointer()->identifierStringMap_[name] = identifier;
-    }
-
-    /**
-        @brief Creates the class-hierarchy by creating and destroying one object of each type.
-    */
-    void Factory::createClassHierarchy()
-    {
-        COUT(3) << "*** Factory: Create class-hierarchy" << std::endl;
-        std::map<std::string, Identifier*>::iterator it;
-        it = getFactoryPointer()->identifierStringMap_.begin();
-        (*getFactoryPointer()->identifierStringMap_.begin()).second->startCreatingHierarchy();
-        for (it = getFactoryPointer()->identifierStringMap_.begin(); it != getFactoryPointer()->identifierStringMap_.end(); ++it)
-        {
-            // To create the new branch of the class-hierarchy, we create a new object and delete it afterwards.
-            BaseObject* temp = (*it).second->fabricate(0);
-            delete temp;
-        }
-        (*getFactoryPointer()->identifierStringMap_.begin()).second->stopCreatingHierarchy();
-        COUT(3) << "*** Factory: Finished class-hierarchy creation" << std::endl;
-    }
-
-    /**
-        @brief Ensures the Factory gets created in the right moment.
-        @return The Factory.
-    */
-    Factory* Factory::getFactoryPointer()
-    {
-      static Factory theOneAndOnlyFactoryInstance = Factory();
-      return &theOneAndOnlyFactoryInstance;
-    }
-}
Index: sandbox_light/src/libraries/core/Factory.h
===================================================================
--- sandbox_light/src/libraries/core/Factory.h	(revision 5788)
+++ 	(revision )
@@ -1,98 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Definition of the Factory and the BaseFactory class.
-
-    The Factory is a singleton, containing two maps to map either the name or the network ID
-    of a class with the corresponding Identifier.
-
-    Usage:
-    ID(classname) or ID(networkID) returns the corresponding Identifier.
-
-
-    BaseObject is the parent of ClassFactory which is defined in ClassFactory.h.
-    It can't be defined in ClassFactory.h, because of circular dependencies.
-*/
-
-#ifndef _Factory_H__
-#define _Factory_H__
-
-#include "CorePrereqs.h"
-
-#include <map>
-#include <string>
-
-namespace orxonox
-{
-    // ###############################
-    // ###         Factory         ###
-    // ###############################
-    //! The Factory is used to map the name or the network ID of a class with its Identifier.
-    class _CoreExport Factory
-    {
-        public:
-            static Identifier* getIdentifier(const std::string& name);
-            static Identifier* getIdentifier(const uint32_t id);
-            static void add(const std::string& name, Identifier* identifier);
-            static void createClassHierarchy();
-
-            static Factory* getFactoryPointer();    // avoid overriding order problem in the static intialisation process
-
-            /** @brief Returns the factory-map. */
-            static const std::map<std::string, Identifier*>& getFacbtoryMap()
-                { return Factory::getFactoryPointer()->identifierStringMap_; }
-            /** @brief Returns the begin-iterator of the factory-map. */
-            static std::map<std::string, Identifier*>::const_iterator getFactoryMapBegin()
-                { return Factory::getFactoryPointer()->identifierStringMap_.begin(); }
-            /** @brief Returns the end-iterator of the factory-map. */
-            static std::map<std::string, Identifier*>::const_iterator getFactoryMapEnd()
-                { return Factory::getFactoryPointer()->identifierStringMap_.end(); }
-
-        private:
-            Factory() {}                            // don't create
-            Factory(const Factory& factory);        // don't copy
-            ~Factory() {}                           // don't delete
-
-            std::map<std::string, Identifier*> identifierStringMap_;            //!< The map, mapping the name with the Identifier
-    };
-
-    // ###############################
-    // ###       BaseFactory       ###
-    // ###############################
-    //! Base-class of ClassFactory. Has to be defined separate because of circular dependencies.
-    class _CoreExport BaseFactory
-    {
-        public:
-            virtual BaseObject* fabricate(BaseObject* creator) = 0;
-            virtual ~BaseFactory() {};
-    };
-}
-
-#endif /* _Factory_H__ */
Index: sandbox_light/src/libraries/core/Functor.h
===================================================================
--- sandbox_light/src/libraries/core/Functor.h	(revision 5788)
+++ 	(revision )
@@ -1,483 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- *   Inspiration: Functor by Benjamin Grauer
- */
-
-#ifndef _Functor_H__
-#define _Functor_H__
-
-#include "CorePrereqs.h"
-
-#include "util/Debug.h"
-#include "util/MultiType.h"
-#include "util/StringUtils.h"
-
-namespace orxonox
-{
-    const unsigned int MAX_FUNCTOR_ARGUMENTS = 5;
-
-    namespace FunctionType
-    {
-        enum Value
-        {
-            Member,
-            ConstMember,
-            Static
-        };
-    }
-
-
-    template <class T>
-    inline std::string typeToString() { return "unknown"; }
-
-#define CreateTypeToStringTemplate(type) \
-    template <> \
-    inline std::string typeToString<type>() { return #type; } \
-    template <> \
-    inline std::string typeToString<type&>() { return #type; } \
-    template <> \
-    inline std::string typeToString<const type>() { return #type; } \
-    template <> \
-    inline std::string typeToString<const type&>() { return #type; }
-
-    CreateTypeToStringTemplate(int);
-    CreateTypeToStringTemplate(unsigned int);
-    CreateTypeToStringTemplate(char);
-    CreateTypeToStringTemplate(unsigned char);
-    CreateTypeToStringTemplate(short);
-    CreateTypeToStringTemplate(unsigned short);
-    CreateTypeToStringTemplate(long);
-    CreateTypeToStringTemplate(unsigned long);
-    CreateTypeToStringTemplate(long long);
-    CreateTypeToStringTemplate(unsigned long long);
-    CreateTypeToStringTemplate(float);
-    CreateTypeToStringTemplate(double);
-    CreateTypeToStringTemplate(long double);
-    CreateTypeToStringTemplate(bool);
-    CreateTypeToStringTemplate(Vector2);
-    CreateTypeToStringTemplate(Vector3);
-    CreateTypeToStringTemplate(Quaternion);
-    CreateTypeToStringTemplate(ColourValue);
-    CreateTypeToStringTemplate(Radian);
-    CreateTypeToStringTemplate(Degree);
-
-    template <>
-    inline std::string typeToString<std::string>() { return "string"; }
-    template <>
-    inline std::string typeToString<std::string&>() { return "string"; }
-    template <>
-    inline std::string typeToString<const std::string>() { return "string"; }
-    template <>
-    inline std::string typeToString<const std::string&>() { return "string"; }
-
-    class _CoreExport Functor
-    {
-        public:
-            Functor() {}
-            virtual ~Functor() {}
-
-            virtual void operator()(const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null) = 0;
-
-            inline unsigned int getParamCount() const { return this->numParams_; }
-            inline bool hasReturnvalue() const { return this->hasReturnValue_; }
-            inline FunctionType::Value getType() const { return this->type_; }
-            inline const MultiType& getReturnvalue() const { return this->returnedValue_; }
-
-            const std::string& getTypenameParam(unsigned int param) const { return (param < 5) ? this->typeParam_[param] : BLANKSTRING; }
-            const std::string& getTypenameReturnvalue() const { return this->typeReturnvalue_; }
-
-            virtual void evaluateParam(unsigned int index, MultiType& param) const = 0;
-
-        protected:
-            unsigned int numParams_;
-            bool hasReturnValue_;
-            FunctionType::Value type_;
-            MultiType returnedValue_;
-
-            std::string typeReturnvalue_;
-            std::string typeParam_[MAX_FUNCTOR_ARGUMENTS];
-    };
-
-    class _CoreExport FunctorStatic : public Functor
-    {
-        public:
-            virtual ~FunctorStatic() {}
-            virtual void operator()(const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null) = 0;
-    };
-
-    template <class T>
-    class FunctorMember : public Functor
-    {
-        public:
-            FunctorMember()
-            {
-                constObject_ = 0;
-                object_ = 0;
-                bConstObject_ = false;
-            }
-            virtual ~FunctorMember() {}
-
-            virtual void operator()(T* object, const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null) = 0;
-            virtual void operator()(const T* object, const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null) = 0;
-
-            virtual void operator()(const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null)
-            {
-                if (this->bConstObject_)
-                {
-                    if (this->constObject_)
-                        (*this)(this->constObject_, param1, param2, param3, param4, param5);
-                    else
-                    {
-                        COUT(1) << "An error occurred in Functor.h:" << std::endl;
-                        COUT(1) << "Error: No const object set." << std::endl;
-                    }
-                }
-                else
-                {
-                    if (this->object_)
-                        (*this)(this->object_, param1, param2, param3, param4, param5);
-                    else
-                    {
-                        COUT(1) << "An error occurred in Functor.h:" << std::endl;
-                        COUT(1) << "Error: No object set." << std::endl;
-                    }
-                }
-            }
-
-            FunctorMember<T>* setObject(T* object)
-            {
-                this->bConstObject_ = false;
-                this->object_ = object;
-                return this;
-            }
-
-            FunctorMember<T>* setObject(const T* object)
-            {
-                this->bConstObject_ = true;
-                this->constObject_ = object;
-                return this;
-            }
-
-        private:
-            const T* constObject_;
-            T* object_;
-            bool bConstObject_;
-    };
-
-
-
-#define FUNCTOR_TEMPLATE(ismember, returnvalue, numparams) FUNCTOR_TEMPLATE##ismember##returnvalue##numparams
-#define FUNCTOR_TEMPLATE000
-#define FUNCTOR_TEMPLATE001 template <class P1>
-#define FUNCTOR_TEMPLATE002 template <class P1, class P2>
-#define FUNCTOR_TEMPLATE003 template <class P1, class P2, class P3>
-#define FUNCTOR_TEMPLATE004 template <class P1, class P2, class P3, class P4>
-#define FUNCTOR_TEMPLATE005 template <class P1, class P2, class P3, class P4, class P5>
-#define FUNCTOR_TEMPLATE010 template <class R>
-#define FUNCTOR_TEMPLATE011 template <class R, class P1>
-#define FUNCTOR_TEMPLATE012 template <class R, class P1, class P2>
-#define FUNCTOR_TEMPLATE013 template <class R, class P1, class P2, class P3>
-#define FUNCTOR_TEMPLATE014 template <class R, class P1, class P2, class P3, class P4>
-#define FUNCTOR_TEMPLATE015 template <class R, class P1, class P2, class P3, class P4, class P5>
-#define FUNCTOR_TEMPLATE100 template <class T>
-#define FUNCTOR_TEMPLATE101 template <class T, class P1>
-#define FUNCTOR_TEMPLATE102 template <class T, class P1, class P2>
-#define FUNCTOR_TEMPLATE103 template <class T, class P1, class P2, class P3>
-#define FUNCTOR_TEMPLATE104 template <class T, class P1, class P2, class P3, class P4>
-#define FUNCTOR_TEMPLATE105 template <class T, class P1, class P2, class P3, class P4, class P5>
-#define FUNCTOR_TEMPLATE110 template <class T, class R>
-#define FUNCTOR_TEMPLATE111 template <class T, class R, class P1>
-#define FUNCTOR_TEMPLATE112 template <class T, class R, class P1, class P2>
-#define FUNCTOR_TEMPLATE113 template <class T, class R, class P1, class P2, class P3>
-#define FUNCTOR_TEMPLATE114 template <class T, class R, class P1, class P2, class P3, class P4>
-#define FUNCTOR_TEMPLATE115 template <class T, class R, class P1, class P2, class P3, class P4, class P5>
-
-
-
-#define FUNCTOR_TEMPLATE_CLASSES(ismember, returnvalue, numparams) FUNCTOR_TEMPLATE_CLASSES##ismember##returnvalue##numparams
-#define FUNCTOR_TEMPLATE_CLASSES000
-#define FUNCTOR_TEMPLATE_CLASSES001 <P1>
-#define FUNCTOR_TEMPLATE_CLASSES002 <P1, P2>
-#define FUNCTOR_TEMPLATE_CLASSES003 <P1, P2, P3>
-#define FUNCTOR_TEMPLATE_CLASSES004 <P1, P2, P3, P4>
-#define FUNCTOR_TEMPLATE_CLASSES005 <P1, P2, P3, P4, P5>
-#define FUNCTOR_TEMPLATE_CLASSES010 <R>
-#define FUNCTOR_TEMPLATE_CLASSES011 <R, P1>
-#define FUNCTOR_TEMPLATE_CLASSES012 <R, P1, P2>
-#define FUNCTOR_TEMPLATE_CLASSES013 <R, P1, P2, P3>
-#define FUNCTOR_TEMPLATE_CLASSES014 <R, P1, P2, P3, P4>
-#define FUNCTOR_TEMPLATE_CLASSES015 <R, P1, P2, P3, P4, P5>
-#define FUNCTOR_TEMPLATE_CLASSES100 <T>
-#define FUNCTOR_TEMPLATE_CLASSES101 <T, P1>
-#define FUNCTOR_TEMPLATE_CLASSES102 <T, P1, P2>
-#define FUNCTOR_TEMPLATE_CLASSES103 <T, P1, P2, P3>
-#define FUNCTOR_TEMPLATE_CLASSES104 <T, P1, P2, P3, P4>
-#define FUNCTOR_TEMPLATE_CLASSES105 <T, P1, P2, P3, P4, P5>
-#define FUNCTOR_TEMPLATE_CLASSES110 <T, R>
-#define FUNCTOR_TEMPLATE_CLASSES111 <T, R, P1>
-#define FUNCTOR_TEMPLATE_CLASSES112 <T, R, P1, P2>
-#define FUNCTOR_TEMPLATE_CLASSES113 <T, R, P1, P2, P3>
-#define FUNCTOR_TEMPLATE_CLASSES114 <T, R, P1, P2, P3, P4>
-#define FUNCTOR_TEMPLATE_CLASSES115 <T, R, P1, P2, P3, P4, P5>
-
-
-
-#define FUNCTOR_TYPENAME_PARAMS(numparams) FUNCTOR_TYPENAME_PARAMS##numparams
-#define FUNCTOR_TYPENAME_PARAMS0
-#define FUNCTOR_TYPENAME_PARAMS1 this->typeParam_[0] = typeToString<P1>();
-#define FUNCTOR_TYPENAME_PARAMS2 this->typeParam_[0] = typeToString<P1>(); this->typeParam_[1] = typeToString<P2>();
-#define FUNCTOR_TYPENAME_PARAMS3 this->typeParam_[0] = typeToString<P1>(); this->typeParam_[1] = typeToString<P2>(); this->typeParam_[2] = typeToString<P3>();
-#define FUNCTOR_TYPENAME_PARAMS4 this->typeParam_[0] = typeToString<P1>(); this->typeParam_[1] = typeToString<P2>(); this->typeParam_[2] = typeToString<P3>(); this->typeParam_[3] = typeToString<P4>();
-#define FUNCTOR_TYPENAME_PARAMS5 this->typeParam_[0] = typeToString<P1>(); this->typeParam_[1] = typeToString<P2>(); this->typeParam_[2] = typeToString<P3>(); this->typeParam_[3] = typeToString<P4>(); this->typeParam_[4] = typeToString<P5>();
-
-#define FUNCTOR_TYPENAME_RETURN(returnvalue) FUNCTOR_TYPENAME_RETURN##returnvalue
-#define FUNCTOR_TYPENAME_RETURN0
-#define FUNCTOR_TYPENAME_RETURN1 this->typeReturnvalue_ = typeToString<R>();
-
-
-
-#define FUNCTOR_FUNCTION_PARAMS(numparams) FUNCTOR_FUNCTION_PARAMS##numparams
-#define FUNCTOR_FUNCTION_PARAMS0
-#define FUNCTOR_FUNCTION_PARAMS1 P1 param1
-#define FUNCTOR_FUNCTION_PARAMS2 P1 param1, P2 param2
-#define FUNCTOR_FUNCTION_PARAMS3 P1 param1, P2 param2, P3 param3
-#define FUNCTOR_FUNCTION_PARAMS4 P1 param1, P2 param2, P3 param3, P4 param4
-#define FUNCTOR_FUNCTION_PARAMS5 P1 param1, P2 param2, P3 param3, P4 param4, P5 param5
-
-#define FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) FUNCTOR_FUNCTION_RETURNVALUE##returnvalue
-#define FUNCTOR_FUNCTION_RETURNVALUE0 void
-#define FUNCTOR_FUNCTION_RETURNVALUE1 R
-
-
-
-#define FUNCTOR_FUNCTION_CALL(numparams) FUNCTOR_FUNCTION_CALL##numparams
-#define FUNCTOR_FUNCTION_CALL0
-#define FUNCTOR_FUNCTION_CALL1 param1
-#define FUNCTOR_FUNCTION_CALL2 param1, param2
-#define FUNCTOR_FUNCTION_CALL3 param1, param2, param3
-#define FUNCTOR_FUNCTION_CALL4 param1, param2, param3, param4
-#define FUNCTOR_FUNCTION_CALL5 param1, param2, param3, param4, param5
-
-#define FUNCTOR_STORE_RETURNVALUE(returnvalue, functioncall) FUNCTOR_STORE_RETURNVALUE##returnvalue(functioncall)
-#define FUNCTOR_STORE_RETURNVALUE0(functioncall) functioncall
-#define FUNCTOR_STORE_RETURNVALUE1(functioncall) this->returnedValue_ = functioncall
-
-
-
-#define FUNCTOR_EVALUATE_PARAM(numparams) FUNCTOR_EVALUATE_PARAM##numparams
-#define FUNCTOR_EVALUATE_PARAM0
-#define FUNCTOR_EVALUATE_PARAM1 \
-    if (index == 0) { param.convert<P1>(); }
-#define FUNCTOR_EVALUATE_PARAM2 \
-    if (index == 0) { param.convert<P1>(); } \
-    else if (index == 1) { param.convert<P2>(); }
-#define FUNCTOR_EVALUATE_PARAM3 \
-    if (index == 0) { param.convert<P1>(); } \
-    else if (index == 1) { param.convert<P2>(); } \
-    else if (index == 2) { param.convert<P3>(); }
-#define FUNCTOR_EVALUATE_PARAM4 \
-    if (index == 0) { param.convert<P1>(); } \
-    else if (index == 1) { param.convert<P2>(); } \
-    else if (index == 2) { param.convert<P3>(); } \
-    else if (index == 3) { param.convert<P4>(); }
-#define FUNCTOR_EVALUATE_PARAM5 \
-    if (index == 0) { param.convert<P1>(); } \
-    else if (index == 1) { param.convert<P2>(); } \
-    else if (index == 2) { param.convert<P3>(); } \
-    else if (index == 3) { param.convert<P4>(); } \
-    else if (index == 4) { param.convert<P5>(); }
-
-
-
-
-
-#define CREATE_STATIC_FUNCTOR(returnvalue, numparams) \
-    FUNCTOR_TEMPLATE(0, returnvalue, numparams) \
-    class FunctorStatic##returnvalue##numparams : public FunctorStatic \
-    { \
-        public: \
-            FunctorStatic##returnvalue##numparams(FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (*functionPointer)(FUNCTOR_FUNCTION_PARAMS(numparams))) \
-            { \
-                this->numParams_ = numparams; \
-                this->hasReturnValue_ = returnvalue; \
-                this->type_ = FunctionType::Static; \
-                this->functionPointer_ = functionPointer; \
-                \
-                FUNCTOR_TYPENAME_PARAMS(numparams); \
-                FUNCTOR_TYPENAME_RETURN(returnvalue); \
-            } \
-    \
-            void operator()(const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null) \
-            { \
-                FUNCTOR_STORE_RETURNVALUE(returnvalue, (*this->functionPointer_)(FUNCTOR_FUNCTION_CALL(numparams))); \
-            } \
-    \
-            virtual void evaluateParam(unsigned int index, MultiType& param) const \
-            { \
-                FUNCTOR_EVALUATE_PARAM(numparams); \
-            } \
-    \
-        private: \
-            FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (*functionPointer_)(FUNCTOR_FUNCTION_PARAMS(numparams)); \
-    }; \
-    \
-    \
-    FUNCTOR_TEMPLATE(0, returnvalue, numparams) \
-    inline FunctorStatic##returnvalue##numparams FUNCTOR_TEMPLATE_CLASSES(0, returnvalue, numparams)* createFunctor(FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (*functionPointer)(FUNCTOR_FUNCTION_PARAMS(numparams))) \
-    { \
-        return new FunctorStatic##returnvalue##numparams FUNCTOR_TEMPLATE_CLASSES(0, returnvalue, numparams) (functionPointer); \
-    }
-
-
-
-
-
-#define CREATE_MEMBER_FUNCTOR(returnvalue, numparams) \
-    FUNCTOR_TEMPLATE(1, returnvalue, numparams) \
-    class FunctorMember##returnvalue##numparams : public FunctorMember<T> \
-    { \
-        public: \
-            FunctorMember##returnvalue##numparams(FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (T::*functionPointer)(FUNCTOR_FUNCTION_PARAMS(numparams))) \
-            { \
-                this->numParams_ = numparams; \
-                this->hasReturnValue_ = returnvalue; \
-                this->type_ = FunctionType::Member; \
-                this->functionPointer_ = functionPointer; \
-            } \
-    \
-            void operator()(T* object, const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null) \
-            { \
-                FUNCTOR_STORE_RETURNVALUE(returnvalue, (*object.*this->functionPointer_)(FUNCTOR_FUNCTION_CALL(numparams))); \
-            } \
-    \
-            void operator()(const T* object, const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null) \
-            { \
-                COUT(1) << "An error occurred in Functor.h:" << std::endl; \
-                COUT(1) << "Error: Function is not const." << std::endl; \
-            } \
-    \
-            virtual void evaluateParam(unsigned int index, MultiType& param) const \
-            { \
-                FUNCTOR_EVALUATE_PARAM(numparams); \
-            } \
-    \
-        private: \
-            FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (T::*functionPointer_)(FUNCTOR_FUNCTION_PARAMS(numparams)); \
-    }; \
-    \
-    \
-    FUNCTOR_TEMPLATE(1, returnvalue, numparams) \
-    class FunctorConstMember##returnvalue##numparams : public FunctorMember<T> \
-    { \
-        public: \
-            FunctorConstMember##returnvalue##numparams(FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (T::*functionPointer)(FUNCTOR_FUNCTION_PARAMS(numparams)) const) \
-            { \
-                this->numParams_ = numparams; \
-                this->hasReturnValue_ = returnvalue; \
-                this->type_ = FunctionType::ConstMember; \
-                this->functionPointer_ = functionPointer; \
-            } \
-    \
-            void operator()(T* object, const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null) \
-            { \
-                FUNCTOR_STORE_RETURNVALUE(returnvalue, (*object.*this->functionPointer_)(FUNCTOR_FUNCTION_CALL(numparams))); \
-            } \
-    \
-            void operator()(const T* object, const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null) \
-            { \
-                FUNCTOR_STORE_RETURNVALUE(returnvalue, (*object.*this->functionPointer_)(FUNCTOR_FUNCTION_CALL(numparams))); \
-            } \
-    \
-            virtual void evaluateParam(unsigned int index, MultiType& param) const \
-            { \
-                FUNCTOR_EVALUATE_PARAM(numparams); \
-            } \
-    \
-        private: \
-            FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (T::*functionPointer_)(FUNCTOR_FUNCTION_PARAMS(numparams)) const; \
-    }; \
-    \
-    \
-    FUNCTOR_TEMPLATE(1, returnvalue, numparams) \
-    inline FunctorMember##returnvalue##numparams FUNCTOR_TEMPLATE_CLASSES(1, returnvalue, numparams)* createFunctor(FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (T::*functionPointer)(FUNCTOR_FUNCTION_PARAMS(numparams))) \
-    { \
-        return new FunctorMember##returnvalue##numparams FUNCTOR_TEMPLATE_CLASSES(1, returnvalue, numparams) (functionPointer); \
-    } \
-    \
-    \
-    FUNCTOR_TEMPLATE(1, returnvalue, numparams) \
-    inline FunctorConstMember##returnvalue##numparams FUNCTOR_TEMPLATE_CLASSES(1, returnvalue, numparams)* createFunctor(FUNCTOR_FUNCTION_RETURNVALUE(returnvalue) (T::*functionPointer)(FUNCTOR_FUNCTION_PARAMS(numparams)) const) \
-    { \
-        return new FunctorConstMember##returnvalue##numparams FUNCTOR_TEMPLATE_CLASSES(1, returnvalue, numparams) (functionPointer); \
-    }
-
-
-// disable annoying warning about forcing value to boolean
-#ifdef ORXONOX_COMPILER_MSVC
-#pragma warning(push)
-#pragma warning(disable:4100 4800)
-#endif
-
-#define CREATE_ALL_STATIC_FUNCTORS() \
-    CREATE_STATIC_FUNCTOR(0, 0); \
-    CREATE_STATIC_FUNCTOR(0, 1); \
-    CREATE_STATIC_FUNCTOR(0, 2); \
-    CREATE_STATIC_FUNCTOR(0, 3); \
-    CREATE_STATIC_FUNCTOR(0, 4); \
-    CREATE_STATIC_FUNCTOR(0, 5); \
-    CREATE_STATIC_FUNCTOR(1, 0); \
-    CREATE_STATIC_FUNCTOR(1, 1); \
-    CREATE_STATIC_FUNCTOR(1, 2); \
-    CREATE_STATIC_FUNCTOR(1, 3); \
-    CREATE_STATIC_FUNCTOR(1, 4); \
-    CREATE_STATIC_FUNCTOR(1, 5)
-
-
-#define CREATE_ALL_MEMBER_FUNCTORS() \
-    CREATE_MEMBER_FUNCTOR(0, 0); \
-    CREATE_MEMBER_FUNCTOR(0, 1); \
-    CREATE_MEMBER_FUNCTOR(0, 2); \
-    CREATE_MEMBER_FUNCTOR(0, 3); \
-    CREATE_MEMBER_FUNCTOR(0, 4); \
-    CREATE_MEMBER_FUNCTOR(0, 5); \
-    CREATE_MEMBER_FUNCTOR(1, 0); \
-    CREATE_MEMBER_FUNCTOR(1, 1); \
-    CREATE_MEMBER_FUNCTOR(1, 2); \
-    CREATE_MEMBER_FUNCTOR(1, 3); \
-    CREATE_MEMBER_FUNCTOR(1, 4); \
-    CREATE_MEMBER_FUNCTOR(1, 5)
-
-
-    CREATE_ALL_STATIC_FUNCTORS();
-    CREATE_ALL_MEMBER_FUNCTORS();
-}
-
-#ifdef ORXONOX_COMPILER_MSVC
-#pragma warning(pop)
-#endif
-
-#endif /* _Functor_H__ */
Index: sandbox_light/src/libraries/core/Game.cc
===================================================================
--- sandbox_light/src/libraries/core/Game.cc	(revision 5788)
+++ 	(revision )
@@ -1,576 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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 Game class.
-*/
-
-#include "Game.h"
-
-#include <exception>
-#include <boost/weak_ptr.hpp>
-
-#include "util/Debug.h"
-#include "util/Exception.h"
-#include "util/ScopeGuard.h"
-#include "util/Sleep.h"
-#include "util/SubString.h"
-#include "Clock.h"
-#include "CommandLine.h"
-#include "Core.h"
-#include "CoreIncludes.h"
-#include "ConfigValueIncludes.h"
-#include "GameState.h"
-
-namespace orxonox
-{
-    std::map<std::string, GameStateInfo> Game::gameStateDeclarations_s;
-    Game* Game::singletonPtr_s = 0;
-
-
-    /**
-    @brief
-        Represents one node of the game state tree.
-    */
-    struct GameStateTreeNode
-    {
-        std::string name_;
-        weak_ptr<GameStateTreeNode> parent_;
-        std::vector<shared_ptr<GameStateTreeNode> > children_;
-    };
-
-
-    /**
-    @brief
-        Another helper class for the Game singleton: we cannot derive
-        Game from OrxonoxClass because we need to handle the Identifier
-        destruction in the Core destructor.
-    */
-    class GameConfiguration : public OrxonoxClass
-    {
-    public:
-        GameConfiguration()
-        {
-            RegisterRootObject(GameConfiguration);
-            this->setConfigValues();
-        }
-
-        void setConfigValues()
-        {
-            SetConfigValue(statisticsRefreshCycle_, 250000)
-                .description("Sets the time in microseconds interval at which average fps, etc. get updated.");
-            SetConfigValue(statisticsAvgLength_, 1000000)
-                .description("Sets the time in microseconds interval at which average fps, etc. gets calculated.");
-            SetConfigValue(fpsLimit_, 50)
-                .description("Sets the desired framerate (0 for no limit).");
-        }
-
-        unsigned int statisticsRefreshCycle_;
-        unsigned int statisticsAvgLength_;
-        unsigned int fpsLimit_;
-    };
-
-
-    /**
-    @brief
-        Non-initialising constructor.
-    */
-    Game::Game(const std::string& cmdLine)
-        // Destroy factories before the Core!
-        : gsFactoryDestroyer_(Game::GameStateFactory::factories_s, &std::map<std::string, shared_ptr<GameStateFactory> >::clear)
-    {
-        this->bAbort_ = false;
-        bChangingState_ = false;
-
-#ifdef ORXONOX_PLATFORM_WINDOWS
-        minimumSleepTime_ = 1000/*us*/;
-#else
-        minimumSleepTime_ = 0/*us*/;
-#endif
-
-        // Create an empty root state
-        this->declareGameState<GameState>("GameState", "emptyRootGameState", true, false);
-
-        // Set up a basic clock to keep time
-        this->gameClock_.reset(new Clock());
-
-        // Create the Core
-        this->core_.reset(new Core(cmdLine));
-
-        // After the core has been created, we can safely instantiate the GameStates that don't require graphics
-        for (std::map<std::string, GameStateInfo>::const_iterator it = gameStateDeclarations_s.begin();
-            it != gameStateDeclarations_s.end(); ++it)
-        {
-            if (!it->second.bGraphicsMode)
-                constructedStates_[it->second.stateName] = GameStateFactory::fabricate(it->second);
-        }
-
-        // The empty root state is ALWAYS loaded!
-        this->rootStateNode_ = shared_ptr<GameStateTreeNode>(new GameStateTreeNode());
-        this->rootStateNode_->name_ = "emptyRootGameState";
-        this->loadedTopStateNode_ = this->rootStateNode_;
-        this->loadedStates_.push_back(this->getState(rootStateNode_->name_));
-
-        // Do this after the Core creation!
-        this->configuration_.reset(new GameConfiguration());
-    }
-
-    /**
-    @brief
-        All destruction code is handled by scoped_ptrs and SimpleScopeGuards.
-    */
-    Game::~Game()
-    {
-    }
-
-    /**
-    @brief
-        Main loop of the orxonox game.
-    @note
-        We use the Ogre::Timer to measure time since it uses the most precise
-        method an any platform (however the windows timer lacks time when under
-        heavy kernel load!).
-    */
-    void Game::run()
-    {
-        if (this->requestedStateNodes_.empty())
-            COUT(0) << "Warning: Starting game without requesting GameState. This automatically terminates the program." << std::endl;
-
-        // reset statistics
-        this->statisticsStartTime_ = 0;
-        this->statisticsTickTimes_.clear();
-        this->periodTickTime_ = 0;
-        this->periodTime_ = 0;
-        this->avgFPS_ = 0.0f;
-        this->avgTickTime_ = 0.0f;
-        this->excessSleepTime_ = 0;
-
-        // START GAME
-        // first delta time should be about 0 seconds
-        this->gameClock_->capture();
-        // A first item is required for the fps limiter
-        StatisticsTickInfo tickInfo = {0, 0};
-        statisticsTickTimes_.push_back(tickInfo);
-        while (!this->bAbort_ && (!this->loadedStates_.empty() || this->requestedStateNodes_.size() > 0))
-        {
-            // Generate the dt
-            this->gameClock_->capture();
-
-            // Statistics init
-            StatisticsTickInfo tickInfo = {gameClock_->getMicroseconds(), 0};
-            statisticsTickTimes_.push_back(tickInfo);
-            this->periodTime_ += this->gameClock_->getDeltaTimeMicroseconds();
-
-            // Update the GameState stack if required
-            this->updateGameStateStack();
-
-            // Core preUpdate (doesn't throw)
-            try
-                { this->core_->preUpdate(*this->gameClock_); }
-            catch (...)
-            {
-                COUT(0) << "An exception occurred in the Core preUpdate: " << Exception::handleMessage() << std::endl;
-                COUT(0) << "This should really never happen! Closing the program." << std::endl;
-                this->stop();
-                break;
-            }
-
-            // Update the GameStates bottom up in the stack
-            this->updateGameStates();
-
-            // Core postUpdate (doesn't throw)
-            try
-                { this->core_->postUpdate(*this->gameClock_); }
-            catch (...)
-            {
-                COUT(0) << "An exception occurred in the Core postUpdate: " << Exception::handleMessage() << std::endl;
-                COUT(0) << "This should really never happen! Closing the program." << std::endl;
-                this->stop();
-                break;
-            }
-
-            // Evaluate statistics
-            this->updateStatistics();
-
-            // Limit framerate
-            this->updateFPSLimiter();
-        }
-
-        // UNLOAD all remaining states
-        while (this->loadedStates_.size() > 1)
-            this->unloadState(this->loadedStates_.back()->getName());
-        this->loadedTopStateNode_ = this->rootStateNode_;
-        this->requestedStateNodes_.clear();
-    }
-
-    void Game::updateGameStateStack()
-    {
-        while (this->requestedStateNodes_.size() > 0)
-        {
-            shared_ptr<GameStateTreeNode> requestedStateNode = this->requestedStateNodes_.front();
-            assert(this->loadedTopStateNode_);
-            if (!this->loadedTopStateNode_->parent_.expired() && requestedStateNode == this->loadedTopStateNode_->parent_.lock())
-                this->unloadState(loadedTopStateNode_->name_);
-            else // has to be child
-            {
-                try
-                {
-                    this->loadState(requestedStateNode->name_);
-                }
-                catch (...)
-                {
-                    COUT(1) << "Error: Loading GameState '" << requestedStateNode->name_ << "' failed: " << Exception::handleMessage() << std::endl;
-                    // All scheduled operations have now been rendered inert --> flush them and issue a warning
-                    if (this->requestedStateNodes_.size() > 1)
-                        COUT(4) << "All " << this->requestedStateNodes_.size() - 1 << " scheduled transitions have been ignored." << std::endl;
-                    this->requestedStateNodes_.clear();
-                    break;
-                }
-            }
-            this->loadedTopStateNode_ = requestedStateNode;
-            this->requestedStateNodes_.erase(this->requestedStateNodes_.begin());
-        }
-    }
-
-    void Game::updateGameStates()
-    {
-        // Note: The first element is the empty root state, which doesn't need ticking
-        for (GameStateVector::const_iterator it = this->loadedStates_.begin() + 1;
-            it != this->loadedStates_.end(); ++it)
-        {
-            try
-            {
-                // Add tick time for most of the states
-                uint64_t timeBeforeTick = 0;
-                if ((*it)->getInfo().bIgnoreTickTime)
-                    timeBeforeTick = this->gameClock_->getRealMicroseconds();
-                (*it)->update(*this->gameClock_);
-                if ((*it)->getInfo().bIgnoreTickTime)
-                    this->subtractTickTime(static_cast<int32_t>(this->gameClock_->getRealMicroseconds() - timeBeforeTick));
-            }
-            catch (...)
-            {
-                COUT(1) << "An exception occurred while updating '" << (*it)->getName() << "': " << Exception::handleMessage() << std::endl;
-                COUT(1) << "This should really never happen!" << std::endl;
-                COUT(1) << "Unloading all GameStates depending on the one that crashed." << std::endl;
-                shared_ptr<GameStateTreeNode> current = this->loadedTopStateNode_;
-                while (current->name_ != (*it)->getName() && current)
-                    current = current->parent_.lock();
-                if (current && current->parent_.lock())
-                    this->requestState(current->parent_.lock()->name_);
-                else
-                    this->stop();
-                break;
-            }
-        }
-    }
-
-    void Game::updateStatistics()
-    {
-        // Add the tick time of this frame (rendering time has already been subtracted)
-        uint64_t currentTime = gameClock_->getMicroseconds();
-        uint64_t currentRealTime = gameClock_->getRealMicroseconds();
-        this->statisticsTickTimes_.back().tickLength += currentRealTime - currentTime;
-        this->periodTickTime_ += currentRealTime - currentTime;
-        if (this->periodTime_ > this->configuration_->statisticsRefreshCycle_)
-        {
-            std::list<StatisticsTickInfo>::iterator it = this->statisticsTickTimes_.begin();
-            assert(it != this->statisticsTickTimes_.end());
-            int64_t lastTime = currentTime - this->configuration_->statisticsAvgLength_;
-            if (static_cast<int64_t>(it->tickTime) < lastTime)
-            {
-                do
-                {
-                    assert(this->periodTickTime_ >= it->tickLength);
-                    this->periodTickTime_ -= it->tickLength;
-                    ++it;
-                    assert(it != this->statisticsTickTimes_.end());
-                } while (static_cast<int64_t>(it->tickTime) < lastTime);
-                this->statisticsTickTimes_.erase(this->statisticsTickTimes_.begin(), it);
-            }
-
-            uint32_t framesPerPeriod = this->statisticsTickTimes_.size();
-            this->avgFPS_ = static_cast<float>(framesPerPeriod) / (currentTime - this->statisticsTickTimes_.front().tickTime) * 1000000.0f;
-            this->avgTickTime_ = static_cast<float>(this->periodTickTime_) / framesPerPeriod / 1000.0f;
-
-            this->periodTime_ -= this->configuration_->statisticsRefreshCycle_;
-        }
-    }
-
-    void Game::updateFPSLimiter()
-    {
-        // Why configuration_->fpsLimit_ - 1? No idea, but otherwise the fps rate is always (from 10 to 200!) one frame too high
-        uint32_t nextTime = gameClock_->getMicroseconds() - excessSleepTime_ + static_cast<uint32_t>(1000000.0f / (configuration_->fpsLimit_ - 1));
-        uint64_t currentRealTime = gameClock_->getRealMicroseconds();
-        while (currentRealTime < nextTime - minimumSleepTime_)
-        {
-            usleep(nextTime - currentRealTime);
-            currentRealTime = gameClock_->getRealMicroseconds();
-        }
-        // Integrate excess to avoid steady state error
-        excessSleepTime_ = currentRealTime - nextTime;
-        // Anti windup
-        if (excessSleepTime_ > 50000) // 20ms is about the maximum time Windows would sleep for too long
-            excessSleepTime_ = 50000;
-    }
-
-    void Game::stop()
-    {
-        this->bAbort_ = true;
-    }
-
-    void Game::subtractTickTime(int32_t length)
-    {
-        assert(!this->statisticsTickTimes_.empty());
-        this->statisticsTickTimes_.back().tickLength -= length;
-        this->periodTickTime_ -= length;
-    }
-
-
-    /***** GameState related *****/
-
-    void Game::requestState(const std::string& name)
-    {
-        if (!this->checkState(name))
-        {
-            COUT(2) << "Warning: GameState named '" << name << "' doesn't exist!" << std::endl;
-            return;
-        }
-
-        if (this->bChangingState_)
-        {
-            COUT(2) << "Warning: Requesting GameStates while loading/unloading a GameState is illegal! Ignoring." << std::endl;
-            return;
-        }
-
-        shared_ptr<GameStateTreeNode> lastRequestedNode;
-        if (this->requestedStateNodes_.empty())
-            lastRequestedNode = this->loadedTopStateNode_;
-        else
-            lastRequestedNode = this->requestedStateNodes_.back();
-        if (name == lastRequestedNode->name_)
-        {
-            COUT(2) << "Warning: Requesting the currently active state! Ignoring." << std::endl;
-            return;
-        }
-
-        // Check children first
-        std::vector<shared_ptr<GameStateTreeNode> > requestedNodes;
-        for (unsigned int i = 0; i < lastRequestedNode->children_.size(); ++i)
-        {
-            if (lastRequestedNode->children_[i]->name_ == name)
-            {
-                requestedNodes.push_back(lastRequestedNode->children_[i]);
-                break;
-            }
-        }
-
-        if (requestedNodes.empty())
-        {
-            // Check parent and all its grand parents
-            shared_ptr<GameStateTreeNode> currentNode = lastRequestedNode;
-            while (currentNode != NULL)
-            {
-                if (currentNode->name_ == name)
-                    break;
-                currentNode = currentNode->parent_.lock();
-                requestedNodes.push_back(currentNode);
-            }
-        }
-
-        if (requestedNodes.empty())
-            COUT(1) << "Error: Requested GameState transition is not allowed. Ignoring." << std::endl;
-        else
-            this->requestedStateNodes_.insert(requestedStateNodes_.end(), requestedNodes.begin(), requestedNodes.end());
-    }
-
-    void Game::requestStates(const std::string& names)
-    {
-        SubString tokens(names, ",;", " ");
-        for (unsigned int i = 0; i < tokens.size(); ++i)
-            this->requestState(tokens[i]);
-    }
-
-    void Game::popState()
-    {
-        shared_ptr<GameStateTreeNode> lastRequestedNode;
-        if (this->requestedStateNodes_.empty())
-            lastRequestedNode = this->loadedTopStateNode_;
-        else
-            lastRequestedNode = this->requestedStateNodes_.back();
-        if (lastRequestedNode != this->rootStateNode_)
-            this->requestState(lastRequestedNode->parent_.lock()->name_);
-        else
-            COUT(2) << "Warning: Can't pop the internal dummy root GameState" << std::endl;
-    }
-
-    shared_ptr<GameState> Game::getState(const std::string& name)
-    {
-        GameStateMap::const_iterator it = constructedStates_.find(name);
-        if (it != constructedStates_.end())
-            return it->second;
-        else
-        {
-            std::map<std::string, GameStateInfo>::const_iterator it = gameStateDeclarations_s.find(name);
-            if (it != gameStateDeclarations_s.end())
-                COUT(1) << "Error: GameState '" << name << "' has not yet been loaded." << std::endl;
-            else
-                COUT(1) << "Error: Could not find GameState '" << name << "'." << std::endl;
-            return shared_ptr<GameState>();
-        }
-    }
-
-    void Game::setStateHierarchy(const std::string& str)
-    {
-        // Split string into pieces of the form whitespacesText
-        std::vector<std::pair<std::string, unsigned> > stateStrings;
-        size_t pos = 0;
-        size_t startPos = 0;
-        while (pos < str.size())
-        {
-            unsigned indentation = 0;
-            while(pos < str.size() && str[pos] == ' ')
-                ++indentation, ++pos;
-            startPos = pos;
-            while(pos < str.size() && str[pos] != ' ')
-                ++pos;
-            stateStrings.push_back(std::make_pair(str.substr(startPos, pos - startPos), indentation));
-        }
-        unsigned int currentLevel = 0;
-        shared_ptr<GameStateTreeNode> currentNode = this->rootStateNode_;
-        for (std::vector<std::pair<std::string, unsigned> >::const_iterator it = stateStrings.begin(); it != stateStrings.end(); ++it)
-        {
-            std::string newStateName = it->first;
-            unsigned newLevel = it->second + 1; // empty root is 0
-            if (!this->checkState(newStateName))
-                ThrowException(GameState, "GameState with name '" << newStateName << "' not found!");
-            if (newStateName == this->rootStateNode_->name_)
-                ThrowException(GameState, "You shouldn't use 'emptyRootGameState' in the hierarchy...");
-            shared_ptr<GameStateTreeNode> newNode(new GameStateTreeNode);
-            newNode->name_ = newStateName;
-
-            if (newLevel <= currentLevel)
-            {
-                do
-                    currentNode = currentNode->parent_.lock();
-                while (newLevel <= --currentLevel);
-            }
-            if (newLevel == currentLevel + 1)
-            {
-                // Add the child
-                newNode->parent_ = currentNode;
-                currentNode->children_.push_back(newNode);
-            }
-            else
-                ThrowException(GameState, "Indentation error while parsing the hierarchy.");
-            currentNode = newNode;
-            currentLevel = newLevel;
-        }
-    }
-
-    /*** Internal ***/
-
-    void Game::loadGraphics()
-    {
-    }
-
-    void Game::unloadGraphics()
-    {
-    }
-
-    bool Game::checkState(const std::string& name) const
-    {
-        std::map<std::string, GameStateInfo>::const_iterator it = gameStateDeclarations_s.find(name);
-        if (it == gameStateDeclarations_s.end())
-            return false;
-        else
-            return true;
-    }
-
-    void Game::loadState(const std::string& name)
-    {
-        this->bChangingState_ = true;
-        LOKI_ON_BLOCK_EXIT_OBJ(*this, &Game::resetChangingState);
-
-        // If state requires graphics, load it
-        Loki::ScopeGuard graphicsUnloader = Loki::MakeObjGuard(*this, &Game::unloadGraphics);
-        if (gameStateDeclarations_s[name].bGraphicsMode)
-            this->loadGraphics();
-        else
-            graphicsUnloader.Dismiss();
-
-        shared_ptr<GameState> state = this->getState(name);
-        state->activate();
-        if (!this->loadedStates_.empty())
-            this->loadedStates_.back()->activity_.topState = false;
-        this->loadedStates_.push_back(state);
-        state->activity_.topState = true;
-
-        graphicsUnloader.Dismiss();
-    }
-
-    void Game::unloadState(const std::string& name)
-    {
-        this->bChangingState_ = true;
-        try
-        {
-            shared_ptr<GameState> state = this->getState(name);
-            state->activity_.topState = false;
-            this->loadedStates_.pop_back();
-            if (!this->loadedStates_.empty())
-                this->loadedStates_.back()->activity_.topState = true;
-            state->deactivate();
-        }
-        catch (...)
-        {
-            COUT(2) << "Warning: Unloading GameState '" << name << "' threw an exception: " << Exception::handleMessage() << std::endl;
-            COUT(2) << "         There might be potential resource leaks involved! To avoid this, improve exception-safety." << std::endl;
-        }
-        // Check if graphics is still required
-        if (!bAbort_)
-        {
-            bool graphicsRequired = false;
-            for (unsigned i = 0; i < loadedStates_.size(); ++i)
-                graphicsRequired |= loadedStates_[i]->getInfo().bGraphicsMode;
-            if (!graphicsRequired)
-                this->unloadGraphics();
-        }
-        this->bChangingState_ = false;
-    }
-
-    std::map<std::string, shared_ptr<Game::GameStateFactory> > Game::GameStateFactory::factories_s;
-
-    /*static*/ shared_ptr<GameState> Game::GameStateFactory::fabricate(const GameStateInfo& info)
-    {
-        std::map<std::string, shared_ptr<Game::GameStateFactory> >::const_iterator it = factories_s.find(info.className);
-        assert(it != factories_s.end());
-        return it->second->fabricateInternal(info);
-    }
-}
Index: sandbox_light/src/libraries/core/Game.h
===================================================================
--- sandbox_light/src/libraries/core/Game.h	(revision 5788)
+++ 	(revision )
@@ -1,212 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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
-    Declaration of Game Singleton.
- */
-
-#ifndef _Game_H__
-#define _Game_H__
-
-#include "CorePrereqs.h"
-
-#include <cassert>
-#include <list>
-#include <map>
-#include <string>
-#include <vector>
-#include <boost/shared_ptr.hpp>
-#include <boost/scoped_ptr.hpp>
-#include <boost/preprocessor/cat.hpp>
-
-#include "util/Debug.h"
-#include "util/ScopeGuard.h"
-#include "util/Singleton.h"
-
-/**
-@def
-    Adds a new GameState to the Game. The second parameter is the name as string
-    and every following paramter is a constructor argument (which is usually non existent)
-*/
-#define DeclareGameState(className, stateName, bIgnoreTickTime, bGraphicsMode) \
-    static bool BOOST_PP_CAT(bGameStateDummy_##className, __LINE__) = orxonox::Game::declareGameState<className>(#className, stateName, bIgnoreTickTime, bGraphicsMode)
-
-namespace orxonox
-{
-    class GameConfiguration;
-
-    //! Helper object required before GameStates are being constructed
-    struct GameStateInfo
-    {
-        std::string stateName;
-        std::string className;
-        bool bIgnoreTickTime;
-        bool bGraphicsMode;
-    };
-
-    /**
-    @brief
-        Main class responsible for running the game.
-    @remark
-        You should only create this singleton once because it owns the Core class! (see remark there)
-    */
-    class _CoreExport Game : public Singleton<Game>
-    {
-        friend class Singleton<Game>;
-        typedef std::vector<shared_ptr<GameState> > GameStateVector;
-        typedef std::map<std::string, shared_ptr<GameState> > GameStateMap;
-        typedef shared_ptr<GameStateTreeNode> GameStateTreeNodePtr;
-
-    public:
-        Game(const std::string& cmdLine);
-        ~Game();
-
-        void setStateHierarchy(const std::string& str);
-        shared_ptr<GameState> getState(const std::string& name);
-
-        void run();
-        void stop();
-
-        void requestState(const std::string& name);
-        void requestStates(const std::string& names);
-        void popState();
-
-        const Clock& getGameClock() { return *this->gameClock_; }
-
-        float getAvgTickTime() { return this->avgTickTime_; }
-        float getAvgFPS()      { return this->avgFPS_; }
-
-        void subtractTickTime(int32_t length);
-
-        template <class T>
-        static bool declareGameState(const std::string& className, const std::string& stateName, bool bIgnoreTickTime, bool bConsoleMode);
-
-    private:
-        class _CoreExport GameStateFactory
-        {
-        public:
-            virtual ~GameStateFactory() { }
-            static shared_ptr<GameState> fabricate(const GameStateInfo& info);
-            template <class T>
-            static void createFactory(const std::string& className)
-                { factories_s[className].reset(new TemplateGameStateFactory<T>()); }
-
-            virtual shared_ptr<GameState> fabricateInternal(const GameStateInfo& info) = 0;
-            static std::map<std::string, shared_ptr<GameStateFactory> > factories_s;
-        };
-        template <class T>
-        class TemplateGameStateFactory : public GameStateFactory
-        {
-        public:
-            shared_ptr<GameState> fabricateInternal(const GameStateInfo& info)
-                { return shared_ptr<GameState>(new T(info)); }
-        };
-        // For the factory destruction
-        typedef Loki::ObjScopeGuardImpl0<std::map<std::string, shared_ptr<GameStateFactory> >, void (std::map<std::string, shared_ptr<GameStateFactory> >::*)()> ObjScopeGuard;
-
-        struct StatisticsTickInfo
-        {
-            uint64_t    tickTime;
-            uint32_t    tickLength;
-        };
-
-        Game(Game&); // don't mess with singletons
-
-        void loadGraphics();
-        void unloadGraphics();
-
-        bool checkState(const std::string& name) const;
-        void loadState(const std::string& name);
-        void unloadState(const std::string& name);
-
-        // Main loop structuring
-        void updateGameStateStack();
-        void updateGameStates();
-        void updateStatistics();
-        void updateFPSLimiter();
-
-        // ScopeGuard helper function
-        void resetChangingState() { this->bChangingState_ = false; }
-
-        scoped_ptr<Clock>                  gameClock_;
-        scoped_ptr<Core>                   core_;
-        ObjScopeGuard                      gsFactoryDestroyer_;
-        scoped_ptr<GameConfiguration>      configuration_;
-
-        GameStateMap                       constructedStates_;
-        GameStateVector                    loadedStates_;
-        GameStateTreeNodePtr               rootStateNode_;
-        GameStateTreeNodePtr               loadedTopStateNode_;
-        std::vector<GameStateTreeNodePtr>  requestedStateNodes_;
-
-        bool                               bChangingState_;
-        bool                               bAbort_;
-
-        // variables for time statistics
-        uint64_t                           statisticsStartTime_;
-        std::list<StatisticsTickInfo>      statisticsTickTimes_;
-        uint32_t                           periodTime_;
-        uint32_t                           periodTickTime_;
-        float                              avgFPS_;
-        float                              avgTickTime_;
-        int                                excessSleepTime_;
-        unsigned int                       minimumSleepTime_;
-
-        static std::map<std::string, GameStateInfo> gameStateDeclarations_s;
-        static Game* singletonPtr_s;        //!< Pointer to the Singleton
-    };
-
-    template <class T>
-    /*static*/ bool Game::declareGameState(const std::string& className, const std::string& stateName, bool bIgnoreTickTime, bool bGraphicsMode)
-    {
-        std::map<std::string, GameStateInfo>::const_iterator it = gameStateDeclarations_s.find(stateName);
-        if (it == gameStateDeclarations_s.end())
-        {
-            GameStateInfo& info = gameStateDeclarations_s[stateName];
-            info.stateName = stateName;
-            info.className = className;
-            info.bIgnoreTickTime = bIgnoreTickTime;
-            info.bGraphicsMode = bGraphicsMode;
-        }
-        else
-        {
-            COUT(0) << "Error: Cannot declare two GameStates with the same name." << std::endl;
-            COUT(0) << "       Ignoring second one ('" << stateName << "')." << std::endl;
-        }
-
-        // Create a factory to delay GameState creation
-        GameStateFactory::createFactory<T>(className);
-
-        // just a required dummy return value
-        return true;
-    }
-}
-
-#endif /* _Game_H__ */
Index: sandbox_light/src/libraries/core/GameState.cc
===================================================================
--- sandbox_light/src/libraries/core/GameState.cc	(revision 5788)
+++ 	(revision )
@@ -1,97 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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 GameState class.
-*/
-
-#include "GameState.h"
-
-#include "util/Debug.h"
-#include "util/Exception.h"
-#include "util/OrxAssert.h"
-#include "Game.h"
-
-namespace orxonox
-{
-    /**
-    @brief
-        Constructor only initialises variables and sets the name permanently.
-    */
-    GameState::GameState(const GameStateInfo& info)
-        : info_(info)
-    {
-        this->activity_.activating   = false;
-        this->activity_.active       = false;
-        this->activity_.deactivating = false;
-        this->activity_.suspended    = false;
-        this->activity_.topState     = false;
-        this->activity_.updating     = false;
-    }
-
-    /**
-    @brief
-        Destructor only checks that we don't delete an active state.
-    */
-    GameState::~GameState()
-    {
-        OrxAssert(this->activity_.active == false, "Deleting an active GameState is a very bad idea..");
-    }
-
-    const std::string& GameState::getName() const
-    {
-        return info_.stateName;
-    }
-
-    void GameState::activateInternal()
-    {
-        this->activity_.activating = true;
-        this->activate();
-        this->activity_.activating = false;
-        this->activity_.active = true;
-    }
-
-    void GameState::deactivateInternal()
-    {
-        this->activity_.active = false;
-        this->activity_.deactivating = true;
-        this->activate();
-        this->activity_.deactivating = false;
-        this->activity_.suspended = false;
-        this->activity_.updating = false;
-    }
-
-    void GameState::updateInternal(const Clock& time)
-    {
-        this->activity_.updating = true;
-        this->update(time);
-        this->activity_.updating = false;
-    }
-}
Index: sandbox_light/src/libraries/core/GameState.h
===================================================================
--- sandbox_light/src/libraries/core/GameState.h	(revision 5788)
+++ 	(revision )
@@ -1,102 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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
-    Definition of GameState class.
-*/
-
-#ifndef _GameState_H__
-#define _GameState_H__
-
-#include "CorePrereqs.h"
-
-#include <map>
-#include <string>
-
-namespace orxonox
-{
-    /**
-    @brief
-        An implementation of a tree to manage game states.
-        This leads to a certain hierarchy that is created at runtime.
-        To actually use the structure, you will have to derive from it and
-        implement 'enter', 'leave' and 'tick'. The latter corresponds to an
-        update function.
-
-        Internally the tree is managed by two maps per node: One stores all its
-        children, grandchildren, etc. by name of the state. The other maps these
-        children states to the actual child of the node.
-        An example: Foo is a grandchildren of Bar and Foofoo is the Foo's parent.
-        Then Bar stores Foo in map by its name. The other one then maps Foo to Foofoo.
-    */
-    class _CoreExport GameState
-    {
-        friend class Game;
-
-    public:
-        /**
-        @brief
-            Gives information about what the GameState is currently doing
-        */
-        struct State
-        {
-            unsigned active       : 1;
-            unsigned activating   : 1;
-            unsigned deactivating : 1;
-            unsigned updating     : 1;
-            unsigned suspended    : 1;
-            unsigned topState     : 1;
-        };
-
-    public:
-        GameState(const GameStateInfo& info);
-        virtual ~GameState();
-
-        const std::string& getName()   const;
-        State getActivity()            const { return activity_; }
-        const GameStateInfo& getInfo() const { return info_; }
-
-    protected:
-        virtual void activate() { }
-        virtual void deactivate() { }
-        virtual void update(const Clock& time) { }
-
-    private:
-        void setActivity(State activity);
-        void activateInternal();
-        void deactivateInternal();
-        void updateInternal(const Clock& time);
-
-        const GameStateInfo& info_;
-        State                activity_;
-    };
-}
-
-#endif /* _GameState_H__ */
Index: sandbox_light/src/libraries/core/Identifier.cc
===================================================================
--- sandbox_light/src/libraries/core/Identifier.cc	(revision 5788)
+++ 	(revision )
@@ -1,359 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Implementation of the Identifier class.
-*/
-
-#include "Identifier.h"
-
-#include <ostream>
-
-#include "util/StringUtils.h"
-#include "ConfigValueContainer.h"
-#include "Factory.h"
-
-namespace orxonox
-{
-    // ###############################
-    // ###       Identifier        ###
-    // ###############################
-    int Identifier::hierarchyCreatingCounter_s = 0;
-    unsigned int Identifier::classIDCounter_s = 0;
-
-    /**
-        @brief Constructor: No factory, no object created, new ObjectList and a unique networkID.
-    */
-    Identifier::Identifier()
-        : classID_(classIDCounter_s++)
-    {
-        this->objects_ = new ObjectListBase(this);
-
-        this->bCreatedOneObject_ = false;
-        this->bSetName_ = false;
-        this->factory_ = 0;
-
-        this->bHasConfigValues_ = false;
-
-        this->children_ = new std::set<const Identifier*>();
-        this->directChildren_ = new std::set<const Identifier*>();
-    }
-
-    /**
-        @brief Destructor: Deletes the list containing the children.
-    */
-    Identifier::~Identifier()
-    {
-        delete this->children_;
-        delete this->directChildren_;
-        delete this->objects_;
-
-        if (this->factory_)
-            delete this->factory_;
-
-        for (std::map<std::string, ConfigValueContainer*>::iterator it = this->configValues_.begin(); it != this->configValues_.end(); ++it)
-            delete (it->second);
-    }
-
-    /**
-        @brief Returns the identifier map with the names as received by typeid(). This is only used internally.
-    */
-    std::map<std::string, Identifier*>& Identifier::getTypeIDIdentifierMap()
-    {
-        static std::map<std::string, Identifier*> identifiers;    //!< The map to store all Identifiers.
-        return identifiers;
-    }
-
-    /**
-        @brief Returns an identifier by name and adds it if not available
-        @param name The name of the identifier as typeid().name() suggests
-        @param proposal A pointer to a newly created identifier for the case of non existance in the map
-        @return The identifier (unique instance)
-    */
-    Identifier* Identifier::getIdentifierSingleton(const std::string& name, Identifier* proposal)
-    {
-        std::map<std::string, Identifier*>::const_iterator it = getTypeIDIdentifierMap().find(name);
-
-        if (it != getTypeIDIdentifierMap().end())
-        {
-            // There is already an entry: return it and delete the proposal
-            delete proposal;
-            return (*it).second;
-        }
-        else
-        {
-            // There is no entry: put the proposal into the map and return it
-            getTypeIDIdentifierMap()[name] = proposal;
-            return proposal;
-        }
-    }
-
-    /**
-        @brief Registers a class, which means that the name and the parents get stored.
-        @param parents A list, containing the Identifiers of all parents of the class
-        @param bRootClass True if the class is either an Interface or the BaseObject itself
-    */
-    void Identifier::initializeClassHierarchy(std::set<const Identifier*>* parents, bool bRootClass)
-    {
-        // Check if at least one object of the given type was created
-        if (!this->bCreatedOneObject_ && Identifier::isCreatingHierarchy())
-        {
-            // If no: We have to store the information and initialize the Identifier
-            COUT(4) << "*** ClassIdentifier: Register Class in " << this->getName() << "-Singleton -> Initialize Singleton." << std::endl;
-            if (bRootClass)
-                this->initialize(0); // If a class is derived from two interfaces, the second interface might think it's derived from the first because of the order of constructor-calls. Thats why we set parents to zero in that case.
-            else
-                this->initialize(parents);
-        }
-    }
-
-    /**
-        @brief Initializes the Identifier with a list containing all parents of the class the Identifier belongs to.
-        @param parents A list containing all parents
-    */
-    void Identifier::initialize(std::set<const Identifier*>* parents)
-    {
-        COUT(4) << "*** Identifier: Initialize " << this->name_ << "-Singleton." << std::endl;
-        this->bCreatedOneObject_ = true;
-
-        if (parents)
-        {
-            this->parents_ = (*parents);
-            this->directParents_ = (*parents);
-
-            // Iterate through all parents
-            for (std::set<const Identifier*>::iterator it = parents->begin(); it != parents->end(); ++it)
-            {
-                // Tell the parent we're one of it's children
-                (*it)->getChildrenIntern().insert((*it)->getChildrenIntern().end(), this);
-
-                // Erase all parents of our parent from our direct-parent-list
-                for (std::set<const Identifier*>::const_iterator it1 = (*it)->getParents().begin(); it1 != (*it)->getParents().end(); ++it1)
-                {
-                    // Search for the parent's parent in our direct-parent-list
-                    for (std::set<const Identifier*>::iterator it2 = this->directParents_.begin(); it2 != this->directParents_.end(); ++it2)
-                    {
-                        if ((*it1) == (*it2))
-                        {
-                            // We've found a non-direct parent in our list: Erase it
-                            this->directParents_.erase(it2);
-                            break;
-                        }
-                    }
-                }
-            }
-
-            // Now iterate through all direct parents
-            for (std::set<const Identifier*>::iterator it = this->directParents_.begin(); it != this->directParents_.end(); ++it)
-            {
-                // Tell the parent we're one of it's direct children
-                (*it)->getDirectChildrenIntern().insert((*it)->getDirectChildrenIntern().end(), this);
-            }
-        }
-    }
-
-    /**
-        @brief Destroys all Identifiers. Called when exiting the program.
-    */
-    void Identifier::destroyAllIdentifiers()
-    {
-        for (std::map<std::string, Identifier*>::iterator it = Identifier::getTypeIDIdentifierMap().begin(); it != Identifier::getTypeIDIdentifierMap().end(); ++it)
-            delete (it->second);
-    }
-
-    /**
-        @brief Sets the name of the class.
-        @param name The name
-    */
-    void Identifier::setName(const std::string& name)
-    {
-        if (!this->bSetName_)
-        {
-            this->name_ = name;
-            this->bSetName_ = true;
-            Identifier::getIdentifierMapIntern()[name] = this;
-            Identifier::getLowercaseIdentifierMapIntern()[getLowercase(name)] = this;
-        }
-    }
-
-    /**
-        @brief Creates an object of the type the Identifier belongs to.
-        @return The new object
-    */
-    BaseObject* Identifier::fabricate(BaseObject* creator)
-    {
-        if (this->factory_)
-        {
-            return this->factory_->fabricate(creator); // We have to return a BaseObject, because we don't know the exact type.
-        }
-        else
-        {
-            COUT(1) << "An error occurred in Identifier.cc:" << std::endl;
-            COUT(1) << "Error: Cannot fabricate an object of type '" << this->name_ << "'. Class has no factory." << std::endl;
-            COUT(1) << "Aborting..." << std::endl;
-            abort();
-            return NULL;
-        }
-    }
-
-    /**
-        @brief Returns true, if the Identifier is at least of the given type.
-        @param identifier The identifier to compare with
-    */
-    bool Identifier::isA(const Identifier* identifier) const
-    {
-        return (identifier == this || (this->parents_.find(identifier) != this->parents_.end()));
-    }
-
-    /**
-        @brief Returns true, if the Identifier is exactly of the given type.
-        @param identifier The identifier to compare with
-    */
-    bool Identifier::isExactlyA(const Identifier* identifier) const
-    {
-        return (identifier == this);
-    }
-
-    /**
-        @brief Returns true, if the assigned identifier is a child of the given identifier.
-        @param identifier The identifier to compare with
-    */
-    bool Identifier::isChildOf(const Identifier* identifier) const
-    {
-        return (this->parents_.find(identifier) != this->parents_.end());
-    }
-
-    /**
-        @brief Returns true, if the assigned identifier is a direct child of the given identifier.
-        @param identifier The identifier to compare with
-    */
-    bool Identifier::isDirectChildOf(const Identifier* identifier) const
-    {
-        return (this->directParents_.find(identifier) != this->directParents_.end());
-    }
-
-    /**
-        @brief Returns true, if the assigned identifier is a parent of the given identifier.
-        @param identifier The identifier to compare with
-    */
-    bool Identifier::isParentOf(const Identifier* identifier) const
-    {
-        return (this->children_->find(identifier) != this->children_->end());
-    }
-
-    /**
-        @brief Returns true, if the assigned identifier is a direct parent of the given identifier.
-        @param identifier The identifier to compare with
-    */
-    bool Identifier::isDirectParentOf(const Identifier* identifier) const
-    {
-        return (this->directChildren_->find(identifier) != this->directChildren_->end());
-    }
-
-    /**
-        @brief Returns the map that stores all Identifiers.
-        @return The map
-    */
-    std::map<std::string, Identifier*>& Identifier::getIdentifierMapIntern()
-    {
-        static std::map<std::string, Identifier*> identifierMap;
-        return identifierMap;
-    }
-
-    /**
-        @brief Returns the map that stores all Identifiers.
-        @return The map
-    */
-    std::map<std::string, Identifier*>& Identifier::getLowercaseIdentifierMapIntern()
-    {
-        static std::map<std::string, Identifier*> lowercaseIdentifierMap;
-        return lowercaseIdentifierMap;
-    }
-
-    /**
-        @brief Adds the ConfigValueContainer of a variable, given by the string of its name.
-        @param varname The name of the variablee
-        @param container The container
-    */
-    void Identifier::addConfigValueContainer(const std::string& varname, ConfigValueContainer* container)
-    {
-        std::map<std::string, ConfigValueContainer*>::const_iterator it = this->configValues_.find(varname);
-        if (it != this->configValues_.end())
-        {
-            COUT(2) << "Warning: Overwriting config-value with name " << varname << " in class " << this->getName() << "." << std::endl;
-            delete (it->second);
-        }
-
-        this->bHasConfigValues_ = true;
-        this->configValues_[varname] = container;
-        this->configValues_LC_[getLowercase(varname)] = container;
-    }
-
-    /**
-        @brief Returns the ConfigValueContainer of a variable, given by the string of its name.
-        @param varname The name of the variable
-        @return The ConfigValueContainer
-    */
-    ConfigValueContainer* Identifier::getConfigValueContainer(const std::string& varname)
-    {
-        std::map<std::string, ConfigValueContainer*>::const_iterator it = configValues_.find(varname);
-        if (it != configValues_.end())
-            return ((*it).second);
-        else
-            return 0;
-    }
-
-    /**
-        @brief Returns the ConfigValueContainer of a variable, given by the string of its name in lowercase.
-        @param varname The name of the variable in lowercase
-        @return The ConfigValueContainer
-    */
-    ConfigValueContainer* Identifier::getLowercaseConfigValueContainer(const std::string& varname)
-    {
-        std::map<std::string, ConfigValueContainer*>::const_iterator it = configValues_LC_.find(varname);
-        if (it != configValues_LC_.end())
-            return ((*it).second);
-        else
-            return 0;
-    }
-
-    /**
-        @brief Lists the names of all Identifiers in a std::set<const Identifier*>.
-        @param out The outstream
-        @param list The list (or set) of Identifiers
-        @return The outstream
-    */
-    std::ostream& operator<<(std::ostream& out, const std::set<const Identifier*>& list)
-    {
-        for (std::set<const Identifier*>::const_iterator it = list.begin(); it != list.end(); ++it)
-            out << (*it)->getName() << " ";
-
-        return out;
-    }
-}
Index: sandbox_light/src/libraries/core/Identifier.h
===================================================================
--- sandbox_light/src/libraries/core/Identifier.h	(revision 5788)
+++ 	(revision )
@@ -1,559 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Definition of the Identifier, ClassIdentifier and SubclassIdentifier classes, implementation of the ClassIdentifier and SubclassIdentifier classes.
-
-    The Identifier contains all needed information about the class it belongs to:
-     - the name
-     - a list with all objects
-     - parents and children
-     - the factory (if available)
-     - the networkID that can be synchronised with the server
-     - all configurable variables (if available)
-
-    Every object has a pointer to the Identifier of its class. This allows the use isA(...),
-    isExactlyA(...), isChildOf(...) and isParentOf(...).
-
-    To create the class-hierarchy, the Identifier has some intern functions and variables.
-
-    Every Identifier is in fact a ClassIdentifier, but they are derived from Identifier.
-
-    SubclassIdentifier is a separated class, acting like an Identifier, but has a given class.
-    You can only assign Identifiers of exactly the given class or of a derivative to a SubclassIdentifier.
-*/
-
-#ifndef _Identifier_H__
-#define _Identifier_H__
-
-#include "CorePrereqs.h"
-
-#include <cassert>
-#include <map>
-#include <set>
-#include <string>
-#include <typeinfo>
-
-#include "util/Debug.h"
-#include "util/TypeTraits.h"
-#include "MetaObjectList.h"
-#include "ObjectList.h"
-#include "ObjectListBase.h"
-
-namespace orxonox
-{
-    // ###############################
-    // ###       Identifier        ###
-    // ###############################
-    //! The Identifier is used to identify the class of an object and to store information about the class.
-    /**
-        The Identifier contains all needed information about the class it belongs to:
-         - the name
-         - a list with all objects
-         - parents and children
-         - the factory (if available)
-         - the networkID that can be synchronised with the server
-         - all configurable variables (if available)
-
-        Every object has a pointer to the Identifier of its class. This allows the use isA(...),
-        isExactlyA(...), isChildOf(...) and isParentOf(...).
-
-        You can't directly create an Identifier, it's just the base-class for ClassIdentifier.
-    */
-    class _CoreExport Identifier
-    {
-        template <class T>
-        friend class SubclassIdentifier;
-
-        friend class Factory;
-
-        public:
-            /** @brief Sets the Factory. @param factory The factory to assign */
-            inline void addFactory(BaseFactory* factory) { this->factory_ = factory; }
-
-            BaseObject* fabricate(BaseObject* creator);
-            bool isA(const Identifier* identifier) const;
-            bool isExactlyA(const Identifier* identifier) const;
-            bool isChildOf(const Identifier* identifier) const;
-            bool isDirectChildOf(const Identifier* identifier) const;
-            bool isParentOf(const Identifier* identifier) const;
-            bool isDirectParentOf(const Identifier* identifier) const;
-
-            /** @brief Returns the list of all existing objects of this class. @return The list */
-            inline ObjectListBase* getObjects() const
-                { return this->objects_; }
-
-            /** @brief Returns the name of the class the Identifier belongs to. @return The name */
-            inline const std::string& getName() const { return this->name_; }
-            void setName(const std::string& name);
-
-            virtual void updateConfigValues(bool updateChildren = true) const = 0;
-
-            /** @brief Returns the parents of the class the Identifier belongs to. @return The list of all parents */
-            inline const std::set<const Identifier*>& getParents() const { return this->parents_; }
-            /** @brief Returns the begin-iterator of the parents-list. @return The begin-iterator */
-            inline std::set<const Identifier*>::const_iterator getParentsBegin() const { return this->parents_.begin(); }
-            /** @brief Returns the end-iterator of the parents-list. @return The end-iterator */
-            inline std::set<const Identifier*>::const_iterator getParentsEnd() const { return this->parents_.end(); }
-
-            /** @brief Returns the children of the class the Identifier belongs to. @return The list of all children */
-            inline const std::set<const Identifier*>& getChildren() const { return (*this->children_); }
-            /** @brief Returns the begin-iterator of the children-list. @return The begin-iterator */
-            inline std::set<const Identifier*>::const_iterator getChildrenBegin() const { return this->children_->begin(); }
-            /** @brief Returns the end-iterator of the children-list. @return The end-iterator */
-            inline std::set<const Identifier*>::const_iterator getChildrenEnd() const { return this->children_->end(); }
-
-            /** @brief Returns the direct parents of the class the Identifier belongs to. @return The list of all direct parents */
-            inline const std::set<const Identifier*>& getDirectParents() const { return this->directParents_; }
-            /** @brief Returns the begin-iterator of the direct-parents-list. @return The begin-iterator */
-            inline std::set<const Identifier*>::const_iterator getDirectParentsBegin() const { return this->directParents_.begin(); }
-            /** @brief Returns the end-iterator of the direct-parents-list. @return The end-iterator */
-            inline std::set<const Identifier*>::const_iterator getDirectParentsEnd() const { return this->directParents_.end(); }
-
-            /** @brief Returns the direct children the class the Identifier belongs to. @return The list of all direct children */
-            inline const std::set<const Identifier*>& getDirectChildren() const { return (*this->directChildren_); }
-            /** @brief Returns the begin-iterator of the direct-children-list. @return The begin-iterator */
-            inline std::set<const Identifier*>::const_iterator getDirectChildrenBegin() const { return this->directChildren_->begin(); }
-            /** @brief Returns the end-iterator of the direct-children-list. @return The end-iterator */
-            inline std::set<const Identifier*>::const_iterator getDirectChildrenEnd() const { return this->directChildren_->end(); }
-
-
-            /** @brief Returns the map that stores all Identifiers. @return The map */
-            static inline const std::map<std::string, Identifier*>& getIdentifierMap() { return Identifier::getIdentifierMapIntern(); }
-            /** @brief Returns a const_iterator to the beginning of the map that stores all Identifiers. @return The const_iterator */
-            static inline std::map<std::string, Identifier*>::const_iterator getIdentifierMapBegin() { return Identifier::getIdentifierMap().begin(); }
-            /** @brief Returns a const_iterator to the end of the map that stores all Identifiers. @return The const_iterator */
-            static inline std::map<std::string, Identifier*>::const_iterator getIdentifierMapEnd() { return Identifier::getIdentifierMap().end(); }
-
-            /** @brief Returns the map that stores all Identifiers with their names in lowercase. @return The map */
-            static inline const std::map<std::string, Identifier*>& getLowercaseIdentifierMap() { return Identifier::getLowercaseIdentifierMapIntern(); }
-            /** @brief Returns a const_iterator to the beginning of the map that stores all Identifiers with their names in lowercase. @return The const_iterator */
-            static inline std::map<std::string, Identifier*>::const_iterator getLowercaseIdentifierMapBegin() { return Identifier::getLowercaseIdentifierMap().begin(); }
-            /** @brief Returns a const_iterator to the end of the map that stores all Identifiers with their names in lowercase. @return The const_iterator */
-            static inline std::map<std::string, Identifier*>::const_iterator getLowercaseIdentifierMapEnd() { return Identifier::getLowercaseIdentifierMap().end(); }
-
-
-            /** @brief Returns the map that stores all config values. @return The const_iterator */
-            inline const std::map<std::string, ConfigValueContainer*>& getConfigValueMap() const { return this->configValues_; }
-            /** @brief Returns a const_iterator to the beginning of the map that stores all config values. @return The const_iterator */
-            inline std::map<std::string, ConfigValueContainer*>::const_iterator getConfigValueMapBegin() const { return this->configValues_.begin(); }
-            /** @brief Returns a const_iterator to the end of the map that stores all config values. @return The const_iterator */
-            inline std::map<std::string, ConfigValueContainer*>::const_iterator getConfigValueMapEnd() const { return this->configValues_.end(); }
-
-            /** @brief Returns the map that stores all config values with their names in lowercase. @return The const_iterator */
-            inline const std::map<std::string, ConfigValueContainer*>& getLowercaseConfigValueMap() const { return this->configValues_LC_; }
-            /** @brief Returns a const_iterator to the beginning of the map that stores all config values with their names in lowercase. @return The const_iterator */
-            inline std::map<std::string, ConfigValueContainer*>::const_iterator getLowercaseConfigValueMapBegin() const { return this->configValues_LC_.begin(); }
-            /** @brief Returns a const_iterator to the end of the map that stores all config values with their names in lowercase. @return The const_iterator */
-            inline std::map<std::string, ConfigValueContainer*>::const_iterator getLowercaseConfigValueMapEnd() const { return this->configValues_LC_.end(); }
-
-
-            /** @brief Returns true if this class has at least one config value. @return True if this class has at least one config value */
-            inline bool hasConfigValues() const { return this->bHasConfigValues_; }
-
-            /** @brief Returns true, if a branch of the class-hierarchy is being created, causing all new objects to store their parents. @return The status of the class-hierarchy creation */
-            inline static bool isCreatingHierarchy() { return (hierarchyCreatingCounter_s > 0); }
-
-            /** @brief Returns the unique ID of the class */
-            FORCEINLINE unsigned int getClassID() const { return this->classID_; }
-
-            void addConfigValueContainer(const std::string& varname, ConfigValueContainer* container);
-            ConfigValueContainer* getConfigValueContainer(const std::string& varname);
-            ConfigValueContainer* getLowercaseConfigValueContainer(const std::string& varname);
-
-            void initializeClassHierarchy(std::set<const Identifier*>* parents, bool bRootClass);
-
-            static void destroyAllIdentifiers();
-
-        protected:
-            Identifier();
-            Identifier(const Identifier& identifier); // don't copy
-            virtual ~Identifier();
-
-            static Identifier* getIdentifierSingleton(const std::string& name, Identifier* proposal);
-
-            /** @brief Returns the map that stores all Identifiers. @return The map */
-            static std::map<std::string, Identifier*>& getIdentifierMapIntern();
-            /** @brief Returns the map that stores all Identifiers with their names in lowercase. @return The map */
-            static std::map<std::string, Identifier*>& getLowercaseIdentifierMapIntern();
-
-            /** @brief Returns the children of the class the Identifier belongs to. @return The list of all children */
-            inline std::set<const Identifier*>& getChildrenIntern() const { return (*this->children_); }
-            /** @brief Returns the direct children of the class the Identifier belongs to. @return The list of all direct children */
-            inline std::set<const Identifier*>& getDirectChildrenIntern() const { return (*this->directChildren_); }
-
-            ObjectListBase* objects_;                                      //!< The list of all objects of this class
-
-        private:
-            /**
-                @brief Increases the hierarchyCreatingCounter_s variable, causing all new objects to store their parents.
-            */
-            inline static void startCreatingHierarchy()
-            {
-                hierarchyCreatingCounter_s++;
-                COUT(4) << "*** Identifier: Increased Hierarchy-Creating-Counter to " << hierarchyCreatingCounter_s << std::endl;
-            }
-
-            /**
-                @brief Decreases the hierarchyCreatingCounter_s variable, causing the objects to stop storing their parents.
-            */
-            inline static void stopCreatingHierarchy()
-            {
-                hierarchyCreatingCounter_s--;
-                COUT(4) << "*** Identifier: Decreased Hierarchy-Creating-Counter to " << hierarchyCreatingCounter_s << std::endl;
-            }
-
-            static std::map<std::string, Identifier*>& getTypeIDIdentifierMap();
-
-            void initialize(std::set<const Identifier*>* parents);
-
-            std::set<const Identifier*> parents_;                          //!< The parents of the class the Identifier belongs to
-            std::set<const Identifier*>* children_;                        //!< The children of the class the Identifier belongs to
-
-            std::set<const Identifier*> directParents_;                    //!< The direct parents of the class the Identifier belongs to
-            std::set<const Identifier*>* directChildren_;                  //!< The direct children of the class the Identifier belongs to
-
-            bool bCreatedOneObject_;                                       //!< True if at least one object of the given type was created (used to determine the need of storing the parents)
-            bool bSetName_;                                                //!< True if the name is set
-            std::string name_;                                             //!< The name of the class the Identifier belongs to
-            BaseFactory* factory_;                                         //!< The Factory, able to create new objects of the given class (if available)
-            static int hierarchyCreatingCounter_s;                         //!< Bigger than zero if at least one Identifier stores its parents (its an int instead of a bool to avoid conflicts with multithreading)
-            const unsigned int classID_;                                   //!< Uniquely identifies a class (might not be the same as the networkID_)
-            static unsigned int classIDCounter_s;                          //!< Static counter for the unique classIDs
-
-            bool bHasConfigValues_;                                        //!< True if this class has at least one assigned config value
-            std::map<std::string, ConfigValueContainer*> configValues_;    //!< A map to link the string of configurable variables with their ConfigValueContainer
-            std::map<std::string, ConfigValueContainer*> configValues_LC_; //!< A map to link the string of configurable variables with their ConfigValueContainer
-    };
-
-    _CoreExport std::ostream& operator<<(std::ostream& out, const std::set<const Identifier*>& list);
-
-
-    // ###############################
-    // ###     ClassIdentifier     ###
-    // ###############################
-    //! The ClassIdentifier is derived from Identifier and holds all class-specific functions and variables the Identifier cannot have.
-    /**
-        ClassIdentifier is a Singleton, which means that only one object of a given type T exists.
-        This makes it possible to store information about a class, sharing them with all
-        objects of that class without defining static variables in every class.
-
-        To be really sure that not more than exactly one object exists (even with libraries),
-        ClassIdentifiers are stored in the Identifier Singleton.
-    */
-    template <class T>
-    class ClassIdentifier : public Identifier
-    {
-        public:
-            static ClassIdentifier<T> *getIdentifier();
-            static ClassIdentifier<T> *getIdentifier(const std::string& name);
-
-            bool initialiseObject(T* object, const std::string& className, bool bRootClass);
-
-            void updateConfigValues(bool updateChildren = true) const;
-
-        private:
-            static void initialiseIdentifier();
-            ClassIdentifier(const ClassIdentifier<T>& identifier) {}    // don't copy
-            ClassIdentifier()
-            {
-            }
-            ~ClassIdentifier()
-            {
-            }
-
-            static ClassIdentifier<T>* classIdentifier_s;
-    };
-
-    template <class T>
-    ClassIdentifier<T>* ClassIdentifier<T>::classIdentifier_s = 0;
-
-    /**
-        @brief Returns the only instance of this class.
-        @return The unique Identifier
-    */
-    template <class T>
-    inline ClassIdentifier<T>* ClassIdentifier<T>::getIdentifier()
-    {
-        // check if the static field has already been filled
-        if (ClassIdentifier<T>::classIdentifier_s == 0)
-            ClassIdentifier<T>::initialiseIdentifier();
-
-        return ClassIdentifier<T>::classIdentifier_s;
-    }
-
-    /**
-        @brief Does the same as getIdentifier() but sets the name if this wasn't done yet.
-        @param name The name of this Identifier
-        @return The Identifier
-    */
-    template <class T>
-    inline ClassIdentifier<T>* ClassIdentifier<T>::getIdentifier(const std::string& name)
-    {
-        ClassIdentifier<T>* identifier = ClassIdentifier<T>::getIdentifier();
-        identifier->setName(name);
-        return identifier;
-    }
-
-    /**
-        @brief Assigns the static field for the identifier singleton.
-    */
-    template <class T>
-    void ClassIdentifier<T>::initialiseIdentifier()
-    {
-        // Get the name of the class
-        std::string name = typeid(T).name();
-
-        // create a new identifier anyway. Will be deleted in Identifier::getIdentifier if not used.
-        ClassIdentifier<T>* proposal = new ClassIdentifier<T>();
-
-        // Get the entry from the map
-        ClassIdentifier<T>::classIdentifier_s = (ClassIdentifier<T>*)Identifier::getIdentifierSingleton(name, proposal);
-
-        if (ClassIdentifier<T>::classIdentifier_s == proposal)
-        {
-            COUT(4) << "*** Identifier: Requested Identifier for " << name << " was not yet existing and got created." << std::endl;
-        }
-        else
-        {
-            COUT(4) << "*** Identifier: Requested Identifier for " << name << " was already existing and got assigned." << std::endl;
-        }
-    }
-
-    /**
-        @brief Adds an object of the given type to the ObjectList.
-        @param object The object to add
-    */
-    template <class T>
-    bool ClassIdentifier<T>::initialiseObject(T* object, const std::string& className, bool bRootClass)
-    {
-        if (bRootClass)
-            COUT(5) << "*** Register Root-Object: " << className << std::endl;
-        else
-            COUT(5) << "*** Register Object: " << className << std::endl;
-
-        object->identifier_ = this;
-        if (Identifier::isCreatingHierarchy())
-        {
-            if (bRootClass && !object->parents_)
-                object->parents_ = new std::set<const Identifier*>();
-
-            if (object->parents_)
-            {
-                this->initializeClassHierarchy(object->parents_, bRootClass);
-                object->parents_->insert(object->parents_->end(), this);
-            }
-
-            object->setConfigValues();
-            return true;
-        }
-        else
-        {
-            COUT(5) << "*** ClassIdentifier: Added object to " << this->getName() << "-list." << std::endl;
-            object->metaList_->add(this->objects_, this->objects_->add(new ObjectListElement<T>(object)));
-
-            // Add pointer of type T to the map in the OrxonoxClass instance that enables "dynamic_casts"
-            object->objectPointers_.push_back(std::make_pair(this->getClassID(), static_cast<void*>(object)));
-            return false;
-        }
-    }
-
-    /**
-        @brief Updates the config-values of all existing objects of this class by calling their setConfigValues() function.
-    */
-    template <class T>
-    void ClassIdentifier<T>::updateConfigValues(bool updateChildren) const
-    {
-        if (!this->hasConfigValues())
-            return;
-
-        for (ObjectListIterator<T> it = ObjectList<T>::begin(); it; ++it)
-            it->setConfigValues();
-
-        if (updateChildren)
-            for (std::set<const Identifier*>::const_iterator it = this->getChildrenBegin(); it != this->getChildrenEnd(); ++it)
-                (*it)->updateConfigValues(false);
-    }
-
-
-    // ###############################
-    // ###      orxonox_cast       ###
-    // ###############################
-    /**
-    @brief
-        Casts on object of type OrxonoxClass to any derived type that is
-        registered in the class hierarchy.
-    @return
-        Returns NULL if the cast is not possible
-    @note
-        In case of NULL return (and using MSVC), a dynamic_cast might still be possible if
-        a class forgot to register its objects.
-        Also note that the function is implemented differently for GCC/MSVC.
-    */
-    template <class T, class U>
-    FORCEINLINE T orxonox_cast(U source)
-    {
-#ifdef ORXONOX_COMPILER_MSVC
-        typedef Loki::TypeTraits<typename Loki::TypeTraits<T>::PointeeType>::NonConstType ClassType;
-        if (source != NULL)
-            return source->template getDerivedPointer<ClassType>(ClassIdentifier<ClassType>::getIdentifier()->getClassID());
-        else
-            return NULL;
-#else
-        return dynamic_cast<T>(source);
-#endif
-    }
-
-
-    // ###############################
-    // ###   SubclassIdentifier    ###
-    // ###############################
-    //! The SubclassIdentifier acts almost like an Identifier, but has some prerequisites.
-    /**
-        You can only assign an Identifier that belongs to a class T (or derived) to a SubclassIdentifier<T>.
-        If you assign something else, the program aborts.
-        Because we know the minimum type, a dynamic_cast is done, which makes it easier to create a new object.
-    */
-    template <class T>
-    class SubclassIdentifier
-    {
-        public:
-            /**
-                @brief Constructor: Automaticaly assigns the Identifier of the given class.
-            */
-            SubclassIdentifier()
-            {
-                this->identifier_ = ClassIdentifier<T>::getIdentifier();
-            }
-
-            /**
-                @brief Copyconstructor: Assigns the given Identifier.
-                @param identifier The Identifier
-            */
-            SubclassIdentifier(Identifier* identifier)
-            {
-                this->operator=(identifier);
-            }
-
-            /**
-                @brief Overloading of the = operator: assigns the identifier and checks its type.
-                @param identifier The Identifier to assign
-                @return The SubclassIdentifier itself
-            */
-            SubclassIdentifier<T>& operator=(Identifier* identifier)
-            {
-                if (!identifier || !identifier->isA(ClassIdentifier<T>::getIdentifier()))
-                {
-                    COUT(1) << "An error occurred in SubclassIdentifier (Identifier.h):" << std::endl;
-                    if (identifier)
-                    {
-                        COUT(1) << "Error: Class " << identifier->getName() << " is not a " << ClassIdentifier<T>::getIdentifier()->getName() << "!" << std::endl;
-                        COUT(1) << "Error: SubclassIdentifier<" << ClassIdentifier<T>::getIdentifier()->getName() << "> = Class(" << identifier->getName() << ") is forbidden." << std::endl;
-                    }
-                    else
-                    {
-                        COUT(1) << "Error: Can't assign NULL identifier" << std::endl;
-                    }
-                }
-                else
-                {
-                    this->identifier_ = identifier;
-                }
-                return *this;
-            }
-
-            /**
-                @brief Overloading of the * operator: returns the assigned identifier.
-            */
-            inline Identifier* operator*() const
-            {
-                return this->identifier_;
-            }
-
-            /**
-                @brief Overloading of the -> operator: returns the assigned identifier.
-            */
-            inline Identifier* operator->() const
-            {
-                return this->identifier_;
-            }
-
-            /**
-                @brief Returns the assigned identifier. This allows you to assign a SubclassIdentifier to a normal Identifier*.
-            */
-            inline operator Identifier*() const
-            {
-                return this->identifier_;
-            }
-
-            /**
-                @brief Creates a new object of the type of the assigned Identifier and dynamic_casts it to the minimal type given by T.
-                @return The new object
-            */
-            T* fabricate(BaseObject* creator) const
-            {
-                BaseObject* newObject = this->identifier_->fabricate(creator);
-
-                // Check if the creation was successful
-                if (newObject)
-                {
-                    return orxonox_cast<T*>(newObject);
-                }
-                else
-                {
-                    // Something went terribly wrong
-                    if (this->identifier_)
-                    {
-                        COUT(1) << "An error occurred in SubclassIdentifier (Identifier.h):" << std::endl;
-                        COUT(1) << "Error: Class " << this->identifier_->getName() << " is not a " << ClassIdentifier<T>::getIdentifier()->getName() << "!" << std::endl;
-                        COUT(1) << "Error: Couldn't fabricate a new Object." << std::endl;
-                        COUT(1) << "Aborting..." << std::endl;
-                    }
-                    else
-                    {
-                        COUT(1) << "An error occurred in SubclassIdentifier (Identifier.h):" << std::endl;
-                        COUT(1) << "Error: Couldn't fabricate a new Object - Identifier is undefined." << std::endl;
-                        COUT(1) << "Aborting..." << std::endl;
-                    }
-
-                    assert(false);
-                    return 0;
-                }
-            }
-
-            /** @brief Returns the assigned identifier. @return The identifier */
-            inline Identifier* getIdentifier() const
-                { return this->identifier_; }
-
-        private:
-            Identifier* identifier_;            //!< The assigned identifier
-    };
-}
-
-#endif /* _Identifier_H__ */
Index: sandbox_light/src/libraries/core/Iterator.h
===================================================================
--- sandbox_light/src/libraries/core/Iterator.h	(revision 5788)
+++ 	(revision )
@@ -1,306 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Definition and implementation of the Iterator class.
-
-    The Iterator of a given class allows to iterate through an ObjectList. Objects in
-    this list are casted to the template argument of the Iterator.
-
-    Usage:
-    for (Iterator<myClass> it = anyidentifier->getObjects()->begin(); it != anyidentifier->getObjects()->end(); ++it)
-    {
-        it->someFunction(...);
-        myClass* myObject = *it;
-    }
-*/
-
-#ifndef _Iterator_H__
-#define _Iterator_H__
-
-#include "CorePrereqs.h"
-
-#include "Identifier.h"
-#include "ObjectListBase.h"
-
-namespace orxonox
-{
-    //! The Iterator allows to iterate through a given ObjectList
-    template <class T = OrxonoxClass>
-    class Iterator
-    {
-        public:
-            /**
-                @brief Constructor: Sets the element, whereon the iterator points, to zero.
-            */
-            inline Iterator()
-            {
-                this->element_ = 0;
-                this->list_ = 0;
-            }
-
-            /**
-                @brief Constructor: Sets this element to the exported element.
-                @param exp The exported element
-            */
-            inline Iterator(const ObjectListBase::Export& exp)
-            {
-                this->element_ = exp.element_;
-                this->list_ = exp.list_;
-                this->list_->registerIterator(this);
-            }
-
-            /**
-                @brief Constructor: Sets this element to the element of another Iterator.
-                @param other The other Iterator
-            */
-            inline Iterator(const Iterator<T>& other)
-            {
-                this->element_ = other.element_;
-                this->list_ = other.list_;
-                this->list_->registerIterator(this);
-            }
-
-            /**
-                @brief Constructor: Sets this element to a given element
-                @param element The element
-            */
-            template <class O>
-            inline Iterator(ObjectListElement<O>* element)
-            {
-                this->element_ = (element) ? static_cast<ObjectListBaseElement*>(element) : 0;
-                this->list_ = ClassIdentifier<O>::getIdentifier()->getObjects();
-                this->list_->registerIterator(this);
-            }
-
-            /**
-                @brief Constructor: Sets this element to the element an ObjectListIterator.
-                @param other The ObjectListIterator
-            */
-            template <class O>
-            inline Iterator(const ObjectListIterator<O>& other)
-            {
-                this->element_ = (other.element_) ? static_cast<ObjectListBaseElement*>(other.element_) : 0;
-                this->list_ = ClassIdentifier<O>::getIdentifier()->getObjects();
-                this->list_->registerIterator(this);
-            }
-
-            /**
-                @brief Unregisters the Iterator from the ObjectList.
-            */
-            inline ~Iterator()
-            {
-                this->list_->unregisterIterator(this);
-            }
-
-            /**
-                @brief Assigns an exported element.
-                @param exp The exported element
-            */
-            inline const Iterator<T>& operator=(const ObjectListBase::Export& exp)
-            {
-                if (this->list_)
-                    this->list_->unregisterIterator(this);
-
-                this->element_ = exp.element_;
-                this->list_ = exp.list_;
-                this->list_->registerIterator(this);
-
-                return (*this);
-            }
-
-            /**
-                @brief Assigns the element of another Iterator.
-                @param other The other Iterator
-            */
-            inline const Iterator<T>& operator=(const Iterator<T>& other)
-            {
-                if (this->list_)
-                    this->list_->unregisterIterator(this);
-
-                this->element_ = other.element_;
-                this->list_ = other.list_;
-                this->list_->registerIterator(this);
-
-                return (*this);
-            }
-
-            /**
-                @brief Assigns a given element.
-                @param element The element
-            */
-            template <class O>
-            inline const Iterator<T>& operator=(ObjectListElement<O>* element)
-            {
-                if (this->list_)
-                    this->list_->unregisterIterator(this);
-
-                this->element_ = (element) ? static_cast<ObjectListBaseElement*>(element) : 0;
-                this->list_ = ClassIdentifier<O>::getIdentifier()->getObjects();
-                this->list_->registerIterator(this);
-
-                return (*this);
-                return *this;
-            }
-
-            /**
-                @brief Assigns the element of an ObjectListIterator.
-                @param other The ObjectListIterator
-            */
-            template <class O>
-            inline const Iterator<T>& operator=(const ObjectListIterator<O>& other)
-            {
-                if (this->list_)
-                    this->list_->unregisterIterator(this);
-
-                this->element_ = (other.element_) ? static_cast<ObjectListBaseElement*>(other.element_) : 0;
-                this->list_ = ClassIdentifier<O>::getIdentifier()->getObjects();
-                this->list_->registerIterator(this);
-
-                return (*this);
-            }
-
-            /**
-                @brief Overloading of the ++it operator: Iterator points to the next object in the list.
-                @return The Iterator itself
-            */
-            inline const Iterator<T>& operator++()
-            {
-                if (this->element_)
-                    this->element_ = this->element_->next_;
-                return *this;
-            }
-
-            /**
-                @brief Overloading of the it++ operator: Iterator points to the next object in the list.
-                @return The Iterator itself
-            */
-            inline Iterator<T> operator++(int i)
-            {
-                Iterator<T> copy = *this;
-                if (this->element_)
-                    this->element_ = this->element_->next_;
-                return copy;
-            }
-
-            /**
-                @brief Overloading of the --it operator: Iterator points to the previous object in the list.
-                @return The Iterator itself
-            */
-            inline const Iterator<T>& operator--()
-            {
-                if (this->element_)
-                    this->element_ = this->element_->prev_;
-                return *this;
-            }
-
-            /**
-                @brief Overloading of the it-- operator: Iterator points to the previous object in the list.
-                @return The Iterator itself
-            */
-            inline Iterator<T> operator--(int i)
-            {
-                Iterator<T> copy = *this;
-                if (this->element_)
-                    this->element_ = this->element_->prev_;
-                return copy;
-            }
-
-            /**
-                @brief Overloading of the *it operator: returns the pointer to the object.
-                @return The object the Iterator points at
-            */
-            inline T* operator*() const
-            {
-                if (this->element_)
-                    return orxonox_cast<T*>(this->element_->objectBase_);
-                else
-                    return 0;
-            }
-
-            /**
-                @brief Overloading of the it-> operator: returns the pointer to the object.
-                @return The object the Iterator points at
-            */
-            inline T* operator->() const
-            {
-                if (this->element_)
-                    return orxonox_cast<T*>(this->element_->objectBase_);
-                else
-                    return 0;
-            }
-
-            /**
-                @brief Overloading of the typecast-operator to bool: returns true if the iterator points to an existing object.
-                @return True if the Iterator points to an existing object.
-            */
-            inline operator bool() const
-            {
-                return (this->element_ != 0);
-            }
-
-            /**
-                @brief Overloading of the == operator to compare with another Iterator.
-                @param compare The other Iterator
-                @return True if the iterators point to the same element
-            */
-            inline bool operator==(const Iterator<T>& compare) const
-            {
-                return (this->element_ == compare.element_);
-            }
-
-            /**
-                @brief Overloading of the != operator to compare with another Iterator.
-                @param compare The other Iterator
-                @return True if the iterators point to different elements
-            */
-            inline bool operator!=(const Iterator<T>& compare) const
-            {
-                return (this->element_ != compare.element_);
-            }
-
-            /**
-                @brief Increments the Iterator if it points at the given object.
-                @param object The object to compare with
-            */
-            inline void incrementIfEqual(OrxonoxClass* object)
-            {
-                if (this->element_ && this->element_->objectBase_ == object)
-                    this->operator++();
-            }
-
-        protected:
-            ObjectListBaseElement* element_;       //!< The element the Iterator points at
-            ObjectListBase* list_;                 //!< The list wherein the element is
-    };
-
-    typedef Iterator<OrxonoxClass> BaseIterator;
-}
-
-#endif /* _Iterator_H__ */
Index: sandbox_light/src/libraries/core/Language.cc
===================================================================
--- sandbox_light/src/libraries/core/Language.cc	(revision 5788)
+++ 	(revision )
@@ -1,326 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Implementation of the Language and the LanguageEntry classes.
-*/
-
-#include "Language.h"
-
-#include <fstream>
-#include <boost/filesystem.hpp>
-
-#include "util/Debug.h"
-#include "Core.h"
-
-namespace orxonox
-{
-    // ###############################
-    // ###      LanguageEntry      ###
-    // ###############################
-    /**
-        @brief Constructor: Sets the default entry.
-        @param fallbackEntry The default entry
-    */
-    LanguageEntry::LanguageEntry(const std::string& fallbackEntry)
-    {
-        this->fallbackEntry_ = fallbackEntry;
-        this->localisedEntry_ = fallbackEntry; // Set the localisation to the fallback entry, for the case that no translation gets assigned
-        this->bLocalisationSet_ = false;
-    }
-
-    /**
-        @brief Sets the localisation of the entry.
-        @param localisation The localisation
-    */
-    void LanguageEntry::setLocalisation(const std::string& localisation)
-    {
-        // Check if the translation is more than just an empty string
-        if ((localisation != "") && (localisation.size() > 0))
-        {
-            this->localisedEntry_ = localisation;
-            this->bLocalisationSet_ = true;
-        }
-        else
-            this->localisedEntry_ = this->fallbackEntry_;
-    }
-
-    /**
-        @brief Sets the default entry.
-        @param fallbackEntry The default entry
-    */
-    void LanguageEntry::setDefault(const std::string& fallbackEntry)
-    {
-        // If the default entry changes and the translation wasn't set yet, use the new default entry as translation
-        if (!this->bLocalisationSet_)
-            this->localisedEntry_ = fallbackEntry;
-
-        this->fallbackEntry_ = fallbackEntry;
-    }
-
-    // ###############################
-    // ###        Language         ###
-    // ###############################
-
-    Language* Language::singletonPtr_s = 0;
-
-    /**
-        @brief Constructor: Reads the default language file and sets some values.
-    */
-    Language::Language()
-    {
-        this->defaultLanguage_ = "default";
-        this->defaultLocalisation_ = "ERROR: LANGUAGE ENTRY DOESN'T EXIST!";
-
-        // Read the default language file to create all known LanguageEntry objects
-        this->readDefaultLanguageFile();
-    }
-
-    /**
-        @brief Destructor: Deletes all language entries.
-    */
-    Language::~Language()
-    {
-        for (std::map<std::string, LanguageEntry*>::iterator it = this->languageEntries_.begin(); it != this->languageEntries_.end(); ++it)
-            delete (it->second);
-    }
-
-    /**
-        @brief Creates a new LanguageEntry with a given label and a given default entry.
-        @param label The label of the entry
-        @param entry The default entry
-        @return The created LanguageEntry object
-    */
-    LanguageEntry* Language::createEntry(const LanguageEntryLabel& label, const std::string& entry)
-    {
-        std::map<std::string, LanguageEntry*>::const_iterator it = this->languageEntries_.find(label);
-
-        // Make sure we don't create a duplicate entry
-        if (it == this->languageEntries_.end())
-        {
-            LanguageEntry* newEntry = new LanguageEntry(entry);
-            newEntry->setLabel(label);
-            this->languageEntries_[label] = newEntry;
-            return newEntry;
-        }
-
-        COUT(2) << "Warning: Language entry " << label << " is duplicate in " << getFilename(this->defaultLanguage_) << "!" << std::endl;
-        return it->second;
-    }
-
-    /**
-        @brief Adds a new LanguageEntry, if it's not already existing.
-        @param label The label of the entry
-        @param entry The default entry
-    */
-    void Language::addEntry(const LanguageEntryLabel& label, const std::string& entry)
-    {
-        COUT(5) << "Language: Called addEntry with\n  label: " << label << "\n  entry: " <<  entry << std::endl;
-        std::map<std::string, LanguageEntry*>::const_iterator it = this->languageEntries_.find(label);
-        if (it == this->languageEntries_.end())
-        {
-            // The entry isn't available yet, meaning it's new, so create it
-            this->createEntry(label, entry);
-        }
-        else if (it->second->getDefault().compare(entry) == 0)
-        {
-            // The entry is available and the default string is the same, so return because everything is fine
-            return;
-        }
-        else
-        {
-            // The defined default entry is not the same as in the default language file - change it to the new entry
-            it->second->setDefault(entry);
-        }
-
-        // Write the default language file because either a new entry was created or an existing entry has changed
-        this->writeDefaultLanguageFile();
-
-    }
-
-    /**
-        @brief Returns the localisation of a given entry.
-        @param label The label of the entry
-        @return The localisation
-    */
-    const std::string& Language::getLocalisation(const LanguageEntryLabel& label) const
-    {
-        std::map<std::string, LanguageEntry*>::const_iterator it = this->languageEntries_.find(label);
-        if (it != this->languageEntries_.end())
-            return it->second->getLocalisation();
-        else
-        {
-            // Uh, oh, an undefined entry was requested: return the default string
-            COUT(2) << "Warning: Language entry \"" << label << "\" not found!" << std::endl;
-            return this->defaultLocalisation_;
-        }
-    }
-
-    /**
-        @brief Creates the name of the language file out of the languages name.
-        @param language The name of the language
-        @return The filename
-    */
-    std::string Language::getFilename(const std::string& language)
-    {
-        return std::string("translation_" + language + ".lang");
-    }
-
-    /**
-        @brief Reads the default language file and creates a LanguageEntry objects for every entry.
-    */
-    void Language::readDefaultLanguageFile()
-    {
-        COUT(4) << "Read default language file." << std::endl;
-
-        boost::filesystem::path filepath(Core::getConfigPath() / getFilename(this->defaultLanguage_));
-
-        // This creates the file if it's not existing
-        std::ofstream createFile;
-        createFile.open(filepath.string().c_str(), std::fstream::app);
-        createFile.close();
-
-        // Open the file
-        std::ifstream file;
-        file.open(filepath.string().c_str(), std::fstream::in);
-
-        if (!file.is_open())
-        {
-            COUT(1) << "An error occurred in Language.cc:" << std::endl;
-            COUT(1) << "Error: Couldn't open file " << getFilename(this->defaultLanguage_) << " to read the default language entries!" << std::endl;
-            return;
-        }
-
-        // Iterate through the file and create the LanguageEntries
-        while (file.good() && !file.eof())
-        {
-            std::string lineString;
-            std::getline(file, lineString);
-
-            // Check if the line is empty
-            if ((lineString != "") && (lineString.size() > 0))
-            {
-                size_t pos = lineString.find('=');
-
-                // Check if the length is at least 3 and if there's an entry before and behind the =
-                if (pos > 0 && pos < (lineString.size() - 1) && lineString.size() >= 3)
-                    this->createEntry(lineString.substr(0, pos), lineString.substr(pos + 1));
-                else
-                {
-                    COUT(2) << "Warning: Invalid language entry \"" << lineString << "\" in " << getFilename(this->defaultLanguage_) << std::endl;
-                }
-            }
-        }
-
-        file.close();
-    }
-
-    /**
-        @brief Reads the language file of the configured language and assigns the localisation to the corresponding LanguageEntry object.
-    */
-    void Language::readTranslatedLanguageFile()
-    {
-        COUT(4) << "Read translated language file (" << Core::getLanguage() << ")." << std::endl;
-
-        boost::filesystem::path filepath(Core::getConfigPath() / getFilename(Core::getLanguage()));
-
-        // Open the file
-        std::ifstream file;
-        file.open(filepath.string().c_str(), std::fstream::in);
-
-        if (!file.is_open())
-        {
-            COUT(1) << "An error occurred in Language.cc:" << std::endl;
-            COUT(1) << "Error: Couldn't open file " << getFilename(Core::getLanguage()) << " to read the translated language entries!" << std::endl;
-            Core::resetLanguage();
-            COUT(3) << "Info: Reset language to " << this->defaultLanguage_ << "." << std::endl;
-            return;
-        }
-
-        // Iterate through the file and create the LanguageEntries
-        while (file.good() && !file.eof())
-        {
-            std::string lineString;
-            std::getline(file, lineString);
-
-            // Check if the line is empty
-            if ((lineString != "") && (lineString.size() > 0))
-            {
-                size_t pos = lineString.find('=');
-
-                // Check if the length is at least 3 and if there's an entry before and behind the =
-                if (pos > 0 && pos < (lineString.size() - 1) && lineString.size() >= 3)
-                {
-                    std::map<std::string, LanguageEntry*>::const_iterator it = this->languageEntries_.find(lineString.substr(0, pos));
-
-                    // Check if the entry exists
-                    if (it != this->languageEntries_.end())
-                        it->second->setLocalisation(lineString.substr(pos + 1));
-                    else
-                        this->createEntry(lineString.substr(0, pos), this->defaultLocalisation_)->setLocalisation(lineString.substr(pos + 1));
-                }
-                else
-                {
-                    COUT(2) << "Warning: Invalid language entry \"" << lineString << "\" in " << getFilename(Core::getLanguage()) << std::endl;
-                }
-            }
-        }
-
-        file.close();
-    }
-
-    /**
-        @brief Writes all default entries to the default language file.
-    */
-    void Language::writeDefaultLanguageFile() const
-    {
-        COUT(4) << "Language: Write default language file." << std::endl;
-
-        boost::filesystem::path filepath(Core::getConfigPath() / getFilename(this->defaultLanguage_));
-
-        // Open the file
-        std::ofstream file;
-        file.open(filepath.string().c_str(), std::fstream::out);
-
-        if (!file.is_open())
-        {
-            COUT(1) << "An error occurred in Language.cc:" << std::endl;
-            COUT(1) << "Error: Couldn't open file " << getFilename(this->defaultLanguage_) << " to write the default language entries!" << std::endl;
-            return;
-        }
-
-        // Iterate through the list an write the lines into the file
-        for (std::map<std::string, LanguageEntry*>::const_iterator it = this->languageEntries_.begin(); it != this->languageEntries_.end(); ++it)
-        {
-            file << (*it).second->getLabel() << "=" << (*it).second->getDefault() << std::endl;
-        }
-
-        file.close();
-    }
-}
Index: sandbox_light/src/libraries/core/Language.h
===================================================================
--- sandbox_light/src/libraries/core/Language.h	(revision 5788)
+++ 	(revision )
@@ -1,144 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Definition of the Language and the LanguageEntry class.
-
-    The Language class is used, to get a localisation of a string in the configured language.
-    The string is identified by another string, the label of the entry.
-    If the translation in the configured language isn't available, the default entry, defined in the code, is used.
-
-    Usage:
-     - Set the entry with the default string:
-       Language::getInstance()->addEntry("label of the entry", "the string to translate");
-
-     - Get the localisation of the entry in the configured language:
-       std::cout << Language::getInstance()->getLocalisation("name of the entry") << std::endl;
-*/
-
-#ifndef _Language_H__
-#define _Language_H__
-
-#include "CorePrereqs.h"
-
-#include <map>
-#include <string>
-#include <cassert>
-#include "util/Singleton.h"
-
-#define AddLanguageEntry(label, fallbackstring) \
-    orxonox::Language::getInstance().addEntry(label, fallbackstring)
-
-#define GetLocalisation(label) \
-    orxonox::Language::getInstance().getLocalisation(label)
-
-
-namespace orxonox
-{
-    // ###############################
-    // ###      LanguageEntry      ###
-    // ###############################
-    //! The LanguageEntry class stores the default- and the translated string of a given entry in the language file.
-    class _CoreExport LanguageEntry
-    {
-        public:
-            explicit LanguageEntry(const std::string& fallbackEntry);
-            void setLocalisation(const std::string& localisation);
-            void setDefault(const std::string& fallbackEntry);
-
-            /**
-              @brief Returns the localised entry in the configured language.
-              @return The translated entry
-            */
-            inline const std::string& getLocalisation()
-                { return this->localisedEntry_; }
-
-            /**
-              @brief Returns the default entry.
-              @return The default entry
-            */
-            inline const std::string& getDefault()
-                { return this->fallbackEntry_; }
-
-            /**
-                @brief Sets the label of this entry.
-                @param label The label
-            */
-            inline void setLabel(const LanguageEntryLabel& label)
-                { this->label_ = label; }
-
-            /**
-                @brief Returns the label of this entry.
-                @return The label
-            */
-            inline const LanguageEntryLabel& getLabel() const
-                { return this->label_; }
-
-        private:
-            LanguageEntryLabel label_;              //!< The label of the entry
-            std::string fallbackEntry_;             //!< The default entry: Used, if no translation is available or no language configured
-            std::string localisedEntry_;            //!< The localised entry in the configured language
-            bool bLocalisationSet_;                 //!< True if the translation was set
-    };
-
-
-    // ###############################
-    // ###         Language        ###
-    // ###############################
-    //! The Language class manges the language files and entries and stores the LanguageEntry objects in a map.
-    class _CoreExport Language : public Singleton<Language>
-    {
-        friend class Singleton<Language>;
-        friend class CoreConfiguration;
-
-        public:
-            Language();
-            ~Language();
-
-            void addEntry(const LanguageEntryLabel& label, const std::string& entry);
-            const std::string& getLocalisation(const LanguageEntryLabel& label) const;
-
-        private:
-            Language(const Language&);
-
-            void readDefaultLanguageFile();
-            void readTranslatedLanguageFile();
-            void writeDefaultLanguageFile() const;
-            static std::string getFilename(const std::string& language);
-            LanguageEntry* createEntry(const LanguageEntryLabel& label, const std::string& entry);
-
-            std::string defaultLanguage_;                           //!< The default language
-            std::string defaultLocalisation_;                       //!< The returned string, if an entry unavailable entry is requested
-            std::map<std::string, LanguageEntry*> languageEntries_; //!< A map to store all LanguageEntry objects and their labels
-
-            static Language* singletonPtr_s;
-    };
-}
-
-#endif /* _Language_H__ */
Index: sandbox_light/src/libraries/core/MetaObjectList.cc
===================================================================
--- sandbox_light/src/libraries/core/MetaObjectList.cc	(revision 5788)
+++ 	(revision )
@@ -1,103 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Implementation of the MetaObjectList class.
-*/
-
-#include "MetaObjectList.h"
-
-#include "util/Debug.h"
-#include "Identifier.h"
-#include "ObjectListBase.h"
-
-namespace orxonox
-{
-    // ###############################
-    // ###  MetaObjectListElement  ###
-    // ###############################
-    /**
-        @brief Destructor: Removes the ObjectListBaseElement from the ObjectListBase by linking next_ and prev_ of the ObjectListBaseElement.
-    */
-    MetaObjectListElement::~MetaObjectListElement()
-    {
-        COUT(5) << "*** MetaObjectList: Removing Object from " << this->list_->getIdentifier()->getName() << "-list." << std::endl;
-        this->list_->notifyIterators(this->element_->objectBase_);
-
-        if (this->element_->next_)
-            this->element_->next_->prev_ = this->element_->prev_;
-        else
-            this->list_->last_ = this->element_->prev_; // If there is no next_, we deleted the last object and have to update the last_ pointer of the list
-
-        if (this->element_->prev_)
-            this->element_->prev_->next_ = this->element_->next_;
-        else
-            this->list_->first_ = this->element_->next_; // If there is no prev_, we deleted the first object and have to update the first_ pointer of the list
-
-        delete this->element_;
-    }
-
-
-    // ###############################
-    // ###     MetaObjectList      ###
-    // ###############################
-    /**
-        @brief Constructor: Sets first_ to zero.
-    */
-    MetaObjectList::MetaObjectList()
-    {
-        this->first_ = 0;
-    }
-
-    /**
-        @brief Destructor: Removes all elements from the list, causing them to remove the stored ObjectListElement from the ObjectList.
-    */
-    MetaObjectList::~MetaObjectList()
-    {
-        MetaObjectListElement* temp;
-        while (this->first_)
-        {
-            temp = this->first_->next_;
-            delete this->first_;
-            this->first_ = temp;
-        }
-    }
-
-    /**
-        @brief Adds an ObjectList and an element of that list to the MetaObjectList.
-        @param list The ObjectList wherein the element is
-        @param element The element wherein the object is
-    */
-    void MetaObjectList::add(ObjectListBase* list, ObjectListBaseElement* element)
-    {
-        MetaObjectListElement* temp = this->first_;
-        this->first_ = new MetaObjectListElement(list, element);
-        this->first_->next_ = temp;
-    }
-}
Index: sandbox_light/src/libraries/core/MetaObjectList.h
===================================================================
--- sandbox_light/src/libraries/core/MetaObjectList.h	(revision 5788)
+++ 	(revision )
@@ -1,84 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Definition of the MetaObjectList class.
-
-    The MetaObjectList is a single-linked list, containing all list-elements and their
-    lists wherein the object, owning the MetaObjectList, is registered.
-    This allows much faster deletion of objects because no iteration is needed.
-*/
-
-#ifndef _MetaObjectList_H__
-#define _MetaObjectList_H__
-
-#include "CorePrereqs.h"
-
-namespace orxonox
-{
-    // ###############################
-    // ###  MetaObjectListElement  ###
-    // ###############################
-    //! The list-element of the MetaObjectList
-    class _CoreExport MetaObjectListElement
-    {
-        public:
-            /**
-                @brief Constructor: Creates the list-element with given list and element.
-            */
-            MetaObjectListElement(ObjectListBase* list, ObjectListBaseElement* element) : next_(0), element_(element), list_(list) {}
-            ~MetaObjectListElement();
-
-            MetaObjectListElement* next_;       //!< The next Element in the list
-            ObjectListBaseElement* element_;    //!< The list element, containing the object
-            ObjectListBase* list_;              //!< The list, containing the element
-    };
-
-
-    // ###############################
-    // ###     MetaObjectList      ###
-    // ###############################
-    //!  The MetaObjectList contains ObjectListBaseElements and their ObjectListBases.
-    /**
-        The MetaObjectList is a single-linked list, containing all list-elements and their
-        lists wherein the object that owns the MetaObjectList is registered.
-        This allows much faster deletion of objects because no iteration is needed.
-    */
-    class _CoreExport MetaObjectList
-    {
-        public:
-            MetaObjectList();
-            ~MetaObjectList();
-            void add(ObjectListBase* list, ObjectListBaseElement* element);
-
-            MetaObjectListElement* first_;      //!< The first element in the list
-    };
-}
-
-#endif /* _MetaObjectList_H__ */
Index: sandbox_light/src/libraries/core/ObjectList.h
===================================================================
--- sandbox_light/src/libraries/core/ObjectList.h	(revision 5788)
+++ 	(revision )
@@ -1,79 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Definition and implementation of the ObjectList class.
-
-    The ObjectList is a wrapper of an ObjectListBase of a given class.
-    Use Iterator<class> to iterate through all objects of the class.
-*/
-
-#ifndef _ObjectList_H__
-#define _ObjectList_H__
-
-#include "CorePrereqs.h"
-
-#include "Identifier.h"
-#include "ObjectListIterator.h"
-
-namespace orxonox
-{
-    // ###############################
-    // ###       ObjectList        ###
-    // ###############################
-    //! The ObjectList contains all objects of the given class.
-    /**
-        Wraps the ObjectListBase of the corresponding Identifier.
-        Use ObjectListIterator<class> to iterate through all objects in the list.
-    */
-    template <class T>
-    class ObjectList
-    {
-        public:
-            typedef ObjectListIterator<T> iterator;
-
-            /** @brief Returns an Iterator to the first element in the list. @return The Iterator */
-            inline static ObjectListElement<T>* begin()
-                { return ((ObjectListElement<T>*)ClassIdentifier<T>::getIdentifier()->getObjects()->begin().element_); }
-
-            /** @brief Returns an Iterator to the element after the last element in the list. @return The Iterator */
-            inline static ObjectListElement<T>* end()
-                { return ((ObjectListElement<T>*)ClassIdentifier<T>::getIdentifier()->getObjects()->end().element_); }
-
-            /** @brief Returns an Iterator to the last element in the list. @return The Iterator */
-            inline static ObjectListElement<T>* rbegin()
-                { return ((ObjectListElement<T>*)ClassIdentifier<T>::getIdentifier()->getObjects()->rbegin().element_); }
-
-            /** @brief Returns an Iterator to the element before the first element in the list. @return The Iterator */
-            inline static ObjectListElement<T>* rend()
-                { return ((ObjectListElement<T>*)ClassIdentifier<T>::getIdentifier()->getObjects()->rend().element_); }
-    };
-}
-
-#endif /* _ObjectList_H__ */
Index: sandbox_light/src/libraries/core/ObjectListBase.cc
===================================================================
--- sandbox_light/src/libraries/core/ObjectListBase.cc	(revision 5788)
+++ 	(revision )
@@ -1,106 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Implementation of the ObjectListBase class.
-
-    The ObjectListBase is a double-linked list, used by Identifiers to store all objects of a given class.
-    Newly created objects are added through the RegisterObject-macro in its constructor.
-*/
-
-#include "ObjectListBase.h"
-
-#include <set>
-#include "Identifier.h"
-#include "Iterator.h"
-#include "ObjectListIterator.h"
-
-namespace orxonox
-{
-    /**
-        @brief Constructor: Sets default values.
-    */
-    ObjectListBase::ObjectListBase(Identifier* identifier)
-    {
-        this->identifier_ = identifier;
-        this->first_ = 0;
-        this->last_ = 0;
-    }
-
-    /**
-        @brief Destructor: Deletes all list-elements, but NOT THE OBJECTS.
-    */
-    ObjectListBase::~ObjectListBase()
-    {
-        ObjectListBaseElement* temp;
-        while (this->first_)
-        {
-            temp = this->first_->next_;
-            delete this->first_;
-            this->first_ = temp;
-        }
-    }
-
-    /**
-        @brief Increases all Iterators that currently point on the given element (because it gets removed).
-        @param element The element that gets removed
-    */
-    void ObjectListBase::notifyIterators(OrxonoxClass* object) const
-    {
-        for (std::vector<void*>::const_iterator it = this->iterators_.begin(); it != this->iterators_.end(); ++it)
-            ((Iterator<OrxonoxClass>*)(*it))->incrementIfEqual(object);
-        for (std::vector<void*>::const_iterator it = this->objectListIterators_.begin(); it != this->objectListIterators_.end(); ++it)
-            ((ObjectListIterator<OrxonoxClass>*)(*it))->incrementIfEqual(object);
-    }
-
-    /**
-        @brief Adds a new object to the end of the list.
-        @param object The object to add
-        @return The pointer to the new ObjectListBaseElement, needed by the MetaObjectList of the added object
-    */
-    ObjectListBaseElement* ObjectListBase::add(ObjectListBaseElement* element)
-    {
-        if (!this->last_)
-        {
-            // If the list is empty
-            this->last_ = element;
-            this->first_ = this->last_; // There's only one object in the list now
-        }
-        else
-        {
-            // If the list isn't empty
-            ObjectListBaseElement* temp = this->last_;
-            this->last_ = element;
-            this->last_->prev_ = temp;
-            temp->next_ = this->last_;
-        }
-
-        return this->last_;
-    }
-}
Index: sandbox_light/src/libraries/core/ObjectListBase.h
===================================================================
--- sandbox_light/src/libraries/core/ObjectListBase.h	(revision 5788)
+++ 	(revision )
@@ -1,150 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Definition of the ObjectListBase class.
-
-    The ObjectListBase is a double-linked list, used by Identifiers to store all objects of a given class.
-    Newly created objects are added through the RegisterObject-macro in its constructor.
-*/
-
-#ifndef _ObjectListBase_H__
-#define _ObjectListBase_H__
-
-#include "CorePrereqs.h"
-
-#include <vector>
-#include "OrxonoxClass.h"
-
-namespace orxonox
-{
-    // ###############################
-    // ###  ObjectListBaseElement  ###
-    // ###############################
-    //! The list-element of the ObjectListBase
-    class _CoreExport ObjectListBaseElement
-    {
-        public:
-            /**
-                @brief Constructor: Creates the list-element with an object.
-                @param object The object to store
-            */
-            ObjectListBaseElement(OrxonoxClass* objectBase) : next_(0), prev_(0), objectBase_(objectBase) {}
-
-            ObjectListBaseElement* next_;       //!< The next element in the list
-            ObjectListBaseElement* prev_;       //!< The previous element in the list
-            OrxonoxClass* objectBase_;
-    };
-
-
-    // ###############################
-    // ###    ObjectListElement    ###
-    // ###############################
-    //! The list-element that actually contains the object
-    template <class T>
-    class ObjectListElement : public ObjectListBaseElement
-    {
-        public:
-            ObjectListElement(T* object) : ObjectListBaseElement(static_cast<OrxonoxClass*>(object)), object_(object) {}
-            T* object_;              //!< The object
-    };
-
-
-    // ###############################
-    // ###     ObjectListBase      ###
-    // ###############################
-    //! The ObjectListBase contains all objects of a given class.
-    /**
-        The ObjectListBase is used by Identifiers to store all objects of their given class.
-        Use ObjectList<T> to get the list of all T's and Iterator<T> to iterate through them.
-    */
-    class _CoreExport ObjectListBase
-    {
-        friend class MetaObjectListElement;
-
-        public:
-            ObjectListBase(Identifier* identifier);
-            ~ObjectListBase();
-
-            ObjectListBaseElement* add(ObjectListBaseElement* element);
-
-            struct Export
-            {
-                Export(ObjectListBase* list, ObjectListBaseElement* element) : list_(list), element_(element) {}
-                ObjectListBase* list_;
-                ObjectListBaseElement* element_;
-            };
-
-            /** @brief Returns a pointer to the first element in the list. @return The element */
-            inline Export begin() { return ObjectListBase::Export(this, this->first_); }
-            /** @brief Returns a pointer to the element after the last element in the list. @return The element */
-            inline Export end() { return ObjectListBase::Export(this, 0); }
-            /** @brief Returns a pointer to the last element in the list. @return The element */
-            inline Export rbegin() { return ObjectListBase::Export(this, this->last_); }
-            /** @brief Returns a pointer to the element in front of the first element in the list. @return The element */
-            inline Export rend() { return ObjectListBase::Export(this, 0); }
-
-            inline void registerIterator(void* iterator) { this->iterators_.push_back(iterator); }
-            inline void unregisterIterator(void* iterator)
-            {
-                for (unsigned int i = 0; i < this->iterators_.size(); ++i)
-                {
-                    if (iterators_[i] == iterator)
-                    {
-                        iterators_.erase(iterators_.begin() + i);
-                        break;
-                    }
-                }
-            }
-            inline void registerObjectListIterator(void* iterator) { this->objectListIterators_.push_back(iterator); }
-            inline void unregisterObjectListIterator(void* iterator)
-            {
-                for (unsigned int i = 0; i < this->objectListIterators_.size(); ++i)
-                {
-                    if (objectListIterators_[i] == iterator)
-                    {
-                        objectListIterators_.erase(objectListIterators_.begin() + i);
-                        break;
-                    }
-                }
-            }
-            void notifyIterators(OrxonoxClass* object) const;
-
-            inline Identifier* getIdentifier() const { return this->identifier_; }
-
-        private:
-            Identifier* identifier_;                 //!< The Iterator owning this list
-            ObjectListBaseElement* first_;           //!< The first element in the list
-            ObjectListBaseElement* last_;            //!< The last element in the list
-            std::vector<void*> iterators_;           //!< A list of Iterators pointing on an element in this list
-            std::vector<void*> objectListIterators_; //!< A list of ObjectListIterators pointing on an element in this list
-    };
-}
-
-#endif /* _ObjectListBase_H__ */
Index: sandbox_light/src/libraries/core/ObjectListIterator.h
===================================================================
--- sandbox_light/src/libraries/core/ObjectListIterator.h	(revision 5788)
+++ 	(revision )
@@ -1,233 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Definition and implementation of the Iterator class.
-
-    The ObjectListIterator of a given class allows to iterate through the
-    ObjectList of this class, containing all objects of that type.
-    This is the only way to access the objects stored in an ObjectList.
-
-    Usage:
-    for (ObjectListIterator<myClass> it = ObjectList<myClass>::begin(); it != ObjectList<myClass>::end(); ++it)
-    {
-        it->someFunction(...);
-        myClass* myObject = *it;
-    }
-*/
-
-#ifndef _ObjectListIterator_H__
-#define _ObjectListIterator_H__
-
-#include "CorePrereqs.h"
-#include "Identifier.h"
-#include "ObjectList.h"
-
-namespace orxonox
-{
-    //! The Iterator allows to iterate through the ObjectList of a given class.
-    template <class T>
-    class ObjectListIterator
-    {
-        template <class I>
-        friend class Iterator;
-
-        public:
-            /**
-                @brief Constructor: Sets the element, whereon the ObjectListIterator points, to zero.
-            */
-            inline ObjectListIterator()
-            {
-                this->element_ = 0;
-                ClassIdentifier<T>::getIdentifier()->getObjects()->registerObjectListIterator(this);
-            }
-
-            /**
-                @brief Constructor: Sets this element to a given element.
-                @param element The element to start with
-            */
-            inline ObjectListIterator(ObjectListElement<T>* element)
-            {
-                this->element_ = element;
-                ClassIdentifier<T>::getIdentifier()->getObjects()->registerObjectListIterator(this);
-            }
-
-            /**
-                @brief Constructor: Sets this element to the element of another ObjectListIterator.
-                @param other The other ObjectListIterator
-            */
-            inline ObjectListIterator(const ObjectListIterator<T>& other)
-            {
-                this->element_ = other.element_;
-                ClassIdentifier<T>::getIdentifier()->getObjects()->registerObjectListIterator(this);
-            }
-
-            /**
-                @brief Unregisters the ObjectListIterator from the ObjectList.
-            */
-            inline ~ObjectListIterator()
-            {
-                ClassIdentifier<T>::getIdentifier()->getObjects()->unregisterObjectListIterator(this);
-            }
-
-            /**
-                @brief Assigns an ObjectListElement.
-                @param element The ObjectListElement
-            */
-            inline const ObjectListIterator<T>& operator=(ObjectListElement<T>* element)
-            {
-                this->element_ = element;
-                return (*this);
-            }
-
-            /**
-                @brief Assigns the element of another ObjectListIterator.
-                @param element The other ObjectListIterator
-            */
-            inline const ObjectListIterator<T>& operator=(const ObjectListIterator<T>& other)
-            {
-                this->element_ = other.element_;
-                return (*this);
-            }
-
-            /**
-                @brief Overloading of the ++it operator: ObjectListIterator points to the next object in the list.
-                @return The ObjectListIterator itself
-            */
-            inline const ObjectListIterator<T>& operator++()
-            {
-                if (this->element_)
-                    this->element_ = static_cast<ObjectListElement<T>*>(this->element_->next_);
-                return *this;
-            }
-
-            /**
-                @brief Overloading of the it++ operator: ObjectListIterator points to the next object in the list.
-                @return The ObjectListIterator itself
-            */
-            inline ObjectListIterator<T> operator++(int i)
-            {
-                ObjectListIterator<T> copy = *this;
-                if (this->element_)
-                    this->element_ = static_cast<ObjectListElement<T>*>(this->element_->next_);
-                return copy;
-            }
-
-            /**
-                @brief Overloading of the --it operator: ObjectListIterator points to the previous object in the list.
-                @return The ObjectListIterator itself
-            */
-            inline const ObjectListIterator<T>& operator--()
-            {
-                if (this->element_)
-                    this->element_ = static_cast<ObjectListElement<T>*>(this->element_->prev_);
-                return *this;
-            }
-
-            /**
-                @brief Overloading of the it-- operator: ObjectListIterator points to the previous object in the list.
-                @return The ObjectListIterator itself
-            */
-            inline ObjectListIterator<T> operator--(int i)
-            {
-                ObjectListIterator<T> copy = *this;
-                if (this->element_)
-                    this->element_ = static_cast<ObjectListElement<T>*>(this->element_->prev_);
-                return copy;
-            }
-
-            /**
-                @brief Overloading of the *it operator: returns the pointer to the object.
-                @return The object the ObjectListIterator points at
-            */
-            inline T* operator*() const
-            {
-                if (this->element_)
-                    return this->element_->object_;
-                else
-                    return 0;
-            }
-
-            /**
-                @brief Overloading of the it-> operator: returns the pointer to the object.
-                @return The object the ObjectListIterator points at
-            */
-            inline T* operator->() const
-            {
-                if (this->element_)
-                    return this->element_->object_;
-                else
-                    return 0;
-            }
-
-            /**
-                @brief Overloading of the typecast-operator to bool: returns true if the ObjectListIterator points to an existing object.
-                @return True if the ObjectListIterator points to an existing object.
-            */
-            inline operator bool() const
-            {
-                return (this->element_ != 0);
-            }
-
-            /**
-                @brief Overloading of the == operator to compare with another ObjectListIterator.
-                @param compare The other ObjectListIterator
-                @return True if the ObjectListIterator point to the same element
-            */
-            inline bool operator==(const ObjectListIterator<T>& compare) const
-            {
-                return (this->element_ == compare.element_);
-            }
-
-            /**
-                @brief Overloading of the != operator to compare with another ObjectListIterator.
-                @param compare The other ObjectListIterator
-                @return True if the ObjectListIterator point to different elements
-            */
-            inline bool operator!=(const ObjectListIterator<T>& compare) const
-            {
-                return (this->element_ != compare.element_);
-            }
-
-            /**
-                @brief Increments the ObjectListIterator if it points at the given object.
-                @param object The object to compare with
-            */
-            inline void incrementIfEqual(OrxonoxClass* object)
-            {
-                if (this->element_ && this->element_->objectBase_ == object)
-                    this->operator++();
-            }
-
-        private:
-            ObjectListElement<T>* element_;        //!< The element the Iterator points at
-    };
-}
-
-#endif /* _ObjectListIterator_H__ */
Index: sandbox_light/src/libraries/core/OrxonoxClass.cc
===================================================================
--- sandbox_light/src/libraries/core/OrxonoxClass.cc	(revision 5788)
+++ 	(revision )
@@ -1,137 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Implementation of the OrxonoxClass Class.
-*/
-
-#include "OrxonoxClass.h"
-
-#include "MetaObjectList.h"
-#include "Identifier.h"
-
-namespace orxonox
-{
-    /** @brief Constructor: Sets the default values. */
-    OrxonoxClass::OrxonoxClass()
-    {
-        this->identifier_ = 0;
-        this->parents_ = 0;
-        this->metaList_ = new MetaObjectList();
-    }
-
-    /** @brief Destructor: Deletes, if existing, the list of the parents. */
-    OrxonoxClass::~OrxonoxClass()
-    {
-        delete this->metaList_;
-
-        // parents_ exists only if isCreatingHierarchy() of the associated Identifier returned true while creating the class
-        if (this->parents_)
-            delete this->parents_;
-    }
-
-    /** @brief Returns true if the objects class is of the given type or a derivative. */
-    bool OrxonoxClass::isA(const Identifier* identifier)
-        { return this->getIdentifier()->isA(identifier); }
-    /** @brief Returns true if the objects class is exactly of the given type. */
-    bool OrxonoxClass::isExactlyA(const Identifier* identifier)
-        { return this->getIdentifier()->isExactlyA(identifier); }
-    /** @brief Returns true if the objects class is a child of the given type. */
-    bool OrxonoxClass::isChildOf(const Identifier* identifier)
-        { return this->getIdentifier()->isChildOf(identifier); }
-    /** @brief Returns true if the objects class is a direct child of the given type. */
-    bool OrxonoxClass::isDirectChildOf(const Identifier* identifier)
-        { return this->getIdentifier()->isDirectChildOf(identifier); }
-    /** @brief Returns true if the objects class is a parent of the given type. */
-    bool OrxonoxClass::isParentOf(const Identifier* identifier)
-        { return this->getIdentifier()->isParentOf(identifier); }
-    /** @brief Returns true if the objects class is a direct parent of the given type. */
-    bool OrxonoxClass::isDirectParentOf(const Identifier* identifier)
-        { return this->getIdentifier()->isDirectParentOf(identifier); }
-
-
-    /** @brief Returns true if the objects class is of the given type or a derivative. */
-    template <class B> bool OrxonoxClass::isA(const SubclassIdentifier<B>* identifier)
-        { return this->getIdentifier()->isA(identifier->getIdentifier()); }
-    /** @brief Returns true if the objects class is exactly of the given type. */
-    template <class B> bool OrxonoxClass::isExactlyA(const SubclassIdentifier<B>* identifier)
-        { return this->getIdentifier()->isExactlyA(identifier->getIdentifier()); }
-    /** @brief Returns true if the objects class is a child of the given type. */
-    template <class B> bool OrxonoxClass::isChildOf(const SubclassIdentifier<B>* identifier)
-        { return this->getIdentifier()->isChildOf(identifier->getIdentifier()); }
-    /** @brief Returns true if the objects class is a direct child of the given type. */
-    template <class B> bool OrxonoxClass::isDirectChildOf(const SubclassIdentifier<B>* identifier)
-        { return this->getIdentifier()->isDirectChildOf(identifier->getIdentifier()); }
-    /** @brief Returns true if the objects class is a parent of the given type. */
-    template <class B> bool OrxonoxClass::isParentOf(const SubclassIdentifier<B>* identifier)
-        { return this->getIdentifier()->isParentOf(identifier->getIdentifier()); }
-    /** @brief Returns true if the objects class is a direct parent of the given type. */
-    template <class B> bool OrxonoxClass::isDirectParentOf(const SubclassIdentifier<B>* identifier)
-        { return this->getIdentifier()->isDirectParentOf(identifier->getIdentifier()); }
-
-
-    /** @brief Returns true if the objects class is of the given type or a derivative. */
-    template <class B> bool OrxonoxClass::isA(const SubclassIdentifier<B> identifier)
-        { return this->getIdentifier()->isA(identifier.getIdentifier()); }
-    /** @brief Returns true if the objects class is exactly of the given type. */
-    template <class B> bool OrxonoxClass::isExactlyA(const SubclassIdentifier<B> identifier)
-        { return this->getIdentifier()->isExactlyA(identifier.getIdentifier()); }
-    /** @brief Returns true if the objects class is a child of the given type. */
-    template <class B> bool OrxonoxClass::isChildOf(const SubclassIdentifier<B> identifier)
-        { return this->getIdentifier()->isChildOf(identifier.getIdentifier()); }
-    /** @brief Returns true if the objects class is a direct child of the given type. */
-    template <class B> bool OrxonoxClass::isDirectChildOf(const SubclassIdentifier<B> identifier)
-        { return this->getIdentifier()->isDirectChildOf(identifier.getIdentifier()); }
-    /** @brief Returns true if the objects class is a parent of the given type. */
-    template <class B> bool OrxonoxClass::isParentOf(const SubclassIdentifier<B> identifier)
-        { return this->getIdentifier()->isParentOf(identifier.getIdentifier()); }
-    /** @brief Returns true if the objects class is a direct parent of the given type. */
-    template <class B> bool OrxonoxClass::isDirectParentOf(const SubclassIdentifier<B> identifier)
-        { return this->getIdentifier()->isDirectParentOf(identifier.getIdentifier()); }
-
-
-    /** @brief Returns true if the objects class is of the given type or a derivative. */
-    bool OrxonoxClass::isA(const OrxonoxClass* object)
-        { return this->getIdentifier()->isA(object->getIdentifier()); }
-    /** @brief Returns true if the objects class is exactly of the given type. */
-    bool OrxonoxClass::isExactlyA(const OrxonoxClass* object)
-        { return this->getIdentifier()->isExactlyA(object->getIdentifier()); }
-    /** @brief Returns true if the objects class is a child of the given type. */
-    bool OrxonoxClass::isChildOf(const OrxonoxClass* object)
-        { return this->getIdentifier()->isChildOf(object->getIdentifier()); }
-    /** @brief Returns true if the objects class is a direct child of the given type. */
-    bool OrxonoxClass::isDirectChildOf(const OrxonoxClass* object)
-        { return this->getIdentifier()->isDirectChildOf(object->getIdentifier()); }
-    /** @brief Returns true if the objects class is a parent of the given type. */
-    bool OrxonoxClass::isParentOf(const OrxonoxClass* object)
-        { return this->getIdentifier()->isParentOf(object->getIdentifier()); }
-    /** @brief Returns true if the objects class is a direct child of the given type. */
-    bool OrxonoxClass::isDirectParentOf(const OrxonoxClass* object)
-        { return this->getIdentifier()->isDirectParentOf(object->getIdentifier()); }
-}
Index: sandbox_light/src/libraries/core/OrxonoxClass.h
===================================================================
--- sandbox_light/src/libraries/core/OrxonoxClass.h	(revision 5788)
+++ 	(revision )
@@ -1,128 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Declaration of the OrxonoxClass Class.
-
-    All objects and interfaces of the game-logic (not the engine) are derived from OrxonoxClass.
-    It stores the Identifier and the MetaObjectList and has all needed functions to create and use the class-hierarchy.
-*/
-
-#ifndef _OrxonoxClass_H__
-#define _OrxonoxClass_H__
-
-#include "CorePrereqs.h"
-
-#include <set>
-#include <vector>
-
-namespace orxonox
-{
-    //! The class all objects and interfaces of the game-logic (not the engine) are derived from.
-    /**
-        The BaseObject and Interfaces are derived with 'virtual public OrxonoxClass' from OrxonoxClass.
-        OrxonoxClass is needed to create the class-hierarchy at startup and to store the Identifier and the MetaObjectList.
-    */
-    class _CoreExport OrxonoxClass
-    {
-        template <class T>
-        friend class ClassIdentifier;
-
-        public:
-            OrxonoxClass();
-            virtual ~OrxonoxClass();
-
-            /** @brief Function to collect the SetConfigValue-macro calls. */
-            void setConfigValues() {};
-
-            /** @brief Returns the Identifier of the object. @return The Identifier */
-            inline Identifier* getIdentifier() const { return this->identifier_; }
-
-            bool isA(const Identifier* identifier);
-            bool isExactlyA(const Identifier* identifier);
-            bool isChildOf(const Identifier* identifier);
-            bool isDirectChildOf(const Identifier* identifier);
-            bool isParentOf(const Identifier* identifier);
-            bool isDirectParentOf(const Identifier* identifier);
-
-            template <class B> bool isA(const SubclassIdentifier<B>* identifier);
-            template <class B> bool isExactlyA(const SubclassIdentifier<B>* identifier);
-            template <class B> bool isChildOf(const SubclassIdentifier<B>* identifier);
-            template <class B> bool isDirectChildOf(const SubclassIdentifier<B>* identifier);
-            template <class B> bool isParentOf(const SubclassIdentifier<B>* identifier);
-            template <class B> bool isDirectParentOf(const SubclassIdentifier<B>* identifier);
-
-            template <class B> bool isA(const SubclassIdentifier<B> identifier);
-            template <class B> bool isExactlyA(const SubclassIdentifier<B> identifier);
-            template <class B> bool isChildOf(const SubclassIdentifier<B> identifier);
-            template <class B> bool isDirectChildOf(const SubclassIdentifier<B> identifier);
-            template <class B> bool isParentOf(const SubclassIdentifier<B> identifier);
-            template <class B> bool isDirectParentOf(const SubclassIdentifier<B> identifier);
-
-            bool isA(const OrxonoxClass* object);
-            bool isExactlyA(const OrxonoxClass* object);
-            bool isChildOf(const OrxonoxClass* object);
-            bool isDirectChildOf(const OrxonoxClass* object);
-            bool isParentOf(const OrxonoxClass* object);
-            bool isDirectParentOf(const OrxonoxClass* object);
-
-            /**
-            @brief
-                Returns a valid pointer of any derived type that is
-                registered in the class hierarchy.
-            @return
-                Returns NULL if the no pointer was found.
-            */
-            template <class T>
-            FORCEINLINE T* getDerivedPointer(unsigned int classID)
-            {
-                for (int i = this->objectPointers_.size() - 1; i >= 0; --i)
-                {
-                    if (this->objectPointers_[i].first == classID)
-                        return static_cast<T*>(this->objectPointers_[i].second);
-                }
-                return NULL;
-            }
-            //! Const version of getDerivedPointer
-            template <class T>
-            FORCEINLINE const T* getDerivedPointer(unsigned int classID) const
-            {
-                return const_cast<OrxonoxClass*>(this)->getDerivedPointer<T>(classID);
-            }
-
-        private:
-            Identifier* identifier_;                   //!< The Identifier of the object
-            std::set<const Identifier*>* parents_;     //!< List of all parents of the object
-            MetaObjectList* metaList_;                 //!< MetaObjectList, containing all ObjectLists and ObjectListElements the object is registered in
-            //! 'Fast map' that holds this-pointers of all derived types
-            std::vector<std::pair<unsigned int, void*> > objectPointers_;
-    };
-}
-
-#endif /* _OrxonoxClass_H__ */
Index: sandbox_light/src/libraries/core/Thread.cc
===================================================================
--- sandbox_light/src/libraries/core/Thread.cc	(revision 5788)
+++ 	(revision )
@@ -1,129 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      Oliver Scheuss
- *   Co-authors:
- *      ...
- *
- */
-
-#include "Thread.h"
-
-#include <cassert>
-#include <boost/thread/thread.hpp>
-#include <boost/bind.hpp>
-#include <boost/thread/mutex.hpp>
-#include <boost/thread/thread_time.hpp>
-
-#include "util/Sleep.h"
-#include "Executor.h"
-
-namespace orxonox
-{
-    boost::posix_time::millisec THREAD_WAIT_BEFORE_DETACH(1000);
-    
-    
-    Thread::Thread():
-        executor_(0),
-        isWorking_(false),
-        stopThread_(false)
-    {
-        this->executorMutex_ = new boost::mutex;
-        this->isWorkingMutex_ = new boost::mutex;
-        this->stopThreadMutex_ = new boost::mutex;
-        this->workerThread_ = new boost::thread( boost::bind(&Thread::threadLoop, this) );
-    }
-    
-    Thread::~Thread()
-    {
-        this->stopThreadMutex_->lock();
-        this->stopThread_ = true;
-        this->stopThreadMutex_->unlock();
-        if( !this->workerThread_->timed_join( THREAD_WAIT_BEFORE_DETACH ) )
-            assert(0); // this should not happen
-        delete this->workerThread_;
-        delete this->executorMutex_;
-        delete this->stopThreadMutex_;
-        delete this->isWorkingMutex_;
-    }
-    
-    bool Thread::isWorking()
-    {
-      this->isWorkingMutex_->lock();
-      bool isWorking = this->isWorking_;
-      this->isWorkingMutex_->unlock();
-      return isWorking;
-    }
-    
-    bool Thread::evaluateExecutor( Executor* executor )
-    {
-        this->isWorkingMutex_->lock();
-        this->isWorking_=true;
-        this->isWorkingMutex_->unlock();
-        this->executorMutex_->lock();
-        this->executor_ = executor;
-        this->executorMutex_->unlock();
-        return true;
-    }
-    
-    void Thread::threadLoop()
-    {
-        bool stopThread = false;
-        while( !stopThread )
-        {
-            //this->executorMutex_->lock();
-            Executor* executor = this->executor_;
-            //this->executorMutex_->unlock();
-            if( executor )
-            {
-                (*executor)();
-                this->executorMutex_->lock();
-                delete this->executor_;
-                this->executor_ = 0;
-                this->executorMutex_->unlock();
-                this->isWorkingMutex_->lock();
-                this->isWorking_=false;
-                this->isWorkingMutex_->unlock();
-            }
-            else
-            {
-                this->workerThread_->yield();
-            }
-            //this->stopThreadMutex_->lock();
-            stopThread = this->stopThread_;
-            //this->stopThreadMutex_->unlock();
-        }
-    }
-    
-    void Thread::waitUntilFinished()
-    {
-        bool stillWorking = true;
-        while( stillWorking )
-        {
-            this->isWorkingMutex_->lock();
-            stillWorking = this->isWorking_;
-            this->isWorkingMutex_->unlock();
-            if( stillWorking )
-                msleep( 1 );
-        }
-    }
-}
Index: sandbox_light/src/libraries/core/Thread.h
===================================================================
--- sandbox_light/src/libraries/core/Thread.h	(revision 5788)
+++ 	(revision )
@@ -1,64 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      Oliver Scheuss
- *   Co-authors:
- *      ...
- *
- */
-
-#ifndef _Thread_H__
-#define _Thread_H__
-
-#include "CorePrereqs.h"
-
-namespace boost{
-  class recursive_mutex;
-}
-
- namespace orxonox
-{
-    class _CoreExport Thread
-    {
-    public:
-        Thread();
-        virtual ~Thread();
-
-        bool isWorking();
-        void waitUntilFinished();
-        bool evaluateExecutor( Executor* executor );
-
-    private:
-        void            threadLoop();
-        
-        Executor*       executor_;
-        bool            isWorking_;
-        bool            stopThread_;
-        boost::thread*  workerThread_;
-        boost::mutex*   executorMutex_;
-        boost::mutex*     isWorkingMutex_;
-        boost::mutex*   stopThreadMutex_;
-    };
-
- }
-
-#endif /* _Thread_H__ */
Index: sandbox_light/src/libraries/core/ThreadPool.cc
===================================================================
--- sandbox_light/src/libraries/core/ThreadPool.cc	(revision 5788)
+++ 	(revision )
@@ -1,115 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      Oliver Scheuss
- *   Co-authors:
- *      ...
- *
- */
-
-#include "ThreadPool.h"
-#include "Thread.h"
-#include <cassert>
-
-namespace orxonox
-{
-
-    ThreadPool::ThreadPool()
-    {
-    }
-    
-    ThreadPool::~ThreadPool()
-    {
-        unsigned int a = this->setNrOfThreads(0);
-        assert(a == 0);
-    }
-    
-    void ThreadPool::addThreads( unsigned int nr )
-    {
-        for( unsigned int i=0; i<nr; i++ )
-            this->threadPool_.push_back(new Thread());
-    }
-    unsigned int ThreadPool::removeThreads( unsigned int nr )
-    {
-        unsigned int i=0;
-        std::vector<Thread*>::iterator it;
-        for( it = this->threadPool_.begin(); it != threadPool_.end() && i<nr; )
-        {
-            if( ! (*it)->isWorking() )
-            {
-                Thread* temp = *it;
-                it=this->threadPool_.erase( it );
-                delete temp;
-                ++i;
-            }
-            else
-              ++it;
-        }
-        return i;
-    }
-    unsigned int ThreadPool::setNrOfThreads( unsigned int nr )
-    {
-        unsigned int currentsize = this->threadPool_.size();
-        if ( nr < currentsize )
-            return currentsize - removeThreads( currentsize - nr );
-        else if ( nr == currentsize )
-            return currentsize;
-        else
-        {
-            addThreads( nr - currentsize );
-            return nr;
-        }
-    }
-    
-    bool ThreadPool::passFunction( Executor* executor, bool addThread )
-    {
-        std::vector<Thread*>::iterator it;
-        for ( it=this->threadPool_.begin(); it!=this->threadPool_.end(); ++it )
-        {
-            if ( ! (*it)->isWorking() )
-            {
-                bool b = (*it)->evaluateExecutor( executor );
-                assert(b); // if b is false then there is some code error
-                return true;
-            }
-        }
-        if ( addThread )
-        {
-            addThreads( 1 );
-            bool b = this->threadPool_.back()->evaluateExecutor( executor ); // access the last element
-            assert(b);
-            return true;
-        }
-        else
-            return false;
-    }
-    
-    void ThreadPool::synchronise()
-    {
-        std::vector<Thread*>::iterator it;
-        for ( it=this->threadPool_.begin(); it!=this->threadPool_.end(); ++it )
-        {
-            (*it)->waitUntilFinished();
-        }
-    }
-
-}
Index: sandbox_light/src/libraries/core/ThreadPool.h
===================================================================
--- sandbox_light/src/libraries/core/ThreadPool.h	(revision 5788)
+++ 	(revision )
@@ -1,57 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   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:
- *      Oliver Scheuss
- *   Co-authors:
- *      ...
- *
- */
-
-#ifndef _ThreadPool_H__
-#define _ThreadPool_H__
-
-#include "CorePrereqs.h"
-
-#include <vector>
-
- namespace orxonox
-{
-    class _CoreExport ThreadPool
-    {
-    public:
-        ThreadPool();
-        virtual ~ThreadPool();
-        
-        void addThreads( unsigned int nr );
-        unsigned int removeThreads( unsigned int nr );
-        unsigned int setNrOfThreads( unsigned int nr );
-        
-        bool passFunction( Executor* executor, bool addThread=false );
-        void synchronise();
-        
-    private:
-        std::vector<Thread*> threadPool_;
-        
-    };
-}
-
-#endif /* _ThreadPool_H__ */
