introduce model factory