modify: keep API clean, hide internals