diff --git a/JugReco/src/components/SimpleClustering.cpp b/JugReco/src/components/SimpleClustering.cpp
index e1da5f839f09b2cc7d5af08e1a206e2a193356af..d6c2d1ae8bf00ed353cf83bf47dd51b9453be1d2 100644
--- a/JugReco/src/components/SimpleClustering.cpp
+++ b/JugReco/src/components/SimpleClustering.cpp
@@ -65,54 +65,85 @@ namespace Jug::Reco {
       // Create output collections
       auto& clusters = *m_outputClusters.createAndPut();
 
-      std::vector<eic::CalorimeterHit> first_cluster_hits  ;
-      std::vector<eic::CalorimeterHit> remaining_hits  ;
-      double max_dist = m_maxDistance.value();
-
-      debug() << " max_dist = " << max_dist << endmsg;
+      std::vector<eic::CalorimeterHit> hits_A;
+      std::vector<eic::CalorimeterHit> hits_B;
+      std::vector<eic::CalorimeterHit>& the_hits  = hits_A;
+      std::vector<eic::CalorimeterHit>& remaining_hits = hits_B;
+      double                           max_dist = m_maxDistance.value();
 
       eic::CalorimeterHit ref_hit;
       ref_hit.energy(0.0);
       for (const auto& h : hits) {
-        if(h.energy() > ref_hit.energy()){
+        if (h.energy() > ref_hit.energy()) {
           ref_hit = h;
         }
+        the_hits.push_back(h.clone());
       }
-      debug() << " ref_hit" << ref_hit << endmsg;
 
-      //auto ref_hit = *(std::max_element(std::begin(hits), std::end(hits),
-      //                                [](const auto& h1, const auto& h2) { return h1.energy() < h2.energy(); }));
+      debug() << " max_dist = " << max_dist << endmsg;
+      bool continue_clustering = true;
 
-      //std::partition_copy(std::begin(hits), std::end(hits), std::begin(first_cluster_hits), std::begin(remaining_hits),
-      //                    [=](const auto& h) {
-      //                      return (std::hypot(h.x() - ref_hit.x(), h.y() - ref_hit.y(), h.z() - ref_hit.z()) <
-      //                              max_dist);
-      //                    });
+      while (continue_clustering) {
 
-      for (const auto& h : hits) {
-        if(std::hypot(h.x() - ref_hit.x(), h.y() - ref_hit.y(), h.z() - ref_hit.z()) < max_dist){
-          first_cluster_hits.push_back(h.clone());
-        } else {
-          remaining_hits.push_back(h.clone());
+        std::vector<eic::CalorimeterHit> cluster_hits;
+        debug() << " ref_hit" << ref_hit << endmsg;
+
+        // auto ref_hit = *(std::max_element(std::begin(hits), std::end(hits),
+        //                                [](const auto& h1, const auto& h2) { return h1.energy() < h2.energy(); }));
+
+        // std::partition_copy(std::begin(hits), std::end(hits), std::begin(first_cluster_hits),
+        // std::begin(remaining_hits),
+        //                    [=](const auto& h) {
+        //                      return (std::hypot(h.x() - ref_hit.x(), h.y() - ref_hit.y(), h.z() - ref_hit.z()) <
+        //                              max_dist);
+        //                    });
+
+        for (const auto& h : the_hits) {
+          if (std::hypot(h.x() - ref_hit.x(), h.y() - ref_hit.y(), h.z() - ref_hit.z()) < max_dist) {
+            cluster_hits.push_back(h.clone());
+          } else {
+            remaining_hits.push_back(h.clone());
+          }
         }
-      }
 
-      debug() << " first cluster size " << first_cluster_hits.size() << endmsg;
-      double total_energy = std::accumulate(std::begin(first_cluster_hits), std::end(first_cluster_hits), 0.0,
-                                            [](double t,const eic::CalorimeterHit& h1 ) { return (t + h1.energy()); });
-      debug() << " total_energy = " << total_energy << endmsg;
-
-      eic::Cluster cluster0;
-      //debug() << " cluster0 = " << cluster0 << endmsg;
-      //eic::Cluster cluster1  = std::accumulate(std::begin(first_cluster_hits), std::end(first_cluster_hits), cluster0,
-      for (const auto& h : first_cluster_hits) {
-        cluster0.energy(cluster0.energy() + h.energy());
-        cluster0.x(cluster0.x() + h.energy() * h.x()/total_energy);
-        cluster0.y(cluster0.y() + h.energy() * h.y()/total_energy);
-        cluster0.z(cluster0.z() + h.energy() * h.z()/total_energy);
+        debug() << " cluster size " << cluster_hits.size() << endmsg;
+        double total_energy =
+            std::accumulate(std::begin(cluster_hits), std::end(cluster_hits), 0.0,
+                            [](double t, const eic::CalorimeterHit& h1) { return (t + h1.energy()); });
+        debug() << " total_energy = " << total_energy << endmsg;
+
+        eic::Cluster cluster0;
+        // debug() << " cluster0 = " << cluster0 << endmsg;
+        // eic::Cluster cluster1  = std::accumulate(std::begin(first_cluster_hits), std::end(first_cluster_hits),
+        // cluster0,
+        for (const auto& h : cluster_hits) {
+          cluster0.energy(cluster0.energy() + h.energy());
+          cluster0.x(cluster0.x() + h.energy() * h.x() / total_energy);
+          cluster0.y(cluster0.y() + h.energy() * h.y() / total_energy);
+          cluster0.z(cluster0.z() + h.energy() * h.z() / total_energy);
+        }
+        debug() << " cluster = " << cluster0 << endmsg;
+        clusters.push_back(cluster0);
+
+
+        if((remaining_hits.size() > 5) && (clusters.size() < 10) ){
+          ref_hit.energy(0.0);
+          for (const auto& h : remaining_hits) {
+            if (h.energy() > ref_hit.energy()) {
+              ref_hit = h;
+            }
+          }
+
+          std::swap( remaining_hits, the_hits);
+          remaining_hits.clear();
+
+        } else {
+          continue_clustering = false;
+          break;
+
+        }
       }
-      debug() << " cluster0 = " << cluster0 << endmsg;
-      clusters.push_back(cluster0);
+        debug() << " clusters found: " << clusters.size() << endmsg;
 
       return StatusCode::SUCCESS;
       }