move to factory trait