       irData = 0;
       dataStartTiming = pulseStartTiming;
       pulseStartTiming = 0;
+      irDataExtra = 0;
       return;
   }
   else if (isDataValid == true) {

#ifdef __IRREMOTE_RECEIVE_REVERT__
      bitClear(irData, (IR_REMOTE_DATA_WIDTH - 1 - irDataIdx));
#else
      bitClear(irData, irDataIdx);
#endif
    }
    else if ((dur <= (IR_REMOTE_CONTINUE_TIMING_MAX)) &&
    (dur >= (IR_REMOTE_CONTINUE_TIMING_MIN)))
    {
      irDataLongCode = irData;
      Serial.print("continues@");
      Serial.println(irData, HEX);
      irDataIdx = 0; /* reset index to continue receive next data */
    }
    else{
      Serial.print("unkn!");

#ifdef __IRREMOTE_RECEIVE_REVERT__
       bitSet(irData, (IR_REMOTE_DATA_WIDTH -1 - irDataIdx));
#else
       if (irDataIdx >= 32){
           bitSet(irDataExtra, irDataIdx - 32);
        } else {
           bitSet(irData, irDataIdx);
        }
#endif
    }
    else if((dur <= (IR_REMOTE_ZERO_TIMING_MAX)) &&
