Added much better documentation