more flexible constructors