Well, we're in the process of doing your third item, at least--making it two-phase. Bill Bob Ippolito <bob@redivi.com> wrote: In my heapq implementation of a similar timer mechanism (outside of Twisted), I did three things that twisted doesn't: - cancelling a timer doesn't try and remove it from the heapq, instead it just marks the timer as dead. - the time when it's supposed to fire is passed to the fire method so that the timer can determine whether it's supposed to actually fire or not (in the case of a time change it is actually added to the queue a second time without being removed so that I don't have to disrupt the heapq). - it's two phase.. I have a list of newly added timers, and a heapq of waiting-to-fire timers. At the end of the iteration I shove the list into the heapq and clear the list. This prevents infinite callLater(0, ...) situations. -bob Yahoo! India Matrimony: Find your partner online.