Index: trunk/MagicSoft/Mars/mcalib/MCalibrateData.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrateData.cc	(revision 7843)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrateData.cc	(revision 7876)
@@ -742,6 +742,7 @@
     for (UInt_t pixidx=0; pixidx<npix; pixidx++)
     {
+        MBadPixelsPix &bpix = (*fBadPixels)[pixidx];
       
-      if (data)
+        if (data)
         {
             const MExtractedSignalPix &sig = (*fSignals)[pixidx];
@@ -749,33 +750,27 @@
             Float_t signal    = 0.;
             Float_t signalErr = 0.;
-
-            if (sig.IsLoGainUsed())
+            Bool_t  ok        = kFALSE;
+
+            // If hi-gain is not saturated and has successfully been
+            // extracted use the hi-gain arrival time
+            if (!sig.IsHiGainSaturated() && sig.IsHiGainValid())
             {
-              if (fHiLoConv[pixidx] < 0.5)
-                {
-                  signal    = sig.GetExtractedSignalHiGain()*1.5;
-                  signalErr = sig.GetExtractedSignalHiGain()*0.5;
-                }
-              else
-                {
-                  const Float_t siglo = sig.GetExtractedSignalLoGain();
-
-                  if (siglo > 0.1) // low-gain signal has been extracted successfully
-                    {
-                      signal    = siglo*fHiLoConv   [pixidx];
-                      signalErr = siglo*fHiLoConvErr[pixidx];
-                    }
-                  else  // low-gain signal has not been extracted successfully, get a rough estimate from the high-gain
-                    {
-                      signal    = sig.GetExtractedSignalHiGain()*1.5;
-                      signalErr = sig.GetExtractedSignalHiGain()*0.5;
-                    }
-                }
+                signal = sig.GetExtractedSignalHiGain();
+                ok = kTRUE;
             }
             else
             {
-                if (sig.GetExtractedSignalHiGain() <= 9999.)
-                    signal = sig.GetExtractedSignalHiGain();
+                // Use lo-gain if it can be used
+                if (sig.IsLoGainValid() && fHiLoConv[pixidx]>0.5)
+                {
+                    signal    = sig.GetExtractedSignalLoGain()*fHiLoConv[pixidx];
+                    signalErr = sig.GetExtractedSignalLoGain()*fHiLoConvErr[pixidx];
+                    ok = kTRUE;
+                }
             }
+
+            // In this cases the signal extraction has failed.
+            if (!ok)
+                bpix.SetUnsuitable(MBadPixelsPix::kUnsuitableEvt);
 
             const Float_t nphot    = signal                         * fCalibConsts  [pixidx];
@@ -784,5 +779,5 @@
             fCerPhotEvt->AddPixel(pixidx, nphot, nphotErr);
 
-            if (!(*fBadPixels)[pixidx].IsUnsuitable())
+            if (!bpix.IsUnsuitable())
             {
                 if (sig.GetNumHiGainSaturated() > 0)
@@ -812,5 +807,5 @@
               const Float_t mean = (*pedestal)[pixidx].GetPedestal()   *pedmeancalib;
               const Float_t rms  = (*pedestal)[pixidx].GetPedestalRms()*pedrmscalib;
-              
+
               (*pedphot)[pixidx].Set(mean, rms);
               pedphot->SetReadyToSave();
Index: trunk/MagicSoft/Mars/mcalib/MCalibrateRelTimes.cc
===================================================================
--- trunk/MagicSoft/Mars/mcalib/MCalibrateRelTimes.cc	(revision 7843)
+++ trunk/MagicSoft/Mars/mcalib/MCalibrateRelTimes.cc	(revision 7876)
@@ -132,10 +132,9 @@
 
         (*fArrivalTime)[idx].SetArrivalTime(signal-offset);
-        (*fArrivalTime)[idx].SetLoGainUsed(sig.IsLoGainUsed());
 
-        // FIXME: This is just a workaround to set pixels to bad for which
-        // the extraction of hi- and lo-gain failed, should be moved to
-        // the extraction
-        if (!sig.IsLoGainValid() && !sig.IsHiGainValid())
+        // FIXME: Is this necessary or explicitly done by the signal-
+        // extractor (may depend on the fact whether independent
+        // extractor are or can be used for signal and arrival time)
+        if (fBadPixels && !sig.IsArrivalTimeValid())
             (*fBadPixels)[idx].SetUnsuitable(MBadPixelsPix::kUnsuitableEvt);
     }
