         })
         
         // MARK: Game State
-        // game state
+        // game state - this is the state for each single game
         let gameState$ = Observable.merge(clicks$)
             .scan(defaultGameState, accumulator: { (prevState: GameState, move: (uiElement: UIButton, position: Position)) -> GameState in
                 

                let justMovedPlayer = prevState.activePlayer
                let nextPlayer = prevState.activePlayer.type == PlayerType.x ? Player(type: PlayerType.o) : Player(type: PlayerType.x)
                let markedPosition = move.position
                let updatedPositions = prevState.board.enumerated().map({ (index, row) -> [Cell] in
                    if index == markedPosition.y {
                        let inner = row.enumerated().map({ (indexInRow, cell) -> Cell in

                    return row
                })
                
                // finally, check to see if this move resulted in a game end state
                let completed = findWinner(board: updatedPositions).type != PlayerType.none // || checkTiedBoard(board: updatedPositions)
                return GameState(activePlayer: nextPlayer, board: updatedPositions, complete: completed)
            })
