Visitor pattern implementation: draft