distributed various components into separate header files (imporatant)