initial visitor implementation