     /// Thrown by the `execute(move:promotion:)` method for a `Game` instance.
     public enum ExecutionError: ErrorType {
 
+        /// Missing piece at a square.
+        case MissingPiece(Square)
+
         /// Attempted illegal move.
         case IllegalMove(Move, Color, Board)
 


    /// Executes a move without checking the legality of the move.
    private func _execute(uncheckedMove move: Move, @noescape promotion: () -> Piece.Kind) throws {
        let piece = board[move.start]!
        var endPiece = piece
        var capture = board[move.end]
        var captureSquare = move.end

        /// The error message.
        public var message: String {
            switch self {
            case let .MissingPiece(square):
                return "Missing piece: \(square)"
            case let .IllegalMove(move, color, board):
                return "Illegal move: \(move) for \(color) on \(board)"
            case let .InvalidPromotion(pieceKind):
