Add descriptive errors.
Initial import.
Add implements_protocol.
Simplify.
Implement protocol methods.
Initial structure.