adds more structure, better dependency handling