added comments and redid some code to understand simngle object responsibility