Finsihed refactoring with options for constructors