add lots of comments to help explain