Having fun with visitor pattern and its many variants.