Feature complete midterm. Possible final submission if no bugs turn up