Index: trunk/src/world_entities/blackscreen.cc
===================================================================
--- trunk/src/world_entities/blackscreen.cc	(revision 10401)
+++ trunk/src/world_entities/blackscreen.cc	(revision 10403)
@@ -23,4 +23,6 @@
 #include "material.h"
 #include "state.h"
+#include "camera.h"
+#include "static_model.h"
 
 ObjectListDefinition(BlackScreen);
@@ -71,4 +73,6 @@
   this->material->setDiffuse(0,0,0);
   this->material->setBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+  this->build();
 
   i=0;
@@ -106,14 +110,17 @@
   glRotatef (this->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
 
-this->material->setTransparency(i);
-this->material->select();
-
-  glBegin(GL_QUADS);
-  glVertex3f(0.,-100.0f,-100.0f);
-  glVertex3f(0., -100.0f,100.0f);
-  glVertex3f(0., 100.0f,100.0f);
-  glVertex3f(0., 100.0f,-100.0f);
-  
-  glEnd();
+  this->material->select();
+
+
+  WorldEntity::draw(this->getModel( ));
+
+//   glBegin(GL_QUADS);
+
+//   glVertex3f(0.,-100.0f,-100.0f);
+//   glVertex3f(0., -100.0f,100.0f);
+//   glVertex3f(0., 100.0f,100.0f);
+//   glVertex3f(0., 100.0f,-100.0f);
+
+//   glEnd();
 
   glPopMatrix();
@@ -130,4 +137,9 @@
 else
   fadeIn();
+
+  this->material->setTransparency(i);
+  Camera* cam = State::getCamera();
+  if( cam != NULL)
+    this->setParent(cam);
 }
 
@@ -176,2 +188,43 @@
     return 0;
 }
+
+
+void BlackScreen::build()
+{
+  StaticModel* model = new StaticModel();
+
+  float size = 10.;
+
+  model->addVertex (-size, -size, size);
+  model->addVertex (size, -size, size);
+  model->addVertex (-size, size, size);
+  model->addVertex (size, size, size);
+  model->addVertex (-size, size, -size);
+  model->addVertex (size, size, -size);
+  model->addVertex (-size, -size, -size);
+  model->addVertex (size, -size, -size);
+
+
+  model->addVertexNormal (0.0, 0.0, 1.0);
+  model->addVertexNormal (0.0, 1.0, 0.0);
+  model->addVertexNormal (0.0, 0.0, -1.0);
+  model->addVertexNormal (0.0, -1.0, 0.0);
+  model->addVertexNormal (1.0, 0.0, 0.0);
+  model->addVertexNormal (-1.0, 0.0, 0.0);
+
+  model->addVertexTexture (0.0, 1.0);
+  model->addVertexTexture (1.0, 1.0);
+  model->addVertexTexture (1.0, 0.0);
+  model->addVertexTexture (0.0, 0.0);
+
+  model->addFace (4, VERTEX_TEXCOORD_NORMAL, 6,0,4, 0,1,4, 2,2,4, 4,3,4); // back
+  model->addFace (4, VERTEX_TEXCOORD_NORMAL, 1,0,5, 7,1,5, 5,2,5, 3,3,5); // front
+  model->addFace (4, VERTEX_TEXCOORD_NORMAL, 6,0,1, 7,1,1, 1,2,1, 0,3,1); // bottom
+  model->addFace (4, VERTEX_TEXCOORD_NORMAL, 2,0,3, 3,1,3, 5,2,3, 4,3,3); // top
+  model->addFace (4, VERTEX_TEXCOORD_NORMAL, 4,2,2, 5,3,2, 7,0,2, 6,1,2); // left
+  model->addFace (4, VERTEX_TEXCOORD_NORMAL, 0,0,0, 1,1,0, 3,2,0, 2,3,0); // right
+
+  model->finalize();
+
+  this->setModel(model);
+}
Index: trunk/src/world_entities/blackscreen.h
===================================================================
--- trunk/src/world_entities/blackscreen.h	(revision 10401)
+++ trunk/src/world_entities/blackscreen.h	(revision 10403)
@@ -36,4 +36,7 @@
     virtual void draw() const;
 
+  private:
+    void build();
+
 };
 
Index: trunk/src/world_entities/camera.cc
===================================================================
--- trunk/src/world_entities/camera.cc	(revision 10401)
+++ trunk/src/world_entities/camera.cc	(revision 10403)
@@ -258,4 +258,5 @@
   Vector cameraPosition = this->getAbsCoor();
   Vector targetPosition = this->target->getAbsCoor();
+
 
         //Setting the Camera Eye, lookAt and up Vectors
@@ -497,5 +498,4 @@
   if (fabs(translateTo.len()  - (target->getAbsCoor()).len()) >= 11 )
  {
-   printf("translate\n");
    Vector tmpVec= iterate(dt,  &translateTo,  &(masta->getAbsCoor()));
    target->shiftCoor(speed*tmpVec.x, speed*tmpVec.y, speed*tmpVec.z);
Index: trunk/src/world_entities/cameraman.cc
===================================================================
--- trunk/src/world_entities/cameraman.cc	(revision 10401)
+++ trunk/src/world_entities/cameraman.cc	(revision 10403)
@@ -29,5 +29,5 @@
                         addMethod("changeCurrTarget", Executor2<CameraMan, lua_State*,const std::string&,const std::string&>(&CameraMan::changeCurrTarget))
                         ->addMethod("changeTarget", Executor3<CameraMan, lua_State*, const std::string&, const std::string&,const std::string&>(&CameraMan::changeTarget))
-                        ->addMethod("setCam", Executor1<CameraMan, lua_State*, const std::string&>(&CameraMan::setCam)) 
+                        ->addMethod("setCam", Executor1<CameraMan, lua_State*, const std::string&>(&CameraMan::setCam))
                         ->addMethod("togglFade", Executor0<CameraMan, lua_State*>(&CameraMan::togglFade))
                         ->addMethod("getCurrCameraCoorX", Executor0ret<CameraMan, lua_State*,float>(&CameraMan::getCurrCameraCoorX))
@@ -44,12 +44,8 @@
   this->farClip = 1000.0;
 
-  currentCam=State::getCamera();
-  this->cameras.push_back(currentCam);
-
-  State::setCamera(currentCam, currentCam->getTarget());
   this->fadeToBlack=new BlackScreen();
-  this->fadeToBlack->setParent(this->currentCam);
-  this->fadeToBlack->setRelCoor(3., 0., 0.);
-  
+
+  this->setCam( State::getCamera());
+
   if (root != NULL)
     this->loadParams(root);
@@ -60,5 +56,5 @@
 {
   BaseObject::loadParams(root);
-  
+
   LOAD_PARAM_START_CYCLE(root, object);
   {
@@ -83,39 +79,46 @@
   if (cameraNo<cameras.size())
   {
-  currentCam=cameras[cameraNo];
+    this->setCam( cameras[cameraNo]);
+  }
+}
+
+void CameraMan::setCam(const std::string& camName)
+{
+  BaseObject* object = ObjectListBase::getBaseObject("Camera", camName);
+
+  if(object != NULL)
+  {
+    Camera* currentCam = dynamic_cast<Camera*>(object) ;
+
+    this->setCam(currentCam);
+    return;
+  }
+  printf("ERROR CAMERAMANAGER: Couldn't set camera : %s \n", camName.c_str());
+}
+
+
+void CameraMan::setCam(Camera* camera)
+{
+  if( camera == NULL)
+  {
+    PRINTF(0)("trying to add a zero camera! uiuiui!\n");
+  }
+  this->currentCam = camera;
+
   State::setCamera(currentCam, currentCam->getTarget());
   OrxSound::SoundEngine::getInstance()->setListener(currentCam);
 
+  // check if it is already added
+  if( ! this->cameraIsInVector(currentCam) )
+    this->cameras.push_back(currentCam);
+
+  this->fadeToBlack->setRelCoor(0., 0., 0.);
   this->fadeToBlack->setParent(this->currentCam);
-  this->fadeToBlack->setRelCoor(3., 0., 0.);
-  }
-
-}
-
-void CameraMan::setCam(const std::string& camName)
-{
-  BaseObject* object = ObjectListBase::getBaseObject("Camera", camName);
-  
-  if(object != NULL)
-  {
-    
-    currentCam = dynamic_cast<Camera*>(object) ;
-    
-    if( ! this->cameraIsInVector(currentCam) )
-      this->cameras.push_back(currentCam);
-    
-    State::setCamera(currentCam, currentCam->getTarget());
-    OrxSound::SoundEngine::getInstance()->setListener(currentCam);
-    this->fadeToBlack->setParent(this->currentCam);
-    this->fadeToBlack->setRelCoor(3., 0., 0.);
-    return;
-  }
-  printf("ERROR CAMERAMANAGER: Couldn't set camera : %s \n", camName.c_str());
-  
-}
+}
+
 
 void CameraMan::moveCurrCam(int x, int y, int z)
 {
-currentCam->target->trans(x,y,z);
+  currentCam->target->trans(x,y,z);
 }
 
@@ -123,5 +126,5 @@
 void CameraMan::moveCam(int x, int y, int z, int camNo)
 {
-cameras[camNo]->target->trans(x,y,z);
+  cameras[camNo]->target->trans(x,y,z);
 }
 
Index: trunk/src/world_entities/cameraman.h
===================================================================
--- trunk/src/world_entities/cameraman.h	(revision 10401)
+++ trunk/src/world_entities/cameraman.h	(revision 10403)
@@ -22,4 +22,6 @@
     void setCam(int CameraNo);
     void setCam(const std::string& camName);
+    void setCam(Camera* camera);
+
     void createCam(const TiXmlElement* root);
     void moveCam(int x, int y, int z,  int camNo);
@@ -34,8 +36,8 @@
     void setClipRegion(float nearClip, float farClip);
     void togglFade();
-    
+
     /// LOADING
     virtual void loadParams(const TiXmlElement* root);
-    
+
     /// POLLING
     float getCurrCameraCoorX(){ return this->currentCam->getAbsCoorX(); }
Index: trunk/src/world_entities/sound_entity.cc
===================================================================
--- trunk/src/world_entities/sound_entity.cc	(revision 10401)
+++ trunk/src/world_entities/sound_entity.cc	(revision 10403)
@@ -41,4 +41,6 @@
   this->soundSource.setSourceNode(this);
 
+  this->bInit = false;
+
   if( root != NULL)
     this->loadParams(root);
@@ -75,4 +77,5 @@
 {
   this->soundBuffer = OrxSound::ResourceSoundBuffer(fileName);
+  this->bInit = true;
 }
 
@@ -80,4 +83,5 @@
 void SoundEntity::activate()
 {
+  this->soundSource.play();
 }
 
Index: trunk/src/world_entities/sound_entity.h
===================================================================
--- trunk/src/world_entities/sound_entity.h	(revision 10401)
+++ trunk/src/world_entities/sound_entity.h	(revision 10403)
@@ -37,4 +37,5 @@
   private:
 
+    bool                     bInit;
     OrxSound::SoundSource    soundSource;
     OrxSound::SoundBuffer    soundBuffer;
