change dependency semantics to avoid chained locking