diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrigObjectMatcher.h b/Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrigObjectMatcher.h
index 9dfa02a6a67b718eaac716511333b09fc04206fa..e1c7231c7b3b76937a155b5dc66ab9edd6413528 100644
--- a/Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrigObjectMatcher.h
+++ b/Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrigObjectMatcher.h
@@ -40,12 +40,20 @@ public:
 
   TrigObjectMatcher(  TrackSelector* selector, 
 		      const std::vector<TrackTrigObject>& objects, 
-		      bool (*select_function)(const TrackTrigObject& t)=0 ) 
+		      bool (*select_function)(const TrackTrigObject& )=0 ) 
     : m_status(1) {         
     const std::vector<TIDA::Track*> tracks = selector->tracks();
     for ( int i=tracks.size() ; i-- ; ) if ( match( tracks[i]->id(), objects, select_function )==false ) selector->delete_track( tracks[i] );
   } 
 
+  TrigObjectMatcher(  TrackSelector* selector, 
+		      const std::vector<TrackTrigObject>& objects, 
+		      bool (*select_function)(const TrackTrigObject& , TIDA::Track* )=0 ) 
+    : m_status(1) {         
+    const std::vector<TIDA::Track*> tracks = selector->tracks();
+    for ( size_t i=tracks.size() ; i-- ; ) if ( match( tracks[i], objects, select_function )==false ) selector->delete_track( tracks[i] );
+  } 
+
 
   virtual ~TrigObjectMatcher() { } 
 
@@ -88,6 +96,22 @@ private:
   } 
 
 
+  bool  match( TIDA::Track* track, const std::vector<TrackTrigObject>& objects, bool (*select_function)(const TrackTrigObject& , TIDA::Track* )=0 ) { 
+    for ( size_t j=objects.size() ; j-- ; ) { 
+      for ( size_t k=objects[j].children().size() ; k-- ; ) {
+	if ( track->id() == objects[j].children()[k] ) {
+	  if ( select_function==0 || select_function(objects[j], track) ) { 
+	    m_objectmap.insert( map_type::value_type( track->id(), &objects[j] ) );
+	    return true;
+	  }
+	  else return false;
+	}
+      } 
+    }
+    return false;
+  } 
+
+
 private:
   
   int      m_status;
diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisUser/Analysis/src/rmain.cxx b/Trigger/TrigAnalysis/TrigInDetAnalysisUser/Analysis/src/rmain.cxx
index c8aefabc09ae57d90bdb02fd5acc8ce72b2f4fc2..00f64b55b8b9f36c51e4380744fd79a82f23a689 100644
--- a/Trigger/TrigAnalysis/TrigInDetAnalysisUser/Analysis/src/rmain.cxx
+++ b/Trigger/TrigAnalysis/TrigInDetAnalysisUser/Analysis/src/rmain.cxx
@@ -349,6 +349,17 @@ double ETmin = 0;
 bool SelectObjectET(const TrackTrigObject& t) { return std::fabs(t.pt())>ETmin; }
 
 
+double ETovPTmin = 0;
+
+bool SelectObjectETovPT(const TrackTrigObject& tobj, TIDA::Track* t=0) {
+  bool ETselection = std::fabs(tobj.pt())>=ETmin;
+  bool ETovPTselection = true;
+  if ( t ) ETovPTselection = std::fabs(tobj.pt()/t->pT())>=ETovPTmin;
+  return ETselection&ETovPTselection;
+}
+
+
+
 int main(int argc, char** argv) 
 {
 
@@ -535,6 +546,7 @@ int main(int argc, char** argv)
 
   if ( inputdata.isTagDefined("pT") )      pT    = inputdata.GetValue("pT");
   if ( inputdata.isTagDefined("ET") )      ETmin = inputdata.GetValue("ET");
+  if ( inputdata.isTagDefined("ETovPT") )  ETovPTmin = inputdata.GetValue("ETovPT");
 
   /// here we set a pTMax value less than pT, then only set the max pT in the 
   /// filter if we read a pTMax value *greater* than pT
@@ -1620,8 +1632,12 @@ int main(int argc, char** argv)
 
 	/// get objects if requested
 
+	//	tom = true;
+
+	ETovPTmin = ETmin;
+
 	if ( chains[ic].rois()[0].objects().size()>0 ) { 
-	  tom = TrigObjectMatcher( &refTracks, chains[ic].rois()[0].objects(), SelectObjectET );
+	  tom = TrigObjectMatcher( &refTracks, chains[ic].rois()[0].objects(), SelectObjectETovPT );
 	}
 
 	break;