better vsisitor implementation