Index: common/Game.cpp
===================================================================
--- common/Game.cpp	(revision 1d96513b80d281afb2ab33ce592970675bd51c8c)
+++ common/Game.cpp	(revision 45734ffbdc402a252cd6cb03ff255cd673cfce55)
@@ -37,6 +37,38 @@
 }
 
+bool Game::addPlayer(Player* p) {
+   if (players.find(p->id) == players.end()) {
+      players[p->id] = p;
+      return true;
+   }
+   else
+      return false;
+}
+
+bool Game::removePlayer(unsigned int id) {
+   if (players.erase(id) == 1)
+      return true;
+   else
+      return false;
+}
+
 map<unsigned int, Projectile>& Game::getProjectiles() {
    return this->projectiles;
+}
+
+bool Game::addProjectile(Projectile p) {
+   if (projectiles.find(p.id) == projectiles.end()) {
+      projectiles[p.id] = p;
+      return true;
+   }
+   else
+      return false;
+}
+
+bool Game::removeProjectile(unsigned int id) {
+   if (projectiles.erase(id) == 1)
+      return true;
+   else
+      return false;
 }
 
@@ -63,20 +95,4 @@
 void Game::setBlueScore(int score) {
    this->blueScore = score;
-}
-
-bool Game::addPlayer(Player* p) {
-   if (players.find(p->id) == players.end()) {
-      players[p->id] = p;
-      return true;
-   }
-   else
-      return false;
-}
-
-bool Game::removePlayer(unsigned int id) {
-   if (players.erase(id) == 1)
-      return true;
-   else
-      return false;
 }
 
@@ -159,17 +175,11 @@
 }
 
-bool Game::addProjectile(Projectile p) {
-   if (projectiles.find(p.id) == projectiles.end()) {
-      projectiles[p.id] = p;
-      return true;
-   }
-   else
-      return false;
+void Game::assignProjectileId(Projectile* p) {
+   p->id = unusedProjectileId;
+   updateUnusedProjectileId();
 }
 
-bool Game::removeProjectile(unsigned int id) {
-   if (projectiles.erase(id) == 1)
-      return true;
-   else
-      return false;
+void Game::updateUnusedProjectileId() {
+   while (projectiles.find(unusedProjectileId) != projectiles.end())
+      unusedProjectileId++;
 }
Index: common/Game.h
===================================================================
--- common/Game.h	(revision 1d96513b80d281afb2ab33ce592970675bd51c8c)
+++ common/Game.h	(revision 45734ffbdc402a252cd6cb03ff255cd673cfce55)
@@ -26,4 +26,5 @@
    int blueScore;
    int redScore;
+   unsigned int unusedProjectileId;
 
 public:
@@ -35,6 +36,4 @@
    string getName();
    int getNumPlayers();
-   map<unsigned int, Player*>& getPlayers();
-   map<unsigned int, Projectile>& getProjectiles();
    int getBlueScore();
    int getRedScore();
@@ -45,12 +44,18 @@
    void setRedScore(int score);
 
+   map<unsigned int, Player*>& getPlayers();
    bool addPlayer(Player* p);
    bool removePlayer(unsigned int id);
+
+   map<unsigned int, Projectile>& getProjectiles();
+   bool addProjectile(Projectile p);
+   bool removeProjectile(unsigned int id);
+
    bool startPlayerMovement(unsigned int id, int x, int y);
    bool processPlayerMovement(Player* p, FLOAT_POSITION oldPos);
    int processFlagPickupRequest(Player* p);
 
-   bool addProjectile(Projectile p);
-   bool removeProjectile(unsigned int id);
+   void assignProjectileId(Projectile* p);
+   void updateUnusedProjectileId();
 };
 
