Index: trunk/MagicSoft/Mars/mextralgo/MExtralgoDigitalFilter.cc
===================================================================
--- trunk/MagicSoft/Mars/mextralgo/MExtralgoDigitalFilter.cc	(revision 8480)
+++ trunk/MagicSoft/Mars/mextralgo/MExtralgoDigitalFilter.cc	(revision 8500)
@@ -31,9 +31,14 @@
 #include "MExtralgoDigitalFilter.h"
 
+#include <TRandom.h>
+
 using namespace std;
 
-Float_t MExtralgoDigitalFilter::ExtractNoise(Int_t iter) const
+Float_t MExtralgoDigitalFilter::ExtractNoise() const
 {
-    return Eval(fWeightsAmp, 0, iter-fWeightsPerBin/2);
+    const Int_t pos  = gRandom->Integer(fNum-fWindowSize+1);
+    const Int_t frac = gRandom->Integer(fWeightsPerBin);
+
+    return Eval(fWeightsAmp, pos, frac-fWeightsPerBin/2);
 }
 
Index: trunk/MagicSoft/Mars/mextralgo/MExtralgoDigitalFilter.h
===================================================================
--- trunk/MagicSoft/Mars/mextralgo/MExtralgoDigitalFilter.h	(revision 8480)
+++ trunk/MagicSoft/Mars/mextralgo/MExtralgoDigitalFilter.h	(revision 8500)
@@ -161,5 +161,5 @@
     void GetTime(Float_t &sig, Float_t &dsig) const   { sig=fTime; dsig=fTimeDev; }
 
-    Float_t ExtractNoise(Int_t iter) const;
+    Float_t ExtractNoise() const;
     void Extract(Int_t maxpos=-1);
 
Index: trunk/MagicSoft/Mars/mextralgo/MExtralgoSpline.cc
===================================================================
--- trunk/MagicSoft/Mars/mextralgo/MExtralgoSpline.cc	(revision 8480)
+++ trunk/MagicSoft/Mars/mextralgo/MExtralgoSpline.cc	(revision 8500)
@@ -225,17 +225,20 @@
 }
 
-Float_t MExtralgoSpline::ExtractNoise(/*Int_t iter*/)
+Float_t MExtralgoSpline::ExtractNoise()
 {
     if (fNum<5)
         return 0;
 
-    // FIXME: Shell we keep the extraction inside one slice
-    // or randomize it along the extraction window?
-    const Float_t nsx = gRandom->Uniform(); //iter * fResolution;
-
     if (fExtractionType == kAmplitude)
-        return Eval(2, nsx);
+    {
+        const Int_t   pos = gRandom->Integer(fNum-1);
+        const Float_t nsx = gRandom->Uniform();
+        return Eval(pos, nsx);
+    }
     else
-        return CalcIntegral(2 + nsx);
+    {
+        const Float_t pos = gRandom->Uniform(fNum-1-fRiseTime-fFallTime)+fRiseTime;
+        return CalcIntegral(pos);
+    }
 }
 
