                 board[move.end] = promotion ?? .Queen(color)
                 _moveHistory.append((move, piece, capture))
             } else {
-                fallthrough
-            }
-        case .King:
-            if piece.color.isWhite {
+                execute(board.removePieceAt(move.end))
+            }
+        case .King(let color):
+            if color.isWhite {
                 whiteKingHasMoved = true
             } else {
                 blackKingHasMoved = true

                board.swap((oldRookFile, rank), (newRookFile, rank))
                execute()
            } else {
                fallthrough
            }
        case .Rook:
            switch move.start {

            default:
                break
            }
            execute(board.removePieceAt(move.end))
        default:
            execute(board.removePieceAt(move.end))
        }
