Inline: use visitor pattern
Inline: cleanup: pass all tests