visitor with more functions