Improve on semantics and API