lots of comments/documentation