added some high-level documentation