I think there are two ways to fix the main problem discussed here. 1. Change inotify.c and make it return/receive a unique descriptor per client. 2. Wrap inotify's descriptor inside file-notify-add-watch, similar to how it's currently done. This is what I was refering to as boxing/unboxing earlier. The 2nd approach is problematic in the context of file-name-handler, so I attempted to solve it the other way: Instead of a single number, use a cons of (INOTIFY-DESCRIPTOR . ID) , which is unique across all active watches. I.e. this makes inotify work like all the other back-ends/handler. Here is a first draft of a corresponding patch, let me know what you think.