added another way to implement Visitor, e.g. Visitor2