about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorHygna <hygna@proton.me>2022-09-19 17:30:39 +0100
committerHygna <hygna@proton.me>2022-09-19 17:30:39 +0100
commit0c1595ec3a0f8f38f322f2e70598dbe208151554 (patch)
tree58d65a33dc8f18fb09f096a5b587592371153d0d
parentConverted index.html to ejs (diff)
downloadlibredirect-0c1595ec3a0f8f38f322f2e70598dbe208151554.zip
Changes
Made get_instances.py more efficient

Further work to get widgets/services.js to work properly
-rw-r--r--src/assets/javascripts/services.js33
-rw-r--r--src/config/config.json171
-rw-r--r--src/instances/get_instances.py484
-rw-r--r--src/pages/options/index.ejs10
-rw-r--r--src/pages/options/index.html1326
-rw-r--r--src/pages/options/widgets/general.ejs12
-rw-r--r--src/pages/options/widgets/services.ejs61
-rw-r--r--src/pages/options/widgets/services.js58
-rw-r--r--src/pages/widgets/links.ejs4
9 files changed, 793 insertions, 1366 deletions
diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js
index 70928786..affe0d1a 100644
--- a/src/assets/javascripts/services.js
+++ b/src/assets/javascripts/services.js
@@ -28,8 +28,8 @@ function init() {
 		//cur = current

 		for (const service in config.services) {

 			options[service] = {}

-			browser.storage.local.get([`disable${utils.camelCase(service)}`, `${service}RedirectType`, `${service}Frontend`], r => {

-				options[service].disabled = r["disable" + utils.camelCase(service)]

+			browser.storage.local.get([`${utils.camelCase(service)}Enable`, `${service}RedirectType`, `${service}Frontend`], r => {

+				options[service].enabled = r[utils.camelCase(service) + "Enable"]

 				options[service].frontend = r[service + "Frontend"]

 				options[service].redirectType = r[service + "RedirectType"]

 				// console.log(r)

@@ -60,19 +60,19 @@ function all(service) {
 	return tmp

 }

 

-getConfig()

+await getConfig()

 init()

 browser.storage.onChanged.addListener(init)

 

 function redirect(url, type, initiator) {

 	let randomInstance

-	let frontend = options[service].frontend

+	let frontend

 	let network = options.network

 	let networkFallback = options.networkFallback

-	let redirectType = options[service].redirectType

+	let redirectType

 	if (url.pathname == "/") return

 	for (const service in config.services) {

-		if (options[service].disabled && !disableOverride) continue

+		if (!options[service].enabled && !disableOverride) continue

 		let targets = service.targets

 		if (targets == "datajson") {

 			browser.storage.local.get(`${service}Targets`, (targets = r[service + "Targets"]))

@@ -81,11 +81,18 @@ function redirect(url, type, initiator) {
 		if (initiator && (all(service).includes(initiator.origin) || targets.includes(initiator.host))) continue

 		if (!targets.some(rx => rx.test(url.href))) continue

 		if (type != redirectType && type != "both") continue

+

+		frontend = options[service].frontend

+		redirectType = options[service].redirectType

+

 		// browser.storage.local.get(`${service}Frontend`, (frontend = r[service + "Frontend"]))

-		let instanceList = [...[service + utils.camelCase(network) + "RedirectsChecks"], ...[service + utils.camelCase(network) + "CustomRedirects"]]

-		if (instanceList.length === 0 && networkFallback) instanceList = [...[service + "ClearnetRedirectsChecks"], ...[service + "ClearnetCustomRedirects"]]

-		if (instanceList.length === 0 && redirects.indexOf(frontend) != -1) return

-		randomInstance = utils.getRandomInstance(instanceList)

+

+		if (config.services[service].frontends[frontend].instanceList) {

+			let instanceList = [...[frontend + utils.camelCase(network) + "RedirectsChecks"], ...[frontend + utils.camelCase(network) + "CustomRedirects"]]

+			if (instanceList.length === 0 && networkFallback) instanceList = [...[frontend + "ClearnetRedirectsChecks"], ...[frontend + "ClearnetCustomRedirects"]]

+			if (instanceList.length === 0 && redirects.indexOf(frontend) != -1) return

+			randomInstance = utils.getRandomInstance(instanceList)

+		}

 	}

 

 	// Here is a (temperory) space for defining constants required in 2 or more switch cases.

@@ -114,7 +121,7 @@ function redirect(url, type, initiator) {
 				.replace("/watch?v=", "/listen?id=")

 				.replace("/channel/", "/artist/")

 				.replace("/playlist?list=", "/playlist/VL")

-				.replace(/\/search\?q=.*/, searchQuery => searchQuery.replace("?q=", "/") + "?filter=song")

+				.replace(/\/search\?q=.*/, searchQuery => searchQuery.replace("?q=", "/") + "?filter=all")

 		case "hyperpipe":

 			return `${randomInstance}${url.pathname}${url.search}`.replace(/\/search\?q=.*/, searchQuery => searchQuery.replace("?q=", "/"))

 		case "bibliogram":

@@ -386,7 +393,7 @@ function initDefaults() {
 				// console.log(redirects)

 				// console.log(config)

 				browser.storage.local.set({

-					redirects,

+					redirects: redirects.invidious,

 				})

 				browser.storage.local.get(["cloudflareBlackList", "authenticateBlackList", "offlineBlackList"], async r => {

 					// console.log(r)

@@ -395,7 +402,7 @@ function initDefaults() {
 							browser.storage.local.set({ [service + "Targets"]: redirects[service] })

 						}

 						for (const defaultOption in config.services[service].defaults) {

-							browser.storage.local.set({ [defaultOption]: config.services[service].defaults[defaultOption] })

+							browser.storage.local.set({ [service + camelCase(defaultOption)]: config.services[service].defaults[defaultOption] })

 						}

 						for (const frontend in config.services[service].frontends) {

 							let clearnetChecks = redirects[frontend].clearnet

diff --git a/src/config/config.json b/src/config/config.json
index 7c391552..d0bf7edd 100644
--- a/src/config/config.json
+++ b/src/config/config.json
@@ -24,7 +24,10 @@
 					"invidious": {

 						"preferences": {

 							"cookies": ["PREFS"]

-						}

+						},

+						"name": "Invidious",

+						"embeddable": true,

+						"instanceList": true

 					},

 					"piped": {

 						"preferences": {

@@ -48,19 +51,38 @@
 								"volume",

 								"watchHistory"

 							]

-						}

+						},

+						"name": "Piped",

+						"embeddable": true,

+						"instanceList": true

 					},

 					"pipedMaterial": {

 						"preferences": {

 							"localstorage": ["PREFERENCES"]

-						}

+						},

+						"name": "Piped-Material",

+						"embeddable": false,

+						"instanceList": true

 					},

 					"cloudtube": {

 						"preferences": {

 							"token": "token",

 							"fetchEndpoint": "/api/settings",

 							"setEndpoint": "/settings"

-						}

+						},

+						"name": "CloudTube",

+						"embeddable": false,

+						"instanceList": true

+					},

+					"freetube": {

+						"name": "FreeTube",

+						"embeddable": false,

+						"instanceList": false

+					},

+					"yattee": {

+						"name": "Yattee",

+						"embeddable": false,

+						"instanceList": false

 					}

 				},

 				"singleInstanceFrontends": ["freetube", "yatte"],

@@ -74,7 +96,7 @@
 				],

 				"name": "Youtube",

 				"options": {

-					"disabled": false,

+					"enabled": true,

 					"redirectType": "both",

 					"frontend": "invidious",

 					"embedFrontend": "invidious"

@@ -88,19 +110,23 @@
 						"preferences": {

 							"localstorage": ["settings"],

 							"indexeddb": "beatbump"

-						}

+						},

+						"name": "Beatbump",

+						"instanceList": true

 					},

 					"hyperpipe": {

 						"preferences": {

 							"localstorage": ["api", "authapi", "codec", "locale", "next", "pipedapi", "quality", "theme", "vol"],

 							"indexeddb": ["hyperpipedb"]

-						}

+						},

+						"name": "HyperPipe",

+						"instanceList": true

 					}

 				},

 				"targets": ["^https?:\\/{2}music\\.youtube\\.com(\\/.*|$)"],

 				"name": "YT Music",

 				"options": {

-					"disabled": false,

+					"enabled": true,

 					"frontend": "beatbump"

 				},

 				"imageType": "png",

@@ -130,13 +156,16 @@
 								"replaceTwitter",

 								"replaceYouTube"

 							]

-						}

+						},

+						"name": "Nitter",

+						"embeddable": true,

+						"instanceList": true

 					}

 				},

 				"targets": ["^https?:\\/{2}(www\\.|mobile\\.|)twitter\\.com", "^https?:\\/{2}(pbs\\.|video\\.|)twimg\\.com", "^https?:\\/{2}platform\\.twitter\\.com/embed", "^https?:\\/{2}t\\.co"],

 				"name": "Twitter",

 				"options": {

-					"disabled": false,

+					"enabled": true,

 					"redirectType": "both"

 				},

 				"imageType": "png",

@@ -149,12 +178,14 @@
 							"token": "token",

 							"fetchEndpoint": "/settings.json",

 							"setEndpoint": "/applysettings"

-						}

+						},

+						"name": "Bibliogram",

+						"instanceList": false

 					}

 				},

 				"targets": ["^https?:\\/{2}(www\\.)?instagram\\.com"],

 				"name": "Instagram",

-				"options": { "disabled": false },

+				"options": { "enabled": true },

 				"imageType": "png",

 				"embeddable": false

 			},

@@ -163,12 +194,14 @@
 					"proxiTok": {

 						"preferences": {

 							"cookies": ["api-test_endpoints", "theme"]

-						}

+						},

+						"name": "ProxiTok",

+						"instanceList": true

 					}

 				},

 				"targets": ["^https?:\\/{2}(www\\.|)tiktok\\.com.*"],

 				"name": "TikTok",

-				"options": { "disabled": false },

+				"options": { "enabled": true },

 				"imageType": "png",

 				"embeddable": false

 			},

@@ -177,7 +210,9 @@
 					"libreddit": {

 						"preferences": {

 							"cookies": ["theme", "front_page", "layout", "wide", "post_sort", "comment_sort", "show_nsfw", "autoplay_videos", "use_hls", "hide_hls_notification", "subscriptions", "filters"]

-						}

+						},

+						"name": "Libreddit",

+						"instanceList": true

 					},

 					"teddit": {

 						"preferences": {

@@ -195,13 +230,15 @@
 								"theme",

 								"videos_muted"

 							]

-						}

+						},

+						"name": "Teddit",

+						"instanceList": true

 					}

 				},

 				"targets": ["^https?:\\/{2}(www\\.|old\\.|np\\.|new\\.|amp\\.|)reddit\\.com", "^https?:\\/{2}(i\\.|preview\\.)redd\\.it"],

 				"name": "Reddit",

 				"options": {

-					"disabled": false,

+					"enabled": true,

 					"frontend": "libreddit"

 				},

 				"imageType": "png",

@@ -210,12 +247,14 @@
 			"imgur": {

 				"frontends": {

 					"rimgo": {

-						"preferences": {}

+						"preferences": {},

+						"name": "rimgo",

+						"instanceList": true

 					}

 				},

 				"targets": ["^https?:\\/{2}([im]\\.)?imgur\\.(com|io)(\\/|$)"],

 				"name": "Imgur",

-				"options": { "disabled": false },

+				"options": { "enabled": true },

 				"imageType": "png",

 				"embeddable": false

 			},

@@ -224,19 +263,23 @@
 					"wikiless": {

 						"preferences": {

 							"cookies": ["theme", "default_lang"]

-						}

+						},

+						"name": "Wikiless",

+						"instanceList": true

 					}

 				},

 				"targets": ["^https?:\\/{2}([a-z]+\\.)*wikipedia\\.org"],

 				"name": "Wikipedia",

-				"options": { "disabled": true },

+				"options": { "enabled": false },

 				"imageType": "svg",

 				"embeddable": false

 			},

 			"medium": {

 				"frontends": {

 					"scribe": {

-						"preferences": {}

+						"preferences": {},

+						"name": "Scribe",

+						"instanceList": true

 					}

 				},

 				"targets": [

@@ -260,7 +303,7 @@
 					"^writingcooperative\\.com "

 				],

 				"name": "Medium",

-				"options": { "disabled": false },

+				"options": { "enabled": true },

 				"imageType": "svg",

 				"embeddable": false

 			},

@@ -269,12 +312,14 @@
 					"quetre": {

 						"preferences": {

 							"localstorage": ["theme"]

-						}

+						},

+						"name": "Quetre",

+						"instanceList": true

 					}

 				},

 				"targets": ["^https?:\\/{2}([a-z]+\\.)*quora\\.com.*"],

 				"name": "Quora",

-				"options": { "disabled": false },

+				"options": { "enabled": true },

 				"imageType": "png",

 				"embeddable": false

 			},

@@ -283,36 +328,42 @@
 					"libremdb": {

 						"preferences": {

 							"localstorage": ["theme"]

-						}

+						},

+						"name": "libremdb",

+						"instanceList": true

 					}

 				},

 				"targets": ["^https?:\\/{2}(?:www\\.|)imdb\\.com.*"],

 				"name": "IMDb",

-				"options": { "disabled": true },

+				"options": { "enabled": false },

 				"imageType": "svg",

 				"embeddable": false

 			},

 			"reuters": {

 				"frontends": {

 					"neuters": {

-						"preferences": {}

+						"preferences": {},

+						"name": "Neuters",

+						"instanceList": true

 					}

 				},

 				"targets": ["^https?:\\/{2}(www\\.|)reuters\\.com.*"],

 				"name": "Reuters",

-				"options": { "disabled": true },

+				"options": { "enabled": false },

 				"imageType": "svg",

 				"embeddable": false

 			},

 			"peertube": {

 				"frontends": {

 					"simpleertube": {

-						"preferences": {}

+						"preferences": {},

+						"name": "SimpleerTube",

+						"instanceList": true

 					}

 				},

 				"targets": "datajson",

 				"name": "PeerTube",

-				"options": { "disabled": true },

+				"options": { "enabled": false },

 				"imageType": "svg",

 				"embeddable": false

 			},

@@ -322,14 +373,21 @@
 						"preferences": {

 							"cookies": ["nsfw", "theme"],

 							"localstorage": ["autoplay", "autoplayNextVid", "collapseComments", "plyr", "sb_categories", "showRelated"]

-						}

+						},

+						"name": "Librarian",

+						"embeddable": true,

+						"instanceList": true

+					},

+					"lbryDesktop": {

+						"name": "LBRY Desktop",

+						"embeddable": false,

+						"instanceList": false

 					}

 				},

-				"singleInstanceFrontends": ["lbryDesktop"],

 				"targets": ["^https?:\\/{2}odysee\\.com", "^https?:\\/{2}lbry\\.tv"],

 				"name": "LBRY",

 				"options": {

-					"disabled": true,

+					"enabled": false,

 					"frontend": "librarian",

 					"redirectType": "both"

 				},

@@ -359,7 +417,9 @@
 								"theme",

 								"tokens"

 							]

-						}

+						},

+						"name": "SearX",

+						"instanceList": true

 					},

 					"searxng": {

 						"preferences": {

@@ -384,21 +444,27 @@
 								"theme",

 								"tokens"

 							]

-						}

+						},

+						"name": "SearXNG",

+						"instanceList": true

 					},

 					"whoogle": {

-						"preferences": {}

+						"preferences": {},

+						"name": "Whoogle",

+						"instanceList": true

 					},

 					"librex": {

 						"preferences": {

 							"cookies": ["bibliogram", "disable_special", "invidious", "libreddit", "nitter", "proxitok", "theme", "wikiless"]

-						}

+						},

+						"name": "LibreX",

+						"instanceList": true

 					}

 				},

 				"targets": ["^https?:\\/{2}search\\.libredirect\\.invalid"],

 				"name": "Search",

 				"options": {

-					"disabled": false,

+					"enabled": true,

 					"frontend": "searxng"

 				},

 				"imageType": "svg",

@@ -409,18 +475,22 @@
 					"simplyTranslate": {

 						"preferences": {

 							"cookies": ["from_lang", "to_lang", "tts_enabled", "use_text_fields"]

-						}

+						},

+						"name": "SimplyTranslate",

+						"instanceList": true

 					},

 					"lingva": {

 						"preferences": {

 							"localstorage": ["isauto", "source", "target"]

-						}

+						},

+						"name": "Lingva",

+						"instanceList": true

 					}

 				},

 				"targets": ["^https?:\\/{2}translate\\.google(\\.[a-z]{2,3}){1,2}\\/"],

 				"name": "Translate",

 				"options": {

-					"disabled": false,

+					"enabled": true,

 					"frontend": "simplyTranslate"

 				},

 				"imageType": "svg",

@@ -429,14 +499,19 @@
 			"maps": {

 				"frontends": {

 					"facil": {

-						"preferences": {}

+						"preferences": {},

+						"name": "FacilMap",

+						"instanceList": true

+					},

+					"osm": {

+						"name": "OpenStreetMap",

+						"instanceList": false

 					}

 				},

-				"singleInstanceFrontends": ["osm"],

 				"targets": ["^https?:\\/{2}(((www|maps)\\.)?(google\\.).*(\\/maps)|maps\\.(google\\.).*)"],

 				"name": "Maps",

 				"options": {

-					"disabled": false,

+					"enabled": true,

 					"frontend": "osm"

 				},

 				"imageType": "svg",

@@ -445,12 +520,14 @@
 			"sendTargets": {

 				"frontends": {

 					"send": {

-						"preferences": {}

+						"preferences": {},

+						"name": "Send",

+						"instanceList": "true"

 					}

 				},

 				"targets": ["^https?:\\/{2}send\\.libredirect\\.invalid\\/$", "^https?:\\/{2}send\\.firefox\\.com\\/$", "^https?:\\/{2}sendfiles\\.online\\/$"],

 				"name": "Send Files",

-				"options": { "disabled": false },

+				"options": { "enabled": true },

 				"imageType": "svg",

 				"embeddable": false

 			}

diff --git a/src/instances/get_instances.py b/src/instances/get_instances.py
index a95eb46f..770f2581 100644
--- a/src/instances/get_instances.py
+++ b/src/instances/get_instances.py
@@ -3,12 +3,10 @@
 import requests
 import json
 from urllib.parse import urlparse
-from bs4 import BeautifulSoup
 import re
 from colorama import Fore, Back, Style
 from urllib.parse import urlparse
 import socket
-import subprocess
 
 mightyList = {}
 
@@ -18,6 +16,11 @@ torRegex = startRegex + "onion" + endRegex
 i2pRegex = startRegex + "i2p" + endRegex
 lokiRegex = startRegex + "loki" + endRegex
 authRegex = "https?:\/{2}\S+:\S+@(?:[^\s\/]+\.)+[a-zA-Z0-9]+" + endRegex
+config = {}
+
+with open('./config/config.json') as file:
+    config = file
+
 
 def filterLastSlash(urlList):
     tmp = {}
@@ -102,70 +105,162 @@ def is_offline(url):
     except:
         return False
 
+def fetchCache(frontend, name) :
+    # json_object = json.dumps(mightyList, ensure_ascii=False, indent=2)
+    with open('./src/instances/data.json') as file:
+        mightyList[frontend] = json.load(file).frontend
+    print(Fore.ORANGE + 'Failed' + Style.RESET_ALL + ' to fetch ' + name)
+
+def fetchFromFile(frontend, name):
+    #json_object = json.dumps(mightyList, ensure_ascii=False, indent=2)
+    with open('./src/instances/' + frontend + '.json') as file:
+        mightyList[frontend] = json.load(file)
+    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + name)
+
+def fetchJsonList(frontend, name, url, urlItem):
+    try:
+        r = requests.get(url)
+        rJson = json.loads(r.text)
+        _list = {}
+        for network in config.networks:
+            _list[network] = []
+        if type(urlItem) is 'str':
+            for item in rJson:
+                if urlItem is not None:
+                    tmpUrl = item[urlItem]
+                else:
+                    tmpUrl = item
+                if tmpUrl.strip() == "":
+                    continue
+                elif re.search(torRegex, tmpUrl):
+                    _list['tor'].append(tmpUrl)
+                elif re.search(i2pRegex, tmpUrl):
+                    _list['i2p'].append(tmpUrl)
+                elif re.search(lokiRegex, tmpUrl):
+                    _list['loki'].append(tmpUrl)
+                else:
+                    _list['clearnet'].append(tmpUrl)
+        else:
+            for i in range(config.networks.length):
+                # The expected order is the same as in config.json. If the frontend doesn't have any instances for a specified network, use None
+                if urlItem != None:
+                    for item in rJson:
+                        if network in item:
+                            if item[network].strip() != "":
+                                _list[config.networks[i]].append(item[urlItem[i]])
+
+        mightyList[frontend] = _list
+        print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + name)
+    except:
+        fetchCache(frontend, name)
+
+def fetchRegexList(frontend, name, url, regex): 
+    try:
+        r = requests.get(url)
+        _list = {}
+        for network in config.networks:
+            _list[network] = []
+    
+        tmp = re.findall(regex, r.text)
+    
+        for item in tmp:
+            if item.strip() == "":
+                continue
+            elif re.search(torRegex, item):
+                _list['tor'].append(item)
+            elif re.search(i2pRegex, item):
+                _list['i2p'].append(item)
+            elif re.search(lokiRegex, item):
+                _list['loki'].append(item)
+            else:
+                _list['clearnet'].append(item)
+        mightyList[frontend] = _list
+        print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + name)
+    except:
+        fetchCache(frontend, name)
+
+def fetchTextList(frontend, name, url, prepend):
+    try:
+        r = requests.get(url)
+        tmp = r.text.strip().split('\n')
+
+        _list = {}
+        for network in config.networks:
+            _list[network] = []
+
+        for item in tmp:
+            item = prepend + item
+            if re.search(torRegex, item):
+                _list['tor'].append(item)
+            elif re.search(i2pRegex, item):
+                _list['i2p'].append(item)
+            elif re.search(lokiRegex, item):
+                _list['loki'].append(item)
+            else:
+                _list['clearnet'].append(item)
+        mightyList[frontend] = _list
+        print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + name)
+    except:
+        fetchCache(frontend, name)
+
 
 def invidious():
-    r = requests.get('https://api.invidious.io/instances.json')
-    rJson = json.loads(r.text)
-    invidiousList = {}
-    invidiousList['clearnet'] = []
-    invidiousList['tor'] = []
-    invidiousList['i2p'] = []
-    invidiousList['loki'] = []
-    for instance in rJson:
-        if instance[1]['type'] == 'https':
-            invidiousList['clearnet'].append(instance[1]['uri'])
-        elif instance[1]['type'] == 'onion':
-            invidiousList['tor'].append(instance[1]['uri'])
-    mightyList['invidious'] = invidiousList
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Invidious')
+    name = 'Invidious'
+    frontend = 'invidious'
+    try:
+        _list = {}
+        _list['clearnet'] = []
+        _list['tor'] = []
+        _list['i2p'] = []
+        _list['loki'] = []
+        r = requests.get('https://api.invidious.io/instances.json')
+        rJson = json.loads(r.text)
+        for instance in rJson:
+            if instance[1]['type'] == 'https':
+                _list['clearnet'].append(instance[1]['uri'])
+            elif instance[1]['type'] == 'onion':
+                _list['tor'].append(instance[1]['uri'])
+        mightyList[frontend] = _list
+        print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + name)
+    except:
+        fetchCache(frontend, name)
 
 
 def piped():
-    r = requests.get(
-        'https://raw.githubusercontent.com/wiki/TeamPiped/Piped/Instances.md')
-
-    tmp = re.findall(
-        '(?:[^\s\/]+\.)+[a-zA-Z]+ (?:\(Official\) )?\| (https:\/{2}(?:[^\s\/]+\.)+[a-zA-Z]+) \| ', r.text)
-    _list = {}
-    _list['clearnet'] = []
-    _list['tor'] = []
-    _list['i2p'] = []
-    _list['loki'] = []
-    for item in tmp:
-        try:
-            url = requests.get(item, timeout=5).url
-            if url.strip("/") == item:
+    frontend = 'piped'
+    name = 'Piped'
+    try:
+        _list = {}
+        _list['clearnet'] = []
+        _list['tor'] = []
+        _list['i2p'] = []
+        _list['loki'] = []
+        r = requests.get(
+            'https://raw.githubusercontent.com/wiki/TeamPiped/Piped/Instances.md')
+    
+        tmp = re.findall(
+            '(?:[^\s\/]+\.)+[a-zA-Z]+ (?:\(Official\) )?\| (https:\/{2}(?:[^\s\/]+\.)+[a-zA-Z]+) \| ', r.text)
+        for item in tmp:
+            try:
+                url = requests.get(item, timeout=5).url
+                if url.strip("/") == item:
+                    continue
+                else:
+                    _list['clearnet'].append(url)
+            except:
                 continue
-            else:
-                _list['clearnet'].append(url)
-        except:
-            continue
-    mightyList['piped'] = _list
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Piped')
+        mightyList[frontend] = _list
+        print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + name)
+    except:
+        fetchCache(frontend, name)
 
 
 def pipedMaterial():
-    r = requests.get(
-        'https://raw.githubusercontent.com/mmjee/Piped-Material/master/README.md')
-
-    tmp = re.findall(
-            r"\| (https?:\/{2}(?:\S+\.)+[a-zA-Z0-9]*) +\|", r.text)
-    pipedMaterialList = {}
-    pipedMaterialList['clearnet'] = []
-    pipedMaterialList['tor'] = []
-    pipedMaterialList['i2p'] = []
-    pipedMaterialList['loki'] = []
-    for item in tmp:
-        pipedMaterialList['clearnet'].append(item)
-    mightyList['pipedMaterial'] = pipedMaterialList
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'pipedMaterial')
+    fetchRegexList('pipedMaterial', 'Piped-Material', 'https://raw.githubusercontent.com/mmjee/Piped-Material/master/README.md', r"\| (https?:\/{2}(?:\S+\.)+[a-zA-Z0-9]*) +\|")
 
 
 def cloudtube():
-    json_object = json.dumps(mightyList, ensure_ascii=False, indent=2)
-    with open('./src/instances/cloudtube.json') as file:
-        mightyList['cloudtube'] = json.load(file)
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'CloudTube')
+    fetchCache('cloudtube', 'Cloudtube')
 
 
 def proxitok():
@@ -186,19 +281,7 @@ def proxitok():
 
 
 def send():
-    r = requests.get(
-        'https://gitlab.com/timvisee/send-instances/-/raw/master/README.md')
-    tmp = re.findall(
-        r"- ([-a-zA-Z0-9@:%_\+.~#?&//=]{2,}\.[a-z0-9]{2,}\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)\)*\|*[A-Z]{0,}", r.text)
-    sendList = {}
-    sendList['clearnet'] = []
-    sendList['tor'] = []
-    sendList['i2p'] = []
-    sendList['loki'] = []
-    for item in tmp:
-        sendList['clearnet'].append(item)
-    mightyList['send'] = sendList
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Send')
+    fetchRegexList('send', 'Send', 'https://gitlab.com/timvisee/send-instances/-/raw/master/README.md', r"- ([-a-zA-Z0-9@:%_\+.~#?&//=]{2,}\.[a-z0-9]{2,}\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)\)*\|*[A-Z]{0,}")
 
 
 def nitter():
@@ -230,150 +313,35 @@ def nitter():
 
 
 def bibliogram():
-    json_object = json.dumps(mightyList, ensure_ascii=False, indent=2)
-    with open('./src/instances/bibliogram.json') as file:
-        mightyList['bibliogram'] = json.load(file)
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Bibliogram')
+    fetchFromFile('bibliogram', 'Bibliogram')
 
 
 def libreddit():
-    r = requests.get(
-        'https://raw.githubusercontent.com/spikecodes/libreddit/master/README.md')
-    libredditList = {}
-    libredditList['clearnet'] = []
-    libredditList['tor'] = []
-    libredditList['i2p'] = []
-    libredditList['loki'] = []
-
-    tmp = re.findall(
-        r"\| \[.*\]\(([-a-zA-Z0-9@:%_\+.~#?&//=]{2,}\.[a-z]{2,}\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)\)*\|*[A-Z]{0,}.*\|.*\|", r.text)
-
-    for item in tmp:
-        if re.search(torRegex, item):
-            libredditList['tor'].append(item)
-        else:
-            libredditList['clearnet'].append(item)
-    mightyList['libreddit'] = libredditList
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'LibReddit')
+    fetchRegexList('libreddit', 'Libreddit', 'https://raw.githubusercontent.com/spikecodes/libreddit/master/README.md', r"\| \[.*\]\(([-a-zA-Z0-9@:%_\+.~#?&//=]{2,}\.[a-z]{2,}\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)\)*\|*[A-Z]{0,}.*\|.*\|")
 
 
 def teddit():
-    r = requests.get(
-        'https://codeberg.org/teddit/teddit/raw/branch/main/instances.json')
-    rJson = json.loads(r.text)
-    tedditList = {}
-    tedditList['clearnet'] = []
-    tedditList['tor'] = []
-    tedditList['i2p'] = []
-    tedditList['loki'] = []
-    for item in rJson:
-        url = item['url']
-        if url != '':
-            tedditList['clearnet'].append(url)
-        if 'onion' in item:
-            onion = item['onion']
-            if onion != '':
-                tedditList['tor'].append(onion)
-
-    mightyList['teddit'] = tedditList
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Teddit')
+    fetchJsonList('teddit', 'Teddit', 'https://codeberg.org/teddit/teddit/raw/branch/main/instances.json', ['url', 'onion', 'i2p', None])
 
 
 def wikiless():
-    r = requests.get('https://wikiless.org/instances.json')
-    rJson = json.loads(r.text)
-    wikilessList = {}
-    wikilessList['clearnet'] = []
-    wikilessList['tor'] = []
-    wikilessList['i2p'] = []
-    wikilessList['loki'] = []
-    for item in rJson:
-        if 'url' in item:
-            if item['url'].strip() != "":
-                wikilessList['clearnet'].append(item['url'])
-        if 'onion' in item:
-            if item['onion'].strip() != "":
-                wikilessList['tor'].append(item['onion'])
-        if 'i2p' in item:
-            if item['i2p'].strip() != "":
-                wikilessList['i2p'].append(item['i2p'])
-    mightyList['wikiless'] = wikilessList
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Wikiless')
+    fetchJsonList('wikiless', 'Wikiless', 'https://wikiless.org/instances.json', ['url', 'onion', 'i2p', None])
 
 
 def scribe():
-    r = requests.get(
-        'https://git.sr.ht/~edwardloveall/scribe/blob/main/docs/instances.json')
-    rJson = json.loads(r.text)
-    scribeList = {}
-    scribeList['clearnet'] = []
-    scribeList['tor'] = []
-    scribeList['i2p'] = []
-    scribeList['loki'] = []
-    for item in rJson:
-        scribeList['clearnet'].append(item)
-    mightyList['scribe'] = scribeList
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Scribe')
+    fetchJsonList('scribe', 'Scribe', 'https://git.sr.ht/~edwardloveall/scribe/blob/main/docs/instances.json', None)
 
 
 def quetre():
-    r = requests.get(
-        'https://raw.githubusercontent.com/zyachel/quetre/main/README.md')
-    _list = {}
-    _list['clearnet'] = []
-    _list['tor'] = []
-    _list['i2p'] = []
-    _list['loki'] = []
-
-    tmp = re.findall(
-        r"\| \[.*\]\(([-a-zA-Z0-9@:%_\+.~#?&//=]{2,}\.[a-z]{2,}\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)\)*\|*[A-Z]{0,}.*\|.*\|", r.text)
-
-
-    for item in tmp:
-        if re.search(torRegex, item):
-            _list['tor'].append(item)
-        else:
-            _list['clearnet'].append(item)
-    mightyList['quetre'] = _list
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Quetre')
+    fetchRegexList('quetre', 'Quetre', 'https://raw.githubusercontent.com/zyachel/quetre/main/README.md', r"\| \[.*\]\(([-a-zA-Z0-9@:%_\+.~#?&//=]{2,}\.[a-z]{2,}\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)\)*\|*[A-Z]{0,}.*\|.*\|")
 
 
 def libremdb():
-    r = requests.get(
-        'https://raw.githubusercontent.com/zyachel/libremdb/main/README.md')
-    _list = {}
-    _list['clearnet'] = []
-    _list['tor'] = []
-    _list['i2p'] = []
-    _list['loki'] = []
-
-    tmp = re.findall(
-        r"\| ([-a-zA-Z0-9@:%_\+.~#?&//=]{2,}\.[a-z]{2,}\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)*\|*[A-Z]{0,}.*\|.*\|", r.text)
+    fetchRegexList('libremdb', 'libremdb', 'https://raw.githubusercontent.com/zyachel/libremdb/main/README.md', r"\| ([-a-zA-Z0-9@:%_\+.~#?&//=]{2,}\.[a-z]{2,}\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)*\|*[A-Z]{0,}.*\|.*\|")
 
 
-    for item in tmp:
-        if item.strip() == "":
-            continue
-        if re.search(torRegex, item):
-            _list['tor'].append(item)
-        else:
-            _list['clearnet'].append(item)
-
-    mightyList['libremdb'] = _list
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Libremdb')
-
 def simpleertube():
-    r = requests.get('https://simple-web.org/instances/simpleertube')
-    _list = {}
-    _list['clearnet'] = []
-    _list['tor'] = []
-    _list['i2p'] = []
-    _list['loki'] = []
-    for item in r.text.strip().split('\n'):
-        _list['clearnet'].append('https://' + item)
-
-    mightyList['simpleertube'] = _list
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'SimpleerTube')
+    fetchTextList('simpleertube', 'SimpleerTube', 'https://simple-web.org/instances/simpleertube', 'https://')
 
 
 def simplytranslate():
@@ -403,19 +371,7 @@ def simplytranslate():
 
 
 def linvgatranslate():
-    r = requests.get(
-        'https://raw.githubusercontent.com/TheDavidDelta/lingva-translate/main/instances.json')
-    rJson = json.loads(r.text)
-    lingvaList = {}
-    lingvaList['clearnet'] = []
-    lingvaList['tor'] = []
-    lingvaList['i2p'] = []
-    lingvaList['loki'] = []
-    for item in rJson:
-        lingvaList['clearnet'].append(item)
-
-    mightyList['lingva'] = lingvaList
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'LinvgaTranslate')
+    fetchJsonList('lingva', 'LingvaTranslate', 'https://raw.githubusercontent.com/TheDavidDelta/lingva-translate/main/instances.json', None)
 
 
 def searx_searxng():
@@ -454,140 +410,34 @@ def searx_searxng():
 
 
 def whoogle():
-    r = requests.get(
-        'https://raw.githubusercontent.com/benbusby/whoogle-search/main/misc/instances.txt')
-    tmpList = r.text.strip().split('\n')
-    whoogleList = {}
-    whoogleList['clearnet'] = []
-    whoogleList['tor'] = []
-    whoogleList['i2p'] = []
-    whoogleList['loki'] = []
-    for item in tmpList:
-        if re.search(torRegex, item):
-            whoogleList['tor'].append(item)
-        elif re.search(torRegex, item):
-            whoogleList['i2p'].append(item)
-        else:
-            whoogleList['clearnet'].append(item)
-    mightyList['whoogle'] = whoogleList
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Whoogle')
+    fetchTextList('whoogle', 'Whoogle', 'https://raw.githubusercontent.com/benbusby/whoogle-search/main/misc/instances.txt', '')
 
 
 def librex():
-    r = requests.get(
-        'https://raw.githubusercontent.com/hnhx/librex/main/README.md')
-    _list = {}
-    _list['clearnet'] = []
-    _list['tor'] = []
-    _list['i2p'] = []
-    _list['loki'] = []
-
-    tmp = re.findall(
-            r"\| {1,2}\[(?:(?:[a-zA-Z0-9]+\.)+[a-zA-Z]{2,}|✅)\]\((https?:\/{2}(?:[a-zA-Z0-9]+\.)+[a-zA-Z0-9]{2,})", r.text)
-
-    for item in tmp:
-        if item.strip() == "":
-            continue
-        elif re.search(torRegex, item):
-            _list['tor'].append(item)
-        elif re.search(i2pRegex, item):
-            _list['i2p'].append(item)
-        else:
-            _list['clearnet'].append(item)
-    mightyList['librex'] = _list
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Librex')
+    fetchRegexList('librex', 'LibreX', 'https://raw.githubusercontent.com/hnhx/librex/main/README.md', r"\| {1,2}\[(?:(?:[a-zA-Z0-9]+\.)+[a-zA-Z]{2,}|✅)\]\((https?:\/{2}(?:[a-zA-Z0-9]+\.)+[a-zA-Z0-9]{2,})")
 
 
 def rimgo():
-    r = requests.get(
-        'https://codeberg.org/video-prize-ranch/rimgo/raw/branch/main/instances.json')
-    rJson = json.loads(r.text)
-    rimgoList = {}
-    rimgoList['clearnet'] = []
-    rimgoList['tor'] = []
-    rimgoList['i2p'] = []
-    rimgoList['loki'] = []
-    for item in rJson:
-        if 'url' in item:
-            rimgoList['clearnet'].append(item['url'])
-        if 'onion' in item:
-            rimgoList['tor'].append(item['onion'])
-        if 'i2p' in item:
-            rimgoList['i2p'].append(item['i2p'])
-    mightyList['rimgo'] = rimgoList
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Rimgo')
+    fetchJsonList('rimgo', 'rimgo', 'https://codeberg.org/video-prize-ranch/rimgo/raw/branch/main/instances.json', ['url', 'onion', 'i2p', None])
 
 
 def librarian():
-    r = requests.get(
-        'https://codeberg.org/librarian/librarian/raw/branch/main/instances.json')
-    rJson = json.loads(r.text)
-    librarianList = {}
-    librarianList['clearnet'] = []
-    librarianList['tor'] = []
-    librarianList['i2p'] = []
-    librarianList['loki'] = []
-    instances = rJson['instances']
-    for item in instances:
-        url = item['url']
-        if url.strip() == "":
-            continue
-        elif re.search(torRegex, url):
-            librarianList['tor'].append(url)
-        elif re.search(i2pRegex, url):
-            librarianList['i2p'].append(url)
-        elif re.search(lokiRegex, url):
-            librarianList['loki'].append(url)
-        else:
-            librarianList['clearnet'].append(url)
-    mightyList['librarian'] = librarianList
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Librarian')
-
+    fetchJsonList('librarian', 'Librarian', 'https://codeberg.org/librarian/librarian/raw/branch/main/instances.json', 'url')
 
 def neuters():
-    json_object = json.dumps(mightyList, ensure_ascii=False, indent=2)
-    with open('./src/instances/neuters.json') as file:
-        mightyList['neuters'] = json.load(file)
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Neuters')
+    fetchFromFile('neuters', 'Neuters')
 
 
 def beatbump():
-    json_object = json.dumps(mightyList, ensure_ascii=False, indent=2)
-    with open('./src/instances/beatbump.json') as file:
-        mightyList['beatbump'] = json.load(file)
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Beatbump')
+    fetchFromFile('beatbump', 'Beatbump')
 
 
 def hyperpipe():
-    r = requests.get(
-        'https://codeberg.org/Hyperpipe/pages/raw/branch/main/api/frontend.json')
-    rJson = json.loads(r.text)
-    hyperpipeList = {}
-    hyperpipeList['clearnet'] = []
-    hyperpipeList['tor'] = []
-    hyperpipeList['i2p'] = []
-    hyperpipeList['loki'] = []
-    for item in rJson:
-        url = item['url']
-        if url.strip() == "":
-            continue
-        elif re.search(torRegex, url):
-            hyperpipeList['tor'].append(url)
-        elif re.search(i2pRegex, url):
-            hyperpipeList['i2p'].append(url)
-        elif re.search(lokiRegex, url):
-            hyperpipeList['loki'].append(url)
-        else:
-            hyperpipeList['clearnet'].append(url)
-    mightyList['hyperpipe'] = hyperpipeList
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Hyperpipe')
+    fetchJsonList('hyperpipe', 'Hyperpipe', 'https://codeberg.org/Hyperpipe/pages/raw/branch/main/api/frontend.json', 'url')
 
 
 def facil():
-    json_object = json.dumps(mightyList, ensure_ascii=False, indent=2)
-    with open('./src/instances/facil.json') as file:
-        mightyList['facil'] = json.load(file)
-    print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'FacilMap')
+    fetchFromFile('facil', 'FacilMap')
 
 
 def peertube():
diff --git a/src/pages/options/index.ejs b/src/pages/options/index.ejs
index 0240f992..e0ce3c3c 100644
--- a/src/pages/options/index.ejs
+++ b/src/pages/options/index.ejs
@@ -1,12 +1,12 @@
 <!DOCTYPE html>
 <html id="elementToShowWithJavaScript" lang="en">
-  <%- include('src/pages/widgets/head') %>
+  <%- include('src/pages/widgets/head') -%>
   <body class="option" dir="auto">
-  <%- include('src/pages/widgets/links', {config: config}) %>
+  <%- include('src/pages/widgets/links', {config: config}) -%>
     <div id="pages">
-      <%- include('src/pages/options/widgets/general', {config: config}) %>
-      <%- include('src/pages/options/widgets/services', {config: config}) %>
-      <%- include('src/pages/options/widgets/about') %>
+      <%- include('src/pages/options/widgets/general', {config: config}) -%>
+      <%- include('src/pages/options/widgets/services', {config: config}) -%>
+      <%- include('src/pages/options/widgets/about') -%>
     </div>
   </body>
   <script type="module" src="./index.js"></script>
diff --git a/src/pages/options/index.html b/src/pages/options/index.html
index 8908c9bf..df6bec2a 100644
--- a/src/pages/options/index.html
+++ b/src/pages/options/index.html
@@ -8,50 +8,29 @@
   <title>General</title>
   <script type="module" src="./init.js"></script>
 </head>
-
   <body class="option" dir="auto">
   <section class="links" id="links">
   <div class="title"><img src="../../../assets/images/general-icon.svg"><a href="#general" data-localise="__MSG_general__">General</a></div>
-  
-  <div class="title"><img src="../../../assets/images/youtube-icon.png"><a href="#youtube" data-localise="__MSG_youtube__">youtube</a></div>
-  
-  <div class="title"><img src="../../../assets/images/youtubeMusic-icon.png"><a href="#youtubeMusic" data-localise="__MSG_youtubeMusic__">youtubeMusic</a></div>
-  
-  <div class="title"><img src="../../../assets/images/twitter-icon.png"><a href="#twitter" data-localise="__MSG_twitter__">twitter</a></div>
-  
-  <div class="title"><img src="../../../assets/images/instagram-icon.png"><a href="#instagram" data-localise="__MSG_instagram__">instagram</a></div>
-  
-  <div class="title"><img src="../../../assets/images/tiktok-icon.png"><a href="#tiktok" data-localise="__MSG_tiktok__">tiktok</a></div>
-  
-  <div class="title"><img src="../../../assets/images/reddit-icon.png"><a href="#reddit" data-localise="__MSG_reddit__">reddit</a></div>
-  
-  <div class="title"><img src="../../../assets/images/imgur-icon.png"><a href="#imgur" data-localise="__MSG_imgur__">imgur</a></div>
-  
-  <div class="title"><img src="../../../assets/images/wikipedia-icon.svg"><a href="#wikipedia" data-localise="__MSG_wikipedia__">wikipedia</a></div>
-  
-  <div class="title"><img src="../../../assets/images/medium-icon.svg"><a href="#medium" data-localise="__MSG_medium__">medium</a></div>
-  
-  <div class="title"><img src="../../../assets/images/quora-icon.png"><a href="#quora" data-localise="__MSG_quora__">quora</a></div>
-  
-  <div class="title"><img src="../../../assets/images/imdb-icon.svg"><a href="#imdb" data-localise="__MSG_imdb__">imdb</a></div>
-  
-  <div class="title"><img src="../../../assets/images/reuters-icon.svg"><a href="#reuters" data-localise="__MSG_reuters__">reuters</a></div>
-  
-  <div class="title"><img src="../../../assets/images/peertube-icon.svg"><a href="#peertube" data-localise="__MSG_peertube__">peertube</a></div>
-  
-  <div class="title"><img src="../../../assets/images/lbry-icon.png"><a href="#lbry" data-localise="__MSG_lbry__">lbry</a></div>
-  
-  <div class="title"><img src="../../../assets/images/search-icon.svg"><a href="#search" data-localise="__MSG_search__">search</a></div>
-  
-  <div class="title"><img src="../../../assets/images/translate-icon.svg"><a href="#translate" data-localise="__MSG_translate__">translate</a></div>
-  
-  <div class="title"><img src="../../../assets/images/maps-icon.svg"><a href="#maps" data-localise="__MSG_maps__">maps</a></div>
-  
-  <div class="title"><img src="../../../assets/images/sendTargets-icon.svg"><a href="#sendTargets" data-localise="__MSG_sendTargets__">sendTargets</a></div>
-  
-  <div class="title"><img src="../../../assets/images/about-icon.svg"><a href="#about" data-localise="__MSG_about__">About</a></div>
+    <div class="title"><img src="../../../assets/images/youtube-icon.png"><a href="#youtube" data-localise="__MSG_youtube__">youtube</a></div>
+    <div class="title"><img src="../../../assets/images/youtubeMusic-icon.png"><a href="#youtubeMusic" data-localise="__MSG_youtubeMusic__">youtubeMusic</a></div>
+    <div class="title"><img src="../../../assets/images/twitter-icon.png"><a href="#twitter" data-localise="__MSG_twitter__">twitter</a></div>
+    <div class="title"><img src="../../../assets/images/instagram-icon.png"><a href="#instagram" data-localise="__MSG_instagram__">instagram</a></div>
+    <div class="title"><img src="../../../assets/images/tiktok-icon.png"><a href="#tiktok" data-localise="__MSG_tiktok__">tiktok</a></div>
+    <div class="title"><img src="../../../assets/images/reddit-icon.png"><a href="#reddit" data-localise="__MSG_reddit__">reddit</a></div>
+    <div class="title"><img src="../../../assets/images/imgur-icon.png"><a href="#imgur" data-localise="__MSG_imgur__">imgur</a></div>
+    <div class="title"><img src="../../../assets/images/wikipedia-icon.svg"><a href="#wikipedia" data-localise="__MSG_wikipedia__">wikipedia</a></div>
+    <div class="title"><img src="../../../assets/images/medium-icon.svg"><a href="#medium" data-localise="__MSG_medium__">medium</a></div>
+    <div class="title"><img src="../../../assets/images/quora-icon.png"><a href="#quora" data-localise="__MSG_quora__">quora</a></div>
+    <div class="title"><img src="../../../assets/images/imdb-icon.svg"><a href="#imdb" data-localise="__MSG_imdb__">imdb</a></div>
+    <div class="title"><img src="../../../assets/images/reuters-icon.svg"><a href="#reuters" data-localise="__MSG_reuters__">reuters</a></div>
+    <div class="title"><img src="../../../assets/images/peertube-icon.svg"><a href="#peertube" data-localise="__MSG_peertube__">peertube</a></div>
+    <div class="title"><img src="../../../assets/images/lbry-icon.png"><a href="#lbry" data-localise="__MSG_lbry__">lbry</a></div>
+    <div class="title"><img src="../../../assets/images/search-icon.svg"><a href="#search" data-localise="__MSG_search__">search</a></div>
+    <div class="title"><img src="../../../assets/images/translate-icon.svg"><a href="#translate" data-localise="__MSG_translate__">translate</a></div>
+    <div class="title"><img src="../../../assets/images/maps-icon.svg"><a href="#maps" data-localise="__MSG_maps__">maps</a></div>
+    <div class="title"><img src="../../../assets/images/sendTargets-icon.svg"><a href="#sendTargets" data-localise="__MSG_sendTargets__">sendTargets</a></div>
+    <div class="title"><img src="../../../assets/images/about-icon.svg"><a href="#about" data-localise="__MSG_about__">About</a></div>
 </section>
-
     <div id="pages">
       <section class="option-block" id="general_page">
   <div class="some-block option-block">
@@ -69,16 +48,12 @@
   <div class="some-block option-block">
     <h4 data-localise="__MSG_protocol__"></h4>
     <select id="protocol">
-      
       <option value="clearnet">Clearnet</option>
-      
       <option value="tor">Tor</option>
-      
       <option value="i2p">I2P</option>
-      
       <option value="loki">Lokinet</option>
       
-    </select>
+</select>
   </div>
   <div id="protocol-fallback">
     <div class="some-block option-block">
@@ -145,126 +120,108 @@
     <h4 data-localise="__MSG_customPopup__">Customize Popup</h4>
   </div>
   <div class="checklist-popup" id="popup-frontends-checklist">
-    
     <div>
       <div><img src="../../../assets/images/youtube-icon.png">
         <x data-localise="__MSG_youtube__">youtube</x>
       </div>
       <input id="youtube" type="checkbox">
     </div>
-    
     <div>
       <div><img src="../../../assets/images/youtubeMusic-icon.png">
         <x data-localise="__MSG_youtubeMusic__">youtubeMusic</x>
       </div>
       <input id="youtubeMusic" type="checkbox">
     </div>
-    
     <div>
       <div><img src="../../../assets/images/twitter-icon.png">
         <x data-localise="__MSG_twitter__">twitter</x>
       </div>
       <input id="twitter" type="checkbox">
     </div>
-    
     <div>
       <div><img src="../../../assets/images/instagram-icon.png">
         <x data-localise="__MSG_instagram__">instagram</x>
       </div>
       <input id="instagram" type="checkbox">
     </div>
-    
     <div>
       <div><img src="../../../assets/images/tiktok-icon.png">
         <x data-localise="__MSG_tiktok__">tiktok</x>
       </div>
       <input id="tiktok" type="checkbox">
     </div>
-    
     <div>
       <div><img src="../../../assets/images/reddit-icon.png">
         <x data-localise="__MSG_reddit__">reddit</x>
       </div>
       <input id="reddit" type="checkbox">
     </div>
-    
     <div>
       <div><img src="../../../assets/images/imgur-icon.png">
         <x data-localise="__MSG_imgur__">imgur</x>
       </div>
       <input id="imgur" type="checkbox">
     </div>
-    
     <div>
       <div><img src="../../../assets/images/wikipedia-icon.svg">
         <x data-localise="__MSG_wikipedia__">wikipedia</x>
       </div>
       <input id="wikipedia" type="checkbox">
     </div>
-    
     <div>
       <div><img src="../../../assets/images/medium-icon.svg">
         <x data-localise="__MSG_medium__">medium</x>
       </div>
       <input id="medium" type="checkbox">
     </div>
-    
     <div>
       <div><img src="../../../assets/images/quora-icon.png">
         <x data-localise="__MSG_quora__">quora</x>
       </div>
       <input id="quora" type="checkbox">
     </div>
-    
     <div>
       <div><img src="../../../assets/images/imdb-icon.svg">
         <x data-localise="__MSG_imdb__">imdb</x>
       </div>
       <input id="imdb" type="checkbox">
     </div>
-    
     <div>
       <div><img src="../../../assets/images/reuters-icon.svg">
         <x data-localise="__MSG_reuters__">reuters</x>
       </div>
       <input id="reuters" type="checkbox">
     </div>
-    
     <div>
       <div><img src="../../../assets/images/peertube-icon.svg">
         <x data-localise="__MSG_peertube__">peertube</x>
       </div>
       <input id="peertube" type="checkbox">
     </div>
-    
     <div>
       <div><img src="../../../assets/images/lbry-icon.png">
         <x data-localise="__MSG_lbry__">lbry</x>
       </div>
       <input id="lbry" type="checkbox">
     </div>
-    
     <div>
       <div><img src="../../../assets/images/search-icon.svg">
         <x data-localise="__MSG_search__">search</x>
       </div>
       <input id="search" type="checkbox">
     </div>
-    
     <div>
       <div><img src="../../../assets/images/translate-icon.svg">
         <x data-localise="__MSG_translate__">translate</x>
       </div>
       <input id="translate" type="checkbox">
     </div>
-    
     <div>
       <div><img src="../../../assets/images/maps-icon.svg">
         <x data-localise="__MSG_maps__">maps</x>
       </div>
       <input id="maps" type="checkbox">
     </div>
-    
     <div>
       <div><img src="../../../assets/images/sendTargets-icon.svg">
         <x data-localise="__MSG_sendTargets__">sendTargets</x>
@@ -272,74 +229,52 @@
       <input id="sendTargets" type="checkbox">
     </div>
     
-  </div>
+</div>
   <script type="module" src="./widgets/general.js"></script>
 </section>
-
-      
-<section class="option-block" id="youtube_page">
+      <section class="option-block" id="youtube_page">
   <div class="some-block option-block">
     <h1 data-localise="__MSG_youtube__">Youtube</h1>
   </div>
   <hr>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_enable__">Enable</h4>
-    <input id="youtube-enable" type="checkbox">
+    <input id="youtube-enabled" type="checkbox">
   </div>
   
   <div class="some-block option-block">
-  <h4 data-localise="__MSG_frontend__">Frontend</h4>
-  <select id="youtube-frontend">
-    
-    <option value="invidious">invidious</option>
-    
-    <option value="piped">piped</option>
-    
-    <option value="pipedMaterial">pipedMaterial</option>
-    
-    <option value="cloudtube">cloudtube</option>
-    
-    
-    <option value="freetube">freetube</option>
-    
-    <option value="yatte">yatte</option>
-    
-  </select>
+    <h4 data-localise="__MSG_frontend__">Frontend</h4>
+    <select id="youtube-frontend">
+            <option value="invidious">Invidious</option>
+            <option value="piped">Piped</option>
+            <option value="pipedMaterial">Piped-Material</option>
+            <option value="cloudtube">CloudTube</option>
+            <option value="freetube">FreeTube</option>
+            <option value="yattee">Yattee</option>
+      
+    </select>
   </div>
-  
-  
-  <div id="youtube-embedded_frontend">
+    <div id="youtube-embedFrontend">
     <div class="some-block option-block">
       <h4 data-localise="__MSG_embed_frontend__">Embed Frontend</h4>
       <select id="youtube-embed_frontend">
-        
-        <option value="invidious">invidious</option>
-        
-        <option value="piped">piped</option>
-        
-        <option value="pipedMaterial">pipedMaterial</option>
-        
-        <option value="cloudtube">cloudtube</option>
-        
+                        <option value="invidious">invidious</option>
+                                <option value="piped">piped</option>
+                                                                                
       </select>
     </div>
   </div>
-  
-  
-  <div class="some-block option-block">
+        <div class="some-block option-block">
     <h4 data-localise="__MSG_redirectType__">Redirect Type</h4>
-    <select id="youtube-redirect_type">
+    <select id="youtube-redirectType">
       <option value="both" data-localise="__MSG_both__">both</option>
-      <option value="onlyEmbedded" data-localise="__MSG_onlyEmbedded__">Only Embedded</option>
-      <option value="onlyNotEmbedded" data-localise="__MSG_onlyNotEmbedded__">Only Not Embedded</option>
+      <option value="sub_frame" data-localise="__MSG_onlyEmbedded__">Only Embedded</option>
+      <option value="main_frame" data-localise="__MSG_onlyNotEmbedded__">Only Not Embedded</option>
     </select>
   </div>
-  
-  <hr>
-  
-  <div id="invidious">
-    
-    <div class="clearnet">
+    <hr>
+      <div id="invidious">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -359,8 +294,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-invidious-label" for="latency-invidious"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -369,10 +303,8 @@
         </label>
         <input class="button button-inline" id="latency-invidious" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -392,10 +324,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -415,10 +345,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -438,14 +366,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
-  <div id="piped">
-    
-    <div class="clearnet">
+        <div id="piped">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -465,8 +390,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-piped-label" for="latency-piped"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -475,10 +399,8 @@
         </label>
         <input class="button button-inline" id="latency-piped" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -498,10 +420,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -521,10 +441,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -544,14 +462,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
-  <div id="pipedMaterial">
-    
-    <div class="clearnet">
+        <div id="pipedMaterial">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -571,8 +486,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-pipedMaterial-label" for="latency-pipedMaterial"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -581,10 +495,8 @@
         </label>
         <input class="button button-inline" id="latency-pipedMaterial" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -604,10 +516,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -627,10 +537,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -650,14 +558,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
-  <div id="cloudtube">
-    
-    <div class="clearnet">
+        <div id="cloudtube">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -677,8 +582,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-cloudtube-label" for="latency-cloudtube"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -687,10 +591,8 @@
         </label>
         <input class="button button-inline" id="latency-cloudtube" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -710,10 +612,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -733,10 +633,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -756,13 +654,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
+            
 </section>
-
 <section class="option-block" id="youtubeMusic_page">
   <div class="some-block option-block">
     <h1 data-localise="__MSG_youtubeMusic__">YT Music</h1>
@@ -770,28 +666,20 @@
   <hr>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_enable__">Enable</h4>
-    <input id="youtubeMusic-enable" type="checkbox">
+    <input id="youtubeMusic-enabled" type="checkbox">
   </div>
   
   <div class="some-block option-block">
-  <h4 data-localise="__MSG_frontend__">Frontend</h4>
-  <select id="youtubeMusic-frontend">
-    
-    <option value="beatbump">beatbump</option>
-    
-    <option value="hyperpipe">hyperpipe</option>
-    
-    
-  </select>
+    <h4 data-localise="__MSG_frontend__">Frontend</h4>
+    <select id="youtubeMusic-frontend">
+            <option value="beatbump">Beatbump</option>
+            <option value="hyperpipe">HyperPipe</option>
+      
+    </select>
   </div>
-  
-  
-  
-  <hr>
-  
-  <div id="beatbump">
-    
-    <div class="clearnet">
+        <hr>
+      <div id="beatbump">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -811,8 +699,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-beatbump-label" for="latency-beatbump"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -821,10 +708,8 @@
         </label>
         <input class="button button-inline" id="latency-beatbump" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -844,10 +729,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -867,10 +750,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -890,14 +771,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
-  <div id="hyperpipe">
-    
-    <div class="clearnet">
+        <div id="hyperpipe">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -917,8 +795,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-hyperpipe-label" for="latency-hyperpipe"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -927,10 +804,8 @@
         </label>
         <input class="button button-inline" id="latency-hyperpipe" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -950,10 +825,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -973,10 +846,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -996,13 +867,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
+    
 </section>
-
 <section class="option-block" id="twitter_page">
   <div class="some-block option-block">
     <h1 data-localise="__MSG_twitter__">Twitter</h1>
@@ -1010,25 +879,19 @@
   <hr>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_enable__">Enable</h4>
-    <input id="twitter-enable" type="checkbox">
+    <input id="twitter-enabled" type="checkbox">
   </div>
-  
-  
-  
-  <div class="some-block option-block">
+      <div class="some-block option-block">
     <h4 data-localise="__MSG_redirectType__">Redirect Type</h4>
-    <select id="twitter-redirect_type">
+    <select id="twitter-redirectType">
       <option value="both" data-localise="__MSG_both__">both</option>
-      <option value="onlyEmbedded" data-localise="__MSG_onlyEmbedded__">Only Embedded</option>
-      <option value="onlyNotEmbedded" data-localise="__MSG_onlyNotEmbedded__">Only Not Embedded</option>
+      <option value="sub_frame" data-localise="__MSG_onlyEmbedded__">Only Embedded</option>
+      <option value="main_frame" data-localise="__MSG_onlyNotEmbedded__">Only Not Embedded</option>
     </select>
   </div>
-  
-  <hr>
-  
-  <div id="nitter">
-    
-    <div class="clearnet">
+    <hr>
+      <div id="nitter">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1048,8 +911,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-nitter-label" for="latency-nitter"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -1058,10 +920,8 @@
         </label>
         <input class="button button-inline" id="latency-nitter" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1081,10 +941,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1104,10 +962,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1127,13 +983,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
+    
 </section>
-
 <section class="option-block" id="instagram_page">
   <div class="some-block option-block">
     <h1 data-localise="__MSG_instagram__">Instagram</h1>
@@ -1141,121 +995,11 @@
   <hr>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_enable__">Enable</h4>
-    <input id="instagram-enable" type="checkbox">
+    <input id="instagram-enabled" type="checkbox">
   </div>
-  
-  
-  
-  <hr>
-  
-  <div id="bibliogram">
-    
-    <div class="clearnet">
-      <div class="some-block option-block">
-        <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
-      </div>
-      <div class="checklist"></div>
-      <hr>
-      <div class="some-block option-block">
-        <h4 data-localise="__MSG_customInstances__">Custom Instances</h4>
-      </div>
-      <form class="custom-instance-form">
-        <div class="some-block option-block">
-          <input class="custom-instance" placeholder="http://bibliogram.org" type="url">
-          <button class="add add-instance" type="submit">
-            <svg xmlns="https://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor">
-              <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path>
-            </svg>
-          </button>
-        </div>
-      </form>
-      <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
-        <label class="button button-inline" id="latency-bibliogram-label" for="latency-bibliogram"> 
-          <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
-            <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
-          </svg>&nbsp;
-          <x data-localise="__MSG_testInstancesLatency__">Test Instances Latency</x>
-        </label>
-        <input class="button button-inline" id="latency-bibliogram" style="display:none;">
-      </div>
-      
-    </div>
-    
-    <div class="tor">
-      <div class="some-block option-block">
-        <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
-      </div>
-      <div class="checklist"></div>
-      <hr>
-      <div class="some-block option-block">
-        <h4 data-localise="__MSG_customInstances__">Custom Instances</h4>
-      </div>
-      <form class="custom-instance-form">
-        <div class="some-block option-block">
-          <input class="custom-instance" placeholder="http://bibliogram.onion" type="url">
-          <button class="add add-instance" type="submit">
-            <svg xmlns="https://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor">
-              <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path>
-            </svg>
-          </button>
-        </div>
-      </form>
-      <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
-      <div class="some-block option-block">
-        <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
-      </div>
-      <div class="checklist"></div>
-      <hr>
-      <div class="some-block option-block">
-        <h4 data-localise="__MSG_customInstances__">Custom Instances</h4>
-      </div>
-      <form class="custom-instance-form">
-        <div class="some-block option-block">
-          <input class="custom-instance" placeholder="http://bibliogram.i2p" type="url">
-          <button class="add add-instance" type="submit">
-            <svg xmlns="https://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor">
-              <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path>
-            </svg>
-          </button>
-        </div>
-      </form>
-      <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
-      <div class="some-block option-block">
-        <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
-      </div>
-      <div class="checklist"></div>
       <hr>
-      <div class="some-block option-block">
-        <h4 data-localise="__MSG_customInstances__">Custom Instances</h4>
-      </div>
-      <form class="custom-instance-form">
-        <div class="some-block option-block">
-          <input class="custom-instance" placeholder="http://bibliogram.loki" type="url">
-          <button class="add add-instance" type="submit">
-            <svg xmlns="https://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor">
-              <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path>
-            </svg>
-          </button>
-        </div>
-      </form>
-      <div class="checklist custom-checklist"></div>
       
-    </div>
-    
-  </div>
-  
 </section>
-
 <section class="option-block" id="tiktok_page">
   <div class="some-block option-block">
     <h1 data-localise="__MSG_tiktok__">TikTok</h1>
@@ -1263,16 +1007,11 @@
   <hr>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_enable__">Enable</h4>
-    <input id="tiktok-enable" type="checkbox">
+    <input id="tiktok-enabled" type="checkbox">
   </div>
-  
-  
-  
-  <hr>
-  
-  <div id="proxiTok">
-    
-    <div class="clearnet">
+      <hr>
+      <div id="proxiTok">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1292,8 +1031,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-proxiTok-label" for="latency-proxiTok"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -1302,10 +1040,8 @@
         </label>
         <input class="button button-inline" id="latency-proxiTok" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1325,10 +1061,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1348,10 +1082,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1371,13 +1103,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
+    
 </section>
-
 <section class="option-block" id="reddit_page">
   <div class="some-block option-block">
     <h1 data-localise="__MSG_reddit__">Reddit</h1>
@@ -1385,28 +1115,20 @@
   <hr>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_enable__">Enable</h4>
-    <input id="reddit-enable" type="checkbox">
+    <input id="reddit-enabled" type="checkbox">
   </div>
   
   <div class="some-block option-block">
-  <h4 data-localise="__MSG_frontend__">Frontend</h4>
-  <select id="reddit-frontend">
-    
-    <option value="libreddit">libreddit</option>
-    
-    <option value="teddit">teddit</option>
-    
-    
-  </select>
+    <h4 data-localise="__MSG_frontend__">Frontend</h4>
+    <select id="reddit-frontend">
+            <option value="libreddit">Libreddit</option>
+            <option value="teddit">Teddit</option>
+      
+    </select>
   </div>
-  
-  
-  
-  <hr>
-  
-  <div id="libreddit">
-    
-    <div class="clearnet">
+        <hr>
+      <div id="libreddit">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1426,8 +1148,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-libreddit-label" for="latency-libreddit"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -1436,10 +1157,8 @@
         </label>
         <input class="button button-inline" id="latency-libreddit" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1459,10 +1178,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1482,10 +1199,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1505,14 +1220,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
-  <div id="teddit">
-    
-    <div class="clearnet">
+        <div id="teddit">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1532,8 +1244,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-teddit-label" for="latency-teddit"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -1542,10 +1253,8 @@
         </label>
         <input class="button button-inline" id="latency-teddit" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1565,10 +1274,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1588,10 +1295,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1611,13 +1316,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
+    
 </section>
-
 <section class="option-block" id="imgur_page">
   <div class="some-block option-block">
     <h1 data-localise="__MSG_imgur__">Imgur</h1>
@@ -1625,16 +1328,11 @@
   <hr>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_enable__">Enable</h4>
-    <input id="imgur-enable" type="checkbox">
+    <input id="imgur-enabled" type="checkbox">
   </div>
-  
-  
-  
-  <hr>
-  
-  <div id="rimgo">
-    
-    <div class="clearnet">
+      <hr>
+      <div id="rimgo">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1654,8 +1352,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-rimgo-label" for="latency-rimgo"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -1664,10 +1361,8 @@
         </label>
         <input class="button button-inline" id="latency-rimgo" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1687,10 +1382,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1710,10 +1403,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1733,13 +1424,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
+    
 </section>
-
 <section class="option-block" id="wikipedia_page">
   <div class="some-block option-block">
     <h1 data-localise="__MSG_wikipedia__">Wikipedia</h1>
@@ -1747,16 +1436,11 @@
   <hr>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_enable__">Enable</h4>
-    <input id="wikipedia-enable" type="checkbox">
+    <input id="wikipedia-enabled" type="checkbox">
   </div>
-  
-  
-  
-  <hr>
-  
-  <div id="wikiless">
-    
-    <div class="clearnet">
+      <hr>
+      <div id="wikiless">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1776,8 +1460,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-wikiless-label" for="latency-wikiless"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -1786,10 +1469,8 @@
         </label>
         <input class="button button-inline" id="latency-wikiless" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1809,10 +1490,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1832,10 +1511,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1855,13 +1532,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
+    
 </section>
-
 <section class="option-block" id="medium_page">
   <div class="some-block option-block">
     <h1 data-localise="__MSG_medium__">Medium</h1>
@@ -1869,16 +1544,11 @@
   <hr>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_enable__">Enable</h4>
-    <input id="medium-enable" type="checkbox">
+    <input id="medium-enabled" type="checkbox">
   </div>
-  
-  
-  
-  <hr>
-  
-  <div id="scribe">
-    
-    <div class="clearnet">
+      <hr>
+      <div id="scribe">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1898,8 +1568,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-scribe-label" for="latency-scribe"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -1908,10 +1577,8 @@
         </label>
         <input class="button button-inline" id="latency-scribe" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1931,10 +1598,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1954,10 +1619,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -1977,13 +1640,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
+    
 </section>
-
 <section class="option-block" id="quora_page">
   <div class="some-block option-block">
     <h1 data-localise="__MSG_quora__">Quora</h1>
@@ -1991,16 +1652,11 @@
   <hr>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_enable__">Enable</h4>
-    <input id="quora-enable" type="checkbox">
+    <input id="quora-enabled" type="checkbox">
   </div>
-  
-  
-  
-  <hr>
-  
-  <div id="quetre">
-    
-    <div class="clearnet">
+      <hr>
+      <div id="quetre">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2020,8 +1676,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-quetre-label" for="latency-quetre"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -2030,10 +1685,8 @@
         </label>
         <input class="button button-inline" id="latency-quetre" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2053,10 +1706,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2076,10 +1727,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2099,13 +1748,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
+    
 </section>
-
 <section class="option-block" id="imdb_page">
   <div class="some-block option-block">
     <h1 data-localise="__MSG_imdb__">IMDb</h1>
@@ -2113,16 +1760,11 @@
   <hr>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_enable__">Enable</h4>
-    <input id="imdb-enable" type="checkbox">
+    <input id="imdb-enabled" type="checkbox">
   </div>
-  
-  
-  
-  <hr>
-  
-  <div id="libremdb">
-    
-    <div class="clearnet">
+      <hr>
+      <div id="libremdb">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2142,8 +1784,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-libremdb-label" for="latency-libremdb"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -2152,10 +1793,8 @@
         </label>
         <input class="button button-inline" id="latency-libremdb" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2175,10 +1814,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2198,10 +1835,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2221,13 +1856,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
+    
 </section>
-
 <section class="option-block" id="reuters_page">
   <div class="some-block option-block">
     <h1 data-localise="__MSG_reuters__">Reuters</h1>
@@ -2235,16 +1868,11 @@
   <hr>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_enable__">Enable</h4>
-    <input id="reuters-enable" type="checkbox">
+    <input id="reuters-enabled" type="checkbox">
   </div>
-  
-  
-  
-  <hr>
-  
-  <div id="neuters">
-    
-    <div class="clearnet">
+      <hr>
+      <div id="neuters">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2264,8 +1892,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-neuters-label" for="latency-neuters"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -2274,10 +1901,8 @@
         </label>
         <input class="button button-inline" id="latency-neuters" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2297,10 +1922,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2320,10 +1943,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2343,13 +1964,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
+    
 </section>
-
 <section class="option-block" id="peertube_page">
   <div class="some-block option-block">
     <h1 data-localise="__MSG_peertube__">PeerTube</h1>
@@ -2357,16 +1976,11 @@
   <hr>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_enable__">Enable</h4>
-    <input id="peertube-enable" type="checkbox">
+    <input id="peertube-enabled" type="checkbox">
   </div>
-  
-  
-  
-  <hr>
-  
-  <div id="simpleertube">
-    
-    <div class="clearnet">
+      <hr>
+      <div id="simpleertube">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2386,8 +2000,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-simpleertube-label" for="latency-simpleertube"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -2396,10 +2009,8 @@
         </label>
         <input class="button button-inline" id="latency-simpleertube" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2419,10 +2030,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2442,10 +2051,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2465,13 +2072,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
+    
 </section>
-
 <section class="option-block" id="lbry_page">
   <div class="some-block option-block">
     <h1 data-localise="__MSG_lbry__">LBRY</h1>
@@ -2479,37 +2084,37 @@
   <hr>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_enable__">Enable</h4>
-    <input id="lbry-enable" type="checkbox">
+    <input id="lbry-enabled" type="checkbox">
   </div>
   
   <div class="some-block option-block">
-  <h4 data-localise="__MSG_frontend__">Frontend</h4>
-  <select id="lbry-frontend">
-    
-    <option value="librarian">librarian</option>
-    
-    
-    <option value="lbryDesktop">lbryDesktop</option>
-    
-  </select>
+    <h4 data-localise="__MSG_frontend__">Frontend</h4>
+    <select id="lbry-frontend">
+            <option value="librarian">Librarian</option>
+            <option value="lbryDesktop">LBRY Desktop</option>
+      
+    </select>
   </div>
-  
-  
-  
-  <div class="some-block option-block">
+    <div id="lbry-embedFrontend">
+    <div class="some-block option-block">
+      <h4 data-localise="__MSG_embed_frontend__">Embed Frontend</h4>
+      <select id="lbry-embed_frontend">
+                        <option value="librarian">librarian</option>
+                                
+      </select>
+    </div>
+  </div>
+        <div class="some-block option-block">
     <h4 data-localise="__MSG_redirectType__">Redirect Type</h4>
-    <select id="lbry-redirect_type">
+    <select id="lbry-redirectType">
       <option value="both" data-localise="__MSG_both__">both</option>
-      <option value="onlyEmbedded" data-localise="__MSG_onlyEmbedded__">Only Embedded</option>
-      <option value="onlyNotEmbedded" data-localise="__MSG_onlyNotEmbedded__">Only Not Embedded</option>
+      <option value="sub_frame" data-localise="__MSG_onlyEmbedded__">Only Embedded</option>
+      <option value="main_frame" data-localise="__MSG_onlyNotEmbedded__">Only Not Embedded</option>
     </select>
   </div>
-  
-  <hr>
-  
-  <div id="librarian">
-    
-    <div class="clearnet">
+    <hr>
+      <div id="librarian">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2529,8 +2134,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-librarian-label" for="latency-librarian"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -2539,10 +2143,8 @@
         </label>
         <input class="button button-inline" id="latency-librarian" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2562,10 +2164,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2585,10 +2185,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2608,13 +2206,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
+        
 </section>
-
 <section class="option-block" id="search_page">
   <div class="some-block option-block">
     <h1 data-localise="__MSG_search__">Search</h1>
@@ -2622,32 +2218,22 @@
   <hr>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_enable__">Enable</h4>
-    <input id="search-enable" type="checkbox">
+    <input id="search-enabled" type="checkbox">
   </div>
   
   <div class="some-block option-block">
-  <h4 data-localise="__MSG_frontend__">Frontend</h4>
-  <select id="search-frontend">
-    
-    <option value="searx">searx</option>
-    
-    <option value="searxng">searxng</option>
-    
-    <option value="whoogle">whoogle</option>
-    
-    <option value="librex">librex</option>
-    
-    
-  </select>
+    <h4 data-localise="__MSG_frontend__">Frontend</h4>
+    <select id="search-frontend">
+            <option value="searx">SearX</option>
+            <option value="searxng">SearXNG</option>
+            <option value="whoogle">Whoogle</option>
+            <option value="librex">LibreX</option>
+      
+    </select>
   </div>
-  
-  
-  
-  <hr>
-  
-  <div id="searx">
-    
-    <div class="clearnet">
+        <hr>
+      <div id="searx">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2667,8 +2253,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-searx-label" for="latency-searx"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -2677,10 +2262,8 @@
         </label>
         <input class="button button-inline" id="latency-searx" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2700,10 +2283,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2723,10 +2304,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2746,14 +2325,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
-  <div id="searxng">
-    
-    <div class="clearnet">
+        <div id="searxng">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2773,8 +2349,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-searxng-label" for="latency-searxng"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -2783,10 +2358,8 @@
         </label>
         <input class="button button-inline" id="latency-searxng" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2806,10 +2379,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2829,10 +2400,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2852,14 +2421,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
-  <div id="whoogle">
-    
-    <div class="clearnet">
+        <div id="whoogle">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2879,8 +2445,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-whoogle-label" for="latency-whoogle"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -2889,10 +2454,8 @@
         </label>
         <input class="button button-inline" id="latency-whoogle" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2912,10 +2475,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2935,10 +2496,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2958,14 +2517,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
-  <div id="librex">
-    
-    <div class="clearnet">
+        <div id="librex">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -2985,8 +2541,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-librex-label" for="latency-librex"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -2995,10 +2550,8 @@
         </label>
         <input class="button button-inline" id="latency-librex" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -3018,10 +2571,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -3041,10 +2592,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -3064,13 +2613,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
+    
 </section>
-
 <section class="option-block" id="translate_page">
   <div class="some-block option-block">
     <h1 data-localise="__MSG_translate__">Translate</h1>
@@ -3078,28 +2625,20 @@
   <hr>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_enable__">Enable</h4>
-    <input id="translate-enable" type="checkbox">
+    <input id="translate-enabled" type="checkbox">
   </div>
   
   <div class="some-block option-block">
-  <h4 data-localise="__MSG_frontend__">Frontend</h4>
-  <select id="translate-frontend">
-    
-    <option value="simplyTranslate">simplyTranslate</option>
-    
-    <option value="lingva">lingva</option>
-    
-    
-  </select>
+    <h4 data-localise="__MSG_frontend__">Frontend</h4>
+    <select id="translate-frontend">
+            <option value="simplyTranslate">SimplyTranslate</option>
+            <option value="lingva">Lingva</option>
+      
+    </select>
   </div>
-  
-  
-  
-  <hr>
-  
-  <div id="simplyTranslate">
-    
-    <div class="clearnet">
+        <hr>
+      <div id="simplyTranslate">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -3119,8 +2658,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-simplyTranslate-label" for="latency-simplyTranslate"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -3129,10 +2667,8 @@
         </label>
         <input class="button button-inline" id="latency-simplyTranslate" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -3152,10 +2688,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -3175,10 +2709,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -3198,14 +2730,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
-  <div id="lingva">
-    
-    <div class="clearnet">
+        <div id="lingva">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -3225,8 +2754,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-lingva-label" for="latency-lingva"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -3235,10 +2763,8 @@
         </label>
         <input class="button button-inline" id="latency-lingva" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -3258,10 +2784,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -3281,10 +2805,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -3304,13 +2826,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
+    
 </section>
-
 <section class="option-block" id="maps_page">
   <div class="some-block option-block">
     <h1 data-localise="__MSG_maps__">Maps</h1>
@@ -3318,28 +2838,20 @@
   <hr>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_enable__">Enable</h4>
-    <input id="maps-enable" type="checkbox">
+    <input id="maps-enabled" type="checkbox">
   </div>
   
   <div class="some-block option-block">
-  <h4 data-localise="__MSG_frontend__">Frontend</h4>
-  <select id="maps-frontend">
-    
-    <option value="facil">facil</option>
-    
-    
-    <option value="osm">osm</option>
-    
-  </select>
+    <h4 data-localise="__MSG_frontend__">Frontend</h4>
+    <select id="maps-frontend">
+            <option value="facil">FacilMap</option>
+            <option value="osm">OpenStreetMap</option>
+      
+    </select>
   </div>
-  
-  
-  
-  <hr>
-  
-  <div id="facil">
-    
-    <div class="clearnet">
+        <hr>
+      <div id="facil">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -3359,8 +2871,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-facil-label" for="latency-facil"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -3369,10 +2880,8 @@
         </label>
         <input class="button button-inline" id="latency-facil" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -3392,10 +2901,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -3415,10 +2922,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -3438,13 +2943,11 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
+        
 </section>
-
 <section class="option-block" id="sendTargets_page">
   <div class="some-block option-block">
     <h1 data-localise="__MSG_sendTargets__">Send Files</h1>
@@ -3452,16 +2955,11 @@
   <hr>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_enable__">Enable</h4>
-    <input id="sendTargets-enable" type="checkbox">
+    <input id="sendTargets-enabled" type="checkbox">
   </div>
-  
-  
-  
-  <hr>
-  
-  <div id="send">
-    
-    <div class="clearnet">
+      <hr>
+      <div id="send">
+        <div class="clearnet">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -3481,8 +2979,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-      <div class="buttons buttons-inline">
+            <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-send-label" for="latency-send"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
             <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
@@ -3491,10 +2988,8 @@
         </label>
         <input class="button button-inline" id="latency-send" style="display:none;">
       </div>
-      
-    </div>
-    
-    <div class="tor">
+          </div>
+        <div class="tor">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -3514,10 +3009,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="i2p">
+          </div>
+        <div class="i2p">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -3537,10 +3030,8 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
-    
-    <div class="loki">
+          </div>
+        <div class="loki">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
       </div>
@@ -3560,15 +3051,13 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      
-    </div>
+          </div>
     
   </div>
-  
+    
 </section>
 
 <script type="module" src="./widgets/services.js"></script>
-
       <section class="option-block" id="about_page"> 
 <div class="some-block option-block">
   <h1 data-localise="__MSG_about__">About</h1>
@@ -3593,7 +3082,6 @@
   </div>
 </div>
 </section>
-
     </div>
   </body>
   <script type="module" src="./index.js"></script>
diff --git a/src/pages/options/widgets/general.ejs b/src/pages/options/widgets/general.ejs
index 05ef0959..d68a2280 100644
--- a/src/pages/options/widgets/general.ejs
+++ b/src/pages/options/widgets/general.ejs
@@ -14,10 +14,10 @@
   <div class="some-block option-block">
     <h4 data-localise="__MSG_protocol__"></h4>
     <select id="protocol">
-      <% for (const network in config.networks) { %>
-      <option value="<%= network %>"><%= config.networks[network].name %></option>
+      <% for (const network in config.networks) { -%>
+<option value="<%= network %>"><%= config.networks[network].name %></option>
       <% }; %>
-    </select>
+</select>
   </div>
   <div id="protocol-fallback">
     <div class="some-block option-block">
@@ -84,14 +84,14 @@
     <h4 data-localise="__MSG_customPopup__">Customize Popup</h4>
   </div>
   <div class="checklist-popup" id="popup-frontends-checklist">
-    <% for (const service in config.services) { %>
-    <div>
+    <% for (const service in config.services) { -%>
+<div>
       <div><img src="../../../assets/images/<%= service %>-icon.<%= config.services[service].imageType %>">
         <x data-localise="__MSG_<%= service %>__"><%= service %></x>
       </div>
       <input id="<%= service %>" type="checkbox">
     </div>
     <% }; %>
-  </div>
+</div>
   <script type="module" src="./widgets/general.js"></script>
 </section>
diff --git a/src/pages/options/widgets/services.ejs b/src/pages/options/widgets/services.ejs
index aed5872b..bc75f288 100644
--- a/src/pages/options/widgets/services.ejs
+++ b/src/pages/options/widgets/services.ejs
@@ -1,4 +1,4 @@
-<% for (const service in config.services) { %>
+<% for (const service in config.services) { -%>
 <section class="option-block" id="<%= service %>_page">
   <div class="some-block option-block">
     <h1 data-localise="__MSG_<%= service %>__"><%= config.services[service].name %></h1>
@@ -6,47 +6,47 @@
   <hr>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_enable__">Enable</h4>
-    <input id="<%= service %>-enable" type="checkbox">
+    <input id="<%= service %>-enabled" type="checkbox">
   </div>
-  <% if ((Object.keys(config.services[service].frontends).length > 1) || config.services[service].singleInstanceFrontends) { %>
+  <% if (Object.keys(config.services[service].frontends).length > 1) { %>
   <div class="some-block option-block">
-  <h4 data-localise="__MSG_frontend__">Frontend</h4>
-  <select id="<%= service %>-frontend">
-    <% for (const frontend in config.services[service].frontends) { %>
-    <option value="<%= frontend %>"><%= frontend %></option>
-    <% }; %>
-    <% for (const frontend in config.services[service].singleInstanceFrontends){ %>
-    <option value="<%= config.services[service].singleInstanceFrontends[frontend] %>"><%= config.services[service].singleInstanceFrontends[frontend] %></option>
-    <% }; %>
-  </select>
+    <h4 data-localise="__MSG_frontend__">Frontend</h4>
+    <select id="<%= service %>-frontend">
+      <% for (const frontend in config.services[service].frontends) { -%>
+      <option value="<%= frontend %>"><%= config.services[service].frontends[frontend].name %></option>
+      <% } %>
+    </select>
   </div>
-  <% } %>
-  <% if ((config.services[service].singleInstanceFrontends) && (Object.keys(config.services[service].frontends).length > 1)) { %>
-  <div id="<%= service %>-embedded_frontend">
+  <% if (config.services[service].embeddable) { _%>
+  <div id="<%= service %>-embedFrontend">
     <div class="some-block option-block">
       <h4 data-localise="__MSG_embed_frontend__">Embed Frontend</h4>
       <select id="<%= service %>-embed_frontend">
-        <% for (const frontend in config.services[service].frontends) { %>
+        <% for (const frontend in config.services[service].frontends) { -%>
+        <% if (config.services[service].frontends[frontend].embeddable) { _%>
         <option value="<%= frontend %>"><%= frontend %></option>
-        <% }; %>
+        <% } _%>
+        <% } %>
       </select>
     </div>
   </div>
-  <% } %>
-  <% if (config.services[service].embeddable) { %>
+  <% } _%>
+  <% } _%>
+  <% if (config.services[service].embeddable) { _%>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_redirectType__">Redirect Type</h4>
-    <select id="<%= service %>-redirect_type">
+    <select id="<%= service %>-redirectType">
       <option value="both" data-localise="__MSG_both__">both</option>
-      <option value="onlyEmbedded" data-localise="__MSG_onlyEmbedded__">Only Embedded</option>
-      <option value="onlyNotEmbedded" data-localise="__MSG_onlyNotEmbedded__">Only Not Embedded</option>
+      <option value="sub_frame" data-localise="__MSG_onlyEmbedded__">Only Embedded</option>
+      <option value="main_frame" data-localise="__MSG_onlyNotEmbedded__">Only Not Embedded</option>
     </select>
   </div>
-  <% } %>
+  <% } _%>
   <hr>
-  <% for (const frontend in config.services[service].frontends) { %>
+  <% for (const frontend in config.services[service].frontends) { -%>
+  <% if (config.services[service].frontends[frontend].instanceList) { _%>
   <div id="<%= frontend %>">
-    <% for (const network in config.networks) { %>
+    <% for (const network in config.networks) { -%>
     <div class="<%= network %>">
       <div class="some-block option-block">
         <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
@@ -67,7 +67,7 @@
         </div>
       </form>
       <div class="checklist custom-checklist"></div>
-      <% if (network == "clearnet") { %>
+      <% if (network == "clearnet") { _%>
       <div class="buttons buttons-inline">
         <label class="button button-inline" id="latency-<%= frontend %>-label" for="latency-<%= frontend %>"> 
           <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
@@ -77,11 +77,12 @@
         </label>
         <input class="button button-inline" id="latency-<%= frontend %>" style="display:none;">
       </div>
-      <% } %>
+      <% } _%>
     </div>
-    <% }; %>
+    <% } %>
   </div>
-  <% }; %>
+  <% } _%>
+  <% } %>
 </section>
-<% }; %>
+<% } %>
 <script type="module" src="./widgets/services.js"></script>
diff --git a/src/pages/options/widgets/services.js b/src/pages/options/widgets/services.js
index c7955b40..4a53a749 100644
--- a/src/pages/options/widgets/services.js
+++ b/src/pages/options/widgets/services.js
@@ -1,13 +1,10 @@
 import utils from "../../../assets/javascripts/utils.js"
 
-// const frontends = new Array("librarian")
-// const protocols = new Array("clearnet", "tor", "i2p", "loki")
-
 let config,
 	network,
 	divs = {}
 
-async function getConfig() {
+function getConfig() {
 	return new Promise(resolve => {
 		fetch("/config/config.json")
 			.then(response => response.text())
@@ -19,7 +16,7 @@ async function getConfig() {
 	})
 }
 
-getConfig()
+await getConfig()
 
 browser.storage.local.get("network", r => {
 	network = r.network
@@ -27,45 +24,50 @@ browser.storage.local.get("network", r => {
 
 function changeFrontendsSettings(service) {
 	for (const frontend in config.services[service].frontends) {
-		const frontendDiv = document.getElementById(frontend)
-		if (frontend == divs[service].frontend.value) {
-			frontendDiv.style.display = "block"
-		} else {
-			frontendDiv.style.display = "none"
+		if (config.services[service].frontends[frontend].instanceList && config.services[service].frontends.length > 1) {
+			const frontendDiv = document.getElementById(frontend)
+			if (divs[service].frontend == null) {
+				console.log(frontend)
+			}
+			if (frontend == divs[service].frontend.value) {
+				frontendDiv.style.display = "block"
+			} else {
+				frontendDiv.style.display = "none"
+			}
 		}
 	}
 }
 
 function changeNetworkSettings(selectedNetwork) {
 	for (const frontend in config.frontends) {
-		const frontendDiv = document.getElementById(frontend)
-		for (const network in config.networks) {
-			const networkDiv = frontendDiv.getElementsByClassName(network)[0]
-			if (network == selectedNetwork) {
-				networkDiv.style.display = "block"
-			} else {
-				networkDiv.style.display = "none"
+		if (config.services[service].frontends[frontend].instanceList) {
+			const frontendDiv = document.getElementById(frontend)
+			for (const network in config.networks) {
+				const networkDiv = frontendDiv.getElementsByClassName(network)[0]
+				if (network == selectedNetwork) {
+					networkDiv.style.display = "block"
+				} else {
+					networkDiv.style.display = "none"
+				}
 			}
 		}
 	}
 }
 
-for (service in config.services) {
+for (const service in config.services) {
+	divs[service] = {}
 	divs[service][service] = document.getElementById(`${service}_page`)
 	for (const option in config.services[service].options) {
 		divs[service][option] = document.getElementById(`${service}-${option}`)
 
 		browser.storage.local.get([`${service + utils.camelCase(option)}`], r => {
-			if (typeof config.services[service].options[option] == "boollean") divs[service][option].checked = !r[service + utils.camelCase(option)]
+			if (typeof config.services[service].options[option] == "boollean") divs[service][option].checked = r[service + utils.camelCase(option)]
 			else divs[service][option].value = !r[service + utils.camelCase(option)]
 		})
 
 		divs[service][option].addEventListener("change", () => {
-			if (typeof config.services[service].options[option] == "boollean") {
-				browser.storage.local.set({ [service + utils.camelCase(option)]: !divs[service][option].checked })
-			} else {
-				browser.storage.local.set({ [service + utils.camelCase(option)]: divs[service][option].value })
-			}
+			if (typeof config.services[service].options[option] == "boollean") browser.storage.local.set({ [service + utils.camelCase(option)]: divs[service][option].checked })
+			else browser.storage.local.set({ [service + utils.camelCase(option)]: divs[service][option].value })
 			changeFrontendsSettings()
 		})
 	}
@@ -74,9 +76,11 @@ for (service in config.services) {
 	changeNetworkSettings(network)
 
 	for (const frontend in config.services[service].frontends) {
-		for (const network in config.networks) {
-			utils.processDefaultCustomInstances(service, frontend, network, document)
+		if (config.services[service].frontends[frontend].instanceList) {
+			for (const network in config.networks) {
+				utils.processDefaultCustomInstances(service, frontend, network, document)
+			}
+			utils.latency(service, frontend, document, location)
 		}
-		utils.latency(service, frontend, document, location)
 	}
 }
diff --git a/src/pages/widgets/links.ejs b/src/pages/widgets/links.ejs
index fe0cd37c..c28d3668 100644
--- a/src/pages/widgets/links.ejs
+++ b/src/pages/widgets/links.ejs
@@ -1,7 +1,7 @@
 <section class="links" id="links">
   <div class="title"><img src="../../../assets/images/general-icon.svg"><a href="#general" data-localise="__MSG_general__">General</a></div>
-  <% for (const service in config.services) { %>
+  <% for (const service in config.services) { -%>
   <div class="title"><img src="../../../assets/images/<%= service %>-icon.<%= config.services[service].imageType %>"><a href="#<%= service %>" data-localise="__MSG_<%= service %>__"><%= service %></a></div>
-  <% }; %>
+  <% }; -%>
   <div class="title"><img src="../../../assets/images/about-icon.svg"><a href="#about" data-localise="__MSG_about__">About</a></div>
 </section>