Index: /orxonox/trunk/src/lib/coord/p_node.cc
===================================================================
--- /orxonox/trunk/src/lib/coord/p_node.cc	(revision 4760)
+++ /orxonox/trunk/src/lib/coord/p_node.cc	(revision 4761)
@@ -21,13 +21,15 @@
 
 #include "p_node.h"
+#include "null_parent.h"
+
+#include "load_param.h"
+#include "class_list.h"
+
 #include "stdincl.h"
 #include "compiler.h"
-
 #include "error.h"
 #include "debug.h"
 #include "list.h"
 #include "vector.h"
-#include "null_parent.h"
-#include "load_param.h"
 
 //#include "vector.h"
@@ -123,4 +125,7 @@
   LoadParam<PNode>(root, "rel-coor", this, &PNode::setRelCoor)
       .describe("Sets The relative position of the Node to its parent.");
+
+  LoadParam<PNode>(root, "parent", this, &PNode::setParent)
+      .describe("the Name of the Parent of this PNode");
 }
 
@@ -328,4 +333,19 @@
 }
 
+/**
+ * @see PNode::setParent(PNode* parent);
+ * @param parentName the name of the Parent to set to this PNode
+ */
+void PNode::setParent (const char* parentName)
+{
+  PNode* parentNode = dynamic_cast<PNode*>(ClassList::getObject(parentName, CL_PARENT_NODE));
+
+
+  printf("%p\n", parentNode);
+  printf("%s\n", parentNode->getName());
+
+  if (parentNode != NULL)
+    parentNode->addChild(this);
+}
 
 /**
Index: /orxonox/trunk/src/lib/coord/p_node.h
===================================================================
--- /orxonox/trunk/src/lib/coord/p_node.h	(revision 4760)
+++ /orxonox/trunk/src/lib/coord/p_node.h	(revision 4761)
@@ -88,4 +88,6 @@
 
   void setParent (PNode* parent);
+  void setParent (const char* name);
+
   void setParentMode (unsigned int parentingMode);
   /** \returns the Parenting mode of this node */
Index: /orxonox/trunk/src/lib/lang/class_list.cc
===================================================================
--- /orxonox/trunk/src/lib/lang/class_list.cc	(revision 4760)
+++ /orxonox/trunk/src/lib/lang/class_list.cc	(revision 4761)
@@ -109,4 +109,45 @@
 /**
  * checks if the BaseObject* object exists.
+ * @param name the name of the BaseObject to look for
+ * @param classID if not CL_NULL it will only search through a specific type of Objects. Otherwise it will be searched everywhere.
+ * @return true, if the Object Exists in the specified ClassID, false otherwise
+ * @todo: speed this up!!
+ */
+BaseObject* ClassList::getObject(const char* name, long classID)
+{
+  if(unlikely(ClassList::first == NULL) || name == NULL)
+    return NULL;
+  else
+  {
+    ClassList* tmp = ClassList::first;
+    while (likely(tmp != NULL))
+    {
+      if (tmp->classID == classID || (classID == CL_NULL && tmp->classID == CL_BASE_OBJECT))
+      {
+        tIterator<BaseObject>* iterator = tmp->objectList->getIterator();
+        BaseObject* enumBO = iterator->nextElement();
+        const char* tmpName;
+        while (enumBO != NULL)
+        {
+          tmpName = enumBO->getName();
+          if (tmpName && !strcmp(tmpName, name))
+          {
+            delete iterator;
+            return enumBO;
+          }
+          enumBO = iterator->nextElement();
+        }
+        delete iterator;
+        break;
+      }
+      tmp = tmp->next;
+    }
+  }
+  return NULL;
+}
+
+
+/**
+ * checks if the BaseObject* object exists.
  * @param object the Pointer to a BaseObject to check if it exists
  * @param classID if not CL_NULL it will only search through a specific type of Objects. Otherwise it will be searched everywhere.
@@ -127,8 +168,11 @@
         tIterator<BaseObject>* iterator = tmp->objectList->getIterator();
         BaseObject* enumBO = iterator->nextElement();
-        while (enumBO)
+        while (enumBO != NULL)
         {
           if (enumBO == object)
+          {
+            delete iterator;
             return true;
+          }
           enumBO = iterator->nextElement();
         }
Index: /orxonox/trunk/src/lib/lang/class_list.h
===================================================================
--- /orxonox/trunk/src/lib/lang/class_list.h	(revision 4760)
+++ /orxonox/trunk/src/lib/lang/class_list.h	(revision 4761)
@@ -28,8 +28,9 @@
 
     // STATIC FUNCTIONS
-    static void addToClassList(BaseObject* objectPointer, const long& classID, const char* className);
-    static void removeFromClassList(BaseObject* objectPointer);
+    static void         addToClassList(BaseObject* objectPointer, const long& classID, const char* className);
+    static void         removeFromClassList(BaseObject* objectPointer);
 
-    static bool exists(BaseObject* object, long classID = CL_NULL);
+    static BaseObject*  getObject(const char* name, long classID = CL_NULL);
+    static bool         exists(BaseObject* object, long classID = CL_NULL);
 
     static void debug(unsigned int debugLevel = 0);
Index: /orxonox/trunk/src/lib/sound/sound_engine.h
===================================================================
--- /orxonox/trunk/src/lib/sound/sound_engine.h	(revision 4760)
+++ /orxonox/trunk/src/lib/sound/sound_engine.h	(revision 4761)
@@ -37,5 +37,5 @@
 
 //! A class that represents a SoundSource
-class SoundSource : virtual public BaseObject
+class SoundSource : public BaseObject
 {
  public:
