diff --git a/examples/common/serial/serial.c b/examples/common/serial/serial.c
index dd79050ce534146bc9075d7e0c683932fd1f0c0c..a60a324bdf1089e6eb7c44d99b99cb5b6b7475ee 100644
--- a/examples/common/serial/serial.c
+++ b/examples/common/serial/serial.c
@@ -144,24 +144,28 @@ void readCom_(int *ioRegionId, comRStruct *comRead, int numberOfBytes, RTIME t)
     {
       outb(0x03,regionList[*ioRegionId].start+UART_16550_FCR);
       inb(regionList[*ioRegionId].start + UART_16550_LSR);
+      inb(regionList[*ioRegionId].start + UART_16550_RXB);
       comRead->com_irbp=comRead->com_arbp;
       comRead->comStat=0;
       comRead->clearFifo=2;
-//printf("[readCom_] FIFO cleared %04x\n",regionList[*ioRegionId].start);
+//      cSta=inb(regionList[*ioRegionId].start + UART_16550_LSR);      
+//rt_printf("[readCom_] FIFO cleared %04x %02x\n",regionList[*ioRegionId].start,cSta);
     }  
-	com_irbp=comRead->com_irbp;
-	cSta = inb(regionList[*ioRegionId].start + UART_16550_LSR);
-//cSta=DATA_READY;   // worst case
-//rt_printf("%02x ",cSta);
-	if ((cSta & 0x9E) != 0) {
-//if (regionList[*ioRegionId].start==0x238) rt_printf("@@@%02x ",cSta);
-//		comRead->comStat=cSta & 0x9E;
+	com_irbp=comRead->com_irbp;	
+	i = 0;
+	while (i < numberOfBytes) {
+
+	    cSta = inb(regionList[*ioRegionId].start + UART_16550_LSR);
+	    if ((cSta & 0x9E) != 0) {
+//if (regionList[*ioRegionId].start==0x3E8) rt_printf("@@@%02x ",cSta);	    
 		comRead->comStat=cSta & 0x1E;
 		outb(0x03, regionList[*ioRegionId].start + UART_16550_FCR);
+		inb(regionList[*ioRegionId].start + UART_16550_LSR);
+		inb(regionList[*ioRegionId].start + UART_16550_RXB);
 		com_irbp=comRead->com_arbp;
-        }
-	i = 0;
-	while ((cSta & DATA_READY) && i < numberOfBytes) {
+            }
+            if ((cSta & DATA_READY)==0) break;  // comment for worst case timing test
+	
 		comRead->comTime[com_irbp]=t;
 #ifndef _NRT
 #if (IO_TIMING)
@@ -178,8 +182,8 @@ if (t2-t1>maxIoTime) maxIoTime=t2-t1;
 
 
 //debug read
-//if (regionList[*ioRegionId].start==0x3f8)
-//rt_printf("r%02X ",cData);
+//if (regionList[*ioRegionId].start==0x2f8)
+//rt_printf("r%02X_%d ",cData,com_irbp);
 //rt_printf("r%02X_%d ",cData,GETTIME_MS);
 		comRead->comReadBuf[com_irbp]=cData;
 		com_irbp++;
@@ -189,14 +193,6 @@ if (t2-t1>maxIoTime) maxIoTime=t2-t1;
 //rt_printf("%d %d\n",com_irbp,comRead->com_arbp);
 		    comRead->comStat = 0xFF;
 	    }
-	    cSta = inb(regionList[*ioRegionId].start + UART_16550_LSR);
-	    if ((cSta & 0x9E) != 0) {
-//if (regionList[*ioRegionId].start==0x3E8) rt_printf("@@@%02x ",cSta);	    
-		comRead->comStat=cSta & 0x9E;
-		comRead->comStat=cSta & 0x1E;
-		outb(0x03, regionList[*ioRegionId].start + UART_16550_FCR);
-		com_irbp=comRead->com_arbp;
-            }
 	    i++;
 //cSta=DATA_READY; // worst case
 	}