Index: code/branches/gamecontent/src/modules/weapons/weaponmodes/LightningGun.cc
===================================================================
--- code/branches/gamecontent/src/modules/weapons/weaponmodes/LightningGun.cc	(revision 8940)
+++ code/branches/gamecontent/src/modules/weapons/weaponmodes/LightningGun.cc	(revision 8941)
@@ -52,5 +52,5 @@
         this->reloadTime_ = 1.0f;
         this->damage_ = 0.0f;
-        this->speed_ = 250.0f;
+        this->speed_ = 700.0f;
 
         this->setMunitionName("LaserMunition");
Index: code/branches/gamecontent/src/orxonox/gametypes/Mission.cc
===================================================================
--- code/branches/gamecontent/src/orxonox/gametypes/Mission.cc	(revision 8940)
+++ code/branches/gamecontent/src/orxonox/gametypes/Mission.cc	(revision 8941)
@@ -30,4 +30,5 @@
 //#include "TeamGametype.h"
 #include "items/Engine.h"
+#include "controllers/ArtificialController.h"
 
 #include "core/CoreIncludes.h"
@@ -70,5 +71,5 @@
     {
         Gametype::start();
-
+        this->setTeams();
         /*for (ObjectList<Engine>::iterator it = ObjectList<Engine>::begin(); it != ObjectList<Engine>::end(); ++it)
             it->setActive(false); // works -> @sr :*/
@@ -87,3 +88,12 @@
 	 * */
     }
+
+    void Mission::setTeams()
+    {
+        for (ObjectList<Pawn>::iterator it = ObjectList<Pawn>::begin(); it != ObjectList<Pawn>::end(); ++it)
+            this->setObjectColour(*it);
+    }
+
+
+
 }
Index: code/branches/gamecontent/src/orxonox/gametypes/Mission.h
===================================================================
--- code/branches/gamecontent/src/orxonox/gametypes/Mission.h	(revision 8940)
+++ code/branches/gamecontent/src/orxonox/gametypes/Mission.h	(revision 8941)
@@ -46,4 +46,5 @@
             virtual void start();
             virtual void end();
+            virtual void setTeams();
             virtual void addBots(unsigned int amount){} //<! overwrite function in order to bypass the addbots command
             inline void setLives(unsigned int amount)
Index: code/branches/gamecontent/src/orxonox/gametypes/TeamGametype.cc
===================================================================
--- code/branches/gamecontent/src/orxonox/gametypes/TeamGametype.cc	(revision 8940)
+++ code/branches/gamecontent/src/orxonox/gametypes/TeamGametype.cc	(revision 8941)
@@ -35,4 +35,5 @@
 #include "worldentities/TeamSpawnPoint.h"
 #include "worldentities/pawns/Pawn.h"
+#include "controllers/ArtificialController.h"
 
 namespace orxonox
@@ -70,5 +71,10 @@
     {
         Gametype::playerEntered(player);
+        if(player == NULL) return;
         this->findAndSetTeam(player);
+        if( getNumberOfPlayers() < maxPlayers_ || maxPlayers_  ==  0)
+            this->allowedInGame_[player]= true;
+        else
+            this->allowedInGame_[player]= false;
     }
 
@@ -108,11 +114,14 @@
     void TeamGametype::spawnDeadPlayersIfRequested()
     {
-        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end();
-++it)
-        if (it->second.state_ == PlayerState::Dead)
-        {
-         if ((it->first->isReadyToSpawn() || this->bForceSpawn_))
-            {
-               this->spawnPlayer(it->first);
+        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)\
+        {
+            if(true)//check if dead player is allowed to enter -> if maximum nr of players is exceeded & player was not in game before: disallow
+                continue;
+            if (it->second.state_ == PlayerState::Dead)
+            {
+                if ((it->first->isReadyToSpawn() || this->bForceSpawn_))
+                {
+                   this->spawnPlayer(it->first);
+                }
             }
         }
@@ -209,4 +218,31 @@
             return;
 
+        this->setTeamColour(player,pawn);
+    }
+
+    bool TeamGametype::pawnsAreInTheSameTeam(Pawn* pawn1, Pawn* pawn2)
+    {
+        if (pawn1 && pawn2)
+        {
+            std::map<PlayerInfo*, int>::const_iterator it1 = this->teamnumbers_.find(pawn1->getPlayer());
+            std::map<PlayerInfo*, int>::const_iterator it2 = this->teamnumbers_.find(pawn2->getPlayer());
+
+            if (it1 != this->teamnumbers_.end() && it2 != this->teamnumbers_.end())
+                return (it1->second == it2->second);
+        }
+        return false;
+    }
+
+    int TeamGametype::getTeam(PlayerInfo* player)
+    {
+        std::map<PlayerInfo*, int>::const_iterator it_player = this->teamnumbers_.find(player);
+        if (it_player != this->teamnumbers_.end())
+            return it_player->second;
+        else
+            return -1;
+    }
+
+    void TeamGametype::setTeamColour(PlayerInfo* player, Pawn* pawn)
+    {
         // Set the team colour
         std::map<PlayerInfo*, int>::const_iterator it_player = this->teamnumbers_.find(player);
@@ -230,24 +266,30 @@
     }
 
-    bool TeamGametype::pawnsAreInTheSameTeam(Pawn* pawn1, Pawn* pawn2)
-    {
-        if (pawn1 && pawn2)
-        {
-            std::map<PlayerInfo*, int>::const_iterator it1 = this->teamnumbers_.find(pawn1->getPlayer());
-            std::map<PlayerInfo*, int>::const_iterator it2 = this->teamnumbers_.find(pawn2->getPlayer());
-
-            if (it1 != this->teamnumbers_.end() && it2 != this->teamnumbers_.end())
-                return (it1->second == it2->second);
-        }
-        return false;
-    }
-
-    int TeamGametype::getTeam(PlayerInfo* player)
-    {
-        std::map<PlayerInfo*, int>::const_iterator it_player = this->teamnumbers_.find(player);
-        if (it_player != this->teamnumbers_.end())
-            return it_player->second;
-        else
-            return -1;
-    }
+    void TeamGametype::setObjectColour(Pawn* pawn)
+    {
+        if(pawn == NULL)
+            return;
+        //get Pawn's controller
+        ArtificialController* controller = orxonox_cast<ArtificialController*>(pawn);
+        if(controller == NULL)
+            return;
+        //get Teamnumber - get the data
+        int teamnumber= controller->getTeam();
+        if(teamnumber < 0)
+            return;
+        //set ObjectColour
+        pawn->setRadarObjectColour(this->teamcolours_[teamnumber]);
+
+        std::set<WorldEntity*> pawnAttachments = pawn->getAttachedObjects();
+        for (std::set<WorldEntity*>::iterator it = pawnAttachments.begin(); it != pawnAttachments.end(); ++it)
+        {
+            if ((*it)->isA(Class(TeamColourable)))
+            {
+                TeamColourable* tc = orxonox_cast<TeamColourable*>(*it);
+                tc->setTeamColour(this->teamcolours_[teamnumber]);
+            }
+         }
+    }
+
+
 }
Index: code/branches/gamecontent/src/orxonox/gametypes/TeamGametype.h
===================================================================
--- code/branches/gamecontent/src/orxonox/gametypes/TeamGametype.h	(revision 8940)
+++ code/branches/gamecontent/src/orxonox/gametypes/TeamGametype.h	(revision 8941)
@@ -73,4 +73,7 @@
             //unsigned int playersPerTeam_; //<! Defines Maximum for players per team. Value 0: no maximum!
             unsigned int maxPlayers_;  //<! Defines Maximum for number of players. Value 0 : no maximum!
+            std::map<PlayerInfo*, bool> allowedInGame_; //!< Only those players are allowed to spawn which are listed here as 'true'.
+            void setTeamColour(PlayerInfo* player, Pawn* pawn);
+            void setObjectColour(Pawn* pawn);
     };
 }
