Comply to the visitor pattern
more TODO