Index: code/branches/pCuts/data/levels/tetris.oxw
===================================================================
--- code/branches/pCuts/data/levels/tetris.oxw	(revision 9083)
+++ code/branches/pCuts/data/levels/tetris.oxw	(revision 9084)
@@ -27,4 +27,7 @@
       <Model position="0,0,0" mesh="crate.mesh" scale=1 />
     </attached>
+    <!--collisionShapes>
+      <BoxCollisionShape position="0,0,0" halfExtents="5,5,5" />
+    </collisionShapes-->
   </TetrisStone>
 </Template>
@@ -77,4 +80,9 @@
             <Model position="111,76,0" mesh="cube.mesh" scale3D="1,76,1" />
         </attached>
+        <!--collisionShapes>
+            <BoxCollisionShape position="55,-1,0"  halfExtents="57,1,11" />
+            <BoxCollisionShape position="-1,76,0"  halfExtents="1,76,1" />
+            <BoxCollisionShape position="111,76,0" halfExtents="1,76,1" />
+        </collisionShapes-->
     </TetrisCenterpoint>
 
Index: code/branches/pCuts/src/modules/tetris/Tetris.cc
===================================================================
--- code/branches/pCuts/src/modules/tetris/Tetris.cc	(revision 9083)
+++ code/branches/pCuts/src/modules/tetris/Tetris.cc	(revision 9084)
@@ -130,7 +130,7 @@
     /**
     @brief
-        Check for each stone in a brick wether it is moved the right way.
-    */
-    bool Tetris::isValidMove(TetrisBrick* brick, const Vector3& position)
+        Check for each stone in a brick if it is moved the right way.
+    */
+    bool Tetris::isValidMove(TetrisBrick* brick, const Vector3& position, bool isRotation = false)
     {
         assert(brick);
@@ -139,8 +139,17 @@
         {
             TetrisStone* stone = brick->getStone(i);
-            if(! this->isValidMove(stone, position + stone->getPosition())) // wrong position??
+            Vector3 stonePosition;
+            if(isRotation)
+            	stonePosition = rotateVector(stone->getPosition(), brick->getRotationCount()+1);
+            else
+                stonePosition = rotateVector(stone->getPosition(), brick->getRotationCount());
+
+            /*orxout()<< "stoneRelativePoistion: " << stonePosition << endl;
+            orxout()<< "stoneTotalPoistion   : " << position + stonePosition << endl;*/
+
+            if(! this->isValidMove(stone, position + stonePosition )) // wrong position??
+            {
                 return false;
-            orxout()<< "stoneRelativePoistion: " << stone->getPosition() << endl;
-            orxout()<< "stoneTotalPoistion: " << position + stone->getPosition() << endl;
+            }
         }
         return true;
@@ -159,9 +168,11 @@
             if(this->activeBrick_->contains(*it))
                 continue;
-
-            const Vector3& currentStonePosition = (*it)->getPosition(); //!< Saves the position of the currentStone
+//TODO: is this rotation correct ??
+            Vector3 currentStonePosition = rotateVector((*it)->getPosition(), this->activeBrick_->getRotationCount());
+            //!< Saves the position of the currentStone
 
             if((position.x == currentStonePosition.x) && (position.y < currentStonePosition.y + this->center_->getStoneSize()))
-            {
+            {//TODO: Why are such events not detected ??
+                orxout()<< "YEAY !!"<<endl;
                 this->activeBrick_->setPosition(Vector3(this->activeBrick_->getPosition().x, currentStonePosition.y+this->center_->getStoneSize(), this->activeBrick_->getPosition().z));
                 return false;
@@ -171,6 +182,7 @@
         // after we checked for collision with all stones, we also check for collision with the bottom
         if(position.y < this->center_->getStoneSize()/2.0f) //!< If the stone has reached the bottom of the level
-        {//TODO: correct positioning !!
-        	this->activeBrick_->setPosition(Vector3(this->activeBrick_->getPosition().x, this->center_->getStoneSize()/2.0f, this->activeBrick_->getPosition().z));
+        {
+        	int yOffset = stone->getPosition().y;//calculate offset
+        	this->activeBrick_->setPosition(Vector3(this->activeBrick_->getPosition().x, this->center_->getStoneSize()/2.0f+yOffset, this->activeBrick_->getPosition().z));
             return false;
         }
@@ -186,9 +198,26 @@
         {
             TetrisStone* stone = brick->getStone(i);
-            if(! this->isValidStonePosition(stone, position + stone->getPosition()) ) // wrong position??
+            Vector3 stonePosition = rotateVector(stone->getPosition(), brick->getRotationCount());
+            if(! this->isValidStonePosition(stone, position + stonePosition) )
                 return false;
         }
         return true;
-
+    }
+
+    /**
+    @brief
+        Nasty function that allocates memory!! it rolls a vector 90° * amount
+    */
+    Vector3 Tetris::rotateVector(Vector3 position, unsigned int amount)
+    {
+
+    	int temp = 0;
+        for(unsigned int i = 0; i < amount; i++)
+        {
+            temp = position.x;
+            position.x = -position.y;
+            position.y = temp;
+        }
+        return position;
     }
 
Index: code/branches/pCuts/src/modules/tetris/Tetris.h
===================================================================
--- code/branches/pCuts/src/modules/tetris/Tetris.h	(revision 9083)
+++ code/branches/pCuts/src/modules/tetris/Tetris.h	(revision 9084)
@@ -72,8 +72,9 @@
 
             bool isValidMove(TetrisStone* stone, const Vector3& position);
-            bool isValidMove(TetrisBrick* brick, const Vector3& position);
+            bool isValidMove(TetrisBrick* brick, const Vector3& position, bool isRotation);
 
         protected:
             virtual void spawnPlayersIfRequested(); //!< Spawns player.
+
 
         private:
@@ -83,4 +84,5 @@
             bool isValidStonePosition(TetrisStone* stone, const Vector3& position);
             bool isValidBrickPosition(TetrisBrick* brick, const Vector3& position);
+            Vector3 rotateVector(Vector3 position, unsigned int amount);
             
             PlayerInfo* player_;
Index: code/branches/pCuts/src/modules/tetris/TetrisBrick.cc
===================================================================
--- code/branches/pCuts/src/modules/tetris/TetrisBrick.cc	(revision 9083)
+++ code/branches/pCuts/src/modules/tetris/TetrisBrick.cc	(revision 9084)
@@ -53,5 +53,5 @@
         RegisterObject(TetrisBrick);
 
-        this->shapeIndex_ = 3; //<! TODO: random number between 0 and 7
+        this->shapeIndex_ = 1; //<! TODO: random number between 0 and 7
         this->stonesPerBrick_ = 4; //<! most tetris bricks is formed by 4 stones
         this->delay_ = false;
@@ -60,6 +60,5 @@
         this->tetris_ = this->getTetris();
         this->size_ = 10.0f; //TODO: fix this via this->tetris_->center_->getStoneSize();
-
-
+        this->rotationCount_ = 0;
         this->createBrick(); //<! create a whole new Brick;
     }
@@ -79,5 +78,5 @@
             // Create a new stone and add it to the brick.
             TetrisStone* stone = new TetrisStone(this);
-            stone->setHealth(1.0f); //TODO: is this value low enough ?
+            stone->setHealth(1.0f);
             this->brickStones_.push_back(stone);
             this->attach(stone);
@@ -156,15 +155,7 @@
     }
 
-    bool TetrisBrick::isValidMove(Vector3& position)
-    {
-
-        for(unsigned int i = 0; i < this->stonesPerBrick_ ; i++)
-        {//TODO: check if isValidMove works with this function,
-            if(this->tetris_->isValidMove(this->brickStones_[i], position))
-            	continue;
-            else
-            	return false;
-        }
-        return true;
+    bool TetrisBrick::isValidMove(const Vector3& position, bool isRotation = false)
+    {
+    	return this->tetris_->isValidMove(this,position, isRotation);
     }
 
@@ -211,10 +202,11 @@
         else if(!this->lockRotation_) //rotate when key up is pressed
         {
-            orxout() << "The object should be rolled soon." << endl;
+        	if(!isValidMove(this->getPosition(), true)) //catch illegal rotations
+        	    return;
             this->lockRotation_ = true; // multiple calls of this function have to be filtered out.
             this->rotationTimer_.setTimer(0.1f, false, createExecutor(createFunctor(&TetrisBrick::unlockRotation, this)));
             Quaternion q(Degree(90), Vector3::UNIT_Z);
             this->setOrientation(this->getOrientation()*q); //rotation: roll 90°
-
+            this->rotationCount_ = (this->rotationCount_ + 1) % 4;
         }
     }
Index: code/branches/pCuts/src/modules/tetris/TetrisBrick.h
===================================================================
--- code/branches/pCuts/src/modules/tetris/TetrisBrick.h	(revision 9083)
+++ code/branches/pCuts/src/modules/tetris/TetrisBrick.h	(revision 9084)
@@ -61,5 +61,5 @@
             virtual void changedPlayer(); //!< Is called when the player changed.
 
-            bool isValidMove(Vector3& position);
+            bool isValidMove(const Vector3& position, bool isRotation);
             unsigned int getNumberOfStones(void) const
                 { return this->brickStones_.size(); }
@@ -69,4 +69,6 @@
             void setGame(Tetris* tetris)
                 { assert(tetris); tetris_ = tetris; }
+            unsigned int getRotationCount(void)
+                { return this->rotationCount_;}
 
         protected:
@@ -93,4 +95,5 @@
             bool lockRotation_;
 
+            unsigned int rotationCount_; //!< Stores the bricks orientation
             Timer delayTimer_;
             Timer rotationTimer_; ///!< This timer is used to filter out multiple rotation inputs.
Index: code/branches/pCuts/src/orxonox/worldentities/ControllableEntity.cc
===================================================================
--- code/branches/pCuts/src/orxonox/worldentities/ControllableEntity.cc	(revision 9083)
+++ code/branches/pCuts/src/orxonox/worldentities/ControllableEntity.cc	(revision 9084)
@@ -177,5 +177,5 @@
     {
         if (this->cameraPositions_.size() <= 0)
-            {orxout()<< "camareapositions_size == 0"<<endl ; return 0;}
+            return 0;
 
         unsigned int counter = 0;
@@ -196,5 +196,4 @@
         if(this->camera_ != NULL && this->cameraPositions_.size() > 0)
         {
-        orxout()<< "Cameraposition is set."<<endl;
             if(index >= this->cameraPositions_.size())
                 index = 0;
