factory pattern
object factory methods
object factory update