Ok. I wrote MutextTests which show problems. See in attachment.��Attached Mutex.st contains fix which suggest Ben for his scenario. But it broke other scenario.��Mutex>>critical: aBlock"Evaluate aBlock protected by the receiver."| activeProcess signalRequired blockValue |activeProcess := Processor activeProcess.activeProcess == owner ifTrue:[^aBlock value].signalRequired := false.[signalRequired := true.semaphore wait.owner:= activeProcess.blockValue := aBlock value] ensure: [signalRequired & (owner == activeProcess) ifTrue: [owner := nil. semaphore signal]].^blockValueMy idea of ifCurtailed: usage not helps too. But if you change MutexTest to use Semaphore instead of Mutex then all tests will be green.