about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/assets/javascripts/helpers/common.js65
-rw-r--r--src/assets/javascripts/helpers/general.js1
-rw-r--r--src/assets/javascripts/helpers/imgur.js48
-rw-r--r--src/assets/javascripts/helpers/instagram.js41
-rw-r--r--src/assets/javascripts/helpers/lbry.js13
-rw-r--r--src/assets/javascripts/helpers/maps.js19
-rw-r--r--src/assets/javascripts/helpers/medium.js19
-rw-r--r--src/assets/javascripts/helpers/peertube.js26
-rw-r--r--src/assets/javascripts/helpers/reddit.js34
-rw-r--r--src/assets/javascripts/helpers/search.js70
-rw-r--r--src/assets/javascripts/helpers/sendTargets.js29
-rw-r--r--src/assets/javascripts/helpers/speedtest.js2
-rw-r--r--src/assets/javascripts/helpers/spotify.js19
-rw-r--r--src/assets/javascripts/helpers/translate/lingva-preferences.js4
-rw-r--r--src/assets/javascripts/helpers/translate/translate.js159
-rw-r--r--src/assets/javascripts/helpers/twitter.js69
-rw-r--r--src/assets/javascripts/helpers/wikipedia.js36
-rw-r--r--src/assets/javascripts/helpers/youtube/youtube.js148
-rw-r--r--src/assets/javascripts/helpers/youtubeMusic.js4
-rw-r--r--src/instances/cloudflare.json10
-rw-r--r--src/instances/data.json59
-rw-r--r--src/instances/get_instances.py549
-rw-r--r--src/instances/piped.json34
-rw-r--r--src/pages/background/background.js39
-rw-r--r--src/pages/options/imgur/imgur.js65
-rw-r--r--src/pages/options/instagram/instagram.js9
-rw-r--r--src/pages/options/lbry/lbry.js18
-rw-r--r--src/pages/options/maps/maps.js45
-rw-r--r--src/pages/options/medium/medium.js7
-rw-r--r--src/pages/options/peertube/peertube.js19
-rw-r--r--src/pages/options/reddit/reddit.js15
-rw-r--r--src/pages/options/search/search.js30
-rw-r--r--src/pages/options/sendTargets/sendTargets.js6
-rw-r--r--src/pages/options/speedtest/speedtest.js6
-rw-r--r--src/pages/options/spotify/spotify.js4
-rw-r--r--src/pages/options/tiktok/tiktok.js29
-rw-r--r--src/pages/options/translate/translate.js164
-rw-r--r--src/pages/options/twitter/twitter.js12
-rw-r--r--src/pages/options/wikipedia/wikipedia.js8
-rw-r--r--src/pages/options/youtube/invidious.js146
-rw-r--r--src/pages/options/youtube/piped.js106
-rw-r--r--src/pages/options/youtube/pipedMaterial.js79
-rw-r--r--src/pages/options/youtubeMusic/youtubeMusic.js4
43 files changed, 1149 insertions, 1120 deletions
diff --git a/src/assets/javascripts/helpers/common.js b/src/assets/javascripts/helpers/common.js
index b2a91b20..5d470cf0 100644
--- a/src/assets/javascripts/helpers/common.js
+++ b/src/assets/javascripts/helpers/common.js
@@ -19,11 +19,12 @@ let cloudflareList = [];
 async function initCloudflareList() {
   return new Promise(resolve => {
     fetch('/instances/cloudflare.json').then(response => response.text()).then(data => {
-      cloudflareList = data;
+      cloudflareList = JSON.parse(data);
       resolve();
     })
   });
 }
+
 async function wholeInit() {
   await youtubeHelper.init();
   await twitterHelper.init();
@@ -98,9 +99,9 @@ function protocolHost(url) {
 }
 
 async function processDefaultCustomInstances(
+  target,
   name,
   protocol,
-  nameHelper,
   document,
 ) {
   function camelCase(str) {
@@ -116,9 +117,38 @@ async function processDefaultCustomInstances(
 
   await initCloudflareList();
 
+
+  let nameDefaultRedirects;
+
+  let redirectsChecks = `${name}${camelCase(protocol)}RedirectsChecks`;
+  let customRedirects = `${name}${camelCase(protocol)}CustomRedirects`;
+  let redirectsKey = `${target}Redirects`;
+
+  let redirects;
+
+  async function getFromStorage() {
+    return new Promise(async resolve => {
+
+      browser.storage.local.get(
+        [
+          redirectsChecks,
+          customRedirects,
+          redirectsKey
+        ],
+        r => {
+          nameDefaultRedirects = r[redirectsChecks];
+          nameCustomInstances = r[customRedirects];
+          redirects = r[redirectsKey];
+          resolve();
+        }
+      )
+    })
+  }
+  await getFromStorage();
+
   function calcNameCheckBoxes() {
     let isTrue = true;
-    for (const item of nameHelper.getRedirects()[name][protocol])
+    for (const item of redirects[name][protocol])
       if (!nameDefaultRedirects.includes(item)) {
         isTrue = false;
         break;
@@ -129,11 +159,6 @@ async function processDefaultCustomInstances(
     nameProtocolElement.getElementsByClassName('toogle-all')[0].checked = isTrue;
   }
 
-  let nameDefaultRedirects;
-
-  let redirectsChecks = `${name}${camelCase(protocol)}RedirectsChecks`;
-  let customRedirects = `${name}${camelCase(protocol)}CustomRedirects`;
-
   async function setRedirectsChecks(val) {
     await browser.storage.local.set({ [redirectsChecks]: val });
   }
@@ -142,24 +167,6 @@ async function processDefaultCustomInstances(
     await browser.storage.local.set({ [customRedirects]: val });
   }
 
-  async function getFromStorage() {
-    return new Promise(async resolve => {
-      nameHelper.init().then(() =>
-        browser.storage.local.get(
-          [
-            redirectsChecks,
-            customRedirects,
-          ],
-          r => {
-            nameDefaultRedirects = r[redirectsChecks];
-            nameCustomInstances = r[customRedirects];
-            resolve();
-          }
-        )
-      )
-    })
-  }
-  await getFromStorage();
 
   nameCheckListElement.innerHTML =
     [
@@ -167,7 +174,7 @@ async function processDefaultCustomInstances(
         <x data-localise="__MSG_toggleAll__">Toggle All</x>
         <input type="checkbox" class="toogle-all"/>
       </div>`,
-      ...nameHelper.getRedirects()[name][protocol].map(
+      ...redirects[name][protocol].map(
         x => {
           let cloudflare = cloudflareList.includes(x) ? ' <span style="color:red;">cloudflare</span>' : '';
 
@@ -185,7 +192,7 @@ async function processDefaultCustomInstances(
   calcNameCheckBoxes();
   nameProtocolElement.getElementsByClassName('toogle-all')[0].addEventListener("change", async event => {
     if (event.target.checked)
-      nameDefaultRedirects = [...nameHelper.getRedirects()[name][protocol]];
+      nameDefaultRedirects = [...redirects[name][protocol]];
     else
       nameDefaultRedirects = [];
 
@@ -236,7 +243,7 @@ async function processDefaultCustomInstances(
     let nameCustomInstanceInput = nameProtocolElement.getElementsByClassName('custom-instance')[0];
     let url = new URL(nameCustomInstanceInput.value);
     let protocolHostVar = protocolHost(url);
-    if (nameCustomInstanceInput.validity.valid && !nameHelper.getRedirects()[name][protocol].includes(protocolHostVar)) {
+    if (nameCustomInstanceInput.validity.valid && !redirects[name][protocol].includes(protocolHostVar)) {
       if (!nameCustomInstances.includes(protocolHostVar)) {
         nameCustomInstances.push(protocolHostVar)
         setCustom(nameCustomInstances);
diff --git a/src/assets/javascripts/helpers/general.js b/src/assets/javascripts/helpers/general.js
index 4a1681e9..56f76d8b 100644
--- a/src/assets/javascripts/helpers/general.js
+++ b/src/assets/javascripts/helpers/general.js
@@ -74,7 +74,6 @@ async function init() {
 
                 popupFrontends = r.popupFrontends ?? [
                     "youtube",
-                    "youtubeMusic",
                     "twitter",
                     "instagram",
                     "tikTok",
diff --git a/src/assets/javascripts/helpers/imgur.js b/src/assets/javascripts/helpers/imgur.js
index 7a2daa43..f581a75a 100644
--- a/src/assets/javascripts/helpers/imgur.js
+++ b/src/assets/javascripts/helpers/imgur.js
@@ -21,33 +21,35 @@ function setRedirects(val) {
             var index = rimgoNormalRedirectsChecks.indexOf(item);
             if (index !== -1) rimgoNormalRedirectsChecks.splice(index, 1);
         }
-    browser.storage.local.set({rimgoNormalRedirectsChecks});
+    browser.storage.local.set({ rimgoNormalRedirectsChecks });
 
     for (const item of rimgoTorRedirectsChecks)
         if (!redirects.rimgo.tor.includes(item)) {
             var index = rimgoTorRedirectsChecks.indexOf(item);
             if (index !== -1) rimgoTorRedirectsChecks.splice(index, 1);
         }
-    browser.storage.local.set({rimgoTorRedirectsChecks});
+    browser.storage.local.set({ rimgoTorRedirectsChecks });
 
     for (const item of rimgoI2pRedirectsChecks)
         if (!redirects.rimgo.i2p.includes(item)) {
             var index = rimgoI2pRedirectsChecks.indexOf(item);
             if (index !== -1) rimgoI2pRedirectsChecks.splice(index, 1);
         }
-    browser.storage.local.set({rimgoI2pRedirectsChecks});
+    browser.storage.local.set({ rimgoI2pRedirectsChecks });
 
 }
 
-let disable;
-let protocol;
+let
+    disable,
+    protocol;
 
-let rimgoNormalRedirectsChecks;
-let rimgoTorRedirectsChecks;
-let rimgoI2pRedirectsChecks;
-let rimgoNormalCustomRedirects = [];
-let rimgoTorCustomRedirects = [];
-let rimgoI2pCustomRedirects = [];
+let
+    rimgoNormalRedirectsChecks,
+    rimgoTorRedirectsChecks,
+    rimgoI2pRedirectsChecks,
+    rimgoNormalCustomRedirects,
+    rimgoTorCustomRedirects,
+    rimgoI2pCustomRedirects;
 
 function redirect(url, type, initiator) {
     // https://imgur.com/gallery/s4WXQmn
@@ -129,18 +131,23 @@ function switchInstance(url) {
 }
 
 async function initDefaults() {
-    return new Promise(async resolve => {
-        fetch('/instances/data.json').then(response => response.text()).then(async data => {
-            let dataJson = JSON.parse(data);
-            redirects.rimgo = dataJson.rimgo
+    fetch('/instances/data.json').then(response => response.text()).then(async data => {
+        let dataJson = JSON.parse(data);
+        redirects.rimgo = dataJson.rimgo;
+        browser.storage.local.get('cloudflareList', async r => {
+            rimgoNormalRedirectsChecks = [...redirects.rimgo.normal];
+            for (const instance of r.cloudflareList) {
+                let i;
+
+                i = rimgoNormalRedirectsChecks.indexOf(instance);
+                if (i > -1) rimgoNormalRedirectsChecks.splice(i, 1);
+            }
             await browser.storage.local.set({
                 disableImgur: false,
                 imgurProtocol: 'normal',
-                imgurRedirects: {
-                    'rimgo': redirects.rimgo,
-                },
+                imgurRedirects: redirects,
 
-                rimgoNormalRedirectsChecks: [...redirects.rimgo.normal],
+                rimgoNormalRedirectsChecks: rimgoNormalRedirectsChecks,
                 rimgoNormalCustomRedirects: [],
 
                 rimgoTorRedirectsChecks: [...redirects.rimgo.tor],
@@ -149,9 +156,8 @@ async function initDefaults() {
                 rimgoI2pRedirectsChecks: [...redirects.rimgo.i2p],
                 rimgoI2pCustomRedirects: [],
             });
-            resolve();
         });
-    })
+    });
 }
 
 async function init() {
diff --git a/src/assets/javascripts/helpers/instagram.js b/src/assets/javascripts/helpers/instagram.js
index 26414070..3277ffda 100644
--- a/src/assets/javascripts/helpers/instagram.js
+++ b/src/assets/javascripts/helpers/instagram.js
@@ -173,27 +173,34 @@ async function initDefaults() {
     fetch('/instances/data.json').then(response => response.text()).then(async data => {
       let dataJson = JSON.parse(data);
       redirects.bibliogram = dataJson.bibliogram;
-      await browser.storage.local.set({
-        disableInstagram: false,
-        instagramRedirects: {
-          'bibliogram': redirects.bibliogram
-        },
+      browser.storage.local.get('cloudflareList', async r => {
+        bibliogramNormalRedirectsChecks = [...redirects.bibliogram.normal];
+        for (const instance of r.cloudflareList) {
+          let i;
 
-        theme: 'DEFAULT',
-        applyThemeToSites: false,
+          i = bibliogramNormalRedirectsChecks.indexOf(instance);
+          if (i > -1) bibliogramNormalRedirectsChecks.splice(i, 1);
+        }
+        await browser.storage.local.set({
+          disableInstagram: false,
+          instagramRedirects: redirects,
 
-        instancesCookies: [],
+          theme: 'DEFAULT',
+          applyThemeToSites: false,
 
-        bibliogramNormalRedirectsChecks: [...redirects.bibliogram.normal],
-        bibliogramTorRedirectsChecks: [],
+          instancesCookies: [],
 
-        bibliogramNormalCustomRedirects: [...redirects.bibliogram.tor],
-        bibliogramTorCustomRedirects: [],
-        instagramProtocol: "normal",
-      })
-      resolve();
-    }
-    )
+          bibliogramNormalRedirectsChecks: bibliogramNormalRedirectsChecks,
+          bibliogramTorRedirectsChecks: [],
+
+          bibliogramNormalCustomRedirects: [...redirects.bibliogram.tor],
+          bibliogramTorCustomRedirects: [],
+          instagramProtocol: "normal",
+        })
+        resolve();
+      }
+      )
+    })
   })
 }
 
diff --git a/src/assets/javascripts/helpers/lbry.js b/src/assets/javascripts/helpers/lbry.js
index 8b0f78a7..b82ae9ad 100644
--- a/src/assets/javascripts/helpers/lbry.js
+++ b/src/assets/javascripts/helpers/lbry.js
@@ -93,14 +93,21 @@ function redirect(url, type, initiator) {
 }
 
 async function initDefaults() {
-    return new Promise(async resolve => {
+    browser.storage.local.get('cloudflareList', async r => {
+        librarianNormalRedirectsChecks = [...redirects.librarian.normal];
+        for (const instance of r.cloudflareList) {
+            let i;
+
+            i = librarianNormalRedirectsChecks.indexOf(instance);
+            if (i > -1) librarianNormalRedirectsChecks.splice(i, 1);
+        }
         await browser.storage.local.set({
             disableLbryTargets: true,
             lbryTargetsRedirects: {
                 'librarian': redirects.librarian
             },
 
-            librarianNormalRedirectsChecks: [...redirects.librarian.normal],
+            librarianNormalRedirectsChecks: librarianNormalRedirectsChecks,
             librarianNormalCustomRedirects: [],
 
             librarianTorRedirectsChecks: [...redirects.librarian.tor],
@@ -108,7 +115,6 @@ async function initDefaults() {
 
             lbryTargetsProtocol: "normal",
         })
-        resolve();
     })
 }
 
@@ -129,7 +135,6 @@ async function init() {
                 "lbryTargetsProtocol"
             ],
             r => {
-
                 disable = r.disableLbryTargets;
 
                 protocol = r.lbryTargetsProtocol;
diff --git a/src/assets/javascripts/helpers/maps.js b/src/assets/javascripts/helpers/maps.js
index 25dcf2c5..86a53b18 100644
--- a/src/assets/javascripts/helpers/maps.js
+++ b/src/assets/javascripts/helpers/maps.js
@@ -17,7 +17,6 @@ let redirects = {
     ]
   }
 };
-const getRedirects = () => redirects;
 
 let disable; // disableMaps
 let frontend; // mapsFrontend
@@ -187,14 +186,14 @@ function redirect(url, initiator) {
 }
 
 async function initDefaults() {
-  return new Promise(async resolve => {
-    await browser.storage.local.set({
-      disableMaps: false,
-      mapsFrontend: 'osm',
-
-      facilNormalRedirectsChecks: [...redirects.facil.normal],
-      facilNormalCustomRedirects: [],
-    })
+  await browser.storage.local.set({
+    disableMaps: false,
+    mapsFrontend: 'osm',
+
+    mapsRedirects: redirects,
+
+    facilNormalRedirectsChecks: [...redirects.facil.normal],
+    facilNormalCustomRedirects: [],
   })
 }
 
@@ -223,8 +222,6 @@ async function init() {
 }
 
 export default {
-  getRedirects,
-
   redirect,
   init,
   initDefaults,
diff --git a/src/assets/javascripts/helpers/medium.js b/src/assets/javascripts/helpers/medium.js
index beea1a99..99a14cca 100644
--- a/src/assets/javascripts/helpers/medium.js
+++ b/src/assets/javascripts/helpers/medium.js
@@ -123,20 +123,27 @@ function switchInstance(url) {
 }
 
 async function initDefaults() {
-  return new Promise(async resolve => {
-    fetch('/instances/data.json').then(response => response.text()).then(async data => {
-      let dataJson = JSON.parse(data);
-      redirects.scribe = dataJson.scribe;
+  fetch('/instances/data.json').then(response => response.text()).then(async data => {
+    let dataJson = JSON.parse(data);
+    redirects.scribe = dataJson.scribe;
+    browser.storage.local.get('cloudflareList', async r => {
+      scribeNormalRedirectsChecks = [...redirects.scribe.normal];
+      for (const instance of r.cloudflareList) {
+        let i = scribeNormalRedirectsChecks.indexOf(instance);
+        if (i > -1) scribeNormalRedirectsChecks.splice(i, 1);
+      }
       await browser.storage.local.set({
         disableMedium: false,
         mediumRedirects: redirects,
-        scribeNormalRedirectsChecks: [...redirects.scribe.normal],
+
+        scribeNormalRedirectsChecks: scribeNormalRedirectsChecks,
         scribeNormalCustomRedirects: [],
+
         scribeTorRedirectsChecks: [...redirects.scribe.tor],
         scribeTorCustomRedirects: [],
+
         mediumProtocol: "normal",
       })
-      resolve();
     })
   })
 }
diff --git a/src/assets/javascripts/helpers/peertube.js b/src/assets/javascripts/helpers/peertube.js
index 17fada2b..14dda0b1 100644
--- a/src/assets/javascripts/helpers/peertube.js
+++ b/src/assets/javascripts/helpers/peertube.js
@@ -94,21 +94,29 @@ function redirect(url, type, initiator) {
 }
 
 async function initDefaults() {
-    console.log('init peertube defaults')
     fetch('/instances/data.json').then(response => response.text()).then(async data => {
         let dataJson = JSON.parse(data);
-        await browser.storage.local.set({
-            peerTubeTargets: ['https://search.joinpeertube.org', ...dataJson.peertube],
+        browser.storage.local.get('cloudflareList', async r => {
+            simpleertubeNormalRedirectsChecks = [...redirects.simpleertube.normal];
+            for (const instance of r.cloudflareList) {
+                let i = simpleertubeNormalRedirectsChecks.indexOf(instance);
+                if (i > -1) simpleertubeNormalRedirectsChecks.splice(i, 1);
+            }
+            await browser.storage.local.set({
+                peerTubeTargets: ['https://search.joinpeertube.org', ...dataJson.peertube],
 
-            disablePeertubeTargets: true,
+                disablePeertubeTargets: true,
 
-            simpleertubeNormalRedirectsChecks: [...redirects.simpleertube.normal],
-            simpleertubeNormalCustomRedirects: [],
+                peertubeRedirects: redirects,
 
-            simpleertubeTorRedirectsChecks: [...redirects.simpleertube.tor],
-            simpleertubeTorCustomRedirects: [],
+                simpleertubeNormalRedirectsChecks: simpleertubeNormalRedirectsChecks,
+                simpleertubeNormalCustomRedirects: [],
 
-            peertubeTargetsProtocol: "normal",
+                simpleertubeTorRedirectsChecks: [...redirects.simpleertube.tor],
+                simpleertubeTorCustomRedirects: [],
+
+                peertubeTargetsProtocol: "normal",
+            })
         })
     })
 }
diff --git a/src/assets/javascripts/helpers/reddit.js b/src/assets/javascripts/helpers/reddit.js
index 6e932f6d..7c123797 100644
--- a/src/assets/javascripts/helpers/reddit.js
+++ b/src/assets/javascripts/helpers/reddit.js
@@ -387,12 +387,22 @@ function switchInstance(url) {
 }
 
 async function initDefaults() {
-  console.log('init redditDefault')
-  return new Promise(async resolve => {
-    fetch('/instances/data.json').then(response => response.text()).then(async data => {
-      let dataJson = JSON.parse(data);
-      redirects.teddit = dataJson.teddit;
-      redirects.libreddit = dataJson.libreddit;
+  fetch('/instances/data.json').then(response => response.text()).then(async data => {
+    let dataJson = JSON.parse(data);
+    redirects.teddit = dataJson.teddit;
+    redirects.libreddit = dataJson.libreddit;
+    browser.storage.local.get('cloudflareList', async r => {
+      libredditNormalRedirectsChecks = [...redirects.libreddit.normal];
+      tedditNormalRedirectsChecks = [...redirects.teddit.normal]
+      for (const instance of r.cloudflareList) {
+        let i;
+        
+        i = libredditNormalRedirectsChecks.indexOf(instance);
+        if (i > -1) libredditNormalRedirectsChecks.splice(i, 1);
+
+        i = tedditNormalRedirectsChecks.indexOf(instance);
+        if (i > -1) tedditNormalRedirectsChecks.splice(i, 1);
+      }
       await browser.storage.local.set({
         disableReddit: false,
         redditProtocol: 'normal',
@@ -401,18 +411,15 @@ async function initDefaults() {
         bypassWatchOnReddit: true,
         alwaysUsePreferred: false,
 
-        redditRedirects: {
-          'libreddit': redirects.libreddit,
-          'teddit': redirects.teddit,
-        },
+        redditRedirects: redirects,
 
-        libredditNormalRedirectsChecks: [...redirects.libreddit.normal],
+        libredditNormalRedirectsChecks: libredditNormalRedirectsChecks,
         libredditNormalCustomRedirects: [],
 
         libredditTorRedirectsChecks: [...redirects.libreddit.tor],
         libredditTorCustomRedirects: [],
 
-        tedditNormalRedirectsChecks: [...redirects.teddit.normal],
+        tedditNormalRedirectsChecks: tedditNormalRedirectsChecks,
         tedditNormalCustomRedirects: [],
 
         tedditTorRedirectsChecks: [...redirects.teddit.tor],
@@ -430,9 +437,8 @@ async function initDefaults() {
         redditUseHls: false,
         redditHideHlsNotification: false,
       });
-      resolve();
     });
-  })
+  });
 }
 
 async function init() {
diff --git a/src/assets/javascripts/helpers/search.js b/src/assets/javascripts/helpers/search.js
index e42b05dd..c26eeb29 100644
--- a/src/assets/javascripts/helpers/search.js
+++ b/src/assets/javascripts/helpers/search.js
@@ -27,7 +27,6 @@ let redirects = {
     "i2p": []
   }
 };
-const getRedirects = () => redirects;
 
 function setSearxRedirects(val) {
   redirects.searx = val;
@@ -283,42 +282,60 @@ async function initDefaults() {
     redirects.searx = dataJson.searx;
     redirects.searxng = dataJson.searxng;
     redirects.whoogle = dataJson.whoogle;
-    await browser.storage.local.set({
-      disableSearch: false,
-      searchFrontend: 'searxng',
-      searchRedirects: redirects,
 
-      whoogleNormalRedirectsChecks: [...redirects.whoogle.normal],
-      whoogleNormalCustomRedirects: [],
+    browser.storage.local.get('cloudflareList', async r => {
+      whoogleNormalRedirectsChecks = [...redirects.whoogle.normal];
+      searxNormalRedirectsChecks = [...redirects.searx.normal];
+      searxngNormalRedirectsChecks = [...redirects.searxng.normal];
+      for (const instance of r.cloudflareList) {
+        let i;
 
-      whoogleTorRedirectsChecks: [...redirects.whoogle.tor],
-      whoogleTorCustomRedirects: [],
+        i = whoogleNormalRedirectsChecks.indexOf(instance);
+        if (i > -1) whoogleNormalRedirectsChecks.splice(i, 1);
 
-      whoogleI2pRedirectsChecks: [...redirects.whoogle.i2p],
-      whoogleI2pCustomRedirects: [],
+        i = searxNormalRedirectsChecks.indexOf(instance);
+        if (i > -1) searxNormalRedirectsChecks.splice(i, 1);
 
-      searxNormalRedirectsChecks: [...redirects.searx.normal],
-      searxNormalCustomRedirects: [],
+        i = searxngNormalRedirectsChecks.indexOf(instance);
+        if (i > -1) searxngNormalRedirectsChecks.splice(i, 1);
+      }
+      await browser.storage.local.set({
+        disableSearch: false,
+        searchFrontend: 'searxng',
+        searchRedirects: redirects,
 
-      searxTorRedirectsChecks: [...redirects.searx.tor],
-      searxTorCustomRedirects: [],
+        whoogleNormalRedirectsChecks: whoogleNormalRedirectsChecks,
+        whoogleNormalCustomRedirects: [],
 
-      searxI2pRedirectsChecks: [...redirects.searx.i2p],
-      searxI2pCustomRedirects: [],
+        whoogleTorRedirectsChecks: [...redirects.whoogle.tor],
+        whoogleTorCustomRedirects: [],
 
-      searxngNormalRedirectsChecks: [...redirects.searxng.normal],
-      searxngNormalCustomRedirects: [],
+        whoogleI2pRedirectsChecks: [...redirects.whoogle.i2p],
+        whoogleI2pCustomRedirects: [],
 
-      searxngTorRedirectsChecks: [...redirects.searxng.tor],
-      searxngTorCustomRedirects: [],
+        searxNormalRedirectsChecks: searxNormalRedirectsChecks,
+        searxNormalCustomRedirects: [],
 
-      searxngI2pRedirectsChecks: [...redirects.searxng.i2p],
-      searxngI2pCustomRedirects: [],
+        searxTorRedirectsChecks: [...redirects.searx.tor],
+        searxTorCustomRedirects: [],
 
-      theme: 'DEFAULT',
-      applyThemeToSites: false,
+        searxI2pRedirectsChecks: [...redirects.searx.i2p],
+        searxI2pCustomRedirects: [],
 
-      searchProtocol: 'normal',
+        searxngNormalRedirectsChecks: searxngNormalRedirectsChecks,
+        searxngNormalCustomRedirects: [],
+
+        searxngTorRedirectsChecks: [...redirects.searxng.tor],
+        searxngTorCustomRedirects: [],
+
+        searxngI2pRedirectsChecks: [...redirects.searxng.i2p],
+        searxngI2pCustomRedirects: [],
+
+        theme: 'DEFAULT',
+        applyThemeToSites: false,
+
+        searchProtocol: 'normal',
+      })
     })
   })
 }
@@ -403,7 +420,6 @@ async function init() {
 }
 
 export default {
-  getRedirects,
 
   setSearxRedirects,
   setSearxngRedirects,
diff --git a/src/assets/javascripts/helpers/sendTargets.js b/src/assets/javascripts/helpers/sendTargets.js
index 1ab2b2e8..f131f5c3 100644
--- a/src/assets/javascripts/helpers/sendTargets.js
+++ b/src/assets/javascripts/helpers/sendTargets.js
@@ -92,17 +92,24 @@ async function initDefaults() {
     fetch('/instances/data.json').then(response => response.text()).then(async data => {
         let dataJson = JSON.parse(data);
         redirects.send = dataJson.send;
-        await browser.storage.local.set({
-            disableSendTarget: false,
-            sendTargetsRedirects: redirects,
-
-            sendNormalRedirectsChecks: [...redirects.send.normal],
-            sendNormalCustomRedirects: [],
-
-            sendTorRedirectsChecks: [...redirects.send.tor],
-            sendTorCustomRedirects: [],
-
-            sendTargetsProtocol: "normal",
+        browser.storage.local.get('cloudflareList', async r => {
+            sendNormalRedirectsChecks = [...redirects.send.normal];
+            for (const instance of r.cloudflareList) {
+                let i = sendNormalRedirectsChecks.indexOf(instance);
+                if (i > -1) sendNormalRedirectsChecks.splice(i, 1);
+            }
+            await browser.storage.local.set({
+                disableSendTarget: false,
+                sendTargetsRedirects: redirects,
+
+                sendNormalRedirectsChecks: sendNormalRedirectsChecks,
+                sendNormalCustomRedirects: [],
+
+                sendTorRedirectsChecks: [...redirects.send.tor],
+                sendTorCustomRedirects: [],
+
+                sendTargetsProtocol: "normal",
+            })
         })
     })
 }
diff --git a/src/assets/javascripts/helpers/speedtest.js b/src/assets/javascripts/helpers/speedtest.js
index 4f59cbb5..00f0a138 100644
--- a/src/assets/javascripts/helpers/speedtest.js
+++ b/src/assets/javascripts/helpers/speedtest.js
@@ -64,6 +64,8 @@ async function initDefaults() {
     await browser.storage.local.set({
         disableSpeedtest: true,
 
+        speedtestRedirects: redirects,
+
         librespeedNormalRedirectsChecks: [...redirects.librespeed.normal],
         librespeedNormalCustomRedirects: [],
 
diff --git a/src/assets/javascripts/helpers/spotify.js b/src/assets/javascripts/helpers/spotify.js
index 6863c108..9ff2c7d5 100644
--- a/src/assets/javascripts/helpers/spotify.js
+++ b/src/assets/javascripts/helpers/spotify.js
@@ -14,7 +14,6 @@ let redirects = {
     }
 }
 
-const getRedirects = () => redirects;
 function setRedirects(val) {
     redirects.soju = val;
     browser.storage.local.set({ spotifyTargetsRedirects: redirects })
@@ -25,20 +24,10 @@ function setRedirects(val) {
             if (index !== -1) sojuNormalRedirectsChecks.splice(index, 1);
         }
     browser.storage.local.set({ sojuNormalRedirectsChecks })
-
-    for (const item of sojuTorRedirectsChecks)
-        if (!redirects.soju.normal.includes(item)) {
-            var index = sojuTorRedirectsChecks.indexOf(item);
-            if (index !== -1) sojuTorRedirectsChecks.splice(index, 1);
-        }
-    browser.storage.local.set({ sojuTorRedirectsChecks })
 }
 
 let sojuNormalRedirectsChecks;
-let sojuTorRedirectsChecks;
-let sojuNormalCustomRedirects = [];
-let sojuTorCustomRedirects = [];
-
+let sojuNormalCustomRedirects;
 let disable; // disableSpotifyTargets
 
 function switchInstance(url) {
@@ -83,6 +72,8 @@ async function initDefaults() {
     await browser.storage.local.set({
         disableSpotifyTargets: true,
 
+        spotifyRedirects: redirects,
+
         sojuNormalRedirectsChecks: [...redirects.soju.normal],
         sojuNormalCustomRedirects: [],
     })
@@ -95,9 +86,6 @@ async function init() {
 
             "sojuNormalRedirectsChecks",
             "sojuNormalCustomRedirects",
-
-            "sojuTorRedirectsChecks",
-            "sojuTorCustomRedirects",
         ],
         r => {
             disable = r.disableSpotifyTargets;
@@ -109,7 +97,6 @@ async function init() {
 }
 
 export default {
-    getRedirects,
     setRedirects,
 
     switchInstance,
diff --git a/src/assets/javascripts/helpers/translate/lingva-preferences.js b/src/assets/javascripts/helpers/translate/lingva-preferences.js
index b63e2876..a9652903 100644
--- a/src/assets/javascripts/helpers/translate/lingva-preferences.js
+++ b/src/assets/javascripts/helpers/translate/lingva-preferences.js
@@ -6,8 +6,8 @@ browser.storage.local.get(
         "applyThemeToSites",
     ],
     r => {
-        let applyThemeToSites = r.applyThemeToSites ?? false;
-        let theme = r.theme ?? "DEFAULT";
+        let applyThemeToSites = r.applyThemeToSites;
+        let theme = r.theme;
 
         if (applyThemeToSites && theme != "DEFAULT") localStorage.setItem("chakra-ui-color-mode", r.theme);
     }
diff --git a/src/assets/javascripts/helpers/translate/translate.js b/src/assets/javascripts/helpers/translate/translate.js
index 4c4cee79..7ce67433 100644
--- a/src/assets/javascripts/helpers/translate/translate.js
+++ b/src/assets/javascripts/helpers/translate/translate.js
@@ -68,15 +68,13 @@ let lingvaNormalCustomRedirects = [];
 let lingvaTorCustomRedirects = [];
 
 
-let disable; // translateDisable
-let frontend; // translateFrontend
-let protocol; // translateProtocol
-
-let from; // translateFrom
-let to; // translateTo
-
-
-let simplyTranslateEngine;
+let
+  disable, // translateDisable
+  frontend, // translateFrontend
+  protocol, // translateProtocol
+  from, // translateFrom
+  to, // translateTo
+  simplyTranslateEngine;
 
 function isTranslateRedirects(url, type, frontend) {
   let protocolHost = commonHelper.protocolHost(url);
@@ -203,82 +201,91 @@ function switchInstance(url) {
 }
 
 async function initDefaults() {
-
   fetch('/instances/data.json').then(response => response.text()).then(async data => {
     let dataJson = JSON.parse(data);
     redirects.simplyTranslate = dataJson.simplyTranslate;
     redirects.lingva = dataJson.lingva;
-    await browser.storage.local.set({
-      translateDisable: false,
-      translateFrontend: "simplyTranslate",
-      translateProtocol: 'normal',
-      translateRedirects: redirects,
-
-      simplyTranslateNormalRedirectsChecks: [...redirects.simplyTranslate.normal],
-      simplyTranslateNormalCustomRedirects: [],
-      simplyTranslateTorRedirectsChecks: [...redirects.simplyTranslate.tor],
-      simplyTranslateTorCustomRedirects: [],
-
-      lingvaNormalRedirectsChecks: [...redirects.lingva.normal],
-      lingvaNormalCustomRedirects: [],
-      lingvaTorRedirectsChecks: [...redirects.lingva.tor],
-      lingvaTorCustomRedirects: [],
-
-      translateFrom: "auto",
-      translateTo: 'en',
-      simplyTranslateEngine: 'google',
+    browser.storage.local.get('cloudflareList', async r => {
+      simplyTranslateNormalRedirectsChecks = [...redirects.simplyTranslate.normal];
+      lingvaNormalRedirectsChecks = [...redirects.lingva.normal]
+      for (const instance of r.cloudflareList) {
+        let i;
+        
+        i = simplyTranslateNormalRedirectsChecks.indexOf(instance);
+        if (i > -1) simplyTranslateNormalRedirectsChecks.splice(i, 1);
+
+        i = lingvaNormalRedirectsChecks.indexOf(instance);
+        if (i > -1) lingvaNormalRedirectsChecks.splice(i, 1);
+      }
+      await browser.storage.local.set({
+        translateDisable: false,
+        translateFrontend: "simplyTranslate",
+        translateProtocol: 'normal',
+        translateRedirects: redirects,
+
+        simplyTranslateNormalRedirectsChecks: simplyTranslateNormalRedirectsChecks,
+        simplyTranslateNormalCustomRedirects: [],
+        simplyTranslateTorRedirectsChecks: [...redirects.simplyTranslate.tor],
+        simplyTranslateTorCustomRedirects: [],
+
+        lingvaNormalRedirectsChecks: lingvaNormalRedirectsChecks,
+        lingvaNormalCustomRedirects: [],
+        lingvaTorRedirectsChecks: [...redirects.lingva.tor],
+        lingvaTorCustomRedirects: [],
+
+        translateFrom: "auto",
+        translateTo: 'en',
+        simplyTranslateEngine: 'google',
+      })
     })
   })
 }
 
 async function init() {
-  fetch('/instances/data.json').then(response => response.text()).then(data => {
-    let dataJson = JSON.parse(data);
-    browser.storage.local.get(
-      [
-        "translateDisable",
-        "translateFrontend",
-        "translateProtocol",
-        "translateRedirects",
-
-        "simplyTranslateNormalRedirectsChecks",
-        "simplyTranslateNormalCustomRedirects",
-        "simplyTranslateTorRedirectsChecks",
-        "simplyTranslateTorCustomRedirects",
-
-        "lingvaNormalRedirectsChecks",
-        "lingvaNormalCustomRedirects",
-        "lingvaTorRedirectsChecks",
-        "lingvaTorCustomRedirects",
-
-        "translateFrom",
-        "translateTo",
-        "simplyTranslateEngine",
-      ],
-      result => {
-        disable = result.translateDisable;
-        frontend = result.translateFrontend;
-        protocol = result.translateProtocol;
-
-        from = result.translateFrom;
-        to = result.translateTo;
-        simplyTranslateEngine = result.simplyTranslateEngine;
-
-        redirects = result.translateRedirects;
-
-        simplyTranslateNormalRedirectsChecks = result.simplyTranslateNormalRedirectsChecks;
-        simplyTranslateNormalCustomRedirects = result.simplyTranslateNormalCustomRedirects;
-
-        simplyTranslateTorRedirectsChecks = result.simplyTranslateTorRedirectsChecks;
-        simplyTranslateTorCustomRedirects = result.simplyTranslateTorCustomRedirects;
-
-        lingvaNormalRedirectsChecks = result.lingvaNormalRedirectsChecks;
-        lingvaNormalCustomRedirects = result.lingvaNormalCustomRedirects;
-
-        lingvaTorRedirectsChecks = result.lingvaTorRedirectsChecks;
-        lingvaTorCustomRedirects = result.lingvaTorCustomRedirects;
-      });
-  });
+  browser.storage.local.get(
+    [
+      "translateDisable",
+      "translateFrontend",
+      "translateProtocol",
+      "translateRedirects",
+
+      "simplyTranslateNormalRedirectsChecks",
+      "simplyTranslateNormalCustomRedirects",
+      "simplyTranslateTorRedirectsChecks",
+      "simplyTranslateTorCustomRedirects",
+
+      "lingvaNormalRedirectsChecks",
+      "lingvaNormalCustomRedirects",
+      "lingvaTorRedirectsChecks",
+      "lingvaTorCustomRedirects",
+
+      "translateFrom",
+      "translateTo",
+      "simplyTranslateEngine",
+    ],
+    result => {
+      disable = result.translateDisable;
+      frontend = result.translateFrontend;
+      protocol = result.translateProtocol;
+
+      from = result.translateFrom;
+      to = result.translateTo;
+      simplyTranslateEngine = result.simplyTranslateEngine;
+
+      redirects = result.translateRedirects;
+
+      simplyTranslateNormalRedirectsChecks = result.simplyTranslateNormalRedirectsChecks;
+      simplyTranslateNormalCustomRedirects = result.simplyTranslateNormalCustomRedirects;
+
+      simplyTranslateTorRedirectsChecks = result.simplyTranslateTorRedirectsChecks;
+      simplyTranslateTorCustomRedirects = result.simplyTranslateTorCustomRedirects;
+
+      lingvaNormalRedirectsChecks = result.lingvaNormalRedirectsChecks;
+      lingvaNormalCustomRedirects = result.lingvaNormalCustomRedirects;
+
+      lingvaTorRedirectsChecks = result.lingvaTorRedirectsChecks;
+      lingvaTorCustomRedirects = result.lingvaTorCustomRedirects;
+    });
 }
 
 export default {
diff --git a/src/assets/javascripts/helpers/twitter.js b/src/assets/javascripts/helpers/twitter.js
index 250b9050..2a213a80 100644
--- a/src/assets/javascripts/helpers/twitter.js
+++ b/src/assets/javascripts/helpers/twitter.js
@@ -219,37 +219,44 @@ async function initDefaults() {
   await fetch('/instances/data.json').then(response => response.text()).then(async data => {
     let dataJson = JSON.parse(data);
     redirects.nitter = dataJson.nitter;
-    await browser.storage.local.set({
-      disableTwitter: false,
-
-      enableTwitterCustomSettings: false,
-
-      twitterRedirects: redirects,
-      bypassWatchOnTwitter: true,
-
-      nitterNormalRedirectsChecks: [...redirects.nitter.normal],
-      nitterNormalCustomRedirects: [],
-
-      nitterTorRedirectsChecks: [...redirects.nitter.tor],
-      nitterTorCustomRedirects: [],
-
-      twitterProtocol: "normal",
-      alwaysUsePreferred: false,
-
-      nitterTheme: 'Auto',
-      nitterInfiniteScroll: false,
-      nitterStickyProfile: true,
-      nitterBidiSupport: false,
-      nitterHideTweetStats: false,
-      nitterHideBanner: false,
-      nitterHidePins: false,
-      nitterHideReplies: false,
-      nitterSquareAvatars: false,
-      nitterMp4Playback: true,
-      nitterHlsPlayback: false,
-      nitterProxyVideos: true,
-      nitterMuteVideos: false,
-      nitterAutoplayGifs: true,
+    browser.storage.local.get('cloudflareList', async r => {
+      nitterNormalRedirectsChecks = [...redirects.nitter.normal];
+      for (const instance of r.cloudflareList) {
+        let i = nitterNormalRedirectsChecks.indexOf(instance);
+        if (i > -1) nitterNormalRedirectsChecks.splice(i, 1);
+      }
+      await browser.storage.local.set({
+        disableTwitter: false,
+
+        enableTwitterCustomSettings: false,
+
+        twitterRedirects: redirects,
+        bypassWatchOnTwitter: true,
+
+        nitterNormalRedirectsChecks: nitterNormalRedirectsChecks,
+        nitterNormalCustomRedirects: [],
+
+        nitterTorRedirectsChecks: [...redirects.nitter.tor],
+        nitterTorCustomRedirects: [],
+
+        twitterProtocol: "normal",
+        alwaysUsePreferred: false,
+
+        nitterTheme: 'Auto',
+        nitterInfiniteScroll: false,
+        nitterStickyProfile: true,
+        nitterBidiSupport: false,
+        nitterHideTweetStats: false,
+        nitterHideBanner: false,
+        nitterHidePins: false,
+        nitterHideReplies: false,
+        nitterSquareAvatars: false,
+        nitterMp4Playback: true,
+        nitterHlsPlayback: false,
+        nitterProxyVideos: true,
+        nitterMuteVideos: false,
+        nitterAutoplayGifs: true,
+      })
     })
   })
 }
diff --git a/src/assets/javascripts/helpers/wikipedia.js b/src/assets/javascripts/helpers/wikipedia.js
index 04ba51b9..b11eb1d2 100644
--- a/src/assets/javascripts/helpers/wikipedia.js
+++ b/src/assets/javascripts/helpers/wikipedia.js
@@ -141,21 +141,29 @@ async function initDefaults() {
   fetch('/instances/data.json').then(response => response.text()).then(async data => {
     let dataJson = JSON.parse(data);
     redirects.wikiless = dataJson.wikiless;
-    await browser.storage.local.set({
-      disableWikipedia: true,
-      wikipediaRedirects: redirects,
-      wikilessNormalRedirectsChecks: [...redirects.wikiless.normal],
-      wikilessTorRedirectsChecks: [...redirects.wikiless.tor],
-      wikilessI2pRedirectsChecks: [...redirects.wikiless.i2p],
-      wikilessNormalCustomRedirects: [],
-      wikilessTorCustomRedirects: [],
-      wikilessI2pCustomRedirects: [],
-      wikipediaProtocol: "normal",
-
-      theme: 'DEFAULT',
-      applyThemeToSites: false,
+    browser.storage.local.get('cloudflareList', async r => {
+      wikilessNormalRedirectsChecks = [...redirects.wikiless.normal];
+      for (const instance of r.cloudflareList) {
+        let i;
+
+        i = wikilessNormalRedirectsChecks.indexOf(instance);
+        if (i > -1) wikilessNormalRedirectsChecks.splice(i, 1);
+      }
+      await browser.storage.local.set({
+        disableWikipedia: true,
+        wikipediaRedirects: redirects,
+        wikilessNormalRedirectsChecks: wikilessNormalRedirectsChecks,
+        wikilessTorRedirectsChecks: [...redirects.wikiless.tor],
+        wikilessI2pRedirectsChecks: [...redirects.wikiless.i2p],
+        wikilessNormalCustomRedirects: [],
+        wikilessTorCustomRedirects: [],
+        wikilessI2pCustomRedirects: [],
+        wikipediaProtocol: "normal",
+
+        theme: 'DEFAULT',
+        applyThemeToSites: false,
+      })
     })
-
   })
 }
 
diff --git a/src/assets/javascripts/helpers/youtube/youtube.js b/src/assets/javascripts/helpers/youtube/youtube.js
index 193a4ec3..7c4ad8c8 100644
--- a/src/assets/javascripts/helpers/youtube/youtube.js
+++ b/src/assets/javascripts/helpers/youtube/youtube.js
@@ -25,21 +25,8 @@ let redirects = {
     "tor": []
   },
   "piped": {
-    "normal": [
-      "https://piped.kavin.rocks",
-      "https://piped.silkky.cloud",
-      "https://piped.tokhmi.xyz",
-      "https://piped.moomoo.me",
-      "https://il.ax",
-      "https://piped.syncpundit.com",
-      "https://piped.mha.fi",
-      "https://piped.mint.lgbt",
-      "https://piped.privacy.com.de",
-      "https://piped.notyourcomputer.net"
-    ],
-    "tor": [
-      "http://piped2bbch4xslbl2ckr6k62q56kon56ffowxaqzy42ai22a4sash3ad.onion"
-    ]
+    "normal": [],
+    "tor": []
   },
   "pipedMaterial": {
     "normal": [
@@ -52,28 +39,32 @@ let redirects = {
 
 const getRedirects = () => redirects;
 
-let invidiousNormalRedirectsChecks;
-let invidiousNormalCustomRedirects = [];
-let invidiousTorRedirectsChecks;
-let invidiousTorCustomRedirects = [];
-
-let pipedNormalRedirectsChecks;
-let pipedNormalCustomRedirects = [];
-let pipedTorRedirectsChecks;
-let pipedTorCustomRedirects = [];
-
-let pipedMaterialNormalRedirectsChecks;
-let pipedMaterialNormalCustomRedirects = [];
-let pipedMaterialTorRedirectsChecks;
-let pipedMaterialTorCustomRedirects = [];
-
-let disable;
-let protocol;
-let OnlyEmbeddedVideo;
-let frontend;
-let youtubeEmbedFrontend;
-let bypassWatchOnYoutube;
-let alwaysUsePreferred;
+let
+  invidiousNormalRedirectsChecks,
+  invidiousNormalCustomRedirects,
+  invidiousTorRedirectsChecks,
+  invidiousTorCustomRedirects;
+
+let
+  pipedNormalRedirectsChecks,
+  pipedNormalCustomRedirects,
+  pipedTorRedirectsChecks,
+  pipedTorCustomRedirects;
+
+let
+  pipedMaterialNormalRedirectsChecks,
+  pipedMaterialNormalCustomRedirects,
+  pipedMaterialTorRedirectsChecks,
+  pipedMaterialTorCustomRedirects;
+
+let
+  disable,
+  protocol,
+  OnlyEmbeddedVideo,
+  frontend,
+  youtubeEmbedFrontend,
+  bypassWatchOnYoutube,
+  alwaysUsePreferred;
 
 function redirect(url, details, initiator) {
   if (disable) return null;
@@ -309,54 +300,69 @@ function isPipedorInvidious(url, type, frontend) {
 }
 
 async function initDefaults() {
-  console.log('youtube initDefaults')
   return new Promise(async resolve => {
     fetch('/instances/data.json').then(response => response.text()).then(async data => {
       let dataJson = JSON.parse(data);
       redirects.invidious = dataJson.invidious;
-      await browser.storage.local.set({
-        disableYoutube: false,
-        enableYoutubeCustomSettings: false,
-        OnlyEmbeddedVideo: 'both',
+      redirects.piped = dataJson.piped;
+      browser.storage.local.get('cloudflareList', async r => {
 
-        youtubeRedirects: {
-          'invidious': dataJson.invidious,
-          'piped': redirects.piped,
-          'pipedMaterial': redirects.pipedMaterial
-        },
+        invidiousNormalRedirectsChecks = [...redirects.invidious.normal];
+        pipedNormalRedirectsChecks = [...redirects.piped.normal];
+        pipedMaterialNormalRedirectsChecks = [...redirects.pipedMaterial.normal];
 
-        youtubeFrontend: 'invidious',
+        for (const instance of r.cloudflareList) {
+          let i;
 
-        invidiousNormalRedirectsChecks: [...redirects.invidious.normal],
-        invidiousNormalCustomRedirects: [],
+          i = invidiousNormalRedirectsChecks.indexOf(instance);
+          if (i > -1) invidiousNormalRedirectsChecks.splice(i, 1);
 
-        invidiousTorRedirectsChecks: [...redirects.invidious.tor],
-        invidiousTorCustomRedirects: [],
+          i = pipedNormalRedirectsChecks.indexOf(instance);
+          if (i > -1) pipedNormalRedirectsChecks.splice(i, 1);
 
-        pipedNormalRedirectsChecks: [...redirects.piped.normal],
-        pipedNormalCustomRedirects: [],
+          i = pipedMaterialNormalRedirectsChecks.indexOf(instance);
+          if (i > -1) pipedMaterialNormalRedirectsChecks.splice(i, 1);
+        }
 
-        pipedTorRedirectsChecks: [...redirects.piped.tor],
-        pipedTorCustomRedirects: [],
+        await browser.storage.local.set({
+          disableYoutube: false,
+          enableYoutubeCustomSettings: false,
+          OnlyEmbeddedVideo: 'both',
 
-        pipedMaterialNormalRedirectsChecks: [...redirects.pipedMaterial.normal],
-        pipedMaterialNormalCustomRedirects: [],
+          youtubeRedirects: redirects,
 
-        pipedMaterialTorRedirectsChecks: [...redirects.pipedMaterial.tor],
-        pipedMaterialTorCustomRedirects: [],
+          youtubeFrontend: 'invidious',
 
-        alwaysUsePreferred: false,
-        youtubeEmbedFrontend: 'invidious',
-        youtubeProtocol: 'normal',
-        bypassWatchOnYoutube: true,
-      })
+          invidiousNormalRedirectsChecks: invidiousNormalRedirectsChecks,
+          invidiousNormalCustomRedirects: [],
 
-      await invidious.initDefaults();
-      await piped.initDefaults();
-      await pipedMaterial.initDefaults();
-      resolve();
-    }
-    )
+          invidiousTorRedirectsChecks: [...redirects.invidious.tor],
+          invidiousTorCustomRedirects: [],
+
+          pipedNormalRedirectsChecks: pipedNormalRedirectsChecks,
+          pipedNormalCustomRedirects: [],
+
+          pipedTorRedirectsChecks: [...redirects.piped.tor],
+          pipedTorCustomRedirects: [],
+
+          pipedMaterialNormalRedirectsChecks: pipedMaterialNormalRedirectsChecks,
+          pipedMaterialNormalCustomRedirects: [],
+
+          pipedMaterialTorRedirectsChecks: [...redirects.pipedMaterial.tor],
+          pipedMaterialTorCustomRedirects: [],
+
+          alwaysUsePreferred: false,
+          youtubeEmbedFrontend: 'invidious',
+          youtubeProtocol: 'normal',
+          bypassWatchOnYoutube: true,
+        })
+
+        await invidious.initDefaults();
+        await piped.initDefaults();
+        await pipedMaterial.initDefaults();
+        resolve();
+      })
+    })
   })
 }
 
diff --git a/src/assets/javascripts/helpers/youtubeMusic.js b/src/assets/javascripts/helpers/youtubeMusic.js
index ef707855..0b06bfa3 100644
--- a/src/assets/javascripts/helpers/youtubeMusic.js
+++ b/src/assets/javascripts/helpers/youtubeMusic.js
@@ -68,7 +68,9 @@ function redirect(url, type) {
 
 async function initDefaults() {
     await browser.storage.local.set({
-        disableYoutubeMusic: false,
+        disableYoutubeMusic: true,
+
+        youtubeMusicRedirects: redirects,
 
         beatbumpNormalRedirectsChecks: [...redirects.beatbump.normal],
         beatbumpNormalCustomRedirects: [],
diff --git a/src/instances/cloudflare.json b/src/instances/cloudflare.json
index 626c8ec5..ecaae2e9 100644
--- a/src/instances/cloudflare.json
+++ b/src/instances/cloudflare.json
@@ -1,7 +1,13 @@
 [
   "https://invidious.kavin.rocks",
-  "https://invidious-us.kavin.rocks",
   "https://invidious.lunar.icu",
+  "https://invidious-us.kavin.rocks",
+  "https://piped.kavin.rocks",
+  "https://piped.silkky.cloud",
+  "https://piped.tokhmi.xyz",
+  "https://piped.moomoo.me",
+  "https://piped.syncpundit.com",
+  "https://piped.mha.fi",
   "https://send.silkky.cloud",
   "https://nhanh.cloud",
   "https://nitter.domain.glass",
@@ -37,12 +43,12 @@
   "https://wiki.604kph.xyz",
   "https://wikiless.lunar.icu",
   "https://translate.syncpundit.com",
+  "https://lingva.lunar.icu",
   "https://searx.josie.lol",
   "https://searx.kujonello.cf",
   "https://searx.org",
   "https://searx.run",
   "https://searx.tk",
-  "https://s.alefvanoon.xyz",
   "https://search.albony.xyz",
   "https://search.garudalinux.org",
   "https://whoogle.lunar.icu",
diff --git a/src/instances/data.json b/src/instances/data.json
index 64ada2d4..59c0148c 100644
--- a/src/instances/data.json
+++ b/src/instances/data.json
@@ -6,7 +6,6 @@
       "https://invidious.snopyta.org",
       "https://invidious.kavin.rocks",
       "https://inv.riverside.rocks",
-      "https://invidious-us.kavin.rocks",
       "https://invidious.osi.kr",
       "https://y.com.sb",
       "https://tube.cthd.icu",
@@ -15,12 +14,13 @@
       "https://invidious.lunar.icu",
       "https://invidious.mutahar.rocks",
       "https://invidious.sethforprivacy.com",
+      "https://inv.bp.projectsegfau.lt",
       "https://invidious.weblibre.org",
       "https://invidious.esmailelbob.xyz",
       "https://youtube.076.ne.jp",
       "https://invidious.privacy.gd",
-      "https://inv.bp.mutahar.rocks",
-      "https://invidious.namazso.eu"
+      "https://invidious.namazso.eu",
+      "https://invidious-us.kavin.rocks"
     ],
     "tor": [
       "http://c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion",
@@ -34,6 +34,23 @@
       "http://euxxcnhsynwmfidvhjf6uzptsmh4dipkmgdmcmxxuo7tunp3ad2jrwyd.onion/"
     ]
   },
+  "piped": {
+    "normal": [
+      "https://piped.kavin.rocks",
+      "https://piped.silkky.cloud",
+      "https://piped.tokhmi.xyz",
+      "https://piped.moomoo.me",
+      "https://il.ax",
+      "https://piped.syncpundit.com",
+      "https://piped.mha.fi",
+      "https://piped.mint.lgbt",
+      "https://piped.privacy.com.de",
+      "https://piped.notyourcomputer.net"
+    ],
+    "tor": [
+      "http://piped2bbch4xslbl2ckr6k62q56kon56ffowxaqzy42ai22a4sash3ad.onion"
+    ]
+  },
   "proxiTok": {
     "normal": [
       "https://proxitok.herokuapp.com",
@@ -113,7 +130,6 @@
       "https://nitter.poast.org",
       "https://nitter.lunar.icu",
       "https://nitter.bird.froth.zone",
-      "https://nitter.drivet.xyz",
       "https://twitter.paranoid.cf"
     ],
     "tor": [
@@ -312,7 +328,8 @@
       "https://lingva.pussthecat.org",
       "https://translate.datatunnel.xyz",
       "https://lingva.esmailelbob.xyz",
-      "https://translate.plausibility.cloud"
+      "https://translate.plausibility.cloud",
+      "https://lingva.lunar.icu"
     ],
     "tor": []
   },
@@ -336,7 +353,6 @@
       "https://engo.mint.lgbt",
       "https://jsearch.pw",
       "https://nibblehole.com",
-      "https://procurx.pt",
       "https://search.antonkling.se",
       "https://search.asynchronousexchange.com",
       "https://search.disroot.org",
@@ -393,6 +409,7 @@
     "tor": [
       "http://w5rl6wsd7mzj4bdkbuqvzidet5osdsm5jhg2f7nvfidakfq5exda5wid.onion",
       "http://4n53nafyi77iplnbrpmxnp3x4exbswwxigujaxy3b37fvr7bvlopxeyd.onion",
+      "http://searxdr3pqz4nydgnqocsia2xbywptxbkympa2emn7zlgggrir4bkfad.onion",
       "http://rq2w52kyrif3xpfihkgjnhqm3a5aqhoikpv72z3drpjglfzc2wr5z4yd.onion",
       "http://searx3aolosaf3urwnhpynlhuokqsgz47si4pzz5hvb7uuzyjncl2tid.onion"
     ],
@@ -402,6 +419,7 @@
       "https://etsi.me",
       "https://northboot.xyz",
       "https://paulgo.io",
+      "https://procurx.pt",
       "https://s.zhaocloud.net",
       "https://search.bus-hit.me",
       "https://search.mdosch.de",
@@ -411,6 +429,7 @@
       "https://search.rabbit-company.com",
       "https://search.vojkovic.xyz",
       "https://search.zzls.xyz",
+      "https://searx.bardia.tech",
       "https://searx.be",
       "https://searx.ebnar.xyz",
       "https://searx.esmailelbob.xyz",
@@ -430,7 +449,7 @@
   "whoogle": {
     "normal": [
       "https://gowogle.voring.me",
-      "https://s.alefvanoon.xyz",
+      "https://s.tokhmi.xyz",
       "https://search.albony.xyz",
       "https://search.garudalinux.org",
       "https://search.sethforprivacy.com",
@@ -466,8 +485,11 @@
     ]
   },
   "peertube": [
+    "https://video.toby3d.me",
+    "https://videos.grafo.zone",
+    "https://tube.bakosi.org",
+    "https://tube.chocoflan.net",
     "https://video.pthreat.co",
-    "https://viet69.ml",
     "https://peertube.egroc.de",
     "https://zcxfruit.ru",
     "https://pt.k2s.sk",
@@ -580,14 +602,12 @@
     "https://tube.moec.top",
     "https://tube.erzbistum-hamburg.de",
     "https://video.germanische-heilkunde.at",
-    "https://pt.irnok.net",
     "https://tubulus.openlatin.org",
     "https://shiotube.f5.si",
     "https://views.southfox.me",
     "https://vide.oxel.me",
     "https://video.mttv.it",
     "https://peertube.cloud.nerdraum.de",
-    "https://v.jrgnsn.net",
     "https://vid.pretok.tv",
     "https://videos.slownewsdayshow.com",
     "https://videos.sarcasmstardust.com",
@@ -651,7 +671,6 @@
     "https://aktivtube.com",
     "https://peertube.offerman.com",
     "https://sneedtube.com",
-    "https://venuse.nastub.cz",
     "https://poast.tv",
     "https://testube.distrilab.fr",
     "https://peertube.rse43.com",
@@ -705,7 +724,6 @@
     "https://watch.rt4mn.org",
     "https://video.lrose.de",
     "https://video.chalec.org",
-    "https://galileo.news",
     "https://dud175.inf.tu-dresden.de",
     "https://peertube.fenarinarsa.com",
     "https://peertube.gardion.de",
@@ -732,7 +750,6 @@
     "https://peertube.aventer.biz",
     "https://video.bhscs2.club",
     "https://videos.rights.ninja",
-    "https://videos.piecemaker.rocks",
     "https://tube.die-rote-front.de",
     "https://v.endpoint.ml",
     "https://pertur.be",
@@ -744,9 +761,7 @@
     "https://open.movie",
     "https://tube.rfc1149.net",
     "https://tube.radiomercure.fr",
-    "https://video.3cmr.fr",
     "https://medias.debrouillonet.org",
-    "https://vid.thatswhathappened.tv",
     "https://peertube.1984.cz",
     "https://tube.sp4ke.com",
     "https://pt.nix.uno",
@@ -793,7 +808,6 @@
     "https://video.interru.io",
     "https://tube.cnr.it",
     "https://peertube.dtmf.ca",
-    "https://tube.tr4sk.me",
     "https://peertube.dk",
     "https://tube.ponsonaille.fr",
     "https://peertube.ares.bioxis-server.fr",
@@ -811,7 +825,6 @@
     "https://peertube.redpill-insight.com",
     "https://tube.22decembre.eu",
     "https://video.berzs.xyz",
-    "https://invoice.peertube.biz",
     "https://pt.sfunk1x.com",
     "https://video.antopie.org",
     "https://vtr.chikichiki.tube",
@@ -1083,7 +1096,6 @@
     "https://tube.pmj.rocks",
     "https://gary.vger.cloud",
     "https://video.guerredeclasse.fr",
-    "https://tube.wehost.lgbt",
     "https://ptmir5.inter21.net",
     "https://ptmir4.inter21.net",
     "https://ptmir3.inter21.net",
@@ -1187,7 +1199,6 @@
     "https://video.p1ng0ut.social",
     "https://watch.deranalyst.ch",
     "https://video.discord-insoumis.fr",
-    "https://peertube.forsud.be",
     "https://video.pcf.fr",
     "https://kumi.tube",
     "https://tube.rsi.cnr.it",
@@ -1510,6 +1521,14 @@
     "https://video.lw1.at",
     "https://www.yiny.org",
     "https://video.typica.us",
-    "https://videos.lescommuns.org"
+    "https://videos.lescommuns.org",
+    "https://dialup.express",
+    "https://peertube.1312.media",
+    "https://skeptikon.fr",
+    "https://video.blueline.mg",
+    "https://tube.homecomputing.fr",
+    "https://video.tedomum.net",
+    "https://video.g3l.org",
+    "https://fontube.fr"
   ]
 }
\ No newline at end of file
diff --git a/src/instances/get_instances.py b/src/instances/get_instances.py
index e8e1952f..7b62a9f7 100644
--- a/src/instances/get_instances.py
+++ b/src/instances/get_instances.py
@@ -67,260 +67,279 @@ def is_cloudflare(url):
     return False
 
 
-# Invidious
-r = requests.get('https://api.invidious.io/instances.json')
-rJson = json.loads(r.text)
-invidiousList = {}
-invidiousList['normal'] = []
-invidiousList['tor'] = []
-for instance in rJson:
-    if instance[1]['type'] == 'https':
-        invidiousList['normal'].append(instance[1]['uri'])
-    elif instance[1]['type'] == 'onion':
-        invidiousList['tor'].append(instance[1]['uri'])
-mightyList['invidious'] = invidiousList
-print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Invidious')
-
-# ProxiTok
-r = requests.get(
-    'https://raw.githubusercontent.com/wiki/pablouser1/ProxiTok/Public-instances.md')
-
-tmp = re.findall(
-    r"\| \[.*\]\(([-a-zA-Z0-9@:%_\+.~#?&//=]{2,}\.[a-z]{2,}\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)\)*\|*[A-Z]{0,}.*\|.*\|", r.text)
-proxiTokList = {}
-proxiTokList['normal'] = []
-proxiTokList['tor'] = []
-for item in tmp:
-    proxiTokList['normal'].append(item)
-mightyList['proxiTok'] = proxiTokList
-print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'ProxiTok')
-
-# Send
-r = requests.get(
-    'https://gitlab.com/timvisee/send-instances/-/raw/master/README.md')
-tmp = re.findall(
-    r"- ([-a-zA-Z0-9@:%_\+.~#?&//=]{2,}\.[a-z0-9]{2,}\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)\)*\|*[A-Z]{0,}", r.text)
-sendList = {}
-sendList['normal'] = []
-sendList['tor'] = []
-for item in tmp:
-    sendList['normal'].append(item)
-mightyList['send'] = sendList
-print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Send')
-
-# Nitter
-r = requests.get('https://github.com/zedeus/nitter/wiki/Instances')
-soup = BeautifulSoup(r.text, 'html.parser')
-markdownBody = soup.find(class_='markdown-body')
-tables = markdownBody.find_all('table')
-tables.pop(3)
-tables.pop(3)
-nitterList = {}
-nitterList['normal'] = []
-nitterList['tor'] = []
-for table in tables:
-    tbody = table.find('tbody')
-    trs = tbody.find_all('tr')
-    for tr in trs:
-        td = tr.find('td')
-        a = td.find('a')
-        url = a.contents[0]
-        if url.endswith('.onion'):
-            url = 'http://' + url
-            nitterList['tor'].append(url)
+def invidious():
+    r = requests.get('https://api.invidious.io/instances.json')
+    rJson = json.loads(r.text)
+    invidiousList = {}
+    invidiousList['normal'] = []
+    invidiousList['tor'] = []
+    for instance in rJson:
+        if instance[1]['type'] == 'https':
+            invidiousList['normal'].append(instance[1]['uri'])
+        elif instance[1]['type'] == 'onion':
+            invidiousList['tor'].append(instance[1]['uri'])
+    mightyList['invidious'] = invidiousList
+    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Invidious')
+
+
+def piped():
+    json_object = json.dumps(mightyList, ensure_ascii=False, indent=2)
+    with open('./src/instances/piped.json') as file:
+        mightyList['piped'] = json.load(file)
+    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Piped')
+
+
+def proxitok():
+    r = requests.get(
+        'https://raw.githubusercontent.com/wiki/pablouser1/ProxiTok/Public-instances.md')
+
+    tmp = re.findall(
+        r"\| \[.*\]\(([-a-zA-Z0-9@:%_\+.~#?&//=]{2,}\.[a-z]{2,}\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)\)*\|*[A-Z]{0,}.*\|.*\|", r.text)
+    proxiTokList = {}
+    proxiTokList['normal'] = []
+    proxiTokList['tor'] = []
+    for item in tmp:
+        proxiTokList['normal'].append(item)
+    mightyList['proxiTok'] = proxiTokList
+    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'ProxiTok')
+
+
+def send():
+    r = requests.get(
+        'https://gitlab.com/timvisee/send-instances/-/raw/master/README.md')
+    tmp = re.findall(
+        r"- ([-a-zA-Z0-9@:%_\+.~#?&//=]{2,}\.[a-z0-9]{2,}\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)\)*\|*[A-Z]{0,}", r.text)
+    sendList = {}
+    sendList['normal'] = []
+    sendList['tor'] = []
+    for item in tmp:
+        sendList['normal'].append(item)
+    mightyList['send'] = sendList
+    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Send')
+
+
+def nitter():
+    r = requests.get('https://github.com/zedeus/nitter/wiki/Instances')
+    soup = BeautifulSoup(r.text, 'html.parser')
+    markdownBody = soup.find(class_='markdown-body')
+    tables = markdownBody.find_all('table')
+    tables.pop(3)
+    tables.pop(3)
+    nitterList = {}
+    nitterList['normal'] = []
+    nitterList['tor'] = []
+    for table in tables:
+        tbody = table.find('tbody')
+        trs = tbody.find_all('tr')
+        for tr in trs:
+            td = tr.find('td')
+            a = td.find('a')
+            url = a.contents[0]
+            if url.endswith('.onion'):
+                url = 'http://' + url
+                nitterList['tor'].append(url)
+            else:
+                url = 'https://' + url
+                nitterList['normal'].append(url)
+    mightyList['nitter'] = nitterList
+    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Nitter')
+
+
+def bibliogram():
+    r = requests.get('https://bibliogram.pussthecat.org/api/instances')
+    rJson = json.loads(r.text)
+    bibliogramList = {}
+    bibliogramList['normal'] = []
+    bibliogramList['tor'] = []
+    for item in rJson['data']:
+        bibliogramList['normal'].append(item['address'])
+    mightyList['bibliogram'] = bibliogramList
+    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Bibliogram')
+
+
+def libreddit():
+    r = requests.get(
+        'https://raw.githubusercontent.com/spikecodes/libreddit/master/README.md')
+    libredditList = {}
+    libredditList['normal'] = []
+    libredditList['tor'] = []
+
+    tmp = re.findall(
+        r"\| \[.*\]\(([-a-zA-Z0-9@:%_\+.~#?&//=]{2,}\.[a-z]{2,}\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)\)*\|*[A-Z]{0,}.*\|.*\|", r.text)
+
+    tmp = filterLastSlash(tmp)
+
+    for item in tmp:
+        if item.endswith('.onion'):
+            libredditList['tor'].append(item)
         else:
-            url = 'https://' + url
-            nitterList['normal'].append(url)
-mightyList['nitter'] = nitterList
-print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Nitter')
-
-# Bibliogram
-r = requests.get('https://bibliogram.pussthecat.org/api/instances')
-rJson = json.loads(r.text)
-bibliogramList = {}
-bibliogramList['normal'] = []
-bibliogramList['tor'] = []
-for item in rJson['data']:
-    bibliogramList['normal'].append(item['address'])
-mightyList['bibliogram'] = bibliogramList
-print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Bibliogram')
-
-# LibReddit
-r = requests.get(
-    'https://raw.githubusercontent.com/spikecodes/libreddit/master/README.md')
-libredditList = {}
-libredditList['normal'] = []
-libredditList['tor'] = []
-
-tmp = re.findall(
-    r"\| \[.*\]\(([-a-zA-Z0-9@:%_\+.~#?&//=]{2,}\.[a-z]{2,}\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)\)*\|*[A-Z]{0,}.*\|.*\|", r.text)
-
-tmp = filterLastSlash(tmp)
-
-for item in tmp:
-    if item.endswith('.onion'):
-        libredditList['tor'].append(item)
-    else:
-        libredditList['normal'].append(item)
-mightyList['libreddit'] = libredditList
-print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'LibReddit')
-
-# Teddit
-r = requests.get(
-    'https://codeberg.org/teddit/teddit/raw/branch/main/instances.json')
-rJson = json.loads(r.text)
-tedditList = {}
-tedditList['normal'] = []
-tedditList['tor'] = []
-for item in rJson:
-    url = item['url']
-    if url != '':
-        tedditList['normal'].append(url)
-    if 'onion' in item:
-        onion = item['onion']
-        if onion != '':
-            tedditList['tor'].append(onion)
-
-mightyList['teddit'] = tedditList
-print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Teddit')
-
-
-# Wikiless
-r = requests.get('https://wikiless.org/instances.json')
-rJson = json.loads(r.text)
-wikilessList = {}
-wikilessList['normal'] = []
-wikilessList['tor'] = []
-wikilessList['i2p'] = []
-for item in rJson:
-    if item.endswith('.onion'):
-        wikilessList['tor'].append('http://' + item)
-    elif item.endswith('.i2p'):
-        wikilessList['i2p'].append('http://' + item)
-    else:
-        wikilessList['normal'].append('https://' + item)
-mightyList['wikiless'] = wikilessList
-print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Wikiless')
-
-# Scribe
-r = requests.get(
-    'https://git.sr.ht/~edwardloveall/scribe/blob/main/docs/instances.json')
-rJson = json.loads(r.text)
-scribeList = {}
-scribeList['normal'] = []
-scribeList['tor'] = []
-for item in rJson:
-    scribeList['normal'].append(item)
-mightyList['scribe'] = scribeList
-print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Scribe')
-
-# SimplyTranslate
-r = requests.get('https://simple-web.org/instances/simplytranslate')
-simplyTranslateList = {}
-simplyTranslateList['normal'] = []
-for item in r.text.strip().split('\n'):
-    simplyTranslateList['normal'].append('https://' + item)
-
-r = requests.get('https://simple-web.org/instances/simplytranslate_onion')
-simplyTranslateList['tor'] = []
-for item in r.text.strip().split('\n'):
-    simplyTranslateList['tor'].append('http://' + item)
-
-mightyList['simplyTranslate'] = simplyTranslateList
-print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'SimplyTranslate')
-
-# LinvgaTranslate
-r = requests.get(
-    'https://raw.githubusercontent.com/TheDavidDelta/lingva-translate/main/instances.json')
-rJson = json.loads(r.text)
-lingvaList = {}
-lingvaList['normal'] = []
-lingvaList['tor'] = []
-for item in rJson:
-    lingvaList['normal'].append(item)
-mightyList['lingva'] = lingvaList
-print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'LinvgaTranslate')
-
-
-# SearX, SearXNG
-r = requests.get('https://searx.space/data/instances.json')
-rJson = json.loads(r.text)
-searxList = {}
-searxList['tor'] = []
-searxList['i2p'] = []
-searxList['normal'] = []
-searxngList = {}
-searxngList['tor'] = []
-searxngList['i2p'] = []
-searxngList['normal'] = []
-for item in rJson['instances']:
-    if item[:-1].endswith('.onion'):
-        if (rJson['instances'][item].get('generator') == 'searxng'):
-            searxngList['tor'].append(item[:-1])
+            libredditList['normal'].append(item)
+    mightyList['libreddit'] = libredditList
+    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'LibReddit')
+
+
+def teddit():
+    r = requests.get(
+        'https://codeberg.org/teddit/teddit/raw/branch/main/instances.json')
+    rJson = json.loads(r.text)
+    tedditList = {}
+    tedditList['normal'] = []
+    tedditList['tor'] = []
+    for item in rJson:
+        url = item['url']
+        if url != '':
+            tedditList['normal'].append(url)
+        if 'onion' in item:
+            onion = item['onion']
+            if onion != '':
+                tedditList['tor'].append(onion)
+
+    mightyList['teddit'] = tedditList
+    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Teddit')
+
+
+def wikiless():
+    r = requests.get('https://wikiless.org/instances.json')
+    rJson = json.loads(r.text)
+    wikilessList = {}
+    wikilessList['normal'] = []
+    wikilessList['tor'] = []
+    wikilessList['i2p'] = []
+    for item in rJson:
+        if item.endswith('.onion'):
+            wikilessList['tor'].append('http://' + item)
+        elif item.endswith('.i2p'):
+            wikilessList['i2p'].append('http://' + item)
         else:
-            searxList['tor'].append(item[:-1])
-    elif item[:-1].endswith('.i2p'):
-        if (rJson['instances'][item].get('generator') == 'searxng'):
-            searxngList['i2p'].append(item[:-1])
+            wikilessList['normal'].append('https://' + item)
+    mightyList['wikiless'] = wikilessList
+    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Wikiless')
+
+
+def scribe():
+    r = requests.get(
+        'https://git.sr.ht/~edwardloveall/scribe/blob/main/docs/instances.json')
+    rJson = json.loads(r.text)
+    scribeList = {}
+    scribeList['normal'] = []
+    scribeList['tor'] = []
+    for item in rJson:
+        scribeList['normal'].append(item)
+    mightyList['scribe'] = scribeList
+    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Scribe')
+
+
+def simplytranslate():
+    r = requests.get('https://simple-web.org/instances/simplytranslate')
+    simplyTranslateList = {}
+    simplyTranslateList['normal'] = []
+    for item in r.text.strip().split('\n'):
+        simplyTranslateList['normal'].append('https://' + item)
+
+    r = requests.get('https://simple-web.org/instances/simplytranslate_onion')
+    simplyTranslateList['tor'] = []
+    for item in r.text.strip().split('\n'):
+        simplyTranslateList['tor'].append('http://' + item)
+
+    mightyList['simplyTranslate'] = simplyTranslateList
+    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'SimplyTranslate')
+
+
+def linvgatranslate():
+    r = requests.get(
+        'https://raw.githubusercontent.com/TheDavidDelta/lingva-translate/main/instances.json')
+    rJson = json.loads(r.text)
+    lingvaList = {}
+    lingvaList['normal'] = []
+    lingvaList['tor'] = []
+    for item in rJson:
+        lingvaList['normal'].append(item)
+    mightyList['lingva'] = lingvaList
+    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'LinvgaTranslate')
+
+
+def searx_searxng():
+    r = requests.get('https://searx.space/data/instances.json')
+    rJson = json.loads(r.text)
+    searxList = {}
+    searxList['tor'] = []
+    searxList['i2p'] = []
+    searxList['normal'] = []
+    searxngList = {}
+    searxngList['tor'] = []
+    searxngList['i2p'] = []
+    searxngList['normal'] = []
+    for item in rJson['instances']:
+        if item[:-1].endswith('.onion'):
+            if (rJson['instances'][item].get('generator') == 'searxng'):
+                searxngList['tor'].append(item[:-1])
+            else:
+                searxList['tor'].append(item[:-1])
+        elif item[:-1].endswith('.i2p'):
+            if (rJson['instances'][item].get('generator') == 'searxng'):
+                searxngList['i2p'].append(item[:-1])
+            else:
+                searxList['i2p'].append(item[:-1])
         else:
-            searxList['i2p'].append(item[:-1])
-    else:
-        if (rJson['instances'][item].get('generator') == 'searxng'):
-            searxngList['normal'].append(item[:-1])
+            if (rJson['instances'][item].get('generator') == 'searxng'):
+                searxngList['normal'].append(item[:-1])
+            else:
+                searxList['normal'].append(item[:-1])
+
+    mightyList['searx'] = searxList
+    mightyList['searxng'] = searxngList
+    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'SearX, SearXNG')
+
+
+def whoogle():
+    r = requests.get(
+        'https://raw.githubusercontent.com/benbusby/whoogle-search/main/misc/instances.txt')
+    tmpList = r.text.strip().split('\n')
+    whoogleList = {}
+    whoogleList['normal'] = []
+    whoogleList['tor'] = []
+    whoogleList['i2p'] = []
+    for item in tmpList:
+        if item.endswith('.onion'):
+            whoogleList['tor'].append(item)
+        elif item.endswith('.i2p'):
+            whoogleList['i2p'].append(item)
         else:
-            searxList['normal'].append(item[:-1])
-
-mightyList['searx'] = searxList
-mightyList['searxng'] = searxngList
-print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'SearX, SearXNG')
-
-# Whoogle
-r = requests.get(
-    'https://raw.githubusercontent.com/benbusby/whoogle-search/main/misc/instances.txt')
-tmpList = r.text.strip().split('\n')
-whoogleList = {}
-whoogleList['normal'] = []
-whoogleList['tor'] = []
-whoogleList['i2p'] = []
-for item in tmpList:
-    if item.endswith('.onion'):
-        whoogleList['tor'].append(item)
-    elif item.endswith('.i2p'):
-        whoogleList['i2p'].append(item)
-    else:
-        whoogleList['normal'].append(item)
-mightyList['whoogle'] = whoogleList
-print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Whoogle')
-
-# Rimgo
-r = requests.get(
-    'https://codeberg.org/video-prize-ranch/rimgo/raw/branch/main/instances.json')
-rJson = json.loads(r.text)
-rimgoList = {}
-rimgoList['normal'] = []
-rimgoList['tor'] = []
-rimgoList['i2p'] = []
-for item in rJson:
-    if item.endswith('.onion'):
-        rimgoList['tor'].append('http://' + item)
-    elif item.endswith('.i2p'):
-        rimgoList['i2p'].append('http://' + item)
-    else:
-        rimgoList['normal'].append('https://' + item)
-mightyList['rimgo'] = rimgoList
-print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Rimgo')
-
-# Peertube
-r = requests.get(
-    'https://instances.joinpeertube.org/api/v1/instances?start=0&count=1045&sort=-createdAt')
-rJson = json.loads(r.text)
-
-myList = []
-for k in rJson['data']:
-    myList.append('https://'+k['host'])
-
-mightyList['peertube'] = myList
-print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Peertube')
+            whoogleList['normal'].append(item)
+    mightyList['whoogle'] = whoogleList
+    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Whoogle')
+
+
+def rimgo():
+    r = requests.get(
+        'https://codeberg.org/video-prize-ranch/rimgo/raw/branch/main/instances.json')
+    rJson = json.loads(r.text)
+    rimgoList = {}
+    rimgoList['normal'] = []
+    rimgoList['tor'] = []
+    rimgoList['i2p'] = []
+    for item in rJson:
+        if item.endswith('.onion'):
+            rimgoList['tor'].append('http://' + item)
+        elif item.endswith('.i2p'):
+            rimgoList['i2p'].append('http://' + item)
+        else:
+            rimgoList['normal'].append('https://' + item)
+    mightyList['rimgo'] = rimgoList
+    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Rimgo')
+
+
+def peertube():
+    r = requests.get(
+        'https://instances.joinpeertube.org/api/v1/instances?start=0&count=1045&sort=-createdAt')
+    rJson = json.loads(r.text)
+
+    myList = []
+    for k in rJson['data']:
+        myList.append('https://'+k['host'])
+
+    mightyList['peertube'] = myList
+    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Peertube')
 
 
 def isValid(url):  # This code is contributed by avanitrachhadiya2155
@@ -331,17 +350,35 @@ def isValid(url):  # This code is contributed by avanitrachhadiya2155
         return False
 
 
+invidious()
+piped()
+proxitok()
+send()
+nitter()
+bibliogram()
+libreddit()
+teddit()
+wikiless()
+scribe()
+simplytranslate()
+linvgatranslate()
+searx_searxng()
+whoogle()
+rimgo()
+
 cloudflareMightyList = []
 for k1, v1 in mightyList.items():
     if type(mightyList[k1]) is dict:
         for k2, v2 in mightyList[k1].items():
             for instance in mightyList[k1][k2]:
-                if (not isValid(instance)):
-                    mightyList[k1][k2].remove(instance)
-                    print("removed " + instance)
-                else:
-                    if not instance.endswith('.onion') and not instance.endswith('.i2p') and is_cloudflare(instance):
-                        cloudflareMightyList.append(instance)
+                # if (not isValid(instance)):
+                #     del mightyList[k1][k2][instance]
+                #     print("removed " + instance)
+                # else:
+                if not instance.endswith('.onion') and not instance.endswith('.i2p') and is_cloudflare(instance):
+                    cloudflareMightyList.append(instance)
+
+peertube()
 
 
 # Writing to file
diff --git a/src/instances/piped.json b/src/instances/piped.json
index fa5cbef0..23cb8855 100644
--- a/src/instances/piped.json
+++ b/src/instances/piped.json
@@ -1,19 +1,17 @@
 {
-  "piped": {
-    "normal": [
-      "https://piped.kavin.rocks",
-      "https://piped.silkky.cloud",
-      "https://piped.tokhmi.xyz",
-      "https://piped.moomoo.me",
-      "https://il.ax",
-      "https://piped.syncpundit.com",
-      "https://piped.mha.fi",
-      "https://piped.mint.lgbt",
-      "https://piped.privacy.com.de",
-      "https://piped.notyourcomputer.net"
-    ],
-    "tor" : [
-      "http://piped2bbch4xslbl2ckr6k62q56kon56ffowxaqzy42ai22a4sash3ad.onion"
-    ]
-  }
-}
+  "normal": [
+    "https://piped.kavin.rocks",
+    "https://piped.silkky.cloud",
+    "https://piped.tokhmi.xyz",
+    "https://piped.moomoo.me",
+    "https://il.ax",
+    "https://piped.syncpundit.com",
+    "https://piped.mha.fi",
+    "https://piped.mint.lgbt",
+    "https://piped.privacy.com.de",
+    "https://piped.notyourcomputer.net"
+  ],
+  "tor": [
+    "http://piped2bbch4xslbl2ckr6k62q56kon56ffowxaqzy42ai22a4sash3ad.onion"
+  ]
+}
\ No newline at end of file
diff --git a/src/pages/background/background.js b/src/pages/background/background.js
index dffcdc5b..65be27ae 100644
--- a/src/pages/background/background.js
+++ b/src/pages/background/background.js
@@ -23,25 +23,28 @@ window.browser = window.browser || window.chrome;
 
 browser.runtime.onInstalled.addListener(async details => {
   if (details.reason == 'install') {
-    youtubeHelper.initDefaults();
-    youtubeMusicHelper.initDefaults();
-    twitterHelper.initDefaults();
-    instagramHelper.initDefaults();
-    mapsHelper.initDefaults();
-    searchHelper.initDefaults();
-    translateHelper.initDefaults();
-    mediumHelper.initDefaults();
-    redditHelper.initDefaults();
-    wikipediaHelper.initDefaults();
-    imgurHelper.initDefaults();
-    tiktokHelper.initDefaults();
-    speedtestHelper.initDefaults();
-    sendTargetsHelper.initDefaults();
-    peertubeHelper.initDefaults();
-    lbryHelper.initDefaults();
-    spotifyHelper.initDefaults();
+    fetch('/instances/cloudflare.json').then(response => response.text()).then(async data => {
+      await browser.storage.local.set({ cloudflareList: JSON.parse(data) })
+      youtubeHelper.initDefaults();
+      youtubeMusicHelper.initDefaults();
+      twitterHelper.initDefaults();
+      instagramHelper.initDefaults();
+      mapsHelper.initDefaults();
+      searchHelper.initDefaults();
+      translateHelper.initDefaults();
+      mediumHelper.initDefaults();
+      redditHelper.initDefaults();
+      wikipediaHelper.initDefaults();
+      imgurHelper.initDefaults();
+      tiktokHelper.initDefaults();
+      speedtestHelper.initDefaults();
+      sendTargetsHelper.initDefaults();
+      peertubeHelper.initDefaults();
+      lbryHelper.initDefaults();
+      spotifyHelper.initDefaults();
+    })
   }
-});
+})
 
 async function wholeInit() {
   await youtubeHelper.init();
diff --git a/src/pages/options/imgur/imgur.js b/src/pages/options/imgur/imgur.js
index 2830f665..597d015b 100644
--- a/src/pages/options/imgur/imgur.js
+++ b/src/pages/options/imgur/imgur.js
@@ -9,7 +9,7 @@ document.addEventListener("change", async () => {
         disableImgur: !disableImgurElement.checked,
         imgurProtocol: protocolElement.value,
     });
-    init();
+    changeProtocolSettings(protocolElement.value);
 })
 
 function changeProtocolSettings(protocol) {
@@ -33,44 +33,21 @@ function changeProtocolSettings(protocol) {
     }
 }
 
-function init() {
-    imgurHelper.init().then(() => {
-        browser.storage.local.get(
-            [
-                "disableImgur",
-                "imgurProtocol",
-            ],
-            r => {
-                disableImgurElement.checked = !r.disableImgur;
-                protocolElement.value = r.imgurProtocol;
-                changeProtocolSettings(r.imgurProtocol);
-            }
-        );
-
-
-        commonHelper.processDefaultCustomInstances(
-            'rimgo',
-            'normal',
-            imgurHelper,
-            document
-        );
-
-        commonHelper.processDefaultCustomInstances(
-            'rimgo',
-            'tor',
-            imgurHelper,
-            document
-        );
+browser.storage.local.get(
+    [
+        "disableImgur",
+        "imgurProtocol",
+    ],
+    r => {
+        disableImgurElement.checked = !r.disableImgur;
+        protocolElement.value = r.imgurProtocol;
+        changeProtocolSettings(r.imgurProtocol);
+    }
+);
 
-        commonHelper.processDefaultCustomInstances(
-            'rimgo',
-            'i2p',
-            imgurHelper,
-            document
-        );
-    });
-}
-init();
+commonHelper.processDefaultCustomInstances('imgur', 'rimgo', 'normal', document);
+commonHelper.processDefaultCustomInstances('imgur', 'rimgo', 'tor', document);
+commonHelper.processDefaultCustomInstances('imgur', 'rimgo', 'i2p', document);
 
 
 let latencyElement = document.getElementById("latency");
@@ -86,17 +63,7 @@ latencyElement.addEventListener("click",
         commonHelper.testLatency(latencyLabel, redirects.rimgo.normal).then(r => {
             browser.storage.local.set({ rimgoLatency: r });
             latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances(
-                'rimgo',
-                'normal',
-                imgurHelper,
-                document,
-                imgurHelper.getRimgoNormalRedirectsChecks,
-                imgurHelper.setRimgoNormalRedirectsChecks,
-                imgurHelper.getRimgoNormalCustomRedirects,
-                imgurHelper.setRimgoNormalCustomRedirects,
-                r
-            );
+            commonHelper.processDefaultCustomInstances('imgur', 'rimgo', 'normal', document);
             latencyElement.removeEventListener("click", reloadWindow)
         });
     }
diff --git a/src/pages/options/instagram/instagram.js b/src/pages/options/instagram/instagram.js
index 7dcd5607..6b29d869 100644
--- a/src/pages/options/instagram/instagram.js
+++ b/src/pages/options/instagram/instagram.js
@@ -31,17 +31,16 @@ browser.storage.local.get(
         "instagramProtocol"
     ],
     r => {
-
         disableInstagramElement.checked = !r.disableInstagram;
 
         let protocol = r.instagramProtocol;
         protocolElement.value = protocol;
         changeProtocolSettings(protocol);
-
-        commonHelper.processDefaultCustomInstances('bibliogram', 'normal', instagramHelper, document)
-        commonHelper.processDefaultCustomInstances('bibliogram', 'tor', instagramHelper, document)
     })
 
+commonHelper.processDefaultCustomInstances('instagram', 'bibliogram', 'normal', document);
+commonHelper.processDefaultCustomInstances('instagram', 'bibliogram', 'tor', document);
+
 let latencyElement = document.getElementById("latency");
 let latencyLabel = document.getElementById("latency-label");
 latencyElement.addEventListener("click",
@@ -55,7 +54,7 @@ latencyElement.addEventListener("click",
         commonHelper.testLatency(latencyLabel, redirects.bibliogram.normal).then(r => {
             browser.storage.local.set({ bibliogramLatency: r });
             latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('bibliogram', 'normal', instagramHelper, document);
+            commonHelper.processDefaultCustomInstances('instagram', 'bibliogram', 'normal', document);
             latencyElement.removeEventListener("click", reloadWindow);
         });
     }
diff --git a/src/pages/options/lbry/lbry.js b/src/pages/options/lbry/lbry.js
index 3ab04369..f1cb49da 100644
--- a/src/pages/options/lbry/lbry.js
+++ b/src/pages/options/lbry/lbry.js
@@ -31,16 +31,14 @@ browser.storage.local.get(
         "lbryTargetsProtocol"
     ],
     r => {
-    disableLbryElement.checked = !r.disableLbryTargets;
-
-    let protocol = r.lbryTargetsProtocol;
-    protocolElement.value = protocol;
-    changeProtocolSettings(protocol);
-
-    commonHelper.processDefaultCustomInstances('librarian', 'normal', lbryHelper, document);
-    commonHelper.processDefaultCustomInstances('librarian', 'tor', lbryHelper, document)
-})
+        disableLbryElement.checked = !r.disableLbryTargets;
 
+        let protocol = r.lbryTargetsProtocol;
+        protocolElement.value = protocol;
+        changeProtocolSettings(protocol);
+    })
+commonHelper.processDefaultCustomInstances('lbry', 'librarian', 'normal', document);
+commonHelper.processDefaultCustomInstances('lbry', 'librarian', 'tor', document);
 
 let latencyElement = document.getElementById("latency");
 let latencyLabel = document.getElementById("latency-label");
@@ -55,7 +53,7 @@ latencyElement.addEventListener("click",
         commonHelper.testLatency(latencyLabel, redirects.librarian.normal).then(r => {
             browser.storage.local.set({ librarianLatency: r });
             latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('librarian', 'normal', lbryHelper, document);
+            commonHelper.processDefaultCustomInstances('lbry', 'librarian', 'normal', document);
             latencyElement.removeEventListener("click", reloadWindow);
         });
     }
diff --git a/src/pages/options/maps/maps.js b/src/pages/options/maps/maps.js
index 982b7980..3f2df54d 100644
--- a/src/pages/options/maps/maps.js
+++ b/src/pages/options/maps/maps.js
@@ -2,18 +2,15 @@ import mapsHelper from "../../../assets/javascripts/helpers/maps.js";
 import commonHelper from "../../../assets/javascripts/helpers/common.js";
 
 let disableMapsElement = document.getElementById("disable-osm");
-disableMapsElement.addEventListener("change",
-    (event) => mapsHelper.setDisable(!event.target.checked)
-);
-
 let mapsFrontendElement = document.getElementById("maps-frontend");
-mapsFrontendElement.addEventListener("change",
-    event => {
-        let frontend = event.target.options[mapsFrontendElement.selectedIndex].value;
-        mapsHelper.setFrontend(frontend);
-        changeFrontendsSettings(frontend);
-    }
-);
+
+document.addEventListener("change", async () => {
+    await browser.storage.local.set({
+        disableMaps: !disableMapsElement.checked,
+        mapsFrontend: mapsFrontendElement.value,
+    })
+    changeFrontendsSettings(mapsFrontendElement.value);
+})
 
 let facilDivElement = document.getElementById("facil")
 function changeFrontendsSettings(frontend) {
@@ -24,18 +21,18 @@ function changeFrontendsSettings(frontend) {
         facilDivElement.style.display = 'none';
     }
 }
-
-mapsHelper.init().then(() => {
-    console.log(mapsHelper.getFacilNormalRedirectsChecks())
-    disableMapsElement.checked = !mapsHelper.getDisable();
-    let frontend = mapsHelper.getFrontend();
-    mapsFrontendElement.value = frontend;
-    changeFrontendsSettings(frontend);
-
-    browser.storage.local.get("facilLatency").then(r => {
-        commonHelper.processDefaultCustomInstances('facil', 'normal', mapsHelper, document, r.facilLatency)
-    })
-})
+browser.storage.local.get(
+    [
+        "disableMaps",
+        "mapsFrontend",
+    ],
+    r => {
+        disableMapsElement.checked = !r.disableMaps;
+        mapsFrontendElement.value = r.mapsFrontend;
+        changeFrontendsSettings(r.mapsFrontend);
+    }
+)
+commonHelper.processDefaultCustomInstances('maps', 'facil', 'normal', document);
 
 let latencyElement = document.getElementById("latency");
 let latencyLabel = document.getElementById("latency-label");
@@ -50,7 +47,7 @@ latencyElement.addEventListener("click",
         commonHelper.testLatency(latencyLabel, redirects.facil.normal).then(r => {
             browser.storage.local.set({ facilLatency: r });
             latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('facil', 'normal', mapsHelper, document);
+            commonHelper.processDefaultCustomInstances('maps', 'facil', 'normal', document);
             latencyElement.removeEventListener("click", reloadWindow);
         });
     }
diff --git a/src/pages/options/medium/medium.js b/src/pages/options/medium/medium.js
index 4fb04092..753a8d72 100644
--- a/src/pages/options/medium/medium.js
+++ b/src/pages/options/medium/medium.js
@@ -15,11 +15,10 @@ browser.storage.local.get(
         let protocol = r.mediumProtocol;
         protocolElement.value = protocol;
         changeProtocolSettings(protocol);
-
-        commonHelper.processDefaultCustomInstances('scribe', 'normal', mediumHelper, document)
-        commonHelper.processDefaultCustomInstances('scribe', 'tor', mediumHelper, document)
     }
 )
+commonHelper.processDefaultCustomInstances('medium', 'scribe', 'normal', document);
+commonHelper.processDefaultCustomInstances('medium', 'scribe', 'tor', document);
 
 document.addEventListener("change", async () => {
     await browser.storage.local.set({
@@ -55,7 +54,7 @@ latencyElement.addEventListener("click",
         commonHelper.testLatency(latencyLabel, redirects.scribe.normal).then(r => {
             browser.storage.local.set({ scribeLatency: r });
             latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('scribe', 'normal', mediumHelper, document);
+            commonHelper.processDefaultCustomInstances('medium', 'scribe', 'normal', document);
             latencyElement.removeEventListener("click", reloadWindow);
         });
     }
diff --git a/src/pages/options/peertube/peertube.js b/src/pages/options/peertube/peertube.js
index 419523d0..3e2abb2f 100644
--- a/src/pages/options/peertube/peertube.js
+++ b/src/pages/options/peertube/peertube.js
@@ -11,14 +11,13 @@ browser.storage.local.get(
     r => {
         disablePeertubeElement.checked = !r.disablePeertubeTargets;
 
-        let protocol = peertubeTargetsProtocol;
+        let protocol = r.peertubeTargetsProtocol;
         protocolElement.value = protocol;
         changeProtocolSettings(protocol);
-
-        commonHelper.processDefaultCustomInstances('simpleertube', 'normal', peertubeHelper, document);
-        commonHelper.processDefaultCustomInstances('simpleertube', 'tor', peertubeHelper, document)
     }
 )
+commonHelper.processDefaultCustomInstances('peertube', 'simpleertube', 'normal', document);
+commonHelper.processDefaultCustomInstances('peertube', 'simpleertube', 'tor', document);
 
 document.addEventListener("change", async () => {
     await browser.storage.local.set({
@@ -54,17 +53,7 @@ latencyElement.addEventListener("click",
         commonHelper.testLatency(latencyLabel, redirects.simpleertube.normal).then(r => {
             browser.storage.local.set({ simpleertubeLatency: r });
             latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances(
-                'simpleertube',
-                'normal',
-                peertubeHelper,
-                document,
-                peertubeHelper.getSimpleertubeNormalRedirectsChecks,
-                peertubeHelper.setSimpleertubeNormalRedirectsChecks,
-                peertubeHelper.getSimpleertubeNormalCustomRedirects,
-                peertubeHelper.setSimpleertubeNormalCustomRedirects,
-                r,
-            );
+            commonHelper.processDefaultCustomInstances('peertube', 'simpleertube', 'normal', document);
             latencyElement.removeEventListener("click", reloadWindow);
         });
     }
diff --git a/src/pages/options/reddit/reddit.js b/src/pages/options/reddit/reddit.js
index 3f79eeaa..475f8b61 100644
--- a/src/pages/options/reddit/reddit.js
+++ b/src/pages/options/reddit/reddit.js
@@ -42,7 +42,8 @@ document.addEventListener("change", async () => {
         redditUseHls: use_hls.checked,
         redditHideHlsNotification: hide_hls_notification.checked,
     });
-    init();
+    changeFrontendsSettings(redditFrontendElement.value);
+    changeProtocolSettings(protocolElement.value);
 })
 
 function changeProtocolSettings(protocol) {
@@ -129,10 +130,10 @@ browser.storage.local.get(
     }
 )
 
-commonHelper.processDefaultCustomInstances('libreddit', 'normal', redditHelper, document)
-commonHelper.processDefaultCustomInstances('libreddit', 'tor', redditHelper, document)
-commonHelper.processDefaultCustomInstances('teddit', 'normal', redditHelper, document);
-commonHelper.processDefaultCustomInstances('teddit', 'tor', redditHelper, document);
+commonHelper.processDefaultCustomInstances('reddit', 'libreddit', 'normal', document);
+commonHelper.processDefaultCustomInstances('reddit', 'libreddit', 'tor', document);
+commonHelper.processDefaultCustomInstances('reddit', 'teddit', 'normal', document);
+commonHelper.processDefaultCustomInstances('reddit', 'teddit', 'tor', document);
 
 
 let latencyLibredditElement = document.getElementById("latency-libreddit");
@@ -148,7 +149,7 @@ latencyLibredditElement.addEventListener("click",
         commonHelper.testLatency(latencyLibredditLabel, redirects.libreddit.normal).then(r => {
             browser.storage.local.set({ libredditLatency: r });
             latencyLibredditLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('libreddit', 'normal', redditHelper, document);
+            commonHelper.processDefaultCustomInstances('reddit', 'libreddit', 'normal', document);
             latencyLibredditElement.removeEventListener("click", reloadWindow);
         });
     }
@@ -167,7 +168,7 @@ latencyTedditElement.addEventListener("click",
         commonHelper.testLatency(latencyTedditLabel, redirects.teddit.normal).then(r => {
             browser.storage.local.set({ tedditLatency: r });
             latencyTedditLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('teddit', 'normal', redditHelper, document);
+            commonHelper.processDefaultCustomInstances('reddit', 'teddit', 'normal', document);
             latencyTedditElement.removeEventListener("click", reloadWindow);
         });
     }
diff --git a/src/pages/options/search/search.js b/src/pages/options/search/search.js
index 893c3e4f..37b0ed46 100644
--- a/src/pages/options/search/search.js
+++ b/src/pages/options/search/search.js
@@ -16,10 +16,10 @@ browser.storage.local.get(
     "searchProtocol",
   ],
   r => {
-    disableSearchElement.checked = !disableSearch;
+    disableSearchElement.checked = !r.disableSearch;
 
-    searchFrontendElement.value = r.searchFronten;
-    changeFrontendsSettings(r.searchFronten);
+    searchFrontendElement.value = r.searchFrontend;
+    changeFrontendsSettings(r.searchFrontend);
 
     protocolElement.value = r.searchProtocol;
     changeProtocolSettings(r.searchProtocol);
@@ -106,15 +106,15 @@ function changeProtocolSettings(protocol) {
   }
 }
 
-commonHelper.processDefaultCustomInstances('searx', 'normal', searchHelper, document);
-commonHelper.processDefaultCustomInstances('searx', 'tor', searchHelper, document);
-commonHelper.processDefaultCustomInstances('searx', 'i2p', searchHelper, document);
-commonHelper.processDefaultCustomInstances('searxng', 'normal', searchHelper, document);
-commonHelper.processDefaultCustomInstances('searxng', 'tor', searchHelper, document);
-commonHelper.processDefaultCustomInstances('searxng', 'i2p', searchHelper, document);
-commonHelper.processDefaultCustomInstances('whoogle', 'normal', searchHelper, document);
-commonHelper.processDefaultCustomInstances('whoogle', 'tor', searchHelper, document);
-commonHelper.processDefaultCustomInstances('whoogle', 'i2p', searchHelper, document);
+commonHelper.processDefaultCustomInstances('search', 'searx', 'normal', document);
+commonHelper.processDefaultCustomInstances('search', 'searx', 'tor', document);
+commonHelper.processDefaultCustomInstances('search', 'searx', 'i2p', document);
+commonHelper.processDefaultCustomInstances('search', 'searxng', 'normal', document);
+commonHelper.processDefaultCustomInstances('search', 'searxng', 'tor', document);
+commonHelper.processDefaultCustomInstances('search', 'searxng', 'i2p', document);
+commonHelper.processDefaultCustomInstances('search', 'whoogle', 'normal', document);
+commonHelper.processDefaultCustomInstances('search', 'whoogle', 'tor', document);
+commonHelper.processDefaultCustomInstances('search', 'whoogle', 'i2p', document);
 
 let latencySearxElement = document.getElementById("latency-searx");
 let latencySearxLabel = document.getElementById("latency-searx-label");
@@ -129,7 +129,7 @@ latencySearxElement.addEventListener("click",
     commonHelper.testLatency(latencySearxLabel, redirects.searx.normal).then(r => {
       browser.storage.local.set({ searxLatency: r });
       latencySearxLabel.innerHTML = oldHtml;
-      commonHelper.processDefaultCustomInstances('searx', 'normal', searchHelper, document);
+      commonHelper.processDefaultCustomInstances('search', 'searx', 'normal', document);
       latencySearxElement.removeEventListener("click", reloadWindow);
     });
   }
@@ -148,7 +148,7 @@ latencySearxngElement.addEventListener("click",
     commonHelper.testLatency(latencySearxngLabel, redirects.searxng.normal).then(r => {
       browser.storage.local.set({ searxngLatency: r });
       latencySearxngLabel.innerHTML = oldHtml;
-      commonHelper.processDefaultCustomInstances('searxng', 'normal', searchHelper, document);
+      commonHelper.processDefaultCustomInstances('search', 'searxng', 'normal', document);
       latencySearxngElement.removeEventListener("click", reloadWindow);
     });
   }
@@ -167,7 +167,7 @@ latencyWhoogleElement.addEventListener("click",
     commonHelper.testLatency(latencyWhoogleLabel, redirects.whoogle.normal).then(r => {
       browser.storage.local.set({ whoogleLatency: r });
       latencyWhoogleLabel.innerHTML = oldHtml;
-      commonHelper.processDefaultCustomInstances('whoogle', 'normal', searchHelper, document);
+      commonHelper.processDefaultCustomInstances('search', 'whoogle', 'normal', document);
       latencyWhoogleElement.removeEventListener("click", reloadWindow);
     });
   }
diff --git a/src/pages/options/sendTargets/sendTargets.js b/src/pages/options/sendTargets/sendTargets.js
index dc40f83f..236d6799 100644
--- a/src/pages/options/sendTargets/sendTargets.js
+++ b/src/pages/options/sendTargets/sendTargets.js
@@ -38,8 +38,8 @@ function changeProtocolSettings(protocol) {
     }
 }
 
-commonHelper.processDefaultCustomInstances('send', 'normal', sendTargetsHelper, document);
-commonHelper.processDefaultCustomInstances('send', 'tor', sendTargetsHelper, document,)
+commonHelper.processDefaultCustomInstances('sendTargets', 'send', 'normal', document);
+commonHelper.processDefaultCustomInstances('sendTargets', 'send', 'tor', document);
 
 let latencyElement = document.getElementById("latency");
 let latencyLabel = document.getElementById("latency-label");
@@ -54,7 +54,7 @@ latencyElement.addEventListener("click",
         commonHelper.testLatency(latencyLabel, redirects.send.normal).then(r => {
             browser.storage.local.set({ sendLatency: r });
             latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('send', 'normal', sendTargetsHelper, document)
+            commonHelper.processDefaultCustomInstances('sendTargets', 'send', 'normal', document);
             latencyElement.removeEventListener("click", reloadWindow)
         });
     }
diff --git a/src/pages/options/speedtest/speedtest.js b/src/pages/options/speedtest/speedtest.js
index 95fa9fea..986f75c7 100644
--- a/src/pages/options/speedtest/speedtest.js
+++ b/src/pages/options/speedtest/speedtest.js
@@ -38,8 +38,8 @@ function changeProtocolSettings(protocol) {
     }
 }
 
-commonHelper.processDefaultCustomInstances('librespeed', 'normal', speedtestHelper, document);
-commonHelper.processDefaultCustomInstances('librespeed', 'tor', speedtestHelper, document);
+commonHelper.processDefaultCustomInstances('speedtest', 'librespeed', 'normal', document);
+commonHelper.processDefaultCustomInstances('speedtest', 'librespeed', 'tor', document);
 
 let latencyElement = document.getElementById("latency");
 let latencyLabel = document.getElementById("latency-label");
@@ -54,7 +54,7 @@ latencyElement.addEventListener("click",
         commonHelper.testLatency(latencyLabel, redirects.librespeed.normal).then(r => {
             browser.storage.local.set({ librespeedLatency: r });
             latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('librespeed', 'normal', speedtestHelper, document)
+            commonHelper.processDefaultCustomInstances('speedtest', 'librespeed', 'normal', document);
             latencyElement.removeEventListener("click", reloadWindow)
         });
     }
diff --git a/src/pages/options/spotify/spotify.js b/src/pages/options/spotify/spotify.js
index 33cc9e91..16fa1f56 100644
--- a/src/pages/options/spotify/spotify.js
+++ b/src/pages/options/spotify/spotify.js
@@ -12,7 +12,7 @@ browser.storage.local.get(
     }
 )
 
-commonHelper.processDefaultCustomInstances('soju', 'normal', spotifyHelper, document);
+commonHelper.processDefaultCustomInstances('spotify', 'soju', 'normal', document);
 
 let latencyElement = document.getElementById("latency");
 let latencyLabel = document.getElementById("latency-label");
@@ -27,7 +27,7 @@ latencyElement.addEventListener("click",
         commonHelper.testLatency(latencyLabel, redirects.soju.normal).then(r => {
             browser.storage.local.set({ sojuLatency: r });
             latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('soju', 'normal', spotifyHelper, document)
+            commonHelper.processDefaultCustomInstances('spotify', 'soju', 'normal', document);
             latencyElement.removeEventListener("click", reloadWindow)
         });
     }
diff --git a/src/pages/options/tiktok/tiktok.js b/src/pages/options/tiktok/tiktok.js
index 61841145..56cf93dc 100644
--- a/src/pages/options/tiktok/tiktok.js
+++ b/src/pages/options/tiktok/tiktok.js
@@ -5,7 +5,7 @@ let disable = document.getElementById("disable-tiktok");
 let protocol = document.getElementById("protocol")
 
 let enableCustomSettings = document.getElementById("enable-custom-settings");
-let customSettingsDiv = document.getElementsByClassName("custom-settings")[0];
+let customSettingsDiv = document.getElementsByClassName("custom-settings");
 
 let theme = document.getElementById('proxiTok').getElementsByClassName('theme')[0];
 let api_legacy = document.getElementById('proxiTok').getElementsByClassName('api-legacy')[0];
@@ -21,7 +21,7 @@ document.addEventListener("change", async () => {
         proxiTokApiLegacy: api_legacy.value,
 
     });
-    init();
+    changeProtocolSettings(protocol.value);
 })
 
 window.onblur = tiktokHelper.initProxiTokCookies;
@@ -39,6 +39,7 @@ browser.storage.local.get(
     r => {
         disable.checked = !r.disableTiktok;
         protocol.value = r.tiktokProtocol;
+        changeProtocolSettings(r.tiktokProtocol);
         let normalDiv = document.getElementsByClassName("normal")[0];
         let torDiv = document.getElementsByClassName("tor")[0];
         if (r.tiktokProtocol == 'normal') {
@@ -57,13 +58,29 @@ browser.storage.local.get(
             customSettingsDiv.style.display = 'none';
 
         theme.value = r.proxiTokTheme;
-        api_legacy.value = r.proxiTokApiLegacy
+        api_legacy.value = r.proxiTokApiLegacy;
     }
 )
 
-commonHelper.processDefaultCustomInstances('proxiTok', 'normal', tiktokHelper, document);
-commonHelper.processDefaultCustomInstances('proxiTok', 'tor', tiktokHelper, document)
+function changeProtocolSettings(protocol) {
+    let normalDiv = document.getElementsByClassName("normal")[0];
+    let torDiv = document.getElementsByClassName("tor")[0];
+    if (protocol == 'normal') {
+        normalDiv.style.display = 'block';
+        torDiv.style.display = 'none';
+    }
+    else if (protocol == 'tor') {
+        normalDiv.style.display = 'none';
+        torDiv.style.display = 'block';
+    }
+    if (enableCustomSettings.checked)
+        for (const item of customSettingsDiv) item.style.display = 'block';
+    else
+        for (const item of customSettingsDiv) item.style.display = 'none';
+}
 
+commonHelper.processDefaultCustomInstances('tiktok', 'proxiTok', 'normal', document);
+commonHelper.processDefaultCustomInstances('tiktok', 'proxiTok', 'tor', document);
 
 let latencyElement = document.getElementById("latency");
 let latencyLabel = document.getElementById("latency-label");
@@ -78,7 +95,7 @@ latencyElement.addEventListener("click",
         commonHelper.testLatency(latencyLabel, redirects.proxiTok.normal).then(r => {
             browser.storage.local.set({ proxiTokLatency: r });
             latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('proxiTok', 'normal', tiktokHelper, document)
+            commonHelper.processDefaultCustomInstances('tiktok', 'proxiTok', 'normal', document);
             latencyElement.removeEventListener("click", reloadWindow)
         });
     }
diff --git a/src/pages/options/translate/translate.js b/src/pages/options/translate/translate.js
index 999d5e30..3338f8ce 100644
--- a/src/pages/options/translate/translate.js
+++ b/src/pages/options/translate/translate.js
@@ -2,13 +2,10 @@ import translateHelper from "../../../assets/javascripts/helpers/translate/trans
 import commonHelper from "../../../assets/javascripts/helpers/common.js";
 
 let disableElement = document.getElementById("disable-simplyTranslate");
-disableElement.addEventListener("change",
-    (event) => translateHelper.setDisable(!event.target.checked)
-);
-
 let simplyTranslateDivElement = document.getElementById("simplyTranslate");
 let lingvaDivElement = document.getElementById("lingva");
-
+let translateFrontendElement = document.getElementById("translate-frontend");
+let protocolElement = document.getElementById("protocol");
 
 function changeFrontendsSettings(frontend) {
     if (frontend == 'simplyTranslate') {
@@ -20,23 +17,20 @@ function changeFrontendsSettings(frontend) {
         lingvaDivElement.style.display = 'block';
     }
 }
-let translateFrontendElement = document.getElementById("translate-frontend");
-translateFrontendElement.addEventListener("change",
-    event => {
-        let frontend = event.target.options[translateFrontendElement.selectedIndex].value
-        translateHelper.setFrontend(frontend)
-        changeFrontendsSettings(frontend);
-    }
-);
 
-let protocolElement = document.getElementById("protocol");
-protocolElement.addEventListener("change",
-    (event) => {
-        let protocol = event.target.options[protocolElement.selectedIndex].value
-        translateHelper.setProtocol(protocol);
-        changeProtocolSettings(protocol);
-    }
-);
+document.addEventListener("change", async () => {
+    await browser.storage.local.set({
+        translateDisable: !disableElement.checked,
+        translateFrontend: translateFrontendElement.value,
+        translateProtocol: protocolElement.value,
+        translateFrom: fromElement.value,
+        translateTo: toElement.value,
+        simplyTranslateEngine: simplyTranslateEngineElement.value,
+    })
+    changeProtocolSettings(protocolElement.value);
+    changeFrontendsSettings(translateFrontendElement.value);
+})
+
 
 function changeProtocolSettings(protocol) {
     let normalSimplyTranslateDiv = document.getElementById("simplyTranslate").getElementsByClassName("normal")[0];
@@ -60,88 +54,38 @@ function changeProtocolSettings(protocol) {
 }
 
 let fromElement = document.getElementsByClassName("from")[0];
-fromElement.addEventListener("change",
-    event => translateHelper.setFrom(event.target.options[fromElement.selectedIndex].value)
-);
-
 let toElement = document.getElementsByClassName("to")[0];
-toElement.addEventListener("change",
-    event => translateHelper.setTo(event.target.options[toElement.selectedIndex].value)
-);
-
 let simplyTranslateElement = document.getElementById("simplyTranslate")
 let simplyTranslateEngineElement = simplyTranslateElement.getElementsByClassName("engine")[0];
-simplyTranslateEngineElement.addEventListener("change",
-    event => translateHelper.setSimplyTranslateEngine(event.target.options[simplyTranslateEngineElement.selectedIndex].value)
-);
-
-translateHelper.init().then(() => {
-    disableElement.checked = !translateHelper.getDisable();
-
-    let frontend = translateHelper.getFrontend();
-    translateFrontendElement.value = frontend;
-    changeFrontendsSettings(frontend);
-
-    let protocol = translateHelper.getProtocol();
-    protocolElement.value = protocol;
-    changeProtocolSettings(protocol);
-
-    fromElement.value = translateHelper.getFrom();
-    toElement.value = translateHelper.getTo();
-    simplyTranslateEngineElement.value = translateHelper.getSimplyTranslateEngine();
 
-    browser.storage.local.get("simplyTranslateLatency").then(r => {
-        commonHelper.processDefaultCustomInstances(
-            'simplyTranslate',
-            'normal',
-            translateHelper,
-            document,
-            translateHelper.getSimplyTranslateNormalRedirectsChecks,
-            translateHelper.setSimplyTranslateNormalRedirectsChecks,
-            translateHelper.getSimplyTranslateNormalCustomRedirects,
-            translateHelper.setSimplyTranslateNormalCustomRedirects,
-            r.simplyTranslateLatency,
-        )
-    })
-
-    commonHelper.processDefaultCustomInstances(
-        'simplyTranslate',
-        'tor',
-        translateHelper,
-        document,
-        translateHelper.getSimplyTranslateTorRedirectsChecks,
-        translateHelper.setSimplyTranslateTorRedirectsChecks,
-        translateHelper.getSimplyTranslateTorCustomRedirects,
-        translateHelper.setSimplyTranslateTorCustomRedirects
-    );
-
-    browser.storage.local.get("lingvaLatency").then(r => {
-        commonHelper.processDefaultCustomInstances(
-            'lingva',
-            'normal',
-            translateHelper,
-            document,
-            translateHelper.getLingvaNormalRedirectsChecks,
-            translateHelper.setLingvaNormalRedirectsChecks,
-            translateHelper.getLingvaNormalCustomRedirects,
-            translateHelper.setLingvaNormalCustomRedirects,
-            r.lingvaLatency,
-        );
-    });
-
-
-    commonHelper.processDefaultCustomInstances(
-        'lingva',
-        'tor',
-        translateHelper,
-        document,
-        translateHelper.getLingvaTorRedirectsChecks,
-        translateHelper.setLingvaTorRedirectsChecks,
-        translateHelper.getLingvaTorCustomRedirects,
-        translateHelper.setLingvaTorCustomRedirects,
-    )
-});
+browser.storage.local.get(
+    [
+        "translateDisable",
+        "translateFrontend",
+        "translateProtocol",
+        "translateFrom",
+        "translateTo",
+        "simplyTranslateEngine",
+    ],
+    r => {
+        disableElement.checked = !r.translateDisable;
+
+        translateFrontendElement.value = r.translateFrontend;
+        changeFrontendsSettings(r.translateFrontend);
+
+        protocolElement.value = r.translateProtocol;
+        changeProtocolSettings(r.translateProtocol);
+
+        fromElement.value = r.translateFrom;
+        toElement.value = r.translateTo;
+        simplyTranslateEngineElement.value = r.simplyTranslateEngine;
+    }
+);
 
+commonHelper.processDefaultCustomInstances('translate', 'simplyTranslate', 'normal', document)
+commonHelper.processDefaultCustomInstances('translate', 'simplyTranslate', 'tor', document);
+commonHelper.processDefaultCustomInstances('translate', 'lingva', 'normal', document);
+commonHelper.processDefaultCustomInstances('translate', 'lingva', 'tor', document);
 
 let latencySimplyTranslateElement = document.getElementById("latency-simplyTranslate");
 let latencySimplyTranslateLabel = document.getElementById("latency-simplyTranslate-label");
@@ -156,17 +100,7 @@ latencySimplyTranslateElement.addEventListener("click",
         commonHelper.testLatency(latencySimplyTranslateLabel, redirects.simplyTranslate.normal).then(r => {
             browser.storage.local.set({ simplyTranslateLatency: r });
             latencySimplyTranslateLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances(
-                'simplyTranslate',
-                'normal',
-                translateHelper,
-                document,
-                translateHelper.getSimplyTranslateNormalRedirectsChecks,
-                translateHelper.setSimplyTranslateNormalRedirectsChecks,
-                translateHelper.getSimplyTranslateNormalCustomRedirects,
-                translateHelper.setSimplyTranslateNormalCustomRedirects,
-                r,
-            );
+            commonHelper.processDefaultCustomInstances('translate', 'simplyTranslate', 'normal', document)
             latencySimplyTranslateElement.removeEventListener("click", reloadWindow);
         });
     }
@@ -185,17 +119,7 @@ latencyLingvaElement.addEventListener("click",
         commonHelper.testLatency(latencyLingvaLabel, redirects.lingva.normal).then(r => {
             browser.storage.local.set({ lingvaLatency: r });
             latencyLingvaLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances(
-                'lingva',
-                'normal',
-                translateHelper,
-                document,
-                translateHelper.getLingvaNormalRedirectsChecks,
-                translateHelper.setLingvaNormalRedirectsChecks,
-                translateHelper.getLingvaNormalCustomRedirects,
-                translateHelper.setLingvaNormalCustomRedirects,
-                r,
-            );
+            commonHelper.processDefaultCustomInstances('translate', 'lingva', 'normal', document);
             latencyLingvaElement.removeEventListener("click", reloadWindow);
         });
     }
diff --git a/src/pages/options/twitter/twitter.js b/src/pages/options/twitter/twitter.js
index b77f5ecc..2fcf63c5 100644
--- a/src/pages/options/twitter/twitter.js
+++ b/src/pages/options/twitter/twitter.js
@@ -50,7 +50,7 @@ browser.storage.local.get(
         bypassWatchOnTwitterElement.checked = r.bypassWatchOnTwitter;
         protocolElement.value = r.twitterProtocol;
         changeProtocolSettings(r.twitterProtocol);
-        
+
         // Display
         theme.value = r.nitterTheme;
         infiniteScroll.checked = r.nitterInfiniteScroll;
@@ -61,7 +61,7 @@ browser.storage.local.get(
         hidePins.checked = r.nitterHidePins;
         hideReplies.checked = r.nitterHideReplies;
         squareAvatars.checked = r.nitterSquareAvatars;
-        
+
         // Media
         mp4Playback.checked = r.nitterMp4Playback;
         hlsPlayback.checked = r.nitterHlsPlayback;
@@ -96,7 +96,7 @@ document.addEventListener("change", async () => {
         nitterMuteVideos: muteVideos.checked,
         nitterAutoplayGifs: autoplayGifs.checked,
     });
-    init();
+    changeProtocolSettings(protocolElement.value);
 })
 
 function changeProtocolSettings(protocol) {
@@ -116,8 +116,8 @@ function changeProtocolSettings(protocol) {
         for (const item of customSettingsDivElement) item.style.display = 'none';
 }
 
-// commonHelper.processDefaultCustomInstances('nitter', 'normal', twitterHelper, document);
-// commonHelper.processDefaultCustomInstances('nitter', 'tor', twitterHelper, document)
+commonHelper.processDefaultCustomInstances('twitter', 'nitter', 'normal', document);
+commonHelper.processDefaultCustomInstances('twitter', 'nitter', 'tor', document)
 window.onblur = twitterHelper.initNitterCookies;
 
 let latencyElement = document.getElementById("latency");
@@ -133,7 +133,7 @@ latencyElement.addEventListener("click",
         commonHelper.testLatency(latencyLabel, redirects.nitter.normal).then(r => {
             browser.storage.local.set({ nitterLatency: r });
             latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('nitter', 'normal', twitterHelper, document)
+            commonHelper.processDefaultCustomInstances('twitter', 'nitter', 'normal', document);
             latencyElement.removeEventListener("click", reloadWindow)
         });
     }
diff --git a/src/pages/options/wikipedia/wikipedia.js b/src/pages/options/wikipedia/wikipedia.js
index 0d9a1a6c..8d9af92a 100644
--- a/src/pages/options/wikipedia/wikipedia.js
+++ b/src/pages/options/wikipedia/wikipedia.js
@@ -44,9 +44,9 @@ function changeProtocolSettings(protocol) {
         i2pDiv.style.display = 'block';
     }
 }
-commonHelper.processDefaultCustomInstances('wikiless', 'normal', wikipediaHelper, document);
-commonHelper.processDefaultCustomInstances('wikiless', 'tor', wikipediaHelper, document)
-commonHelper.processDefaultCustomInstances('wikiless', 'i2p', wikipediaHelper, document)
+commonHelper.processDefaultCustomInstances('wikipedia' ,'wikiless', 'normal', document);
+commonHelper.processDefaultCustomInstances('wikipedia' ,'wikiless', 'tor',  document);
+commonHelper.processDefaultCustomInstances('wikipedia' ,'wikiless', 'i2p',  document);
 
 window.onblur = wikipediaHelper.initWikilessCookies;
 
@@ -63,7 +63,7 @@ latencyElement.addEventListener("click",
         commonHelper.testLatency(latencyLabel, redirects.wikiless.normal).then(r => {
             browser.storage.local.set({ wikilessLatency: r });
             latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('wikiless', 'normal', wikipediaHelper, document)
+            commonHelper.processDefaultCustomInstances('wikipedia' ,'wikiless', 'normal', document);
             latencyElement.removeEventListener("click", reloadWindow)
         });
     }
diff --git a/src/pages/options/youtube/invidious.js b/src/pages/options/youtube/invidious.js
index d314607e..fb1ddff7 100644
--- a/src/pages/options/youtube/invidious.js
+++ b/src/pages/options/youtube/invidious.js
@@ -80,84 +80,82 @@ invidious.addEventListener("change", async _ => {
         invidiousDefaultHome: default_home.value,
         invidiousFeedMenuList: feedMenuList,
       });
-      init();
     }
   )
 });
 
-function init() {
-  browser.storage.local.get(
-    [
-      "youtubeListen",
-      "youtubeVolume",
-      "youtubeAutoplay",
-      "invidiousQuality",
-      "invidiousAlwaysProxy",
-      "invidiousQuality",
-      "invidiousPlayerStyle",
-      "invidiousVideoLoop",
-      "invidiousContinueAutoplay",
-      "invidiousContinue",
-      "invidiousSpeed",
-      "invidiousQualityDash",
-      "invidiousComments",
-      "invidiousCaptions",
-      "invidiousRelatedVideos",
-      "invidiousAnnotations",
-      "invidiousExtendDesc",
-      "invidiousVrMode",
-      "invidiousSavePlayerPos",
-      "invidiousRegion",
-      "invidiousDarkMode",
-      "invidiousThinMode",
-      "invidiousDefaultHome",
-      "invidiousFeedMenuList",
-    ],
-    r => {
-      videoLoop.checked = r.invidiousVideoLoop;
-      autoplay.checked = r.youtubeAutoplay;
-      playerStyle.value = r.invidiousPlayerStyle;
-
-      continueAutoplay.checked = r.invidiousContinueAutoplay;
-      invidiousContinue.checked = r.invidiousContinue;
-      alwaysProxy.checked = r.invidiousAlwaysProxy;
-      youtubeListen.checked = r.youtubeListen;
-
-      speed.value = r.invidiousSpeed;
-      quality.value = r.invidiousQuality;
-      qualityDash.value = r.invidiousQualityDash;
-
-      volume.value = r.youtubeVolume;
-      volumeValue.textContent = `${r.youtubeVolume}%`;
-
-      comments0.value = r.invidiousComments[0];
-      comments1.value = r.invidiousComments[1];
-
-      captions0.value = r.invidiousCaptions[0];
-      captions1.value = r.invidiousCaptions[1];
-      captions2.value = r.invidiousCaptions[2];
-
-      relatedVideo.checked = r.invidiousRelatedVideos;
-      annotations.checked = r.invidiousAnnotations;
-      extendDesc.checked = r.invidiousExtendDesc;
-      vrMode.checked = r.invidiousVrMode;
-      savePlayerPos.checked = r.invidiousSavePlayerPos;
-
-      region.value = r.invidiousRegion;
-      darkMode.value = r.invidiousDarkMode;
-      thin_mode.checked = r.invidiousThinMode;
-      default_home.value = r.invidiousDefaultHome;
-
-      feed_menu0.value = r.invidiousFeedMenuList[0];
-      feed_menu1.value = r.invidiousFeedMenuList[1];
-
-      commonHelper.processDefaultCustomInstances('invidious', 'normal', youtubeHelper, document);
-      commonHelper.processDefaultCustomInstances('invidious', 'tor', youtubeHelper, document);
-    }
-  )
-}
+browser.storage.local.get(
+  [
+    "youtubeListen",
+    "youtubeVolume",
+    "youtubeAutoplay",
+    "invidiousQuality",
+    "invidiousAlwaysProxy",
+    "invidiousQuality",
+    "invidiousPlayerStyle",
+    "invidiousVideoLoop",
+    "invidiousContinueAutoplay",
+    "invidiousContinue",
+    "invidiousSpeed",
+    "invidiousQualityDash",
+    "invidiousComments",
+    "invidiousCaptions",
+    "invidiousRelatedVideos",
+    "invidiousAnnotations",
+    "invidiousExtendDesc",
+    "invidiousVrMode",
+    "invidiousSavePlayerPos",
+    "invidiousRegion",
+    "invidiousDarkMode",
+    "invidiousThinMode",
+    "invidiousDefaultHome",
+    "invidiousFeedMenuList",
+  ],
+  r => {
+    videoLoop.checked = r.invidiousVideoLoop;
+    autoplay.checked = r.youtubeAutoplay;
+    playerStyle.value = r.invidiousPlayerStyle;
+
+    continueAutoplay.checked = r.invidiousContinueAutoplay;
+    invidiousContinue.checked = r.invidiousContinue;
+    alwaysProxy.checked = r.invidiousAlwaysProxy;
+    youtubeListen.checked = r.youtubeListen;
+
+    speed.value = r.invidiousSpeed;
+    quality.value = r.invidiousQuality;
+    qualityDash.value = r.invidiousQualityDash;
+
+    volume.value = r.youtubeVolume;
+    volumeValue.textContent = `${r.youtubeVolume}%`;
+
+    comments0.value = r.invidiousComments[0];
+    comments1.value = r.invidiousComments[1];
+
+    captions0.value = r.invidiousCaptions[0];
+    captions1.value = r.invidiousCaptions[1];
+    captions2.value = r.invidiousCaptions[2];
+
+    relatedVideo.checked = r.invidiousRelatedVideos;
+    annotations.checked = r.invidiousAnnotations;
+    extendDesc.checked = r.invidiousExtendDesc;
+    vrMode.checked = r.invidiousVrMode;
+    savePlayerPos.checked = r.invidiousSavePlayerPos;
+
+    region.value = r.invidiousRegion;
+    darkMode.value = r.invidiousDarkMode;
+    thin_mode.checked = r.invidiousThinMode;
+    default_home.value = r.invidiousDefaultHome;
+
+    feed_menu0.value = r.invidiousFeedMenuList[0];
+    feed_menu1.value = r.invidiousFeedMenuList[1];
+
+
+  }
+)
+
+commonHelper.processDefaultCustomInstances('youtube', 'invidious', 'normal', document);
+commonHelper.processDefaultCustomInstances('youtube', 'invidious', 'tor', document);
 
-init();
 
 let latencyInvidiousElement = document.getElementById("latency-invidious");
 let latencyInvidiousLabel = document.getElementById("latency-invidious-label");
@@ -172,7 +170,7 @@ latencyInvidiousElement.addEventListener("click",
     commonHelper.testLatency(latencyInvidiousLabel, redirects.invidious.normal).then(r => {
       browser.storage.local.set({ invidiousLatency: r });
       latencyInvidiousLabel.innerHTML = oldHtml;
-      commonHelper.processDefaultCustomInstances('invidious', 'normal', youtubeHelper, document);
+      commonHelper.processDefaultCustomInstances('youtube', 'invidious', 'normal', document);
       latencyInvidiousElement.removeEventListener("click", reloadWindow);
     });
   }
diff --git a/src/pages/options/youtube/piped.js b/src/pages/options/youtube/piped.js
index 6e30b8e6..d8ebe2a4 100644
--- a/src/pages/options/youtube/piped.js
+++ b/src/pages/options/youtube/piped.js
@@ -76,65 +76,61 @@ piped.addEventListener("change", async () => {
         youtubeListen: pipedListen.checked,
         pipedSelectedSkip: selectSkip,
     });
-    init();
 });
 
-async function init() {
-    await browser.storage.local.get(
-        [
-            "youtubeVolume",
-            "youtubeAutoplay",
-            "youtubeListen",
+await browser.storage.local.get(
+    [
+        "youtubeVolume",
+        "youtubeAutoplay",
+        "youtubeListen",
 
-            "pipedBufferGoal",
-            "pipedComments",
-            "pipedDisableLBRY",
-            "pipedEnabledCodecs",
-            "pipedHomepage",
-            "pipedMinimizeDescription",
-            "pipedProxyLBRY",
-            "pipedQuality",
-            "pipedRegion",
-            "pipedSelectedSkip",
-            "pipedSponsorblock",
-            "pipedDdlTheme",
-            "pipedWatchHistory",
-        ],
-        r => {
-            pipedSponsorblock.checked = r.pipedSponsorblock;
-            pipedDdlTheme.value = r.pipedDdlTheme;
-            selectSkip = r.pipedSelectedSkip;
-            pipedSelectedSkipSponsor.checked = selectSkip.includes('sponsor');
-            pipedSelectedSkipIntro.checked = selectSkip.includes('intro');
-            pipedSelectedSkipOutro.checked = selectSkip.includes('outro');
-            pipedSelectedSkipPreview.checked = selectSkip.includes('preview');
-            autoplay.checked = r.youtubeAutoplay;
-            pipedSelectedSkipInteraction.checked = selectSkip.includes('interaction');
-            pipedSelectedSkipSelfpromo.checked = selectSkip.includes('selfpromo');
-            pipedSelectedSkipMusicOfftopic.checked = selectSkip.includes('music_offtopic');
-            pipedSelectedSkipPoiHighlight.checked = selectSkip.includes('poi_highlight');
-            pipedSelectedSkipFiller.checked = selectSkip.includes('filler');
-            pipedListen.checked = r.youtubeListen;
-            pipedQuality.value = r.pipedQuality;
-            pipedBufferGoal.value = r.pipedBufferGoal;
-            pipedRegion.value = r.pipedRegion;
-            pipedHomepage.value = r.pipedHomepage;
-            pipedComments.checked = r.pipedComments;
-            pipedMinimizeDescription.checked = r.pipedMinimizeDescription;
-            pipedWatchHistory.checked = r.pipedWatchHistory;
-            pipedEnabledCodecs.value = r.pipedEnabledCodecs;
-            pipedDisableLBRY.checked = r.pipedDisableLBRY;
-            pipedProxyLBRY.checked = r.pipedProxyLBRY;
+        "pipedBufferGoal",
+        "pipedComments",
+        "pipedDisableLBRY",
+        "pipedEnabledCodecs",
+        "pipedHomepage",
+        "pipedMinimizeDescription",
+        "pipedProxyLBRY",
+        "pipedQuality",
+        "pipedRegion",
+        "pipedSelectedSkip",
+        "pipedSponsorblock",
+        "pipedDdlTheme",
+        "pipedWatchHistory",
+    ],
+    r => {
+        pipedSponsorblock.checked = r.pipedSponsorblock;
+        pipedDdlTheme.value = r.pipedDdlTheme;
+        selectSkip = r.pipedSelectedSkip;
+        pipedSelectedSkipSponsor.checked = selectSkip.includes('sponsor');
+        pipedSelectedSkipIntro.checked = selectSkip.includes('intro');
+        pipedSelectedSkipOutro.checked = selectSkip.includes('outro');
+        pipedSelectedSkipPreview.checked = selectSkip.includes('preview');
+        autoplay.checked = r.youtubeAutoplay;
+        pipedSelectedSkipInteraction.checked = selectSkip.includes('interaction');
+        pipedSelectedSkipSelfpromo.checked = selectSkip.includes('selfpromo');
+        pipedSelectedSkipMusicOfftopic.checked = selectSkip.includes('music_offtopic');
+        pipedSelectedSkipPoiHighlight.checked = selectSkip.includes('poi_highlight');
+        pipedSelectedSkipFiller.checked = selectSkip.includes('filler');
+        pipedListen.checked = r.youtubeListen;
+        pipedQuality.value = r.pipedQuality;
+        pipedBufferGoal.value = r.pipedBufferGoal;
+        pipedRegion.value = r.pipedRegion;
+        pipedHomepage.value = r.pipedHomepage;
+        pipedComments.checked = r.pipedComments;
+        pipedMinimizeDescription.checked = r.pipedMinimizeDescription;
+        pipedWatchHistory.checked = r.pipedWatchHistory;
+        pipedEnabledCodecs.value = r.pipedEnabledCodecs;
+        pipedDisableLBRY.checked = r.pipedDisableLBRY;
+        pipedProxyLBRY.checked = r.pipedProxyLBRY;
 
-            volume.value = r.youtubeVolume;
-            volumeValue.textContent = `${r.youtubeVolume}%`;
+        volume.value = r.youtubeVolume;
+        volumeValue.textContent = `${r.youtubeVolume}%`;
+    }
+);
 
-            commonHelper.processDefaultCustomInstances('piped', 'normal', youtubeHelper, document);
-            commonHelper.processDefaultCustomInstances('piped', 'tor', youtubeHelper, document);
-        }
-    );
-}
-init();
+commonHelper.processDefaultCustomInstances('youtube', 'piped', 'normal', document);
+commonHelper.processDefaultCustomInstances('youtube', 'piped', 'tor', document);
 
 let latencyPipedElement = document.getElementById("latency-piped");
 let latencyPipedLabel = document.getElementById("latency-piped-label");
@@ -149,7 +145,7 @@ latencyPipedElement.addEventListener("click",
         commonHelper.testLatency(latencyPipedLabel, redirects.piped.normal).then(r => {
             browser.storage.local.set({ pipedLatency: r });
             latencyPipedLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('piped', 'normal', youtubeHelper, document);
+            commonHelper.processDefaultCustomInstances('youtube', 'piped', 'normal', document);
             latencyPipedElement.removeEventListener("click", reloadWindow);
         });
     }
diff --git a/src/pages/options/youtube/pipedMaterial.js b/src/pages/options/youtube/pipedMaterial.js
index 7c647b18..3dc0e677 100644
--- a/src/pages/options/youtube/pipedMaterial.js
+++ b/src/pages/options/youtube/pipedMaterial.js
@@ -67,46 +67,43 @@ pipedMaterialElement.addEventListener("change", async () => {
     init();
 });
 
-function init() {
-    browser.storage.local.get(
-        [
-            "youtubeAutoplay",
-            "youtubeVolume",
-            "youtubeListen",
-
-            "pipedDisableLBRY",
-            "pipedProxyLBRY",
-            "pipedSelectedSkip",
-            "pipedSponsorblock",
-
-            "pipedMaterialSkipToLastPoint",
-        ],
-        r => {
-            autoplayElement.checked = r.youtubeAutoplay;
-
-            listenElement.checked = r.youtubeListen;
-            disableLBRYElement.checked = r.pipedDisableLBRY;
-            proxyLBRYElement.checked = r.pipedProxyLBRY;
-            sponsorblockElement.checked = r.pipedSponsorblock;
-            skipToLastPointElement.checked = r.pipedMaterialSkipToLastPoint;
-
-            selectSkip = r.pipedSelectedSkip;
-            selectedSkipSponsorElement.checked = selectSkip.includes('sponsors');
-            selectedSkipIntroElement.checked = selectSkip.includes('intro');
-            selectedSkipOutroElement.checked = selectSkip.includes('outro');
-            selectedSkipPreviewElement.checked = selectSkip.includes('preview');
-            selectedSkipInteractionElement.checked = selectSkip.includes('interaction');
-            selectedSkipSelfpromoElement.checked = selectSkip.includes('selfpromo');
-            selectedSkipMusicOfftopicElement.checked = selectSkip.includes('music_offtopic');
-
-            volumeElement.value = r.youtubeVolume;
-            volumeValueElement.textContent = `${r.youtubeVolume}%`;
-
-            commonHelper.processDefaultCustomInstances('pipedMaterial', 'normal', youtubeHelper, document);
-            commonHelper.processDefaultCustomInstances('pipedMaterial', 'tor', youtubeHelper, document);
-        });
-}
-init();
+browser.storage.local.get(
+    [
+        "youtubeAutoplay",
+        "youtubeVolume",
+        "youtubeListen",
+
+        "pipedDisableLBRY",
+        "pipedProxyLBRY",
+        "pipedSelectedSkip",
+        "pipedSponsorblock",
+
+        "pipedMaterialSkipToLastPoint",
+    ],
+    r => {
+        autoplayElement.checked = r.youtubeAutoplay;
+
+        listenElement.checked = r.youtubeListen;
+        disableLBRYElement.checked = r.pipedDisableLBRY;
+        proxyLBRYElement.checked = r.pipedProxyLBRY;
+        sponsorblockElement.checked = r.pipedSponsorblock;
+        skipToLastPointElement.checked = r.pipedMaterialSkipToLastPoint;
+
+        selectSkip = r.pipedSelectedSkip;
+        selectedSkipSponsorElement.checked = selectSkip.includes('sponsors');
+        selectedSkipIntroElement.checked = selectSkip.includes('intro');
+        selectedSkipOutroElement.checked = selectSkip.includes('outro');
+        selectedSkipPreviewElement.checked = selectSkip.includes('preview');
+        selectedSkipInteractionElement.checked = selectSkip.includes('interaction');
+        selectedSkipSelfpromoElement.checked = selectSkip.includes('selfpromo');
+        selectedSkipMusicOfftopicElement.checked = selectSkip.includes('music_offtopic');
+
+        volumeElement.value = r.youtubeVolume;
+        volumeValueElement.textContent = `${r.youtubeVolume}%`;
+    });
+
+commonHelper.processDefaultCustomInstances('youtube' ,'pipedMaterial', 'normal',  document);
+commonHelper.processDefaultCustomInstances('youtube' ,'pipedMaterial', 'tor',  document);
 
 let latencyPipedMaterialElement = document.getElementById("latency-pipedMaterial");
 let latencyPipedMaterialLabel = document.getElementById("latency-pipedMaterial-label");
@@ -121,7 +118,7 @@ latencyPipedMaterialElement.addEventListener("click",
         commonHelper.testLatency(latencyPipedMaterialLabel, redirects.pipedMaterial.normal).then(r => {
             browser.storage.local.set({ pipedMaterialLatency: r });
             latencyPipedMaterialLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('pipedMaterial', 'normal', youtubeHelper, document);
+            commonHelper.processDefaultCustomInstances('youtube' ,'pipedMaterial', 'normal',  document);
             latencyPipedMaterialElement.removeEventListener("click", reloadWindow);
         });
     }
diff --git a/src/pages/options/youtubeMusic/youtubeMusic.js b/src/pages/options/youtubeMusic/youtubeMusic.js
index 54a6f8d6..518c651d 100644
--- a/src/pages/options/youtubeMusic/youtubeMusic.js
+++ b/src/pages/options/youtubeMusic/youtubeMusic.js
@@ -18,7 +18,7 @@ document.addEventListener("change", async () => {
     })
 })
 
-commonHelper.processDefaultCustomInstances('beatbump', 'normal', youtubeMusicHelper, document);
+commonHelper.processDefaultCustomInstances('youtubeMusic', 'beatbump', 'normal', document);
 
 let latencyElement = document.getElementById("latency");
 let latencyLabel = document.getElementById("latency-label");
@@ -33,7 +33,7 @@ latencyElement.addEventListener("click",
         commonHelper.testLatency(latencyLabel, redirects.beatbump.normal).then(r => {
             browser.storage.local.set({ beatbumpLatency: r });
             latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('beatbump', 'normal', youtubeMusicHelper, document)
+            commonHelper.processDefaultCustomInstances('youtubeMusic', 'beatbump', 'normal', document);
             latencyElement.removeEventListener("click", reloadWindow)
         });
     }