Restructured the code into separate separate packages