Index: trunk/Mars/mextralgo/MExtralgoSpline.cc
===================================================================
--- trunk/Mars/mextralgo/MExtralgoSpline.cc	(revision 13002)
+++ trunk/Mars/mextralgo/MExtralgoSpline.cc	(revision 13003)
@@ -289,5 +289,5 @@
         return 0;
 
-    if (fExtractionType == kAmplitude)
+    if (!(fExtractionType&kIntegral))
     {
         const Int_t   pos = gRandom->Integer(fNum-1);
@@ -320,24 +320,25 @@
     // --- End NEW ---
 
-    if (fExtractionType == kAmplitude)
-    {
-        fTime      = maxpos;
-        fTimeDev   = 0;
+    if (fExtractionType&kIntegral)
+    {
+        fSignal    = CalcIntegral(maxpos);
+        fSignalDev = 0;  // means: is valid
+    }
+    else
+    {
         fSignal    = fHeight;
         fSignalDev = 0;  // means: is valid
-        return;
-    }
-
-    fSignal    = CalcIntegral(maxpos);
-    fSignalDev = 0;  // means: is valid
-
-    if (fExtractionType==kIntegralRel && fHeightTm<0)
-    {
-        fTime = maxpos;
+    }
+
+    // Position of maximum
+    if (((fExtractionType&kTimeRel) && fHeightTm<0) || (fExtractionType&kMaximum))
+    {
+        fTime    = maxpos;
         fTimeDev = 0;
         return;
     }
 
-    const Float_t h = fExtractionType==kIntegralAbs ? fHeightTm : fHeight*fHeightTm;
+    // Position of fraction height or absolute height
+    const Float_t h = (fExtractionType&kTimeRel) ? fHeight*fHeightTm : fHeightTm;
 
     // Search downwards for fHeight/2
Index: trunk/Mars/mextralgo/MExtralgoSpline.h
===================================================================
--- trunk/Mars/mextralgo/MExtralgoSpline.h	(revision 13002)
+++ trunk/Mars/mextralgo/MExtralgoSpline.h	(revision 13003)
@@ -12,5 +12,17 @@
 {
 public:  
-    enum ExtractionType_t { kAmplitude, kIntegralRel, kIntegralAbs };    //! Possible time and charge extraction types
+    enum ExtractionType_t
+    {
+        kIntegral = BIT(0),
+        kTimeRel  = BIT(1),
+        kMaximum  = BIT(2),
+
+        // For backward compatibility
+        kAmplitudeAbs = 0,                   // Height of maximum, absolute height leading edge
+        kAmplitudeRel = kTimeRel,            // Height of maximum, relative height leading edge
+        kAmplitude    = kMaximum,            // Position and height of maximum
+        kIntegralAbs  = kIntegral,           // Integral, absolute height leading edge
+        kIntegralRel  = kIntegral|kTimeRel,  // Integral, relative height leading edge
+    };
 
 private:
Index: trunk/Mars/msignal/MExtractTimeAndChargeSpline.cc
===================================================================
--- trunk/Mars/msignal/MExtractTimeAndChargeSpline.cc	(revision 13002)
+++ trunk/Mars/msignal/MExtractTimeAndChargeSpline.cc	(revision 13003)
@@ -225,4 +225,6 @@
   {
   case MExtralgoSpline::kAmplitude:
+  case MExtralgoSpline::kAmplitudeRel:
+  case MExtralgoSpline::kAmplitudeAbs:
       SetResolutionPerPheHiGain(0.053);
       SetResolutionPerPheLoGain(0.016);
@@ -303,4 +305,6 @@
     {
     case MExtralgoSpline::kAmplitude:
+    case MExtralgoSpline::kAmplitudeRel:
+    case MExtralgoSpline::kAmplitudeAbs:
         fNumHiGainSamples  = 1.;
         fNumLoGainSamples  = fLoGainLast ? 1. : 0.;
Index: trunk/Mars/msignal/MExtractTimeAndChargeSpline.h
===================================================================
--- trunk/Mars/msignal/MExtractTimeAndChargeSpline.h	(revision 13002)
+++ trunk/Mars/msignal/MExtractTimeAndChargeSpline.h	(revision 13003)
@@ -82,4 +82,6 @@
     }
 
+    void SetHeightTm(const Double_t h) { fHeightTm = h; }
+
     void SetLoGainStretch(const Float_t f=fgLoGainStretch) { fLoGainStretch = f;   }
 
