Index: code/branches/core7/src/libraries/core/CoreIncludes.h
===================================================================
--- code/branches/core7/src/libraries/core/CoreIncludes.h	(revision 10373)
+++ code/branches/core7/src/libraries/core/CoreIncludes.h	(revision 10374)
@@ -255,4 +255,7 @@
                 { this->parents_.push_back(new InheritsFromClass<T>()); return *this; }
 
+            inline StaticallyInitializedIdentifier& virtualBase()
+                { this->identifier_->setVirtualBase(true); return *this; }
+
         private:
             Identifier* identifier_;
Index: code/branches/core7/src/libraries/core/class/Identifiable.cc
===================================================================
--- code/branches/core7/src/libraries/core/class/Identifiable.cc	(revision 10373)
+++ code/branches/core7/src/libraries/core/class/Identifiable.cc	(revision 10374)
@@ -41,5 +41,5 @@
 namespace orxonox
 {
-    RegisterClassNoArgs(Identifiable);
+    RegisterClassNoArgs(Identifiable).virtualBase();
 
     /**
Index: code/branches/core7/src/libraries/core/class/Identifier.cc
===================================================================
--- code/branches/core7/src/libraries/core/class/Identifier.cc	(revision 10373)
+++ code/branches/core7/src/libraries/core/class/Identifier.cc	(revision 10374)
@@ -56,4 +56,5 @@
         this->bInitialized_ = false;
         this->bLoadable_ = false;
+        this->bIsVirtualBase_ = false;
 
         this->bHasConfigValues_ = false;
Index: code/branches/core7/src/libraries/core/class/Identifier.h
===================================================================
--- code/branches/core7/src/libraries/core/class/Identifier.h	(revision 10373)
+++ code/branches/core7/src/libraries/core/class/Identifier.h	(revision 10374)
@@ -138,4 +138,9 @@
             /// Set the class to be loadable through XML or not.
             inline void setLoadable(bool bLoadable) { this->bLoadable_ = bLoadable; }
+
+            /// Returns true if child classes should inherit virtually from this class.
+            inline bool isVirtualBase() const { return this->bIsVirtualBase_; }
+            /// Defines if child classes should inherit virtually from this class.
+            inline void setVirtualBase(bool bIsVirtualBase) { this->bIsVirtualBase_ = bIsVirtualBase; }
 
             /// Returns true if the Identifier was completely initialized.
@@ -218,4 +223,5 @@
             bool bInitialized_;                                            //!< Is true if the Identifier was completely initialized
             bool bLoadable_;                                               //!< False = it's not permitted to load the object through XML
+            bool bIsVirtualBase_;                                          //!< If true, it is recommended to inherit virtually from this class. This changes the order of initialization of child classes, thus this information is necessary to check the class hierarchy.
             std::string name_;                                             //!< The name of the class the Identifier belongs to
             Factory* factory_;                                             //!< The Factory, able to create new objects of the given class (if available)
Index: code/branches/core7/src/libraries/core/class/OrxonoxInterface.cc
===================================================================
--- code/branches/core7/src/libraries/core/class/OrxonoxInterface.cc	(revision 10373)
+++ code/branches/core7/src/libraries/core/class/OrxonoxInterface.cc	(revision 10374)
@@ -32,5 +32,5 @@
 namespace orxonox
 {
-    RegisterClassNoArgs(OrxonoxInterface);
+    RegisterClassNoArgs(OrxonoxInterface).virtualBase();
 
     OrxonoxInterface::OrxonoxInterface()
Index: code/branches/core7/src/libraries/core/config/Configurable.cc
===================================================================
--- code/branches/core7/src/libraries/core/config/Configurable.cc	(revision 10373)
+++ code/branches/core7/src/libraries/core/config/Configurable.cc	(revision 10374)
@@ -32,5 +32,5 @@
 namespace orxonox
 {
-    RegisterClassNoArgs(Configurable);
+    RegisterClassNoArgs(Configurable).virtualBase();
 
     Configurable::Configurable()
Index: code/branches/core7/src/libraries/core/object/Listable.cc
===================================================================
--- code/branches/core7/src/libraries/core/object/Listable.cc	(revision 10373)
+++ code/branches/core7/src/libraries/core/object/Listable.cc	(revision 10374)
@@ -39,5 +39,5 @@
 namespace orxonox
 {
-    RegisterClass(Listable);
+    RegisterClass(Listable).virtualBase();
 
     /**
