Broke apart some of the interfaces and mapped to ioc container
refactored a bit
added few things