move generic visit() stuff together with __call__