go through the trouble making the whole program data driven