Companion object constructor