Since we should avoid reusing third party code, I have rewritten this. Since callbacks can be completed out of order, a doubly linked list is ideal for adding and removing. If the client guarantees ordering of callbacks even for failed inserts, a singly linked list would be better.