a more comprehensive class structure for the project