refactoring to support the fluent HasA approach