             console.log "fetched suggestions:", suggestions.length, query if SearchEngineCompleter.debug
             onComplete suggestions.map mkSuggestion
 
+  postProcessSuggestions: (request, suggestions) ->
+    return unless request.searchEngines
+    engines = (engine for _, engine of request.searchEngines)
+    engines.sort (a,b) -> b.searchUrl.length - a.searchUrl.length
+    engines.push insertTextPrefix: "", searchUrl: Settings.get "searchUrl"
+    for suggestion in suggestions
+      unless suggestion.isSearchSuggestion or suggestion.insertText
+        for engine in engines
+          if suggestion.insertText = Utils.extractQuery engine.searchUrl, suggestion.url
+            suggestion.insertText = "#{engine.insertTextPrefix}#{suggestion.insertText}"
+            suggestion.title ||= suggestion.insertText
+            break
+    delete request.searchEngines
+
 # A completer which calls filter() on many completers, aggregates the results, ranks them, and returns the top
 # 10. All queries from the vomnibar come through a multi completer.
 class MultiCompleter

  triageRequest: (request) ->
    @searchEngines.use (engines) =>
      { queryTerms, query } = request
      keyword = queryTerms[0]
      # Note. For a keyword "w", we match "w search terms" and "w ", but not "w" on its own.
      if keyword and engines[keyword] and (1 < queryTerms.length or /\s$/.test query)

        continue if seenUrls[url]
        break if count++ == @maxResults
        seenUrls[url] = suggestion

    # Give each completer an opportunity to tweak the suggestions.
    completer.postProcessSuggestions? request, suggestions for completer in @completers

    # Generate HTML for the remaining suggestions and return them.
    suggestion.generateHtml() for suggestion in suggestions
