| Index: lib/contentPolicy.js | 
| diff --git a/lib/contentPolicy.js b/lib/contentPolicy.js | 
| index b0498da6ec3bf66b35e35d8d8114e99ad3477707..eaef9b016156797948a5b3b3f812f4fe8f6d9591 100644 | 
| --- a/lib/contentPolicy.js | 
| +++ b/lib/contentPolicy.js | 
| @@ -162,6 +162,8 @@ let Policy = exports.Policy = | 
| let docDomain = getHostname(wndLocation); | 
| let match = null; | 
| let [sitekey, sitekeyWnd] = getSitekey(wnd); | 
| +    let nogeneric = false; | 
| + | 
| if (!match && Prefs.enabled) | 
| { | 
| let testWnd = wnd; | 
| @@ -181,6 +183,23 @@ let Policy = exports.Policy = | 
| return true; | 
| } | 
|  | 
| +        let genericType = (contentType == Policy.type.ELEMHIDE ? | 
| +                           RegExpFilter.typeMap.GENERICHIDE : | 
| +                           RegExpFilter.typeMap.GENERICBLOCK); | 
| +        let parentDocDomain = getHostname(parentWndLocation); | 
| +        let nogenericMatch = defaultMatcher.matchesAny( | 
| +          testWndLocation, genericType, parentDocDomain, false, testSitekey | 
| +        ); | 
| +        if (nogenericMatch instanceof WhitelistFilter) | 
| +        { | 
| +          nogeneric = true; | 
| + | 
| +          FilterStorage.increaseHitCount(nogenericMatch, wnd); | 
| +          RequestNotifier.addNodeData(testWnd.document, topWnd, contentType, | 
| +                                      parentDocDomain, false, testWndLocation, | 
| +                                      nogenericMatch); | 
| +        } | 
| + | 
| if (testWnd.parent == testWnd) | 
| break; | 
|  | 
| @@ -236,13 +255,17 @@ let Policy = exports.Policy = | 
| RequestNotifier.addNodeData(node, topWnd, contentType, docDomain, false, locationText, exception); | 
| return true; | 
| } | 
| + | 
| +      if (nogeneric && match.isGeneric()) | 
| +        return true; | 
| } | 
|  | 
| let thirdParty = (contentType == Policy.type.ELEMHIDE ? false : isThirdParty(location, docDomain)); | 
|  | 
| if (!match && Prefs.enabled && contentType in Policy.typeMask) | 
| { | 
| -      match = defaultMatcher.matchesAny(locationText, Policy.typeMask[contentType], docDomain, thirdParty, sitekey); | 
| +      match = defaultMatcher.matchesAny(locationText, Policy.typeMask[contentType], | 
| +                                        docDomain, thirdParty, sitekey, nogeneric); | 
| if (match instanceof BlockingFilter && node.ownerDocument && !(contentType in Policy.nonVisual)) | 
| { | 
| let prefCollapse = (match.collapse != null ? match.collapse : !Prefs.fastcollapse); | 
|  |