diff --git a/Pcie40Applications/main_pcie40_ul.cpp b/Pcie40Applications/main_pcie40_ul.cpp
index 0747887a6c5c80b1f00972b46b3854eb5d23c12a..9e7c51d932deb2247aa0a821163d61cc4819d9f4 100644
--- a/Pcie40Applications/main_pcie40_ul.cpp
+++ b/Pcie40Applications/main_pcie40_ul.cpp
@@ -3,6 +3,7 @@
 #include <unistd.h>
 #include <time.h>
 #include "altera_dma_regs.h"
+#include <sys/time.h>
 
 extern "C" int  ecs_open(int dev, int bar);
 extern "C" void ecs_close(int dev, int bar);
@@ -17,6 +18,7 @@ extern "C" int      ecs_write(int dev, int bar, unsigned add, int val);
 #define OLD_RUN 1
 #define OLD_EVENT 2
 #define NO_TRAILER 3
+#define PRESCALE 1000
 
 
 const int CRC16_XMODEM_TABLE[] = {
@@ -54,6 +56,12 @@ const int CRC16_XMODEM_TABLE[] = {
   0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0,
 } ;
 
+double getTimeSec()
+{
+  struct timeval t;
+  gettimeofday(&t, NULL);
+  return (t.tv_sec + t.tv_usec * 1.e-6);
+}
 
 
 int crc_calc( int * crc, unsigned int * data ){ 
@@ -115,12 +123,15 @@ int crc_calc_event( unsigned int* data, int start_pos, int *crc_good, int *crc_b
   printf("End\n");
 #endif
   int bad = 0;
+
+
   
   while( offset + 4 < size ){ // 4 = ROB trailer size
     cur_pos = start_pos + offset;
     int size_link = data[ cur_pos % DMASIZE ] & 0x000ffff ;
     if ( 0 >= size_link || size_link > 10000000 ){
-      printf("[ERROR] Invalid size per link (%.8x words): link num %d\n", size_link, link_num);
+      printf("[ERROR] Invalid size per link (%.8x words): link num %d\n", 
+	     size_link, link_num);
       return -1 ; // it could be that the memory was read
     } 
 
@@ -153,30 +164,30 @@ int crc_calc_event( unsigned int* data, int start_pos, int *crc_good, int *crc_b
     // Check of CRC
     //
     if( ( crc & 0xffff ) != ( data[ cur_pos % DMASIZE ] & 0xffff ) ){
-      printf("%.2d Bad  ! calcd %.4x data %.4x offset %.4x size %.4x szlnk %.4x trl %.8x\n", 
-       	     link_num, crc, data[ cur_pos % DMASIZE ] & 0xffff, offset, 
-       	     size, size_link, data[ (cur_pos+1) % DMASIZE ] );
+        printf("%.2d Bad  ! calcd %.8x data %.4x offset %.4x size %.4x szlnk %.4x trl %.8x\n", 
+         	     link_num, crc, data[ cur_pos % DMASIZE ], offset, 
+         	     size, size_link, data[ (cur_pos+1) % DMASIZE ] );
       bad = 1;
       (*crc_bad)++;
     }else{
       good_flag = 1;
-      // printf("%.2d Good ! calcd %.4x data %.4x offset %.4x size %.4x szlnk %.4x trl %.8x\n",  
-      // 	      link_num, crc, data[ cur_pos % DMASIZE ] & 0xffff, offset, 
-      // 	      size, size_link, data[ (cur_pos+1) % DMASIZE ] ); 
+       // printf("%.2d Good ! calcd %.4x data %.8x offset %.4x size %.4x szlnk %.4x trl %.8x\n",  
+       // 	      link_num, crc, data[ cur_pos % DMASIZE ], offset, 
+       // 	      size, size_link, data[ (cur_pos+1) % DMASIZE ] ); 
       (*crc_good)++;
     }
     link_num++;
     offset += size_link;
   }
 
-  //if( bad ){
-  //    for( i = 0 ; i < size ; i++){
-  //      printf("%.8x ", data[ ( start_pos  + i ) % DMASIZE ] );
-  //      if( i % 8 == 7 ) printf("\n");
-  //    }
-  //    printf("\n");
-  //   good_flag = -2;
-  // }
+  if( bad ){
+       for( i = 0 ; i < size ; i++){
+         printf("%.8x ", data[ ( start_pos  + i ) % DMASIZE ] );
+         if( i % 8 == 7 ) printf("\n");
+       }
+       printf("\n");
+       good_flag = -2;
+  }
   return good_flag;
      
 }
@@ -194,7 +205,8 @@ int print_line(unsigned int *data, int cur_pos ){
 }
 
 int check_hdr_trl( unsigned int *data, int cur_pos, int *event_flag, 
-		   unsigned int cur_exp_run, unsigned int cur_eve, unsigned int *next_exp_run, unsigned int *next_eve ){
+		   unsigned int cur_exp_run, unsigned int cur_eve, 
+		   unsigned int *next_exp_run, unsigned int *next_eve ){
 
   unsigned int trailer = 0;
   int size = data[ cur_pos ] ;
@@ -210,15 +222,15 @@ int check_hdr_trl( unsigned int *data, int cur_pos, int *event_flag,
       // printf( "OLD-run's event : run %.8x eve %.8x ( cur run %.8x eve %.8x) : pos %.8x size %d\n", 
       //  	      *next_exp_run , *next_eve, cur_exp_run, cur_eve, cur_pos, size );
       *event_flag = OLD_RUN;
-    }else if( *next_eve <= cur_eve && cur_exp_run != 0 ){
-      // printf( "OLD or same event : run %.8x eve %.8x ( cur run %.8x eve %.8x) : pos %.8x size %d\n", 
-      //  	      *next_exp_run , *next_eve, cur_exp_run, cur_eve, cur_pos, size );
+    }else if( ( *next_eve <= cur_eve && cur_exp_run != 0 ) && *next_exp_run <= cur_exp_run){
+      //         printf( "OLD or same event : run %.8x eve %.8x ( cur run %.8x eve %.8x) : pos %.8x size %d\n", *next_exp_run , *next_eve, cur_exp_run, cur_eve, cur_pos, size );
+      //                  print_line( data, ( cur_pos + 1 ) % DMASIZE );
       *event_flag = OLD_EVENT;
       //    }else if( trailer != 0x7fff0008 ){
-    }else if( ( trailer & 0xffff0000 ) != 0x7fbf0000 ){
-      // printf( "No trailer [%.8x] : run %.8x eve %.8x ( cur run %.8x eve %.8x) : pos %.8x size %d\n", 
-      // 	      trailer,	      *next_exp_run , *next_eve, cur_exp_run, cur_eve, cur_pos, size );
-      //      print_line( data, ( cur_pos + size + DMASIZE - 1 ) % DMASIZE );
+    }else if( ( trailer & 0xffff0000 ) != 0x7fbf0000 && ( trailer & 0xffff0000 ) != 0x7fcf0000 ){
+       // printf( ".No trailer [%.8x] : run %.8x eve %.8x ( cur run %.8x eve %.8x) : pos %.8x size %d\n", 
+       //  	      trailer, *next_exp_run , *next_eve, cur_exp_run, cur_eve, cur_pos, size );
+       //  print_line( data, ( cur_pos + size + DMASIZE - 1 ) % DMASIZE );
       *event_flag = NO_TRAILER;
     }else{
       // printf( "New event : run %.8x eve %.8x ( cur run %.8x eve %.8x) : pos %.8x size %d\n", 
@@ -240,7 +252,7 @@ int check_hdr_trl( unsigned int *data, int cur_pos, int *event_flag,
 
 
 int main (int argc ,char** argv) {
-
+  printf("DMASIZE %.8x\n", DMASIZE );fflush(stdout);
   int res = ecs_open( 0 , 0 ) ;
   if ( -1 == res ) printf("ERROR: Could not open device (BAR 0)\n") ;
   else printf("SUCCESS: Device opened for DMA\n");
@@ -249,6 +261,8 @@ int main (int argc ,char** argv) {
   ecs_write( 0 , 2 ,  0x000501A0 , 0x1 ) ;
   pcie40_b2dmabufferreset( 0 ) ; 
 
+  double start_time = 0., time_diff = 0.;
+  start_time = getTimeSec();
   int run  = 0 ; 
   FILE* fp; 
   char * ptr ;
@@ -319,7 +333,6 @@ int main (int argc ,char** argv) {
     // Search 7f7f header magic word.
     //
     while( 1 ){ 
-
       ret = check_hdr_trl( data, cur_pos, &event_flag, cur_exp_run, cur_eve, &next_exp_run, &next_eve );
       if( ret == 1 && event_flag == 0){
 	break;
@@ -335,23 +348,23 @@ int main (int argc ,char** argv) {
 	  no_trl_cnt++;
 	}
 
-	if(total_err_cnt % 100 == 1 && event_flag != 0 ){
+	if(total_err_cnt % PRESCALE == 1 && event_flag != 0 ){
 	  printf("total %d oldrun %d old/same event %d no_trl %d goodlink %d badlink %d\n", 
 		 total_err_cnt, old_run_cnt, old_eve_cnt, no_trl_cnt, crc_good, crc_bad );
 	  size = data[cur_pos];
-	  if( event_flag == OLD_RUN ){
-	    printf( "OLD-run's event : run %.8x eve %.8x ( cur run %.8x eve %.8x) : pos %.8x size %d\n", 
-		    next_exp_run , next_eve, cur_exp_run, cur_eve, cur_pos, size );
-	    print_line( data,cur_pos % DMASIZE );
-	  }else if( event_flag == OLD_EVENT ){ 
-	    printf( "OLD or same event : run %.8x eve %.8x ( cur run %.8x eve %.8x) : pos %.8x size %d\n", 
-		    next_exp_run , next_eve, cur_exp_run, cur_eve, cur_pos, size );
-	    print_line( data,cur_pos % DMASIZE );
-	  }else if( event_flag == NO_TRAILER ){ 
-	    printf( "No trailer [%.8x] : run %.8x eve %.8x ( cur run %.8x eve %.8x) : pos %.8x size %d\n", 
-		    next_exp_run, next_eve, cur_exp_run, cur_eve, cur_pos, size );
-	    print_line( data, ( cur_pos + size + DMASIZE - 1 ) % DMASIZE );
-	  }
+	  // if( event_flag == OLD_RUN ){
+	  //   printf( "OLD-run's event : run %.8x eve %.8x ( cur run %.8x eve %.8x) : pos %.8x size %d\n", 
+	  // 	    next_exp_run , next_eve, cur_exp_run, cur_eve, cur_pos, size );
+	  //   print_line( data,cur_pos % DMASIZE );
+	  // }else if( event_flag == OLD_EVENT ){ 
+	  //   printf( "OLD or same event : run %.8x eve %.8x ( cur run %.8x eve %.8x) : pos %.8x size %d\n", 
+	  // 	    next_exp_run , next_eve, cur_exp_run, cur_eve, cur_pos, size );
+	  //   print_line( data,cur_pos % DMASIZE );
+	  // }else if( event_flag == NO_TRAILER ){ 
+	  //   printf( "No trailer [%.8x] : run %.8x eve %.8x ( cur run %.8x eve %.8x) : pos %.8x size %d\n", 
+	  // 	    next_exp_run, next_eve, cur_exp_run, cur_eve, cur_pos, size );
+	  //   print_line( data, ( cur_pos + size + DMASIZE - 1 ) % DMASIZE );
+	  // }
 	}
 
       }
@@ -388,10 +401,10 @@ int main (int argc ,char** argv) {
 	      no_trl_cnt++;
 	    }
 
-	    if(total_err_cnt % 100 == 1 && event_flag != 0 ){
+	    if(total_err_cnt % PRESCALE == 1 && event_flag != 0 ){
 	      printf("total %d oldrun %d old/same event %d no_trl %d goodlink %d badlink %d\n", 
 		     total_err_cnt, old_run_cnt, old_eve_cnt, no_trl_cnt, crc_good, crc_bad );
-	      size = data[cur_pos];
+	      size = data[cur_pos] & 0xffffff;
 	      if( event_flag == OLD_RUN ){
 		printf( "OLD-run's event : run %.8x eve %.8x ( cur run %.8x eve %.8x) : pos %.8x size %d\n", 
 			next_exp_run , next_eve, cur_exp_run, cur_eve, cur_pos, size );
@@ -401,7 +414,7 @@ int main (int argc ,char** argv) {
 			next_exp_run , next_eve, cur_exp_run, cur_eve, cur_pos, size );
 		print_line( data,cur_pos % DMASIZE );
 	      }else if( event_flag == NO_TRAILER ){ 
-		printf( "No trailer [%.8x] : run %.8x eve %.8x ( cur run %.8x eve %.8x) : pos %.8x size %d\n", 
+		printf( "No trailer : run %.8x eve %.8x ( cur run %.8x eve %.8x) : pos %.8x size %d\n", 
 			next_exp_run, next_eve, cur_exp_run, cur_eve, cur_pos, size );
 		print_line( data, ( cur_pos + size + DMASIZE - 1 ) % DMASIZE );
 	      }
@@ -427,8 +440,7 @@ int main (int argc ,char** argv) {
 	     data[ ( cur_pos +  data[ cur_pos  % DMASIZE ] - 2 + DMASIZE ) % DMASIZE ] );
     }
 #endif
-
-    size = data[ cur_pos ] ;
+    size = data[cur_pos] & 0xffffff;
 
     next_eve = data[ ( cur_pos + 3 ) % DMASIZE ];
     next_exp_run = data[ ( cur_pos + 2 ) % DMASIZE ];
@@ -446,15 +458,16 @@ int main (int argc ,char** argv) {
       crc_err_eve_cnt++;
     }
 
-    if(ret != 1 || eve_cnt % 100 == 0 ){
+    if(ret != 1 || eve_cnt % PRESCALE == 0 ){
       printf( "Event number prev %.8x new %.8x pos %.8x size %.8x\n" , cur_eve , next_eve, cur_pos, size );
     }
     cur_eve = next_eve;
     cur_exp_run = next_exp_run;
-    if( eve_cnt % 100 == 0 ){
+    if( eve_cnt % PRESCALE == 0 ){
       //    if( ret != 1 ){
       //    if(ret != 1 ||  eve_cnt % 100 == 0 ){
-      printf("STATUS : tot eve %d read eve %d err_eve %d run %.8x crcgood %d crcbad %d\n", next_eve - first_eve, eve_cnt, crc_err_eve_cnt, cur_exp_run, crc_good, crc_bad); fflush(stdout);
+      time_diff = getTimeSec() - start_time;
+      printf("STATUS : tot eve %d read eve %d err_eve %d run %.8x crcgood %d crcbad %d time %.1lf\n", next_eve - first_eve, eve_cnt, crc_err_eve_cnt, cur_exp_run, crc_good, crc_bad, time_diff); fflush(stdout);
     }
     
     mod_pos = ( cur_pos + size ) % 8;