Fully implemented, including unit tests, less func tests