visitor pattern draft has been completed