shift to factory method for constructing an instance