diff --git a/.eslintrc b/.eslintrc
index 5765e85fb1a46c5dc042a2994845e04e4a2be582..602bd6469668500f166537e84693d3b9ae044656 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -8,10 +8,12 @@
   "globals": {
     "Address": true,
     "files": true,
+    "Header": true,
     "helpers": true,
     "interceptor": true,
     "mappings": true,
     "requestAnalyzer": true,
+    "requestSanitizer": true,
     "Resource": true,
     "resources": true,
     "Setting": true,
diff --git a/_locales/cs_CZ/messages.json b/_locales/cs_CZ/messages.json
new file mode 100644
index 0000000000000000000000000000000000000000..4c246ea135ec2e66170d600192764cf40e409391
--- /dev/null
+++ b/_locales/cs_CZ/messages.json
@@ -0,0 +1,70 @@
+{
+  "extensionDescription": {
+    "message": "Ochrání vás přes sledováním skrze centralizované doručování obsahu.",
+    "description": "Extension description."
+  },
+  "disableProtectionTitle": {
+    "message": "Zakázat ochranu na této stránce",
+    "description": "Disable protection title."
+  },
+  "enableProtectionTitle": {
+    "message": "Zapnout ochranu",
+    "description": "Enable protection title."
+  },
+  "amountInjectedTitle": {
+    "message": "Počítadlo vložených lokálních zdrojů",
+    "description": "Amount injected title."
+  },
+  "amountInjectedDescription": {
+    "message": "Počet lokální uložených zdrojů vložených od instalace.",
+    "description": "Amount injected description."
+  },
+  "optionsTitle": {
+    "message": "Možnosti",
+    "description": "Options title."
+  },
+  "showIconBadgeTitle": {
+    "message": "Zobrazovat počet vložení u ikony",
+    "description": "Show icon badge title."
+  },
+  "showIconBadgeDescription": {
+    "message": "Zobrazit počet vložených zdrojů u ikony rozšíření.",
+    "description": "Show icon badge description."
+  },
+  "blockMissingTitle": {
+    "message": "Blokovat požadavky na chybějící zdroje",
+    "description": "Block requests for missing resources title."
+  },
+  "blockMissingDescription": {
+    "message": "Zrušit požadavky na sledované zdroje, pokud nejsou lokálně dostupné.",
+    "description": "Block requests for missing resources description."
+  },
+  "disablePrefetchTitle": {
+    "message": "Zakázat přednačítání odkazů",
+    "description": "Disable prefetch title."
+  },
+  "disablePrefetchDescription": {
+    "message": "Předejte nepovoleným požadavkům do sítí pro doručování obsahu.",
+    "description": "Disable prefetch description."
+  },
+  "stripMetadataTitle": {
+    "message": "Odstranit metadata z povolených požadavků",
+    "description": "Strip metadata title."
+  },
+  "stripMetadataDescription": {
+    "message": "Pro zlepšení soukromí odstraní citlivá data z povolených požadavků na CDN.",
+    "description": "Strip metadata description."
+  },
+  "whitelistedDomainsTitle": {
+    "message": "Nekontrolovat pro domény",
+    "description": "Whitelisted domains title."
+  },
+  "whitelistedDomainsDescription": {
+    "message": "Zadejte domény pro jejich vynechání z kontroly. Jednotlivé domény oddělujte pomocí středníků (;).",
+    "description": "Whitelisted domains description."
+  },
+  "advancedLabel": {
+    "message": "Rozšířené",
+    "description": "Advanced label."
+  }
+}
\ No newline at end of file
diff --git a/_locales/pt_PT/messages.json b/_locales/pt_PT/messages.json
index 9046c8dc5a66887c51b51ec8ca9bb94eb6a02cf7..3cac744cbae69998db78c400ce62ff1775cd1c1c 100644
--- a/_locales/pt_PT/messages.json
+++ b/_locales/pt_PT/messages.json
@@ -1,70 +1,70 @@
 {
-  "extensionDescription":{
-    "message":"Protege contra monitorização através de entrega de conteúdo centralizado.",
-    "description":"Extension description."
+  "extensionDescription": {
+    "message": "Protege contra monitorização através de entrega de conteúdo centralizado.",
+    "description": "Extension description."
   },
-  "disableProtectionTitle":{
-    "message":"Desativar proteção para este site",
-    "description":"Disable protection title."
+  "disableProtectionTitle": {
+    "message": "Desativar proteção para este site",
+    "description": "Disable protection title."
   },
-  "enableProtectionTitle":{
-    "message":"Ativar proteção",
-    "description":"Enable protection title."
+  "enableProtectionTitle": {
+    "message": "Ativar proteção",
+    "description": "Enable protection title."
   },
-  "amountInjectedTitle":{
-    "message":"Contador para recursos injetados localmente",
-    "description":"Amount injected title."
+  "amountInjectedTitle": {
+    "message": "Contador para recursos injetados localmente",
+    "description": "Amount injected title."
   },
-  "amountInjectedDescription":{
-    "message":"Quantidade de injeções de recurso Content Delivery Network locais desde a instalação.",
-    "description":"Amount injected description."
+  "amountInjectedDescription": {
+    "message": "Quantidade de injeções de recurso Content Delivery Network locais desde a instalação.",
+    "description": "Amount injected description."
   },
-  "optionsTitle":{
-    "message":"Opções",
-    "description":"Options title."
+  "optionsTitle": {
+    "message": "Opções",
+    "description": "Options title."
   },
-  "showIconBadgeTitle":{
-    "message":"Mostrar contagem de injeções no ícone",
-    "description":"Show icon badge title."
+  "showIconBadgeTitle": {
+    "message": "Mostrar contagem de injeções no ícone",
+    "description": "Show icon badge title."
   },
-  "showIconBadgeDescription":{
-    "message":"Mostrar o número de recursos injetados no ícone da extensão.",
-    "description":"Show icon badge description."
+  "showIconBadgeDescription": {
+    "message": "Mostrar o número de recursos injetados no ícone da extensão.",
+    "description": "Show icon badge description."
   },
-  "blockMissingTitle":{
-    "message":"Bloquear pedidos por falta de recursos",
-    "description":"Block requests for missing resources title."
+  "blockMissingTitle": {
+    "message": "Bloquear pedidos por falta de recursos",
+    "description": "Block requests for missing resources title."
   },
-  "blockMissingDescription":{
-    "message":"Cancelar pedido intercetado se o recurso necessário não estiver disponível localmente.",
-    "description":"Block requests for missing resources description."
+  "blockMissingDescription": {
+    "message": "Cancelar pedido intercetado se o recurso necessário não estiver disponível localmente.",
+    "description": "Block requests for missing resources description."
   },
-  "disablePrefetchTitle":{
-    "message":"Desativar pré-obtenção de ligações",
-    "description":"Disable prefetch title."
+  "disablePrefetchTitle": {
+    "message": "Desativar pré-obtenção de ligações",
+    "description": "Disable prefetch title."
   },
-  "disablePrefetchDescription":{
-    "message":"Impedir recursos não permitidos de vazar para as redes de entrega.",
-    "description":"Disable prefetch description."
+  "disablePrefetchDescription": {
+    "message": "Impedir recursos não permitidos de vazar para as redes de entrega.",
+    "description": "Disable prefetch description."
   },
-  "stripMetadataTitle":{
-    "message":"Retirar metadados dos pedidos permitidos",
-    "description":"Strip metadata title."
+  "stripMetadataTitle": {
+    "message": "Retirar metadados dos pedidos permitidos",
+    "description": "Strip metadata title."
   },
-  "stripMetadataDescription":{
-    "message":"Limpar dados sensíveis de recursos CDN permitidos para melhoria de privacidade.",
-    "description":"Strip metadata description."
+  "stripMetadataDescription": {
+    "message": "Limpar dados sensíveis de recursos CDN permitidos para melhoria de privacidade.",
+    "description": "Strip metadata description."
   },
-  "whitelistedDomainsTitle":{
-    "message":"Excluir domínios de inspeções",
-    "description":"Whitelisted domains title."
+  "whitelistedDomainsTitle": {
+    "message": "Excluir domínios de inspeções",
+    "description": "Whitelisted domains title."
   },
-  "whitelistedDomainsDescription":{
-    "message":"Insira domínios para os colocar na lista branca. Separe múltiplas entradas com pontos e vírgulas (;).",
-    "description":"Whitelisted domains description."
+  "whitelistedDomainsDescription": {
+    "message": "Insira domínios para os colocar na lista branca. Separe múltiplas entradas com pontos e vírgulas (;).",
+    "description": "Whitelisted domains description."
   },
-  "advancedLabel":{
-    "message":"Avançado",
-    "description":"Advanced label."
+  "advancedLabel": {
+    "message": "Avançado",
+    "description": "Advanced label."
   }
 }
\ No newline at end of file
diff --git a/_locales/ro/messages.json b/_locales/ro/messages.json
index 4022e9685a0619d256f5c5a2e8f7befef0d2064a..8fc6af96880940b1e3c85fd62809147d6489df70 100644
--- a/_locales/ro/messages.json
+++ b/_locales/ro/messages.json
@@ -1,70 +1,70 @@
 {
-  "extensionDescription":{
-    "message":"Te protejează împotriva urmăririi prin livrare \"gratuită\" de conținut centralizat.",
-    "description":"Extension description."
+  "extensionDescription": {
+    "message": "Te protejează împotriva urmăririi prin livrare \"gratuită\" de conținut centralizat.",
+    "description": "Extension description."
   },
-  "disableProtectionTitle":{
-    "message":"Dezactivează protecția pentru acest site",
-    "description":"Disable protection title."
+  "disableProtectionTitle": {
+    "message": "Dezactivează protecția pentru acest site",
+    "description": "Disable protection title."
   },
-  "enableProtectionTitle":{
-    "message":"Activează protecția",
-    "description":"Enable protection title."
+  "enableProtectionTitle": {
+    "message": "Activează protecția",
+    "description": "Enable protection title."
   },
-  "amountInjectedTitle":{
-    "message":"Contor pentru resursele injectate local",
-    "description":"Amount injected title."
+  "amountInjectedTitle": {
+    "message": "Contor pentru resursele injectate local",
+    "description": "Amount injected title."
   },
-  "amountInjectedDescription":{
-    "message":"Cantitatea de resurse locale injectate de Rețelele care Livrează Conținut din momentul instalării.",
-    "description":"Amount injected description."
+  "amountInjectedDescription": {
+    "message": "Cantitatea de resurse locale injectate de Rețelele care Livrează Conținut din momentul instalării.",
+    "description": "Amount injected description."
   },
-  "optionsTitle":{
-    "message":"Opțiuni",
-    "description":"Options title."
+  "optionsTitle": {
+    "message": "Opțiuni",
+    "description": "Options title."
   },
-  "showIconBadgeTitle":{
-    "message":"Afișează numărul de dependențe înlocuite pe iconiță",
-    "description":"Show icon badge title."
+  "showIconBadgeTitle": {
+    "message": "Afișează numărul de dependențe înlocuite pe iconiță",
+    "description": "Show icon badge title."
   },
-  "showIconBadgeDescription":{
-    "message":"Afișează numărul de resurse înlocuite pe iconița extensiei.",
-    "description":"Show icon badge description."
+  "showIconBadgeDescription": {
+    "message": "Afișează numărul de resurse înlocuite pe iconița extensiei.",
+    "description": "Show icon badge description."
   },
-  "blockMissingTitle":{
-    "message":"Blochează cererile pentru resursele care lipsesc",
-    "description":"Block requests for missing resources title."
+  "blockMissingTitle": {
+    "message": "Blochează cererile pentru resursele care lipsesc",
+    "description": "Block requests for missing resources title."
   },
-  "blockMissingDescription":{
-    "message":"Anulează cererile interceptate dacă resursa solicitată nu este disponibilă local.",
-    "description":"Block requests for missing resources description."
+  "blockMissingDescription": {
+    "message": "Anulează cererile interceptate dacă resursa solicitată nu este disponibilă local.",
+    "description": "Block requests for missing resources description."
   },
-  "disablePrefetchTitle":{
-    "message":"Dezactivează pre-încărcarea de linkuri",
-    "description":"Disable prefetch title."
+  "disablePrefetchTitle": {
+    "message": "Dezactivează pre-încărcarea de linkuri",
+    "description": "Disable prefetch title."
   },
-  "disablePrefetchDescription":{
-    "message":"Previne scurgerea request-uri nepermise către rețele de livrare.",
-    "description":"Disable prefetch description."
+  "disablePrefetchDescription": {
+    "message": "Previne scurgerea request-uri nepermise către rețele de livrare.",
+    "description": "Disable prefetch description."
   },
-  "stripMetadataTitle":{
-    "message":"Scoate metadatele din requesturi permise",
-    "description":"Strip metadata title."
+  "stripMetadataTitle": {
+    "message": "Scoate metadatele din requesturi permise",
+    "description": "Strip metadata title."
   },
-  "stripMetadataDescription":{
-    "message":"Șterge date sensibile din requesturi permise pentru îmbunătățirea confidențialității.",
-    "description":"Strip metadata description."
+  "stripMetadataDescription": {
+    "message": "Șterge date sensibile din requesturi permise pentru îmbunătățirea confidențialității.",
+    "description": "Strip metadata description."
   },
-  "whitelistedDomainsTitle":{
-    "message":"Exclude domeniile următoare de la inspecții",
-    "description":"Whitelisted domains title."
+  "whitelistedDomainsTitle": {
+    "message": "Exclude domeniile următoare de la inspecții",
+    "description": "Whitelisted domains title."
   },
-  "whitelistedDomainsDescription":{
-    "message":"Introduceți domeniile dorite în lista albă. Separați intrările multiple între ele prin punct și virgulă (;).",
-    "description":"Whitelisted domains description."
+  "whitelistedDomainsDescription": {
+    "message": "Introduceți domeniile dorite în lista albă. Separați intrările multiple între ele prin punct și virgulă (;).",
+    "description": "Whitelisted domains description."
   },
-  "advancedLabel":{
-    "message":"Avansat",
-    "description":"Advanced label."
+  "advancedLabel": {
+    "message": "Avansat",
+    "description": "Advanced label."
   }
 }
\ No newline at end of file
diff --git a/_locales/sr/messages.json b/_locales/sr/messages.json
index 1248a4e803af4e081d6c286dbeeefc4e0bff4b32..ac5211e49b629e6dab7357b788da99e81287c9e7 100644
--- a/_locales/sr/messages.json
+++ b/_locales/sr/messages.json
@@ -60,7 +60,7 @@
     "description": "Whitelisted domains title."
   },
   "whitelistedDomainsDescription": {
-    "message": "Унесите домене да их ставите на бели списак. Више одвојених ставки са тачка-запетама (;).",
+    "message": "Унесите домене да их ставите на бели списак. Одвојите више ставки са тачка-запетама (;).",
     "description": "Whitelisted domains description."
   },
   "advancedLabel": {
diff --git a/_locales/tr/messages.json b/_locales/tr/messages.json
index 886478342d96487cb50431f6c30c5bc693f692c9..eca8fe218a21e24dcec7fca1d3ee6d34168211b8 100644
--- a/_locales/tr/messages.json
+++ b/_locales/tr/messages.json
@@ -1,70 +1,70 @@
 {
-  "extensionDescription":{
-    "message":"Sizi, \"ücretsiz\", merkezi, içerik dağıtımı aracılığıyla yapılan takipten korur.",
-    "description":"Extension description."
+  "extensionDescription": {
+    "message": "Sizi, \"ücretsiz\", merkezi, içerik dağıtımı aracılığıyla yapılan takipten korur.",
+    "description": "Extension description."
   },
-  "disableProtectionTitle":{
-    "message":"Bu sitede korumayı devre dışı bırak",
-    "description":"Disable protection title."
+  "disableProtectionTitle": {
+    "message": "Bu sitede korumayı devre dışı bırak",
+    "description": "Disable protection title."
   },
-  "enableProtectionTitle":{
-    "message":"Korumayı etkinleştir",
-    "description":"Enable protection title."
+  "enableProtectionTitle": {
+    "message": "Korumayı etkinleştir",
+    "description": "Enable protection title."
   },
-  "amountInjectedTitle":{
-    "message":"Yerel olarak eklenen kaynaklar için sayaç",
-    "description":"Amount injected title."
+  "amountInjectedTitle": {
+    "message": "Yerel olarak eklenen kaynaklar için sayaç",
+    "description": "Amount injected title."
   },
-  "amountInjectedDescription":{
-    "message":"Kurulumdan bu yana yerel İçerik Dağıtım Ağı kaynak eklemelerinin miktarı.",
-    "description":"Amount injected description."
+  "amountInjectedDescription": {
+    "message": "Kurulumdan bu yana yerel İçerik Dağıtım Ağı kaynak eklemelerinin miktarı.",
+    "description": "Amount injected description."
   },
-  "optionsTitle":{
-    "message":"Seçenekler",
-    "description":"Options title."
+  "optionsTitle": {
+    "message": "Seçenekler",
+    "description": "Options title."
   },
-  "showIconBadgeTitle":{
-    "message":"Simgede enjeksiyon sayaçlarını göster",
-    "description":"Show icon badge title."
+  "showIconBadgeTitle": {
+    "message": "Simgede enjeksiyon sayaçlarını göster",
+    "description": "Show icon badge title."
   },
-  "showIconBadgeDescription":{
-    "message":"Enjekte edilen kaynakların sayısını uzantı simgesinde gösterin.",
-    "description":"Show icon badge description."
+  "showIconBadgeDescription": {
+    "message": "Enjekte edilen kaynakların sayısını uzantı simgesinde gösterin.",
+    "description": "Show icon badge description."
   },
-  "blockMissingTitle":{
-    "message":"Eksik kaynaklar için gelen istekleri engelle",
-    "description":"Block requests for missing resources title."
+  "blockMissingTitle": {
+    "message": "Eksik kaynaklar için gelen istekleri engelle",
+    "description": "Block requests for missing resources title."
   },
-  "blockMissingDescription":{
-    "message":"Ä°stenilen kaynak yerel olarak mevcut deÄŸilse, yakalanan isteÄŸi iptal et.",
-    "description":"Block requests for missing resources description."
+  "blockMissingDescription": {
+    "message": "Ä°stenilen kaynak yerel olarak mevcut deÄŸilse, yakalanan isteÄŸi iptal et.",
+    "description": "Block requests for missing resources description."
   },
-  "disablePrefetchTitle":{
-    "message":"Bağlantı önalımını devre dışı bırak",
-    "description":"Disable prefetch title."
+  "disablePrefetchTitle": {
+    "message": "Bağlantı önalımını devre dışı bırak",
+    "description": "Disable prefetch title."
   },
-  "disablePrefetchDescription":{
-    "message":"İzin verilmeyen isteklerin dağıtım ağlarına sızmasını engelleyin.",
-    "description":"Disable prefetch description."
+  "disablePrefetchDescription": {
+    "message": "İzin verilmeyen isteklerin dağıtım ağlarına sızmasını engelleyin.",
+    "description": "Disable prefetch description."
   },
-  "stripMetadataTitle":{
-    "message":"Meta verilerini izin verilen isteklerden ayır",
-    "description":"Strip metadata title."
+  "stripMetadataTitle": {
+    "message": "Meta verilerini izin verilen isteklerden ayır",
+    "description": "Strip metadata title."
   },
-  "stripMetadataDescription":{
-    "message":"İzin verilen CDN isteklerine duyarlı verileri gelişmiş gizlilik için silin.",
-    "description":"Strip metadata description."
+  "stripMetadataDescription": {
+    "message": "İleri düzey gizlilik için, izin verilen CDN isteklerinden hassas verileri sil.",
+    "description": "Strip metadata description."
   },
-  "whitelistedDomainsTitle":{
-    "message":"Alanları denetimlerden hariç tut",
-    "description":"Whitelisted domains title."
+  "whitelistedDomainsTitle": {
+    "message": "Alanları denetimlerden hariç tut",
+    "description": "Whitelisted domains title."
   },
-  "whitelistedDomainsDescription":{
-    "message":"Beyaz listeye eklemek için alan adlarını girin. Birden çok girdiyi noktalı virgül (;) ile ayırın.",
-    "description":"Whitelisted domains description."
+  "whitelistedDomainsDescription": {
+    "message": "Beyaz listeye eklemek için alan adlarını girin. Birden çok girdiyi noktalı virgül (;) ile ayırın.",
+    "description": "Whitelisted domains description."
   },
-  "advancedLabel":{
-    "message":"GeliÅŸmiÅŸ",
-    "description":"Advanced label."
+  "advancedLabel": {
+    "message": "GeliÅŸmiÅŸ",
+    "description": "Advanced label."
   }
 }
\ No newline at end of file
diff --git a/core/constants.js b/core/constants.js
index c3320fd99cd6efde8ea72aabd403ef8ccbe61c5d..86e5754e75c1fd406badd69bd1ae5c384346dc87 100644
--- a/core/constants.js
+++ b/core/constants.js
@@ -27,6 +27,12 @@ const Address = {
     'WWW_PREFIX': 'www.'
 };
 
+const Header = {
+    'COOKIE': 'Cookie',
+    'ORIGIN': 'Origin',
+    'REFERER': 'Referer'
+};
+
 const Resource = {
     'MAPPING_EXPRESSION': /\.map$/i,
     'VERSION_EXPRESSION': /(?:\d{1,2}\.){1,3}\d{1,2}/,
@@ -38,6 +44,7 @@ const Setting = {
     'BLOCK_MISSING': 'blockMissing',
     'DISABLE_PREFETCH': 'disablePrefetch',
     'SHOW_ICON_BADGE': 'showIconBadge',
+    'SHOW_RELEASE_NOTES': 'showReleaseNotes',
     'STRIP_METADATA': 'stripMetadata',
     'WHITELISTED_DOMAINS': 'whitelistedDomains'
 };
@@ -45,9 +52,7 @@ const Setting = {
 const WebRequest = {
     'GET': 'GET',
     'BLOCKING': 'blocking',
-    'HEADERS': 'requestHeaders',
-    'ORIGIN_HEADER': 'Origin',
-    'REFERER_HEADER': 'Referer'
+    'HEADERS': 'requestHeaders'
 };
 
 const Whitelist = {
diff --git a/core/interceptor.js b/core/interceptor.js
index 288d431d118c33f17d228c1024d43b716cf3d498..b8a06cb71c451e0e880c5cc57a1ce12951b9fce8 100644
--- a/core/interceptor.js
+++ b/core/interceptor.js
@@ -45,11 +45,14 @@ interceptor.handleRequest = function (requestDetails, tabIdentifier, tab) {
     // Temporary list of undetectable tainted domains.
     let undetectableTaintedDomains = {
         '10fastfingers.com': true,
+        'blog.datawrapper.de': true,
+        'bundleofholding.com': true,
         'cdnjs.com': true,
         'dropbox.com': true,
         'glowing-bear.org': true,
         'minigames.mail.ru': true,
         'miniquadtestbench.com': true,
+        'openweathermap.org': true,
         'qwertee.com': true,
         'report-uri.io': true,
         'scotthelme.co.uk': true,
diff --git a/core/main.js b/core/main.js
index 5174c27329686f8f5028967353ca640abb639038..6c5557c24713bba67d8f0475d454edd4d88c212e 100644
--- a/core/main.js
+++ b/core/main.js
@@ -26,11 +26,11 @@ var main = {};
 main._initializeOptions = function () {
 
     let optionDefaults = {
-        'showIconBadge': true,
-        'blockMissing': false,
-        'disablePrefetch': true,
-        'stripMetadata': true,
-        'whitelistedDomains': {}
+        [Setting.SHOW_ICON_BADGE]: true,
+        [Setting.BLOCK_MISSING]: false,
+        [Setting.DISABLE_PREFETCH]: true,
+        [Setting.STRIP_METADATA]: true,
+        [Setting.WHITELISTED_DOMAINS]: {}
     };
 
     chrome.storage.local.get(optionDefaults, function (options) {
@@ -68,7 +68,7 @@ main._showReleaseNotes = function (details) {
         if (details.temporary !== true) {
 
             chrome.storage.local.get({
-                'showReleaseNotes': true
+                [Setting.SHOW_RELEASE_NOTES]: true
             }, function (options) {
 
                 if (options.showReleaseNotes === true) {
diff --git a/core/request-sanitizer.js b/core/request-sanitizer.js
new file mode 100644
index 0000000000000000000000000000000000000000..8a76e6759e69b916707d0d0ee8260d38a241f5ff
--- /dev/null
+++ b/core/request-sanitizer.js
@@ -0,0 +1,73 @@
+/**
+ * Request Sanitizer
+ * Belongs to Decentraleyes.
+ *
+ * @author      Thomas Rientjes
+ * @since       2018-01-10
+ * @license     MPL 2.0
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+'use strict';
+
+/**
+ * Request Sanitizer
+ */
+
+var requestSanitizer = {};
+
+/**
+ * Public Methods
+ */
+
+requestSanitizer.enable = function () {
+
+    let onBeforeSendHeaders = chrome.webRequest.onBeforeSendHeaders;
+
+    onBeforeSendHeaders.addListener(requestSanitizer._stripMetadata, {
+        'urls': stateManager.validHosts
+    }, [WebRequest.BLOCKING, WebRequest.HEADERS]);
+};
+
+requestSanitizer.disable = function () {
+
+    let onBeforeSendHeaders = chrome.webRequest.onBeforeSendHeaders;
+
+    onBeforeSendHeaders.removeListener(requestSanitizer._stripMetadata, {
+        'urls': stateManager.validHosts
+    }, [WebRequest.BLOCKING, WebRequest.HEADERS]);
+};
+
+/**
+ * Private Methods
+ */
+
+requestSanitizer._stripMetadata = function (requestDetails) {
+
+    let sensitiveHeaders = [Header.COOKIE, Header.ORIGIN, Header.REFERER];
+
+    for (let i = 0; i < requestDetails.requestHeaders.length; ++i) {
+
+        if (sensitiveHeaders.indexOf(requestDetails.requestHeaders[i].name) > -1) {
+            requestDetails.requestHeaders.splice(i--, 1);
+        }
+    }
+
+    return {
+        [WebRequest.HEADERS]: requestDetails.requestHeaders
+    };
+};
+
+/**
+ * Initializations
+ */
+
+chrome.storage.local.get({[Setting.STRIP_METADATA]: true}, function (options) {
+
+    if (options === null || options.stripMetadata !== false) {
+        requestSanitizer.enable();
+    }
+});
diff --git a/core/state-manager.js b/core/state-manager.js
index 43bf38b84022368e716de8a1d2d432594f6ca758..8d4db7125cfac3cf71684409d07474d90f09b43a 100644
--- a/core/state-manager.js
+++ b/core/state-manager.js
@@ -41,13 +41,6 @@ stateManager.registerInjection = function (tabIdentifier, injection) {
                 'tabId': tabIdentifier,
                 'text': injectionCount.toString()
             });
-
-        } else {
-
-            wrappers.setBadgeText({
-                'tabId': tabIdentifier,
-                'text': ''
-            });
         }
     }
 
@@ -58,14 +51,14 @@ stateManager.registerInjection = function (tabIdentifier, injection) {
             interceptor.amountInjected = items.amountInjected;
 
             chrome.storage.local.set({
-                'amountInjected': ++interceptor.amountInjected
+                [Setting.AMOUNT_INJECTED]: ++interceptor.amountInjected
             });
         });
 
     } else {
 
         chrome.storage.local.set({
-            'amountInjected': ++interceptor.amountInjected
+            [Setting.AMOUNT_INJECTED]: ++interceptor.amountInjected
         });
     }
 };
@@ -148,25 +141,9 @@ stateManager._updateTab = function (details) {
     }
 };
 
-stateManager._stripMetadata = function (requestDetails) {
-
-    for (let i = 0; i < requestDetails.requestHeaders.length; ++i) {
-
-        if (requestDetails.requestHeaders[i].name === WebRequest.ORIGIN_HEADER) {
-            requestDetails.requestHeaders.splice(i--, 1);
-        } else if (requestDetails.requestHeaders[i].name === WebRequest.REFERER_HEADER) {
-            requestDetails.requestHeaders.splice(i--, 1);
-        }
-    }
-
-    return {
-        'requestHeaders': requestDetails.requestHeaders
-    };
-};
-
 stateManager._handleStorageChanged = function (changes) {
 
-    if ('showIconBadge' in changes) {
+    if (Setting.SHOW_ICON_BADGE in changes) {
 
         stateManager.showIconBadge = changes.showIconBadge.newValue;
 
@@ -178,21 +155,12 @@ stateManager._handleStorageChanged = function (changes) {
         }
     }
 
-    if ('stripMetadata' in changes) {
-
-        let onBeforeSendHeaders;
-
-        onBeforeSendHeaders = chrome.webRequest.onBeforeSendHeaders;
+    if (Setting.STRIP_METADATA in changes) {
 
-        onBeforeSendHeaders.removeListener(stateManager._stripMetadata, {
-            'urls': stateManager.validHosts
-        }, [WebRequest.BLOCKING, WebRequest.HEADERS]);
+        requestSanitizer.disable();
 
         if (changes.stripMetadata.newValue !== false) {
-
-            onBeforeSendHeaders.addListener(stateManager._stripMetadata, {
-                'urls': stateManager.validHosts
-            }, [WebRequest.BLOCKING, WebRequest.HEADERS]);
+            requestSanitizer.enable();
         }
     }
 };
@@ -223,8 +191,13 @@ chrome.tabs.query({}, function (tabs) {
     tabs.forEach(stateManager._createTab);
 });
 
-chrome.storage.local.get('showIconBadge', function (items) {
-    stateManager.showIconBadge = items.showIconBadge || true;
+chrome.storage.local.get(Setting.SHOW_ICON_BADGE, function (items) {
+
+    if (items.showIconBadge === undefined) {
+        items.showIconBadge = true;
+    }
+
+    stateManager.showIconBadge = items.showIconBadge;
 });
 
 /**
@@ -269,14 +242,4 @@ chrome.webRequest.onBeforeRedirect.addListener(function (requestDetails) {
 
 }, {'urls': [Address.ANY]});
 
-chrome.storage.local.get({'stripMetadata': true}, function (options) {
-
-    if (options === null || options.stripMetadata !== false) {
-
-        chrome.webRequest.onBeforeSendHeaders.addListener(stateManager._stripMetadata, {
-            'urls': stateManager.validHosts
-        }, [WebRequest.BLOCKING, WebRequest.HEADERS]);
-    }
-});
-
 chrome.storage.onChanged.addListener(stateManager._handleStorageChanged);
diff --git a/modules/internal/helpers.js b/modules/internal/helpers.js
index 54a1ed1cd8c63069ece255112761e66d706914f9..003d8e1ff63958dd5273d6bcc7be0eebff35e134 100644
--- a/modules/internal/helpers.js
+++ b/modules/internal/helpers.js
@@ -62,8 +62,8 @@ helpers.languageIsFullySupported = function (language) {
     languageSupported = false;
 
     supportedLanguages = [
-        'ar', 'bg', 'zh', 'da', 'nl', 'en', 'et', 'fi', 'fr', 'de', 'el', 'is',
-        'id', 'it', 'ja', 'ko', 'pl', 'pt', 'ro', 'ru', 'es', 'sv', 'tr'
+        'ar', 'bg', 'zh', 'cs', 'da', 'nl', 'en', 'et', 'fi', 'fr', 'de', 'el',
+        'is', 'id', 'it', 'ja', 'ko', 'pl', 'pt', 'ro', 'ru', 'es', 'sv', 'tr'
     ];
 
     for (let supportedLanguage of supportedLanguages) {
@@ -201,6 +201,13 @@ helpers.determineScriptDirection = function (language) {
     return scriptDirection;
 };
 
+helpers.formatNumber = function (number) {
+
+    if (typeof number === 'number') {
+        return number.toLocaleString();
+    }
+};
+
 helpers.formatVersion = function (version) {
 
     if (version.indexOf('beta') === -1) {
diff --git a/pages/background/background.html b/pages/background/background.html
index 55584b62d75ef220707cad668e6a4ce21cc82ce9..ebf75a1170100afd1a276def86ed51773654888d 100644
--- a/pages/background/background.html
+++ b/pages/background/background.html
@@ -17,6 +17,7 @@
         <script src="../../core/files.js"></script>
         <script src="../../core/resources.js"></script>
         <script src="../../core/mappings.js"></script>
+        <script src="../../core/request-sanitizer.js"></script>
         <script src="../../core/state-manager.js"></script>
         <script src="../../core/request-analyzer.js"></script>
         <script src="../../core/interceptor.js"></script>
diff --git a/pages/options/options.js b/pages/options/options.js
index 1512b8a40a1a08a87cbbcc73ddae99264593cdaf..17c403ed238073e9a56a75d9eefdc67628ce4589 100644
--- a/pages/options/options.js
+++ b/pages/options/options.js
@@ -90,11 +90,11 @@ options._getOptionElement = function (optionKey) {
 options._getOptionElements = function () {
 
     let optionElements = {
-        'showIconBadge': options._getOptionElement(Setting.SHOW_ICON_BADGE),
-        'blockMissing': options._getOptionElement(Setting.BLOCK_MISSING),
-        'disablePrefetch': options._getOptionElement(Setting.DISABLE_PREFETCH),
-        'stripMetadata': options._getOptionElement(Setting.STRIP_METADATA),
-        'whitelistedDomains': options._getOptionElement(Setting.WHITELISTED_DOMAINS)
+        [Setting.SHOW_ICON_BADGE]: options._getOptionElement(Setting.SHOW_ICON_BADGE),
+        [Setting.BLOCK_MISSING]: options._getOptionElement(Setting.BLOCK_MISSING),
+        [Setting.DISABLE_PREFETCH]: options._getOptionElement(Setting.DISABLE_PREFETCH),
+        [Setting.STRIP_METADATA]: options._getOptionElement(Setting.STRIP_METADATA),
+        [Setting.WHITELISTED_DOMAINS]: options._getOptionElement(Setting.WHITELISTED_DOMAINS)
     };
 
     return optionElements;
diff --git a/pages/popup/popup.js b/pages/popup/popup.js
index befa4acc7d0f6b595a095c5c00ebfbf5c5e7c249..ac7751bd7aeb01f7287f301da840f0fe4f268e6f 100644
--- a/pages/popup/popup.js
+++ b/pages/popup/popup.js
@@ -47,7 +47,7 @@ popup._renderNonContextualContents = function () {
     optionsButtonElement = document.getElementById('options-button');
 
     versionLabelElement.innerText = popup._version;
-    counterElement.innerText = popup._amountInjected;
+    counterElement.innerText = helpers.formatNumber(popup._amountInjected);
 
     testingUtilityLinkElement.addEventListener('mouseup', popup._onTestingUtilityLinkClicked);
     optionsButtonElement.addEventListener('mouseup', popup._onOptionsButtonClicked);
@@ -157,7 +157,7 @@ popup._determineAmountInjected = function () {
 
     return new Promise((resolve) => {
 
-        chrome.storage.local.get('amountInjected', function (items) {
+        chrome.storage.local.get(Setting.AMOUNT_INJECTED, function (items) {
 
             popup._amountInjected = items.amountInjected || 0;
             resolve();