Added extra convenience constructors, and allowed changes of type by subclasses