Add visitor pattern to model. Move models to dedicated package