specified location MovePiece(Location source, Location destination) - take a piece off of source, puts on destination - in my version I raise an error if no piece exists at source, and also if destination is not empty. - that's because I want my "game engine" deciding if pieces can kill pieces, etc - not my board. EachSqaure() : Enumerator&lt;Square&gt; - enumerates all 64 squares ... you can write other enumerators that might be useful for your game, such as ... EachSquareInRow(int) : Enumerator&lt;Square&gt; - returns the list of squares in the specified row EachSquareInColumn(int) : Enumerator&lt;Square&gt; - returns the list of squares in the specified column EachSquareForPlayer(Player) : Enumerator&lt;Square&gt; - the list of squares with pieces of the provided player I don't have time to go any further right now ... and of course this design would change and evolve for any real-world coding exercise ... I just wanted to give you some concrete thoughts about the types of things that might be classes and their methods. Good luck.