Index: branches/new_class_id/src/lib/util/loading/resource.cc
===================================================================
--- branches/new_class_id/src/lib/util/loading/resource.cc	(revision 9844)
+++ branches/new_class_id/src/lib/util/loading/resource.cc	(revision 9845)
@@ -137,5 +137,5 @@
   //////////////
   Type::Type(const std::string& typeName)
-      : _id(-1), _typeName(typeName)
+      : _typeName(typeName)
   {
     ResourceManager::getInstance()->registerType(this);
@@ -151,5 +151,4 @@
   {
     this->_storedResources.push_back(resource);
-
   }
 
@@ -175,8 +174,14 @@
   }
 
-
-  void Type::setID(int id)
-  {
-    this->_id = id;
+  void Type::unloadAllBelowKeepLevel(const Resources::KeepLevel& keepLevel)
+  {
+    std::vector<Resources::StorePointer*>::iterator it;
+    for (it = this->_storedResources.begin(); it != this->_storedResources.end(); ++it)
+      if((*it)->keepLevel() < keepLevel)
+    {
+      delete (*it);
+      this->_storedResources.erase(it);
+      it = this->_storedResources.begin();
+    }
   }
 
@@ -184,5 +189,5 @@
   void Type::debug() const
   {
-    PRINT(0)(" ResourceType '%s' with ID %d stores %d Resources\n", this->_typeName.c_str(), this->_id, this->_storedResources.size());
+    PRINT(0)(" ResourceType '%s' stores %d Resources\n", this->_typeName.c_str(), this->_storedResources.size());
     PRINT(0)("  Paths:\n");
     for (unsigned int i = 0; i < this->_resourcePaths.size(); ++i)
Index: branches/new_class_id/src/lib/util/loading/resource.h
===================================================================
--- branches/new_class_id/src/lib/util/loading/resource.h	(revision 9844)
+++ branches/new_class_id/src/lib/util/loading/resource.h	(revision 9845)
@@ -29,4 +29,9 @@
     KeepLevel(const std::string& keepLevelName);
 
+    bool operator==(const KeepLevel& keepLevel) const { return this->_keepLevel == keepLevel._keepLevel; };
+    bool operator!=(const KeepLevel& keepLevel) const { return this->_keepLevel != keepLevel._keepLevel; };
+    bool operator<=(const KeepLevel& keepLevel) const { return this->_keepLevel <= keepLevel._keepLevel; };
+    bool operator<(const KeepLevel& keepLevel) const { return this->_keepLevel < keepLevel._keepLevel; };
+
     /** @returns the KeepLevel */
     unsigned int keepLevel() const { return _keepLevel; };
@@ -41,4 +46,7 @@
   public:
     StorePointer(const std::string& loadString, const Resources::KeepLevel& keeplevel);
+    //! Virtual Destructor, that removes the Stored information-pointer.
+    virtual ~StorePointer() {};
+
     /** @returns the LoadString this resource was loaded with */
     const std::string& loadString() const { return _loadString; };
@@ -73,5 +81,4 @@
     const std::string& storedClassName() const { return _typeName; };
     /** @returns the ID of the Type != ClassID */
-    int id() const { return _id; };
     /** @returns the type-specific paths this Resource searches in. */
     const std::vector<Directory>& resourcePaths() const { return _resourcePaths; };
@@ -83,5 +90,6 @@
     virtual void createFromString(const std::string& loadString) = 0;
 
-    void setID(int id);
+    void unloadAllBelowKeepLevel(const Resources::KeepLevel& keepLevel);
+
     void addResource(Resources::StorePointer* resource);
 
@@ -94,5 +102,4 @@
     Type(const Type& type) {};
   private:
-    int                                   _id;                //!< ID of the Type in over all of the Types.
     const std::string                     _typeName;          //!< Name of the Type. (Name of the Resource this loads.)
     std::vector<Directory>                _resourcePaths;     //!< The Paths to search for files in this type
Index: branches/new_class_id/src/lib/util/loading/resource_manager.cc
===================================================================
--- branches/new_class_id/src/lib/util/loading/resource_manager.cc	(revision 9844)
+++ branches/new_class_id/src/lib/util/loading/resource_manager.cc	(revision 9845)
@@ -60,10 +60,6 @@
   void ResourceManager::registerType(Resources::Type* type)
   {
-    if(type->id() == -1)
-    {
-      type->setID(this->_resourceTypes.size());
-      this->_resourceTypes.push_back(type);
-      PRINTF(5)("ResourceType '%s' with ID %d added\n", type->storedClassName().c_str(), type->id());
-    }
+    this->_resourceTypes.push_back(type);
+    PRINTF(5)("ResourceType '%s' added\n", type->storedClassName().c_str());
   }
 
@@ -74,5 +70,5 @@
     {
       this->_resourceTypes.erase(it);
-      PRINTF(5)("ResourceType '%s' with ID %d removed\n", type->storedClassName().c_str(), type->id());
+      PRINTF(5)("ResourceType '%s' removed\n", type->storedClassName().c_str());
     }
   }
@@ -149,4 +145,14 @@
 
 
+  void ResourceManager::unloadAllBelowKeepLevel(const Resources::KeepLevel& keepLevel)
+  {
+    std::vector<Resources::Type*>::const_iterator it;
+    for (it = this->_resourceTypes.begin(); it != this->_resourceTypes.end(); ++it)
+    {
+      (*it)->unloadAllBelowKeepLevel(keepLevel);
+    }
+  }
+
+
   /**
    * @brief outputs debug information about the ResourceManager
Index: branches/new_class_id/src/lib/util/loading/resource_manager.h
===================================================================
--- branches/new_class_id/src/lib/util/loading/resource_manager.h	(revision 9844)
+++ branches/new_class_id/src/lib/util/loading/resource_manager.h	(revision 9845)
@@ -46,5 +46,5 @@
     std::string prependAbsoluteMainPath(const std::string& fileName);
 
-    bool unloadAllByKeepLevel(const Resources::KeepLevel& keepLevel);
+    void unloadAllBelowKeepLevel(const Resources::KeepLevel& keepLevel);
 
     void debug() const;
Index: branches/new_class_id/src/orxonox.cc
===================================================================
--- branches/new_class_id/src/orxonox.cc	(revision 9844)
+++ branches/new_class_id/src/orxonox.cc	(revision 9845)
@@ -370,4 +370,7 @@
   Resources::ResourceManager::getInstance()->addResourceSubPath("SoundBuffer", "music");
 
+  Resources::ResourceManager::getInstance()->addResourceSubPath("Shader", "shaders");
+  Resources::ResourceManager::getInstance()->addResourceSubPath("OBJ", "models");
+
   Resources::ResourceManager::getInstance()->addKeepLevelName("Imediately");
   Resources::ResourceManager::getInstance()->addKeepLevelName("LevelEnd");
@@ -375,6 +378,4 @@
   Resources::ResourceManager::getInstance()->addKeepLevelName("GameEnd");
 
-
-  Resources::ResourceManager::getInstance()->debug();
   //  DynamicLoader::loadDyLib("libtest.so");
   return 0;
