Index: lib/requestBlocker.js
===================================================================
--- a/lib/requestBlocker.js
+++ b/lib/requestBlocker.js
@@ -19,7 +19,8 @@
 
 "use strict";
 
-let {RegExpFilter, BlockingFilter} = require("filterClasses");
+let {Filter, RegExpFilter, BlockingFilter} = require("filterClasses");
+let {Subscription} = require("subscriptionClasses");
 let {defaultMatcher} = require("matcher");
 let {FilterNotifier} = require("filterNotifier");
 let {Prefs} = require("prefs");
@@ -39,7 +40,7 @@
                               specificOnly, filter)
 {
   if (filter)
-    FilterNotifier.triggerListeners("filter.hitCount", filter, 0, 0, page);
+    FilterNotifier.emit("filter.hitCount", filter, 0, 0, page);
 
   if (devtools)
     devtools.logRequest(
@@ -113,56 +114,43 @@
 });
 
 let ignoreFilterNotifications = false;
-FilterNotifier.addListener((action, arg) =>
+
+function onFilterChange(arg, isDisabledAction)
 {
   // Avoid triggering filters.behaviorChanged multiple times
   // when multiple filter hanges happen at the same time.
   if (ignoreFilterNotifications)
     return;
 
-  if (action != "load")
-  {
-    let parts = action.split(".");
-    let [category, event] = parts;
-    if (category == "subscription")
-    {
-      if (event != "added"  &&
-          event != "removed" &&
-          event != "updated" &&
-          event != "disabled")
-        return;
+  // Ignore disabled subscriptions and filters, unless they just got
+  // disabled, otherwise they have no effect on the handler behavior.
+  if (arg && arg.disabled && !isDisabledAction)
+    return;
 
-      // Ignore empty subscriptions. This includes subscriptions
-      // that have just been added, but not downloaded yet.
-      if (arg.filters.length == 0)
-        return;
-    }
-    else if (category == "filter")
-    {
-      if (event != "added" &&
-          event != "removed" &&
-          event != "disabled")
-        return;
+  // Ignore empty subscriptions. This includes subscriptions
+  // that have just been added, but not downloaded yet.
+  if (arg instanceof Subscription && arg.filters.length == 0)
+    return;
 
-      // Ignore all types of filters but request filters,
-      // only these have an effect on the handler behavior.
-      if (!(arg instanceof RegExpFilter))
-        return;
-    }
-    else
-      return;
-
-    // Ignore disabled subscriptions and filters, unless they just got
-    // disabled, otherwise they have no effect on the handler behavior.
-    if (arg.disabled && event != "disabled")
-      return;
-  }
+  // Ignore all types of filters but request filters,
+  // only these have an effect on the handler behavior.
+  if (arg instanceof Filter && !(arg instanceof RegExpFilter))
+    return;
 
   ignoreFilterNotifications = true;
   setTimeout(() =>
   {
     ignoreFilterNotifications = false;
     ext.webRequest.handlerBehaviorChanged();
-    FilterNotifier.triggerListeners("filter.behaviorChanged");
+    FilterNotifier.emit("filter.behaviorChanged");
   });
-});
+}
+
+FilterNotifier.on("subscription.added", onFilterChange)
+FilterNotifier.on("subscription.removed", onFilterChange);
+FilterNotifier.on("subscription.updated", onFilterChange);
+FilterNotifier.on("subscription.disabled", arg => onFilterChange(arg, true));
+FilterNotifier.on("filter.added", onFilterChange);
+FilterNotifier.on("filter.removed", onFilterChange);
+FilterNotifier.on("filter.disabled", arg => onFilterChange(arg, true));
+FilterNotifier.on("load", onFilterChange);
