Refractor Visitor Pattern