Hand mostly implmenented and tested. Currently throwing exceptions that need to be investigated.