Refactor with safe constructors