added IVisitor interface