Adding a lot more documentation