does this (and some of the following functions) require CriticalBlock b(lock)?