 				}
 				if (hasEventListener(flashType)) {
 					if(flashType!=TouchEvent.TOUCH_MOVE){
-						dispatchEvent(new TouchEvent(flashType, true, false, 0, true, _mouseX, _mouseY));
+						dispatchEvent(new TouchEvent(flashType, true, false, 0, true, _mouseX, _mouseY,null,e.ctrlKey,e.altKey,e.shiftKey,(e.buttons!=null)?(e.buttons>0):isButtonDown));
 					}else {
 						needSendTouchMove = true;
 					}
 				}
 				if (hasEventListener(flashType2)) {
 					if(flashType2!=MouseEvent.MOUSE_MOVE){
-						dispatchEvent(new MouseEvent(flashType2, true, false, _mouseX, _mouseY));
+						dispatchEvent(new MouseEvent(flashType2, true, false, _mouseX, _mouseY,null,e.ctrlKey,e.altKey,e.shiftKey,(e.buttons!=null)?(e.buttons>0):isButtonDown));
 					}else {
 						needSendMouseMove = e;
 					}
 				}
 				if (flashType===TouchEvent.TOUCH_END&&hasEventListener(MouseEvent.CLICK)) {
-					dispatchEvent(new MouseEvent(MouseEvent.CLICK, true, false, _mouseX, _mouseY));
+					dispatchEvent(new MouseEvent(MouseEvent.CLICK, true, false, _mouseX, _mouseY,null,e.ctrlKey,e.altKey,e.shiftKey,(e.buttons!=null)?(e.buttons>0):isButtonDown));
 				}
 			}
 		}

					needSendMouseMove = null;
				}
				if (needSendTouchMove) {
					dispatchEvent(new TouchEvent(TouchEvent.TOUCH_MOVE, true, false, 0, true, _mouseX, _mouseY));
					needSendTouchMove = null;
				}
				dispatchEvent(new Event(Event.ENTER_FRAME));

				case "touchcancel":
					flashType = TouchEvent.TOUCH_END;
					flashType2 = MouseEvent.MOUSE_UP;
					isButtonDown = false;
					break;
				case "touchend":
					flashType = TouchEvent.TOUCH_END;
					flashType2 = MouseEvent.MOUSE_UP;
					isButtonDown = false;
					break;
				case "touchmove":
					flashType = TouchEvent.TOUCH_MOVE;
