fine grain locking instead of @Delegate