Fixed some documentation, added some diagrams, provided a non internal constructor for easier management.