may be overkill, but for now all public API calls should be strictly serialized as grouped/atomic operations to avoid race conditions