Completed project. TODO: complete integration tests