Index: pokernetwork/pokerexplain.py
===================================================================
--- pokernetwork/pokerexplain.py	(revision 6355)
+++ pokernetwork/pokerexplain.py	(working copy)
@@ -341,15 +341,15 @@
                 forward_packets.append(PacketPokerPosition(game_id = game.id))
 
             elif packet.type == PACKET_POKER_PLAYER_ARRIVE:
-                game.addPlayer(packet.serial, packet.seat)
-                player = game.getPlayer(packet.serial)
-                player.setUserData(DEFAULT_PLAYER_USER_DATA.copy())
-                player.name = packet.name
-                player.url = packet.url
-                player.outfit = packet.outfit
-                player.auto_blind_ante = packet.auto_blind_ante
-                player.wait_for = packet.wait_for
-                player.auto = packet.auto
+                if game.addPlayer(packet.serial, packet.seat):
+                    player = game.getPlayer(packet.serial)
+                    player.setUserData(DEFAULT_PLAYER_USER_DATA.copy())
+                    player.name = packet.name
+                    player.url = packet.url
+                    player.outfit = packet.outfit
+                    player.auto_blind_ante = packet.auto_blind_ante
+                    player.wait_for = packet.wait_for
+                    player.auto = packet.auto
                 if not self.no_display_packets:
                     self.forward_packets.append(PacketPokerSeats(game_id = game.id,
                                                                  seats = game.seats()))
Index: tests/test-pokerexplain.py.in
===================================================================
--- tests/test-pokerexplain.py.in	(revision 6355)
+++ tests/test-pokerexplain.py.in	(working copy)
@@ -686,6 +686,23 @@
         self.assertEqual(PACKET_POKER_PLAYER_ARRIVE, self.explain.forward_packets[0].type)
         self.assertEqual(PACKET_POKER_SEATS, self.explain.forward_packets[1].type)
 
+    def test26_1_explain_player_arrive_no_seats_left(self):
+        game_id = 1
+        game = self.explain.games.getOrCreateGame(game_id)
+        game.seats_left = []
+        player_serial = 3
+        self.assertTrue(self.explain.explain(PacketPokerPlayerArrive(game_id = game_id,
+                                                                     serial = player_serial,
+                                                                     seat = 2,
+                                                                     name = 'name',
+                                                                     url = 'url',
+                                                                     outfit = 'outfit',
+                                                                     auto_blind_ante = 1,
+                                                                     wait_for = 0)))
+        self.assertEqual(2, len(self.explain.forward_packets))
+        self.assertEqual(PACKET_POKER_PLAYER_ARRIVE, self.explain.forward_packets[0].type)
+        self.assertEqual(PACKET_POKER_SEATS, self.explain.forward_packets[1].type)
+        
     def test27_explain_player_leave(self):
         game_id = 1
         game = self.explain.games.getOrCreateGame(game_id)
