public boolean move(String from, String to){
        Piece piece = getPieceAt(from);
        if(piece == null || piece.getOwner() != getCurrentPlayer()){
            return false;
        }

        Position pt = new Position(to);
        if(!pt.onBoard()){
            return false;
        }

        Position pf = new Position(from);

        if(!availableMoves.containsKey(pf) || !availableMoves.get(pf).contains(pt)){
            return false;
        }

        movePiece(piece, pf, pt);
        prepareAvailableMoves(positionToPieceMap, availableMoves);
        switchPlayer();
        return true;
    }