factory method improvements