Polymorphic constructor