diff -ru orig/xf86-input-hidtouch-9.04.04/src/hidtouch__body.h xf86-input-hidtouch-9.04.04/src/hidtouch__body.h
--- orig/xf86-input-hidtouch-9.04.04/src/hidtouch__body.h	2009-04-04 09:07:54.000000000 +0200
+++ xf86-input-hidtouch-9.04.04/src/hidtouch__body.h	2009-12-23 21:19:45.253952702 +0100
@@ -112,7 +112,6 @@
 hdtOnDeviceOff(DeviceIntPtr device)
 {
     InputInfoPtr pInfo = device->public.devicePrivate;
-    HdtDevicePtr pDevice = pInfo->private;
 
     xf86Msg(X_INFO, "%s: Off.\n", pInfo->name);
     if (!device->public.on)
@@ -171,7 +170,7 @@
 
 
     if (!InitValuatorClassDeviceStruct(device,
-            num_axes, GetMotionHistory, GetMotionHistorySize(),
+            num_axes, GetMotionHistorySize(),
             Absolute))
     {
         return BadAlloc;
@@ -424,10 +423,10 @@
 	int trans_y = y ;
 	hdtOnReadInput__supportXrandr(pInfo, &trans_x, &trans_y);
 
-    /* /
+    /*
     xf86Msg(X_INFO, "Position : %i, %i ==> %i, %i.\n",
                     x, y, trans_x, trans_y);
-    /* */
+    */
 	xf86PostMotionEvent(pInfo->dev, 1
             , 0, 2
             , trans_x, trans_y);
diff -ru orig/xf86-input-hidtouch-9.04.04/src/hidtouch__HdtRawData.h xf86-input-hidtouch-9.04.04/src/hidtouch__HdtRawData.h
--- orig/xf86-input-hidtouch-9.04.04/src/hidtouch__HdtRawData.h	2008-11-01 08:59:18.000000000 +0100
+++ xf86-input-hidtouch-9.04.04/src/hidtouch__HdtRawData.h	2009-12-23 20:36:51.950286938 +0100
@@ -34,25 +34,33 @@
     /*int op_code ;
     int op_value ;*/
 
+    int done_p = 0;
+    int done_x = 0;
+    int done_y = 0;
+
     for(i=0; i<(configuration->packetCount) ; i++) {
         read(pInfo->fd, &packet, sizeof(packet)) ;
         /*op_code = HdtRawData__fillFromInputInfo__readInt(pInfo) ;*/
         /*op_value = HdtRawData__fillFromInputInfo__readInt(pInfo) ;*/
         /*xf86Msg(X_INFO, "Read packet : \t%x\t%x\n", op_code, op_value);*/
 
-        if(packet.hid == op_code_setup->pressure)
+        if((packet.hid == op_code_setup->pressure) && (!done_p))
         {
             hdtRawData->pressure = (0 == packet.value)
                     ? HDT__RAW_DATA__IS_NOT_PRESSED
                     : HDT__RAW_DATA__IS_PRESSED ;
+
+		done_p = 1;
         }
-        else if(packet.hid == op_code_setup->x)
+        else if((packet.hid == op_code_setup->x) && (!done_x))
         {
             hdtRawData->x = packet.value ;
+		done_x = 1;
         }
-        else if(packet.hid == op_code_setup->y)
+        else if((packet.hid == op_code_setup->y) && (!done_y))
         {
             hdtRawData->y = packet.value ;
+		done_y = 1;
         }
     }
 }

