Added abstraction and DIC