tq calls the wrong callback in the some situations. The function tq-process-buffer contains the following snippet. (unwind-protect (condition-case nil (funcall (tq-queue-head-fn tq) (tq-queue-head-closure tq) answer) (error nil)) (tq-queue-pop tq)) tq-queue-pop removes the top question and sends the next one. But here a problem occurs, if the callback function adds another question, sends it and waits for it's result. Because this invokes tq-process-buffer recursively with the first question still at top. Resulting in the callback to the first question called a second time, third time ... . Here is a lisp file which should demonstrate this.