Index: /trunk/Mars/melectronics/MAvalanchePhotoDiode.cc
===================================================================
--- /trunk/Mars/melectronics/MAvalanchePhotoDiode.cc	(revision 17322)
+++ /trunk/Mars/melectronics/MAvalanchePhotoDiode.cc	(revision 17323)
@@ -240,35 +240,11 @@
     Float_t n = weight;
 
-    /*
-     // Check if a photon in a neighboring cell is produced (crosstalk)
-     while (gRandom->Rndm()<fCrosstalkProb)
-     {
+    // Get random number of emitted and possible converted crosstalk photons
+    const UInt_t rndm = gRandom->Poisson(prob);
+
+    for (int i=0; i<rndm; i++)
+    {
         // Get a random neighbor which is hit.
         switch (gRandom->Integer(4))
-        {
-        case 0: x++; if (x>fHist.GetNbinsX()) continue; break;
-        case 1: x--; if (x<1) continue;                 break;
-        case 2: y++; if (y>fHist.GetNbinsY()) continue; break;
-        case 3: y--; if (y<1) continue;                 break;
-        }
-
-        n += HitCellImp(x, y, t);
-     }
-     */
-
-
-    //for (int i=0; i<1; i++)
-    while (1)
-    {
-        const Double_t rndm = gRandom->Rndm();
-        if (rndm>=prob/*fCrosstalkProb*/)
-            break;
-
-        // We can re-use the random number because it is uniformely
-        // distributed. This saves cpu power
-        const Int_t dir = TMath::FloorNint(4*rndm/prob/*fCrosstalkProb*/);
-
-        // Get a random neighbor which is hit.
-        switch (dir)
         {
         case 0: if (x<fHist.GetNbinsX()) n += HitCellImp(x+1, y, t); break;
@@ -277,7 +253,4 @@
         case 3: if (y>1)                 n += HitCellImp(x, y-1, t); break;
         }
-
-        // In the unlikely case the calculated direction is out-of-range,
-        // i.e. <0 or >3, we would just try to fill the same cell again which
     }
 
