Index: branches/new_class_id/src/lib/graphics/importer/md2/resource_md2.h
===================================================================
--- branches/new_class_id/src/lib/graphics/importer/md2/resource_md2.h	(revision 9845)
+++ branches/new_class_id/src/lib/graphics/importer/md2/resource_md2.h	(revision 9846)
@@ -25,5 +25,6 @@
     MD2ResourcePointer(const std::string& loadString, const Resources::KeepLevel& keepLevel, const MD2Data::Pointer& data);
     inline const MD2Data::Pointer& ptr() const { return pointer; }
-private:
+    virtual bool last() const { return pointer.count() == 1; }
+  private:
     MD2Data::Pointer pointer;
   };
Index: branches/new_class_id/src/lib/graphics/importer/resource_obj.h
===================================================================
--- branches/new_class_id/src/lib/graphics/importer/resource_obj.h	(revision 9845)
+++ branches/new_class_id/src/lib/graphics/importer/resource_obj.h	(revision 9846)
@@ -23,4 +23,5 @@
     OBJResourcePointer(const std::string& loadString, const Resources::KeepLevel& keepLevel, const StaticModelData::Pointer& data);
     inline const StaticModelData::Pointer& ptr() const { return pointer; }
+    virtual bool last() const { return pointer.count() == 1; }
 private:
     StaticModelData::Pointer pointer;
Index: branches/new_class_id/src/lib/graphics/importer/resource_texture.h
===================================================================
--- branches/new_class_id/src/lib/graphics/importer/resource_texture.h	(revision 9845)
+++ branches/new_class_id/src/lib/graphics/importer/resource_texture.h	(revision 9846)
@@ -24,5 +24,6 @@
     TextureResourcePointer(const std::string& loadString, const Resources::KeepLevel& keepLevel, const TextureData::Pointer& data);
     inline const TextureData::Pointer& ptr() const { return pointer; }
-private:
+    virtual bool last() const { return pointer.count() == 1; }
+  private:
     TextureData::Pointer pointer;
   };
Index: branches/new_class_id/src/lib/graphics/resource_shader.h
===================================================================
--- branches/new_class_id/src/lib/graphics/resource_shader.h	(revision 9845)
+++ branches/new_class_id/src/lib/graphics/resource_shader.h	(revision 9846)
@@ -24,4 +24,5 @@
     ShaderResourcePointer(const std::string& loadString, const Resources::KeepLevel& keepLevel, const ShaderData::Pointer& data);
     inline const ShaderData::Pointer& ptr() const { return pointer; }
+    virtual bool last() const { return pointer.count() == 1; }
   private:
     ShaderData::Pointer pointer;
Index: branches/new_class_id/src/lib/graphics/text_engine/resource_font.h
===================================================================
--- branches/new_class_id/src/lib/graphics/text_engine/resource_font.h	(revision 9845)
+++ branches/new_class_id/src/lib/graphics/text_engine/resource_font.h	(revision 9846)
@@ -24,5 +24,6 @@
     FontResourcePointer(const std::string& loadString, const Resources::KeepLevel& keepLevel, const FontData::Pointer& data);
     inline const FontData::Pointer& ptr() const { return pointer; }
-private:
+    virtual bool last() const { return pointer.count() == 1; }
+  private:
     FontData::Pointer pointer;
   };
Index: branches/new_class_id/src/lib/sound/resource_sound_buffer.h
===================================================================
--- branches/new_class_id/src/lib/sound/resource_sound_buffer.h	(revision 9845)
+++ branches/new_class_id/src/lib/sound/resource_sound_buffer.h	(revision 9846)
@@ -26,4 +26,5 @@
       SoundBufferResourcePointer(const std::string& loadString, const Resources::KeepLevel& keepLevel, const SoundBufferData::Pointer& data);
       inline const SoundBufferData::Pointer& ptr() const { return pointer; }
+      virtual bool last() const { return pointer.count() == 1; }
     private:
       SoundBufferData::Pointer pointer;
Index: branches/new_class_id/src/lib/util/loading/resource.cc
===================================================================
--- branches/new_class_id/src/lib/util/loading/resource.cc	(revision 9845)
+++ branches/new_class_id/src/lib/util/loading/resource.cc	(revision 9846)
@@ -178,5 +178,5 @@
     std::vector<Resources::StorePointer*>::iterator it;
     for (it = this->_storedResources.begin(); it != this->_storedResources.end(); ++it)
-      if((*it)->keepLevel() < keepLevel)
+      if((*it)->keepLevel() < keepLevel && (*it)->last())
     {
       delete (*it);
Index: branches/new_class_id/src/lib/util/loading/resource.h
===================================================================
--- branches/new_class_id/src/lib/util/loading/resource.h	(revision 9845)
+++ branches/new_class_id/src/lib/util/loading/resource.h	(revision 9846)
@@ -26,14 +26,14 @@
   public:
     /** @param keepLevel the level to set. */
-    KeepLevel(unsigned int keepLevel) { _keepLevel = keepLevel; };
+    inline KeepLevel(unsigned int keepLevel) { _keepLevel = keepLevel; };
     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; };
+    inline bool operator==(const KeepLevel& keepLevel) const { return this->_keepLevel == keepLevel._keepLevel; };
+    inline bool operator!=(const KeepLevel& keepLevel) const { return this->_keepLevel != keepLevel._keepLevel; };
+    inline bool operator<=(const KeepLevel& keepLevel) const { return this->_keepLevel <= keepLevel._keepLevel; };
+    inline bool operator<(const KeepLevel& keepLevel) const { return this->_keepLevel < keepLevel._keepLevel; };
 
     /** @returns the KeepLevel */
-    unsigned int keepLevel() const { return _keepLevel; };
+    inline unsigned int keepLevel() const { return _keepLevel; };
     const std::string& name() const;
   private:
@@ -41,9 +41,10 @@
   };
 
+
+
   //! Stores a Resource-Pointer, the LoadString and it's keepLevel.
   class StorePointer
   {
   public:
-    StorePointer(const std::string& loadString, const Resources::KeepLevel& keeplevel);
     //! Virtual Destructor, that removes the Stored information-pointer.
     virtual ~StorePointer() {};
@@ -54,8 +55,19 @@
     const Resources::KeepLevel& keepLevel() const { return _keepLevel; };
 
+    virtual bool last() const = 0;
+
+    protected:
+      StorePointer(const std::string& loadString, const Resources::KeepLevel& keeplevel);
+
+    private:
+      StorePointer(const StorePointer&) : _keepLevel(0) {};
+
   private:
     std::string                 _loadString;             //!< An identifier, to match when loading a File.
     Resources::KeepLevel        _keepLevel;              //!< The Priority of this resource. (can only be increased, so none else will delete this)
   };
+
+
+
 
   //! A Type of Resources.
