about summary refs log tree commit diff stats
path: root/src/assets
diff options
context:
space:
mode:
authorManeraKai <manerakai@protonmail.com>2022-05-15 18:44:28 +0300
committerManeraKai <manerakai@protonmail.com>2022-05-15 18:44:28 +0300
commitab44fd04ffa1055bd17a3da02017e8de3da88af2 (patch)
tree31480d540bcedd00c74ede926449af3ed34856bb /src/assets
parentMerge branch 'master' of https://github.com/libredirect/libredirect (diff)
downloadlibredirect-ab44fd04ffa1055bd17a3da02017e8de3da88af2.zip
Complete on supporting Unify #234
Diffstat (limited to 'src/assets')
-rw-r--r--src/assets/javascripts/helpers/common.js84
-rw-r--r--src/assets/javascripts/helpers/general.js28
-rw-r--r--src/assets/javascripts/helpers/imgur.js64
-rw-r--r--src/assets/javascripts/helpers/instagram.js80
-rw-r--r--src/assets/javascripts/helpers/lbry.js1
-rw-r--r--src/assets/javascripts/helpers/medium.js27
-rw-r--r--src/assets/javascripts/helpers/peertube.js21
-rw-r--r--src/assets/javascripts/helpers/reddit.js232
-rw-r--r--src/assets/javascripts/helpers/search.js281
-rw-r--r--src/assets/javascripts/helpers/sendTargets.js13
-rw-r--r--src/assets/javascripts/helpers/tiktok.js112
-rw-r--r--src/assets/javascripts/helpers/translate/lingva-preferences.js4
-rw-r--r--src/assets/javascripts/helpers/translate/translate.js99
-rw-r--r--src/assets/javascripts/helpers/twitter.js193
-rw-r--r--src/assets/javascripts/helpers/wikipedia.js95
-rw-r--r--src/assets/javascripts/helpers/youtube/get_piped_settings.js22
-rw-r--r--src/assets/javascripts/helpers/youtube/invidious.js133
-rw-r--r--src/assets/javascripts/helpers/youtube/piped-preferences.js65
-rw-r--r--src/assets/javascripts/helpers/youtube/piped.js98
-rw-r--r--src/assets/javascripts/helpers/youtube/youtube.js137
-rw-r--r--src/assets/javascripts/helpers/youtubeMusic.js2
21 files changed, 741 insertions, 1050 deletions
diff --git a/src/assets/javascripts/helpers/common.js b/src/assets/javascripts/helpers/common.js
index f0da54c9..6e1c71ff 100644
--- a/src/assets/javascripts/helpers/common.js
+++ b/src/assets/javascripts/helpers/common.js
@@ -40,16 +40,13 @@ async function wholeInit() {
 }
 
 async function updateInstances() {
-  const apiEndpoint = 'https://raw.githubusercontent.com/libredirect/libredirect/master/src/instances/data.json';
-  let request = new XMLHttpRequest();
-  request.open('GET', apiEndpoint, false);
-  request.send(null);
-
-  if (request.status === 200) {
+  let http = new XMLHttpRequest();
+  http.open('GET', 'https://raw.githubusercontent.com/libredirect/libredirect/master/src/instances/data.json', false);
+  http.send(null);
 
+  if (http.status === 200) {
     await wholeInit();
-
-    const instances = JSON.parse(request.responseText);
+    const instances = JSON.parse(http.responseText);
 
     brwoser.storage.local.get(
       [
@@ -98,12 +95,7 @@ function protocolHost(url) {
   return `${url.protocol}//${url.host}`;
 }
 
-async function processDefaultCustomInstances(
-  target,
-  name,
-  protocol,
-  document,
-) {
+async function processDefaultCustomInstances(target, name, protocol, document) {
   function camelCase(str) {
     return str.charAt(0).toUpperCase() + str.slice(1);
   }
@@ -117,7 +109,6 @@ async function processDefaultCustomInstances(
 
   await initCloudflareList();
 
-
   let nameDefaultRedirects;
 
   let redirectsChecks = `${name}${camelCase(protocol)}RedirectsChecks`;
@@ -250,21 +241,39 @@ function isRtl() {
   return ["ar", "iw", "ku", "fa", "ur"].includes(browser.i18n.getUILanguage())
 }
 
-async function ping(href) {
+function getIp(href) {
   return new Promise(resolve => {
+    let host = new URL(href).hostname;
+    let http = new XMLHttpRequest();
+    http.open("GET", `https://dns.google/resolve?name=${host}`, /*async*/true);
+    http.onreadystatechange = () => {
+      if (http.readyState == 4 && http.status == 200) {
+        let r = JSON.parse(http.responseText);
+        resolve(r.Answer[0].data)
+      }
+    };
+    http.ontimeout = () => resolve()
+    http.onerror = () => resolve()
+    try {
+      http.send(null)
+    }
+    catch (exception) {
+      resolve()
+    }
+  })
+}
+
+async function ping(href) {
+  return new Promise(async resolve => {
     let http = new XMLHttpRequest();
-    http.open("GET", href + '?_=' + new Date().getTime(), /*async*/true);
+    http.open("GET", `${href}?_=${new Date().getTime()}`, /*async*/true);
     http.timeout = 5000;
     let started = new Date().getTime();
-    http.onreadystatechange = function () {
+    http.onreadystatechange = () => {
       if (http.readyState == 2) {
-        if (http.status == 200) {
-          let ended = new Date().getTime();
-          let ms = ended - started;
-          http.abort();
-          resolve(ms);
-        }
-        else resolve()
+        let ended = new Date().getTime();
+        http.abort();
+        resolve(ended - started);
       }
     };
     http.ontimeout = () => resolve(5000)
@@ -283,19 +292,33 @@ async function testLatency(element, instances) {
     for (const href of instances) await ping(href).then(m => {
       if (m) {
         myList[href] = m;
-        element.innerHTML = `${href}:&nbsp;${'<span style="color:' + (m <= 1000 ? "green" : m <= 2000 ? "orange" : "red") + ';">' + (m == 5000 ? '5000ms+' : m + 'ms') + '</span>'}`;
-        console.log(`${href}: ${m}ms`)
+        let color = m <= 1000 ? "green" : m <= 2000 ? "orange" : "red";
+        let text = m == 5000 ? '5000ms+' : m + 'ms';
+        element.innerHTML = `${href}:&nbsp;'<span style="color:${color};">${text}</span>`;
       }
     })
     resolve(myList);
   })
 }
 
-function copyCookie(targetUrl, url, name) {
+function copyCookie(frontend, targetUrl, url, name) {
   browser.cookies.get(
     { url: protocolHost(targetUrl), name: name },
     r => {
-      if (r) browser.cookies.set({ url: url, name: name, value: r.value })
+      if (r) {
+        browser.cookies.set({ url: url, name: name, value: r.value })
+        browser.storage.local.set({ [`${frontend}_${name}`]: r.value })
+      }
+    }
+  )
+}
+
+function getCookiesFromStorage(frontend, to, name) {
+  let key = `${frontend}_${name}`;
+  browser.storage.local.get(
+    key,
+    r => {
+      if (r) browser.cookies.set({ url: to, name: name, value: r[key] })
     }
   )
 }
@@ -307,5 +330,6 @@ export default {
   processDefaultCustomInstances,
   isRtl,
   testLatency,
-  copyCookie
+  copyCookie,
+  getCookiesFromStorage,
 }
diff --git a/src/assets/javascripts/helpers/general.js b/src/assets/javascripts/helpers/general.js
index b6570629..fdc60643 100644
--- a/src/assets/javascripts/helpers/general.js
+++ b/src/assets/javascripts/helpers/general.js
@@ -1,14 +1,6 @@
 "use strict";
 window.browser = window.browser || window.chrome;
 
-let alwaysUsePreferred;
-const getAlwaysUsePreferred = () => alwaysUsePreferred;
-function setAlwaysUsePreferred(val) {
-    alwaysUsePreferred = val;
-    browser.storage.local.set({ alwaysUsePreferred })
-    console.log("alwaysUsePreferred: ", alwaysUsePreferred)
-}
-
 let theme;
 const getTheme = () => theme;
 function setTheme(val) {
@@ -17,14 +9,6 @@ function setTheme(val) {
     console.log("theme: ", theme)
 }
 
-let applyThemeToSites;
-const getApplyThemeToSites = () => applyThemeToSites;
-function setApplyThemeToSites(val) {
-    applyThemeToSites = val;
-    browser.storage.local.set({ applyThemeToSites })
-    console.log("applyThemeToSites: ", applyThemeToSites)
-}
-
 let exceptions = {
     "url": [],
     "regex": [],
@@ -59,18 +43,14 @@ async function init() {
         resolve => browser.storage.local.get(
             [
                 "exceptions",
-                "alwaysUsePreferred",
                 "theme",
-                "applyThemeToSites",
                 "popupFrontends",
                 "autoRedirect"
             ],
-            r => { 
+            r => {
                 if (r.exceptions) exceptions = r.exceptions;
-                alwaysUsePreferred = r.alwaysUsePreferred ?? false;
 
                 theme = r.theme ?? "DEFAULT"
-                applyThemeToSites = r.applyThemeToSites ?? false;
 
                 popupFrontends = r.popupFrontends ?? [
                     "youtube",
@@ -128,12 +108,6 @@ export default {
     getAutoRedirect,
     setAutoRedirect,
 
-    getAlwaysUsePreferred,
-    setAlwaysUsePreferred,
-
-    getApplyThemeToSites,
-    setApplyThemeToSites,
-
     getPopupFrontends,
     setPopupFrontends,
 
diff --git a/src/assets/javascripts/helpers/imgur.js b/src/assets/javascripts/helpers/imgur.js
index f581a75a..8f8c28e9 100644
--- a/src/assets/javascripts/helpers/imgur.js
+++ b/src/assets/javascripts/helpers/imgur.js
@@ -52,21 +52,8 @@ let
     rimgoI2pCustomRedirects;
 
 function redirect(url, type, initiator) {
-    // https://imgur.com/gallery/s4WXQmn
-    // https://imgur.com/a/H8M4rcp
-    // https://imgur.com/gallery/gYiQLWy
-    // https://imgur.com/gallery/cTRwaJU
-    // https://i.imgur.com/CFSQArP.jpeg
-
     if (disable) return;
-    if (url.pathname == "/") false;
-    if (
-        initiator &&
-        ([...redirects.rimgo.normal, ...rimgoNormalCustomRedirects].includes(initiator.origin) || targets.test(initiator.host))
-    ) return;
-    if (!targets.test(url.href)) return;
-
-
+    if (url.pathname == "/") return;
     if (![
         "main_frame",
         "sub_frame",
@@ -74,10 +61,19 @@ function redirect(url, type, initiator) {
         "other",
         "image",
         "media",
-    ].includes(type)) return null;
-
-    if (url.pathname.includes("delete/")) return null;
+    ].includes(type)) return;
+    if (
+        initiator &&
+        ([...redirects.rimgo.normal, ...rimgoNormalCustomRedirects].includes(initiator.origin) || targets.test(initiator.host))
+    ) return;
+    if (!targets.test(url.href)) return;
+    if (url.pathname.includes("delete/")) return;
 
+    // https://imgur.com/gallery/s4WXQmn
+    // https://imgur.com/a/H8M4rcp
+    // https://imgur.com/gallery/gYiQLWy
+    // https://imgur.com/gallery/cTRwaJU
+    // https://i.imgur.com/CFSQArP.jpeg
     let instancesList;
     if (protocol == 'normal') instancesList = [...rimgoNormalRedirectsChecks, ...rimgoNormalCustomRedirects];
     if (protocol == 'tor') instancesList = [...rimgoTorRedirectsChecks, ...rimgoTorCustomRedirects];
@@ -88,17 +84,29 @@ function redirect(url, type, initiator) {
     return `${randomInstance}${url.pathname}${url.search}`;
 }
 
-function reverse(url) {
-    let protocolHost = commonHelper.protocolHost(url);
-    if (
-        ![...redirects.rimgo.normal,
-        ...redirects.rimgo.tor,
-        ...redirects.rimgo.i2p,
-        ...rimgoNormalCustomRedirects,
-        ...rimgoTorCustomRedirects,
-        ...rimgoI2pCustomRedirects].includes(protocolHost)
-    ) return;
-    return `https://imgur.com${url.pathname}${url.search}`;
+async function reverse(url) {
+    browser.storage.local.get(
+        [
+            "imgurRedirects",
+            "rimgoNormalCustomRedirects",
+            "rimgoTorCustomRedirects",
+            "rimgoI2pCustomRedirects",
+        ],
+        r => {
+            let protocolHost = commonHelper.protocolHost(url);
+            if (
+                ![
+                    ...r.imgurRedirects.rimgo.normal,
+                    ...r.imgurRedirects.rimgo.tor,
+                    ...r.imgurRedirects.rimgo.i2p,
+                    ...r.rimgoNormalCustomRedirects,
+                    ...r.rimgoTorCustomRedirects,
+                    ...r.rimgoI2pCustomRedirects
+                ].includes(protocolHost)
+            ) return;
+            return `https://imgur.com${url.pathname}${url.search}`;
+        }
+    )
 }
 
 function switchInstance(url) {
diff --git a/src/assets/javascripts/helpers/instagram.js b/src/assets/javascripts/helpers/instagram.js
index ca6097dd..effbe46c 100644
--- a/src/assets/javascripts/helpers/instagram.js
+++ b/src/assets/javascripts/helpers/instagram.js
@@ -84,21 +84,33 @@ function redirect(url, type, initiator) {
     return `${randomInstance}/u${url.pathname}${url.search}`; // Likely a user profile, redirect to '/u/...'
 }
 
-function reverse(url) {
-  let protocolHost = commonHelper.protocolHost(url);
-  if (
-    ![...redirects.bibliogram.normal,
-    ...redirects.bibliogram.tor,
-    ...bibliogramNormalCustomRedirects,
-    ...bibliogramTorCustomRedirects].includes(protocolHost)
-  ) return;
-  if (url.pathname.startsWith('/p'))
-    return `https://instagram.com${url.pathname.replace('/p', '')}${url.search}`;
-
-  if (url.pathname.startsWith('/u'))
-    return `https://instagram.com${url.pathname.replace('/u', '')}${url.search}`;
-
-  return `https://instagram.com${url.pathname}${url.search}`;
+async function reverse(url) {
+  browser.storage.local.get(
+    [
+      "instagramRedirects",
+      "bibliogramNormalCustomRedirects",
+      "bibliogramTorCustomRedirects",
+    ],
+    r => {
+      let protocolHost = commonHelper.protocolHost(url);
+      if (
+        ![
+          ...r.instagramRedirects.bibliogram.normal,
+          ...r.instagramRedirects.bibliogram.tor,
+          ...r.bibliogramNormalCustomRedirects,
+          ...r.bibliogramTorCustomRedirects
+        ].includes(protocolHost)
+      ) return;
+
+      if (url.pathname.startsWith('/p'))
+        return `https://instagram.com${url.pathname.replace('/p', '')}${url.search}`;
+
+      if (url.pathname.startsWith('/u'))
+        return `https://instagram.com${url.pathname.replace('/u', '')}${url.search}`;
+
+      return `https://instagram.com${url.pathname}${url.search}`;
+    }
+  )
 }
 
 function switchInstance(url) {
@@ -139,7 +151,6 @@ function isBibliogram(url) {
 
 let instancesCookies;
 let theme;
-let applyThemeToSites;
 function initBibliogramCookies(url) {
   let protocolHost = commonHelper.protocolHost(url);
   browser.cookies.get(
@@ -150,17 +161,15 @@ function initBibliogramCookies(url) {
         let request = new XMLHttpRequest();
         request.open("POST", `${protocolHost}/settings/return?referrer=%2F`);
 
-        if (applyThemeToSites) {
-          let themeValue;
-          if (theme == 'light') themeValue = "classic";
-          if (theme == 'dark') themeValue = "pussthecat.org-v2"
-
-          if (themeValue) {
-            let data = `csrf=x&theme=${themeValue}`;
-            request.send(data);
-            if (!instancesCookies.includes(protocolHost)) instancesCookies.push(protocolHost);
-            browser.storage.local.set({ instancesCookies })
-          }
+        let themeValue;
+        if (theme == 'light') themeValue = "classic";
+        if (theme == 'dark') themeValue = "pussthecat.org-v2"
+
+        if (themeValue) {
+          let data = `csrf=x&theme=${themeValue}`;
+          request.send(data);
+          if (!instancesCookies.includes(protocolHost)) instancesCookies.push(protocolHost);
+          browser.storage.local.set({ instancesCookies })
         }
       }
     })
@@ -168,25 +177,22 @@ function initBibliogramCookies(url) {
 }
 
 
-async function initDefaults() {
-  return new Promise(async resolve => {
-    fetch('/instances/data.json').then(response => response.text()).then(async data => {
+function initDefaults() {
+  return new Promise(resolve => {
+    fetch('/instances/data.json').then(response => response.text()).then(data => {
       let dataJson = JSON.parse(data);
       redirects.bibliogram = dataJson.bibliogram;
-      browser.storage.local.get('cloudflareList', async r => {
+      browser.storage.local.get('cloudflareList', r => {
         bibliogramNormalRedirectsChecks = [...redirects.bibliogram.normal];
         for (const instance of r.cloudflareList) {
-          let i;
-
-          i = bibliogramNormalRedirectsChecks.indexOf(instance);
+          let i = bibliogramNormalRedirectsChecks.indexOf(instance);
           if (i > -1) bibliogramNormalRedirectsChecks.splice(i, 1);
         }
-        await browser.storage.local.set({
+        browser.storage.local.set({
           disableInstagram: false,
           instagramRedirects: redirects,
 
           theme: 'DEFAULT',
-          applyThemeToSites: false,
 
           instancesCookies: [],
 
@@ -212,7 +218,6 @@ async function init() {
         "instagramRedirects",
 
         "theme",
-        "applyThemeToSites",
 
         "instancesCookies",
 
@@ -228,7 +233,6 @@ async function init() {
         if (r.instagramRedirects) redirects = r.instagramRedirects
 
         theme = r.theme;
-        applyThemeToSites = r.applyThemeToSites;
 
         instancesCookies = r.instancesCookies;
 
diff --git a/src/assets/javascripts/helpers/lbry.js b/src/assets/javascripts/helpers/lbry.js
index b82ae9ad..6010574e 100644
--- a/src/assets/javascripts/helpers/lbry.js
+++ b/src/assets/javascripts/helpers/lbry.js
@@ -118,7 +118,6 @@ async function initDefaults() {
     })
 }
 
-
 async function init() {
     return new Promise(resolve => {
         browser.storage.local.get(
diff --git a/src/assets/javascripts/helpers/medium.js b/src/assets/javascripts/helpers/medium.js
index 99a14cca..5306f478 100644
--- a/src/assets/javascripts/helpers/medium.js
+++ b/src/assets/javascripts/helpers/medium.js
@@ -35,18 +35,9 @@ let redirects = {
   }
 };
 const getRedirects = () => redirects;
-const getCustomRedirects = function () {
-  return {
-    "scribe": {
-      "normal": [...scribeNormalRedirectsChecks, ...scribeNormalCustomRedirects],
-      "tor": [...scribeTorRedirectsChecks, ...scribeTorCustomRedirects]
-    },
-  };
-};
 function setRedirects(val) {
   redirects.scribe = val;
   browser.storage.local.set({ mediumRedirects: redirects })
-  console.log("mediumRedirects: ", val)
   for (const item of scribeNormalRedirectsChecks) if (!redirects.scribe.normal.includes(item)) {
     var index = scribeNormalRedirectsChecks.indexOf(item);
     if (index !== -1) scribeNormalRedirectsChecks.splice(index, 1);
@@ -78,12 +69,11 @@ function redirect(url, type, initiator) {
 
   if (disable) return;
 
-  if (type != "main_frame" && "sub_frame" && "xmlhttprequest" && "other") return null;
+  if (type != "main_frame" && "sub_frame" && "xmlhttprequest" && "other") return;
 
   if (initiator && ([...redirects.scribe.normal, ...scribeNormalCustomRedirects].includes(initiator.origin))) return;
 
   if (!targets.some(rx => rx.test(url.host))) return;
-  console.log('url.pathname', url.pathname);
   if (/^\/($|@[a-zA-Z.]{0,}(\/|)$)/.test(url.pathname)) return;
 
   let instancesList;
@@ -112,7 +102,6 @@ function switchInstance(url) {
   if (protocol == 'normal') instancesList = [...scribeNormalCustomRedirects, ...scribeNormalRedirectsChecks];
   else if (protocol == 'tor') instancesList = [...scribeTorCustomRedirects, ...scribeTorRedirectsChecks];
 
-  console.log("instancesList", instancesList);
   let index = instancesList.indexOf(protocolHost);
   if (index > -1) instancesList.splice(index, 1);
 
@@ -122,17 +111,17 @@ function switchInstance(url) {
   return `${randomInstance}${url.pathname}${url.search}`;
 }
 
-async function initDefaults() {
-  fetch('/instances/data.json').then(response => response.text()).then(async data => {
+function initDefaults() {
+  fetch('/instances/data.json').then(response => response.text()).then(data => {
     let dataJson = JSON.parse(data);
     redirects.scribe = dataJson.scribe;
-    browser.storage.local.get('cloudflareList', async r => {
+    browser.storage.local.get('cloudflareList', 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({
+      browser.storage.local.set({
         disableMedium: false,
         mediumRedirects: redirects,
 
@@ -162,10 +151,7 @@ async function init() {
       ],
       r => {
         disable = r.disableMedium;
-
         protocol = r.mediumProtocol;
-
-
         redirects = r.mediumRedirects;
 
         scribeNormalRedirectsChecks = r.scribeNormalRedirectsChecks;
@@ -181,10 +167,7 @@ async function init() {
 }
 
 export default {
-  targets,
-
   getRedirects,
-  getCustomRedirects,
   setRedirects,
 
   redirect,
diff --git a/src/assets/javascripts/helpers/peertube.js b/src/assets/javascripts/helpers/peertube.js
index 14dda0b1..7fca2b61 100644
--- a/src/assets/javascripts/helpers/peertube.js
+++ b/src/assets/javascripts/helpers/peertube.js
@@ -73,11 +73,18 @@ function switchInstance(url) {
 }
 
 function redirect(url, type, initiator) {
-
-    let protocolHost = commonHelper.protocolHost(url);
-
     if (disable) return null;
-    if (initiator && ([...redirects.simpleertube.normal, ...simpleertubeNormalCustomRedirects].includes(initiator.origin) || targets.includes(initiator.host))) return null;
+    if (
+        initiator &&
+        (
+            [
+                ...redirects.simpleertube.normal,
+                ...simpleertubeNormalCustomRedirects
+            ].includes(initiator.origin) ||
+            targets.includes(initiator.host)
+        )
+    ) return null;
+    let protocolHost = commonHelper.protocolHost(url);
     if (!targets.includes(protocolHost)) return null;
 
     if (type != "main_frame") return null;
@@ -104,9 +111,7 @@ async function initDefaults() {
             }
             await browser.storage.local.set({
                 peerTubeTargets: ['https://search.joinpeertube.org', ...dataJson.peertube],
-
                 disablePeertubeTargets: true,
-
                 peertubeRedirects: redirects,
 
                 simpleertubeNormalRedirectsChecks: simpleertubeNormalRedirectsChecks,
@@ -132,14 +137,11 @@ async function init() {
             "simpleertubeTorCustomRedirects",
 
             "peerTubeTargets",
-
             "peertubeTargetsProtocol"
         ],
         r => {
             disable = r.disablePeertubeTargets;
-
             protocol = r.peertubeTargetsProtocol;
-
             targets = r.peerTubeTargets;
 
             simpleertubeNormalRedirectsChecks = r.simpleertubeNormalRedirectsChecks;
@@ -152,7 +154,6 @@ async function init() {
 }
 
 export default {
-
     getRedirects,
     setRedirects,
 
diff --git a/src/assets/javascripts/helpers/reddit.js b/src/assets/javascripts/helpers/reddit.js
index 04ac2a4b..bbcaf872 100644
--- a/src/assets/javascripts/helpers/reddit.js
+++ b/src/assets/javascripts/helpers/reddit.js
@@ -17,18 +17,6 @@ let redirects = {
   },
 };
 const getRedirects = () => redirects;
-const getCustomRedirects = function () {
-  return {
-    "libreddit": {
-      "normal": [...libredditNormalRedirectsChecks, ...libredditNormalCustomRedirects],
-      "tor": [...libredditTorRedirectsChecks, ...libredditTorCustomRedirects]
-    },
-    "teddit": {
-      "normal": [...tedditNormalRedirectsChecks, ...tedditNormalCustomRedirects],
-      "tor": [...tedditTorRedirectsChecks, ...tedditTorCustomRedirects]
-    }
-  };
-};
 
 function setLibredditRedirects(val) {
   redirects.libreddit = val;
@@ -80,63 +68,93 @@ let tedditTorCustomRedirects = [];
 
 const bypassPaths = /\/(gallery\/poll\/rpan\/settings\/topics)/;
 
-let disableReddit;
-const getDisableReddit = () => disableReddit;
-function setDisableReddit(val) {
-  disableReddit = val;
-  browser.storage.local.set({ disableReddit })
-}
+let
+  disableReddit,
+  frontend,
+  protocol;
 
-let frontend;
-let protocol;
-let bypassWatchOnReddit;
-
-function initLibredditCookies(targetUrl) {
-  browser.storage.local.get(
-    [
-      "redditProtocol",
-      "libredditNormalRedirectsChecks",
-      "libredditNormalCustomRedirects",
-      "libredditTorRedirectsChecks",
-      "libredditTorCustomRedirects",
-    ],
-    r => {
-      let checkedInstances;
-      if (r.redditProtocol == 'normal') checkedInstances = [...r.libredditNormalRedirectsChecks, ...r.libredditNormalCustomRedirects];
-      else if (r.redditProtocol == 'tor') checkedInstances = [...r.libredditTorRedirectsChecks, ...r.libredditTorCustomRedirects];
-
-      for (const instance of checkedInstances) {
-        commonHelper.copyCookie(targetUrl, instance, "theme");
-        commonHelper.copyCookie(targetUrl, instance, "front_page");
-        commonHelper.copyCookie(targetUrl, instance, "layout");
-        commonHelper.copyCookie(targetUrl, instance, "wide");
-        commonHelper.copyCookie(targetUrl, instance, "post_sort");
-        commonHelper.copyCookie(targetUrl, instance, "comment_sort");
-        commonHelper.copyCookie(targetUrl, instance, "show_nsfw");
-        commonHelper.copyCookie(targetUrl, instance, "autoplay_videos");
-        commonHelper.copyCookie(targetUrl, instance, "use_hls");
-        commonHelper.copyCookie(targetUrl, instance, "hide_hls_notification");
+function initLibredditCookies(from) {
+  return new Promise(resolve => {
+    browser.storage.local.get(
+      [
+        "redditProtocol",
+        "libredditNormalRedirectsChecks",
+        "libredditNormalCustomRedirects",
+        "libredditTorRedirectsChecks",
+        "libredditTorCustomRedirects",
+      ],
+      r => {
+        let protocolHost = commonHelper.protocolHost(from);
+        if (![
+          ...r.libredditNormalRedirectsChecks,
+          ...r.libredditTorRedirectsChecks,
+          ...r.libredditNormalCustomRedirects,
+          ...r.libredditTorCustomRedirects,
+        ].includes(protocolHost)) resolve();
+
+        let checkedInstances;
+        if (r.redditProtocol == 'normal') checkedInstances = [...r.libredditNormalRedirectsChecks, ...r.libredditNormalCustomRedirects];
+        else if (r.redditProtocol == 'tor') checkedInstances = [...r.libredditTorRedirectsChecks, ...r.libredditTorCustomRedirects];
+        for (const to of checkedInstances) {
+          commonHelper.copyCookie('libreddit', from, to, "theme");
+          commonHelper.copyCookie('libreddit', from, to, "front_page");
+          commonHelper.copyCookie('libreddit', from, to, "layout");
+          commonHelper.copyCookie('libreddit', from, to, "wide");
+          commonHelper.copyCookie('libreddit', from, to, "post_sort");
+          commonHelper.copyCookie('libreddit', from, to, "comment_sort");
+          commonHelper.copyCookie('libreddit', from, to, "show_nsfw");
+          commonHelper.copyCookie('libreddit', from, to, "autoplay_videos");
+          commonHelper.copyCookie('libreddit', from, to, "use_hls");
+          commonHelper.copyCookie('libreddit', from, to, "hide_hls_notification");
+        }
+        resolve(true);
       }
-    }
-  )
-}
+    )
+  })
 
-function initTedditCookies() {
-  let checkedInstances = [
-    ...tedditNormalRedirectsChecks,
-    ...tedditNormalCustomRedirects,
-    ...tedditTorRedirectsChecks,
-    ...tedditTorCustomRedirects
-  ]
-  for (const instanceUrl of checkedInstances)
-    browser.cookies.set({
-      url: instanceUrl,
-      name: "theme",
-      value: theme == 'dark' ? 'dark' : 'white'
-    })
 }
 
-let alwaysUsePreferred;
+function initTedditCookies(from) {
+  return new Promise(resolve => {
+    browser.storage.local.get(
+      [
+        "redditProtocol",
+        "tedditNormalRedirectsChecks",
+        "tedditNormalCustomRedirects",
+        "tedditTorRedirectsChecks",
+        "tedditTorCustomRedirects",
+      ],
+      r => {
+        let protocolHost = commonHelper.protocolHost(from);
+        if (![
+          ...r.tedditNormalRedirectsChecks,
+          ...r.tedditTorRedirectsChecks,
+          ...r.tedditNormalCustomRedirects,
+          ...r.tedditTorCustomRedirects,
+        ].includes(protocolHost)) resolve();
+
+        let checkedInstances;
+        if (r.redditProtocol == 'normal') checkedInstances = [...r.tedditNormalRedirectsChecks, ...r.tedditNormalCustomRedirects]
+        else if (r.redditProtocol == 'tor') checkedInstances = [...r.tedditTorRedirectsChecks, ...r.tedditTorCustomRedirects]
+        for (const to of checkedInstances) {
+          commonHelper.copyCookie('teddit', from, to, 'collapse_child_comments')
+          commonHelper.copyCookie('teddit', from, to, 'domain_instagram')
+          commonHelper.copyCookie('teddit', from, to, 'domain_twitter')
+          commonHelper.copyCookie('teddit', from, to, 'domain_youtube')
+          commonHelper.copyCookie('teddit', from, to, 'flairs')
+          commonHelper.copyCookie('teddit', from, to, 'highlight_controversial')
+          commonHelper.copyCookie('teddit', from, to, 'nsfw_enabled')
+          commonHelper.copyCookie('teddit', from, to, 'post_media_max_height')
+          commonHelper.copyCookie('teddit', from, to, 'show_upvoted_percentage')
+          commonHelper.copyCookie('teddit', from, to, 'show_upvotes')
+          commonHelper.copyCookie('teddit', from, to, 'theme')
+          commonHelper.copyCookie('teddit', from, to, 'videos_muted')
+        }
+        resolve(true);
+      }
+    )
+  })
+}
 
 function redirect(url, type, initiator) {
   // https://libreddit.exonip.de/vid/1mq8d0ma3yk81/720.mp4
@@ -151,47 +169,9 @@ function redirect(url, type, initiator) {
   // https://i.redd.it/bfkhs659tzk81.jpg
 
   if (disableReddit) return null;
-
-  let protocolHost = commonHelper.protocolHost(url);
-
-  let isTeddit = [
-    ...redirects.teddit.normal,
-    ...redirects.teddit.tor
-  ].includes(protocolHost);
-
-  let isCheckedTeddit = [
-    ...tedditNormalRedirectsChecks,
-    ...tedditNormalCustomRedirects,
-    ...tedditTorRedirectsChecks,
-    ...tedditTorCustomRedirects,
-  ].includes(protocolHost);
-
-  let isLibreddit = [
-    ...redirects.libreddit.normal,
-    ...redirects.libreddit.tor
-  ].includes(protocolHost);
-
-  let isCheckedLibreddit = [
-    ...libredditNormalRedirectsChecks,
-    ...libredditNormalCustomRedirects,
-    ...libredditTorRedirectsChecks,
-    ...libredditTorCustomRedirects,
-  ].includes(protocolHost)
-
-  if (
-    alwaysUsePreferred && frontend == 'teddit' &&
-    (isTeddit || isLibreddit) && !isCheckedTeddit
-  ) return switchInstance(url);
-
-  if (
-    alwaysUsePreferred && frontend == 'libreddit' &&
-    (isTeddit || isLibreddit) && !isCheckedLibreddit
-  ) return switchInstance(url);
-
   if (!targets.some(rx => rx.test(url.href))) return null;
 
   if (
-    bypassWatchOnReddit &&
     initiator &&
     [...redirects.libreddit.normal,
     ...redirects.libreddit.tor,
@@ -320,10 +300,7 @@ async function switchInstance(url) {
           ...r.tedditNormalCustomRedirects,
           ...r.tedditTorCustomRedirects,
         ]
-
         if (!redditList.includes(protocolHost)) return null;
-
-        console.log('redditFrontend', r.redditFrontend)
         let instancesList;
         if (r.redditFrontend == 'libreddit') {
           if (r.redditProtocol == 'normal') instancesList = [...r.libredditNormalRedirectsChecks, ...r.libredditNormalCustomRedirects];
@@ -346,7 +323,6 @@ async function switchInstance(url) {
       }
     )
   })
-
 }
 
 async function initDefaults() {
@@ -370,10 +346,6 @@ async function initDefaults() {
         disableReddit: false,
         redditProtocol: 'normal',
         redditFrontend: 'libreddit',
-
-        bypassWatchOnReddit: true,
-        alwaysUsePreferred: false,
-
         redditRedirects: redirects,
 
         libredditNormalRedirectsChecks: libredditNormalRedirectsChecks,
@@ -387,18 +359,6 @@ async function initDefaults() {
 
         tedditTorRedirectsChecks: [...redirects.teddit.tor],
         tedditTorCustomRedirects: [],
-
-        enableLibredditCustomSettings: false,
-
-        redditTheme: 'system',
-        redditFrontPage: 'default',
-        redditLayout: 'card',
-        redditWide: false,
-        redditPostSort: 'hot',
-        redditCommentSort: 'confidence',
-        redditShowNsfw: false,
-        redditUseHls: false,
-        redditHideHlsNotification: false,
       });
     });
   });
@@ -411,6 +371,7 @@ async function init() {
         "disableReddit",
         "redditFrontend",
         "redditRedirects",
+        "redditProtocol",
 
         "libredditNormalRedirectsChecks",
         "libredditNormalCustomRedirects",
@@ -421,32 +382,10 @@ async function init() {
         "tedditNormalCustomRedirects",
         "tedditTorRedirectsChecks",
         "tedditTorCustomRedirects",
-
-        "redditProtocol",
-        "bypassWatchOnReddit",
-
-        "alwaysUsePreferred",
-
-        "enableLibredditCustomSettings",
-
-        "redditTheme",
-        "redditFrontPage",
-        "redditLayout",
-        "redditWide",
-        "redditPostSort",
-        "redditCommentSort",
-        "redditShowNsfw",
-        "redditAutoplayVideos",
-        "redditUseHls",
-        "redditHideHlsNotification",
       ], r => {
         disableReddit = r.disableReddit;
         protocol = r.redditProtocol;
         frontend = r.redditFrontend;
-
-        bypassWatchOnReddit = r.bypassWatchOnReddit;
-        alwaysUsePreferred = r.alwaysUsePreferred;
-
         redirects = r.redditRedirects;
 
         libredditNormalRedirectsChecks = r.libredditNormalRedirectsChecks;
@@ -468,15 +407,10 @@ async function init() {
 }
 
 export default {
-  targets,
   getRedirects,
-  getCustomRedirects,
   setTedditRedirects,
   setLibredditRedirects,
 
-  getDisableReddit,
-  setDisableReddit,
-
   initLibredditCookies,
   initTedditCookies,
 
diff --git a/src/assets/javascripts/helpers/search.js b/src/assets/javascripts/helpers/search.js
index e6d230fe..730f3938 100644
--- a/src/assets/javascripts/helpers/search.js
+++ b/src/assets/javascripts/helpers/search.js
@@ -122,138 +122,120 @@ let
   whoogleTorCustomRedirects,
   whoogleI2pCustomRedirects;
 
-let disable; // disableSearch
-let frontend; // searchFrontend
-let protocol; // searchProtocol
-
-let theme;
-let applyThemeToSites;
-function initSearxCookies() {
-  let themeValue;
-  if (theme == 'light') themeValue = 'logicodev';
-  if (theme == 'dark') themeValue = 'logicodev-dark';
-  if (applyThemeToSites && themeValue) {
-    let checkedInstances;
-    if (protocol == 'normal') checkedInstances = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects];
-    else if (protocol == 'tor') checkedInstances = [...searxTorRedirectsChecks, ...searxTorCustomRedirects];
-    else if (protocol == 'i2p') checkedInstances = [...searxI2pRedirectsChecks, ...searxI2pCustomRedirects];
-
-    for (const instanceUrl of checkedInstances) {
-      browser.cookies.set({ url: instanceUrl, name: "oscar-style", value: themeValue })
-      browser.cookies.set({ url: instanceUrl, name: "theme", value: 'oscar' })
-    }
-  }
+let disable, // disableSearch
+  frontend, // searchFrontend
+  protocol; // searchProtocol
+
+function initSearxCookies(from) {
+  return new Promise(resolve => {
+    browser.storage.local.get(
+      [
+        "searchProtocol",
+        "searxNormalRedirectsChecks",
+        "searxNormalCustomRedirects",
+        "searxTorRedirectsChecks",
+        "searxTorCustomRedirects",
+        "searxI2pRedirectsChecks",
+        "searxI2pCustomRedirects",
+      ],
+      r => {
+        let protocolHost = commonHelper.protocolHost(from);
+        if (![
+          ...r.searxNormalRedirectsChecks,
+          ...r.searxNormalCustomRedirects,
+          ...r.searxTorRedirectsChecks,
+          ...r.searxTorCustomRedirects,
+          ...r.searxI2pRedirectsChecks,
+          ...r.searxI2pCustomRedirects,
+        ].includes(protocolHost)) resolve();
+
+        let checkedInstances;
+        if (protocol == 'normal') checkedInstances = [...r.searxNormalRedirectsChecks, ...r.searxNormalCustomRedirects];
+        else if (protocol == 'tor') checkedInstances = [...r.searxTorRedirectsChecks, ...r.searxTorCustomRedirects];
+        else if (protocol == 'i2p') checkedInstances = [...r.searxI2pRedirectsChecks, ...r.searxI2pCustomRedirects];
+        for (const to of checkedInstances) {
+          commonHelper.copyCookie('searx', from, to, 'advanced_search');
+          commonHelper.copyCookie('searx', from, to, 'autocomplete');
+          commonHelper.copyCookie('searx', from, to, 'categories');
+          commonHelper.copyCookie('searx', from, to, 'disabled_engines');
+          commonHelper.copyCookie('searx', from, to, 'disabled_plugins');
+          commonHelper.copyCookie('searx', from, to, 'doi_resolver');
+          commonHelper.copyCookie('searx', from, to, 'enabled_engines');
+          commonHelper.copyCookie('searx', from, to, 'enabled_plugins');
+          commonHelper.copyCookie('searx', from, to, 'image_proxy');
+          commonHelper.copyCookie('searx', from, to, 'language');
+          commonHelper.copyCookie('searx', from, to, 'locale');
+          commonHelper.copyCookie('searx', from, to, 'method');
+          commonHelper.copyCookie('searx', from, to, 'oscar-style');
+          commonHelper.copyCookie('searx', from, to, 'results_on_new_tab');
+          commonHelper.copyCookie('searx', from, to, 'safesearch');
+          commonHelper.copyCookie('searx', from, to, 'theme');
+          commonHelper.copyCookie('searx', from, to, 'tokens');
+        }
+        resolve(true);
+      }
+    )
+  })
 }
 
-function initSearxngCookies() {
-  browser.storage.local.get(
-    [
-      "searchProtocol",
-      "searchFrontend",
-      "searxngCustomSettings",
-
-      "searxngNormalRedirectsChecks",
-      "searxngNormalCustomRedirects",
-      "searxngTorRedirectsChecks",
-      "searxngTorCustomRedirects",
-      "searxngI2pRedirectsChecks",
-      "searxngI2pCustomRedirects",
-
-      "searxng_category_general",
-      "searxng_category_images",
-      "searxng_category_videos",
-      "searxng_category_news",
-      "searxng_category_map",
-      "searxng_category_music",
-      "searxng_category_it",
-      "searxng_category_science",
-      "searxng_category_files",
-      "searxng_category_social_media",
-      "searxng_language",
-      "searxng_autocomplete",
-      "searxng_safesearch",
-      "searxng_hostname_replace",
-      "searxng_oa_doi_rewrite",
-      "searxng_doi_resolver",
-      "searxng_tokens",
-      "searxng_locale",
-      "searxng_theme",
-      "searxng_simple_style",
-      "searxng_results_on_new_tab",
-      "searxng_infinite_scroll",
-      "searxng_search_on_category_select",
-      "searxng_vim_hotkeys",
-      "searxng_method",
-      "searxng_image_proxy",
-      "searxng_query_in_title",
-      "searxng_tracker_url_remover",
-    ],
-    r => {
-      if (!r.searxngCustomSettings || r.searchFrontend != 'searxng') return;
-      console.log('init SearXNG Cookies');
-      let checkedInstances;
-      if (r.searchProtocol == 'normal') checkedInstances = [...r.searxngNormalRedirectsChecks, ...r.searxngNormalCustomRedirects];
-      else if (r.searchProtocol == 'tor') checkedInstances = [...r.searxngTorRedirectsChecks, ...r.searxngTorCustomRedirects];
-      else if (r.searchProtocol == 'i2p') checkedInstances = [...r.searxngI2pRedirectsChecks, ...r.searxngI2pCustomRedirects];
-
-      let categoryList = [];
-      if (r.searxng_category_general) categoryList.push('general')
-      if (r.searxng_category_images) categoryList.push('images')
-      if (r.searxng_category_videos) categoryList.push('videos')
-      if (r.searxng_category_news) categoryList.push('news')
-      if (r.searxng_category_map) categoryList.push('map')
-      if (r.searxng_category_music) categoryList.push('music')
-      if (r.searxng_category_it) categoryList.push('it')
-      if (r.searxng_category_science) categoryList.push('science')
-      if (r.searxng_category_files) categoryList.push('files')
-      if (r.searxng_category_social_media) categoryList.push('social media')
-      let categoryString = '"' + categoryList.join("\\054") + '"'  // ""general\054images\054videos""
-
-      let enabledPluginsList = [];
-      if (r.searxng_hostname_replace) enabledPluginsList.push('searx.plugins.hostname_replace')
-      if (r.searxng_oa_doi_rewrite) enabledPluginsList.push('searx.plugins.oa_doi_rewrite')
-      if (r.searxng_vim_hotkeys) enabledPluginsList.push('searx.plugins.vim_hotkeys')
-      
-      let enabledPluginsString = '"' + enabledPluginsList.join("\\054") + '"' // ""searx.plugins.hostname_replace\054searx.plugins.oa_doi_rewrite""   
-
-
-      let disabledPluginsList = [];
-      if (!r.searxng_search_on_category_select) disabledPluginsList.push('searx.plugins.search_on_category_select')
-      if (!r.searxng_tracker_url_remover) disabledPluginsList.push('searx.plugins.tracker_url_remover')
-      let disabledPluginsString = '"' + disabledPluginsList.join("\\054") + '"' // ""searx.plugins.hostname_replace\054searx.plugins.oa_doi_rewrite""   
-
-      for (const instanceUrl of checkedInstances) {
-        browser.cookies.set({ url: instanceUrl, name: "categories", value: categoryString });
-
-        browser.cookies.set({ url: instanceUrl, name: "language", value: r.searxng_language });
-        browser.cookies.set({ url: instanceUrl, name: "autocomplete", value: r.searxng_autocomplete });
-        browser.cookies.set({ url: instanceUrl, name: "safesearch", value: r.searxng_safesearch });
-
-        browser.cookies.set({ url: instanceUrl, name: "enabled_plugins", value: enabledPluginsString });
-        browser.cookies.set({ url: instanceUrl, name: "disabled_plugins", value: disabledPluginsString });
-
-        browser.cookies.set({ url: instanceUrl, name: "doi_resolver", value: r.searxng_doi_resolver });
-        browser.cookies.set({ url: instanceUrl, name: "tokens", value: r.searxng_tokens });
-        browser.cookies.set({ url: instanceUrl, name: "locale", value: r.searxng_locale });
-        browser.cookies.set({ url: instanceUrl, name: "theme", value: r.searxng_theme });
-        browser.cookies.set({ url: instanceUrl, name: "simple_style", value: r.searxng_simple_style });
-        browser.cookies.set({ url: instanceUrl, name: "results_on_new_tab", value: r.searxng_results_on_new_tab });
-        browser.cookies.set({ url: instanceUrl, name: "infinite_scroll", value: r.searxng_infinite_scroll });
-        browser.cookies.set({ url: instanceUrl, name: "method", value: r.searxng_method });
-        browser.cookies.set({ url: instanceUrl, name: "image_proxy", value: r.searxng_image_proxy });
-        browser.cookies.set({ url: instanceUrl, name: "query_in_title", value: r.searxng_query_in_title });
+function initSearxngCookies(from) {
+  return new Promise(resolve => {
+    browser.storage.local.get(
+      [
+        "searchProtocol",
+        "searxngNormalRedirectsChecks",
+        "searxngNormalCustomRedirects",
+        "searxngTorRedirectsChecks",
+        "searxngTorCustomRedirects",
+        "searxngI2pRedirectsChecks",
+        "searxngI2pCustomRedirects",
+      ],
+      r => {
+        let protocolHost = commonHelper.protocolHost(from);
+        if (![
+          ...r.searxngNormalRedirectsChecks,
+          ...r.searxngNormalCustomRedirects,
+          ...r.searxngTorRedirectsChecks,
+          ...r.searxngTorCustomRedirects,
+          ...r.searxngI2pRedirectsChecks,
+          ...r.searxngI2pCustomRedirects,
+        ].includes(protocolHost)) resolve();
+
+        let checkedInstances;
+        if (r.searchProtocol == 'normal') checkedInstances = [...r.searxngNormalRedirectsChecks, ...r.searxngNormalCustomRedirects];
+        else if (r.searchProtocol == 'tor') checkedInstances = [...r.searxngTorRedirectsChecks, ...r.searxngTorCustomRedirects];
+        else if (r.searchProtocol == 'i2p') checkedInstances = [...r.searxngI2pRedirectsChecks, ...r.searxngI2pCustomRedirects];
+        for (const to of checkedInstances) {
+          commonHelper.copyCookie('searxng', from, to, 'autocomplete');
+          commonHelper.copyCookie('searxng', from, to, 'categories');
+          commonHelper.copyCookie('searxng', from, to, 'disabled_engines');
+          commonHelper.copyCookie('searxng', from, to, 'disabled_plugins');
+          commonHelper.copyCookie('searxng', from, to, 'doi_resolver');
+          commonHelper.copyCookie('searxng', from, to, 'enabled_plugins');
+          commonHelper.copyCookie('searxng', from, to, 'enabled_engines');
+          commonHelper.copyCookie('searxng', from, to, 'image_proxy');
+          commonHelper.copyCookie('searxng', from, to, 'infinite_scroll');
+          commonHelper.copyCookie('searxng', from, to, 'language');
+          commonHelper.copyCookie('searxng', from, to, 'locale');
+          commonHelper.copyCookie('searxng', from, to, 'maintab');
+          commonHelper.copyCookie('searxng', from, to, 'method');
+          commonHelper.copyCookie('searxng', from, to, 'query_in_title');
+          commonHelper.copyCookie('searxng', from, to, 'results_on_new_tab');
+          commonHelper.copyCookie('searxng', from, to, 'safesearch');
+          commonHelper.copyCookie('searxng', from, to, 'simple_style');
+          commonHelper.copyCookie('searxng', from, to, 'theme');
+          commonHelper.copyCookie('searxng', from, to, 'tokens');
+        }
+        resolve(true);
       }
-    }
-  )
-
-
+    )
+  })
 }
 
 function redirect(url) {
   if (disable) return;
   if (!targets.some(rx => rx.test(url.href))) return;
   if (url.searchParams.has('tbm')) return;
-
   if (url.hostname.includes('google') && !url.searchParams.has('q') && url.pathname != '/') return;
   let randomInstance;
   let path;
@@ -353,7 +335,6 @@ function switchInstance(url) {
     else if (protocol == 'i2p') instancesList = [...whoogleI2pRedirectsChecks, ...whoogleI2pCustomRedirects];
   }
 
-  console.log("instancesList", instancesList);
   let index = instancesList.indexOf(protocolHost);
   if (index > -1) instancesList.splice(index, 1);
 
@@ -391,6 +372,7 @@ async function initDefaults() {
         searchFrontend: 'searxng',
         searchRedirects: redirects,
         searxngCustomSettings: false,
+        searchProtocol: 'normal',
 
         whoogleNormalRedirectsChecks: whoogleNormalRedirectsChecks,
         whoogleNormalCustomRedirects: [],
@@ -418,46 +400,6 @@ async function initDefaults() {
 
         searxngI2pRedirectsChecks: [...redirects.searxng.i2p],
         searxngI2pCustomRedirects: [],
-
-        theme: 'DEFAULT',
-        applyThemeToSites: false,
-
-        searchProtocol: 'normal',
-
-        searxng_category_general: true,
-        searxng_category_images: false,
-        searxng_category_videos: false,
-        searxng_category_news: false,
-        searxng_category_map: false,
-        searxng_category_music: false,
-        searxng_category_it: false,
-        searxng_category_science: false,
-        searxng_category_files: false,
-        searxng_category_social_media: false,
-
-        searxng_language: 'en',
-        searxng_autocomplete: 'google',
-        searxng_safesearch: '0',
-
-        searxng_hostname_replace: false,
-        searxng_oa_doi_rewrite: false,
-
-        searxng_doi_resolver: 'oadoi.org',
-        searxng_tokens: '',
-
-        searxng_locale: 'en',
-        searxng_theme: 'simple',
-        searxng_simple_style: 'auto',
-        searxng_results_on_new_tab: '0',
-        searxng_infinite_scroll: '0',
-
-        searxng_search_on_category_select: true,
-        searxng_vim_hotkeys: false,
-
-        searxng_method: 'POST',
-        searxng_image_proxy: '1',
-        searxng_query_in_title: '',
-        searxng_tracker_url_remover: false,
       })
     })
   })
@@ -469,6 +411,7 @@ async function init() {
       "disableSearch",
       "searchFrontend",
       "searchRedirects",
+      "searchProtocol",
 
       "whoogleNormalRedirectsChecks",
       "whoogleNormalCustomRedirects",
@@ -496,20 +439,11 @@ async function init() {
 
       "searxngI2pRedirectsChecks",
       "searxngI2pCustomRedirects",
-
-      "theme",
-      "applyThemeToSites",
-
-      "searchProtocol",
     ],
     r => {
       disable = r.disableSearch;
       protocol = r.searchProtocol;
       frontend = r.searchFrontend;
-
-      theme = r.theme;
-      applyThemeToSites = r.applyThemeToSites;
-
       redirects = r.searchRedirects;
 
       whoogleNormalRedirectsChecks = r.whoogleNormalRedirectsChecks;
@@ -543,7 +477,6 @@ async function init() {
 }
 
 export default {
-
   setSearxRedirects,
   setSearxngRedirects,
   setWhoogleRedirects,
diff --git a/src/assets/javascripts/helpers/sendTargets.js b/src/assets/javascripts/helpers/sendTargets.js
index f131f5c3..7a5db96e 100644
--- a/src/assets/javascripts/helpers/sendTargets.js
+++ b/src/assets/javascripts/helpers/sendTargets.js
@@ -72,12 +72,15 @@ function switchInstance(url) {
 }
 
 function redirect(url, type, initiator) {
-
     if (disable) return null;
-    if (initiator && ([...redirects.send.normal, ...sendNormalCustomRedirects].includes(initiator.origin) || targets.includes(initiator.host))) return null;
-    if (!targets.some(rx => rx.test(url.href))) return null;
-
     if (type != "main_frame") return null;
+    if (initiator && (
+        [...redirects.send.normal,
+        ...sendNormalCustomRedirects
+        ].includes(initiator.origin) ||
+        targets.includes(initiator.host)
+    )) return null;
+    if (!targets.some(rx => rx.test(url.href))) return null;
 
     let instancesList;
     if (protocol == 'normal') instancesList = [...sendNormalRedirectsChecks, ...sendNormalCustomRedirects];
@@ -147,9 +150,9 @@ export default {
     getRedirects,
     setRedirects,
 
+    redirect,
     switchInstance,
 
-    redirect,
     initDefaults,
     init,
 };
diff --git a/src/assets/javascripts/helpers/tiktok.js b/src/assets/javascripts/helpers/tiktok.js
index 4945f9e3..07820c26 100644
--- a/src/assets/javascripts/helpers/tiktok.js
+++ b/src/assets/javascripts/helpers/tiktok.js
@@ -40,43 +40,51 @@ let proxiTokTorCustomRedirects = [];
 
 let disable; // disableTiktok
 let protocol;
-let enableCustom;
 
-let theme;
-let api_legacy;
-
-function initProxiTokCookies() {
-    console.log('initProxiTokCookies')
-    if (enableCustom) {
-        let checkedInstances;
-        if (protocol == 'normal') checkedInstances = [...proxiTokNormalRedirectsChecks, ...proxiTokNormalCustomRedirects]
-        else if (protocol == 'tor') checkedInstances = [...proxiTokTorRedirectsChecks, ...proxiTokTorCustomRedirects]
-
-        for (const instance of checkedInstances) {
-            browser.cookies.set({ url: instance, name: "theme", value: theme })
-            browser.cookies.set({ url: instance, name: "api-legacy", value: api_legacy ? 'on' : 'off' })
-        }
-    }
+function initProxiTokCookies(from) {
+    return new Promise(resolve => {
+        browser.storage.local.get(
+            [
+                "tiktokProtocol",
+                "proxiTokNormalRedirectsChecks",
+                "proxiTokNormalCustomRedirects",
+                "proxiTokTorRedirectsChecks",
+                "proxiTokTorCustomRedirects",
+            ],
+            r => {
+                let protocolHost = commonHelper.protocolHost(from);
+                if (![
+                    ...r.proxiTokNormalRedirectsChecks,
+                    ...r.proxiTokNormalCustomRedirects,
+                    ...r.proxiTokTorRedirectsChecks,
+                    ...r.proxiTokTorCustomRedirects,
+                ].includes(protocolHost)) resolve();
+
+                let checkedInstances;
+                if (r.tiktokProtocol == 'normal') checkedInstances = [...r.proxiTokNormalRedirectsChecks, ...r.proxiTokNormalCustomRedirects]
+                else if (r.tiktokProtocol == 'tor') checkedInstances = [...r.proxiTokTorRedirectsChecks, ...r.proxiTokTorCustomRedirects]
+                for (const to of checkedInstances) {
+                    commonHelper.copyCookie('proxitok', from, to, 'theme');
+                    commonHelper.copyCookie('proxitok', from, to, 'api-legacy');
+                }
+                resolve(true);
+            }
+        )
+    })
 }
 
 function redirect(url, type, initiator) {
     if (disable) return;
-    if (initiator &&
-        (
-            [
-                ...redirects.proxiTok.normal,
-                ...proxiTokNormalCustomRedirects
-            ].includes(initiator.origin) ||
-            targets.includes(initiator.host)
-        )
+    if (type != "main_frame") return null;
+    if (initiator && (
+        [...redirects.proxiTok.normal, ...proxiTokNormalCustomRedirects].includes(initiator.origin) ||
+        targets.includes(initiator.host)
+    )
     ) return;
     if (!targets.some(rx => rx.test(url.href))) return;
     // https://www.tiktok.com/@keysikaspol/video/7061265241887345946
     // https://www.tiktok.com/@keysikaspol
 
-
-    if (type != "main_frame") return null;
-
     let instancesList;
     if (protocol == 'normal') instancesList = [...proxiTokNormalRedirectsChecks, ...proxiTokNormalCustomRedirects];
     if (protocol == 'tor') instancesList = [...proxiTokTorRedirectsChecks, ...proxiTokTorCustomRedirects];
@@ -86,16 +94,27 @@ function redirect(url, type, initiator) {
     return `${randomInstance}${url.pathname}`;
 }
 
-function reverse(url) {
-    let protocolHost = commonHelper.protocolHost(url);
-    if (
-        ![...redirects.proxiTok.normal,
-        ...redirects.proxiTok.tor,
-        ...proxiTokNormalCustomRedirects,
-        ...proxiTokTorCustomRedirects].includes(protocolHost)
-    ) return;
-
-    return `https://tiktok.com${url.pathname}${url.search}`;
+async function reverse(url) {
+    browser.storage.local.get(
+        [
+            "tiktokRedirects",
+            "proxiTokNormalCustomRedirects",
+            "proxiTokTorCustomRedirects",
+        ],
+        r => {
+            let protocolHost = commonHelper.protocolHost(url);
+            if (
+                ![
+                    ...r.tiktokRedirects.proxiTok.normal,
+                    ...r.tiktokRedirects.proxiTok.tor,
+                    ...r.proxiTokNormalCustomRedirects,
+                    ...r.proxiTokTorCustomRedirects
+                ].includes(protocolHost)
+            ) return;
+
+            return `https://tiktok.com${url.pathname}${url.search}`;
+        }
+    )
 }
 
 async function initDefaults() {
@@ -114,12 +133,6 @@ async function initDefaults() {
 
                 proxiTokTorRedirectsChecks: [...redirects.proxiTok.tor],
                 proxiTokTorCustomRedirects: [],
-
-                enableTiktokCustomSettings: false,
-
-                proxiTokTheme: 'default',
-                proxiTokApiLegacy: 'off',
-
             });
             resolve();
         });
@@ -138,11 +151,6 @@ async function init() {
 
             "proxiTokTorRedirectsChecks",
             "proxiTokTorCustomRedirects",
-
-            "enableTiktokCustomSettings",
-
-            "proxiTokTheme",
-            "proxiTokApiLegacy",
         ],
         r => {
             disable = r.disableTiktok;
@@ -154,25 +162,19 @@ async function init() {
 
             proxiTokTorRedirectsChecks = r.proxiTokTorRedirectsChecks;
             proxiTokTorCustomRedirects = r.proxiTokTorCustomRedirects;
-
-            enableCustom = r.enableTiktokCustomSettings;
-
-            theme = r.proxiTokTheme;
-            api_legacy = r.proxiTokApiLegacy;
         }
     )
 }
 
 export default {
-
     getRedirects,
     setRedirects,
 
+    redirect,
     reverse,
 
     initProxiTokCookies,
 
-    redirect,
     initDefaults,
     init,
 };
diff --git a/src/assets/javascripts/helpers/translate/lingva-preferences.js b/src/assets/javascripts/helpers/translate/lingva-preferences.js
index a9652903..eeee2415 100644
--- a/src/assets/javascripts/helpers/translate/lingva-preferences.js
+++ b/src/assets/javascripts/helpers/translate/lingva-preferences.js
@@ -3,12 +3,10 @@ window.browser = window.browser || window.chrome;
 browser.storage.local.get(
     [
         "theme",
-        "applyThemeToSites",
     ],
     r => {
-        let applyThemeToSites = r.applyThemeToSites;
         let theme = r.theme;
 
-        if (applyThemeToSites && theme != "DEFAULT") localStorage.setItem("chakra-ui-color-mode", r.theme);
+        if (theme != "DEFAULT") localStorage.setItem("chakra-ui-color-mode", r.theme);
     }
 )
\ No newline at end of file
diff --git a/src/assets/javascripts/helpers/translate/translate.js b/src/assets/javascripts/helpers/translate/translate.js
index 7ce67433..3efaf544 100644
--- a/src/assets/javascripts/helpers/translate/translate.js
+++ b/src/assets/javascripts/helpers/translate/translate.js
@@ -38,11 +38,6 @@ function setSimplyTranslateRedirects(val) {
   browser.storage.local.set({ simplyTranslateTorRedirectsChecks })
 }
 
-let simplyTranslateNormalRedirectsChecks;
-let simplyTranslateTorRedirectsChecks;
-let simplyTranslateNormalCustomRedirects = [];
-let simplyTranslateTorCustomRedirects = [];
-
 function setLingvaRedirects(val) {
   redirects.lingva = val;
   browser.storage.local.set({ translateRedirects: redirects })
@@ -62,24 +57,26 @@ function setLingvaRedirects(val) {
   browser.storage.local.set({ lingvaTorRedirectsChecks })
 }
 
-let lingvaNormalRedirectsChecks;
-let lingvaTorRedirectsChecks;
-let lingvaNormalCustomRedirects = [];
-let lingvaTorCustomRedirects = [];
+let
+  simplyTranslateNormalRedirectsChecks,
+  simplyTranslateTorRedirectsChecks,
+  simplyTranslateNormalCustomRedirects,
+  simplyTranslateTorCustomRedirects,
+  lingvaNormalRedirectsChecks,
+  lingvaTorRedirectsChecks,
+  lingvaNormalCustomRedirects,
+  lingvaTorCustomRedirects;
 
 
 let
   disable, // translateDisable
   frontend, // translateFrontend
-  protocol, // translateProtocol
-  from, // translateFrom
-  to, // translateTo
-  simplyTranslateEngine;
+  protocol; // translateProtocol
 
 function isTranslateRedirects(url, type, frontend) {
   let protocolHost = commonHelper.protocolHost(url);
 
-  if (type !== "main_frame") return false;
+  if (type !== "main_frame") return;
 
   if (frontend == 'simplyTranslate')
     return [
@@ -124,40 +121,33 @@ function redirect(url) {
   if (disable) return;
   if (!targets.some(rx => rx.test(url.href))) return;
 
-  let params_arr = url.search.split('&');
-  params_arr[0] = params_arr[0].substring(1);
-  let myMap = {};
-  for (let i = 0; i < params_arr.length; i++) {
-    let pair = params_arr[i].split('=');
-    myMap[pair[0]] = pair[1];
-  }
   if (frontend == 'simplyTranslate') {
     let instancesList;
     if (protocol == 'normal') instancesList = [...simplyTranslateNormalRedirectsChecks, ...simplyTranslateNormalCustomRedirects];
     if (protocol == 'tor') instancesList = [...simplyTranslateTorRedirectsChecks, ...simplyTranslateTorCustomRedirects];
-    if (instancesList.length === 0) return null;
+    if (instancesList.length === 0) return;
     let randomInstance = commonHelper.getRandomInstance(instancesList)
 
-    if (myMap.sl && myMap.tl && myMap.text)
-      return `${randomInstance}/${url.search}`;
-    else {
-      if (from != "DEFAULT") url.searchParams.append("sl", from);
-      if (to != "DEFAULT") url.searchParams.append("tl", to);
-      if (simplyTranslateEngine != "DEFAULT") url.searchParams.append("engine", simplyTranslateEngine);
-      return `${randomInstance}/${url.search}`
-    }
+    return `${randomInstance}/${url.search}`;
   }
   else if (frontend == 'lingva') {
+    let params_arr = url.search.split('&');
+    params_arr[0] = params_arr[0].substring(1);
+    let myMap = {};
+    for (let i = 0; i < params_arr.length; i++) {
+      let pair = params_arr[i].split('=');
+      myMap[pair[0]] = pair[1];
+    }
     let instancesList;
     if (protocol == 'normal') instancesList = [...lingvaNormalRedirectsChecks, ...lingvaNormalCustomRedirects];
     if (protocol == 'tor') instancesList = [...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects];
-    if (instancesList.length === 0) return null;
+    if (instancesList.length === 0) return;
     let randomInstance = commonHelper.getRandomInstance(instancesList)
 
     if (myMap.sl && myMap.tl && myMap.text)
       return `${randomInstance}/${myMap.sl}/${myMap.tl}/${myMap.text}`;
-    else
-      return randomInstance;
+
+    return randomInstance;
   }
 }
 
@@ -190,10 +180,8 @@ function switchInstance(url) {
     else if (protocol == 'tor') instancesList = [...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects];
   }
 
-  console.log("instancesList", instancesList);
   let index = instancesList.indexOf(protocolHost);
   if (index > -1) instancesList.splice(index, 1);
-
   if (instancesList.length === 0) return null;
 
   let randomInstance = commonHelper.getRandomInstance(instancesList);
@@ -210,7 +198,7 @@ async function initDefaults() {
       lingvaNormalRedirectsChecks = [...redirects.lingva.normal]
       for (const instance of r.cloudflareList) {
         let i;
-        
+
         i = simplyTranslateNormalRedirectsChecks.indexOf(instance);
         if (i > -1) simplyTranslateNormalRedirectsChecks.splice(i, 1);
 
@@ -232,10 +220,6 @@ async function initDefaults() {
         lingvaNormalCustomRedirects: [],
         lingvaTorRedirectsChecks: [...redirects.lingva.tor],
         lingvaTorCustomRedirects: [],
-
-        translateFrom: "auto",
-        translateTo: 'en',
-        simplyTranslateEngine: 'google',
       })
     })
   })
@@ -258,33 +242,24 @@ async function init() {
       "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;
+    r => {
+      disable = r.translateDisable;
+      frontend = r.translateFrontend;
+      protocol = r.translateProtocol;
+      redirects = r.translateRedirects;
 
-      simplyTranslateNormalRedirectsChecks = result.simplyTranslateNormalRedirectsChecks;
-      simplyTranslateNormalCustomRedirects = result.simplyTranslateNormalCustomRedirects;
+      simplyTranslateNormalRedirectsChecks = r.simplyTranslateNormalRedirectsChecks;
+      simplyTranslateNormalCustomRedirects = r.simplyTranslateNormalCustomRedirects;
 
-      simplyTranslateTorRedirectsChecks = result.simplyTranslateTorRedirectsChecks;
-      simplyTranslateTorCustomRedirects = result.simplyTranslateTorCustomRedirects;
+      simplyTranslateTorRedirectsChecks = r.simplyTranslateTorRedirectsChecks;
+      simplyTranslateTorCustomRedirects = r.simplyTranslateTorCustomRedirects;
 
-      lingvaNormalRedirectsChecks = result.lingvaNormalRedirectsChecks;
-      lingvaNormalCustomRedirects = result.lingvaNormalCustomRedirects;
+      lingvaNormalRedirectsChecks = r.lingvaNormalRedirectsChecks;
+      lingvaNormalCustomRedirects = r.lingvaNormalCustomRedirects;
 
-      lingvaTorRedirectsChecks = result.lingvaTorRedirectsChecks;
-      lingvaTorCustomRedirects = result.lingvaTorCustomRedirects;
+      lingvaTorRedirectsChecks = r.lingvaTorRedirectsChecks;
+      lingvaTorCustomRedirects = r.lingvaTorCustomRedirects;
     });
 }
 
diff --git a/src/assets/javascripts/helpers/twitter.js b/src/assets/javascripts/helpers/twitter.js
index 2a213a80..2af6a28d 100644
--- a/src/assets/javascripts/helpers/twitter.js
+++ b/src/assets/javascripts/helpers/twitter.js
@@ -42,56 +42,14 @@ let nitterTorRedirectsChecks;
 let nitterTorCustomRedirects = [];
 
 let disable; // disableTwitter
-let enableCustomSettings; // enableTwitterCustomSettings
-
 let protocol; // twitterProtocol
-let bypassWatchOnTwitter; // bypassWatchOnTwitter
-let alwaysUsePreferred;
-
-let
-  theme,
-  infiniteScroll,
-  stickyProfile,
-  bidiSupport,
-  hideTweetStats,
-  hideBanner,
-  hidePins,
-  hideReplies,
-  squareAvatars,
-  mp4Playback,
-  hlsPlayback,
-  proxyVideos,
-  muteVideos,
-  autoplayGifs;
-
 
 function redirect(url, initiator) {
-  let protocolHost = commonHelper.protocolHost(url);
-  let isNitter = [
-    ...redirects.nitter.normal,
-    ...redirects.nitter.tor
-  ].includes(protocolHost);
-
-  let isCheckedNitter = [
-    ...nitterNormalRedirectsChecks,
-    ...nitterNormalCustomRedirects,
-    ...nitterTorRedirectsChecks,
-    ...nitterTorCustomRedirects
-  ].includes(protocolHost);
-
-  if (alwaysUsePreferred && isNitter && !isCheckedNitter) return switchInstance(url);
-
-  if (disable) return null;
-
-  if (!targets.some(rx => rx.test(url.href))) return null;
-
-  if (url.pathname.split("/").includes("home")) {
-    console.log("twitter homepage");
-    return null;
-  }
+  if (disable) return;
+  if (!targets.some(rx => rx.test(url.href))) return;
+  if (url.pathname.split("/").includes("home")) return;
 
   if (
-    bypassWatchOnTwitter &&
     initiator &&
     [...redirects.nitter.normal,
     ...redirects.nitter.tor,
@@ -177,10 +135,9 @@ function removeXFrameOptions(e) {
 }
 
 function isNitter(url, type) {
-  let protocolHost = commonHelper.protocolHost(url);
-
   if (type !== "main_frame" && type !== "sub_frame") return false;
 
+  let protocolHost = commonHelper.protocolHost(url);
   return [
     ...redirects.nitter.normal,
     ...redirects.nitter.tor,
@@ -189,73 +146,70 @@ function isNitter(url, type) {
   ].includes(protocolHost);
 }
 
-function initNitterCookies() {
-  if (enableCustomSettings) {
-    let checkedInstances;
-    if (protocol == 'normal') checkedInstances = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects]
-    else if (protocol == 'tor') checkedInstances = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects]
-
-    for (const instanceUrl of checkedInstances) {
-      browser.cookies.set({ url: instanceUrl, name: "theme", value: theme })
-      browser.cookies.set({ url: instanceUrl, name: "infiniteScroll", value: infiniteScroll ? 'on' : '' })
-      browser.cookies.set({ url: instanceUrl, name: "stickyProfile", value: stickyProfile ? 'on' : '' })
-      browser.cookies.set({ url: instanceUrl, name: "bidiSupport", value: bidiSupport ? 'on' : '', })
-      browser.cookies.set({ url: instanceUrl, name: "hideTweetStats", value: hideTweetStats ? 'on' : '' })
-      browser.cookies.set({ url: instanceUrl, name: "hideBanner", value: hideBanner ? 'on' : '' })
-      browser.cookies.set({ url: instanceUrl, name: "hidePins", value: hidePins ? 'on' : '', })
-      browser.cookies.set({ url: instanceUrl, name: "hideReplies", value: hideReplies ? 'on' : '' })
-      browser.cookies.set({ url: instanceUrl, name: "squareAvatars", value: squareAvatars ? 'on' : '' })
-      browser.cookies.set({ url: instanceUrl, name: "mp4Playback", value: mp4Playback ? 'on' : '' })
-      browser.cookies.set({ url: instanceUrl, name: "hlsPlayback", value: hlsPlayback ? 'on' : '' })
-      browser.cookies.set({ url: instanceUrl, name: "proxyVideos", value: proxyVideos ? 'on' : '' })
-      browser.cookies.set({ url: instanceUrl, name: "muteVideos", value: muteVideos ? 'on' : '' })
-      browser.cookies.set({ url: instanceUrl, name: "autoplayGifs", value: autoplayGifs ? 'on' : '' })
-    }
-  }
+async function initNitterCookies(from) {
+  return new Promise(resolve => {
+    browser.storage.local.get(
+      [
+        "twitterProtocol",
+        "nitterNormalRedirectsChecks",
+        "nitterNormalCustomRedirects",
+        "nitterTorRedirectsChecks",
+        "nitterTorCustomRedirects",
+      ],
+      r => {
+        let protocolHost = commonHelper.protocolHost(from);
+        if (![
+          ...r.nitterNormalRedirectsChecks,
+          ...r.nitterTorRedirectsChecks,
+          ...r.nitterNormalCustomRedirects,
+          ...r.nitterTorCustomRedirects,
+        ].includes(protocolHost)) resolve();
+
+        let checkedInstances;
+        if (r.twitterProtocol == 'normal') checkedInstances = [...r.nitterNormalRedirectsChecks, ...r.nitterNormalCustomRedirects]
+        else if (r.twitterProtocol == 'tor') checkedInstances = [...r.nitterTorRedirectsChecks, ...r.nitterTorCustomRedirects]
+
+        for (const to of checkedInstances) {
+          commonHelper.copyCookie('nitter', from, to, 'theme');
+          commonHelper.copyCookie('nitter', from, to, 'infiniteScroll');
+          commonHelper.copyCookie('nitter', from, to, 'stickyProfile');
+          commonHelper.copyCookie('nitter', from, to, 'bidiSupport');
+          commonHelper.copyCookie('nitter', from, to, 'hideTweetStats');
+          commonHelper.copyCookie('nitter', from, to, 'hideBanner');
+          commonHelper.copyCookie('nitter', from, to, 'hidePins');
+          commonHelper.copyCookie('nitter', from, to, 'hideReplies');
+          commonHelper.copyCookie('nitter', from, to, 'squareAvatars');
+          commonHelper.copyCookie('nitter', from, to, 'mp4Playback');
+          commonHelper.copyCookie('nitter', from, to, 'hlsPlayback');
+          commonHelper.copyCookie('nitter', from, to, 'proxyVideos');
+          commonHelper.copyCookie('nitter', from, to, 'muteVideos');
+          commonHelper.copyCookie('nitter', from, to, 'autoplayGifs');
+        }
+        resolve(true);
+      })
+  })
 }
 
-
-async function initDefaults() {
-  await fetch('/instances/data.json').then(response => response.text()).then(async data => {
+function initDefaults() {
+  fetch('/instances/data.json').then(response => response.text()).then(data => {
     let dataJson = JSON.parse(data);
     redirects.nitter = dataJson.nitter;
-    browser.storage.local.get('cloudflareList', async r => {
+    browser.storage.local.get('cloudflareList', 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({
+      browser.storage.local.set({
         disableTwitter: false,
-
-        enableTwitterCustomSettings: false,
-
         twitterRedirects: redirects,
-        bypassWatchOnTwitter: true,
+        twitterProtocol: "normal",
 
         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,
       })
     })
   })
@@ -265,46 +219,18 @@ async function init() {
   browser.storage.local.get(
     [
       "disableTwitter",
-
-      "enableTwitterCustomSettings",
-
       "twitterRedirects",
-      "bypassWatchOnTwitter",
+      "twitterProtocol",
 
       "nitterNormalRedirectsChecks",
       "nitterNormalCustomRedirects",
 
       "nitterTorRedirectsChecks",
       "nitterTorCustomRedirects",
-
-      "twitterProtocol",
-      "alwaysUsePreferred",
-
-      "nitterTheme",
-      "nitterInfiniteScroll",
-      "nitterStickyProfile",
-      "nitterBidiSupport",
-      "nitterHideTweetStats",
-      "nitterHideBanner",
-      "nitterHidePins",
-      "nitterHideReplies",
-      "nitterSquareAvatars",
-      "nitterMp4Playback",
-      "nitterHlsPlayback",
-      "nitterProxyVideos",
-      "nitterMuteVideos",
-      "nitterAutoplayGifs",
     ],
     r => {
       disable = r.disableTwitter;
-      enableCustomSettings = r.enableTwitterCustomSettings;
-
       protocol = r.twitterProtocol;
-
-      bypassWatchOnTwitter = r.bypassWatchOnTwitter;
-
-      alwaysUsePreferred = r.alwaysUsePreferred;
-
       redirects = r.twitterRedirects;
 
       nitterNormalRedirectsChecks = r.nitterNormalRedirectsChecks;
@@ -312,21 +238,6 @@ async function init() {
 
       nitterTorRedirectsChecks = r.nitterTorRedirectsChecks;
       nitterTorCustomRedirects = r.nitterTorCustomRedirects;
-
-      theme = r.nitterTheme;
-      infiniteScroll = r.nitterInfiniteScroll;
-      stickyProfile = r.nitterStickyProfile;
-      bidiSupport = r.nitterBidiSupport;
-      hideTweetStats = r.nitterHideTweetStats;
-      hideBanner = r.nitterHideBanner;
-      hidePins = r.nitterHidePins;
-      hideReplies = r.nitterHideReplies;
-      squareAvatars = r.nitterSquareAvatars;
-      mp4Playback = r.nitterMp4Playback;
-      hlsPlayback = r.nitterHlsPlayback;
-      proxyVideos = r.nitterProxyVideos;
-      muteVideos = r.nitterMuteVideos;
-      autoplayGifs = r.nitterAutoplayGifs;
     }
   );
 }
diff --git a/src/assets/javascripts/helpers/wikipedia.js b/src/assets/javascripts/helpers/wikipedia.js
index b11eb1d2..17c1ece1 100644
--- a/src/assets/javascripts/helpers/wikipedia.js
+++ b/src/assets/javascripts/helpers/wikipedia.js
@@ -12,7 +12,6 @@ let redirects = {
   }
 };
 const getRedirects = () => redirects;
-
 function setRedirects(val) {
   redirects.wikiless = val;
   browser.storage.local.set({ wikipediaRedirects: redirects })
@@ -39,34 +38,52 @@ function setRedirects(val) {
   browser.storage.local.set({ wikilessI2pRedirectsChecks })
 }
 
-let disable; // disableWikipedia
-let protocol; // wikipediaProtocol
-
-let wikilessNormalRedirectsChecks;
-let wikilessTorRedirectsChecks;
-let wikilessI2pRedirectsChecks;
-let wikilessNormalCustomRedirects = [];
-let wikilessTorCustomRedirects = [];
-let wikilessI2pCustomRedirects = [];
-
+let
+  disable, // disableWikipedia
+  protocol; // wikipediaProtocol
 
-let theme;
-let applyThemeToSites;
+let
+  wikilessNormalRedirectsChecks,
+  wikilessTorRedirectsChecks,
+  wikilessI2pRedirectsChecks,
+  wikilessNormalCustomRedirects,
+  wikilessTorCustomRedirects,
+  wikilessI2pCustomRedirects;
 
 function initWikilessCookies() {
-  let themeValue;
-  if (theme == 'light') themeValue = 'white';
-  if (theme == 'dark') themeValue = 'dark';
-  if (applyThemeToSites && themeValue) {
-
-    let checkedInstances;
-    if (protocol == 'normal') checkedInstances = [...wikilessNormalRedirectsChecks, ...wikilessNormalCustomRedirects]
-    else if (protocol == 'tor') checkedInstances = [...wikilessTorRedirectsChecks, ...wikilessTorCustomRedirects]
-    else if (protocol == 'i2p') checkedInstances = [...wikilessI2pRedirectsChecks, ...wikilessI2pCustomRedirects]
-
-    for (const instanceUrl of checkedInstances)
-      browser.cookies.set({ url: instanceUrl, name: "theme", value: themeValue })
-  }
+  return new Promise(resolve => {
+    browser.storage.local.get(
+      [
+        "wikipediaProtocol",
+        "wikilessNormalRedirectsChecks",
+        "wikilessNormalCustomRedirects",
+        "wikilessTorRedirectsChecks",
+        "wikilessTorCustomRedirects",
+        "wikilessI2pRedirectsChecks",
+        "wikilessI2pCustomRedirects",
+      ],
+      r => {
+        let protocolHost = commonHelper.protocolHost(from);
+        if (![
+          ...r.wikilessNormalRedirectsChecks,
+          ...r.wikilessNormalCustomRedirects,
+          ...r.wikilessTorRedirectsChecks,
+          ...r.wikilessTorCustomRedirects,
+          ...r.wikilessI2pRedirectsChecks,
+          ...r.wikilessI2pCustomRedirects,
+        ].includes(protocolHost)) resolve();
+
+        let checkedInstances;
+        if (r.wikipediaProtocol == 'normal') checkedInstances = [...r.wikilessNormalRedirectsChecks, ...r.wikilessNormalCustomRedirects]
+        else if (r.wikipediaProtocol == 'tor') checkedInstances = [...r.wikilessTorRedirectsChecks, ...r.wikilessTorCustomRedirects]
+        else if (r.wikipediaProtocol == 'i2p') checkedInstances = [...r.wikilessI2pRedirectsChecks, ...r.wikilessI2pCustomRedirects]
+
+        for (const to of checkedInstances)
+          commonHelper.copyCookie('wikiless', from, to, 'theme');
+        resolve(true);
+      }
+    )
+  })
 }
 
 function redirect(url) {
@@ -104,7 +121,6 @@ function redirect(url) {
     link += (i == 0 ? "?" : "&") + GETArguments[i][0] + "=" + GETArguments[i][1];
 
   return link;
-
 }
 
 function switchInstance(url) {
@@ -126,7 +142,6 @@ function switchInstance(url) {
   else if (protocol == 'tor') instancesList = [...wikilessTorCustomRedirects, ...wikilessTorRedirectsChecks];
   else if (protocol == 'i2p') instancesList = [...wikilessI2pCustomRedirects, ...wikilessI2pRedirectsChecks];
 
-  console.log("instancesList", instancesList);
   let index = instancesList.indexOf(protocolHost);
   if (index > -1) instancesList.splice(index, 1);
 
@@ -136,7 +151,6 @@ function switchInstance(url) {
   return `${randomInstance}${url.pathname}${url.search}`;
 }
 
-
 async function initDefaults() {
   fetch('/instances/data.json').then(response => response.text()).then(async data => {
     let dataJson = JSON.parse(data);
@@ -144,24 +158,19 @@ async function initDefaults() {
     browser.storage.local.get('cloudflareList', async r => {
       wikilessNormalRedirectsChecks = [...redirects.wikiless.normal];
       for (const instance of r.cloudflareList) {
-        let i;
-
-        i = wikilessNormalRedirectsChecks.indexOf(instance);
+        let i = wikilessNormalRedirectsChecks.indexOf(instance);
         if (i > -1) wikilessNormalRedirectsChecks.splice(i, 1);
       }
       await browser.storage.local.set({
         disableWikipedia: true,
         wikipediaRedirects: redirects,
+        wikipediaProtocol: "normal",
         wikilessNormalRedirectsChecks: wikilessNormalRedirectsChecks,
         wikilessTorRedirectsChecks: [...redirects.wikiless.tor],
         wikilessI2pRedirectsChecks: [...redirects.wikiless.i2p],
         wikilessNormalCustomRedirects: [],
         wikilessTorCustomRedirects: [],
         wikilessI2pCustomRedirects: [],
-        wikipediaProtocol: "normal",
-
-        theme: 'DEFAULT',
-        applyThemeToSites: false,
       })
     })
   })
@@ -172,20 +181,17 @@ async function init() {
     [
       "disableWikipedia",
       "wikipediaRedirects",
+      "wikipediaProtocol",
+
       "wikilessNormalRedirectsChecks",
       "wikilessTorRedirectsChecks",
       "wikilessI2pRedirectsChecks",
       "wikilessNormalCustomRedirects",
       "wikilessTorCustomRedirects",
       "wikilessI2pCustomRedirects",
-      "wikipediaProtocol",
-
-      "theme",
-      "applyThemeToSites",
-
-    ], r => {
+    ],
+    r => {
       disable = r.disableWikipedia;
-
       protocol = r.wikipediaProtocol;
       redirects = r.wikipediaRedirects;
 
@@ -197,9 +203,6 @@ async function init() {
 
       wikilessI2pRedirectsChecks = r.wikilessI2pRedirectsChecks;
       wikilessI2pCustomRedirects = r.wikilessI2pCustomRedirects;
-
-      theme = r.theme;
-      applyThemeToSites = r.applyThemeToSites;
     }
   );
 }
diff --git a/src/assets/javascripts/helpers/youtube/get_piped_settings.js b/src/assets/javascripts/helpers/youtube/get_piped_settings.js
new file mode 100644
index 00000000..12e92baa
--- /dev/null
+++ b/src/assets/javascripts/helpers/youtube/get_piped_settings.js
@@ -0,0 +1,22 @@
+window.browser = window.browser || window.chrome;
+
+browser.storage.local.set(
+    {
+        'piped_bufferGoal': localStorage.getItem("bufferGoal"),
+        'piped_comments': localStorage.getItem("comments"),
+        'piped_disableLBRY': localStorage.getItem("disableLBRY"),
+        'piped_enabledCodecs': localStorage.getItem("enabledCodecs"),
+        'piped_homepage': localStorage.getItem("homepage"),
+        'piped_listen': localStorage.getItem("listen"),
+        'piped_minimizeDescription': localStorage.getItem("minimizeDescription"),
+        'piped_playerAutoPlay': localStorage.getItem("playerAutoPlay"),
+        'piped_proxyLBRY': localStorage.getItem("proxyLBRY"),
+        'piped_quality': localStorage.getItem("quality"),
+        'piped_region': localStorage.getItem("region"),
+        'piped_selectedSkip': localStorage.getItem("selectedSkip"),
+        'piped_sponsorblock': localStorage.getItem("sponsorblock"),
+        'piped_theme': localStorage.getItem("theme"),
+        'piped_volume': localStorage.getItem("volume"),
+        'piped_watchHistory': localStorage.getItem("watchHistory"),
+    }
+)
diff --git a/src/assets/javascripts/helpers/youtube/invidious.js b/src/assets/javascripts/helpers/youtube/invidious.js
deleted file mode 100644
index a8e215a2..00000000
--- a/src/assets/javascripts/helpers/youtube/invidious.js
+++ /dev/null
@@ -1,133 +0,0 @@
-"use strict";
-
-window.browser = window.browser || window.chrome;
-
-async function initDefaults() {
-    await browser.storage.local.set({
-        youtubeListen: false,
-        youtubeVolume: 100,
-        youtubeAutoplay: false,
-        invidiousAlwaysProxy: false,
-        invidiousQuality: 'hd720',
-        invidiousPlayerStyle: 'invidious',
-        invidiousVideoLoop: false,
-        invidiousContinueAutoplay: true,
-        invidiousContinue: false,
-        invidiousSpeed: '1.0',
-        invidiousQualityDash: 'auto',
-        invidiousComments: ['youtube', ''],
-        invidiousCaptions: ['', '', ''],
-        invidiousRelatedVideos: true,
-        invidiousAnnotations: false,
-        invidiousExtendDesc: false,
-        invidiousVrMode: true,
-        invidiousSavePlayerPos: false,
-        invidiousRegion: 'US',
-        invidiousDarkMode: '',
-        invidiousThinMode: false,
-        invidiousDefaultHome: 'Popular',
-        invidiousFeedMenuList: ['Popular', 'Trending']
-    })
-}
-
-async function initInvidiousCookies() {
-    console.log('initInvidiousCookies() starting')
-    await browser.storage.local.get(
-        [
-            "disableYoutube",
-            "youtubeFrontend",
-            "youtubeProtocol",
-
-            "enableYoutubeCustomSettings",
-
-            "invidiousNormalRedirectsChecks",
-            "invidiousNormalCustomRedirects",
-            "invidiousTorRedirectsChecks",
-            "invidiousTorCustomRedirects",
-
-            "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 => {
-            if (!r.disableYoutube && r.youtubeFrontend == 'invidious' && r.enableYoutubeCustomSettings) {
-                let checkedInstances;
-                if (r.youtubeProtocol == 'normal')
-                    checkedInstances = [...r.invidiousNormalRedirectsChecks, ...r.invidiousNormalCustomRedirects]
-                else if (r.youtubeProtocol == 'tor')
-                    checkedInstances = [...r.invidiousTorRedirectsChecks, ...r.invidiousTorCustomRedirects]
-
-                for (const instanceUrl of checkedInstances)
-                    browser.cookies.get(
-                        { url: instanceUrl, name: "PREFS" },
-                        cookie => {
-                            let prefs = {};
-                            if (cookie) {
-                                prefs = JSON.parse(decodeURIComponent(cookie.value));
-                                browser.cookies.remove({ url: instanceUrl, name: "PREFS" });
-                            }
-
-                            prefs.local = r.invidiousAlwaysProxy;
-                            prefs.video_loop = r.invidiousVideoLoop;
-                            prefs.continue_autoplay = r.invidiousContinueAutoplay;
-                            prefs.continue = r.invidiousContinue;
-                            prefs.listen = r.youtubeListen;
-                            prefs.speed = parseFloat(r.invidiousSpeed);
-                            prefs.quality = r.invidiousQuality;
-                            prefs.quality_dash = r.invidiousQualityDash;
-
-                            prefs.comments = r.invidiousComments;
-                            prefs.captions = r.invidiousCaptions;
-
-                            prefs.related_videos = r.invidiousRelatedVideos;
-                            prefs.annotations = r.invidiousAnnotations
-                            prefs.extend_desc = r.invidiousExtendDesc;
-                            prefs.vr_mode = r.invidiousVrMode;
-                            prefs.save_player_pos = r.invidiousSavePlayerPos;
-
-                            prefs.volume = parseInt(r.youtubeVolume);
-                            prefs.player_style = r.invidiousPlayerStyle;
-                            prefs.autoplay = r.youtubeAutoplay;
-
-                            prefs.region = r.invidiousRegion;
-                            prefs.dark_mode = r.invidiousDarkMode;
-                            prefs.thin_mode = r.invidiousThinMode;
-                            prefs.default_home = r.invidiousDefaultHome;
-                            prefs.feed_menu = r.invidiousFeedMenuList;
-
-                            browser.cookies.set({
-                                url: instanceUrl, name: "PREFS",
-                                value: encodeURIComponent(JSON.stringify(prefs))
-                            })
-                        }
-                    )
-            }
-        }
-    )
-}
-
-export default {
-    initDefaults,
-    initInvidiousCookies,
-}
\ No newline at end of file
diff --git a/src/assets/javascripts/helpers/youtube/piped-preferences.js b/src/assets/javascripts/helpers/youtube/piped-preferences.js
index c6a5707a..8a1f2d0d 100644
--- a/src/assets/javascripts/helpers/youtube/piped-preferences.js
+++ b/src/assets/javascripts/helpers/youtube/piped-preferences.js
@@ -2,40 +2,39 @@ window.browser = window.browser || window.chrome;
 
 browser.storage.local.get(
     [
-        "youtubeVolume",
-        "youtubeAutoplay",
-        "youtubeListen",
-
-        "pipedBufferGoal",
-        "pipedComments",
-        "pipedDisableLBRY",
-        "pipedEnabledCodecs",
-        "pipedHomepage",
-        "pipedMinimizeDescription",
-        "pipedProxyLBRY",
-        "pipedQuality",
-        "pipedRegion",
-        "pipedSelectedSkip",
-        "pipedSponsorblock",
-        "pipedDdlTheme",
-        "pipedWatchHistory",
+        "piped_bufferGoal",
+        "piped_comments",
+        "piped_disableLBRY",
+        "piped_enabledCodecs",
+        "piped_homepage",
+        "piped_listen",
+        "piped_minimizeDescription",
+        "piped_playerAutoPlay",
+        "piped_proxyLBRY",
+        "piped_quality",
+        "piped_region",
+        "piped_selectedSkip",
+        "piped_sponsorblock",
+        "piped_theme",
+        "piped_volume",
+        "piped_watchHistory",
     ],
     r => {
-        localStorage.setItem("bufferGoal", r.pipedBufferGoal.toString());
-        localStorage.setItem("comments", r.pipedComments);
-        localStorage.setItem("disableLBRY", r.pipedDisableLBRY);
-        localStorage.setItem("enabledCodecs", r.pipedEnabledCodecs);
-        localStorage.setItem("homepage", r.pipedHomepage);
-        localStorage.setItem("listen", r.youtubeListen);
-        localStorage.setItem("minimizeDescription", r.pipedMinimizeDescription);
-        localStorage.setItem("playerAutoPlay", r.youtubeAutoplay);
-        localStorage.setItem("proxyLBRY", r.pipedProxyLBRY);
-        localStorage.setItem("quality", r.pipedQuality);
-        localStorage.setItem("region", r.pipedRegion);
-        localStorage.setItem("selectedSkip", r.pipedSelectedSkip);
-        localStorage.setItem("sponsorblock", r.pipedSponsorblock);
-        localStorage.setItem("theme", r.pipedDdlTheme);
-        localStorage.setItem("volume", r.youtubeVolume / 100);
-        localStorage.setItem("watchHistory", r.pipedWatchHistory);
+        localStorage.setItem("bufferGoal", r.piped_bufferGoal);
+        localStorage.setItem("comments", r.piped_comments);
+        localStorage.setItem("disableLBRY", r.piped_disableLBRY);
+        localStorage.setItem("enabledCodecs", r.piped_enabledCodecs);
+        localStorage.setItem("homepage", r.piped_homepage);
+        localStorage.setItem("listen", r.piped_listen);
+        localStorage.setItem("minimizeDescription", r.piped_minimizeDescription);
+        localStorage.setItem("playerAutoPlay", r.piped_playerAutoPlay);
+        localStorage.setItem("proxyLBRY", r.piped_proxyLBRY);
+        localStorage.setItem("quality", r.piped_quality);
+        localStorage.setItem("region", r.piped_region);
+        localStorage.setItem("selectedSkip", r.piped_selectedSkip);
+        localStorage.setItem("sponsorblock", r.piped_sponsorblock);
+        localStorage.setItem("theme", r.piped_theme);
+        localStorage.setItem("volume", r.piped_volume);
+        localStorage.setItem("watchHistory", r.piped_watchHistory);
     }
 )
\ No newline at end of file
diff --git a/src/assets/javascripts/helpers/youtube/piped.js b/src/assets/javascripts/helpers/youtube/piped.js
index 10bec749..e1f7b0df 100644
--- a/src/assets/javascripts/helpers/youtube/piped.js
+++ b/src/assets/javascripts/helpers/youtube/piped.js
@@ -1,27 +1,76 @@
+"use strict";
+window.browser = window.browser || window.chrome;
+
+import commonHelper from '../common.js'
+
 async function initDefaults() {
-    await browser.storage.local.set({
-        youtubeVolume: 100,
-        youtubeAutoplay: false,
-        youtubeListen: false,
+  await browser.storage.local.set({
+    youtubeVolume: 100,
+    youtubeAutoplay: false,
+    youtubeListen: false,
 
-        pipedBufferGoal: 300,
-        pipedComments: true,
-        pipedDisableLBRY: false,
-        pipedEnabledCodecs: ["av1", "vp9", "avc"],
-        pipedHomepage: "trending",
-        pipedMinimizeDescription: false,
-        pipedProxyLBRY: false,
-        pipedQuality: 0,
-        pipedRegion: "US",
-        pipedSelectedSkip: ["sponsor", "interaction", "selfpromo", "music_offtopic"],
-        pipedSponsorblock: true,
-        pipedDdlTheme: 'auto',
-        pipedWatchHistory: false,
-    })
+    pipedBufferGoal: 300,
+    pipedComments: true,
+    pipedDisableLBRY: false,
+    pipedEnabledCodecs: ["av1", "vp9", "avc"],
+    pipedHomepage: "trending",
+    pipedMinimizeDescription: false,
+    pipedProxyLBRY: false,
+    pipedQuality: 0,
+    pipedRegion: "US",
+    pipedSelectedSkip: ["sponsor", "interaction", "selfpromo", "music_offtopic"],
+    pipedSponsorblock: true,
+    pipedDdlTheme: 'auto',
+    pipedWatchHistory: false,
+  })
 }
 
-function initPipedLocalStorage(tabId) {
-    if (!disable && frontend == 'piped' && enableCustomSettings)
+async function copyPipedLocalStorage(url, tabId) {
+  return new Promise(resolve => {
+    browser.storage.local.get(
+      [
+        "pipedNormalRedirectsChecks",
+        "pipedNormalCustomRedirects",
+        "pipedTorRedirectsChecks",
+        "pipedTorCustomRedirects",
+      ],
+      r => {
+        let protocolHost = commonHelper.protocolHost(url);
+        if (![
+          ...r.pipedNormalCustomRedirects,
+          ...r.pipedNormalRedirectsChecks,
+          ...r.pipedTorRedirectsChecks,
+          ...r.pipedTorCustomRedirects,
+        ].includes(protocolHost)) resolve();
+        browser.tabs.executeScript(
+          tabId,
+          {
+            file: "/assets/javascripts/helpers/youtube/get_piped_settings.js",
+            runAt: "document_start"
+          }
+        );
+        resolve(true);
+      })
+  })
+}
+
+async function initPipedLocalStorage(url, tabId) {
+  browser.storage.local.get(
+    [
+      "youtubeProtocol",
+      "pipedNormalRedirectsChecks",
+      "pipedNormalCustomRedirects",
+      "pipedTorRedirectsChecks",
+      "pipedTorCustomRedirects",
+    ],
+    r => {
+      let protocolHost = commonHelper.protocolHost(url);
+      if (![
+        ...r.pipedNormalRedirectsChecks,
+        ...r.pipedTorRedirectsChecks,
+        ...r.pipedNormalCustomRedirects,
+        ...r.pipedTorCustomRedirects,
+      ].includes(protocolHost)) return;
       browser.tabs.executeScript(
         tabId,
         {
@@ -29,9 +78,12 @@ function initPipedLocalStorage(tabId) {
           runAt: "document_start"
         }
       );
-  }
+      return true;
+    })
+}
 
 export default {
-    initDefaults,
-    initPipedLocalStorage
+  initDefaults,
+  initPipedLocalStorage,
+  copyPipedLocalStorage,
 }
\ No newline at end of file
diff --git a/src/assets/javascripts/helpers/youtube/youtube.js b/src/assets/javascripts/helpers/youtube/youtube.js
index 7c4ad8c8..cf6f9074 100644
--- a/src/assets/javascripts/helpers/youtube/youtube.js
+++ b/src/assets/javascripts/helpers/youtube/youtube.js
@@ -3,7 +3,6 @@
 window.browser = window.browser || window.chrome;
 
 import commonHelper from '../common.js'
-import invidious from './invidious.js'
 import piped from './piped.js';
 import pipedMaterial from './pipedMaterial.js';
 
@@ -62,63 +61,27 @@ let
   protocol,
   OnlyEmbeddedVideo,
   frontend,
-  youtubeEmbedFrontend,
-  bypassWatchOnYoutube,
-  alwaysUsePreferred;
+  youtubeEmbedFrontend;
 
 function redirect(url, details, initiator) {
   if (disable) return null;
 
   let protocolHost = commonHelper.protocolHost(url);
 
-  let isInvidious = [
-    ...redirects.invidious.normal,
-    ...redirects.invidious.tor
-  ].includes(protocolHost);
-
-  let isCheckedInvidious = [
-    ...invidiousNormalRedirectsChecks,
-    ...invidiousNormalCustomRedirects,
-    ...invidiousTorRedirectsChecks,
-    ...invidiousTorCustomRedirects,
-  ].includes(protocolHost);
-
-  let isPiped = [
-    ...redirects.piped.normal,
-    ...redirects.piped.tor
-  ].includes(protocolHost);
-
-  let isCheckedPiped = [
-    ...pipedNormalRedirectsChecks,
-    ...pipedNormalCustomRedirects,
-    ...pipedTorRedirectsChecks,
-    ...pipedTorCustomRedirects,
-  ].includes(protocolHost)
-
-  if (
-    alwaysUsePreferred && frontend == 'invidious' &&
-    (isInvidious || isPiped) && !isCheckedInvidious
-  ) return switchInstance(url);
-
-  if (
-    alwaysUsePreferred && frontend == 'piped' &&
-    (isInvidious || isPiped) && !isCheckedPiped
-  ) return switchInstance(url);
-
   if (!targets.some(rx => rx.test(url.href))) return null;
 
   if (
-    bypassWatchOnYoutube &&
     initiator && (
-      [...redirects.invidious.normal,
-      ...invidiousNormalCustomRedirects,
-      ...redirects.invidious.tor,
-      ...invidiousTorCustomRedirects,
-
-      ...redirects.piped.normal,
-      ...redirects.piped.tor,
-      ...pipedNormalCustomRedirects,
-      ...pipedTorCustomRedirects
+      [
+        ...redirects.invidious.normal,
+        ...invidiousNormalCustomRedirects,
+        ...redirects.invidious.tor,
+        ...invidiousTorCustomRedirects,
+
+        ...redirects.piped.normal,
+        ...redirects.piped.tor,
+        ...pipedNormalCustomRedirects,
+        ...pipedTorCustomRedirects
       ].includes(initiator.origin)
     )
   ) return 'BYPASSTAB';
@@ -192,19 +155,32 @@ function redirect(url, details, initiator) {
 }
 
 function reverse(url) {
-  let protocolHost = commonHelper.protocolHost(url);
-  if (![
-    ...redirects.invidious.normal,
-    ...redirects.invidious.tor,
-    ...invidiousNormalCustomRedirects,
-    ...invidiousTorCustomRedirects,
-    ...redirects.piped.normal,
-    ...redirects.piped.tor,
-    ...pipedNormalCustomRedirects,
-    ...pipedTorCustomRedirects,
-  ].includes(protocolHost)) return;
+  browser.storage.local.get(
+    [
+      "youtubeRedirects",
+      "invidiousNormalCustomRedirects",
+      "invidiousTorCustomRedirects",
+      "pipedNormalCustomRedirects",
+      "pipedTorCustomRedirects",
+    ],
+    r => {
+      let protocolHost = commonHelper.protocolHost(url);
+      if (![
+        ...r.youtubeRedirects.invidious.normal,
+        ...r.youtubeRedirects.invidious.tor,
+
+        ...r.youtubeRedirects.piped.normal,
+        ...r.youtubeRedirects.piped.tor,
+
+        ...r.invidiousNormalCustomRedirects,
+        ...r.invidiousTorCustomRedirects,
 
-  return `https://youtube.com${url.pathname}${url.search}`;
+        ...r.pipedNormalCustomRedirects,
+        ...r.pipedTorCustomRedirects,
+      ].includes(protocolHost)) return;
+
+      return `https://youtube.com${url.pathname}${url.search}`;
+    })
 }
 
 function switchInstance(url) {
@@ -351,13 +327,10 @@ async function initDefaults() {
           pipedMaterialTorRedirectsChecks: [...redirects.pipedMaterial.tor],
           pipedMaterialTorCustomRedirects: [],
 
-          alwaysUsePreferred: false,
           youtubeEmbedFrontend: 'invidious',
           youtubeProtocol: 'normal',
-          bypassWatchOnYoutube: true,
         })
 
-        await invidious.initDefaults();
         await piped.initDefaults();
         await pipedMaterial.initDefaults();
         resolve();
@@ -394,10 +367,8 @@ async function init() {
           "pipedMaterialTorRedirectsChecks",
           "pipedMaterialTorCustomRedirects",
 
-          "alwaysUsePreferred",
           "youtubeEmbedFrontend",
           "youtubeProtocol",
-          "bypassWatchOnYoutube",
         ],
         r => {
           redirects = r.youtubeRedirects;
@@ -426,18 +397,46 @@ async function init() {
 
           youtubeEmbedFrontend = r.youtubeEmbedFrontend;
           OnlyEmbeddedVideo = r.OnlyEmbeddedVideo;
-          alwaysUsePreferred = r.alwaysUsePreferred;
-          bypassWatchOnYoutube = r.bypassWatchOnYoutube;
 
           resolve();
         });
     })
 }
 
+async function initInvidiousCookies(from) {
+  return new Promise(resolve => {
+    browser.storage.local.get(
+      [
+        "youtubeProtocol",
+        "invidiousNormalRedirectsChecks",
+        "invidiousNormalCustomRedirects",
+        "invidiousTorRedirectsChecks",
+        "invidiousTorCustomRedirects",
+      ],
+      r => {
+        let protocolHost = commonHelper.protocolHost(from);
+        if (![
+          ...r.invidiousNormalRedirectsChecks,
+          ...r.invidiousTorRedirectsChecks,
+          ...r.invidiousNormalCustomRedirects,
+          ...r.invidiousTorCustomRedirects,
+        ].includes(protocolHost)) resolve();
+        let checkedInstances;
+        if (r.youtubeProtocol == 'normal') checkedInstances = [...r.invidiousNormalRedirectsChecks, ...r.invidiousNormalCustomRedirects]
+        else if (r.youtubeProtocol == 'tor') checkedInstances = [...r.invidiousTorRedirectsChecks, ...r.invidiousTorCustomRedirects]
+        for (const to of checkedInstances)
+          commonHelper.copyCookie('invidious', from, to, 'PREFS');
+        resolve(true);
+      }
+    )
+  }
+  )
+}
+
 let
   initPipedLocalStorage = piped.initPipedLocalStorage,
   initPipedMaterialLocalStorage = pipedMaterial.initPipedMaterialLocalStorage,
-  initInvidiousCookies = invidious.initInvidiousCookies;
+  copyPipedLocalStorage = piped.copyPipedLocalStorage;
 
 export default {
   initPipedLocalStorage,
@@ -452,6 +451,8 @@ export default {
 
   isPipedorInvidious,
 
+  copyPipedLocalStorage,
+
   initDefaults,
 
   init,
diff --git a/src/assets/javascripts/helpers/youtubeMusic.js b/src/assets/javascripts/helpers/youtubeMusic.js
index 0b06bfa3..98549147 100644
--- a/src/assets/javascripts/helpers/youtubeMusic.js
+++ b/src/assets/javascripts/helpers/youtubeMusic.js
@@ -28,7 +28,6 @@ function isYoutubeMusic(url, initiator) {
 }
 
 function redirect(url, type) {
-
     // Video
     // https://music.youtube.com/watch?v=_PkGiKBW-DA&list=RDAMVM_PkGiKBW-DA
     // https://beatbump.ml/listen?id=_PkGiKBW-DA&list=RDAMVM_PkGiKBW-DA
@@ -69,7 +68,6 @@ function redirect(url, type) {
 async function initDefaults() {
     await browser.storage.local.set({
         disableYoutubeMusic: true,
-
         youtubeMusicRedirects: redirects,
 
         beatbumpNormalRedirectsChecks: [...redirects.beatbump.normal],