modify visitor pattern