added A LOT of comments