             text: "Jumped to global mark '#{markName}'."
             duration: 1000
 
-  # The tab we're trying to find no longer exists.  Either find another tab with a matching URL and use it, or
-  # create a new tab.
+  # The tab we're trying to find no longer exists.  We either find another tab with a matching URL and use it,
+  # or we create a new tab.
   focusOrLaunch: (markInfo) ->
     chrome.windows.getAll { populate: true }, (windows) =>
-      baseUrl = @getBaseUrl markInfo.url
       for window in windows
         for tab in window.tabs
-          if baseUrl == @getBaseUrl tab.url
-            # We have a matching tab.  We'll use it.
-            return @gotoPositionInTab extend markInfo, tabId: tab.id
+          if markInfo.url == @getBaseUrl tab.url
+            # We have a matching tab: use it.
+            @gotoPositionInTab extend markInfo, tabId: tab.id
+            return
       # There is no existing matching tab, we'll have to create one.
       chrome.tabs.create { url: @getBaseUrl(markInfo.url) }, (tab) =>
-        # Note. tabLoadedHandlers is defined in "main.coffee".  This handler will be called when the tab has
+        # Note. tabLoadedHandlers is defined in "main.coffee".  The handler below will be called when the tab
         # is loaded, its DOM is ready and it registers with the background page.
         tabLoadedHandlers[tab.id] = => @gotoPositionInTab extend markInfo, tabId: tab.id
 
-  getBaseUrl: (url) -> url.split("#")[0]
-
 root = exports ? window
 root.Marks = Marks

        # This is a different Vimium instantiation, so markInfo.tabId is definitely out of date.
        @focusOrLaunch markInfo
      else
        # Check whether markInfo.tabId still exists.
        chrome.tabs.get markInfo.tabId, (tab) =>
          if chrome.runtime.lastError or not tab
            # The original tab no longer exists.
            @focusOrLaunch markInfo
          else
            # The original tab still exists.
            @gotoPositionInTab markInfo

  gotoPositionInTab: ({ tabId, scrollX, scrollY, markName }) ->
    chrome.tabs.update tabId, { selected: true }, ->


Marks =
  # This returns the key which is used for storing mark locations in chrome.storage.local.
  getLocationKey: (markName) -> "vimiumGlobalMark|#{markName}"

  # Get the part of a URL we use for matching here (that is, everything up to the first anchor).
  getBaseUrl: (url) -> url.split("#")[0]

  # Create a global mark.  We record vimiumSecret with the mark so that we can tell later, when the mark is
  # used, whether this is the original Vimium instantiation or a subsequent instantiation.  This affects
  # whether or not tabId can be considered valid.
  create: (req, sender) ->
    chrome.storage.local.get "vimiumSecret", (items) =>
      item = {}
      item[@getLocationKey req.markName] =
        vimiumSecret: items.vimiumSecret
        tabId: sender.tab.id
        url: @getBaseUrl sender.tab.url
        scrollX: req.scrollX
        scrollY: req.scrollY
        markName: req.markName
