decoupling the code