At the moment there are too many permulations of factory methods and constructor. This request is to reduce the number of factory methods and constructors and use setters to replace them