Implementation almost done, not many tests