visitor_factory first verison complete