Implemented new interface - untested.
Changed exception type, cleanup.