Ahhh... gmail pre-emptive send strikes again.... To continue... I am curious about the recursive calls to ZdcSecureSocketStream(ZdcSimpleSocketStream)>>fillReadBuffer and multiple accumulations from DelayExperimentalSpinScheduler>>unschedule: but that method doesn't really do a lot. I wouldn't expect the whileTrue loop to be spinning much, but you could examine that by trying something like... Object subclass: #SpinCount instanceVariableNames: 'counter' classVariableNames: '' package: 'Play' SpinCount>>initialize counter := 0. SpinCount>>count counter := counter + 1. SpinCount>>printOn: aStream super printOn: aStream. aStream nextPut: $=. counter printOn: aStream. DelayMicrosecondScheduler subclass: #DelayExperimentalSpinScheduler instanceVariableNames: '' classVariableNames: 'Tally' package: 'Kernel-Processes' DelayExperimentalSpinScheduler class >> startTally Tally := WaitfreeQueue new. DelayExperimentalSpinScheduler class >> endTally |result finalTally| finalTally := Tally. Tally := nil. result := OrderedCollection new. finalTally flush: [ :item | result add: item ]. ^ result DelayExperimentalSpinScheduler >> unschedule: aDelay |spinCount| "self startTally" "self endTally inspect" spinCount := SpinCount new. Tally ifNotNil: [Tally nextPut: spinCount]. aDelay schedulerBeingWaitedOn ifTrue: [^self error: 'This Delay has already been scheduled.']. [ Tally ifNotNil: [spinCount count]. scheduledDelay == nil ifTrue: [ scheduledDelay := aDelay. timingSemaphore signal. ^self]. true. ] whileTrue. Actually, I wonder does the "timingSemaphore signal" invoking the priority 80 DelaySchedulingProcess to wake up and run above the priority of the profiler? So all of that activity gets attributed to #unschedule: ??? cheers -ben