safer constructors