Most of this code was developed by students, it requires some additional review to be used for teaching.