diff --git a/haskellscrabble.cabal b/haskellscrabble.cabal
--- a/haskellscrabble.cabal
+++ b/haskellscrabble.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                haskellscrabble
-version:             0.1.0.0
+version:             0.1.0.1
 synopsis:            A scrabble library capturing the core game logic of scrabble.
 description:         A scrabble library which enforces legal transitions between moves. Intended to facilitate the development of a playable game.
 homepage:            http://www.github.com/happy0/haskellscrabble
@@ -35,7 +35,7 @@
   other-modules:       Wordify.Rules.Game.Internal
 
   build-depends:       base < 4.8, containers, array, random, mtl, transformers, QuickCheck, 
-                       parsec, unordered-containers, semigroups, errors, safe
+                       parsec, unordered-containers, semigroups, errors, safe, split
   hs-source-dirs:      src
   
 test-suite tests
diff --git a/src/Wordify/Rules/Board.hs b/src/Wordify/Rules/Board.hs
--- a/src/Wordify/Rules/Board.hs
+++ b/src/Wordify/Rules/Board.hs
@@ -1,5 +1,5 @@
 module Wordify.Rules.Board(Board, allSquares, emptyBoard, placeTile, occupiedSquareAt,
- lettersAbove, lettersBelow, lettersLeft, lettersRight, unoccupiedSquareAt) where
+ lettersAbove, lettersBelow, lettersLeft, lettersRight, unoccupiedSquareAt, prettyPrint) where
 
   import Wordify.Rules.Square
   import Wordify.Rules.Pos
@@ -10,6 +10,8 @@
   import Data.Sequence as Seq
   import Wordify.Rules.Board.Internal
   import Control.Applicative
+  import Data.List.Split
+  import Data.List
 
   {- |
     Returns all the squares on the board, ordered by column then row.
@@ -55,6 +57,29 @@
   {- | All letters immediately right of a given square until a non-occupied square -}
   lettersRight :: Board -> Pos -> Seq (Pos,Square)
   lettersRight board pos = walkFrom board pos right
+
+  {- | Pretty prints a board to a human readable string representation -}
+  prettyPrint :: Board -> String
+  prettyPrint board = rowsWithLabels ++ columnLabelSeparator ++ columnLabels
+    where
+      rows = transpose $ chunksOf 15 $ map (squareToString . snd) $ allSquares board
+      rowsWithLabels = concatMap (\(rowNo, row) -> (rowStr rowNo) ++ concat row ++ "\n") $ Prelude.zip [1 .. ] rows
+
+      rowStr :: Int -> String
+      rowStr number = if number < 10 then ((show number) ++ " | ") else (show number) ++ "| "
+      columnLabelSeparator = "  " ++ (Prelude.take (15 * 5) $ repeat '-') ++ "\n"
+      columnLabels = "      " ++ (concat $ Prelude.take (15 *2) $ intersperse "    " $ map ( : []) ['A' .. ])
+
+      squareToString square = 
+        case (tileIfOccupied square) of
+          Just sq -> maybe " [_] " (\lt -> " [" ++ lt : "] ") $ tileLetter sq
+          Nothing -> 
+            case square of
+              (Normal _) -> "  N  "
+              (DoubleLetter _) -> "  DL "
+              (TripleLetter _) -> "  TL "
+              (DoubleWord _) -> "  DW "
+              (TripleWord _) -> "  TW "
 
   {-
     Walks the tiles from a given position in a given direction
diff --git a/src/Wordify/Rules/Pos/Internal.hs b/src/Wordify/Rules/Pos/Internal.hs
--- a/src/Wordify/Rules/Pos/Internal.hs
+++ b/src/Wordify/Rules/Pos/Internal.hs
