Untested but mostly all implemented.