     event.keystrokes = @multiKeystrokeStringForEvent(event)
     isMultiKeystroke = @queuedKeystrokes?
     @queuedKeystrokes = null
+
+    firstKeystroke = event.keystrokes.split(' ')[0]
+    bindingSetsForFirstKeystroke = @bindingSetsByFirstKeystroke[firstKeystroke]
+    return true unless bindingSetsForFirstKeystroke?
+
     currentNode = $(event.target)
     while currentNode.length
-      candidateBindingSets = @bindingSetsForNode(currentNode)
+      candidateBindingSets = @bindingSetsForNode(currentNode, bindingSetsForFirstKeystroke)
       for bindingSet in candidateBindingSets
         command = bindingSet.commandForEvent(event)
         if command

module.exports =
class Keymap
  bindingSets: null
  queuedKeystrokes: null

  constructor: ->
    @bindingSets = []

  bindDefaultKeys: ->
    @bindKeys "*",


    !isMultiKeystroke

  bindingSetsForNode: (node, candidateBindingSets = @bindingSets) ->
    bindingSets = candidateBindingSets.filter (set) -> node.is(set.selector)
    bindingSets.sort (a, b) ->
      if b.specificity == a.specificity
        b.index - a.index
