Added Visitor design pattern