Index: code/trunk/src/orxonox/objects/controllers/HumanController.cc
===================================================================
--- code/trunk/src/orxonox/objects/controllers/HumanController.cc	(revision 2870)
+++ code/trunk/src/orxonox/objects/controllers/HumanController.cc	(revision 2872)
@@ -35,4 +35,5 @@
 #include "objects/worldentities/pawns/Pawn.h"
 #include "objects/gametypes/Gametype.h"
+#include "objects/infos/PlayerInfo.h"
 
 namespace orxonox
@@ -157,4 +158,6 @@
             if (pawn)
                 pawn->kill();
+            else if (HumanController::localController_s->player_)
+                HumanController::localController_s->player_->stopControl(HumanController::localController_s->controllableEntity_);
         }
     }
Index: code/trunk/src/orxonox/objects/controllers/PongAI.cc
===================================================================
--- code/trunk/src/orxonox/objects/controllers/PongAI.cc	(revision 2870)
+++ code/trunk/src/orxonox/objects/controllers/PongAI.cc	(revision 2872)
@@ -55,9 +55,4 @@
 
         this->setConfigValues();
-
-//        this->randomOffsetTimer_.setTimer(MAX_REACTION_TIME * (1 - this->strength_), false, this, createExecutor(createFunctor(&PongAI::calculateRandomOffset)));
-//        this->ballEndPositionTimer_.setTimer(MAX_REACTION_TIME * (1 - this->strength_), false, this, createExecutor(createFunctor(&PongAI::calculateBallEndPosition)));
-//        this->randomOffsetTimer_.stopTimer();
-//        this->ballEndPositionTimer_.stopTimer();
     }
 
@@ -88,8 +83,9 @@
         if ((mypos.x > 0 && ballvel.x < 0) || (mypos.x < 0 && ballvel.x > 0))
         {
-            // Ball is flying away
+            // The ball is flying away
             this->ballDirection_.x = -1;
             this->ballDirection_.y = 0;
 
+            // Move to the middle
             if (mypos.z > hysteresisOffset)
                 move = 1;
@@ -99,5 +95,5 @@
         else if (ballvel.x == 0)
         {
-            // Ball is standing still
+            // The ball is standing still
             this->ballDirection_.x = 0;
             this->ballDirection_.y = 0;
@@ -105,7 +101,8 @@
         else
         {
-            // Ball is approaching
+            // The ball is approaching
             if (this->ballDirection_.x != 1)
             {
+                // The ball just startet to approach, initialize all values
                 this->ballDirection_.x = 1;
                 this->ballDirection_.y = sgn(ballvel.z);
@@ -115,19 +112,16 @@
                 this->calculateRandomOffset();
                 this->calculateBallEndPosition();
-                //this->randomOffsetTimer_.setInterval(MAX_REACTION_TIME * (1 - this->strength_));
-                //this->ballEndPositionTimer_.setInterval(MAX_REACTION_TIME * (1 - this->strength_));
-                //this->randomOffsetTimer_.startTimer();
-                //this->ballEndPositionTimer_.startTimer();
             }
 
             if (this->ballDirection_.y != sgn(ballvel.z))
             {
+                // The ball just bounced from a bound, recalculate the predicted end position
                 this->ballDirection_.y = sgn(ballvel.z);
 
                 this->calculateBallEndPosition();
-                //this->ballEndPositionTimer_.startTimer();
-            }
-
-            float desiredZValue = /*((1 - this->strength_) * ballpos.z) + */(/*this->strength_ * */this->ballEndPosition_) + this->randomOffset_;
+            }
+
+            // Move to the predicted end position with an additional offset (to hit the ball with the side of the bat)
+            float desiredZValue = this->ballEndPosition_ + this->randomOffset_;
 
             if (mypos.z > desiredZValue + hysteresisOffset * (this->randomOffset_ < 0))
@@ -156,5 +150,5 @@
 
         // Both sides are equally probable
-        position *= sgn(rnd(-1,1));
+        position *= rndsgn();
 
         // Calculate the offset in world units
@@ -174,14 +168,19 @@
         for (float limit = 0.35; limit < this->strength_ || this->strength_ > 0.99; limit += 0.4)
         {
+            // Bounce from the upper bound
             if (this->ballEndPosition_ > dimension.y / 2)
             {
+                // Mirror the predicted position at the upper bound and add some random error
                 this->ballEndPosition_ = dimension.y - this->ballEndPosition_ + (rnd(-1, 1) * dimension.y * (1 - this->strength_));
                 continue;
             }
+            // Bounce from the upper bound
             if (this->ballEndPosition_ < -dimension.y / 2)
             {
+                // Mirror the predicted position at the lower bound and add some random error
                 this->ballEndPosition_ = -dimension.y - this->ballEndPosition_ + (rnd(-1, 1) * dimension.y * (1 - this->strength_));
                 continue;
             }
+            // No bounce - break
             break;
         }
@@ -216,6 +215,8 @@
     void PongAI::delayedMove()
     {
+        // Get the new movement direction from the timer list
         this->movement_ = this->reactionTimers_.front().second;
 
+        // Destroy the timer and remove it from the list
         Timer<PongAI>* timer = this->reactionTimers_.front().first;
         delete timer;
Index: code/trunk/src/orxonox/objects/controllers/PongAI.h
===================================================================
--- code/trunk/src/orxonox/objects/controllers/PongAI.h	(revision 2870)
+++ code/trunk/src/orxonox/objects/controllers/PongAI.h	(revision 2872)
@@ -66,6 +66,4 @@
             float strength_;
 
-//            Timer<PongAI> randomOffsetTimer_;
-//            Timer<PongAI> ballEndPositionTimer_;
             std::list<std::pair<Timer<PongAI>*, char> > reactionTimers_;
             char movement_;
Index: code/trunk/src/orxonox/objects/gametypes/Pong.cc
===================================================================
--- code/trunk/src/orxonox/objects/gametypes/Pong.cc	(revision 2870)
+++ code/trunk/src/orxonox/objects/gametypes/Pong.cc	(revision 2872)
@@ -151,4 +151,9 @@
         Deathmatch::playerScored(player);
 
+        if (this->center_)
+        {
+            this->center_->fireEvent();
+        }
+
         if (this->ball_)
         {
