diff --git a/reco/L1/L1Algo/L1Extrapolation.cxx b/reco/L1/L1Algo/L1Extrapolation.cxx
index 4ca1c944d55b606760545bfb194941ed3ed0c701..e22ef374bcc0f49577f16c0772e4ca94dc9ea4c2 100644
--- a/reco/L1/L1Algo/L1Extrapolation.cxx
+++ b/reco/L1/L1Algo/L1Extrapolation.cxx
@@ -44,7 +44,7 @@ void L1ExtrapolateAnalytic(L1TrackPar& T,  // input track parameters (x,y,tx,ty,
   const fvec qp = T.qp;
   fvec dz       = (z_out - T.z);
 
-  if (w) { dz = masked(dz, fvec::Zero() < *w); }
+  if (w) { dz.setZero(*w <= fvec::Zero()); }
 
   const fvec dz2 = dz * dz;
   const fvec dz3 = dz2 * dz;
@@ -687,7 +687,7 @@ void L1ExtrapolateTime(L1TrackPar& T,  // input track parameters (x,y,tx,ty,Q/p)
                        fvec timeInfo)
 {
   cnst c_light = 29.9792458;
-  dz           = masked(dz, timeInfo >= 0);
+  dz.setZero(timeInfo < 0);  //TODO: SG: bug: must be <=0
 
   T.t += dz * sqrt((T.tx * T.tx) + (T.ty * T.ty) + 1) / c_light;
 
diff --git a/reco/L1/L1Algo/L1Filtration.h b/reco/L1/L1Algo/L1Filtration.h
index 4aecad1227174fc88e2f367019508605a58ccb5c..e6b336bfb8851a9ddc69b0e0d29f70d29ab04f72 100644
--- a/reco/L1/L1Algo/L1Filtration.h
+++ b/reco/L1/L1Algo/L1Filtration.h
@@ -176,7 +176,7 @@ inline void L1FilterNoField(L1TrackPar& T, const L1UMeasurementInfo& info, fvec
   F5 = info.cos_phi * T.C50 + info.sin_phi * T.C51;
 
   //const fmask maskDoFilter = (HCH < info.sigma2 * 16.f);
-  const fmask maskDoFilter(MaskOne());
+  const fmask maskDoFilter(fmask::One());
 
   //TODO: SG:  try this
   //fvec wi          = w / (info.sigma2 + 1.0000001f * HCH);
diff --git a/reco/L1/L1Algo/L1TrackFitter.cxx b/reco/L1/L1Algo/L1TrackFitter.cxx
index 3711195bdb886ec71c150b16fe87d99737e6c7bf..0520037c43ef3d168b3cd6cc3bd457801d62a9a7 100644
--- a/reco/L1/L1Algo/L1TrackFitter.cxx
+++ b/reco/L1/L1Algo/L1TrackFitter.cxx
@@ -531,9 +531,9 @@ void L1Algo::L1KFTrackFitter()
         fld.Set(fldB0, fldZ0, fldB1, fldZ1, fldB2, fldZ2);
 
         fmask initialised = (z[i] < z_end) & (z_start <= z[i]);
-        fvec w1           = masked(w[i], initialised);
-        fvec w1_time      = masked(w_time[i], initialised);
-        fvec wIn          = masked(fvec::One(), initialised);
+        fvec w1           = iif(initialised, w[i], fvec::Zero());
+        fvec w1_time      = iif(initialised, w_time[i], fvec::Zero());
+        fvec wIn          = iif(initialised, fvec::One(), fvec::Zero());
 
         fld1 = fld;
 
@@ -693,9 +693,9 @@ void L1Algo::L1KFTrackFitter()
         fld.Set(fldB0, fldZ0, fldB1, fldZ1, fldB2, fldZ2);
 
         fmask initialised = (z[i] <= z_end) & (z_start < z[i]);
-        fvec w1           = masked(w[i], initialised);
-        fvec w1_time      = masked(w_time[i], initialised);
-        fvec wIn          = masked(fvec::One(), initialised);
+        fvec w1           = iif(initialised, w[i], fvec::Zero());
+        fvec w1_time      = iif(initialised, w_time[i], fvec::Zero());
+        fvec wIn          = iif(initialised, fvec::One(), fvec::Zero());
 
         L1Extrapolate(T, z[i], qp0, fld, &w1);
 
@@ -1003,8 +1003,8 @@ void L1Algo::L1KFTrackFitterMuch()
 
       for (++i; i < nHits; i++) {
         fmask initialised = (z[i] <= z_end) & (z_start < z[i]);
-        fvec w1           = masked(w[i], initialised);
-        fvec wIn          = masked(fvec::One(), initialised);
+        fvec w1           = iif(initialised, w[i], fvec::Zero());
+        fvec wIn          = iif(initialised, fvec::One(), fvec::Zero());
 
         fldZ0 = z[i];
         dz    = (fldZ1 - fldZ0);
@@ -1095,8 +1095,8 @@ void L1Algo::L1KFTrackFitterMuch()
             // T1.ExtrapolateLine1( z, &w2, v_mc);
 
             T1.ExtrapolateLine(z_cur, &w2);
-            nofSteps1 += masked(fvec::One(), !maskLastStep);
-            w2 = masked(w2, !maskLastStep);
+            nofSteps1 += iif(!maskLastStep, fvec::One(), fvec::Zero());
+            w2 = iif(!maskLastStep, w2, fvec::Zero());
 
             //          T1.ExtrapolateLine( z_last, &w1);
             //          L1ExtrapolateLine( T, z_last);
@@ -1115,7 +1115,7 @@ void L1Algo::L1KFTrackFitterMuch()
               T1.L1AddThickMaterial(fParameters.GetMaterialThickness(i, T1.fx, T1.fy) / (nofSteps + fvec(1)), qp01, wIn,
                                     sta[i].materialInfo.thick / (nofSteps + fvec(1)), 1);
 
-              wIn = masked(wIn, !maskLastStep);
+              wIn = iif(!maskLastStep, wIn, fvec::Zero());
             }
             else {
               fit.L1AddMaterial(T, sta[i].materialInfo, qp0, wIn);
@@ -1199,8 +1199,8 @@ void L1Algo::L1KFTrackFitterMuch()
       for (--i; i >= 0; i--) {
 
         fmask initialised = (z[i] < z_end) & (z_start <= z[i]);
-        fvec w1           = masked(w[i], initialised);
-        fvec wIn          = masked(fvec::One(), initialised);
+        fvec w1           = iif(initialised, w[i], fvec::Zero());
+        fvec wIn          = iif(initialised, fvec::One(), fvec::Zero());
 
         if (i >= fNfieldStations - 1) {
 
@@ -1235,7 +1235,7 @@ void L1Algo::L1KFTrackFitterMuch()
             //               T1.ExtrapolateLine1( z_cur, &w2, v_mc);
 
             T1.ExtrapolateLine(z_cur, &w2);
-            nofSteps1 += masked(fvec::One(), !maskLastStep);
+            nofSteps1 += iif(!maskLastStep, fvec::One(), fvec::Zero());
 
             // TODO: Unify the selection of energy loss correction! (S.Zharko)
             if constexpr (L1Constants::control::kIfUseRadLengthTable) {
@@ -1252,7 +1252,7 @@ void L1Algo::L1KFTrackFitterMuch()
               T1.L1AddThickMaterial(fParameters.GetMaterialThickness(i, T1.fx, T1.fy) / (nofSteps + fvec(1)), qp01, w2,
                                     sta[i].materialInfo.thick / (nofSteps + fvec(1)), 0);
 
-              w2 = masked(w2, !maskLastStep);
+              w2 = iif(!maskLastStep, w2, fvec::Zero());
             }
             else {
               fit.L1AddMaterial(T, sta[i].materialInfo, qp0, w2);
@@ -1556,7 +1556,7 @@ void L1Algo::GuessVec(L1TrackParFit& t, fvec* xV, fvec* yV, fvec* zV, fvec* Sy,
   t.fy  = (A2 * b0 - A1 * b1) * det;
   t.fty = (-A1 * b0 + A0 * b1) * det;
   t.fqp = -L * c_light_i / sqrt(txtx1 + t.fty * t.fty);
-  if (timeV) { t.ft = masked(time, nhits > 0); }
+  if (timeV) { t.ft = iif(nhits > fvec::Zero(), time, fvec::Zero()); }
 
   t.fz = z0;
 }
diff --git a/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.cxx b/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.cxx
index b531965401a974ca26a37b860ed32b1600d983ff..cdc1f7e82cd7f962dbbfb8651121fb509cc1605c 100644
--- a/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.cxx
+++ b/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.cxx
@@ -305,7 +305,7 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E
     fvec S0, S1, S2, S3, S4, S5, S6, S7;
     fvec X = 0, Y = 0, R = 0, R2 = 0;
 
-    fmask validRing(MaskOne());  // mask of the valid rings
+    fmask validRing(fmask::One());  // mask of the valid rings
 
     fvec SearchAreaSize = 0;  // number of hits to fit and search ring
     fvec PickUpAreaSize = 0;
@@ -455,7 +455,7 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E
         S4 += w * sHit.S4;
       }
 
-    } while (NotEmptyFmask(Dmax > fvec(0.)));
+    } while ((Dmax > fvec(0.)).isNotEmpty());
 
 
 #ifdef PRINT_TIMING
@@ -505,7 +505,7 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E
 #ifdef PRINT_TIMING
     GetTimer("Ring finding: Store ring").Start(0);
 #endif  // PRINT_TIMING
-    if (ISUNLIKELY(EmptyFmask(validRing))) continue;
+    if (ISUNLIKELY(validRing.isEmpty())) continue;
 
       ///////////
 #if 0  // TODO 1
@@ -534,7 +534,7 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E
         ringV.localIHits.push_back( iif( validHit, sHit.localIndex, fvec(-1.) ) );
         ringV.NHits += mask2int(validHit);
         validHit = validHit & ( d <= ShadowSize ); // TODO check *4
-        if ( Empty (validHit) ) continue; // CHECKME
+        if ( validHit.isEmpty() ) continue; // CHECKME
         Shadow.push_back( iif( validHit, sHit.localIndex, fvec(-1.) ) );
       }
       for( int ipu = 0; ipu < MaxPickUpAreaSize; ipu++ ) {
@@ -545,12 +545,12 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E
         const fvec dy = puHit.y - ringV.y;
         const fvec d = fabs( sqrt(dx*dx+dy*dy) - ringV.r );
         validHit = validHit & ( d <= HitSize );
-        if ( Empty (validHit) ) continue;
+        if ( validHit.isEmpty() ) continue;
         ringV.chi2 += d*d;
         ringV.localIHits.push_back( iif( validHit, puHit.localIndex, fvec(-1.) ) );
         ringV.NHits += mask2int(validHit);
         validHit = validHit & ( d <= ShadowSize ); // TODO check *4
-        if ( Empty (validHit) ) continue; // CHECKME
+        if ( validHit.isEmpty() ) continue; // CHECKME
         Shadow.push_back( iif( validHit, puHit.localIndex, fvec(-1.) ) );
       }
 
diff --git a/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.h b/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.h
index 9a52d27f560300a13a74faa1946fb78438dae160..f8248257ea8a2b61e1f3c511da180be73263c2f2 100644
--- a/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.h
+++ b/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.h
@@ -114,7 +114,7 @@ class CbmL1RichENNRingFinderParallel : public CbmRichRingFinder {
       , Cx(0)
       , Cy(0)
       ,  // coefficients for the parameter space
-      on_ring(MaskOne()) {};
+      on_ring(fmask::One()) {};
 
     // variables for local search:
     fvec lx, ly, lr2;         // local coordinates
diff --git a/reco/L1/vectors/L1vecPseudo.h b/reco/L1/vectors/L1vecPseudo.h
index 2d30cea3f020a085a421430ebf7cdcf6d59af54e..f107f5b5e41d85f4a543bfc4f6e3b0d290f8179f 100644
--- a/reco/L1/vectors/L1vecPseudo.h
+++ b/reco/L1/vectors/L1vecPseudo.h
@@ -80,6 +80,18 @@ public:
     return z;
   }
 
+  bool isEmpty()
+  {
+    bool ret = true;
+    for (int i = 0; i < fvecLen; i++) {
+      ret = ret && (!v[i]);
+    }
+    return ret;
+  }
+
+  bool isNotEmpty() { return !isEmpty(); }
+
+
   friend std::ostream& operator<<(std::ostream& strm, const fmask& a)
   {
     strm << '[';
@@ -130,6 +142,13 @@ public:
 
   fscal operator[](int i) const { return v[i]; }
 
+  void setZero(fmask m)
+  {
+    for (int i = 0; i < Size; i++) {
+      if (m[i]) { v[i] = 0.; }
+    }
+  }
+
 #define _f1(A, F)                                                                                                      \
   fvec z;                                                                                                              \
   for (int i = 0; i < Size; i++) {                                                                                     \
@@ -247,9 +266,6 @@ public:
 #define _fvecalignment __attribute__((aligned(fvec::Size * sizeof(fscal))))
 
 
-inline fmask MaskOne() { return fmask::One(); }
-inline fmask MaskZero() { return fmask::One(); }
-
 inline fvec fabs(const fvec& a) { return abs(a); }
 
 inline fvec masked(const fvec& a, const fmask& mask) { return iif(mask, a, fvec::Zero()); }
@@ -282,16 +298,6 @@ inline bool IsNanAny(const fvec& v)
   return ret;
 }
 
-inline bool EmptyFmask(const fmask& a)
-{
-  bool ret = true;
-  for (int i = 0; i < fvecLen; i++) {
-    ret = ret && (!bool(a[i]));
-  }
-  return ret;
-}
-
-inline bool NotEmptyFmask(const fmask& a) { return !EmptyFmask(a); }
 
 #include "std_alloc.h"
 
diff --git a/reco/L1/vectors/L1vecVc.h b/reco/L1/vectors/L1vecVc.h
index 910d0bb7148c641048e9ffcf5bf2d0668ab8c4e7..f20939f5deb03137c17e76df8f04d5b6a09344c0 100644
--- a/reco/L1/vectors/L1vecVc.h
+++ b/reco/L1/vectors/L1vecVc.h
@@ -26,8 +26,6 @@ inline fvec operator+(const fvec& a, fscal b) { return a + fvec(b); }
 inline fvec operator-(fscal a, const fvec& b) { return fvec(a) - b; }
 inline fvec operator-(const fvec& a, fscal b) { return a - fvec(b); }
 
-inline fmask MaskOne() { return fmask::One(); }
-inline fmask MaskZero() { return fmask::One(); }
 
 inline fvec fabs(const fvec& a) { return abs(a); }
 
@@ -61,16 +59,6 @@ inline bool IsNanAny(const fvec& v)
   return ret;
 }
 
-inline bool EmptyFmask(const fmask& a)
-{
-  bool ret = true;
-  for (int i = 0; i < fvecLen; i++) {
-    ret = ret && (!bool(a[i]));
-  }
-  return ret;
-}
-
-inline bool NotEmptyFmask(const fmask& a) { return !EmptyFmask(a); }
 
 #include "std_alloc.h"