working on dependency inversion