Index: common/Game.cpp
===================================================================
--- common/Game.cpp	(revision d6b5f7443b62b3c053da75ca5bca921645678a73)
+++ common/Game.cpp	(revision 64a1f4efc694f9ec1fb33eaf1e6b29cf345d044a)
@@ -3,4 +3,5 @@
 #include <iostream>
 #include <cstring>
+#include <cstdlib>
 
 #include "Common.h"
@@ -45,4 +46,21 @@
    if (players.find(p->getId()) == players.end()) {
       players[p->getId()] = p;
+
+      // reset player stats, location, etc.
+      p->pos.x = p->target.x = 200;
+      p->pos.y = p->target.y = 200;
+      p->setTargetPlayer(0);
+      p->isChasing = false;
+      p->isAttacking = false;
+      p->isDead = false;
+      p->health = p->maxHealth;
+      p->hasBlueFlag = false;
+      p->hasRedFlag = false;
+
+      // choose a random team (either 0 or 1)
+      p->team = rand() % 2;
+
+      p->currentGame = this;
+
       return true;
    }
Index: server/server.cpp
===================================================================
--- server/server.cpp	(revision d6b5f7443b62b3c053da75ca5bca921645678a73)
+++ server/server.cpp	(revision 64a1f4efc694f9ec1fb33eaf1e6b29cf345d044a)
@@ -7,5 +7,4 @@
 #include <fstream>
 #include <cstring>
-#include <cmath>
 
 #include <vector>
@@ -336,8 +335,4 @@
             cout << "new player id: " << p->getId() << endl;
             p->setAddr(from);
-            p->currentGame = NULL;
-
-            // choose a random team (either 0 or 1)
-            p->team = rand() % 2;
 
             serverMsg.type = MSG_TYPE_PLAYER;
@@ -696,6 +691,4 @@
 
          Player* p = findPlayerByAddr(mapPlayers, from);
-         p->team = rand() % 2; // choose a random team (either 0 or 1)
-         p->currentGame = g;
 
          // tell the new player about all map objects
@@ -723,11 +716,13 @@
          msgProcessor.sendMessage(&serverMsg, &from);
 
+
+         map<unsigned int, Player*>& oldPlayers = g->getPlayers();
+         g->addPlayer(p);
+
          // send info to other players
          serverMsg.type = MSG_TYPE_PLAYER_JOIN_GAME;
          p->serialize(serverMsg.buffer);
          cout << "Should be broadcasting the message" << endl;
-         msgProcessor.broadcastMessage(serverMsg, g->getPlayers());
-
-         g->addPlayer(p);
+         msgProcessor.broadcastMessage(serverMsg, oldPlayers);
 
 
@@ -735,5 +730,4 @@
          cout << "Sending other players to new player" << endl;
          serverMsg.type = MSG_TYPE_PLAYER_JOIN_GAME;
-
          
          map<unsigned int, Player*>& allPlayers = g->getPlayers();
@@ -747,4 +741,5 @@
             msgProcessor.sendMessage(&serverMsg, &from);
          }
+
 
          int numPlayers = g->getNumPlayers();
