visitors should be shared

* extract visitor
* share visitor