diff --git a/cores/arduino/RingBuffer.cpp b/cores/arduino/RingBuffer.cpp
index ba9522ce2ae99f4d5d24057feae7b81e8a6d95b6..92d82098e034c5e89b14156cd8f061e4253a2612 100644
--- a/cores/arduino/RingBuffer.cpp
+++ b/cores/arduino/RingBuffer.cpp
@@ -51,7 +51,7 @@ int RingBuffer::read_char()
 	if(_iTail == _iHead)
 		return -1;
 
-	int value = _aucBuffer[_iTail];
+	uint8_t value = _aucBuffer[_iTail];
 	_iTail = nextIndex(_iTail);
 
 	return value;
diff --git a/cores/arduino/SERCOM.cpp b/cores/arduino/SERCOM.cpp
index f14f858486abce45b9b813add3bc4ed857de836a..31fc51aa9c55caf52d02c96245c29dee6ea81c11 100644
--- a/cores/arduino/SERCOM.cpp
+++ b/cores/arduino/SERCOM.cpp
@@ -448,7 +448,7 @@ bool SERCOM::startTransmissionWIRE(uint8_t address, SercomWireReadWriteFlag flag
     }
 
     // Clean the 'Slave on Bus' flag, for further usage.
-    sercom->I2CM.INTFLAG.bit.SB = 0x1ul;
+    //sercom->I2CM.INTFLAG.bit.SB = 0x1ul;
   }
 
 
@@ -550,9 +550,9 @@ uint8_t SERCOM::readDataWIRE( void )
 {
   if(isMasterWIRE())
   {
-    while( sercom->I2CM.INTFLAG.bit.SB == 0 || sercom->I2CM.STATUS.bit.CLKHOLD == 0 )
+    while( sercom->I2CM.INTFLAG.bit.SB == 0 )
     {
-      // Waiting complete receive, Clock holding & synchronization finished
+      // Waiting complete receive
     }
 
     return sercom->I2CM.DATA.bit.DATA ;
diff --git a/cores/validation/validation_chuck/test.cpp b/cores/validation/validation_chuck/test.cpp
index e6e3fd4d104a40e60cd310201e345c319549ba0f..9e5698eb3512b6b3b927fdf3c5b424ea56ad444e 100644
--- a/cores/validation/validation_chuck/test.cpp
+++ b/cores/validation/validation_chuck/test.cpp
@@ -1,15 +1,12 @@
+#include <Arduino.h>
 #include <Wire.h>
-#include "nunchuck_funcs.h"
 
-int loop_cnt=0 ;
-
-byte accx,accy,zbut,cbut ;
-int ledPin = 13 ;
+uint8_t accx,accy,zbut,cbut ;
 
 void setup()
 {
   Serial5.begin( 115200 ) ;
-  Serial5.println("nunchuck_init");
+  Serial5.println("nunchuk init");
   
   Wire.begin(); // join i2c bus as master
   Wire.beginTransmission(0x52);// transmit to device 0x52
@@ -17,17 +14,16 @@ void setup()
     Wire.write((uint8_t)0x00);// sends sent a zero.
   Wire.endTransmission();// stop transmitting
 
-  Serial5.println( "WiiChuckDemo ready" ) ;
-  delay(3000);
+  Serial5.println( "WiiChukDemo ready" ) ;
+  delay(100);
 }
 
 void loop()
 {
   Wire.requestFrom(0x52, 6);
-
   
-  uint8_t jX = Wire.read();
-  uint8_t jY = Wire.read();
+  uint8_t jX =   Wire.read();
+  uint8_t jY =   Wire.read();
   uint8_t accX = Wire.read();
   uint8_t accY = Wire.read();
   uint8_t accZ = Wire.read();
@@ -46,6 +42,10 @@ void loop()
   Serial5.print(accZ);
   
   Serial5.print("\tBtn : ");
+  Serial5.print(" [");
+  Serial5.print(misc);
+  Serial5.print("] ");
+
   switch(misc & 0x3ul)
   {
     case 0x0ul:
@@ -67,11 +67,11 @@ void loop()
     default:
       break;
   }
-
   
   Wire.beginTransmission(0x52);// transmit to device 0x52
-    Wire.write((uint8_t)0x00);// sends sent a zero.
+  Wire.write((uint8_t)0x00);// sends sent a zero.
   Wire.endTransmission();// stop transmitting
 
   delay(100);
+
 }
diff --git a/libraries/Wire/Wire.cpp b/libraries/Wire/Wire.cpp
index 9ab0d25a182a2a8b146ccf1f8d03cb3f0fb48cc5..7b92a534f9d2a67f48a0771011661fcd8f31b5a6 100644
--- a/libraries/Wire/Wire.cpp
+++ b/libraries/Wire/Wire.cpp
@@ -50,18 +50,28 @@ void TwoWire::begin(uint8_t address) {
 
 uint8_t TwoWire::requestFrom(uint8_t address, size_t quantity, bool stopBit)
 { 
-  size_t toRead = quantity + 1;
+  if(quantity == 0)
+  {
+    return 0;
+  }
+
+
+  size_t byteRead = 0;
 
   if(sercom->startTransmissionWIRE(address, WIRE_READ_FLAG))
   {
+  
+    // Read first data
+    rxBuffer.store_char(sercom->readDataWIRE());
+
     // Connected to slave
-    while(toRead--)
-    //for(toRead = quantity; toRead >= 0; --toRead)
+    //while(toRead--)
+    for(byteRead = 0; byteRead < quantity; ++byteRead)
     {
-      if( toRead == 0)  // Stop transmission
+      if( byteRead == quantity - 1)  // Stop transmission
       {
         sercom->prepareNackBitWIRE(); // Prepare NACK to stop slave transmission
-        sercom->readDataWIRE(); // Clear data register to send NACK
+        //sercom->readDataWIRE(); // Clear data register to send NACK
         sercom->prepareCommandBitsWire(WIRE_MASTER_ACT_STOP); // Send Stop 
       }
       else // Continue transmission
@@ -73,7 +83,7 @@ uint8_t TwoWire::requestFrom(uint8_t address, size_t quantity, bool stopBit)
     }
   }
 
-  return quantity - toRead;
+  return byteRead;
 }
 
 uint8_t TwoWire::requestFrom(uint8_t address, size_t quantity)