Further decoupling with IoC