diff --git a/src/THcScalerEvtHandler.cxx b/src/THcScalerEvtHandler.cxx
index ebafb21d941e389644319e2a92c526c6f0becc7a..dbdaf6cb200650ac89510a3bcc677e44ff3b0b7d 100644
--- a/src/THcScalerEvtHandler.cxx
+++ b/src/THcScalerEvtHandler.cxx
@@ -75,7 +75,7 @@ static const UInt_t defaultDT = 4;
 THcScalerEvtHandler::THcScalerEvtHandler(const char *name, const char* description)
   : THaEvtTypeHandler(name,description), evcount(0), evcountR(0.0), ifound(0), fNormIdx(-1),
     dvars(0),dvars_prev_read(0), dvarsFirst(0), fScalerTree(0), fUseFirstEvent(kTRUE),
-    fDelayedType(-1), fOnlyBanks(kFALSE)
+    fOnlySyncEvents(kFALSE), fOnlyBanks(kFALSE), fDelayedType(-1)
 {
   fRocSet.clear();
   fModuleSet.clear();
@@ -96,8 +96,12 @@ Int_t THcScalerEvtHandler::End( THaRunBase* r)
   for(std::vector<UInt_t*>::iterator it = fDelayedEvents.begin();
       it != fDelayedEvents.end(); ++it) {
     UInt_t* rdata = *it;
-    AnalyzeBuffer(rdata);
+    AnalyzeBuffer(rdata,kFALSE);
   }
+  if (fDebugFile) *fDebugFile << "scaler tree ptr  "<<fScalerTree<<endl;
+
+  if (fScalerTree) fScalerTree->Fill();
+
   fDelayedEvents.clear();	// Does this free the arrays?
 
   if (fScalerTree) fScalerTree->Write();
@@ -220,11 +224,17 @@ Int_t THcScalerEvtHandler::Analyze(THaEvData *evdata)
     return 1;
   } else { 			// A normal event
     if (fDebugFile) *fDebugFile<<"\n\nTHcScalerEvtHandler :: Debugging event type "<<dec<<evdata->GetEvType()<<endl<<endl;
-    return AnalyzeBuffer(rdata);
+    Int_t ret;
+    if((ret=AnalyzeBuffer(rdata,fOnlySyncEvents))) {
+      if (fDebugFile) *fDebugFile << "scaler tree ptr  "<<fScalerTree<<endl;
+      if (fScalerTree) fScalerTree->Fill();
+    }
+    return ret;
+
   }
 
 }
-Int_t THcScalerEvtHandler::AnalyzeBuffer(UInt_t* rdata)
+Int_t THcScalerEvtHandler::AnalyzeBuffer(UInt_t* rdata, Bool_t onlysync)
 {
 
   // Parse the data, load local data arrays.
@@ -249,15 +259,20 @@ Int_t THcScalerEvtHandler::AnalyzeBuffer(UInt_t* rdata)
       // At any point in the bank where the word is not a matching
       // header, we stop.
       UInt_t tag = (*p>>16) & 0xffff;
+      UInt_t num = (*p) & 0xff;
       UInt_t *pnext = p+*(p-1);	// Next bank
       p++;			// First data word
 
       // Skip over banks that can't contain scalers
       // If SetOnlyBanks(kTRUE) called, fRocSet will be empty
       // so only bank tags matching module types will be considered.
-      if(fRocSet.find(tag)==fRocSet.end()
-	 && fModuleSet.find(tag)==fModuleSet.end()) {
-	p = pnext;		// Fall through to end of this else if
+      if(fModuleSet.find(tag)!=fModuleSet.end()) {
+	if(onlysync && num==0) {
+	  ifound = 0;
+	  return 0;
+	}
+      } else if (fRocSet.find(tag)==fRocSet.end()) {
+	p = pnext;		// Fall through to end of the above else if
       }
 
       // Look for normalization scaler module first.
@@ -496,10 +511,6 @@ Int_t THcScalerEvtHandler::AnalyzeBuffer(UInt_t* rdata)
   //  
   for (size_t j=0; j<scalers.size(); j++) scalers[j]->Clear("");
   
-  if (fDebugFile) *fDebugFile << "scaler tree ptr  "<<fScalerTree<<endl;
-
-  if (fScalerTree) fScalerTree->Fill();
-
   return 1;
 }
 
diff --git a/src/THcScalerEvtHandler.h b/src/THcScalerEvtHandler.h
index 5e151bd601e2a5379dd6321ab487e79dabc0ffa2..0a406ae55dac14fd64a564182c3d891465c95c19 100644
--- a/src/THcScalerEvtHandler.h
+++ b/src/THcScalerEvtHandler.h
@@ -35,13 +35,14 @@ public:
    virtual ~THcScalerEvtHandler();
 
    Int_t Analyze(THaEvData *evdata);
-   Int_t AnalyzeBuffer(UInt_t *rdata);
+   Int_t AnalyzeBuffer(UInt_t *rdata, Bool_t onlysync);
    virtual EStatus Init( const TDatime& run_time);
    virtual Int_t   ReadDatabase(const TDatime& date );
    virtual Int_t End( THaRunBase* r=0 );
    virtual void SetUseFirstEvent(Bool_t b = kFALSE) {fUseFirstEvent = b;}
    virtual void SetDelayedType(int evtype);
    virtual void SetOnlyBanks(Bool_t b = kFALSE) {fOnlyBanks = b;fRocSet.clear();}
+   virtual void SetOnlyUseSyncEvents(Bool_t b=kFALSE) {fOnlySyncEvents = b;}
 
 private:
 
@@ -73,8 +74,9 @@ private:
    Double_t *dvarsFirst;
    TTree *fScalerTree;
    Bool_t fUseFirstEvent;
-   Int_t fDelayedType;
+   Bool_t fOnlySyncEvents;
    Bool_t fOnlyBanks;
+   Int_t fDelayedType;
    std::vector<UInt_t*> fDelayedEvents;
    std::set<UInt_t> fRocSet;
    std::set<UInt_t> fModuleSet;