Add visitor model and tests