GPII-672: Tests passing, most functionality implemented, needs cleaning up