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

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

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