#4137 Restructure to DI

Do not push until compiling
#4137 Restructure to DI
#4137 Restructure to DI