First complete version. Untested.