Index: trunk/Mars/mimage/MImgCleanTime.cc
===================================================================
--- trunk/Mars/mimage/MImgCleanTime.cc	(revision 17832)
+++ trunk/Mars/mimage/MImgCleanTime.cc	(revision 17833)
@@ -93,23 +93,22 @@
 }
 
-Island MImgCleanTime::CalcIsland(MSignalPix &pix1, int idx1)
-{
-    pix1.SetIdxIsland(idx1);
-
-    const Float_t tm0 = pix1.GetArrivalTime();
-
-    Island island(pix1.GetNumPhotons(), tm0);
-
-    const MGeom &gpix1 = (*fCam)[idx1];
+Island MImgCleanTime::CalcIsland(MSignalPix &pix1, const MGeom &gpix1, const uint16_t &island1)
+{
+    pix1.SetIdxIsland(island1);
+
+    const Float_t time1 = pix1.GetArrivalTime();
+
+    Island island(pix1.GetNumPhotons(), time1);
+
     for (UInt_t i=0; i<gpix1.GetNumNeighbors(); i++)
     {
-        const int n = gpix1.GetNeighbor(i);
-
-        MSignalPix &pix2 = (*fEvt)[n];
-
-        const Int_t idx2 = pix2.GetIdxIsland();
-        if (idx2>=0)
+        const Int_t idx2 = gpix1.GetNeighbor(i);
+
+        MSignalPix &pix2 = (*fEvt)[idx2];
+
+        const Int_t island2 = pix2.GetIdxIsland();
+        if (island2>=0)
         {
-            if (idx1==idx2)
+            if (island1==island2)
                 continue;
 
@@ -118,13 +117,13 @@
             const auto it = fContacts.rbegin();
             if (it==fContacts.rend() ||
-                (it->first!=idx1 && it->second!=idx2))
-                fContacts.emplace_back(idx1, idx2);
+                (it->first!=island1 && it->second!=island2))
+                fContacts.emplace_back(island1, island2);
 
             continue;
         }
 
-        const Float_t tm1 = pix2.GetArrivalTime();
-        if (fabs(tm0-tm1)<fDeltaT) // FIXME: Scale with distance?
-            island += CalcIsland(pix2, idx2);
+        const Float_t time2 = pix2.GetArrivalTime();
+        if (fabs(time2-time1)<fDeltaT) // FIXME: Scale with distance?
+            island += CalcIsland(pix2, (*fCam)[idx2], island1);
     }
 
@@ -154,13 +153,13 @@
     // Start with island idx==0
     UShort_t idx = 0;
-    for (UInt_t i=0; i<1440; i++)
-    {
-        MSignalPix &pix = (*fEvt)[i];
+    for (UInt_t i=0; i<npix; i++)
+    {
+        MSignalPix &spix = (*fEvt)[i];
 
         // The following might be much more efficient and faster
         // if we omit small counted and sized islands already,
         // but what is the disadvantage?
-        if (pix.GetIdxIsland()<0)
-            fIslands.emplace_back(CalcIsland(pix, idx++));
+        if (spix.GetIdxIsland()<0)
+            fIslands.emplace_back(CalcIsland(spix, (*fCam)[i], idx++));
     }
 
@@ -199,16 +198,36 @@
     }
 
-    for (UInt_t i=0; i<1440; i++)
+    uint16_t num_islands = 0;
+    double   size_main   = 0;
+    double   size_tot    = 0;
+
+    vector<bool> used(fIslands.size());
+    for (UInt_t i=0; i<npix; i++)
     {
         MSignalPix &pix = (*fEvt)[i];
 
         // At the end every pixel has an island assigned
-        const Short_t ii = pix.GetIdxIsland();
-
-        const Island &island = fIslands[fLut[ii]];
-
-        if (island.count>fMinCount && island.size>fMinSize)
-            pix.SetPixelUsed();
-    }
+        const Short_t ii = fLut[pix.GetIdxIsland()];
+
+        const Island &island = fIslands[ii];
+
+        if (island.count<=fMinCount || island.size<=fMinSize)
+            continue;
+
+        if (!used[ii])
+        {
+            used[ii] = true;
+            num_islands++;
+
+            size_tot += island.size;
+            if (island.size>size_main)
+                size_main = island.size;
+        }
+
+        pix.SetPixelUsed();
+        pix.SetPixelCore();
+    }
+
+    fEvt->SetIslandInfo(num_islands, size_main, size_tot-size_main);
 
     return kTRUE;
Index: trunk/Mars/mimage/MImgCleanTime.h
===================================================================
--- trunk/Mars/mimage/MImgCleanTime.h	(revision 17832)
+++ trunk/Mars/mimage/MImgCleanTime.h	(revision 17833)
@@ -10,4 +10,5 @@
 #endif
 
+class MGeom;
 class MGeomCam;
 class MSignalPix;
@@ -47,12 +48,9 @@
     TString fNameSignalCam;  // name of the 'MSignalCam' container
 
-    std::vector<float>    fSignal;
-    std::vector<float>    fTime;
-    std::vector<int16_t>  fIsland;
-    std::vector<Island>   fIslands;
+    std::vector<Island> fIslands;
     std::list<std::pair<uint16_t, uint16_t>> fContacts;
     std::vector<uint16_t> fLut;
 
-    Island CalcIsland(MSignalPix &, int);
+    Island CalcIsland(MSignalPix &, const MGeom &, const uint16_t &);
 
     // MParContainer
