I figured this out talking to the Firefox team. It is a bug in Gecko (fixed in FF2.0), and can be resolved by keeping a reference to all event functions, and calling removeEventListener on "unload"