Index: uspace/lib/usb/src/hidparser.c
===================================================================
--- uspace/lib/usb/src/hidparser.c	(revision d012590127319c20b3a2899b69cfc78f045da760)
+++ uspace/lib/usb/src/hidparser.c	(revision 2f4b3a44176313e40c4106704319c751b96ef337)
@@ -1239,8 +1239,5 @@
 				}
 
-				size_t shift=0;
-				if(((offset+length)%8) > 0) {
-					shift = (8- ((offset+length)%8));
-				}
+				size_t shift = offset%8;
 
 				value = value << shift;							
@@ -1251,14 +1248,14 @@
 				// je to ve dvou!! FIXME: melo by to umet delsi jak 2
 
-				// konec prvniho
+				// konec prvniho -- dolni x bitu
 				tmp_value = value;
-				tmp_value = tmp_value >> (8 - (offset%8) - 1);
 				tmp_value = tmp_value & ((1 << (8-(offset%8)))-1);				
+				tmp_value = tmp_value << (offset%8);
 
 				buffer[offset/8] = buffer[offset/8] | tmp_value;
 
-				// a ted druhej
-				value = value & ((1 << (length - (8 - (offset%8))))-1);
-				value = value << (8 - (length - (8 - (offset%8))));
+				// a ted druhej -- hornich length-x bitu
+				value = value >> (8 - (offset % 8));
+				value = value & ((1 << (length - (8 - (offset % 8)))) - 1);
 				
 				buffer[(offset+length-1)/8] = buffer[(offset+length-1)/8] | value;
