added many comments