Index: branches/new_class_id/src/lib/graphics/Makefile.am
===================================================================
--- branches/new_class_id/src/lib/graphics/Makefile.am	(revision 9805)
+++ branches/new_class_id/src/lib/graphics/Makefile.am	(revision 9806)
@@ -26,4 +26,5 @@
 		light.h \
 		shader.h \
+		shader_data.h \
 		\
 		render2D/render_2d.h \
Index: branches/new_class_id/src/lib/graphics/importer/static_model.h
===================================================================
--- branches/new_class_id/src/lib/graphics/importer/static_model.h	(revision 9805)
+++ branches/new_class_id/src/lib/graphics/importer/static_model.h	(revision 9806)
@@ -10,7 +10,5 @@
 
 #include "material.h"
-#include "glincl.h"
 #include <vector>
-#include <list>
 
 // definition of different modes for setting up Faces
Index: branches/new_class_id/src/lib/graphics/shader.cc
===================================================================
--- branches/new_class_id/src/lib/graphics/shader.cc	(revision 9805)
+++ branches/new_class_id/src/lib/graphics/shader.cc	(revision 9806)
@@ -35,4 +35,45 @@
 ObjectListDefinition(Shader);
 
+void Shader::Uniform::setV(unsigned int count, float* vv) const
+{
+  switch (count)
+  {
+    case 1:
+    glUniform1fv(this->uniform, 1, vv);
+    break;
+    case 2:
+    glUniform2fv(this->uniform, 2, vv);
+    break;
+    case 3:
+    glUniform3fv(this->uniform, 3, vv);
+    break;
+    case 4:
+    glUniform4fv(this->uniform, 4, vv);
+    break;
+  }
+}
+void Shader::Uniform::setV(unsigned int count, int* vv) const
+{
+  switch (count)
+  {
+    case 1:
+    glUniform1iv(this->uniform, 1, vv);
+    break;
+    case 2:
+    glUniform2iv(this->uniform, 2, vv);
+    break;
+    case 3:
+    glUniform3iv(this->uniform, 3, vv);
+    break;
+    case 4:
+    glUniform4iv(this->uniform, 4, vv);
+    break;
+  }
+}
+
+
+
+
+
 /**
  * standard constructor
@@ -41,24 +82,24 @@
 {
   this->registerObject(this, Shader::_objectList);
-   this->shaderProgram = 0;
-   this->vertexShader = 0;
-   this->fragmentShader = 0;
-
-   if (GLEW_ARB_shader_objects && GLEW_ARB_shading_language_100)
-     {
-       this->shaderProgram = glCreateProgramObjectARB();
-
-       if (!vertexShaderFile.empty())
-         this->loadShaderProgramm(Shader::Vertex, vertexShaderFile);
-       if (!fragmentShaderFile.empty())
-         this->loadShaderProgramm(Shader::Fragment, fragmentShaderFile);
-
-       this->linkShaderProgram();
-
-    }
-   else
-     {
-       PRINTF(2)("Shaders are not supported on your hardware\n");
-     }
+  this->shaderProgram = 0;
+  this->vertexShader = 0;
+  this->fragmentShader = 0;
+
+  if (GLEW_ARB_shader_objects && GLEW_ARB_shading_language_100)
+  {
+    this->shaderProgram = glCreateProgramObjectARB();
+
+    if (!vertexShaderFile.empty())
+      this->loadShaderProgramm(Shader::Vertex, vertexShaderFile);
+    if (!fragmentShaderFile.empty())
+      this->loadShaderProgramm(Shader::Fragment, fragmentShaderFile);
+
+    this->linkShaderProgram();
+
+  }
+  else
+  {
+    PRINTF(2)("Shaders are not supported on your hardware\n");
+  }
 }
 
@@ -91,19 +132,9 @@
     //glLinkProgramARB(this->shaderProgram);
     glDeleteObjectARB(this->shaderProgram);
-       // link error checking
+    // link error checking
     glGetObjectParameterivARB(this->shaderProgram, GL_OBJECT_DELETE_STATUS_ARB, &status);
     if (status == GL_INVALID_VALUE || status == GL_INVALID_OPERATION)
       this->printError(this->shaderProgram);
   }
-}
-
-Shader* Shader::getShader(const std::string& vertexShaderFile, const std::string& fragmentShaderFile)
-{
-  return (Shader*)ResourceManager::getInstance()->load(vertexShaderFile, SHADER,  RP_LEVEL, fragmentShaderFile);
-}
-
-bool Shader::unload(Shader* shader)
-{
-  return ResourceManager::getInstance()->unload(shader);
 }
 
@@ -161,5 +192,5 @@
 
   glLinkProgramARB(this->shaderProgram);
-       // link error checking
+  // link error checking
   glGetObjectParameterivARB(this->shaderProgram, GL_OBJECT_LINK_STATUS_ARB, &status);
   if (status == GL_INVALID_VALUE || status == GL_INVALID_OPERATION)
@@ -203,25 +234,26 @@
 void Shader::bindShader(const char* name, const float* value, size_t size)
 {
-	if (likely (this->shaderProgram != 0)) {
-		glUseProgramObjectARB(this->shaderProgram);
-
-		unsigned int location = glGetUniformLocationARB(this->shaderProgram, name);
-		/* This is EXPENSIVE and should be avoided. */
-
-		if      (size == 1)  glUniform1fvARB(location, 1, value);
-		else if (size == 2)  glUniform2fvARB(location, 1, value);
-		else if (size == 3)  glUniform3fvARB(location, 1, value);
-		else if (size == 4)  glUniform4fvARB(location, 1, value);
-		else if (size == 9)  glUniformMatrix3fvARB(location, 1, false, value);
-		else if (size == 16) glUniformMatrix4fvARB(location, 1, false, value);
-
-	}
+  if (likely (this->shaderProgram != 0))
+  {
+    glUseProgramObjectARB(this->shaderProgram);
+
+    unsigned int location = glGetUniformLocationARB(this->shaderProgram, name);
+    /* This is EXPENSIVE and should be avoided. */
+
+    if      (size == 1)  glUniform1fvARB(location, 1, value);
+    else if (size == 2)  glUniform2fvARB(location, 1, value);
+    else if (size == 3)  glUniform3fvARB(location, 1, value);
+    else if (size == 4)  glUniform4fvARB(location, 1, value);
+    else if (size == 9)  glUniformMatrix3fvARB(location, 1, false, value);
+    else if (size == 16) glUniformMatrix4fvARB(location, 1, false, value);
+
+  }
 }
 
 void Shader::deactivateShader()
 {
- if (storedShader != NULL)
-   glUseProgramObjectARB(0);
- Shader::storedShader = NULL;
+  if (storedShader != NULL)
+    glUseProgramObjectARB(0);
+  Shader::storedShader = NULL;
 }
 
@@ -292,16 +324,16 @@
   if (this->vertexShader != 0)
   {
-/*    PRINT(3)("VertexShaderProgramm: number=%d, file='%s'\n", this->vertexShader, this->vertexShaderFile);
-    if (this->vertexShaderSource != NULL)
-      for (unsigned int i = 0; i < this->vertexShaderSource->getCount(); i++)
-        PRINT(3)("%d: %s\n", i, this->vertexShaderSource->getEntry(i));
-  }
-  if (this->fragmentShader != 0)
-  {
-    PRINT(3)("FragmentShaderProgramm: number=%d, file='%s'\n", this->fragmentShader, this->fragmentShaderFile);
-    if (this->fragmentShaderSource != NULL)
-      for (unsigned int i = 0; i < this->fragmentShaderSource->getCount(); i++)
-        PRINT(3)("%d: %s\n", i, this->fragmentShaderSource->getEntry(i));*/
-  }
-}
-
+    /*    PRINT(3)("VertexShaderProgramm: number=%d, file='%s'\n", this->vertexShader, this->vertexShaderFile);
+        if (this->vertexShaderSource != NULL)
+          for (unsigned int i = 0; i < this->vertexShaderSource->getCount(); i++)
+            PRINT(3)("%d: %s\n", i, this->vertexShaderSource->getEntry(i));
+      }
+      if (this->fragmentShader != 0)
+      {
+        PRINT(3)("FragmentShaderProgramm: number=%d, file='%s'\n", this->fragmentShader, this->fragmentShaderFile);
+        if (this->fragmentShaderSource != NULL)
+          for (unsigned int i = 0; i < this->fragmentShaderSource->getCount(); i++)
+            PRINT(3)("%d: %s\n", i, this->fragmentShaderSource->getEntry(i));*/
+  }
+}
+
Index: branches/new_class_id/src/lib/graphics/shader.h
===================================================================
--- branches/new_class_id/src/lib/graphics/shader.h	(revision 9805)
+++ branches/new_class_id/src/lib/graphics/shader.h	(revision 9806)
@@ -16,5 +16,5 @@
 
 
-//! A class for ...
+//! The Shader is a Class-wrapper around the OpenGL Shader Language (GLSL).
 class Shader : public BaseObject
 {
@@ -38,93 +38,50 @@
     void set(int v0, int v1, int v2, int v3) const { glUniform4i(this->uniform, v0, v1, v2, v3); }
 
-    void setV(unsigned int count, float* vv) const
-    {
-      switch (count)
-      {
-        case 1:
-        glUniform1fv(this->uniform, 1, vv);
-        break;
-        case 2:
-        glUniform2fv(this->uniform, 2, vv);
-        break;
-        case 3:
-        glUniform3fv(this->uniform, 3, vv);
-        break;
-        case 4:
-        glUniform4fv(this->uniform, 4, vv);
-        break;
-      }
-    }
-    void setV(unsigned int count, int* vv) const
-    {
-      switch (count)
-      {
-        case 1:
-        glUniform1iv(this->uniform, 1, vv);
-        break;
-        case 2:
-        glUniform2iv(this->uniform, 2, vv);
-        break;
-        case 3:
-        glUniform3iv(this->uniform, 3, vv);
-        break;
-        case 4:
-        glUniform4iv(this->uniform, 4, vv);
-        break;
-      }
-    }
+    void setV(unsigned int count, float* vv) const;
+    void setV(unsigned int count, int* vv) const;
+
   private:
     GLint uniform;
   };
 
+  //! The Type of Shader.
   typedef enum
   {
-    None       = 0,
-    Fragment   = 1,
-    Vertex     = 2,
-
-    Program    = 4,
-  }
-  Type;
+    None       = 0,     //!< No Type at all
+    Fragment   = 1,     //!< Fragment Shader.
+    Vertex     = 2,     //!< Vertex Shader.
+    Program    = 4,     //!< Compiled Shader Programm.
+  }  Type;
 
 public:
   Shader(const std::string& vertexShaderFile = "", const std::string& fragmentShaderFile = "");
   virtual ~Shader();
-  static Shader* getShader(const std::string& vertexShaderFile, const std::string& fragmentShaderFile);
-  static bool unload(Shader* shader);
 
+
+  Shader::Uniform getUniform(const std::string& location) { return Shader::Uniform(this, location); }
+
+  GLhandleARB getProgram() const { return this->shaderProgram; }
+  GLhandleARB getVertexS() const { return this->vertexShader; }
+  GLhandleARB getFragmentS() const { return this->fragmentShader; }
 
   static bool checkShaderAbility();
   void activateShader();
-  void bindShader(const char* name, const float* value, size_t size);
   static void deactivateShader();
 
-Shader::Uniform getUniform(const std::string& location) { return Shader::Uniform(this, location); }
+  void debug() const;
 
-  bool loadShaderProgramm(Shader::Type type, const std::string& fileName);
-  void deleteProgram(Shader::Type type);
-
-  void linkShaderProgram();
-
-
-  bool readShader(const std::string& fileName, std::string& output);
-
-
-inline static bool shaderActive() { return (Shader::storedShader != NULL)? true : false; };
+  inline static bool isShaderActive() { return (Shader::storedShader != NULL) ? true : false; };
   inline static Shader* getActiveShader() { return Shader::storedShader; };
   inline static void suspendShader() { Shader* currShader = storedShader; if (storedShader!= NULL) { Shader::deactivateShader(); Shader::storedShader = currShader;} };
   inline static void restoreShader() { if (storedShader != NULL) storedShader->activateShader(); storedShader = NULL; };
 
-
-
-
-GLhandleARB getProgram() const { return this->shaderProgram; }
-  GLhandleARB getVertexS() const { return this->vertexShader; }
-  GLhandleARB getFragmentS() const { return this->fragmentShader; }
-
-  void debug() const;
-
   static void printError(GLhandleARB program);
 
+private:
+  void bindShader(const char* name, const float* value, size_t size);
+  void linkShaderProgram();
+  bool readShader(const std::string& fileName, std::string& output);
+  bool loadShaderProgramm(Shader::Type type, const std::string& fileName);
+  void deleteProgram(Shader::Type type);
 
 private:
Index: branches/new_class_id/src/lib/graphics/shader_data.cc
===================================================================
--- branches/new_class_id/src/lib/graphics/shader_data.cc	(revision 9806)
+++ branches/new_class_id/src/lib/graphics/shader_data.cc	(revision 9806)
@@ -0,0 +1,298 @@
+/*
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer: ...
+*/
+
+//#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_
+
+#include "shader_data.h"
+
+#include "stdlibincl.h"
+#include "compiler.h"
+//#include <stdio.h>
+#include <fstream>
+
+#include "debug.h"
+
+#include "util/loading/resource_manager.h"
+
+
+#ifndef PARSELINELENGTH
+#define PARSELINELENGTH     512       //!< how many chars to read at once
+#endif
+
+
+ObjectListDefinition(ShaderData);
+
+/**
+ * standard constructor
+*/
+Shader::Shader (const std::string& vertexShaderFile, const std::string& fragmentShaderFile)
+{
+  this->registerObject(this, Shader::_objectList);
+  this->shaderProgram = 0;
+  this->vertexShader = 0;
+  this->fragmentShader = 0;
+
+  if (GLEW_ARB_shader_objects && GLEW_ARB_shading_language_100)
+  {
+    this->shaderProgram = glCreateProgramObjectARB();
+
+    if (!vertexShaderFile.empty())
+      this->loadShaderProgramm(Shader::Vertex, vertexShaderFile);
+    if (!fragmentShaderFile.empty())
+      this->loadShaderProgramm(Shader::Fragment, fragmentShaderFile);
+
+    this->linkShaderProgram();
+
+  }
+  else
+  {
+    PRINTF(2)("Shaders are not supported on your hardware\n");
+  }
+}
+
+
+/**
+ * standard deconstructor
+ */
+Shader::~Shader ()
+{
+  if (this->shaderProgram == glGetHandleARB(GL_PROGRAM_OBJECT_ARB))
+    Shader::deactivateShader();
+
+  // delete what has to be deleted here
+  this->deleteProgram(Shader::Vertex);
+  this->deleteProgram(Shader::Fragment);
+
+  if (this->fragmentShader != 0)
+  {
+    glDetachObjectARB(this->shaderProgram, this->fragmentShader);
+    glDeleteObjectARB(this->fragmentShader);
+  }
+  if (this->vertexShader != 0)
+  {
+    glDetachObjectARB(this->shaderProgram, this->vertexShader);
+    glDeleteObjectARB(this->vertexShader);
+  }
+  if (this->shaderProgram != 0)
+  {
+    GLint status = 0;
+    //glLinkProgramARB(this->shaderProgram);
+    glDeleteObjectARB(this->shaderProgram);
+    // link error checking
+    glGetObjectParameterivARB(this->shaderProgram, GL_OBJECT_DELETE_STATUS_ARB, &status);
+    if (status == GL_INVALID_VALUE || status == GL_INVALID_OPERATION)
+      this->printError(this->shaderProgram);
+  }
+}
+
+Shader* Shader::storedShader = NULL;
+
+
+bool Shader::loadShaderProgramm(Shader::Type type, const std::string& fileName)
+{
+  GLhandleARB shader = 0;
+
+  if (type != Shader::Vertex && type != Shader::Fragment)
+    return false;
+  this->deleteProgram(type);
+
+
+  std::string program;
+  if (!readShader(fileName, program))
+    return false;
+
+  if (type == Shader::Vertex && GLEW_ARB_vertex_shader)
+  {
+    this->vertexShaderFile = fileName;
+
+    shader = this->vertexShader = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
+  }
+
+  if (type == Shader::Fragment && GLEW_ARB_fragment_shader)
+  {
+    this->fragmentShaderFile = fileName;
+
+    shader = this->fragmentShader = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
+  }
+
+  if (shader != 0)
+  {
+    GLint status = 0;
+    const char* prog = program.c_str();
+
+    glShaderSourceARB(shader, 1, &prog, NULL);
+    glCompileShaderARB(shader);
+    // checking on error.
+    glGetObjectParameterivARB(shader, GL_OBJECT_COMPILE_STATUS_ARB, &status);
+    if (status == GL_INVALID_VALUE || status == GL_INVALID_OPERATION)
+      this->printError(shader);
+    else
+      glAttachObjectARB(this->shaderProgram, shader);
+  }
+  return true;
+}
+
+
+void Shader::linkShaderProgram()
+{
+  GLint status = 0;
+
+  glLinkProgramARB(this->shaderProgram);
+  // link error checking
+  glGetObjectParameterivARB(this->shaderProgram, GL_OBJECT_LINK_STATUS_ARB, &status);
+  if (status == GL_INVALID_VALUE || status == GL_INVALID_OPERATION)
+    this->printError(this->shaderProgram);
+}
+
+
+bool Shader::readShader(const std::string& fileName, std::string& output)
+{
+  char lineBuffer[PARSELINELENGTH];
+
+  std::ifstream shader;
+  shader.open(fileName.c_str());
+  if (!shader.is_open())
+    return false;
+
+
+  while (!shader.eof())
+  {
+    shader.getline(lineBuffer, PARSELINELENGTH);
+    output += lineBuffer;
+    output += "\n";
+  }
+
+
+  shader.close();
+  return true;
+}
+
+
+
+void Shader::activateShader()
+{
+  if (likely (this->shaderProgram != 0))
+  {
+    glUseProgramObjectARB(this->shaderProgram);
+    Shader::storedShader = this;
+  }
+}
+
+void Shader::bindShader(const char* name, const float* value, size_t size)
+{
+  if (likely (this->shaderProgram != 0))
+  {
+    glUseProgramObjectARB(this->shaderProgram);
+
+    unsigned int location = glGetUniformLocationARB(this->shaderProgram, name);
+    /* This is EXPENSIVE and should be avoided. */
+
+    if      (size == 1)  glUniform1fvARB(location, 1, value);
+    else if (size == 2)  glUniform2fvARB(location, 1, value);
+    else if (size == 3)  glUniform3fvARB(location, 1, value);
+    else if (size == 4)  glUniform4fvARB(location, 1, value);
+    else if (size == 9)  glUniformMatrix3fvARB(location, 1, false, value);
+    else if (size == 16) glUniformMatrix4fvARB(location, 1, false, value);
+
+  }
+}
+
+void Shader::deactivateShader()
+{
+  if (storedShader != NULL)
+    glUseProgramObjectARB(0);
+  Shader::storedShader = NULL;
+}
+
+
+void Shader::deleteProgram(Shader::Type type)
+{
+  GLint status = 0;
+  if (type == Shader::Vertex && this->vertexShader != 0)
+  {
+    this->vertexShaderFile = "";
+    glDetachObjectARB(this->shaderProgram, this->vertexShader);
+    glDeleteObjectARB(this->vertexShader);
+    glGetObjectParameterivARB(this->vertexShader, GL_OBJECT_DELETE_STATUS_ARB, &status);
+    if (status == GL_INVALID_VALUE || status == GL_INVALID_OPERATION)
+      Shader::printError(this->vertexShader);
+    this->vertexShader = 0;
+  }
+  else if (type == Shader::Fragment && this->fragmentShader != 0)
+  {
+    this->fragmentShaderFile = "";
+    glDetachObjectARB(this->shaderProgram, this->fragmentShader);
+    glDeleteObjectARB(this->fragmentShader);
+    glGetObjectParameterivARB(this->fragmentShader, GL_OBJECT_DELETE_STATUS_ARB, &status);
+    if (status == GL_INVALID_VALUE || status == GL_INVALID_OPERATION)
+      Shader::printError(this->fragmentShader);
+    this->fragmentShader = 0;
+  }
+  else
+    return;
+}
+
+
+void Shader::printError(GLhandleARB program)
+{
+  if (program == 0)
+    return;
+
+  int infologLength = 0;
+  int charsWritten  = 0;
+  char *infoLog;
+
+  glGetObjectParameterivARB(program, GL_OBJECT_INFO_LOG_LENGTH_ARB,
+                            &infologLength);
+
+  if (infologLength > 0)
+  {
+    infoLog = new char[infologLength+1];
+    glGetInfoLogARB(program, infologLength, &charsWritten, infoLog);
+    printf("%s\n", infoLog);
+    delete[] infoLog;
+  }
+}
+
+bool Shader::checkShaderAbility()
+{
+  if (GLEW_ARB_shader_objects &&
+      GLEW_ARB_shading_language_100 &&
+      GLEW_ARB_vertex_shader &&
+      GLEW_ARB_fragment_shader)
+    return true;
+  else
+    return false;
+}
+
+void Shader::debug() const
+{
+  PRINT(3)("Shader info: (SHADER: %d)\n", this->shaderProgram);
+  if (this->vertexShader != 0)
+  {
+    /*    PRINT(3)("VertexShaderProgramm: number=%d, file='%s'\n", this->vertexShader, this->vertexShaderFile);
+        if (this->vertexShaderSource != NULL)
+          for (unsigned int i = 0; i < this->vertexShaderSource->getCount(); i++)
+            PRINT(3)("%d: %s\n", i, this->vertexShaderSource->getEntry(i));
+      }
+      if (this->fragmentShader != 0)
+      {
+        PRINT(3)("FragmentShaderProgramm: number=%d, file='%s'\n", this->fragmentShader, this->fragmentShaderFile);
+        if (this->fragmentShaderSource != NULL)
+          for (unsigned int i = 0; i < this->fragmentShaderSource->getCount(); i++)
+            PRINT(3)("%d: %s\n", i, this->fragmentShaderSource->getEntry(i));*/
+  }
+}
+
Index: branches/new_class_id/src/lib/graphics/shader_data.h
===================================================================
--- branches/new_class_id/src/lib/graphics/shader_data.h	(revision 9806)
+++ branches/new_class_id/src/lib/graphics/shader_data.h	(revision 9806)
@@ -0,0 +1,53 @@
+/*!
+ * @file shader_data.h
+ * @brief Definition of the Shader rendering class
+*/
+
+#ifndef _SHADER_DATA_H
+#define _SHADER_DATA_H
+
+#include "base_object.h"
+
+#include "shader_types.h"
+#include <vector>
+
+
+// FORWARD DECLARATION
+
+
+
+//! The ShaderData is a Class-wrapper around the OpenGL Shader Language (GLSL).
+class ShaderData : public BaseObject
+{
+  ObjectListDeclaration(ShaderData);
+public:
+  ShaderData(const std::string& vertexShaderFile = "", const std::string& fragmentShaderFile = "");
+  virtual ~ShaderData();
+
+  Shaders::Uniform getUniform(const std::string& location) { return Shader::Uniform(this, location); }
+
+  GLhandleARB getProgram() const { return this->shaderProgram; }
+  GLhandleARB getVertexS() const { return this->vertexShader; }
+  GLhandleARB getFragmentS() const { return this->fragmentShader; }
+
+  void activateShader();
+
+  void debug() const;
+private:
+  void bindShader(const char* name, const float* value, size_t size);
+  void linkShaderProgram();
+  bool readShader(const std::string& fileName, std::string& output);
+  bool loadShaderProgramm(Shader::Type type, const std::string& fileName);
+  void deleteProgram(Shader::Type type);
+
+private:
+  std::string            fragmentShaderFile;
+  std::string            vertexShaderFile;
+
+  GLhandleARB            shaderProgram;
+
+  GLhandleARB            vertexShader;
+  GLhandleARB            fragmentShader;
+};
+
+#endif /* _SHADER_DATA_H */
Index: branches/new_class_id/src/lib/graphics/shader_types.h
===================================================================
--- branches/new_class_id/src/lib/graphics/shader_types.h	(revision 9806)
+++ branches/new_class_id/src/lib/graphics/shader_types.h	(revision 9806)
@@ -0,0 +1,44 @@
+
+
+#ifndef _SHADER_TYPES_H
+#define _SHADER_TYPES_H
+
+#include "glincl.h"
+
+namespace Shaders
+{
+class Uniform
+{
+  public:
+    Uniform(const Shader* shader, const std::string& location) { this->uniform = glGetUniformLocationARB(shader->getProgram(), location.c_str()) ; }
+    Uniform(const Shader& shader, const std::string& location) { this->uniform = glGetUniformLocation(shader.getProgram(), location.c_str()) ; };
+    Uniform(GLhandleARB shaderProgram, const std::string& location) { this->uniform = glGetUniformLocation(shaderProgram, location.c_str()) ; };
+
+    void set(float v0) const { glUniform1f(this->uniform, v0); }
+    void set(float v0, float v1) const { glUniform2f(this->uniform, v0, v1); }
+    void set(float v0, float v1, float v2) const { glUniform3f(this->uniform, v0, v1, v2); }
+    void set(float v0, float v1, float v2, float v3) const { glUniform4f(this->uniform, v0, v1, v2, v3); }
+
+    void set(int v0) const { glUniform1i(this->uniform, v0); }
+    void set(int v0, int v1) const { glUniform2i(this->uniform, v0, v1); }
+    void set(int v0, int v1, int v2) const { glUniform3i(this->uniform, v0, v1, v2); }
+    void set(int v0, int v1, int v2, int v3) const { glUniform4i(this->uniform, v0, v1, v2, v3); }
+
+    void setV(unsigned int count, float* vv) const;
+    void setV(unsigned int count, int* vv) const;
+
+  private:
+    GLint uniform;
+};
+
+  //! The Type of Shader.
+  typedef enum
+{
+  None       = 0,     //!< No Type at all
+  Fragment   = 1,     //!< Fragment Shader.
+  Vertex     = 2,     //!< Vertex Shader.
+  Program    = 4,     //!< Compiled Shader Programm.
+}  Type;
+}
+
+#endif /* _SHADER_TYPES_H */
Index: branches/new_class_id/src/lib/lang/base_object.cc
===================================================================
--- branches/new_class_id/src/lib/lang/base_object.cc	(revision 9805)
+++ branches/new_class_id/src/lib/lang/base_object.cc	(revision 9806)
@@ -32,6 +32,4 @@
   this->objectName = objectName;
   this->xmlElem = NULL;
-
-  //ClassList::addToClassList(this, this->classID, "BaseObject");
 }
 
@@ -45,5 +43,4 @@
   for (it = this->_classes.begin(); it != this->_classes.end(); ++it)
   {
-    PRINTF(5)("DELETING OBJECT %s::%s FROM %s\n", this->getClassCName(), getCName(), (*it)._objectList->name().c_str());
     (*it)._objectList->unregisterObject((*it)._iterator);
     delete (*it)._iterator;
@@ -148,5 +145,5 @@
 void BaseObject::listInheritance() const
 {
-  PRINT(0)("Listing inheritance diagram for ....: ");
+  PRINT(0)("Listing inheritance diagram for %s::%s: ", getClassCName(), getCName());
   ClassList::const_iterator it;
   for (it = this->_classes.begin(); it != this->_classes.end(); ++it)
Index: branches/new_class_id/src/lib/shell/some_shell_commands.cc
===================================================================
--- branches/new_class_id/src/lib/shell/some_shell_commands.cc	(revision 9805)
+++ branches/new_class_id/src/lib/shell/some_shell_commands.cc	(revision 9806)
Index: branches/new_class_id/src/lib/sound/ogg_player.h
===================================================================
--- branches/new_class_id/src/lib/sound/ogg_player.h	(revision 9805)
+++ branches/new_class_id/src/lib/sound/ogg_player.h	(revision 9806)
@@ -100,8 +100,8 @@
 
 
-    std::string         _title;
-    std::string         _artist;
-    std::string         _album;
-    std::string         _vendor;
+    std::string         _title;               //!< Song Title.
+    std::string         _artist;              //!< Artist Name of the current song.
+    std::string         _album;               //!< Album Name of the current song.
+    std::string         _vendor;              //!< Vendor Name of the current song.
   };
 
Index: branches/new_class_id/src/lib/sound/sound_buffer.cc
===================================================================
--- branches/new_class_id/src/lib/sound/sound_buffer.cc	(revision 9805)
+++ branches/new_class_id/src/lib/sound/sound_buffer.cc	(revision 9806)
@@ -18,6 +18,8 @@
 #include "sound_buffer.h"
 
+
 namespace OrxSound
 {
+  ObjectListDefinition(SoundBuffer);
   //////////////////
   /* SOUND-BUFFER */
@@ -26,4 +28,5 @@
       : data(new SoundBufferData)
   {
+    this->registerObject(this, SoundBuffer::_objectList);
   }
   /**
@@ -34,4 +37,5 @@
       : data(new SoundBufferData)
   {
+    this->registerObject(this, SoundBuffer::_objectList);
     this->load(fileName);
   }
@@ -39,8 +43,18 @@
   SoundBuffer::SoundBuffer(const SoundBuffer& buffer)
       : data(buffer.data)
-  {  }
+  {
+    this->registerObject(this, SoundBuffer::_objectList);
+  }
 
   SoundBuffer::SoundBuffer(const SoundBufferData::Pointer& dataPointer)
       : data(dataPointer)
-  {  };
+  {
+    this->registerObject(this, SoundBuffer::_objectList);
+  };
+
+  SoundBuffer::~SoundBuffer()
+  {
+    printf("Deleting Object of type SoundBuffer\n");
+  }
+
 }
Index: branches/new_class_id/src/lib/sound/sound_buffer.h
===================================================================
--- branches/new_class_id/src/lib/sound/sound_buffer.h	(revision 9805)
+++ branches/new_class_id/src/lib/sound/sound_buffer.h	(revision 9806)
@@ -7,4 +7,5 @@
 #define _SOUND_BUFFER_H
 
+#include "base_object.h"
 #include "sound_buffer_data.h"
 
@@ -12,6 +13,7 @@
 {
   //! A class that represents a datastructure to play Sounds.
-  class SoundBuffer
+  class SoundBuffer : virtual public BaseObject
   {
+    ObjectListDeclaration(SoundBuffer);
   public:
     SoundBuffer();
@@ -19,4 +21,5 @@
     SoundBuffer(const SoundBufferData::Pointer& dataPointer);
     SoundBuffer(const std::string& fileName);
+    virtual ~SoundBuffer();
 
     bool operator==(const SoundBuffer& buffer) const {return this->data == buffer.data; };
