Finish implementing operations, broke into separate modules
untested