Index: code/branches/core2/src/util/MultiTypeMath.cc
===================================================================
--- code/branches/core2/src/util/MultiTypeMath.cc	(revision 933)
+++ code/branches/core2/src/util/MultiTypeMath.cc	(revision 947)
@@ -144,4 +144,22 @@
 }
 
+std::string MultiTypeMath::getTypename() const
+{
+    if (this->type_ == MT_vector2)
+        return "Vector2";
+    else if (this->type_ == MT_vector3)
+        return "Vector3";
+    else if (this->type_ == MT_colourvalue)
+        return "ColourValue";
+    else if (this->type_ == MT_quaternion)
+        return "Quaternion";
+    else if (this->type_ == MT_radian)
+        return "Radian";
+    else if (this->type_ == MT_degree)
+        return "Degree";
+    else
+        return MultiTypeString::getTypename();
+}
+
 std::string MultiTypeMath::toString() const
 {
Index: code/branches/core2/src/util/MultiTypeMath.h
===================================================================
--- code/branches/core2/src/util/MultiTypeMath.h	(revision 933)
+++ code/branches/core2/src/util/MultiTypeMath.h	(revision 947)
@@ -145,4 +145,6 @@
         inline void getValue(orxonox::Degree*      variable) const { (*variable) = orxonox::Degree      (this->degree_);      }
 
+        virtual std::string getTypename() const;
+
         virtual std::string toString() const;
         virtual bool fromString(const std::string value);
Index: code/branches/core2/src/util/MultiTypePrimitive.cc
===================================================================
--- code/branches/core2/src/util/MultiTypePrimitive.cc	(revision 933)
+++ code/branches/core2/src/util/MultiTypePrimitive.cc	(revision 947)
@@ -167,4 +167,36 @@
 }
 
+std::string MultiTypePrimitive::getTypename() const
+{
+    if (this->type_ == MT_void)
+        return "pointer";
+    else if (this->type_ == MT_int)
+        return "int";
+    else if (this->type_ == MT_uint)
+        return "unsigned int";
+    else if (this->type_ == MT_char)
+        return "char";
+    else if (this->type_ == MT_uchar)
+        return "unsigned char";
+    else if (this->type_ == MT_short)
+        return "short";
+    else if (this->type_ == MT_ushort)
+        return "unsigned short";
+    else if (this->type_ == MT_long)
+        return "long";
+    else if (this->type_ == MT_ulong)
+        return "unsigned long";
+    else if (this->type_ == MT_float)
+        return "float";
+    else if (this->type_ == MT_double)
+        return "double";
+    else if (this->type_ == MT_longdouble)
+        return "long double";
+    else if (this->type_ == MT_bool)
+        return "bool";
+    else
+        return "unknown";
+}
+
 std::string MultiTypePrimitive::toString() const
 {
Index: code/branches/core2/src/util/MultiTypePrimitive.h
===================================================================
--- code/branches/core2/src/util/MultiTypePrimitive.h	(revision 933)
+++ code/branches/core2/src/util/MultiTypePrimitive.h	(revision 947)
@@ -181,4 +181,6 @@
         inline bool      isA(MultiType type) const { return (this->type_ == type); }
 
+        virtual std::string getTypename() const;
+
         virtual std::string toString() const;
         virtual bool fromString(const std::string value);
Index: code/branches/core2/src/util/MultiTypeString.cc
===================================================================
--- code/branches/core2/src/util/MultiTypeString.cc	(revision 933)
+++ code/branches/core2/src/util/MultiTypeString.cc	(revision 947)
@@ -104,4 +104,16 @@
 }
 
+std::string MultiTypeString::getTypename() const
+{
+    if (this->type_ == MT_constchar)
+        return "string";
+    else if (this->type_ == MT_string)
+        return "string";
+    else if (this->type_ == MT_xmlelement)
+        return "XML-element";
+    else
+        return MultiTypePrimitive::getTypename();
+}
+
 std::string MultiTypeString::toString() const
 {
Index: code/branches/core2/src/util/MultiTypeString.h
===================================================================
--- code/branches/core2/src/util/MultiTypeString.h	(revision 933)
+++ code/branches/core2/src/util/MultiTypeString.h	(revision 947)
@@ -115,4 +115,6 @@
         inline void getValue(orxonox::Element* variable) const { (*variable) = this->xmlelement_;     }
 
+        virtual std::string getTypename() const;
+
         virtual std::string toString() const;
         virtual bool fromString(const std::string value);
Index: code/branches/core2/src/util/String.cc
===================================================================
--- code/branches/core2/src/util/String.cc	(revision 933)
+++ code/branches/core2/src/util/String.cc	(revision 947)
@@ -25,4 +25,6 @@
  *
  */
+
+#include <cctype>
 
 #include "String.h"
@@ -116,9 +118,8 @@
 void lowercase(std::string* str)
 {
-    static unsigned const char difference_between_A_and_a = 'A' - 'a';
-
-    for (std::string::iterator it = (*str).begin(); it != (*str).end(); ++it)
-        if ((*it) >= 'A' && (*it) <= 'Z')
-            (*it) -= difference_between_A_and_a;
+    for (unsigned int i = 0; i < str->size(); ++i)
+    {
+        (*str)[i] = tolower((*str)[i]);
+    }
 }
 
@@ -141,9 +142,8 @@
 void uppercase(std::string* str)
 {
-    static unsigned const char difference_between_A_and_a = 'A' - 'a';
-
-    for (std::string::iterator it = (*str).begin(); it != (*str).end(); ++it)
-        if ((*it) >= 'a' && (*it) <= 'z')
-            (*it) += difference_between_A_and_a;
+    for (unsigned int i = 0; i < str->size(); ++i)
+    {
+        (*str)[i] = toupper((*str)[i]);
+    }
 }
 
