pattern visiteur + fixed control (dumb jun is derp)