 			// Create a binding to be verified later
 			bindings.push(new BindingInfo(__action, new KeyboardBinding(__keyCode >= 0 ? __keyCode : KeyboardBinding.KEY_CODE_ANY, __keyLocation >= 0 ? __keyLocation : KeyboardBinding.KEY_LOCATION_ANY)));
 			prepareAction(__action);
+		}
+
+		/**
+		 * Removes an action bound to a keyboard key.
+		 *
+		 * @param action		An arbitrary String id identifying the action that should be dispatched once this
+		 *						key combination is detected.
+		 * @param keyCode		The code of a key, as expressed in AS3's Keyboard constants.
+		 * @param keyLocation	The code of a key's location, as expressed in AS3's KeyLocation constants. If a
+		 *						value of -1 or <code>NaN</code> is passed, the key location is never taken into
+		 *						consideration when detecting whether the passed action should be fired.
+		 *
+		 * @see flash.ui.Keyboard
+		 * @see #addGamepadActionBinding()
+		 */
+		public function removeKeyboardActionBinding(__action:String, __keyCode:int = KEY_CODE_ANY, __keyLocation:int = KEY_LOCATION_ANY):void {
+			var bindingsToRemove:Vector.<BindingInfo> = new <BindingInfo>[];
+
+			for each(var binding:BindingInfo in bindings) {
+				if(binding.action == __action) {
+					var keyboardBinding:KeyboardBinding = binding.binding as KeyboardBinding;
+					if(keyboardBinding && keyboardBinding.keyCode == __keyCode && keyboardBinding.keyLocation == __keyLocation) {
+						// store the binding to remove later, and fake a deactivate event
+						bindingsToRemove[bindingsToRemove.length] = binding;
+						onKeyUp(new KeyboardEvent(KeyboardEvent.KEY_UP, true, false, 0, __keyCode, __keyLocation));
+					}
+				}
+			}
+
+			for each(binding in bindingsToRemove) {
+				bindings.splice(bindings.indexOf(binding), 1);
+			}
+
+			consumeAction(__action);
 		}
 
 		/**

		 * @see GamepadControls
		 * @see #isActionActivated()
		 * @see #getActionValue()
		 */
		public function addGamepadActionBinding(__action:String, __controlId:String, __gamepadIndex:int = -1):void {
			// Create a binding to be verified later
			bindings.push(new BindingInfo(__action, new GamepadBinding(__controlId, __gamepadIndex >= 0 ? __gamepadIndex : GamepadBinding.GAMEPAD_INDEX_ANY)));
			prepareAction(__action);
		}

		/**

		 * </pre>
		 *
		 * @see flash.ui.Keyboard
		 * @see #removeKeyboardActionBinding()
		 */
		public function addKeyboardActionBinding(__action:String, __keyCode:int = -1, __keyLocation:int = -1):void {
			// TODO: use KeyActionBinder.KEY_LOCATION_ANY as default param? The compiler doesn't like constants.
