diff --git a/src/background.js b/src/background.js
index 3c34a89..ed86f66 100644
--- a/src/background.js
+++ b/src/background.js
@@ -1,53 +1,64 @@
-// To generate isoLangs, edit code at isolangs.json and use Closure to minimize it
-var isoLangs={af:{name:"Afrikaans",nativeName:"Afrikaans"},sq:{name:"Albanian",nativeName:"Shqip"},am:{name:"Amharic",nativeName:"\u12a0\u121b\u122d\u129b"},ar:{name:"Arabic",nativeName:"\u0627\u0644\u0639\u0631\u0628\u064a\u0629"},hy:{name:"Armenian",nativeName:"\u0540\u0561\u0575\u0565\u0580\u0565\u0576"},az:{name:"Azerbaijani",nativeName:"az\u0259rbaycan dili"},eu:{name:"Basque",nativeName:"euskara"},be:{name:"Belarusian",nativeName:"\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f"},
-bn:{name:"Bengali",nativeName:"\u09ac\u09be\u0982\u09b2\u09be"},bs:{name:"Bosnian",nativeName:"bosanski jezik"},bg:{name:"Bulgarian",nativeName:"\u0431\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438 \u0435\u0437\u0438\u043a"},ca:{name:"Catalan",nativeName:"Catal\u00e0"},ceb:{name:"Cebuano",nativeName:"Bisaya"},ny:{name:"Chichewa",nativeName:"chiChe\u0175a"},zh:{name:"Chinese",nativeName:"\u4e2d\u6587 (Zh\u014dngw\u00e9n)"},co:{name:"Corsican",nativeName:"corsu"},hr:{name:"Croatian",nativeName:"hrvatski"},
-cs:{name:"Czech",nativeName:"\u010desky"},da:{name:"Danish",nativeName:"dansk"},nl:{name:"Dutch",nativeName:"Nederlands"},en:{name:"English",nativeName:"English"},eo:{name:"Esperanto",nativeName:"Esperanto"},et:{name:"Estonian",nativeName:"eesti"},tl:{name:"Filipino",nativeName:"Pilipino"},fi:{name:"Finnish",nativeName:"suomi"},fr:{name:"French",nativeName:"fran\u00e7ais"},fy:{name:"Frisian",nativeName:"Frysk"},gl:{name:"Galician",nativeName:"Galego"},ka:{name:"Georgian",nativeName:"\u10e5\u10d0\u10e0\u10d7\u10e3\u10da\u10d8"},
-de:{name:"German",nativeName:"Deutsch"},el:{name:"Greek",nativeName:"\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac"},gu:{name:"Gujarati",nativeName:"\u0a97\u0ac1\u0a9c\u0ab0\u0abe\u0aa4\u0ac0"},ht:{name:"Haitian Creole",nativeName:"Krey\u00f2l ayisyen"},ha:{name:"Hausa",nativeName:"Hausa"},haw:{name:"Hawaiian",nativeName:"Hausa"},iw:{name:"Hebrew",nativeName:"\u05e2\u05d1\u05e8\u05d9\u05ea"},hi:{name:"Hindi",nativeName:"\u0939\u093f\u0928\u094d\u0926\u0940, \u0939\u093f\u0902\u0926\u0940"},hmn:{name:"Hmong",
-nativeName:"lus Hmoob"},hu:{name:"Hungarian",nativeName:"Magyar"},is:{name:"Icelandic",nativeName:"\u00cdslenska"},ig:{name:"Igbo",nativeName:"As\u1ee5s\u1ee5 Igbo"},id:{name:"Indonesian",nativeName:"Bahasa Indonesia"},ga:{name:"Irish",nativeName:"Gaeilge"},it:{name:"Italian",nativeName:"Italiano"},ja:{name:"Japanese",nativeName:"\u65e5\u672c\u8a9e (\u306b\u307b\u3093\u3054\uff0f\u306b\u3063\u307d\u3093\u3054)"},jv:{name:"Javanese",nativeName:"basa Jawa"},kn:{name:"Kannada",nativeName:"\u0c95\u0ca8\u0ccd\u0ca8\u0ca1"},
-kk:{name:"Kazakh",nativeName:"\u049a\u0430\u0437\u0430\u049b \u0442\u0456\u043b\u0456"},km:{name:"Khmer",nativeName:"\u1797\u17b6\u179f\u17b6\u1781\u17d2\u1798\u17c2\u179a"},ko:{name:"Korean",nativeName:"\ud55c\uad6d\uc5b4 (\u97d3\u570b\u8a9e)"},ku:{name:"Kurdish (Kurmanji)",nativeName:"Kurd\u00ee"},ky:{name:"Kyrgyz",nativeName:"\u043a\u044b\u0440\u0433\u044b\u0437 \u0442\u0438\u043b\u0438"},lo:{name:"Lao",nativeName:"\u0e9e\u0eb2\u0eaa\u0eb2\u0ea5\u0eb2\u0ea7"},la:{name:"Latin",nativeName:"latine"},
-lv:{name:"Latvian",nativeName:"latvie\u0161u valoda"},lt:{name:"Lithuanian",nativeName:"lietuvi\u0173 kalba"},lb:{name:"Luxembourgish",nativeName:"L\u00ebtzebuergesch"},mk:{name:"Macedonian",nativeName:"\u043c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438 \u0458\u0430\u0437\u0438\u043a"},mg:{name:"Malagasy",nativeName:"Malagasy fiteny"},ms:{name:"Malay",nativeName:"bahasa Melayu"},ml:{name:"Malayalam",nativeName:"\u0d2e\u0d32\u0d2f\u0d3e\u0d33\u0d02"},mt:{name:"Maltese",nativeName:"Malti"},
-mi:{name:"M\u0101ori",nativeName:"te reo M\u0101ori"},mr:{name:"Marathi",nativeName:"\u092e\u0930\u093e\u0920\u0940"},mn:{name:"Mongolian",nativeName:"\u043c\u043e\u043d\u0433\u043e\u043b"},my:{name:"Myanmar",nativeName:"\u1017\u1019\u102c\u1005\u102c"},ne:{name:"Nepali",nativeName:"\u0928\u0947\u092a\u093e\u0932\u0940"},no:{name:"Norwegian",nativeName:"Norsk"},ps:{name:"Pashto",nativeName:"\u067e\u069a\u062a\u0648"},fa:{name:"Persian",nativeName:"\u0641\u0627\u0631\u0633\u06cc"},pl:{name:"Polish",
-nativeName:"polski"},pt:{name:"Portuguese",nativeName:"Portugu\u00eas"},pa:{name:"Punjabi",nativeName:"\u0a2a\u0a70\u0a1c\u0a3e\u0a2c"},ro:{name:"Romanian",nativeName:"rom\u00e2n\u0103"},ru:{name:"Russian",nativeName:"\u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a"},sm:{name:"Samoan",nativeName:"gagana faa Samoa"},gd:{name:"Scots Gaelic",nativeName:"G\u00e0idhlig"},sr:{name:"Serbian",nativeName:"\u0441\u0440\u043f\u0441\u043a\u0438 \u0458\u0435\u0437\u0438\u043a"},st:{name:"Sesotho",
-nativeName:"Sesotho"},sn:{name:"Shona",nativeName:"chiShona"},sd:{name:"Sindhi",nativeName:"\u0938\u093f\u0928\u094d\u0927\u0940"},si:{name:"Sinhala",nativeName:"\u0dc3\u0dd2\u0d82\u0dc4\u0dbd"},sk:{name:"Slovak",nativeName:"sloven\u010dina"},sl:{name:"Slovenian",nativeName:"sloven\u0161\u010dina"},so:{name:"Somali",nativeName:"Soomaaliga"},es:{name:"Spanish",nativeName:"espa\u00f1ol"},su:{name:"Sundanese",nativeName:"Basa Sunda"},sw:{name:"Swahili",nativeName:"Kiswahili"},sv:{name:"Swedish",nativeName:"svenska"},
-tg:{name:"Tajik",nativeName:"\u0442\u043e\u04b7\u0438\u043a\u04e3"},ta:{name:"Tamil",nativeName:"\u0ba4\u0bae\u0bbf\u0bb4\u0bcd"},te:{name:"Telugu",nativeName:"\u0c24\u0c46\u0c32\u0c41\u0c17\u0c41"},th:{name:"Thai",nativeName:"\u0e44\u0e17\u0e22"},tr:{name:"Turkish",nativeName:"T\u00fcrk\u00e7e"},uk:{name:"Ukrainian",nativeName:"\u0443\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430"},ur:{name:"Urdu",nativeName:"\u0627\u0631\u062f\u0648"},uz:{name:"Uzbek",nativeName:"zbek"},vi:{name:"Vietnamese",
-nativeName:"Ti\u1ebfng Vi\u1ec7t"},cy:{name:"Welsh",nativeName:"Cymraeg"},xh:{name:"Xhosa",nativeName:"isiXhosa"},yi:{name:"Yiddish",nativeName:"\u05d9\u05d9\u05b4\u05d3\u05d9\u05e9"},yo:{name:"Yoruba",nativeName:"Yor\u00f9b\u00e1"},za:{name:"Zhuang, Chuang",nativeName:"Sa\u026f cue\u014b\u0185"},zu:{name:"Zulu",nativeName:"isiZulu"}};
-
-var array_elements = new Array(), translator_tab = false, translator_window = false;
+var array_elements = [], translator_tab = null, translator_window = null;
 
 function isEmpty(obj) {
-    return Object.keys(obj).length === 0;
+	return Object.keys(obj).length === 0;
 }
 
-function click(info, tab) {
-	chrome.storage.sync.get("uniquetab", function(items) {
-		var settings_tab = {'url': 'https://translate.google.com/#auto/'+array_elements[info.menuItemId]['langCode']+'/'+encodeURIComponent(info.selectionText)};
-		if (translator_tab && items.uniquetab == "yep") {
-			chrome.tabs.update(translator_tab, settings_tab, function(tab){
-				chrome.tabs.highlight({'windowId': tab.windowId, 'tabs': tab.index}, function() {
-					chrome.windows.update(tab.windowId, {focused: true}, function() {});
-				});
+function getTranslationUrl(lang, text) {
+	var params = new URLSearchParams({
+		sl: 'auto',
+		tl: lang,
+		text: text,
+		op: 'translate',
+	});
+	return 'https://translate.google.com/?' + params.toString();
+}
+
+function translationClick(info, tab) {
+	console.log(info.selectionText);
+	chrome.storage.sync.get('uniquetab', items => {
+		var url = getTranslationUrl(
+		    array_elements[info.menuItemId]['langCode'], info.selectionText);
+		var settings_tab = {url};
+		if (translator_tab && items.uniquetab == 'yep') {
+			chrome.tabs.update(translator_tab, settings_tab, tab => {
+				chrome.tabs.highlight(
+				    {
+					    windowId: tab.windowId,
+					    tabs: tab.index,
+				    },
+				    _ => {
+					    chrome.windows.update(tab.windowId, {
+						    focused: true,
+					    });
+				    });
 			});
-		} else if (items.uniquetab == "panel") {
-			chrome.windows.create({
-				type: 'panel', url: 'https://translate.google.com/#auto/'+array_elements[info.menuItemId]['langCode']+'/'+encodeURIComponent(info.selectionText), width: 1000, height: 382}, function(tab) {
-					translator_window = tab.windowId;
-					translator_tab = tab.id;
-					chrome.windows.onRemoved.addListener(function (windowId) {
-						if (windowId == translator_window) {
-							translator_window = false;
-							translator_tab = false;
-						}
-					});
-				}
-			);
+		} else if (items.uniquetab == 'panel') {
+			chrome.windows.create(
+			    {
+				    type: 'panel',
+				    url,
+				    width: 1000,
+				    height: 382,
+			    },
+			    function(tab) {
+				    translator_window = tab.windowId;
+				    translator_tab = tab.id;
+				    chrome.windows.onRemoved.addListener(function(windowId) {
+					    if (windowId == translator_window) {
+						    translator_window = null;
+						    translator_tab = null;
+					    }
+				    });
+			    });
 		} else {
 			chrome.tabs.create(settings_tab, function(tab) {
 				translator_window = tab.windowId;
 				translator_tab = tab.id;
-				chrome.tabs.onRemoved.addListener(function (tabId, removeInfo) {
+				chrome.tabs.onRemoved.addListener(function(tabId, removeInfo) {
 					if (tabId == translator_tab) {
-						translator_window = false;
-						translator_tab = false;
+						translator_window = null;
+						translator_tab = null;
 					}
 				});
 			});
@@ -55,25 +66,30 @@
 	});
 }
 
-function click2(info, tab) {
+function openOptionsPage() {
 	if (chrome.runtime.openOptionsPage) {
 		// New way to open options pages, if supported (Chrome 42+).
 		chrome.runtime.openOptionsPage();
 	} else {
-		chrome.tabs.create({'url': 'chrome-extension://'+chrome.i18n.getMessage("@@extension_id")+'/options.html', 'active': true}, function(tab) {
-			chrome.windows.update(tab.windowId, {'focused': true}, function() {});
-		});
+		chrome.tabs.create(
+		    {
+			    'url': 'chrome-extension://' +
+			        chrome.i18n.getMessage('@@extension_id') + '/options.html',
+			    'active': true
+		    },
+		    tab => {
+			    chrome.windows.update(tab.windowId, {focused: true});
+		    });
 	}
-
 }
 
 function createmenus() {
-	chrome.storage.sync.get("translateinto", function(items) {
+	chrome.storage.sync.get('translateinto', function(items) {
 		chrome.contextMenus.removeAll();
 
 		var count = 0, singleone = true;
 
-		for (var language in items.translateinto) {
+		for (var language of Object.keys(items.translateinto)) {
 			if (count == 0) {
 				count++;
 			} else {
@@ -83,130 +99,168 @@
 		}
 
 		if (singleone) {
-			for (var language_id in items.translateinto) {
+			for (var language_id of Object.keys(items.translateinto)) {
 				var language = items.translateinto[language_id];
 				var languagem = isoLangs[language];
-				var title = languagem.name + " ("+languagem.nativeName+")";
-				var parent = chrome.contextMenus.create({"id": "tr_single_parent", "title": chrome.i18n.getMessage("contextmenu_title2", languagem.name), "contexts": ["selection"]});
-				array_elements[parent] = new Array();
-				array_elements[parent]["langCode"] = language;
-				array_elements[parent]["langName"] = languagem.name;
-				array_elements[parent]["langNativeName"] = language.nativeName;
+				var id = chrome.contextMenus.create({
+					'id': 'tr_single_parent',
+					'title': chrome.i18n.getMessage('contextmenu_title2', languagem.name),
+					'contexts': ['selection'],
+				});
+				array_elements[id] = new Array();
+				array_elements[id]['langCode'] = language;
 			}
 		} else {
-			var parent = chrome.contextMenus.create({"id": "parent", "title": chrome.i18n.getMessage("contextmenu_title"), "contexts": ["selection"]});
-			for (var language_id in items.translateinto) {
+			var parentEl = chrome.contextMenus.create({
+				'id': 'parent',
+				'title': chrome.i18n.getMessage('contextmenu_title'),
+				'contexts': ['selection']
+			});
+			for (var language_id of Object.keys(items.translateinto)) {
 				var language = items.translateinto[language_id];
 				var languagem = isoLangs[language];
-				var title = languagem.name + " ("+languagem.nativeName+")";
-				var id = chrome.contextMenus.create({"id": "tr_language_"+language, "title": title, "parentId": parent, "contexts":["selection"]});
+				var title = languagem.name + ' (' + languagem.nativeName + ')';
+				var id = chrome.contextMenus.create({
+					'id': 'tr_language_' + language,
+					'title': title,
+					'parentId': parentEl,
+					'contexts': ['selection']
+				});
 				array_elements[id] = new Array();
-				array_elements[id]["langCode"] = language;
-				array_elements[id]["langName"] = languagem.name;
-				array_elements[id]["langNativeName"] = language.nativeName;
+				array_elements[id]['langCode'] = language;
 			}
-			var id = chrome.contextMenus.create({"id": "tr_separator", "type": "separator","parentId": parent, "contexts":["selection"]});
-			var id = chrome.contextMenus.create({"id": "tr_options", "title": chrome.i18n.getMessage("contextmenu_edit"), "parentId": parent, "contexts":["selection"]});
+			chrome.contextMenus.create({
+				'id': 'tr_separator',
+				'type': 'separator',
+				'parentId': parentEl,
+				'contexts': ['selection']
+			});
+			chrome.contextMenus.create({
+				'id': 'tr_options',
+				'title': chrome.i18n.getMessage('contextmenu_edit'),
+				'parentId': parentEl,
+				'contexts': ['selection']
+			});
 		}
 	});
 }
 
 chrome.runtime.onInstalled.addListener(function(details) {
 	chrome.storage.sync.get(null, function(items) {
-		if (details.reason == "install") {
+		if (details.reason == 'install') {
 			if (isEmpty(items)) {
-				var settings = {'translateinto': {}, 'uniquetab': ''}, default_language = chrome.i18n.getMessage("@@ui_locale").split("_")[0];
-				if (isoLangs[default_language] != "undefined") {
+				var settings = {'translateinto': {}, 'uniquetab': ''},
+				    default_language =
+				        chrome.i18n.getMessage('@@ui_locale').split('_')[0];
+
+				if (isoLangs[default_language] != 'undefined') {
 					settings.translateinto[default_language] = default_language;
 				}
+
 				chrome.storage.sync.set(settings, function() {
-					chrome.notifications.create("install", {
-						type: "basic",
-						iconUrl: "icons/translate-128.png",
-						title: chrome.i18n.getMessage("notification_install_title"),
-						message: chrome.i18n.getMessage("notification_install_message"),
+					chrome.notifications.create('install', {
+						type: 'basic',
+						iconUrl: 'icons/translate-128.png',
+						title: chrome.i18n.getMessage('notification_install_title'),
+						message: chrome.i18n.getMessage('notification_install_message'),
 						isClickable: true
-					}, function(id) {});
+					});
 				});
 			}
 		}
-		if (details.reason == "update") {
-			var version = details.previousVersion.split(".");
-			if (version[0] == "0" && version[1] < "6") {
-				var settings = {'languages': {}, 'uniquetab': ''}, default_language = chrome.i18n.getMessage("@@ui_locale").split("_")[0];
-				if (isoLangs[default_language] != "undefined") {
+		if (details.reason == 'update') {
+			var version = details.previousVersion.split('.');
+
+			// Updating from a version previous to v0.6
+			if (version[0] == '0' && version[1] < '6') {
+				var settings = {
+					languages: {},
+					uniquetab: '',
+				};
+				var default_language =
+				    chrome.i18n.getMessage('@@ui_locale').split('_')[0];
+
+				if (isoLangs[default_language] != 'undefined')
 					settings.languages[default_language] = default_language;
-				}
+
 				chrome.storage.sync.set(settings, function() {
-					chrome.notifications.create("upgradedtostorage", {
-						type: "basic",
-						iconUrl: "icons/translate-128.png",
-						title: chrome.i18n.getMessage("notification_upgradedtostorage_title"),
-						message: chrome.i18n.getMessage("notification_upgradedtostorage_message"),
-						isClickable: true
-					}, function(id) {});
+					chrome.notifications.create('upgradedtostorage', {
+						type: 'basic',
+						iconUrl: 'icons/translate-128.png',
+						title:
+						    chrome.i18n.getMessage('notification_upgradedtostorage_title'),
+						message: chrome.i18n.getMessage(
+						    'notification_upgradedtostorage_message'),
+						isClickable: true,
+					});
 				});
 			}
-			if (version[0] == "0" && version[1] < "7") {
+
+			// Updating from a version previous to v0.7
+			if (version[0] == '0' && version[1] < '7') {
 				items.translateinto = {};
 				var i = 0;
 				for (var language in items.languages) {
 					items.translateinto[i] = items.languages[language];
 					i++;
 				}
-				delete(items.languages);
-				chrome.storage.sync.set(items, function() {
-					chrome.notifications.create("reorder", {
-						type: "basic",
-						iconUrl: "icons/translate-128.png",
-						title: chrome.i18n.getMessage("notification_reorder_title"),
-						message: chrome.i18n.getMessage("notification_reorder_message"),
+				delete items.languages;
+				chrome.storage.sync.set(items, _ => {
+					chrome.notifications.create('reorder', {
+						type: 'basic',
+						iconUrl: 'icons/translate-128.png',
+						title: chrome.i18n.getMessage('notification_reorder_title'),
+						message: chrome.i18n.getMessage('notification_reorder_message'),
 						isClickable: true
-					}, function(id) {});
+					});
 				});
 			}
 		}
 	});
 });
 
-chrome.storage.onChanged.addListener(function(changes, areaName) {
-	if (areaName == "sync")
-		createmenus();
+chrome.storage.onChanged.addListener((changes, areaName) => {
+	if (areaName == 'sync') createmenus();
 });
 
-chrome.storage.sync.get(null, function(items) {
+chrome.storage.sync.get(null, items => {
 	if (items.translateinto) {
 		createmenus();
 	} else {
 		chrome.contextMenus.removeAll();
-		var parent = chrome.contextMenus.create({"id": "tr_parent", "title": chrome.i18n.getMessage("contextmenu_title"), "contexts":["selection"]});
-		var id = chrome.contextMenus.create({"id": "tr_options", "title": chrome.i18n.getMessage("contextmenu_edit"), "parentId": parent, "contexts":["selection"]});
+		var parent = chrome.contextMenus.create({
+			'id': 'tr_parent',
+			'title': chrome.i18n.getMessage('contextmenu_title'),
+			'contexts': ['selection']
+		});
+		var id = chrome.contextMenus.create({
+			'id': 'tr_options',
+			'title': chrome.i18n.getMessage('contextmenu_edit'),
+			'parentId': parent,
+			'contexts': ['selection']
+		});
 	}
 });
 
-chrome.notifications.onClicked.addListener(function(notification_id) {
-	switch(notification_id) {
-		case "install":
-		click2();
-		break;
-
-		case "upgradedtostorage":
-		click2();
-		break;
-
-		case "reorder":
-		click2();
-		break;
+chrome.notifications.onClicked.addListener(notification_id => {
+	switch (notification_id) {
+		case 'install':
+		case 'upgradedtostorage':
+		case 'reorder':
+			openOptionsPage();
+			break;
 	}
-	chrome.notifications.clear(notification_id, function() {
-
-	});
+	chrome.notifications.clear(notification_id);
 });
 
-chrome.contextMenus.onClicked.addListener(function(info, tab) {
-	if (info.menuItemId == "tr_options") {
-		click2(info, tab);
+chrome.contextMenus.onClicked.addListener((info, tab) => {
+	if (info.menuItemId == 'tr_options') {
+		openOptionsPage();
 	} else {
-		click(info, tab);
+		translationClick(info, tab);
 	}
 });
+
+chrome.browserAction.onClicked.addListener(_ => {
+	openOptionsPage();
+});
