Index: trunk/src/world_entities/environments/mapped_water.cc
===================================================================
--- trunk/src/world_entities/environments/mapped_water.cc	(revision 7954)
+++ trunk/src/world_entities/environments/mapped_water.cc	(revision 8037)
@@ -18,4 +18,5 @@
 #include "util/loading/factory.h"
 #include "util/loading/resource_manager.h"
+#include "state.h"
 
 
@@ -26,5 +27,4 @@
 
 MappedWater::MappedWater(const TiXmlElement* root)
-    : texture(GL_TEXTURE_2D)
 {
   this->setClassID(CL_MAPPED_WATER, "MappedWater");
@@ -34,15 +34,13 @@
     this->loadParams(root);
 
-  //! HACK FIXME HACK FIXME HACK FIXME HACK FIXME
-  //! todo: rename texture to reflection texture
+  PRINTF(0)("MaxTextureUnits: %i\n", Material::getMaxTextureUnits());
+
+  // TODO rename texture to reflection texture
+  /// loads the textures
   // set up refleciton texture
-  //mat.setDiffuseMap(&this->texture, 0);
+  //mat.setDiffuseMap(this->texture, 0);
   mat.setDiffuseMap("pictures/dudvmap.bmp", GL_TEXTURE_2D, 0);
-/*  mat.setDiffuseMap("pictures/sky-replace.jpg", GL_TEXTURE_2D, 1);
-  mat.setDiffuseMap("pictures/sky-replace.jpg", GL_TEXTURE_2D, 2);
-  mat.setDiffuseMap("pictures/sky-replace.jpg", GL_TEXTURE_2D, 3);
-  mat.setDiffuseMap("pictures/sky-replace.jpg", GL_TEXTURE_2D, 4);*/
   // load refraction texture
-  //mat.setDiffuseMap(&this->refractionTexture, 1);
+  mat.setDiffuseMap("pictures/error_texture.png", GL_TEXTURE_2D, 1);
   // load normal map
   //mat.setDiffuseMap("pictures/normalmap.bmp", GL_TEXTURE_2D, 2);
@@ -50,24 +48,30 @@
   //mat.setDiffuseMap("pictures/dudvmap.bmp", GL_TEXTURE_2D, 3);
   // set up depth texture
-  //mat.setDiffuseMap(&this->depthTexture, 4);
-
+  //mat.setDiffuseMap("pictures/sky-replace.jpg", GL_TEXTURE_2D, 4);
+
+
+
+  /// MAKE THE MAPPING TEXTURE.
+  // THIS IS A HACK AND SHOULD BE IN TEXTURE SOMEWHERE
   // set the size of the refraction and reflection textures
-
-
-
-  /// MAKE THE MAPPING TEXTURE.
-  // THIS IS A HACK AND SHOULD BE IN TEXTURE SOMEWHERE.
   this->textureSize = 512;
   unsigned int channels = 32;
   GLenum type = GL_RGBA;
-  unsigned int* pTexture = new unsigned int [this->textureSize * this->textureSize * channels];
-  memset(pTexture, 0, this->textureSize * this->textureSize * channels * sizeof(unsigned int));
+  unsigned int* pTextureReflection = new unsigned int [this->textureSize * this->textureSize * channels];
+  memset(pTextureReflection, 0, this->textureSize * this->textureSize * channels * sizeof(unsigned int));
+  unsigned int* pTextureRefraction = new unsigned int [this->textureSize * this->textureSize * channels];
+  memset(pTextureRefraction, 0, this->textureSize * this->textureSize * channels * sizeof(unsigned int));
   // Register the texture with OpenGL and bind it to the texture ID
   mat.select();
   glBindTexture(GL_TEXTURE_2D, this->mat.getDiffuseTexture(0));
-  printf("========= CREATE %d\n", this->texture.getTexture());
 
   // Create the texture and store it on the video card
-  glTexImage2D(GL_TEXTURE_2D, 0, channels, this->textureSize, this->textureSize, 0, type, GL_UNSIGNED_INT, pTexture);
+  glTexImage2D(GL_TEXTURE_2D, 0, channels, this->textureSize, this->textureSize, 0, type, GL_UNSIGNED_INT, pTextureReflection);
+
+  //gluBuild2DMipmaps(GL_TEXTURE_2D, channels, this->textureSize, this->textureSize, type,  GL_UNSIGNED_INT, pTexture);
+
+  //the same for the refraction
+  glBindTexture(GL_TEXTURE_2D, this->mat.getDiffuseTexture(1));
+  glTexImage2D(GL_TEXTURE_2D, 0, channels, this->textureSize, this->textureSize, 0, type, GL_UNSIGNED_INT, pTextureRefraction);
 
   // Set the texture quality
@@ -78,7 +82,37 @@
 
   // Since we stored the texture space with OpenGL, we can delete the image data
-  delete [] pTexture;
-
-  //  shader = new Shader( ResourceManager::getInstance()->getDataDir() + "/shaders/water.vert", ResourceManager::getInstance()->getDataDir() +"/shaders/mapped_water.frag");
+  delete [] pTextureReflection;
+  delete [] pTextureRefraction;
+
+
+  /// initialization of the texture coords, speeds etc...
+  this->move = 0.0f;
+  this->g_WaterUV = 35.0f;
+  this->kNormalMapScale = 0.25f;
+  this->g_WaterFlow = 0.0015f;
+
+  /// initialization of the shaders
+  // load shader files
+/*  shader = new Shader( ResourceManager::getInstance()->getDataDir() + "/shaders/mapped_water.vert", ResourceManager::getInstance()->getDataDir() +"/shaders/mapped_water.frag");
+
+  this->shader->activateShader();
+  // Set the variable "reflection" to correspond to the first texture unit
+  Shader::Uniform(shader, "reflection").set(0);
+  // Set the variable "refraction" to correspond to the second texture unit
+  Shader::Uniform(shader, "refraction").set(1);
+  // Set the variable "normalMap" to correspond to the third texture unit
+  Shader::Uniform(shader, "normalMap").set(2);
+  // Set the variable "dudvMap" to correspond to the fourth texture unit
+  Shader::Uniform(shader, "dudvMap").set(3);
+  // Set the variable "depthMap" to correspond to the fifth texture unit
+  Shader::Uniform(shader, "depthMap").set(4);
+  // Give the variable "waterColor" a blue color
+  Shader::Uniform(shader, "waterColor").set(0.1f, 0.2f, 0.4f, 1.0f);
+  // Give the variable "lightPos" our hard coded light position
+  Shader::Uniform(shader, "lightPos").set(lightPos.x, lightPos.y, lightPos.z, 1.0f);
+  // uniform for the camera position
+  cam_uni = new Shader::Uniform(shader, "cameraPos");
+
+  this->shader->deactivateShader();*/
 }
 
@@ -86,4 +120,5 @@
 {
   //delete shader;
+  //delete cam_uni;
 }
 
@@ -93,4 +128,5 @@
 
   LoadParam(root, "waterHeight", this, MappedWater, setHeight);
+  LoadParam(root, "lightPos", this, MappedWater, setLightPosition);
 }
 
@@ -101,97 +137,50 @@
   glTranslatef(0,this->waterHeight,0);
 
-  //glEnable(GL_LIGHTING);
-
-
-  //mat.setDiffuseMap("pictures/sky-replace.jpg", GL_TEXTURE_2D, 1);
-  //mat.setTransparency(1.0);
-  //mat.setDiffuse(1.0, 0, .1);
-
-
-  // HACK
-
-  //glDisable(GL_BLEND);
-  //glActiveTexture(GL_TEXTURE0);
-  //glBindTexture(GL_TEXTURE_2D, this->texture);
-
+  mat.unselect();
   mat.select();
-  glBindTexture(GL_TEXTURE_2D, this->mat.getDiffuseTexture(0));
-
-  // Shader init
-  //this->shader->activateShader();
-  GLint uniform;
-
-  // Set the variable "reflection" to correspond to the first texture unit
-  uniform = glGetUniformLocationARB(shader->getProgram(), "reflection");
-  glUniform1iARB(uniform, 0); //second paramter is the texture unit
-
-  // Set the variable "refraction" to correspond to the second texture unit
-  //uniform = glGetUniformLocationARB(shader->getProgram(), "refraction");
-  //glUniform1iARB(uniform, 0);
-  // FIXME glUniform1iARB(uniform, 1);
-
-  // Set the variable "normalMap" to correspond to the third texture unit
-  //uniform = glGetUniformLocationARB(shader->getProgram(), "normalMap");
-  //glUniform1iARB(uniform, 2);
-
-  // Set the variable "dudvMap" to correspond to the fourth texture unit
-  uniform = glGetUniformLocationARB(shader->getProgram(), "dudvMap");
-  glUniform1iARB(uniform, 3);
-
-  // Set the variable "depthMap" to correspond to the fifth texture unit
-  //uniform = glGetUniformLocationARB(shader->getProgram(), "depthMap");
-  //glUniform1iARB(uniform, 4);
-  // FIXME we dont have a depthMap yet :-(
-
-  // Give the variable "waterColor" a blue color
-  uniform = glGetUniformLocationARB(shader->getProgram(), "waterColor");
-  glUniform4fARB(uniform, 0.1f, 0.2f, 0.4f, 1.0f);
-
-  // FIXME set camera and light information
-  Vector lightPos(100.0f, 150.0f, 100.0f);
-
-  // Store the camera position in a variable
-  //CVector3 vPosition = g_Camera.Position();
-  Vector vPosition(50.0f, 50.0f, 50.0f);
-
-  // Give the variable "lightPos" our hard coded light position
-  uniform = glGetUniformLocationARB(shader->getProgram(), "lightPos");
-  glUniform4fARB(uniform, lightPos.x, lightPos.y, lightPos.z, 1.0f);
-
-  // Give the variable "cameraPos" our camera position
-  uniform = glGetUniformLocationARB(shader->getProgram(), "cameraPos");
-  glUniform4fARB(uniform, vPosition.x, vPosition.y, vPosition.z, 1.0f);
+
+  ///this->shader->activateShader();
+
+  // reset the camera uniform to the current cam position
+  Vector pos = State::getCameraNode()->getAbsCoor();
+  ///cam_uni->set(pos.x, pos.y, pos.z, 1.0f);
 
   glBegin(GL_QUADS);
-  glNormal3f(0,1,0);
-  glMultiTexCoord2f(GL_TEXTURE0, 0,0);
-  glMultiTexCoord2f(GL_TEXTURE1, 0,0);
-  glMultiTexCoord2f(GL_TEXTURE2, 0,0);
-  glMultiTexCoord2f(GL_TEXTURE3, 0,0);
-  glMultiTexCoord2f(GL_TEXTURE4, 0,0);
-  glVertex3f(0,0,0);
-
-  glMultiTexCoord2f(GL_TEXTURE0, 1,0);
-  glMultiTexCoord2f(GL_TEXTURE1, 1,0);
-  glMultiTexCoord2f(GL_TEXTURE2, 1,0);
-  glMultiTexCoord2f(GL_TEXTURE3, 1,0);
-  glMultiTexCoord2f(GL_TEXTURE4, 1,0);
-  glVertex3f(100,0,0);
-
-  glMultiTexCoord2f(GL_TEXTURE0, 1,1);
-  glMultiTexCoord2f(GL_TEXTURE1, 1,1);
-  glMultiTexCoord2f(GL_TEXTURE2, 1,1);
-  glMultiTexCoord2f(GL_TEXTURE3, 1,1);
-  glMultiTexCoord2f(GL_TEXTURE4, 1,1);
-  glVertex3f(100,0,-100);
-
-  glMultiTexCoord2f(GL_TEXTURE0, 0,1);
-  glMultiTexCoord2f(GL_TEXTURE1, 0,1);
-  glMultiTexCoord2f(GL_TEXTURE2, 0,1);
-  glMultiTexCoord2f(GL_TEXTURE3, 0,1);
-  glMultiTexCoord2f(GL_TEXTURE4, 0,1);
-  glVertex3f(0,0,-100);
+  // The back left vertice for the water
+  glMultiTexCoord2f(GL_TEXTURE0, 0.0f, 0);//g_WaterUV);            // Reflection texture
+  glMultiTexCoord2f(GL_TEXTURE1, 0.0f, 0);//refrUV - move);        // Refraction texture
+  glMultiTexCoord2f(GL_TEXTURE2, 0.0f, normalUV + move2);     // Normal map texture
+  glMultiTexCoord2f(GL_TEXTURE3, 0, 0);                       // DUDV map texture
+  glMultiTexCoord2f(GL_TEXTURE4, 0, 0);                       // Depth texture
+  glVertex3f(0.0f, waterHeight, 0.0f);
+
+  // The front left vertice for the water
+  glMultiTexCoord2f(GL_TEXTURE0, 0.0f, 1);//0.0f);                  // Reflection texture
+  glMultiTexCoord2f(GL_TEXTURE1, 0.0f, 1);//0.0f - move);           // Refraction texture
+  glMultiTexCoord2f(GL_TEXTURE2, 0.0f, 0.0f + move2);          // Normal map texture
+  glMultiTexCoord2f(GL_TEXTURE3, 0, 0);                        // DUDV map texture
+  glMultiTexCoord2f(GL_TEXTURE4, 0, 0);                        // Depth texture
+  glVertex3f(0.0f, waterHeight, 1000.0f);
+
+  // The front right vertice for the water
+  glMultiTexCoord2f(GL_TEXTURE0, 1,1); //g_WaterUV, 0.0f);             // Reflection texture
+  glMultiTexCoord2f(GL_TEXTURE1, 1,1);//refrUV, 0.0f - move);         // Refraction texture
+  glMultiTexCoord2f(GL_TEXTURE2, normalUV, 0.0f + move2);      // Normal map texture
+  glMultiTexCoord2f(GL_TEXTURE3, 0, 0);                        // DUDV map texture
+  glMultiTexCoord2f(GL_TEXTURE4, 0, 0);                        // Depth texture
+  glVertex3f(1000.0f, waterHeight, 1000.0f);
+
+  // The back right vertice for the water
+  glMultiTexCoord2f(GL_TEXTURE0, 1,0);//g_WaterUV, g_WaterUV);        // Reflection texture
+  glMultiTexCoord2f(GL_TEXTURE1, 1,0);//refrUV, refrUV - move);       // Refraction texture
+  glMultiTexCoord2f(GL_TEXTURE2, normalUV, normalUV + move2);  // Normal map texture
+  glMultiTexCoord2f(GL_TEXTURE3, 0, 0);                        // DUDV map texture
+  glMultiTexCoord2f(GL_TEXTURE4, 0, 0);                        // Depth texture
+  glVertex3f(1000.0f, waterHeight, 0.0f);
   glEnd();
-  //this->shader->deactivateShader();
+
+  ///this->shader->deactivateShader();
+
+  mat.unselect();
 
   glPopMatrix();
@@ -200,4 +189,9 @@
 void MappedWater::tick(float dt)
 {
+  // makes the water flow
+  this->move += this->g_WaterFlow;
+  this->move2 = this->move * this->kNormalMapScale;
+  this->refrUV = this->g_WaterUV;
+  this->normalUV = this->g_WaterUV * this->kNormalMapScale;
 }
 
@@ -209,54 +203,35 @@
 void MappedWater::activateReflection()
 {
+  // save viewport matrix and change the viewport size
   glPushAttrib(GL_VIEWPORT_BIT);
-  //   glPushMatrix();
-
-  //glLoadIdentity();
   glViewport(0,0, textureSize, textureSize);
 
-
-  // Clear the color and depth bits, reset the matrix and position our camera.
-
-  //g_Camera.Look();
-
+  glPushMatrix();
 
   // If our camera is above the water we will render the scene flipped upside down.
   // In order to line up the reflection nicely with the world we have to translate
   // the world to the position of our reflected surface, multiplied by two.
-  //if(g_Camera.Position().y > waterHeight)
-  //{
-  // Translate the world, then flip it upside down
-  //   glTranslatef(0.0f, waterHeight*2.0f, 0.0f);
-  //  glScalef(1.0, -1.0, 1.0);
-
-  // Since the world is updside down we need to change the culling to FRONT
-  //glCullFace(GL_FRONT);
-
-  // Set our plane equation and turn clipping on
-  // double plane[4] = {0.0, 1.0, 0.0, -waterHeight};
-  //   glEnable(GL_CLIP_PLANE0);
-  // glClipPlane(GL_CLIP_PLANE0, plane);
-
-  // Render the world upside down and clipped (only render the top flipped).
-  // If we don't turn OFF caustics for the reflection texture we get horrible
-  // artifacts in the water.  That is why we set bRenderCaustics to FALSE.
-  //RenderWorld(false);
-
-  // Turn clipping off
-  // glDisable(GL_CLIP_PLANE0);
-
-  // Restore back-face culling
-  //  glCullFace(GL_BACK);
-  //}
-  /*else
+  glEnable(GL_CLIP_PLANE0);
+  Vector pos = State::getCameraNode()->getAbsCoor();
+  if(pos.y > waterHeight)
   {
-      // If the camera is below the water we don't want to flip the world,
-      // but just render it clipped so only the top is drawn.
-      double plane[4] = {0.0, 1.0, 0.0, waterHeight};
-      glEnable(GL_CLIP_PLANE0);
-      glClipPlane(GL_CLIP_PLANE0, plane);
-      RenderWorld(true);
-      glDisable(GL_CLIP_PLANE0);
-  }*/
+    // Translate the world, then flip it upside down
+    glTranslatef(0.0f, waterHeight*2.0f, 0.0f);
+    glScalef(1.0, -1.0, 1.0);
+
+    // Since the world is updside down we need to change the culling to FRONT
+    glCullFace(GL_FRONT);
+
+    // Set our plane equation and turn clipping on
+    double plane[4] = {0.0, 1.0, 0.0, -waterHeight};
+    glClipPlane(GL_CLIP_PLANE0, plane);
+  }
+  else
+  {
+    // If the camera is below the water we don't want to flip the world,
+    // but just render it clipped so only the top is drawn.
+    double plane[4] = {0.0, 1.0, 0.0, waterHeight};
+    glClipPlane(GL_CLIP_PLANE0, plane);
+  }
 }
 
@@ -264,21 +239,69 @@
 void MappedWater::deactivateReflection()
 {
-//  glBindTexture(GL_TEXTURE_2D, texture.getTexture()); //is done by mat.select();
-  glBindTexture(GL_TEXTURE_2D, this->mat.getDiffuseTexture(0));
-
-  //mat.setDiffuseMap(&texture, 0);
-  // mat.select();
-  glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, textureSize, textureSize);
-
-
+  glDisable(GL_CLIP_PLANE0);
+  glCullFace(GL_BACK);
+
+  mat.select();
+  //glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, textureSize, textureSize);
+  mat.renderToTexture(0, GL_TEXTURE_2D, 0, 0, 0, 0, 0, textureSize, textureSize);
+
+  glPopMatrix();
   glPopAttrib();
-  //   glPopMatrix();
 }
 
 void MappedWater::activateRefraction()
 {
+  // To create the refraction and depth textures we do the same thing
+  // we did for the reflection texture, except we don't need to turn
+  // the world upside down.  We want to find the depth of the water,
+  // not the depth of the sky and above water terrain.
+
+  // save viewport matrix and change the viewport size
+  glPushAttrib(GL_VIEWPORT_BIT);
+  glViewport(0,0, textureSize, textureSize);
+
+  glPushMatrix();
+
+  // If our camera is above the water we will render only the parts that
+  // are under the water.  If the camera is below the water we render
+  // only the stuff above the water.  Like the reflection texture, we
+  // incorporate clipping planes to only render what we need.
+
+  // If the camera is above water, render the data below the water
+  glEnable(GL_CLIP_PLANE0);
+  Vector pos = State::getCameraNode()->getAbsCoor();
+  if(pos.y > waterHeight)
+  {
+    double plane[4] = {0.0, -1.0, 0.0, waterHeight}; 
+    glClipPlane(GL_CLIP_PLANE0, plane);
+  }
+  // If the camera is below the water, only render the data above the water
+  else
+  {
+    glCullFace(GL_FRONT);
+    double plane[4] = {0.0, 1.0, 0.0, -waterHeight}; 
+    glClipPlane(GL_CLIP_PLANE0, plane);
+  }
 }
 
 void MappedWater::deactivateRefraction()
 {
-}
+  glDisable(GL_CLIP_PLANE0);
+  glCullFace(GL_BACK);
+
+  mat.select();
+  mat.renderToTexture(1, GL_TEXTURE_2D, 0, 0, 0, 0, 0, textureSize, textureSize);
+  //glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 0, 0, textureSize, textureSize, 0);
+  //mat.renderToTexture(0, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 0, textureSize, textureSize, 0);
+
+  // Bind the current scene to our refraction texture
+//  glBindTexture(GL_TEXTURE_2D, g_Texture[REFRACTION_ID]);
+//  glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, textureSize, textureSize);
+
+  // Bind the current scene to our depth texture
+//  glBindTexture(GL_TEXTURE_2D, g_Texture[DEPTH_ID]);
+//  glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 0, 0, textureSize, textureSize, 0);
+
+  glPopMatrix();
+  glPopAttrib();
+}
Index: trunk/src/world_entities/environments/mapped_water.h
===================================================================
--- trunk/src/world_entities/environments/mapped_water.h	(revision 7954)
+++ trunk/src/world_entities/environments/mapped_water.h	(revision 8037)
@@ -10,5 +10,4 @@
 #include "world_entity.h"
 #include "material.h"
-#include "texture.h"
 #include "shader.h"
 
@@ -20,4 +19,5 @@
 
     void loadParams(const TiXmlElement* root);
+
 
     void activateReflection();
@@ -31,13 +31,23 @@
 
   private:
+    void setLightPosition(float x, float y, float z) { this->lightPos = Vector(x,y,z); };
     void setHeight(float height);
 
   private:
-    float           waterHeight;       //!< y-coord of the Water
-    Material        mat;
+    float               waterHeight;                //!< y-coord of the Water
 
-    Texture         texture;
-    int             textureSize;       //!< size of the texture
-    Shader*         shader;
+    float               move;                       //!< textures coords, speeds, positions for the shaded textures....
+    float               move2;                      //!<
+    float               g_WaterUV;                  //!<
+    float               g_WaterFlow;                //!<
+    float               refrUV;                     //!<
+    float               normalUV;                   //!<
+    float               kNormalMapScale;            //!<
+
+    int                 textureSize;                //!< size of the texture
+    Vector              lightPos;
+    Material            mat;
+    Shader*             shader;
+    Shader::Uniform*    cam_uni;                        //!< uniform that is used for the camera position
 
 };
Index: trunk/src/world_entities/skybox.cc
===================================================================
--- trunk/src/world_entities/skybox.cc	(revision 7954)
+++ trunk/src/world_entities/skybox.cc	(revision 8037)
@@ -74,4 +74,5 @@
   this->setClassID(CL_SKYBOX, "SkyBox");
   this->toList(OM_BACKGROUND);
+  this->toReflectionList();
   //this->size = 100.0;
   this->textureSize = 1024.0f;
Index: trunk/src/world_entities/terrain.cc
===================================================================
--- trunk/src/world_entities/terrain.cc	(revision 7954)
+++ trunk/src/world_entities/terrain.cc	(revision 8037)
@@ -106,4 +106,5 @@
   this->setClassID(CL_TERRAIN, "Terrain");
   this->toList(OM_ENVIRON_NOTICK);
+  this->toReflectionList();
 
   this->objectList = 0;
Index: trunk/src/world_entities/world_entity.cc
===================================================================
--- trunk/src/world_entities/world_entity.cc	(revision 7954)
+++ trunk/src/world_entities/world_entity.cc	(revision 8037)
@@ -270,5 +270,14 @@
 }
 
-
+void WorldEntity::toReflectionList()
+{
+  State::getObjectManager()->toReflectionList( this );
+}
+
+void removeFromReflectionList()
+{
+/// TODO
+///  State::getObject
+}
 
 /**
Index: trunk/src/world_entities/world_entity.h
===================================================================
--- trunk/src/world_entities/world_entity.h	(revision 7954)
+++ trunk/src/world_entities/world_entity.h	(revision 8037)
@@ -80,4 +80,8 @@
   /* --- Object Manager Block --- */
   void toList(OM_LIST list);
+
+  void toReflectionList();
+  void removeFromReflectionList();
+
   /** @returns a Reference to the objectListNumber to set. */
   OM_LIST& getOMListNumber() { return this->objectListNumber; }
