diff -r b8ce648085a9 modules/graphics/src/main/native-glass/lens/input/udev/udevInput.c
--- a/modules/graphics/src/main/native-glass/lens/input/udev/udevInput.c	Wed Dec 18 14:10:21 2013 +0200
+++ b/modules/graphics/src/main/native-glass/lens/input/udev/udevInput.c	Wed Dec 18 15:39:17 2013 +0200
@@ -1507,6 +1507,9 @@
     int numOfUpdatePoints = 0;
     int numOfReleasePoints = 0;
 
+    //for release events calculations
+    memset(&mouseState->pendingTouchXs, -1 , sizeof(mouseState->pendingTouchXs));
+
     //Pass on the events of this sync
     for (i = 0; i < mouseState->pendingInputEventCount; i++) {
         struct input_event *pointerEvent = &mouseState->pendingInputEvents[i];
@@ -1524,20 +1527,27 @@
                 break;
             case EV_ABS:
                 lens_input_pointerEvents_handleAbsMotion(device, pointerEvent);
+
                 if (mouseState->pendingTouchPointCount < LENS_MAX_TOUCH_POINTS &&
                     pointerEvent->code == ABS_MT_POSITION_X) {
                     numOfUpdatePoints++;
                 }
 
-                if (device->touchProtocolType == TOUCH_PROTOCOL_MT_A_WITH_TRACKING_ID) {
-                    if (pointerEvent->code == ABS_MT_TRACKING_ID) {
-                        mouseState->pendingTouchTrackingIDs[mouseState->pendingTouchPointCount] =
-                            pointerEvent->value;                        
-                    } else  if (pointerEvent->code == ABS_MT_TOUCH_MAJOR && pointerEvent->value == 0) {
+                if (pointerEvent->code == ABS_MT_TRACKING_ID) {
+                    mouseState->pendingTouchTrackingIDs[mouseState->pendingTouchPointCount] =
+                    pointerEvent->value;
+
+                }
+
+                if (mouseState->pendingTouchPointCount < LENS_MAX_TOUCH_POINTS &&
+                    device->touchProtocolType == TOUCH_PROTOCOL_MT_A_WITH_TRACKING_ID) {
+
+                    if (pointerEvent->code == ABS_MT_TOUCH_MAJOR && pointerEvent->value == 0) {
                         //release event
                         numOfReleasePoints++;
                     }
                 }
+
                 break;
             case EV_SYN:
                 if (pointerEvent->code == SYN_MT_REPORT) {
@@ -1641,14 +1651,13 @@
                           mouseState->pendingTouchPointCount,
                           numOfUpdatePoints,
                           numOfReleasePoints);
-        if (numOfReleasePoints == mouseState->pendingTouchPointCount && numOfUpdatePoints == 0) {
+        if (numOfReleasePoints > 0) {
             /**
-             * all reported points are points to be released according to 
-             * their tracking ID. 
-             * Traverse over existing points and copy non-released points to 
-             * pending points array so in the end we will provide a well 
-             * formatted list for further processing which is compliant with
-             * Protocol A processing 
+             * some or all reported points are points to be released 
+             * according to their tracking ID. Traverse over existing points 
+             * and copy non-released points to pending points array so in 
+             * the end we will provide a well formatted list for further 
+             * processing which is compliant with Protocol A processing 
              */
             int actualCount = 0;
             GLASS_LOG_FINEST("[preprocessing MIXED] touchPointCount = %d , "
@@ -1659,7 +1668,8 @@
                 int j;
                 jboolean matchFound = JNI_FALSE;
                 for (j = 0; j < mouseState->pendingTouchPointCount; j++) {
-                    if (mouseState->pendingTouchTrackingIDs[j] == mouseState->touchTrackingIDs[i]) {
+                    if (mouseState->pendingTouchXs[j] == -1 &&
+                        mouseState->pendingTouchTrackingIDs[j] == mouseState->touchTrackingIDs[i]) {
                         GLASS_LOG_FINEST("[preprocessing MIXED] releasing "
                                          "existing point %d ,id %d, tracking id %d",
                                          i,
diff -r b8ce648085a9 modules/graphics/src/main/native-glass/lens/wm/LensWindowManager.c
--- a/modules/graphics/src/main/native-glass/lens/wm/LensWindowManager.c	Wed Dec 18 14:10:21 2013 +0200
+++ b/modules/graphics/src/main/native-glass/lens/wm/LensWindowManager.c	Wed Dec 18 15:39:17 2013 +0200
@@ -1183,6 +1183,8 @@
                 break;
             case com_sun_glass_events_TouchEvent_TOUCH_STILL:
                 //nothing to do
+                _mousePosX = absX;
+                _mousePosY = absY;
                 GLASS_LOG_FINEST("touch -> mouse - still, ignoring");
                 break;
             case com_sun_glass_events_TouchEvent_TOUCH_RELEASED:
