Index: trunk/src/lib/lang/base_object.cc
===================================================================
--- trunk/src/lib/lang/base_object.cc	(revision 6637)
+++ trunk/src/lib/lang/base_object.cc	(revision 6640)
@@ -13,5 +13,5 @@
    ### File Specific:
    main-programmer: Patrick Boenzli
-   co-programmer: ...
+   co-programmer: Benjamin Grauer
 */
 #define DEBUG_SPECIAL_MODULE DEBUG_MODULE_BASE
Index: trunk/src/util/loading/resource_manager.cc
===================================================================
--- trunk/src/util/loading/resource_manager.cc	(revision 6637)
+++ trunk/src/util/loading/resource_manager.cc	(revision 6640)
@@ -78,8 +78,8 @@
   // deleting the Directorie Lists
   while (!this->imageDirs.empty())
-    {
-      delete[] this->imageDirs.front();
-      this->imageDirs.pop_front();
-    }
+  {
+    delete[] this->imageDirs.front();
+    this->imageDirs.pop_front();
+  }
 
   delete[] this->dataDir;
@@ -162,8 +162,8 @@
   bool retVal;
   if (!isDir(this->dataDir))
-    {
-      PRINTF(1)("%s is not a directory\n", this->dataDir);
-      return false;
-    }
+  {
+    PRINTF(1)("%s is not a directory\n", this->dataDir);
+    return false;
+  }
 
   char* testFile = new char[strlen(this->dataDir)+strlen(fileInside)+1];
@@ -201,26 +201,26 @@
   // check if the param is a Directory
   if (isDir(newDir))
-    {
-      // check if the Directory has been added before
-      std::list<char*>::const_iterator imageDir;
-      for (imageDir = this->imageDirs.begin(); imageDir != this->imageDirs.end(); imageDir++)
+  {
+    // check if the Directory has been added before
+    std::list<char*>::const_iterator imageDir;
+    for (imageDir = this->imageDirs.begin(); imageDir != this->imageDirs.end(); imageDir++)
+    {
+      if (!strcmp(*imageDir, newDir))
       {
-         if (!strcmp(*imageDir, newDir))
-         {
-           PRINTF(3)("Path %s already loaded\n", newDir);
-           delete[] newDir;
-           return true;
-         }
+        PRINTF(3)("Path %s already loaded\n", newDir);
+        delete[] newDir;
+        return true;
       }
-      // adding the directory to the List
-      this->imageDirs.push_back(newDir);
-      return true;
-    }
-  else
-    {
-      PRINTF(1)("%s is not a Directory, and can not be added to the Paths of Images\n", newDir);
-      delete[] newDir;
-      return false;
-    }
+    }
+    // adding the directory to the List
+    this->imageDirs.push_back(newDir);
+    return true;
+  }
+  else
+  {
+    PRINTF(1)("%s is not a Directory, and can not be added to the Paths of Images\n", newDir);
+    delete[] newDir;
+    return false;
+  }
 }
 #endif /* NO_TEXTURES */
@@ -258,34 +258,34 @@
 #endif
 #define __IF_OK
-  if (!strncasecmp(fileName+(strlen(fileName)-4), ".wav", 4))
-    tmpType = WAV;
-  else if (!strncasecmp(fileName+(strlen(fileName)-4), ".mp3", 4))
-    tmpType = MP3;
-  else if (!strncasecmp(fileName+(strlen(fileName)-4), ".ogg", 4))
-    tmpType = OGG;
+    if (!strncasecmp(fileName+(strlen(fileName)-4), ".wav", 4))
+      tmpType = WAV;
+    else if (!strncasecmp(fileName+(strlen(fileName)-4), ".mp3", 4))
+      tmpType = MP3;
+    else if (!strncasecmp(fileName+(strlen(fileName)-4), ".ogg", 4))
+      tmpType = OGG;
 #endif /* NO_AUDIO */
 #ifndef NO_TEXT
 #ifdef __IF_OK
-  else
+    else
 #endif
 #define __IF_OK
- if (!strncasecmp(fileName+(strlen(fileName)-4), ".ttf", 4))
-    tmpType = TTF;
+      if (!strncasecmp(fileName+(strlen(fileName)-4), ".ttf", 4))
+        tmpType = TTF;
 #endif /* NO_TEXT */
 #ifndef NO_SHADERS
 #ifdef __IF_OK
-  else
+      else
 #endif
 #define __IF_OK
- if (!strncasecmp(fileName+(strlen(fileName)-5), ".vert", 5))
-    tmpType = SHADER;
+        if (!strncasecmp(fileName+(strlen(fileName)-5), ".vert", 5))
+          tmpType = SHADER;
 #endif /* NO_SHADERS */
 #ifndef NO_TEXTURES
 #ifdef __IF_OK
-  else
+        else
 #else
   if
 #endif
-   tmpType = IMAGE;
+          tmpType = IMAGE;
 #endif /* NO_TEXTURES */
 #undef __IF_OK
@@ -304,178 +304,200 @@
 */
 BaseObject* ResourceManager::load(const char* fileName, ResourceType type, ResourcePriority prio,
-                            void* param1, void* param2, void* param3)
-{
-  if (fileName == NULL)
+                                  void* param1, void* param2, void* param3)
+{
+  assert(fileName != NULL);
+
+  // searching if the resource was loaded before.
+  Resource* tmpResource;
+  // check if we already loaded this Resource
+  tmpResource = this->locateResourceByInfo(fileName, type, param1, param2, param3);
+  // otherwise load it
+  if (tmpResource == NULL)
+    tmpResource = this->loadResource(fileName, type, prio, param1, param2, param3);
+  // return cached pointer.
+  if (tmpResource != NULL) // if the resource was loaded before.
+  {
+    tmpResource->count++;
+    if(tmpResource->prio < prio)
+      tmpResource->prio = prio;
+    return tmpResource->pointer;
+  }
+  else
     return NULL;
-
-  // searching if the resource was loaded before.
-  Resource* tmpResource = this->locateResourceByInfo(fileName, type, param1, param2, param3);
-  if (tmpResource != NULL) // if the resource was loaded before.
-    {
-      PRINTF(4)("not loading cached resource %s\n", tmpResource->name);
-      tmpResource->count++;
-      if(tmpResource->prio < prio)
-        tmpResource->prio = prio;
-    }
-  else
-    {
-      // Setting up the new Resource
-      tmpResource = new Resource;
-      tmpResource->count = 1;
-      tmpResource->type = type;
-      tmpResource->prio = prio;
-      tmpResource->pointer = NULL;
-      tmpResource->name = new char[strlen(fileName)+1];
-      strcpy(tmpResource->name, fileName);
-
-      // creating the full name. (directoryName + FileName)
-      char* fullName = ResourceManager::getFullName(fileName);
-      // Checking for the type of resource \see ResourceType
-      switch(type)
-        {
+}
+
+
+/**
+ * loads resources for internal purposes
+ * @param fileName: The fileName of the resource to load
+ * @param type: The Type of Resource to load.
+ * @param prio: The ResourcePriority of this resource (will only be increased)
+ * @param param1: an additional option to parse (see the constuctors for more help)
+ * @param param2: an additional option to parse (see the constuctors for more help)
+ * @param param3: an additional option to parse (see the constuctors for more help)
+ * @returns a pointer to a desired Resource.
+ */
+Resource* ResourceManager::loadResource(const char* fileName, ResourceType type, ResourcePriority prio,
+    void* param1, void* param2, void* param3)
+{
+  // Setting up the new Resource
+  Resource* tmpResource = new Resource;
+  tmpResource->count = 0;
+  tmpResource->type = type;
+  tmpResource->prio = prio;
+  tmpResource->pointer = NULL;
+  tmpResource->name = new char[strlen(fileName)+1];
+  strcpy(tmpResource->name, fileName);
+
+  // creating the full name. (directoryName + FileName)
+  char* fullName = ResourceManager::getFullName(fileName);
+  // Checking for the type of resource \see ResourceType
+  switch(type)
+  {
 #ifndef NO_MODEL
-        case OBJ:
-          if (param1)
-            tmpResource->modelSize = *(float*)param1;
-          else
-            tmpResource->modelSize = 1.0;
-
-          if(ResourceManager::isFile(fullName))
-            tmpResource->pointer = new OBJModel(fullName, tmpResource->modelSize);
-          else
-            {
-              PRINTF(2)("File %s in %s does not exist. Loading a cube-Model instead\n", fileName, dataDir);
-              tmpResource->pointer = ResourceManager::load("cube", PRIM, prio, &tmpResource->modelSize);
-            }
-          break;
-        case PRIM:
-          if (param1)
-            tmpResource->modelSize = *(float*)param1;
-          else
-            tmpResource->modelSize = 1.0;
-
-          if (!strcmp(tmpResource->name, "cube"))
-            tmpResource->pointer = new PrimitiveModel(PRIM_CUBE, tmpResource->modelSize);
-          else if (!strcmp(tmpResource->name, "sphere"))
-            tmpResource->pointer = new PrimitiveModel(PRIM_SPHERE, tmpResource->modelSize);
-          else if (!strcmp(tmpResource->name, "plane"))
-            tmpResource->pointer = new PrimitiveModel(PRIM_PLANE, tmpResource->modelSize);
-          else if (!strcmp(tmpResource->name, "cylinder"))
-            tmpResource->pointer = new PrimitiveModel(PRIM_CYLINDER, tmpResource->modelSize);
-          else if (!strcmp(tmpResource->name, "cone"))
-            tmpResource->pointer = new PrimitiveModel(PRIM_CONE, tmpResource->modelSize);
-          break;
-        case MD2:
-          if(ResourceManager::isFile(fullName))
-            {
-              if (param1 != NULL)
-                {
-                  tmpResource->secFileName = new char[strlen((const char*)param1)+1];
-                  strcpy(tmpResource->secFileName, (const char*) param1);
-                }
-              else
-                tmpResource->secFileName = NULL;
-                tmpResource->pointer = new MD2Data(fullName, tmpResource->secFileName);
-//               tmpResource->pointer = new MD2Model(fullName, tmpResource->secFileName);
-
-            }
-              break;
+  case OBJ:
+    if (param1)
+      tmpResource->modelSize = *(float*)param1;
+    else
+      tmpResource->modelSize = 1.0;
+
+    if(ResourceManager::isFile(fullName))
+      tmpResource->pointer = new OBJModel(fullName, tmpResource->modelSize);
+    else
+    {
+      PRINTF(2)("File %s in %s does not exist. Loading a cube-Model instead\n", fileName, dataDir);
+      tmpResource->pointer = ResourceManager::load("cube", PRIM, prio, &tmpResource->modelSize);
+    }
+    break;
+  case PRIM:
+    if (param1)
+      tmpResource->modelSize = *(float*)param1;
+    else
+      tmpResource->modelSize = 1.0;
+
+    if (!strcmp(tmpResource->name, "cube"))
+      tmpResource->pointer = new PrimitiveModel(PRIM_CUBE, tmpResource->modelSize);
+    else if (!strcmp(tmpResource->name, "sphere"))
+      tmpResource->pointer = new PrimitiveModel(PRIM_SPHERE, tmpResource->modelSize);
+    else if (!strcmp(tmpResource->name, "plane"))
+      tmpResource->pointer = new PrimitiveModel(PRIM_PLANE, tmpResource->modelSize);
+    else if (!strcmp(tmpResource->name, "cylinder"))
+      tmpResource->pointer = new PrimitiveModel(PRIM_CYLINDER, tmpResource->modelSize);
+    else if (!strcmp(tmpResource->name, "cone"))
+      tmpResource->pointer = new PrimitiveModel(PRIM_CONE, tmpResource->modelSize);
+    break;
+  case MD2:
+    if(ResourceManager::isFile(fullName))
+    {
+      if (param1 != NULL)
+      {
+        tmpResource->secFileName = new char[strlen((const char*)param1)+1];
+        strcpy(tmpResource->secFileName, (const char*) param1);
+      }
+      else
+        tmpResource->secFileName = NULL;
+      tmpResource->pointer = new MD2Data(fullName, tmpResource->secFileName);
+      //               tmpResource->pointer = new MD2Model(fullName, tmpResource->secFileName);
+
+    }
+    break;
 #endif /* NO_MODEL */
 #ifndef NO_TEXT
-        case TTF:
-            if (param1 != NULL)
-              tmpResource->ttfSize = *(unsigned int*)param1;
-            else
-              tmpResource->ttfSize = FONT_DEFAULT_RENDER_SIZE;
-
-          if(isFile(fullName))
-            tmpResource->pointer = new Font(fullName, tmpResource->ttfSize);
-          else
-            PRINTF(2)("%s does not exist in %s. Not loading Font\n", fileName, this->dataDir);
-          break;
+  case TTF:
+    if (param1 != NULL)
+      tmpResource->ttfSize = *(unsigned int*)param1;
+    else
+      tmpResource->ttfSize = FONT_DEFAULT_RENDER_SIZE;
+
+    if(isFile(fullName))
+      tmpResource->pointer = new Font(fullName, tmpResource->ttfSize);
+    else
+      PRINTF(2)("%s does not exist in %s. Not loading Font\n", fileName, this->dataDir);
+    break;
 #endif /* NO_TEXT */
 #ifndef NO_AUDIO
-        case WAV:
-          if(isFile(fullName))
-            tmpResource->pointer = new SoundBuffer(fullName);
-          break;
-        case OGG:
-          if (isFile(fullName))
-            tmpResource->pointer = new OggPlayer(fullName);
-          break;
+  case WAV:
+    if(isFile(fullName))
+      tmpResource->pointer = new SoundBuffer(fullName);
+    break;
+  case OGG:
+    if (isFile(fullName))
+      tmpResource->pointer = new OggPlayer(fullName);
+    break;
 #endif /* NO_AUDIO */
 #ifndef NO_TEXTURES
-        case IMAGE:
-          if (param1 != NULL)
-            tmpResource->texTarget = *(GLenum*)param1;
-          else
-            tmpResource->texTarget = GL_TEXTURE_2D;
-          if(isFile(fullName))
-            {
-              PRINTF(4)("Image %s resides to %s\n", fileName, fullName);
-              tmpResource->pointer = new Texture(fullName);
-            }
-          else
-            {
-              std::list<char*>::iterator imageDir;
-              for (imageDir = this->imageDirs.begin(); imageDir != this->imageDirs.end(); imageDir++)
-                {
-                  char* imgName = new char[strlen(*imageDir)+strlen(fileName)+1];
-                  sprintf(imgName, "%s%s", *imageDir, fileName);
-                  if(isFile(imgName))
-                    {
-                      PRINTF(4)("Image %s resides to %s\n", fileName, imgName);
-                      tmpResource->pointer = new Texture(imgName, tmpResource->texTarget);
-                      delete[] imgName;
-                      break;
-                    }
-                  delete[] imgName;
-                }
-            }
-          if(!tmpResource)
-             PRINTF(2)("!!Image %s not Found!!\n", fileName);
+  case IMAGE:
+    if (param1 != NULL)
+      tmpResource->texTarget = *(GLenum*)param1;
+    else
+      tmpResource->texTarget = GL_TEXTURE_2D;
+    if(isFile(fullName))
+    {
+      PRINTF(4)("Image %s resides to %s\n", fileName, fullName);
+      tmpResource->pointer = new Texture(fullName);
+    }
+    else
+    {
+      std::list<char*>::iterator imageDir;
+      for (imageDir = this->imageDirs.begin(); imageDir != this->imageDirs.end(); imageDir++)
+      {
+        char* imgName = new char[strlen(*imageDir)+strlen(fileName)+1];
+        sprintf(imgName, "%s%s", *imageDir, fileName);
+        if(isFile(imgName))
+        {
+          PRINTF(4)("Image %s resides to %s\n", fileName, imgName);
+          tmpResource->pointer = new Texture(imgName, tmpResource->texTarget);
+          delete[] imgName;
           break;
+        }
+        delete[] imgName;
+      }
+    }
+    if(!tmpResource)
+      PRINTF(2)("!!Image %s not Found!!\n", fileName);
+    break;
 #endif /* NO_TEXTURES */
 #ifndef NO_SHADERS
-          case SHADER:
-            if(ResourceManager::isFile(fullName))
-            {
-              if (param1 != NULL)
-              {
-                char* secFullName = ResourceManager::getFullName((const char*)param1);
-                if (ResourceManager::isFile(secFullName))
-                {
-                  tmpResource->secFileName = new char[strlen((const char*)param1)+1];
-                  strcpy(tmpResource->secFileName, (const char*) param1);
-                  tmpResource->pointer = new Shader(fullName, secFullName);
-                }
-                delete[] secFullName;
-              }
-              else
-              {
-                tmpResource->secFileName = NULL;
-                tmpResource->pointer = new Shader(fullName, NULL);
-              }
-            }
-            break;
+  case SHADER:
+    if(ResourceManager::isFile(fullName))
+    {
+      if (param1 != NULL)
+      {
+        char* secFullName = ResourceManager::getFullName((const char*)param1);
+        if (ResourceManager::isFile(secFullName))
+        {
+          tmpResource->secFileName = new char[strlen((const char*)param1)+1];
+          strcpy(tmpResource->secFileName, (const char*) param1);
+          tmpResource->pointer = new Shader(fullName, secFullName);
+        }
+        delete[] secFullName;
+      }
+      else
+      {
+        tmpResource->secFileName = NULL;
+        tmpResource->pointer = new Shader(fullName, NULL);
+      }
+    }
+    break;
 #endif /* NO_SHADERS */
-        default:
-          tmpResource->pointer = NULL;
-          PRINTF(1)("No type found for %s.\n   !!This should not happen unless the Type is not supported yet. JUST DO IT!!\n", tmpResource->name);
-          break;
-        }
-      if (tmpResource->pointer != NULL)
-        this->resourceList.push_back(tmpResource);
-      delete[] fullName;
-    }
+  default:
+    tmpResource->pointer = NULL;
+    PRINTF(1)("No type found for %s.\n   !!This should not happen unless the Type is not supported yet. JUST DO IT!!\n", tmpResource->name);
+    break;
+  }
   if (tmpResource->pointer != NULL)
-    return tmpResource->pointer;
-  else
-    {
-      PRINTF(2)("Resource %s could not be loaded\n", fileName);
-      delete[] tmpResource->name;
-      delete tmpResource;
-      return NULL;
-    }
+    this->resourceList.push_back(tmpResource);
+  delete[] fullName;
+
+
+  if (tmpResource->pointer != NULL)
+    return tmpResource;
+  else
+  {
+    PRINTF(2)("Resource %s could not be loaded\n", fileName);
+    delete[] tmpResource->name;
+    delete tmpResource;
+    return NULL;
+  }
 }
 
@@ -515,57 +537,57 @@
 
   if (resource->prio <= prio)
-    {
-      if (resource->count == 0)
-        {
-          // deleting the Resource
-          switch(resource->type)
-            {
+  {
+    if (resource->count == 0)
+    {
+      // deleting the Resource
+      switch(resource->type)
+      {
 #ifndef NO_MODEL
-            case OBJ:
-            case PRIM:
-              delete (Model*)resource->pointer;
-              break;
-            case MD2:
-              delete (MD2Data*)resource->pointer;
-              break;
+      case OBJ:
+      case PRIM:
+        delete (Model*)resource->pointer;
+        break;
+      case MD2:
+        delete (MD2Data*)resource->pointer;
+        break;
 #endif /* NO_MODEL */
 #ifndef NO_AUDIO
-            case WAV:
-              delete (SoundBuffer*)resource->pointer;
-              break;
-            case OGG:
-              delete (OggPlayer*)resource->pointer;
-              break;
+      case WAV:
+        delete (SoundBuffer*)resource->pointer;
+        break;
+      case OGG:
+        delete (OggPlayer*)resource->pointer;
+        break;
 #endif /* NO_AUDIO */
 #ifndef NO_TEXT
-            case TTF:
-              delete (Font*)resource->pointer;
-              break;
+      case TTF:
+        delete (Font*)resource->pointer;
+        break;
 #endif /* NO_TEXT */
 #ifndef NO_TEXTURES
-            case IMAGE:
-              delete (Texture*)resource->pointer;
-              break;
+      case IMAGE:
+        delete (Texture*)resource->pointer;
+        break;
 #endif /* NO_TEXTURES */
 #ifndef NO_SHADERS
-            case SHADER:
-              delete (Shader*)resource->pointer;
-              break;
+      case SHADER:
+        delete (Shader*)resource->pointer;
+        break;
 #endif /* NO_SHADERS */
-            default:
-              PRINTF(2)("NOT YET IMPLEMENTED !!FIX FIX!!\n");
-              return false;
-              break;
-            }
-          // deleting the List Entry:
-          PRINTF(4)("Resource %s safely removed.\n", resource->name);
-          delete[] resource->name;
-          std::list<Resource*>::iterator resourceIT = std::find(this->resourceList.begin(), this->resourceList.end(), resource);
-          this->resourceList.erase(resourceIT);
-          delete resource;
-        }
-      else
-        PRINTF(4)("Resource %s not removed, because there are still %d References to it.\n", resource->name, resource->count);
-    }
+      default:
+        PRINTF(2)("NOT YET IMPLEMENTED !!FIX FIX!!\n");
+        return false;
+        break;
+      }
+      // deleting the List Entry:
+      PRINTF(4)("Resource %s safely removed.\n", resource->name);
+      delete[] resource->name;
+      std::list<Resource*>::iterator resourceIT = std::find(this->resourceList.begin(), this->resourceList.end(), resource);
+      this->resourceList.erase(resourceIT);
+      delete resource;
+    }
+    else
+      PRINTF(4)("Resource %s not removed, because there are still %d References to it.\n", resource->name, resource->count);
+  }
   else
     PRINTF(4)("not deleting resource %s because DeleteLevel to high\n", resource->name);
@@ -590,17 +612,17 @@
       resource = pre;
       pre--;
-        if ((*resource)->prio <= prio)
+      if ((*resource)->prio <= prio)
+      {
+        if ((*resource)->count == 0)
+          unload((*resource), prio);
+        else
         {
-          if ((*resource)->count == 0)
-            unload((*resource), prio);
-          else
-          {
-            PRINTF(2)("unable to unload %s because there are still %d references to it\n",
-                     (*resource)->name, (*resource)->count);
-            removeCount++;
-          }
+          PRINTF(2)("unable to unload %s because there are still %d references to it\n",
+                    (*resource)->name, (*resource)->count);
+          removeCount++;
         }
-     }
-     if (removeCount == 0) break;
+      }
+    }
+    if (removeCount == 0) break;
   }
 }
@@ -617,5 +639,5 @@
 */
 Resource* ResourceManager::locateResourceByInfo(const char* fileName, ResourceType type,
-                                                void* param1, void* param2, void* param3) const
+    void* param1, void* param2, void* param3) const
 {
   std::list<Resource*>::const_iterator resource;
@@ -623,71 +645,71 @@
   {
     if ((*resource)->type == type && !strcmp(fileName, (*resource)->name))
+    {
+      bool match = false;
+
+      switch (type)
+      {
+#ifndef NO_MODEL
+      case PRIM:
+      case OBJ:
+        if (!param1)
         {
-          bool match = false;
-
-          switch (type)
-            {
-#ifndef NO_MODEL
-            case PRIM:
-            case OBJ:
-              if (!param1)
-                {
-                  if ((*resource)->modelSize == 1.0)
-                    match = true;
-                }
-              else if ((*resource)->modelSize == *(float*)param1)
-                match = true;
-              break;
-            case MD2:
-              if (!param1)
-                {
-                  if ((*resource)->secFileName == NULL)
-                    match = true;
-                }
-              else if (!strcmp((*resource)->secFileName, (const char*)param1))
-                match = true;
-              break;
+          if ((*resource)->modelSize == 1.0)
+            match = true;
+        }
+        else if ((*resource)->modelSize == *(float*)param1)
+          match = true;
+        break;
+      case MD2:
+        if (!param1)
+        {
+          if ((*resource)->secFileName == NULL)
+            match = true;
+        }
+        else if (!strcmp((*resource)->secFileName, (const char*)param1))
+          match = true;
+        break;
 #endif /* NO_MODEL */
 #ifndef NO_TEXT
-            case TTF:
-              if (param1 == NULL)
-                {
-                  if ((*resource)->ttfSize == FONT_DEFAULT_RENDER_SIZE)
-                    match = true;
-                }
-              else if ((*resource)->ttfSize == *(unsigned int*)param1)
-                match = true;
-              break;
+      case TTF:
+        if (param1 == NULL)
+        {
+          if ((*resource)->ttfSize == FONT_DEFAULT_RENDER_SIZE)
+            match = true;
+        }
+        else if ((*resource)->ttfSize == *(unsigned int*)param1)
+          match = true;
+        break;
 #endif /* NO_TEXT */
 #ifndef NO_SHADERS
-              case SHADER:
-                if (!param1)
-                {
-                  if ((*resource)->secFileName == NULL)
-                    match = true;
-                }
-                else if (!strcmp((*resource)->secFileName, (const char*)param1))
-                  match = true;
+      case SHADER:
+        if (!param1)
+        {
+          if ((*resource)->secFileName == NULL)
+            match = true;
+        }
+        else if (!strcmp((*resource)->secFileName, (const char*)param1))
+          match = true;
 #endif /* NO_SHADERS */
 #ifndef NO_TEXTURES
-              case IMAGE:
-                if (!param1)
-                {
-                  if ((*resource)->texTarget == GL_TEXTURE_2D)
-                    match = true;
-                }
-                else if ((*resource)->texTarget ==  *(GLenum*)param1)
-                  match = true;
+      case IMAGE:
+        if (!param1)
+        {
+          if ((*resource)->texTarget == GL_TEXTURE_2D)
+            match = true;
+        }
+        else if ((*resource)->texTarget ==  *(GLenum*)param1)
+          match = true;
 #endif /* NO_TEXTURES */
-            default:
-              match = true;
-              break;
-            }
-          if (match)
-            {
-              return (*resource);
-            }
-        }
-    }
+      default:
+        match = true;
+        break;
+      }
+      if (match)
+      {
+        return (*resource);
+      }
+    }
+  }
   return NULL;
 }
@@ -704,5 +726,5 @@
   for (resource = this->resourceList.begin(); resource != this->resourceList.end(); resource++)
     if (pointer == (*resource)->pointer)
-        return (*resource);
+      return (*resource);
   return NULL;
 }
@@ -724,32 +746,32 @@
   if (directoryName[strlen(directoryName)-1] == '/' ||
       directoryName[strlen(directoryName)-1] == '\\')
-    {
-      tmpDirName = new char[strlen(directoryName)];
-      strncpy(tmpDirName, directoryName, strlen(directoryName)-1);
-      tmpDirName[strlen(directoryName)-1] = '\0';
-    }
-  else
-    {
-      tmpDirName = new char[strlen(directoryName)+1];
-      strcpy(tmpDirName, directoryName);
-    }
+  {
+    tmpDirName = new char[strlen(directoryName)];
+    strncpy(tmpDirName, directoryName, strlen(directoryName)-1);
+    tmpDirName[strlen(directoryName)-1] = '\0';
+  }
+  else
+  {
+    tmpDirName = new char[strlen(directoryName)+1];
+    strcpy(tmpDirName, directoryName);
+  }
 
   if(!stat(tmpDirName, &status))
-    {
-      if (status.st_mode & (S_IFDIR
+  {
+    if (status.st_mode & (S_IFDIR
 #ifndef __WIN32__
-                            | S_IFLNK
-#endif
-                            ))
-        {
-          delete[] tmpDirName;
-          return true;
-        }
-      else
-        {
-          delete[] tmpDirName;
-          return false;
-        }
-    }
+                          | S_IFLNK
+#endif
+                         ))
+    {
+      delete[] tmpDirName;
+      return true;
+    }
+    else
+    {
+      delete[] tmpDirName;
+      return false;
+    }
+  }
   else
   {
@@ -772,25 +794,25 @@
   struct stat status;
   if (!stat(tmpFileName, &status))
-    {
-      if (status.st_mode & (S_IFREG
+  {
+    if (status.st_mode & (S_IFREG
 #ifndef __WIN32__
-                            | S_IFLNK
-#endif
-                            ))
-        {
-          delete[] tmpFileName;
-          return true;
-        }
-      else
-        {
-          delete[] tmpFileName;
-          return false;
-        }
-    }
-  else
+                          | S_IFLNK
+#endif
+                         ))
+    {
+      delete[] tmpFileName;
+      return true;
+    }
+    else
     {
       delete[] tmpFileName;
       return false;
     }
+  }
+  else
+  {
+    delete[] tmpFileName;
+    return false;
+  }
 }
 
@@ -806,9 +828,9 @@
   FILE* stream;
   if( (stream = fopen (tmpName, "w")) == NULL)
-    {
-      PRINTF(1)("could not open %s fro writing\n", fileName);
-      delete[] tmpName;
-      return false;
-    }
+  {
+    PRINTF(1)("could not open %s fro writing\n", fileName);
+    delete[] tmpName;
+    return false;
+  }
   fclose(stream);
 
@@ -840,19 +862,19 @@
   char* retName;
   if (!strncmp(name, "~/", 2))
-    {
-      char tmpFileName[500];
+  {
+    char tmpFileName[500];
 #ifdef __WIN32__
-      strcpy(tmpFileName, getenv("USERPROFILE"));
+    strcpy(tmpFileName, getenv("USERPROFILE"));
 #else
-      strcpy(tmpFileName, getenv("HOME"));
-#endif
-      retName = new char[strlen(tmpFileName)+strlen(name)];
-      sprintf(retName, "%s%s", tmpFileName, name+1);
-    }
-  else
-    {
-      retName = new char[strlen(name)+1];
-      strcpy(retName, name);
-    }
+    strcpy(tmpFileName, getenv("HOME"));
+#endif
+    retName = new char[strlen(tmpFileName)+strlen(name)];
+    sprintf(retName, "%s%s", tmpFileName, name+1);
+  }
+  else
+  {
+    retName = new char[strlen(name)+1];
+    strcpy(retName, name);
+  }
   return retName;
 }
@@ -874,8 +896,8 @@
     return retName;
   else
-    {
-      delete[] retName;
-      return NULL;
-    }
+  {
+    delete[] retName;
+    return NULL;
+  }
 }
 
@@ -893,5 +915,5 @@
   bool retVal = false;
   char* checkFile = new char[strlen(ResourceManager::getInstance()->getDataDir())
-      + strlen(fileName) + 1];
+                             + strlen(fileName) + 1];
   sprintf(checkFile, "%s%s", ResourceManager::getInstance()->getDataDir(), fileName);
 
@@ -919,5 +941,5 @@
   std::list<char*>::const_iterator imageDir;
   for (imageDir = this->imageDirs.begin(); imageDir != this->imageDirs.end(); imageDir++)
-      PRINT(0)("%s ", (*imageDir));
+    PRINT(0)("%s ", (*imageDir));
   PRINT(0)("\n");
 
@@ -926,26 +948,26 @@
   for (resource = this->resourceList.begin(); resource != this->resourceList.end(); resource++)
 
-    {
-      PRINT(0)("-----------------------------------------\n");
-      PRINT(0)("Name: %s; References: %d; Type: %s ", (*resource)->name, (*resource)->count, ResourceManager::ResourceTypeToChar((*resource)->type));
-
-      PRINT(0)("gets deleted at ");
-      switch((*resource)->prio)
-        {
-        default:
-        case RP_NO:
-          PRINT(0)("first posibility (0)\n");
-          break;
-        case RP_LEVEL:
-          PRINT(0)("the end of the Level (1)\n");
-          break;
-        case RP_CAMPAIGN:
-          PRINT(0)("the end of the campaign (2)\n");
-          break;
-        case RP_GAME:
-          PRINT(0)("when leaving the game (3)\n");
-          break;
-        }
-    }
+  {
+    PRINT(0)("-----------------------------------------\n");
+    PRINT(0)("Name: %s; References: %d; Type: %s ", (*resource)->name, (*resource)->count, ResourceManager::ResourceTypeToChar((*resource)->type));
+
+    PRINT(0)("gets deleted at ");
+    switch((*resource)->prio)
+    {
+    default:
+    case RP_NO:
+      PRINT(0)("first posibility (0)\n");
+      break;
+    case RP_LEVEL:
+      PRINT(0)("the end of the Level (1)\n");
+      break;
+    case RP_CAMPAIGN:
+      PRINT(0)("the end of the campaign (2)\n");
+      break;
+    case RP_GAME:
+      PRINT(0)("when leaving the game (3)\n");
+      break;
+    }
+  }
 
 
@@ -965,40 +987,40 @@
   {
 #ifndef NO_MODEL
-    case OBJ:
-      return "ObjectModel";
-      break;
-    case PRIM:
-      return "PrimitiveModel";
-      break;
-    case MD2:
-      return "MD2-Data";
-      break;
+  case OBJ:
+    return "ObjectModel";
+    break;
+  case PRIM:
+    return "PrimitiveModel";
+    break;
+  case MD2:
+    return "MD2-Data";
+    break;
 #endif
 #ifndef NO_TEXTURES
-    case IMAGE:
-      return "ImageFile (Texture)";
-      break;
+  case IMAGE:
+    return "ImageFile (Texture)";
+    break;
 #endif
 #ifndef NO_AUDIO
-    case WAV:
-      return "SoundFile";
-      break;
-    case OGG:
-      return "MusicFile";
-      break;
+  case WAV:
+    return "SoundFile";
+    break;
+  case OGG:
+    return "MusicFile";
+    break;
 #endif
 #ifndef NO_TEXT
-    case TTF:
-      return "Font (TTF)";
-      break;
+  case TTF:
+    return "Font (TTF)";
+    break;
 #endif
 #ifndef NO_SHADERS
-    case SHADER:
-      return "Shader";
-      break;
-#endif
-    default:
-      return "unknown Format";
-      break;
-  }
-}
+  case SHADER:
+    return "Shader";
+    break;
+#endif
+  default:
+    return "unknown Format";
+    break;
+  }
+}
Index: trunk/src/util/loading/resource_manager.h
===================================================================
--- trunk/src/util/loading/resource_manager.h	(revision 6637)
+++ trunk/src/util/loading/resource_manager.h	(revision 6640)
@@ -14,4 +14,5 @@
     (NO_TEXT)
     (NO_TEXTURES)
+    (NO_SHADERS)
 */
 
@@ -114,4 +115,8 @@
   bool verifyDataDir(const char* fileInside);
   bool addImageDir(const char* imageDir);
+
+  void cache(const char* fileName, ResourceType type, ResourcePriority prio = RP_NO,
+             void* param1 = NULL, void* param2 = NULL, void* param3 = NULL);
+
   BaseObject* load(const char* fileName, ResourcePriority prio = RP_NO,
                void* param1 = NULL, void* param2 = NULL, void* param3 = NULL);
@@ -142,4 +147,6 @@
  private:
   ResourceManager();
+  Resource* loadResource(const char* fileName, ResourceType type, ResourcePriority prio,
+                     void* param1, void* param2, void* param3);
 
  private:
