     unshifted: 48  # "0"
 
 NumPadToASCII =
-  111: 47 # "/"
-  106: 42 # "*"
-  109: 45 # "-"
-  107: 43 # "+"
-  110: 46 # "."
+  79: 47 # "/"
+  74: 42 # "*"
+  77: 45 # "-"
+  75: 43 # "+"
+  78: 46 # "."
   96: 48 # "0"
-  97: 49 # "1"
-  98: 50 # "2"
-  99: 51 # "3"
-  100: 52 # "4"
-  101: 53 # "5"
-  102: 54 # "6"
-  103: 55 # "7"
-  104: 56 # "8"
-  105: 57 # "9"
+  65: 49 # "1"
+  66: 50 # "2"
+  67: 51 # "3"
+  68: 52 # "4"
+  69: 53 # "5"
+  70: 54 # "6"
+  71: 55 # "7"
+  72: 56 # "8"
+  73: 57 # "9"
 
 exports.normalizeKeystrokes = (keystrokes) ->
   normalizedKeystrokes = []

    else String.fromCharCode(charCode)

isASCII = (charCode) ->
  0 <= charCode <= 127

numpadToASCII = (charCode, shifted) ->
  trans = NumPadToASCII[charCode]

  unless KeyboardEventModifiers.has(event.keyIdentifier)
    keyIdentifierIsHexCharCode = event.keyIdentifier.indexOf('U+') is 0

    if event.location isnt KeyboardEvent.DOM_KEY_LOCATION_NUMPAD and isASCII(event.keyCode) and keyIdentifierIsHexCharCode
      key = keyFromCharCode(event.keyCode, event.shiftKey)
    else if keyIdentifierIsHexCharCode
      hexCharCode = event.keyIdentifier[2..]
      charCode = charCodeFromHexCharCode(hexCharCode)

      if event.location is KeyboardEvent.DOM_KEY_LOCATION_NUMPAD
        # This is a numpad number
        charCode = numpadToASCII(charCode, event.shiftKey)

      key = keyFromCharCode(charCode, event.shiftKey)
    else
      key = event.keyIdentifier.toLowerCase()
