abstract factories for models