nearly final -- still needs cleanup & more descriptions