diff --git a/src/background.js b/src/background.js
index e72574e..0befddf 100644
--- a/src/background.js
+++ b/src/background.js
@@ -1,7 +1,8 @@
 import {isoLangs} from './common/consts.js';
 import Options from './common/options.js';
 
-var array_elements = [], translator_tab = null, translator_window = null;
+window.contextMenuLangs = [];
+window.translator_tab = null;
 
 function getTranslationUrl(lang, text) {
   var params = new URLSearchParams({
@@ -16,11 +17,11 @@
 function translationClick(info, tab) {
   Options.getOptions()
       .then(options => {
-        var url = getTranslationUrl(
-            array_elements[info.menuItemId]['langCode'], info.selectionText);
-        var settings_tab = {url};
-        if (translator_tab && options.uniqueTab == 'yep') {
-          chrome.tabs.update(translator_tab, settings_tab, tab => {
+        let url = getTranslationUrl(
+            window.contextMenuLangs[info.menuItemId], info.selectionText);
+        let settings_tab = {url};
+        if (window.translator_tab && options.uniqueTab == 'yep') {
+          chrome.tabs.update(window.translator_tab, settings_tab, tab => {
             chrome.tabs.highlight(
                 {
                   windowId: tab.windowId,
@@ -33,33 +34,16 @@
                 });
           });
         } else if (options.uniqueTab == 'popup') {
-          chrome.windows.create(
-              {
-                type: 'popup',
-                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;
-                  }
-                });
-              });
+          chrome.windows.create({
+            type: 'popup',
+            url,
+            width: 1000,
+            height: 382,
+          });
         } else {
           chrome.tabs.create(settings_tab, function(tab) {
-            translator_window = tab.windowId;
-            translator_tab = tab.id;
-            chrome.tabs.onRemoved.addListener(function(tabId, removeInfo) {
-              if (tabId == translator_tab) {
-                translator_window = null;
-                translator_tab = null;
-              }
-            });
+            let translator_window = tab.windowId;
+            window.translator_tab = tab.id;
           });
         }
       })
@@ -102,8 +86,7 @@
       'parentId': parentEl,
       'contexts': ['selection']
     });
-    array_elements[id] = new Array();
-    array_elements[id]['langCode'] = language;
+    window.contextMenuLangs[id] = language;
   }
 
   if (!isSingleEntry) {
@@ -173,6 +156,13 @@
   }
 });
 
+chrome.tabs.onRemoved.addListener((tabId, removeInfo) => {
+  if (tabId == window.translator_tab) {
+    translator_window = null;
+    window.translator_tab = null;
+  }
+});
+
 chrome.browserAction.onClicked.addListener(() => {
   chrome.runtime.openOptionsPage();
 });
diff --git a/src/options/elements/options-editor/options-editor.js b/src/options/elements/options-editor/options-editor.js
index b7eeb52..f6500ab 100644
--- a/src/options/elements/options-editor/options-editor.js
+++ b/src/options/elements/options-editor/options-editor.js
@@ -59,9 +59,7 @@
   changeTabOption(value) {
     chrome.storage.sync.set({uniquetab: value}, function() {
       var background = chrome.extension.getBackgroundPage();
-
-      background.translator_tab = false;
-      background.translator_window = false;
+      background.translator_tab = null;
     });
   }
 }
