diff --git a/background/background.js b/background/background.js
index 18d97143..9ffaf1b2 100644
--- a/background/background.js
+++ b/background/background.js
@@ -12,8 +12,6 @@
   activateTab
   download
   findExistingTab
-  getActiveTab
-  isTabReplaceable
   openURL
 */ // toolbox.js
 'use strict';
@@ -74,7 +72,7 @@ addAPI(/** @namespace API */ {
     if (options) {
       url += '#stylus-options';
     }
-    let tab = await findExistingTab({
+    const tab = await findExistingTab({
       url,
       currentWindow: null,
       ignoreHash: true,
@@ -87,10 +85,7 @@ addAPI(/** @namespace API */ {
       }
       return tab;
     }
-    tab = await getActiveTab();
-    return isTabReplaceable(tab, url)
-      ? activateTab(tab, {url})
-      : browser.tabs.create({url}).then(activateTab); // activateTab unminimizes the window
+    return openURL({url, ignoreExisting: true}).then(activateTab); // activateTab unminimizes the window
   },
 
   /**
diff --git a/js/toolbox.js b/js/toolbox.js
index 0a1cfb34..55f5422b 100644
--- a/js/toolbox.js
+++ b/js/toolbox.js
@@ -179,6 +179,7 @@ async function findExistingTab({url, currentWindow, ignoreHash = true, ignoreSea
  * @param {Boolean} [_.active=true] `true` to activate the tab
  * @param {Boolean|null} [_.currentWindow=true] `null` to check all windows
  * @param {chrome.windows.CreateData} [_.newWindow] creates a new window with these params if specified
+ * @param {boolean} [_.ignoreExisting] specify to skip findExistingTab
  * @returns {Promise<chrome.tabs.Tab>} Promise -> opened/activated tab
  */
 async function openURL({
@@ -188,11 +189,12 @@ async function openURL({
   active = true,
   currentWindow = true,
   newWindow,
+  ignoreExisting,
 }) {
   if (!url.includes('://')) {
     url = chrome.runtime.getURL(url);
   }
-  let tab = await findExistingTab({url, currentWindow});
+  let tab = !ignoreExisting && await findExistingTab({url, currentWindow});
   if (tab) {
     return activateTab(tab, {
       index,