I added alot of comments, but each method is not commented yet