Guadalupe - I think I understand your suggestions to clean up the code. They made sense to me and I believe I implemented them correctly. You were definitely correct - much easier to understand at a glance. THANK YOU for that input! However, I apparently did not understand what you were trying to tell me regarding the iteration logic as I am still getting the same errors with the revised code. Could you please explain in simpler terms? I'm not looking for the exact code...I would just like you to give me the gist of how the logic should flow (and maybe pinpoint my exact pieces of logic are corrupted) private void openTile(int x, int y) { GameObject tile = gameField[y][x]; if ( isGameStopped || tile.isOpen || tile.isFlag ) { return; } if ( tile.isMine ) // selected tile is a mine { setCellValueEx ( y, x, Color.RED, MINE ); gameOver ( ); return; } else if ( tile.countMineNeighbors != 0 ) // not a mine but neighboring mines exist { setCellColor ( x, y, Color.YELLOWGREEN ); setCellNumber ( x, y, gameField[y][x].countMineNeighbors ); } else // not a mine, no neighboring mines { countClosedTiles--; setCellColor ( x, y, Color.GRAY ); setCellValue ( tile.x, tile.y, "" ); tile.isOpen = true; setScore ( score += 5 ); if ( countClosedTiles == countMinesOnField ) { win ( ); return; } for (GameObject gameObject : getNeighbors ( gameField[y][x] )) { if ( !gameObject.isOpen ) { openTile ( gameObject.x, gameObject.y ); } } } }