Visitor pattern.
Visitor pattern.