clearer pattern for avoiding deadlock on circular dependency