diff --git a/src/format.h b/src/format.h
index 80974c2fc8698a08a830c0881ebcbf3d2699704e..b7b53a31df3325a6ff8bd503690b900ce46b2b5e 100644
--- a/src/format.h
+++ b/src/format.h
@@ -66,4 +66,11 @@ struct gmt_scales{
   static constexpr float eta_scale = 0.0870/8; //9th MS bit is sign
   static constexpr float phi_range = M_PI;
 };
+
+struct constants{
+  static constexpr uint32_t deadbeef = 0xdeadbeef;
+  static constexpr uint32_t orbit_trailer_size = 32;
+};
+
+
 #endif
diff --git a/src/processor.cc b/src/processor.cc
index ab5c67b36d8abbe90ed45834c07537e67d47fbbe..5d48af77a99c9df0faa8f2e456fdff4d928dff3b 100644
--- a/src/processor.cc
+++ b/src/processor.cc
@@ -13,69 +13,56 @@ StreamProcessor::~StreamProcessor(){
 }
 
 void* StreamProcessor::operator()( void* item ){
+  int bsize = sizeof(block1);
   Slice& input = *static_cast<Slice*>(item);
-  
-  if(input.size()<max_size){
-    //  fprintf(stderr,"transform operator gets slice of %d size\n",input.size());
-
-    
+  Slice& out = *Slice::allocate( 2*max_size);
+  if((input.size()-constants::orbit_trailer_size)%bsize!=0){
+    std::cout << "WARNING::frame size not a multiple of block size. Will be skipped. Size="
+	      << input.size() << " - block size=" << bsize << std::endl;
+    return &out;
   }
-  // 				 (unsigned long long)input.end());
   char* p = input.begin();
-  Slice& out = *Slice::allocate( 2*max_size);
   char* q = out.begin();
   uint32_t counts = 0;
-  int bsize = sizeof(block1);
 
+  
   while(p!=input.end()){
-
+    bool endoforbit = false;
     block1 *bl = (block1*)p;
     int mAcount = 0;
     int mBcount = 0;
-
     uint32_t bxmatch=0;
     uint32_t orbitmatch=0;
+
     bool AblocksOn[8];
     bool BblocksOn[8];
+
     for(unsigned int i = 0; i < 8; i++){
       uint32_t bx = bl->bx[i];
+      if(bx==constants::deadbeef){
+	p += constants::orbit_trailer_size;
+	endoforbit = true;
+	break;
+      }
       bxmatch += (bx==bl->bx[0])<<i;
       uint32_t orbit = bl->orbit[i];
       orbitmatch += (orbit==bl->orbit[0])<<i;
-
-      //      uint32_t phiext = (bl->mu1f[i] >> shifts::phiext) & masks::phiext;
       uint32_t pt = (bl->mu1f[i] >> shifts::pt) & masks::pt;
-      // uint32_t qual = (bl->mu1f[i] >> shifts::qual) & masks::qual;
-      // uint32_t etaext = (bl->mu1f[i] >> shifts::etaext) & masks::etaext;
-      // uint32_t iso = (bl->mu1s[i] >> shifts::iso) & masks::iso;
-      // uint32_t chrg = (bl->mu1s[i] >> shifts::chrg) & masks::chrg;
-      // uint32_t chrgv = (bl->mu1s[i] >> shifts::chrgv) & masks::chrgv;
-      // uint32_t index = (bl->mu1s[i] >> shifts::index) & masks::index;
-      // uint32_t phi = (bl->mu1s[i] >> shifts::phi) & masks::phi;
-      // uint32_t eta = (bl->mu1s[i] >> shifts::eta) & masks::eta;
-      // uint32_t rsv = (bl->mu1s[i] >> shifts::rsv) & masks::rsv;
       AblocksOn[i]=(pt>0);
       if(pt>0){
 	mAcount++;
       }
-      //      phiext = (bl->mu2f[i] >> shifts::phiext) & masks::phiext;
       pt = (bl->mu2f[i] >> shifts::pt) & masks::pt;
-      // qual = (bl->mu2f[i] >> shifts::qual) & masks::qual;
-      // etaext = (bl->mu2f[i] >> shifts::etaext) & masks::etaext;
-      // iso = (bl->mu2s[i] >> shifts::iso) & masks::iso;
-      // chrg = (bl->mu2s[i] >> shifts::chrg) & masks::chrg;
-      // chrgv = (bl->mu2s[i] >> shifts::chrgv) & masks::chrgv;
-      // index = (bl->mu2s[i] >> shifts::index) & masks::index;
-      // phi = (bl->mu2s[i] >> shifts::phi) & masks::phi;
-      // eta = (bl->mu2s[i] >> shifts::eta) & masks::eta;
-      // rsv = (bl->mu2s[i] >> shifts::rsv) & masks::rsv;
       BblocksOn[i]=(pt>0);
-      if(pt>0)mBcount++;
+      if(pt>0){
+	mBcount++;
+      }
     }
-
+    if(endoforbit) continue;
     uint32_t bxcount = std::max(mAcount,mBcount);
     if(bxcount == 0) {
-      p+=sizeof(block1);
+      p+=bsize;
+      std::cout << "WARNING::detected a bx with zero muons, this should not happen" << std::endl; 
       continue;
     }