better code structure
new visitor
new visitor
better code structure
new visitor refactor