Implement a lot of the remaining "core" functions