             return nil
         }
         if let promotion = promotion {
-            try! _execute(move, promotion: { promotion })
+            try! _execute(uncheckedMove: move, promotion: { promotion })
         } else {
-            try! _execute(move)
+            try! _execute(uncheckedMove: move)
         }
         attackersToKing = attackers
         return move

    }

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

        guard isLegal(move: move) else {
            throw ExecutionError.IllegalMove(move, playerTurn, board)
        }
        try _execute(uncheckedMove: move, promotion: promotion)
        if kingIsChecked {
            attackersToKing = 0
        } else {
