added a lot of stuff and explanations