Index: /code/branches/FICN/src/orxonox/core/ConfigValueContainer.cc
===================================================================
--- /code/branches/FICN/src/orxonox/core/ConfigValueContainer.cc	(revision 704)
+++ /code/branches/FICN/src/orxonox/core/ConfigValueContainer.cc	(revision 705)
@@ -45,4 +45,5 @@
     ConfigValueContainer::ConfigValueContainer(const std::string& classname, const std::string& varname, int defvalue)
     {
+        this->bAddedDescription_ = false;
         this->classname_ = classname;
         this->varname_ = varname;
@@ -66,4 +67,5 @@
     ConfigValueContainer::ConfigValueContainer(const std::string& classname, const std::string& varname, unsigned int defvalue)
     {
+        this->bAddedDescription_ = false;
         this->classname_ = classname;
         this->varname_ = varname;
@@ -87,4 +89,5 @@
     ConfigValueContainer::ConfigValueContainer(const std::string& classname, const std::string& varname, char defvalue)
     {
+        this->bAddedDescription_ = false;
         this->classname_ = classname;
         this->varname_ = varname;
@@ -108,4 +111,5 @@
     ConfigValueContainer::ConfigValueContainer(const std::string& classname, const std::string& varname, unsigned char defvalue)
     {
+        this->bAddedDescription_ = false;
         this->classname_ = classname;
         this->varname_ = varname;
@@ -129,4 +133,5 @@
     ConfigValueContainer::ConfigValueContainer(const std::string& classname, const std::string& varname, float defvalue)
     {
+        this->bAddedDescription_ = false;
         this->classname_ = classname;
         this->varname_ = varname;
@@ -150,4 +155,5 @@
     ConfigValueContainer::ConfigValueContainer(const std::string& classname, const std::string& varname, double defvalue)
     {
+        this->bAddedDescription_ = false;
         this->classname_ = classname;
         this->varname_ = varname;
@@ -171,4 +177,5 @@
     ConfigValueContainer::ConfigValueContainer(const std::string& classname, const std::string& varname, long double defvalue)
     {
+        this->bAddedDescription_ = false;
         this->classname_ = classname;
         this->varname_ = varname;
@@ -192,4 +199,5 @@
     ConfigValueContainer::ConfigValueContainer(const std::string& classname, const std::string& varname, bool defvalue)
     {
+        this->bAddedDescription_ = false;
         this->classname_ = classname;
         this->varname_ = varname;
@@ -217,4 +225,5 @@
     ConfigValueContainer::ConfigValueContainer(const std::string& classname, const std::string& varname, const std::string& defvalue)
     {
+        this->bAddedDescription_ = false;
         this->classname_ = classname;
         this->varname_ = varname;
@@ -237,4 +246,5 @@
     ConfigValueContainer::ConfigValueContainer(const std::string& classname, const std::string& varname, const char* defvalue)
     {
+        this->bAddedDescription_ = false;
         this->classname_ = classname;
         this->varname_ = varname;
@@ -257,4 +267,5 @@
     ConfigValueContainer::ConfigValueContainer(const std::string& classname, const std::string& varname, Ogre::Vector2 defvalue)
     {
+        this->bAddedDescription_ = false;
         this->classname_ = classname;
         this->varname_ = varname;
@@ -283,4 +294,5 @@
     ConfigValueContainer::ConfigValueContainer(const std::string& classname, const std::string& varname, Ogre::Vector3 defvalue)
     {
+        this->bAddedDescription_ = false;
         this->classname_ = classname;
         this->varname_ = varname;
@@ -309,4 +321,5 @@
     ConfigValueContainer::ConfigValueContainer(const std::string& classname, const std::string& varname, Ogre::ColourValue defvalue)
     {
+        this->bAddedDescription_ = false;
         this->classname_ = classname;
         this->varname_ = varname;
@@ -897,7 +910,7 @@
 
     /**
-     *  @param Writes the content of the list, containing all lines of the config-file, into the config-file.
-     *  @param filename The name of the config-file
-     */
+        @brief Writes the content of the list, containing all lines of the config-file, into the config-file.
+        @param filename The name of the config-file
+    */
     void ConfigValueContainer::writeConfigFile(const std::string& filename)
     {
@@ -925,3 +938,17 @@
         file.close();
     }
+
+    /**
+        @brief Adds a description to the config-value.
+        @param description The description
+    */
+    void ConfigValueContainer::description(const std::string& description)
+    {
+        if (!this->bAddedDescription_)
+        {
+            this->description_ = std::string("ConfigValueDescription::" + this->classname_ + "::" + this->varname_);
+            Language::getLanguage().addEntry(description_, description);
+            this->bAddedDescription_ = true;
+        }
+    }
 }
Index: /code/branches/FICN/src/orxonox/core/ConfigValueContainer.h
===================================================================
--- /code/branches/FICN/src/orxonox/core/ConfigValueContainer.h	(revision 704)
+++ /code/branches/FICN/src/orxonox/core/ConfigValueContainer.h	(revision 705)
@@ -51,4 +51,5 @@
 #include "OgreVector3.h"
 #include "OgreColourValue.h"
+#include "Language.h"
 
 namespace orxonox
@@ -105,29 +106,31 @@
 
             /** @returns the value. @param value This is only needed to determine the right type. */
-            inline int getValue(int value)                                      { return this->value_.value_int_; }
+            inline ConfigValueContainer& getValue(int& value)                           { value = this->value_.value_int_; return *this; }
             /** @returns the value. @param value This is only needed to determine the right type. */
-            inline unsigned int getValue(unsigned int value)                    { return this->value_.value_uint_; }
+            inline ConfigValueContainer& getValue(unsigned int& value)                  { value = this->value_.value_uint_; return *this; }
             /** @returns the value. @param value This is only needed to determine the right type. */
-            inline char getValue(char value)                                    { return this->value_.value_char_; }
+            inline ConfigValueContainer& getValue(char& value)                          { value = this->value_.value_char_; return *this; }
             /** @returns the value. @param value This is only needed to determine the right type. */
-            inline unsigned char getValue(unsigned char value)                  { return this->value_.value_uchar_; }
+            inline ConfigValueContainer& getValue(unsigned char& value)                 { value = this->value_.value_uchar_; return *this; }
             /** @returns the value. @param value This is only needed to determine the right type. */
-            inline float getValue(float value)                                  { return this->value_.value_float_; }
+            inline ConfigValueContainer& getValue(float& value)                         { value = this->value_.value_float_; return *this; }
             /** @returns the value. @param value This is only needed to determine the right type. */
-            inline double getValue(double value)                                { return this->value_.value_double_; }
+            inline ConfigValueContainer& getValue(double& value)                        { value = this->value_.value_double_; return *this; }
             /** @returns the value. @param value This is only needed to determine the right type. */
-            inline double getValue(long double value)                           { return this->value_.value_long_double_; }
+            inline ConfigValueContainer& getValue(long double& value)                   { value = this->value_.value_long_double_; return *this; }
             /** @returns the value. @param value This is only needed to determine the right type. */
-            inline bool getValue(bool value)                                    { return this->value_.value_bool_; }
+            inline ConfigValueContainer& getValue(bool& value)                          { value = this->value_.value_bool_; return *this; }
             /** @returns the value. @param value This is only needed to determine the right type. */
-            inline const std::string& getValue(const std::string& value)        { return this->value_string_; }
+            inline ConfigValueContainer& getValue(std::string& value)                   { value = this->value_string_; return *this; }
             /** @returns the value. @param value This is only needed to determine the right type. */
-            inline const char* getValue(const char* value)                      { return this->value_string_.c_str(); }
+            inline ConfigValueContainer& getValue(const char* value)                    { value = this->value_string_.c_str(); return *this; }
             /** @returns the value. @param value This is only needed to determine the right type. */
-            inline Ogre::Vector2 getValue(const Ogre::Vector2& value)           { return this->value_vector2_; }
+            inline ConfigValueContainer& getValue(Ogre::Vector2& value)                 { value = this->value_vector2_; return *this; }
             /** @returns the value. @param value This is only needed to determine the right type. */
-            inline Ogre::Vector3 getValue(const Ogre::Vector3& value)           { return this->value_vector3_; }
+            inline ConfigValueContainer& getValue(Ogre::Vector3& value)                 { value = this->value_vector3_; return *this; }
             /** @returns the value. @param value This is only needed to determine the right type. */
-            inline Ogre::ColourValue getValue(const Ogre::ColourValue& value)   { return this->value_colourvalue_; }
+            inline ConfigValueContainer& getValue(Ogre::ColourValue& value)             { value = this->value_colourvalue_; return *this; }
+
+            void description(const std::string& description);
 
             bool parseSting(const std::string& input);
@@ -186,4 +189,6 @@
 
             VariableType type_;                                 //!< The type of the variable
+            bool bAddedDescription_;                            //!< True if a description was added
+            LanguageEntryName description_;                     //!< The description
     };
 }
Index: /code/branches/FICN/src/orxonox/core/CoreIncludes.h
===================================================================
--- /code/branches/FICN/src/orxonox/core/CoreIncludes.h	(revision 704)
+++ /code/branches/FICN/src/orxonox/core/CoreIncludes.h	(revision 705)
@@ -141,5 +141,5 @@
         this->getIdentifier()->setConfigValueContainer(#varname, container##varname); \
     } \
-    varname = container##varname->getValue(varname)
+    container##varname->getValue(varname)
 
 /**
@@ -152,5 +152,5 @@
     { \
         container##varname##reset->resetConfigValue(); \
-        varname = container##varname##reset->getValue(varname); \
+        container##varname##reset->getValue(varname); \
     } \
     else \
Index: /code/branches/FICN/src/orxonox/core/CorePrereqs.h
===================================================================
--- /code/branches/FICN/src/orxonox/core/CorePrereqs.h	(revision 704)
+++ /code/branches/FICN/src/orxonox/core/CorePrereqs.h	(revision 705)
@@ -79,4 +79,6 @@
   template <class T>
   class Iterator;
+  class Language;
+  class LanguageEntry;
   class MetaObjectList;
   template <class T>
