I've been looking at your modifications to DtmfTransformEngine and I'm not sure I agree with the removal of DTMFDispatcher. You see there is quite a difference between (now) firing an event in the thread which processes RTP and (before) firing the event in a separate, dedicated thread. Please note that if a DTMFListener takes a long time to process a DTMF event, it will now delay the processing of RTP (which is most often not what you would want to do). Is there a reason why DTMF events have to be synchronously delivered to DTMFListeners? If there is none, I'd rather have the asynchronous delivery that we had before.