| Index: lib/filterClasses.js | 
| diff --git a/lib/filterClasses.js b/lib/filterClasses.js | 
| index 417e4d8df3cc13fdd4daa0d6ac14489ad73b92cb..21db77c85832ec19368cadb5dabcbfe1b1800425 100644 | 
| --- a/lib/filterClasses.js | 
| +++ b/lib/filterClasses.js | 
| @@ -359,7 +359,7 @@ ActiveFilter.prototype = extend(Filter, { | 
| /** | 
| * Map containing domains that this filter should match on/not match | 
| * on or null if the filter should match on all domains | 
| - * @type {Object} | 
| + * @type {?Map.<string,boolean>} | 
| */ | 
| get domains() | 
| { | 
| @@ -383,11 +383,9 @@ ActiveFilter.prototype = extend(Filter, { | 
| if (list.length == 1 && list[0][0] != "~") | 
| { | 
| // Fast track for the common one-domain scenario | 
| - domains = Object.create(null); | 
| - domains[""] = false; | 
| if (this.ignoreTrailingDot) | 
| list[0] = list[0].replace(/\.+$/, ""); | 
| - domains[list[0]] = true; | 
| + domains = new Map([["", false], [list[0], true]]); | 
| } | 
| else | 
| { | 
| @@ -413,12 +411,12 @@ ActiveFilter.prototype = extend(Filter, { | 
| } | 
| if (!domains) | 
| - domains = Object.create(null); | 
| + domains = new Map(); | 
| - domains[domain] = include; | 
| + domains.set(domain, include); | 
| } | 
| if (domains) | 
| - domains[""] = !hasIncludes; | 
| + domains.set("", !hasIncludes); | 
| } | 
| this.domainSource = null; | 
| @@ -458,7 +456,7 @@ ActiveFilter.prototype = extend(Filter, { | 
| // If the document has no host name, match only if the filter | 
| // isn't restricted to specific domains | 
| if (!docDomain) | 
| - return this.domains[""]; | 
| + return this.domains.get(""); | 
| if (this.ignoreTrailingDot) | 
| docDomain = docDomain.replace(/\.+$/, ""); | 
| @@ -466,15 +464,16 @@ ActiveFilter.prototype = extend(Filter, { | 
| while (true) | 
| { | 
| - if (docDomain in this.domains) | 
| - return this.domains[docDomain]; | 
| + let isDomainIncluded = this.domains.get(docDomain); | 
| + if (typeof isDomainIncluded != "undefined") | 
| + return isDomainIncluded; | 
| let nextDot = docDomain.indexOf("."); | 
| if (nextDot < 0) | 
| break; | 
| docDomain = docDomain.substr(nextDot + 1); | 
| } | 
| - return this.domains[""]; | 
| + return this.domains.get(""); | 
| }, | 
| /** | 
| @@ -484,16 +483,16 @@ ActiveFilter.prototype = extend(Filter, { | 
| */ | 
| isActiveOnlyOnDomain(docDomain) | 
| { | 
| - if (!docDomain || !this.domains || this.domains[""]) | 
| + if (!docDomain || !this.domains || this.domains.get("")) | 
| return false; | 
| if (this.ignoreTrailingDot) | 
| docDomain = docDomain.replace(/\.+$/, ""); | 
| docDomain = docDomain.toUpperCase(); | 
| - for (let domain in this.domains) | 
| + for (let [domain, isIncluded] of this.domains) | 
| { | 
| - if (this.domains[domain] && domain != docDomain) | 
| + if (isIncluded && domain != docDomain) | 
| { | 
| if (domain.length <= docDomain.length) | 
| return false; | 
| @@ -513,7 +512,7 @@ ActiveFilter.prototype = extend(Filter, { | 
| isGeneric() | 
| { | 
| return !(this.sitekeys && this.sitekeys.length) && | 
| - (!this.domains || this.domains[""]); | 
| + (!this.domains || this.domains.get("")); | 
| }, | 
| /** |