try to use factory model