refactored di