Index: lib/devtools.js
===================================================================
--- a/lib/devtools.js
+++ b/lib/devtools.js
@@ -17,17 +17,17 @@
 
 "use strict";
 
 const {RegExpFilter,
        WhitelistFilter,
        ElemHideFilter} = require("../adblockpluscore/lib/filterClasses");
 const {SpecialSubscription} =
   require("../adblockpluscore/lib/subscriptionClasses");
-const {FilterStorage} = require("../adblockpluscore/lib/filterStorage");
+const {filterStorage} = require("../adblockpluscore/lib/filterStorage");
 const {defaultMatcher} = require("../adblockpluscore/lib/matcher");
 const {filterNotifier} = require("../adblockpluscore/lib/filterNotifier");
 const {extractHostFromFrame} = require("./url");
 const {port} = require("./messaging");
 const {HitLogger, nonRequestTypes} = require("./hitLogger");
 
 let panels = new Map();
 
@@ -152,18 +152,22 @@
   {
     browser.tabs.reload(tabId, {bypassCache: true});
 
     panel.reload = false;
     panel.reloading = true;
   }
 }
 
-function updateFilters(filters, added)
+function updateFilters(subscription, filters, added)
 {
+  let includes = subscription ?
+                   filter => filter && subscription.searchfilter(filter) != -1 :
+                   filters.includes.bind(filters);
+
   for (let panel of panels.values())
   {
     for (let i = 0; i < panel.records.length; i++)
     {
       let record = panel.records[i];
 
       // If an added filter matches a request shown in the devtools panel,
       // update that record to show the new filter. Ignore filters that aren't
@@ -171,30 +175,31 @@
       // if they don't already match. In particular, in case of element hiding
       // filters, we also wouldn't know if any new element matches.
       if (added)
       {
         if (nonRequestTypes.includes(record.request.type))
           continue;
 
         let filter = matchRequest(record.request);
-        if (!filters.includes(filter))
+
+        if (!includes(filter))
           continue;
 
         record.filter = filter;
       }
 
       // If a filter shown in the devtools panel got removed, update that
       // record to show the filter that matches now, or none, instead.
       // For filters that aren't associated with any sub-resource request,
       // just remove the record. We wouldn't know whether another filter
       // matches instead until the page is reloaded.
       else
       {
-        if (!filters.includes(record.filter))
+        if (!includes(record.filter))
           continue;
 
         if (nonRequestTypes.includes(record.request.type))
         {
           panel.port.postMessage({
             type: "remove-record",
             index: i
           });
@@ -212,28 +217,28 @@
         filter: getFilterInfo(record.filter)
       });
     }
   }
 }
 
 function onFilterAdded(filter)
 {
-  updateFilters([filter], true);
+  updateFilters(null, [filter], true);
 }
 
 function onFilterRemoved(filter)
 {
-  updateFilters([filter], false);
+  updateFilters(null, [filter], false);
 }
 
 function onSubscriptionAdded(subscription)
 {
   if (subscription instanceof SpecialSubscription)
-    updateFilters(subscription.filters, true);
+    updateFilters(subscription, null, true);
 }
 
 browser.runtime.onConnect.addListener(newPort =>
 {
   let match = newPort.name.match(/^devtools-(\d+)$/);
   if (!match)
     return;
 
