organizate classes, and add documentation