anchor.diff:  					   players = Players}) ->
   	case save_player(GameId, Handle) of
   		{ok, PlayerId} = Reply ->
  -			%% TODO dispatch player joined event
  +			erlang:monitor(process, PlayerPid),
  +			gen_event:notify(GameEventPid, {player_joined, PlayerId, Handle}),
   			UpdatedPlayers = dict:store(PlayerId, PlayerPid, Players),
  -			%% TODO add event handler and monitor for player pid
  +			gen_event:add_handler(GameEventPid, {bc_game_event, PlayerId}, 
  +								  {player_pid, PlayerPid}),
   			UpdatedState = State#state{players = UpdatedPlayers},
   			case pending_players_changed(GameId, UpdatedPlayers) of
   				{ok, started} ->
  -					%% TODO dispatch game started event
  +					gen_event:notify(GameEventPid, {game_started, dict:to_list(Players)}),
  +					gen_event:stop(GameEventPid),
   					{reply, Reply, started, UpdatedState};
   				{ok, pending} ->
   					{reply, Reply, pending, UpdatedState};
   				{error, Reason} = Error ->
  -					%% TODO dispatch game error event
  +					gen_event:notify(GameEventPid, {game_error, Reason}),
  +					gen_event:stop(GameEventPid),
   					{stop, Error, Error, UpdatedState};
   				_ ->
   					{stop, illegal_state, {error, illegal_state}, UpdatedState}
  
positive.code: 			{error, Reason}
  	end.
  
  player_ids(GameId) ->
  	MatchSpec = ets:fun2ms(fun({_, _, GmId, _} = GpAssoc) 
  								when GmId =:= GameId -> GpAssoc end),
  
negative.code: 		State = #state{game_event_pid = GameEventPid,
  					   game_id = GameId,
  					   players = Players}) ->
  	Player = find_player(PlayerId),
  	case remove_player(GameId, PlayerId) of
  		ok ->
  			gen_event:delete_handler(GameEventPid, {bc_game_event, PlayerId}, []),
  			UpdatedPlayers = dict:erase(PlayerId, Players),
  			gen_event:notify(GameEventPid, {player_quit, PlayerId, Player#player.handle}),
  			UpdatedState = State#state{players = UpdatedPlayers},
  			case pending_players_changed(GameId, UpdatedPlayers) of
  				{ok, quit} ->
  					gen_event:stop(GameEventPid),
  					{stop, quit, UpdatedState};
  				{ok, pending} ->
  					{next_state, pending, UpdatedState};
  				{error, Reason} = Error ->
  					gen_event:notify(GameEventPid, {game_error, Reason}),
  					gen_event:stop(GameEventPid),
  					{stop, Error, UpdatedState};
  				_ ->
  					{stop, illegal_state, UpdatedState}
  