Everything written, but not tested. Testing will be run from the simplest function