First functional version using Facade abstraction