added comments that explain the purpose of each class