Index: code/branches/objecthierarchy/src/CMakeLists.txt
===================================================================
--- code/branches/objecthierarchy/src/CMakeLists.txt	(revision 433)
+++ code/branches/objecthierarchy/src/CMakeLists.txt	(revision 434)
@@ -2,6 +2,6 @@
 
 # create a few variables to simplify life
-SET(SRC_FILES orxonox/orxonox.cc loader/LevelLoader.cc xml/xmlParser.cc orxonox/core/IdentifierList.cc orxonox/core/Identifier.cc orxonox/core/MetaObjectList.cc orxonox/core/Factory.cc orxonox/core/OrxonoxClass.cc orxonox/objects/BaseObject.cc orxonox/objects/test1.cc orxonox/objects/test2.cc orxonox/objects/test3.cc)
-SET(INC_FILES loader/LevelLoader.h xml/xmlParser.h orxonox/core/IdentifierIncludes.h orxonox/core/Identifier.h orxonox/core/Factory.h orxonox/core/ClassFactory.h orxonox/core/IdentifierList.h orxonox/core/ObjectList.h orxonox/core/MetaObjectList.h orxonox/core/Iterator.h orxonox/core/OrxonoxClass.h orxonox/objects/BaseObject.h orxonox/objects/Test.h orxonox/objects/test1.h orxonox/objects/test2.h orxonox/objects/test3.h orxonox/objects/Tickable.h orxonox/objects/Timer.h)
+SET(SRC_FILES orxonox/orxonox.cc loader/LevelLoader.cc xml/xmlParser.cc orxonox/core/IdentifierList.cc orxonox/core/Identifier.cc orxonox/core/MetaObjectList.cc orxonox/core/Factory.cc orxonox/core/OrxonoxClass.cc orxonox/core/ConfigValueContainer.cc orxonox/objects/BaseObject.cc orxonox/objects/test1.cc orxonox/objects/test2.cc orxonox/objects/test3.cc)
+SET(INC_FILES loader/LevelLoader.h xml/xmlParser.h orxonox/core/IdentifierIncludes.h orxonox/core/Identifier.h orxonox/core/Factory.h orxonox/core/ClassFactory.h orxonox/core/IdentifierList.h orxonox/core/ObjectList.h orxonox/core/MetaObjectList.h orxonox/core/Iterator.h orxonox/core/OrxonoxClass.h orxonox/core/ConfigValueContainer.h orxonox/objects/BaseObject.h orxonox/objects/Test.h orxonox/objects/test1.h orxonox/objects/test2.h orxonox/objects/test3.h orxonox/objects/Tickable.h orxonox/objects/Timer.h)
 
 #Creates an executable
Index: code/branches/objecthierarchy/src/orxonox/core/ConfigValueContainer.cc
===================================================================
--- code/branches/objecthierarchy/src/orxonox/core/ConfigValueContainer.cc	(revision 434)
+++ code/branches/objecthierarchy/src/orxonox/core/ConfigValueContainer.cc	(revision 434)
@@ -0,0 +1,369 @@
+#include <fstream>
+#include <string>
+#include "ConfigValueContainer.h"
+
+#define CONFIGFILEPATH "O:\\oh\\bin\\orxonox.ini"
+
+namespace orxonox
+{
+    std::list<std::string>* ConfigValueContainer::configFileLines_s = 0;
+    bool ConfigValueContainer::readConfigFile_s = false;
+
+    ConfigValueContainer::ConfigValueContainer(const std::string& classname, const std::string& varname, int defvalue)
+    {
+        std::ostringstream ostream;
+
+        if (ostream << defvalue)
+            this->defvalue_ = ostream.str();
+        else
+            this->defvalue_ = "0";
+
+        this->setDefaultValues(classname, varname);
+        std::string valueString = this->getValueString();
+
+        std::istringstream istream(valueString);
+        if (!(istream >> this->value_int_))
+        {
+            this->value_int_ = defvalue;
+            (*this->configFileLine_) = this->varname_ + "=" + this->defvalue_;
+            ConfigValueContainer::writeConfigFile(CONFIGFILEPATH);
+        }
+    }
+
+    ConfigValueContainer::ConfigValueContainer(const std::string& classname, const std::string& varname, double defvalue)
+    {
+        std::ostringstream ostream;
+
+        if (ostream << defvalue)
+            this->defvalue_ = ostream.str();
+        else
+            this->defvalue_ = "0.000000";
+
+        this->setDefaultValues(classname, varname);
+        std::string valueString = this->getValueString();
+
+        std::istringstream istream(valueString);
+        if (!(istream >> this->value_double_))
+        {
+            this->value_double_ = defvalue;
+            (*this->configFileLine_) = this->varname_ + "=" + this->defvalue_;
+            ConfigValueContainer::writeConfigFile(CONFIGFILEPATH);
+        }
+    }
+
+    ConfigValueContainer::ConfigValueContainer(const std::string& classname, const std::string& varname, bool defvalue)
+    {
+        if (defvalue)
+            this->defvalue_ = "true";
+        else
+            this->defvalue_ = "false";
+
+        this->setDefaultValues(classname, varname);
+        std::string valueString = this->getValueString();
+
+        if (valueString.find("true") < valueString.size() || valueString.find("yes") < valueString.size())
+            this->value_bool_ = true;
+        else if (valueString.find("false") < valueString.size() || valueString.find("no") < valueString.size())
+            this->value_bool_ = false;
+        else
+        {
+            std::istringstream istream(valueString);
+            if (!(istream >> this->value_bool_))
+            {
+                this->value_bool_ = defvalue;
+                (*this->configFileLine_) = this->varname_ + "=" + this->defvalue_;
+                ConfigValueContainer::writeConfigFile(CONFIGFILEPATH);
+            }
+        }
+    }
+
+    ConfigValueContainer::ConfigValueContainer(const std::string& classname, const std::string& varname, const char* defvalue)
+    {
+        this->defvalue_ = defvalue;
+        this->setDefaultValues(classname, varname);
+        this->value_string_ = this->getValueString(false);
+    }
+
+    ConfigValueContainer::ConfigValueContainer(const std::string& classname, const std::string& varname, Ogre::Vector3 defvalue)
+    {
+        std::ostringstream ostream;
+        if (ostream << "(" << defvalue.x << "," << defvalue.y << "," << defvalue.z << ")")
+            this->defvalue_ = ostream.str();
+        else
+            this->defvalue_ = "(0,0,0)";
+
+        this->setDefaultValues(classname, varname);
+        std::string valueString = this->getValueString();
+
+        unsigned int pos;
+        while ((pos = valueString.find(" ")) < valueString.length())
+            valueString.erase(pos, 1);
+        while ((pos = valueString.find("(")) < valueString.length())
+            valueString.erase(pos, 1);
+        while ((pos = valueString.find(")")) < valueString.length())
+            valueString.erase(pos, 1);
+        while ((pos = valueString.find(",")) < valueString.length())
+            valueString.replace(pos, 1, " ");
+
+        std::istringstream istream(valueString);
+
+        if (!(istream >> this->value_vector3_.x))
+        {
+            this->value_vector3_.x = defvalue.x;
+            (*this->configFileLine_) = this->varname_ + "=" + this->defvalue_;
+            ConfigValueContainer::writeConfigFile(CONFIGFILEPATH);
+        }
+        if (!(istream >> this->value_vector3_.y))
+        {
+            this->value_vector3_.y = defvalue.y;
+            (*this->configFileLine_) = this->varname_ + "=" + this->defvalue_;
+            ConfigValueContainer::writeConfigFile(CONFIGFILEPATH);
+        }
+        if (!(istream >> this->value_vector3_.z))
+        {
+            this->value_vector3_.z = defvalue.z;
+            (*this->configFileLine_) = this->varname_ + "=" + this->defvalue_;
+            ConfigValueContainer::writeConfigFile(CONFIGFILEPATH);
+        }
+    }
+
+    ConfigValueContainer::ConfigValueContainer(const std::string& classname, const std::string& varname, Ogre::ColourValue defvalue)
+    {
+        std::ostringstream ostream;
+        if (ostream << "(" << defvalue.r << "," << defvalue.g << "," << defvalue.b << "," << defvalue.a << ")")
+            this->defvalue_ = ostream.str();
+        else
+            this->defvalue_ = "(0,0,0,0)";
+
+        this->setDefaultValues(classname, varname);
+        std::string valueString = this->getValueString();
+
+        unsigned int pos;
+        while ((pos = valueString.find(" ")) < valueString.length())
+            valueString.erase(pos, 1);
+        while ((pos = valueString.find("(")) < valueString.length())
+            valueString.erase(pos, 1);
+        while ((pos = valueString.find(")")) < valueString.length())
+            valueString.erase(pos, 1);
+        while ((pos = valueString.find(",")) < valueString.length())
+            valueString.replace(pos, 1, " ");
+
+        std::istringstream istream(valueString);
+
+        if (!(istream >> this->value_colourvalue_.r))
+        {
+            this->value_colourvalue_.r = defvalue.r;
+            (*this->configFileLine_) = this->varname_ + "=" + this->defvalue_;
+            ConfigValueContainer::writeConfigFile(CONFIGFILEPATH);
+        }
+        if (!(istream >> this->value_colourvalue_.g))
+        {
+            this->value_colourvalue_.g = defvalue.g;
+            (*this->configFileLine_) = this->varname_ + "=" + this->defvalue_;
+            ConfigValueContainer::writeConfigFile(CONFIGFILEPATH);
+        }
+        if (!(istream >> this->value_colourvalue_.b))
+        {
+            this->value_colourvalue_.b = defvalue.b;
+            (*this->configFileLine_) = this->varname_ + "=" + this->defvalue_;
+            ConfigValueContainer::writeConfigFile(CONFIGFILEPATH);
+        }
+        if (!(istream >> this->value_colourvalue_.a))
+        {
+            this->value_colourvalue_.a = defvalue.a;
+            (*this->configFileLine_) = this->varname_ + "=" + this->defvalue_;
+            ConfigValueContainer::writeConfigFile(CONFIGFILEPATH);
+        }
+    }
+
+    void ConfigValueContainer::setDefaultValues(const std::string& classname, const std::string& varname)
+    {
+        this->classname_ = classname;
+        this->varname_ = varname;
+
+        this->searchConfigFileLine();
+
+        this->value_int_ = 0;
+        this->value_double_ = 0.000000;
+        this->value_bool_ = false;
+        this->value_string_ = "";
+        this->value_vector3_ = Ogre::Vector3(0, 0, 0);
+        this->value_colourvalue_ = Ogre::ColourValue(0, 0, 0, 0);
+    }
+
+    void ConfigValueContainer::searchConfigFileLine()
+    {
+        if (!ConfigValueContainer::readConfigFile_s)
+            ConfigValueContainer::readConfigFile(CONFIGFILEPATH);
+
+        this->configFileLine_ = 0;
+
+        std::string section = "";
+        section.append("[");
+        section.append(this->classname_);
+        section.append("]");
+
+        bool success = false;
+        std::list<std::string>::iterator it1;
+        for(it1 = ConfigValueContainer::configFileLines_s->begin(); it1 != ConfigValueContainer::configFileLines_s->end(); ++it1)
+        {
+            if (this->isComment(*it1))
+                continue;
+
+            if ((*it1).find(section) < (*it1).length())
+            {
+                bool bLineIsEmpty = false;
+                std::list<std::string>::iterator positionToPutNewLineAt;
+
+                std::list<std::string>::iterator it2;
+                for(it2 = ++it1; it2 != ConfigValueContainer::configFileLines_s->end(); ++it2)
+                {
+                    if (this->isComment(*it2))
+                        continue;
+
+                    if (this->isEmpty(*it2))
+                    {
+                        if (!bLineIsEmpty)
+                        {
+                            bLineIsEmpty = true;
+                            positionToPutNewLineAt = it2;
+                        }
+                    }
+                    else
+                    {
+                        if (!bLineIsEmpty)
+                            positionToPutNewLineAt = it2;
+
+                        bLineIsEmpty = false;
+                    }
+
+                    unsigned int open = (*it2).find("[");
+                    unsigned int close = (*it2).find("]");
+                    if ((open < (*it2).length()) && (close < (*it2).length()) && (open < close))
+                    {
+                        this->configFileLine_ = this->configFileLines_s->insert(positionToPutNewLineAt, this->varname_ + "=" + this->defvalue_);
+                        ConfigValueContainer::writeConfigFile(CONFIGFILEPATH);
+                        success = true;
+                        break;
+                    }
+
+                    if ((*it2).find(this->varname_) < (*it2).length())
+                    {
+                        this->configFileLine_ = it2;
+                        success = true;
+                        break;
+                    }
+                }
+                if (!success)
+                {
+                    this->configFileLine_ = this->configFileLines_s->insert(positionToPutNewLineAt, this->varname_ + "=" + this->defvalue_);
+                    ConfigValueContainer::writeConfigFile(CONFIGFILEPATH);
+                    success = true;
+                }
+                break;
+            }
+        }
+        if (!success)
+        {
+            this->configFileLines_s->push_back("[" + this->classname_ + "]");
+            this->configFileLines_s->push_back(this->varname_ + "=" + this->defvalue_);
+            this->configFileLine_ = --this->configFileLines_s->end();
+            success = true;
+            this->configFileLines_s->push_back("");
+            ConfigValueContainer::writeConfigFile(CONFIGFILEPATH);
+        }
+    }
+
+    bool ConfigValueContainer::isComment(const std::string& line)
+    {
+        std::string teststring = getStrippedLine(line);
+
+        if (teststring[0] == '#' || teststring[0] == '%' || teststring[0] == ';' || (teststring[0] == '/' && teststring[0] == '/'))
+            return true;
+
+        return false;
+    }
+
+    bool ConfigValueContainer::isEmpty(const std::string& line)
+    {
+        return getStrippedLine(line) == "";
+    }
+
+    std::string ConfigValueContainer::getStrippedLine(const std::string& line)
+    {
+        std::string output = line;
+        unsigned int pos;
+        while ((pos = output.find(" ")) < output.length())
+            output.erase(pos, 1);
+
+        return output;
+    }
+
+    std::string ConfigValueContainer::getValueString(bool bStripped)
+    {
+        std::string output;
+        if (bStripped)
+            output = this->getStrippedLine(*this->configFileLine_);
+        else
+            output = *this->configFileLine_;
+
+        return output.substr(output.find("=") + 1);
+    }
+
+    void ConfigValueContainer::readConfigFile(const std::string& filename)
+    {
+        ConfigValueContainer::readConfigFile_s = true;
+
+        if (!ConfigValueContainer::configFileLines_s)
+            ConfigValueContainer::configFileLines_s = new std::list<std::string>;
+
+        std::ofstream createFile;
+        createFile.open(filename.c_str(), std::fstream::app);
+        createFile.close();
+
+        std::ifstream file;
+        file.open(filename.c_str(), std::fstream::in);
+
+        char line[1024];
+
+        while (file.good() && !file.eof())
+        {
+            file.getline(line, 1024);
+            ConfigValueContainer::configFileLines_s->push_back(line);
+            std::cout << "### ->" << line << "<- : empty: " << isEmpty(line) << " comment: " << isComment(line) << std::endl;
+        }
+
+        ConfigValueContainer::configFileLines_s->pop_back();
+
+        if ((ConfigValueContainer::configFileLines_s->size() > 0) && !isEmpty(*ConfigValueContainer::configFileLines_s->rbegin()))
+        {
+            std::cout << "### newline added" << std::endl;
+            ConfigValueContainer::configFileLines_s->push_back("");
+        }
+
+        file.close();
+    }
+
+    void ConfigValueContainer::writeConfigFile(const std::string& filename)
+    {
+        ConfigValueContainer::readConfigFile_s = true;
+
+        if (!ConfigValueContainer::configFileLines_s)
+            ConfigValueContainer::configFileLines_s = new std::list<std::string>;
+
+        std::ofstream createFile;
+        createFile.open(filename.c_str(), std::fstream::app);
+        createFile.close();
+
+        std::ofstream file;
+        file.open(filename.c_str(), std::fstream::out);
+
+        std::list<std::string>::iterator it;
+        for(it = ConfigValueContainer::configFileLines_s->begin(); it != ConfigValueContainer::configFileLines_s->end(); ++it)
+        {
+            file << (*it) << std::endl;
+        }
+
+        file.close();
+    }
+}
Index: code/branches/objecthierarchy/src/orxonox/core/ConfigValueContainer.h
===================================================================
--- code/branches/objecthierarchy/src/orxonox/core/ConfigValueContainer.h	(revision 434)
+++ code/branches/objecthierarchy/src/orxonox/core/ConfigValueContainer.h	(revision 434)
@@ -0,0 +1,56 @@
+#ifndef _ConfigValueContainer_H__
+#define _ConfigValueContainer_H__
+
+#include <string>
+#include <list>
+#include "OgreVector3.h"
+#include "OgreColourValue.h"
+
+namespace orxonox
+{
+    class ConfigValueContainer
+    {
+        public:
+            ConfigValueContainer(const std::string& classname, const std::string& varname, int defvalue);
+            ConfigValueContainer(const std::string& classname, const std::string& varname, double defvalue);
+            ConfigValueContainer(const std::string& classname, const std::string& varname, bool defvalue);
+            ConfigValueContainer(const std::string& classname, const std::string& varname, const char* defvalue);
+            ConfigValueContainer(const std::string& classname, const std::string& varname, Ogre::Vector3 defvalue);
+            ConfigValueContainer(const std::string& classname, const std::string& varname, Ogre::ColourValue defvalue);
+
+            void setDefaultValues(const std::string& classname, const std::string& varname);
+            void searchConfigFileLine();
+            std::string getValueString(bool bStripped = true);
+
+            static std::string getStrippedLine(const std::string& line);
+            static bool isEmpty(const std::string& line);
+            static bool isComment(const std::string& line);
+            static void readConfigFile(const std::string& filename);
+            static void writeConfigFile(const std::string& filename);
+
+            inline int getValue(int value)                                      { return this->value_int_; }
+            inline double getValue(double value)                                { return this->value_double_; }
+            inline bool getValue(bool value)                                    { return this->value_bool_; }
+            inline std::string getValue(const std::string& value)               { return this->value_string_; }
+            inline Ogre::Vector3 getValue(const Ogre::Vector3& value)           { return this->value_vector3_; }
+            inline Ogre::ColourValue getValue(const Ogre::ColourValue& value)   { return this->value_colourvalue_; }
+
+        private:
+            std::string         classname_;
+            std::string         varname_;
+            std::string         defvalue_;
+
+            int                 value_int_;
+            double              value_double_;
+            bool                value_bool_;
+            std::string         value_string_;
+            Ogre::Vector3       value_vector3_;
+            Ogre::ColourValue   value_colourvalue_;
+
+            std::list<std::string>::iterator configFileLine_;
+            static std::list<std::string>* configFileLines_s;
+            static bool readConfigFile_s;
+    };
+}
+
+#endif
Index: code/branches/objecthierarchy/src/orxonox/core/Identifier.h
===================================================================
--- code/branches/objecthierarchy/src/orxonox/core/Identifier.h	(revision 433)
+++ code/branches/objecthierarchy/src/orxonox/core/Identifier.h	(revision 434)
@@ -25,10 +25,12 @@
 
 #include <iostream>
+#include <map>
 
 #include "IdentifierList.h"
 #include "ObjectList.h"
 #include "Factory.h"
-
-#define HIERARCHY_VERBOSE false
+#include "ConfigValueContainer.h"
+
+#define HIERARCHY_VERBOSE 0
 
 
@@ -93,4 +95,10 @@
             void setNetworkID(unsigned int id);
 
+            inline ConfigValueContainer* getConfigValueContainer(const std::string& varname)
+                { return this->configValues_[varname]; }
+
+            inline void setConfigValueContainer(const std::string& varname, ConfigValueContainer* container)
+                { this->configValues_[varname] = container; }
+
         private:
             Identifier();
@@ -121,14 +129,15 @@
             }
 
-            IdentifierList parents_;                    //!< The Parents of the class the Identifier belongs to
-            IdentifierList* children_;                  //!< The Children of the class the Identifier belongs to
-
-            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
-            bool bCreatedOneObject_;                    //!< True if at least one object of the given type was created (used to determine the need of storing the parents)
-            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)
-            static unsigned int classIDcounter_s;       //!< The number of unique Identifiers
-            unsigned int classID_;                      //!< The networkID to identify a class through the network
+            IdentifierList parents_;                                    //!< The Parents of the class the Identifier belongs to
+            IdentifierList* children_;                                  //!< The Children of the class the Identifier belongs to
+
+            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
+            bool bCreatedOneObject_;                                    //!< True if at least one object of the given type was created (used to determine the need of storing the parents)
+            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)
+            static unsigned int classIDcounter_s;                       //!< The number of unique Identifiers
+            unsigned int classID_;                                      //!< The networkID to identify a class through the network
+            std::map<std::string, ConfigValueContainer*> configValues_;
     };
 
Index: code/branches/objecthierarchy/src/orxonox/core/IdentifierIncludes.h
===================================================================
--- code/branches/objecthierarchy/src/orxonox/core/IdentifierIncludes.h	(revision 433)
+++ code/branches/objecthierarchy/src/orxonox/core/IdentifierIncludes.h	(revision 434)
@@ -16,5 +16,14 @@
 #include "Iterator.h"
 #include "OrxonoxClass.h"
+#include "ConfigValueContainer.h"
 
+#include "OgreVector3.h"
+#include "OgreColourValue.h"
+
+namespace orxonox
+{
+    typedef Ogre::Vector3 Vector3;
+    typedef Ogre::ColourValue ColourValue;
+}
 
 // Intern macro, containing the common parts of RegisterObject and RegisterRootObject
@@ -62,2 +71,12 @@
 #define ID(StringOrInt) \
     Factory::getIdentifier(StringOrInt)
+
+// bla
+#define SetConfigValue(varname, defvalue) \
+    ConfigValueContainer* container##varname = this->getIdentifier()->getConfigValueContainer(#varname); \
+    if (!container##varname) \
+    { \
+        container##varname = new ConfigValueContainer(this->getIdentifier()->getName(), #varname, defvalue); \
+        this->getIdentifier()->setConfigValueContainer(#varname, container##varname); \
+    } \
+    this->varname = container##varname->getValue(varname)
Index: code/branches/objecthierarchy/src/orxonox/core/OrxonoxClass.h
===================================================================
--- code/branches/objecthierarchy/src/orxonox/core/OrxonoxClass.h	(revision 433)
+++ code/branches/objecthierarchy/src/orxonox/core/OrxonoxClass.h	(revision 434)
@@ -27,4 +27,6 @@
             OrxonoxClass();
             virtual ~OrxonoxClass();
+
+            void setConfigValues() {};
 
             /** @returns the Identifier of the object */
Index: code/branches/objecthierarchy/src/orxonox/objects/Tickable.h
===================================================================
--- code/branches/objecthierarchy/src/orxonox/objects/Tickable.h	(revision 433)
+++ code/branches/objecthierarchy/src/orxonox/objects/Tickable.h	(revision 434)
@@ -3,5 +3,5 @@
 
 #include "../core/IdentifierIncludes.h"
-#include "Ogre.h"
+#include "OgreFrameListener.h"
 
 namespace orxonox
Index: code/branches/objecthierarchy/src/orxonox/objects/Timer.h
===================================================================
--- code/branches/objecthierarchy/src/orxonox/objects/Timer.h	(revision 433)
+++ code/branches/objecthierarchy/src/orxonox/objects/Timer.h	(revision 434)
@@ -3,5 +3,5 @@
 
 #include "../core/IdentifierIncludes.h"
-#include "Ogre.h"
+#include "OgreFrameListener.h"
 
 namespace orxonox
Index: code/branches/objecthierarchy/src/orxonox/objects/test3.cc
===================================================================
--- code/branches/objecthierarchy/src/orxonox/objects/test3.cc	(revision 433)
+++ code/branches/objecthierarchy/src/orxonox/objects/test3.cc	(revision 434)
@@ -10,4 +10,16 @@
     {
         RegisterObject(Test3);
+
+        this->setConfigValues();
+    }
+
+    void Test3::setConfigValues()
+    {
+        SetConfigValue(value_int_, -100);
+        SetConfigValue(value_double_, 10.555678);
+        SetConfigValue(value_bool_, true);
+        SetConfigValue(value_string_, "Dies ist ein Test");
+        SetConfigValue(value_vector3_, Vector3(13, 26, 39));
+        SetConfigValue(value_colourvalue_, ColourValue(1.0, 0.5, 0.25, 0.887));
     }
 
@@ -15,4 +27,15 @@
     {
     }
+
+    void Test3::configOutput()
+    {
+        std::cout << this->value_int_ << std::endl;
+        std::cout << this->value_double_ << std::endl;
+        std::cout << this->value_bool_ << std::endl;
+        std::cout << this->value_string_ << std::endl;
+        std::cout << this->value_vector3_ << std::endl;
+        std::cout << this->value_colourvalue_ << std::endl;
+    }
+
         #define testandcout(code) \
           std::cout << #code << " " << code << "\n"
Index: code/branches/objecthierarchy/src/orxonox/objects/test3.h
===================================================================
--- code/branches/objecthierarchy/src/orxonox/objects/test3.h	(revision 433)
+++ code/branches/objecthierarchy/src/orxonox/objects/test3.h	(revision 434)
@@ -15,6 +15,18 @@
             virtual ~Test3();
 
+            void setConfigValues();
+
             void usefullClassesIsATest(Test1* test1);
             void usefullClassesIsATest(Test2* test2);
+
+            void configOutput();
+
+        private:
+            int                 value_int_;
+            double              value_double_;
+            bool                value_bool_;
+            std::string         value_string_;
+            Vector3             value_vector3_;
+            ColourValue         value_colourvalue_;
     };
 }
Index: code/branches/objecthierarchy/src/orxonox/orxonox.cc
===================================================================
--- code/branches/objecthierarchy/src/orxonox/orxonox.cc	(revision 433)
+++ code/branches/objecthierarchy/src/orxonox/orxonox.cc	(revision 434)
@@ -623,8 +623,12 @@
 
         std::cout << "2\n";
+        Test2* test11_2 = new Test2;
 */
 
-        Test2* test11_2 = new Test2;
         std::cout << "3\n";
+        Test3* test11_3 = new Test3;
+        test11_3->configOutput();
+
+        std::cout << "4\n";
 
         startRenderLoop();
