add visitor implementation