updated: first complete version
Reorganized, added EECS 336