diff --git a/algo/CMakeLists.txt b/algo/CMakeLists.txt
index 965746fe0dcc75f65531937065f46f797279e07b..64e9ffc5c877ee8e29239266a983cea22366d2a5 100644
--- a/algo/CMakeLists.txt
+++ b/algo/CMakeLists.txt
@@ -1,8 +1,7 @@
-add_subdirectory (data)
-add_subdirectory (test)
+add_subdirectory(data)
+add_subdirectory(test)
 
 # Create a library libCbmAlgo
-
 set(SRCS
   evbuild/EventBuilder.cxx
   trigger/TimeClusterTrigger.cxx
@@ -10,7 +9,7 @@ set(SRCS
   detectors/sts/UnpackSts.cxx
   detectors/much/MuchReadoutConfig.cxx
   detectors/much/UnpackMuch.cxx
- )
+)
 
 add_library(Algo SHARED ${SRCS})
 
@@ -37,3 +36,9 @@ target_link_libraries(Algo OnlineData)
 target_compile_definitions(Algo PUBLIC NO_ROOT)
 
 install(TARGETS Algo DESTINATION lib)
+
+install(FILES ca/simd/CaSimd.h
+  ca/simd/CaSimdVc.h
+  ca/simd/CaSimdPseudo.h
+  DESTINATION include/ca/simd
+)
diff --git a/reco/L1/vectors/L1vec.h b/algo/ca/simd/CaSimd.h
similarity index 65%
rename from reco/L1/vectors/L1vec.h
rename to algo/ca/simd/CaSimd.h
index 901ab2f7fa3ac4f86346bebd928622095e6af2ca..5c42832e7bf51bffe9a3e4432e77f88a834101c5 100644
--- a/reco/L1/vectors/L1vec.h
+++ b/algo/ca/simd/CaSimd.h
@@ -2,10 +2,10 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Sergey Gorbunov [committer]*/
 
-#ifndef L1vec_H
-#define L1vec_H
+#ifndef Ca_CaSimd_H
+#define Ca_CaSimd_H
 
-#include "vectors/L1vecVc.h"
-//#include "vectors/L1vecPseudo.h"
+#include "ca/simd/CaSimdVc.h"
+//#include "ca/simd/CaSimdPseudo.h"
 
 #endif
diff --git a/algo/ca/simd/CaSimdPseudo.h b/algo/ca/simd/CaSimdPseudo.h
new file mode 100644
index 0000000000000000000000000000000000000000..3e876001ee8b65863c58ee546644c5a0a44c6330
--- /dev/null
+++ b/algo/ca/simd/CaSimdPseudo.h
@@ -0,0 +1,271 @@
+/* Copyright (C) 2010 Frankfurt Institute for Advanced Studies, Goethe-Universität Frankfurt, Frankfurt
+   SPDX-License-Identifier: GPL-3.0-only
+   Authors: Igor Kulakov [committer] */
+
+#ifndef Ca_CaSimdPseudo_H
+#define Ca_CaSimdPseudo_H
+
+#include <iomanip>
+#include <iostream>
+
+#include <cmath>
+
+namespace cbm::algo::ca
+{
+
+  typedef float fscal;
+
+  /**********************************
+   *
+   *   Pseudo SIMD vector
+   *
+   **********************************/
+
+  fscal min(fscal x, fscal y);
+  fscal max(fscal x, fscal y);
+  fscal asgnb(fscal x, fscal y);
+  fscal sgn(fscal x);
+
+
+  class fmask {
+
+  public:
+    static constexpr int Size {4};
+
+    static constexpr size_t size() { return Size; }
+
+    bool v[Size];
+
+    bool& operator[](size_t i) { return v[i]; }
+    bool operator[](size_t i) const { return v[i]; }
+
+    fmask() : fmask(0.f) {}
+
+    fmask(const fmask& a)
+    {
+      for (size_t i = 0; i < size(); i++) {
+        v[i] = a.v[i];
+      }
+    }
+
+    fmask(bool a)
+    {
+      for (size_t i = 0; i < size(); i++) {
+        v[i] = a;
+      }
+    }
+
+    static fmask One() { return fmask(true); }
+
+    static fmask Zero() { return fmask(false); }
+
+#define _op(A, B, F)                                                                                                   \
+  fmask z;                                                                                                             \
+  for (size_t i = 0; i < size(); i++) {                                                                                \
+    z[i] = (A[i] F B[i]);                                                                                              \
+  }                                                                                                                    \
+  return z;
+
+    /* Logic */
+    friend fmask operator&&(const fmask& a, const fmask& b) { _op(a, b, &&) }
+    friend fmask operator||(const fmask& a, const fmask& b) { _op(a, b, ||) }
+    friend fmask operator&(const fmask& a, const fmask& b) { _op(a, b, &) }
+    friend fmask operator|(const fmask& a, const fmask& b) { _op(a, b, |) }
+    friend fmask operator^(const fmask& a, const fmask& b) { _op(a, b, ^) }
+
+#undef _op
+
+    friend fmask operator!(const fmask& a)
+    {
+      fmask z;
+      for (size_t i = 0; i < size(); i++) {
+        z[i] = !a[i];
+      }
+      return z;
+    }
+
+    bool isEmpty()
+    {
+      bool ret = true;
+      for (size_t i = 0; i < size(); i++) {
+        ret = ret && (!v[i]);
+      }
+      return ret;
+    }
+
+    bool isNotEmpty() { return !isEmpty(); }
+
+
+    friend std::ostream& operator<<(std::ostream& strm, const fmask& a)
+    {
+      strm << '[';
+      for (size_t i = 0; i < size(); i++) {
+        strm << std::setw(12) << std::setfill(' ') << a[i] << ' ';
+      }
+      return strm;
+    }
+
+    friend std::istream& operator>>(std::istream& strm, fmask& a)
+    {
+      for (size_t i = 0; i < size(); i++) {
+        strm >> a[i];
+      }
+      return strm;
+    }
+  };
+
+
+  class fvec {
+
+  public:
+    static constexpr size_t size() { return fmask::size(); }
+
+    fscal v[fmask::Size];
+
+    fvec() : fvec(0.) {}
+
+    fvec(const fvec& a)
+    {
+      for (size_t i = 0; i < size(); i++) {
+        v[i] = a.v[i];
+      }
+    }
+
+    fvec(fscal a)
+    {
+      for (size_t i = 0; i < size(); i++) {
+        v[i] = a;
+      }
+    }
+
+    static fvec One() { return fvec(1.); }
+
+    static fvec Zero() { return fvec(0.); }
+
+    fscal& operator[](size_t i) { return v[i]; }
+
+    fscal operator[](size_t i) const { return v[i]; }
+
+    void setZero(fmask m)
+    {
+      for (size_t i = 0; i < size(); i++) {
+        if (m[i]) { v[i] = 0.; }
+      }
+    }
+
+#define _f1(A, F)                                                                                                      \
+  fvec z;                                                                                                              \
+  for (size_t i = 0; i < size(); i++) {                                                                                \
+    z[i] = F(A[i]);                                                                                                    \
+  }                                                                                                                    \
+  return z;
+
+#define _f2(A, B, F)                                                                                                   \
+  fvec z;                                                                                                              \
+  for (size_t i = 0; i < size(); i++) {                                                                                \
+    z[i] = F(A[i], B[i]);                                                                                              \
+  }                                                                                                                    \
+  return z;
+
+#define _op(A, B, F)                                                                                                   \
+  fvec z;                                                                                                              \
+  for (size_t i = 0; i < size(); i++) {                                                                                \
+    z[i] = (A[i] F B[i]);                                                                                              \
+  }                                                                                                                    \
+  return z;
+
+#define _opComp(A, B, F)                                                                                               \
+  fmask z;                                                                                                             \
+  for (size_t i = 0; i < size(); i++) {                                                                                \
+    z[i] = (A[i] F B[i]);                                                                                              \
+  }                                                                                                                    \
+  return z;
+
+
+    /* Arithmetic Operators */
+    friend fvec operator+(const fvec& a, const fvec& b) { _op(a, b, +) }
+    friend fvec operator-(const fvec& a, const fvec& b) { _op(a, b, -) }
+    friend fvec operator*(const fvec& a, const fvec& b) { _op(a, b, *) }
+    friend fvec operator/(const fvec& a, const fvec& b) { _op(a, b, /) }
+
+    /* Comparison */
+    friend fmask operator<(const fvec& a, const fvec& b) { _opComp(a, b, <) }
+    friend fmask operator<=(const fvec& a, const fvec& b) { _opComp(a, b, <=) }
+    friend fmask operator>(const fvec& a, const fvec& b) { _opComp(a, b, >) }
+    friend fmask operator>=(const fvec& a, const fvec& b) { _opComp(a, b, >=) }
+    friend fmask operator==(const fvec& a, const fvec& b) { _opComp(a, b, ==) }
+
+    friend fmask isnan(const fvec& a)
+    {
+      fmask m;
+      for (size_t i = 0; i < size(); i++) {
+        m[i] = std::isnan(a[i]);
+      }
+      return m;
+    }
+
+    friend fvec iif(fmask a, fvec b, fvec c)
+    {
+      fvec z;
+      for (size_t i = 0; i < size(); i++) {
+        z[i] = a[i] ? b[i] : c[i];
+      }
+      return z;
+    }
+
+    /* Functions */
+    friend fscal min(fscal x, fscal y) { return x < y ? x : y; }
+    friend fscal max(fscal x, fscal y) { return x < y ? y : x; }
+    friend fscal asgnb(fscal x, fscal y) { return y >= 0.f ? fabs(x) : -fabs(x); }
+    friend fscal sgn(fscal x) { return x >= 0.f ? 1.f : -1.f; }
+
+    friend fvec min(const fvec& a, const fvec& b) { _f2(a, b, min) }
+    friend fvec max(const fvec& a, const fvec& b) { _f2(a, b, max) }
+    friend fvec asgnb(const fvec& a, const fvec& b) { _f2(a, b, asgnb) }
+    friend fvec sqrt(const fvec& a) { _f1(a, sqrt) }
+    friend fvec abs(const fvec& a) { _f1(a, fabs) }
+    friend fvec sgn(const fvec& a) { _f1(a, sgn) }
+    friend fvec exp(const fvec& a) { _f1(a, exp) }
+    friend fvec log(const fvec& a) { _f1(a, log) }
+    friend fvec sin(const fvec& a) { _f1(a, sin) }
+    friend fvec cos(const fvec& a) { _f1(a, cos) }
+#undef _f1
+#undef _f2
+#undef _op
+#undef _opComp
+
+    /* Define all operators for consistensy */
+
+    friend fvec operator-(const fvec& a) { return fvec(0) - a; }
+    friend fvec operator+(const fvec& a) { return a; }
+
+    friend void operator+=(fvec& a, const fvec& b) { a = a + b; }
+    friend void operator-=(fvec& a, const fvec& b) { a = a - b; }
+    friend void operator*=(fvec& a, const fvec& b) { a = a * b; }
+    friend void operator/=(fvec& a, const fvec& b) { a = a / b; }
+
+    friend std::ostream& operator<<(std::ostream& strm, const fvec& a)
+    {
+      //strm << "[" << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << "]";
+      strm << '[';
+      for (size_t i = 0; i < size(); i++) {
+        strm << std::setw(12) << std::setfill(' ') << a[i] << ' ';
+      }
+      return strm;
+    }
+
+    friend std::istream& operator>>(std::istream& strm, fvec& a)
+    {
+      for (size_t i = 0; i < size(); i++) {
+        strm >> a[i];
+      }
+      return strm;
+    }
+
+  } __attribute__((aligned(16)));
+
+#define _fvecalignment __attribute__((aligned(fvec::size() * sizeof(fscal))))
+
+}  // namespace cbm::algo::ca
+
+#endif
diff --git a/reco/L1/vectors/L1vecVc.h b/algo/ca/simd/CaSimdVc.h
similarity index 61%
rename from reco/L1/vectors/L1vecVc.h
rename to algo/ca/simd/CaSimdVc.h
index 639a221624dfcf4bec35db0c8a461effc376a87d..8eebae3401de13eaff753126eed94efec87eb270 100644
--- a/reco/L1/vectors/L1vecVc.h
+++ b/algo/ca/simd/CaSimdVc.h
@@ -2,15 +2,20 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Igor Kulakov [committer], Maksym Zyzak */
 
-#ifndef L1vecVc_H
-#define L1vecVc_H
+#ifndef Ca_CaSimdVc_H
+#define Ca_CaSimdVc_H
 
 #include "Vc/Vc"
 
-typedef Vc::float_v fvec;
-typedef fvec::EntryType fscal;
-typedef Vc::float_m fmask;
+namespace cbm::algo::ca
+{
+
+  typedef Vc::float_v fvec;
+  typedef fvec::EntryType fscal;
+  typedef Vc::float_m fmask;
 
 #define _fvecalignment __attribute__((aligned(Vc::VectorAlignment)))
 
+}  // namespace cbm::algo::ca
+
 #endif
diff --git a/analysis/PWGCHA/jpsi/CMakeLists.txt b/analysis/PWGCHA/jpsi/CMakeLists.txt
index f60e7e1fbeffd2ae0880b7f6c84ab70c045ced54..832b91e37d4b05931968df39a6dcd5c79574b9c4 100644
--- a/analysis/PWGCHA/jpsi/CMakeLists.txt
+++ b/analysis/PWGCHA/jpsi/CMakeLists.txt
@@ -13,6 +13,7 @@ ${CBMDATA_DIR}/rich
 ${CBMDATA_DIR}/trd
 ${CBMDATA_DIR}/tof
 
+${CBMROOT_SOURCE_DIR}/algo
 
 ${CBMROOT_SOURCE_DIR}/reco/KF
 ${CBMROOT_SOURCE_DIR}/reco/KF/Interface 
@@ -70,7 +71,7 @@ ADD_DEFINITIONS(-DDO_TPCCATRACKER_EFF_PERFORMANCE -DNonhomogeneousField -DCBM -D
 
 Set(LINKDEF CbmJPsiAnalysisLinkDef.h)
 Set(LIBRARY_NAME CbmJPsiAnalysis)
-Set(DEPENDENCIES KF L1 CbmRichReco CbmRichBase CbmBase CbmData Littrack)
+Set(DEPENDENCIES Algo KF L1 CbmRichReco CbmRichBase CbmBase CbmData Littrack)
 Set(DEFINITIONS -DDO_TPCCATRACKER_EFF_PERFORMANCE -DNonhomogeneousField -DCBM -DUSE_TIMERS)
 
 GENERATE_LIBRARY()
diff --git a/analysis/PWGDIL/dielectron/conversion/CMakeLists.txt b/analysis/PWGDIL/dielectron/conversion/CMakeLists.txt
index 17355aa06ccfee593233d226a13c8fcdb190a16c..7e0f93cb243aeffa36e768131526114dcd2fb446 100644
--- a/analysis/PWGDIL/dielectron/conversion/CMakeLists.txt
+++ b/analysis/PWGDIL/dielectron/conversion/CMakeLists.txt
@@ -13,6 +13,8 @@ ${CBMDATA_DIR}/rich
 ${CBMROOT_SOURCE_DIR}/core/detectors/rich/utils
 ${CBMROOT_SOURCE_DIR}/core/detectors/rich
 
+${CBMROOT_SOURCE_DIR}/algo
+
 ${CBMROOT_SOURCE_DIR}/reco/base
 
 ${CBMROOT_SOURCE_DIR}/reco/KF
@@ -75,7 +77,7 @@ ADD_DEFINITIONS(-DDO_TPCCATRACKER_EFF_PERFORMANCE -DNonhomogeneousField -DCBM -D
 
 Set(LINKDEF CbmConversionAnalysisLinkDef.h)
 Set(LIBRARY_NAME CbmConversionAnalysis)
-Set(DEPENDENCIES KF L1 CbmRichReco CbmRichBase CbmRecoBase CbmData Littrack)
+Set(DEPENDENCIES Algo KF L1 CbmRichReco CbmRichBase CbmRecoBase CbmData Littrack)
 Set(DEFINITIONS -DDO_TPCCATRACKER_EFF_PERFORMANCE -DNonhomogeneousField -DCBM -DUSE_TIMERS)
 
 GENERATE_LIBRARY()
diff --git a/analysis/PWGDIL/dielectron/lmvm/CMakeLists.txt b/analysis/PWGDIL/dielectron/lmvm/CMakeLists.txt
index 838d44393d9aba0303ff2b4c0be6c0f797052954..7df5fd17692c63cfdff2466fdd3060e9b336ec68 100644
--- a/analysis/PWGDIL/dielectron/lmvm/CMakeLists.txt
+++ b/analysis/PWGDIL/dielectron/lmvm/CMakeLists.txt
@@ -16,6 +16,8 @@ ${CBMDATA_DIR}/rich
 ${CBMDATA_DIR}/trd
 ${CBMDATA_DIR}/tof
 
+${CBMROOT_SOURCE_DIR}/algo
+
 ${CBMROOT_SOURCE_DIR}/reco/KF
 ${CBMROOT_SOURCE_DIR}/reco/KF/Interface 
 
@@ -72,7 +74,7 @@ ADD_DEFINITIONS(-DDO_TPCCATRACKER_EFF_PERFORMANCE -DNonhomogeneousField -DCBM -D
 Set(LINKDEF LmvmLinkDef.h)
 Set(LIBRARY_NAME CbmLmvm)
 Set(DEPENDENCIES
-    Littrack LittrackQA KF L1 CbmRichBase CbmRichReco CbmRecoBase CbmBase CbmData)
+    Littrack LittrackQA Algo KF L1 CbmRichBase CbmRichReco CbmRecoBase CbmBase CbmData)
 Set(DEFINITIONS -DDO_TPCCATRACKER_EFF_PERFORMANCE -DNonhomogeneousField -DCBM -DUSE_TIMERS)
 
 GENERATE_LIBRARY()
diff --git a/analysis/PWGDIL/dielectron/papaframework/CMakeLists.txt b/analysis/PWGDIL/dielectron/papaframework/CMakeLists.txt
index 2057253628c81177713802b6e8d1b8edd5ec15f5..2c341fb5467e0c561f50d45bdff60e8368aafc82 100644
--- a/analysis/PWGDIL/dielectron/papaframework/CMakeLists.txt
+++ b/analysis/PWGDIL/dielectron/papaframework/CMakeLists.txt
@@ -21,6 +21,8 @@ ${CBMROOT_SOURCE_DIR}/core/detectors/rich
 
 ${CBMROOT_SOURCE_DIR}/sim/transport/generators/unigen
 
+${CBMROOT_SOURCE_DIR}/algo
+
 ${CBMROOT_SOURCE_DIR}/reco/KF
 ${CBMROOT_SOURCE_DIR}/reco/KF/Interface 
 ${KFParticle_INCLUDE_DIR}
@@ -136,7 +138,7 @@ EndIf()
 Set(LINKDEF CbmPapaLinkDef.h)
 Set(LIBRARY_NAME CbmPapa)
 Set(DEPENDENCIES
-    L1 KF Littrack CbmRichReco CbmRichBase CbmBase CbmData CbmSimGenerators Base)
+    Algo L1 KF Littrack CbmRichReco CbmRichBase CbmBase CbmData CbmSimGenerators Base)
 
 GENERATE_LIBRARY()
 
diff --git a/analysis/PWGDIL/dielectron/pi0eta/CMakeLists.txt b/analysis/PWGDIL/dielectron/pi0eta/CMakeLists.txt
index 48fcb315e485898c4dbc2592a9e8eb790122bfd4..0698d24517071e5f159d0c17c0e53147c81016e3 100644
--- a/analysis/PWGDIL/dielectron/pi0eta/CMakeLists.txt
+++ b/analysis/PWGDIL/dielectron/pi0eta/CMakeLists.txt
@@ -10,6 +10,8 @@ ${CBMDATA_DIR}/sts
 ${CBMDATA_DIR}/global
 ${CBMDATA_DIR}/rich
 
+${CBMROOT_SOURCE_DIR}/algo
+
 ${CBMROOT_SOURCE_DIR}/reco/base
 
 ${CBMROOT_SOURCE_DIR}/reco/KF
@@ -88,7 +90,7 @@ ADD_DEFINITIONS(-DDO_TPCCATRACKER_EFF_PERFORMANCE -DNonhomogeneousField -DCBM -D
 
 Set(LINKDEF CbmConversion2AnalysisLinkDef.h)
 Set(LIBRARY_NAME CbmConversion2Analysis)
-Set(DEPENDENCIES KF L1 CbmRichBase CbmRichReco CbmRecoBase CbmData)
+Set(DEPENDENCIES Algo KF L1 CbmRichBase CbmRichReco CbmRecoBase CbmData)
 Set(DEFINITIONS -DDO_TPCCATRACKER_EFF_PERFORMANCE -DNonhomogeneousField -DCBM -DUSE_TIMERS)
 
 GENERATE_LIBRARY()
diff --git a/analysis/common/analysis_tree_converter/CMakeLists.txt b/analysis/common/analysis_tree_converter/CMakeLists.txt
index 6b4ab3bf7048d997b6a5e9656bc5d4907af25446..8824520699f0ac79fa42d2e6141dde5f84e1a3b8 100644
--- a/analysis/common/analysis_tree_converter/CMakeLists.txt
+++ b/analysis/common/analysis_tree_converter/CMakeLists.txt
@@ -18,6 +18,8 @@ set(SRCS
 Set(INCLUDE_DIRECTORIES
   ${CMAKE_CURRENT_SOURCE_DIR}
 
+  ${CBMROOT_SOURCE_DIR}/algo
+
   ${CBMROOT_SOURCE_DIR}/core/base
   ${CBMROOT_SOURCE_DIR}/core/data
   ${CBMROOT_SOURCE_DIR}/core/data/base
@@ -74,7 +76,8 @@ Set(LINKDEF CbmAnalysisTreeInterfaceLinkDef.h)
 Set(_AnalysisTree_LIB AnalysisTreeBase AnalysisTreeInfra)
 
 Set(DEPENDENCIES 
-	${_AnalysisTree_LIB} 
+	${_AnalysisTree_LIB}
+  Algo 
 	CbmData 
 	CbmBase 
 	KFParticleInterface
diff --git a/reco/KF/KF.cmake b/reco/KF/KF.cmake
index 5307a31576137af26c90c6aa7b1f3cf965d110cf..eba984a86d420846515281f27ab49d646593b9ff 100644
--- a/reco/KF/KF.cmake
+++ b/reco/KF/KF.cmake
@@ -5,6 +5,7 @@
 Set(INCLUDE_DIRECTORIES
 ${CBMBASE_DIR} 
 
+${CBMROOT_SOURCE_DIR}/algo
 ${CBMROOT_SOURCE_DIR}/reco/base
 
 ${CBMDATA_DIR}
@@ -39,14 +40,13 @@ ${CBMROOT_SOURCE_DIR}/sim/transport/geosetup # TMP for tracker interface
 Include_Directories( ${INCLUDE_DIRECTORIES})
 
 Set(SYSTEM_INCLUDE_DIRECTORIES
-  ${VC_INCLUDE_DIRS}
   ${BASE_INCLUDE_DIRECTORIES} 
 )
 
 Include_Directories(SYSTEM ${SYSTEM_INCLUDE_DIRECTORIES})
 
 set(LINK_DIRECTORIES
-${Vc_LIB_DIR}
+${Algo_LIB_DIR}
 ${FAIRROOT_LIBRARY_DIR}
 ${ROOT_LIBRARY_DIR}
 ${Boost_LIBRARY_DIRS}
@@ -175,7 +175,7 @@ ENDIF (SSE_FOUND)
 set(LINKDEF KFLinkDef.h)
 Set(LIBRARY_NAME KF)
 Set(DEPENDENCIES
-  CbmRecoBase CbmSimSteer CbmStsBase CbmMvd CbmMuchBase CbmTrdBase CbmTofBase CbmBase CbmData Base Vc.a Minuit2
+  Algo CbmRecoBase CbmSimSteer CbmStsBase CbmMvd CbmMuchBase CbmTrdBase CbmTofBase CbmBase CbmData Base Minuit2
 )
 Set(DEFINITIONS -DDO_TPCCATRACKER_EFF_PERFORMANCE -DNonhomogeneousField -DCBM -DUSE_TIMERS)
 
diff --git a/reco/KF/KFParticleInterface.cmake b/reco/KF/KFParticleInterface.cmake
index 7fb7e1d11a6678e0ddf3c5601e04491964442ea6..60fd28d75975d42d8d84bc28af074eed1a77214b 100644
--- a/reco/KF/KFParticleInterface.cmake
+++ b/reco/KF/KFParticleInterface.cmake
@@ -3,106 +3,113 @@
 # The extension is already found.  Any number of sources could be listed here.
 
 Set(INCLUDE_DIRECTORIES
-${CBMBASE_DIR} 
+  ${CBMBASE_DIR}
 
-${CBMROOT_SOURCE_DIR}/reco/base
+  ${CBMROOT_SOURCE_DIR}/algo
+  ${CBMROOT_SOURCE_DIR}/reco/base
 
-${CBMDATA_DIR}
-${CBMDATA_DIR}/base
-${CBMDATA_DIR}/sts
-${CBMDATA_DIR}/mvd
-${CBMDATA_DIR}/much
-${CBMDATA_DIR}/trd
-${CBMDATA_DIR}/rich
-${CBMDATA_DIR}/tof
-${CBMDATA_DIR}/global
+  ${CBMDATA_DIR}
+  ${CBMDATA_DIR}/base
+  ${CBMDATA_DIR}/sts
+  ${CBMDATA_DIR}/mvd
+  ${CBMDATA_DIR}/much
+  ${CBMDATA_DIR}/trd
+  ${CBMDATA_DIR}/rich
+  ${CBMDATA_DIR}/tof
+  ${CBMDATA_DIR}/global
 
-${CBMROOT_SOURCE_DIR}/reco/KF
-${CBMROOT_SOURCE_DIR}/reco/KF/Interface
-${CBMROOT_SOURCE_DIR}/reco/KF/KFQA
+  ${CBMROOT_SOURCE_DIR}/reco/KF
+  ${CBMROOT_SOURCE_DIR}/reco/KF/Interface
+  ${CBMROOT_SOURCE_DIR}/reco/KF/KFQA
 
-${CBMDETECTORBASE_DIR}/sts
+  ${CBMDETECTORBASE_DIR}/sts
 
-${CBMROOT_SOURCE_DIR}/reco/L1
-${CBMROOT_SOURCE_DIR}/reco/L1/L1Algo
-#${CBMROOT_SOURCE_DIR}/reco/L1/ParticleFinder
+  ${CBMROOT_SOURCE_DIR}/reco/L1
+  ${CBMROOT_SOURCE_DIR}/reco/L1/L1Algo
 
-${CBMROOT_SOURCE_DIR}/mvd 
+  # ${CBMROOT_SOURCE_DIR}/reco/L1/ParticleFinder
+  ${CBMROOT_SOURCE_DIR}/mvd
 )
 
-Include_Directories( ${INCLUDE_DIRECTORIES})
+Include_Directories(${INCLUDE_DIRECTORIES})
 
 Set(SYSTEM_INCLUDE_DIRECTORIES
-#  ${KFParticle_INCLUDE_DIR}
-  ${VC_INCLUDE_DIRS}
-  ${BASE_INCLUDE_DIRECTORIES} 
+  # ${KFParticle_INCLUDE_DIR}
+  ${BASE_INCLUDE_DIRECTORIES}
 )
 
 Include_Directories(SYSTEM ${SYSTEM_INCLUDE_DIRECTORIES})
 
 set(LINK_DIRECTORIES
-${Vc_LIB_DIR}
-#${KFParticle_LIB_DIR}
-${FAIRROOT_LIBRARY_DIR}
-${ROOT_LIBRARY_DIR}
-${Boost_LIBRARY_DIRS}
+  ${Algo_LIB_DIR}
+  # ${KFParticle_LIB_DIR}
+  ${FAIRROOT_LIBRARY_DIR}
+  ${ROOT_LIBRARY_DIR}
+  ${Boost_LIBRARY_DIRS}
 )
- 
+
 link_directories(BEFORE ${LINK_DIRECTORIES})
 
 set(SRCS
-CbmKFParticleFinder.cxx
-CbmKFParticleFinderPID.cxx
-CbmKFParticleFinderQa.cxx
-CbmKFParticleInterface.cxx
+  CbmKFParticleFinder.cxx
+  CbmKFParticleFinderPID.cxx
+  CbmKFParticleFinderQa.cxx
+  CbmKFParticleInterface.cxx
 )
 
-
 set(HEADERS
-CbmKFParticleFinder.h
-CbmKFParticleFinderPID.h
-CbmKFParticleFinderQa.h
-CbmKFParticleInterface.h
+  CbmKFParticleFinder.h
+  CbmKFParticleFinderPID.h
+  CbmKFParticleFinderQa.h
+  CbmKFParticleInterface.h
 )
 
 If(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
   ADD_DEFINITIONS(-Wall -Wsign-promo -Wctor-dtor-privacy -Wreorder -Wno-deprecated -Wno-parentheses -DDO_TPCCATRACKER_EFF_PERFORMANCE -DNonhomogeneousField -DCBM -DUSE_TIMERS) # -Weffc++ -Wnon-virtual-dtor -Woverloaded-virtual -Wold-style-cast   : wait for other parts of cbmroot\root.
-  #---Check for compiler flags
+
+  # ---Check for compiler flags
   CHECK_CXX_COMPILER_FLAG("-Werror -Wno-pmf-conversions" HAS_PMF)
+
   If(HAS_PMF)
     ADD_DEFINITIONS(-Wno-pmf-conversions)
   EndIf()
+
   CHECK_CXX_COMPILER_FLAG("-Werror -Wstrict-null-sentinel" HAS_SENTINEL)
+
   If(HAS_SENTINEL)
     ADD_DEFINITIONS(-Wstrict-null-sentinel)
   EndIf()
+
   CHECK_CXX_COMPILER_FLAG("-Werror -Wno-non-template-friend" HAS_TEMPLATE_FRIEND)
+
   If(HAS_TEMPLATE_FRIEND)
     ADD_DEFINITIONS(-Wno-non-template-friend)
   EndIf()
+
   CHECK_CXX_COMPILER_FLAG("-Werror -Wno-pragmas" HAS_PRAGMA)
+
   If(HAS_PRAGMA)
     ADD_DEFINITIONS(-Wno-pragmas)
   EndIf()
 Else()
-  ADD_DEFINITIONS(-Wall -Wsign-promo  -Wno-pmf-conversions -Wctor-dtor-privacy -Wreorder -Wno-deprecated -Wstrict-null-sentinel -Wno-non-template-friend -Wno-pragmas -Wno-parentheses -DDO_TPCCATRACKER_EFF_PERFORMANCE -DNonhomogeneousField -DCBM -DUSE_TIMERS) # -Weffc++ -Wnon-virtual-dtor -Woverloaded-virtual -Wold-style-cast   : wait for other parts of cbmroot\root.
+  ADD_DEFINITIONS(-Wall -Wsign-promo -Wno-pmf-conversions -Wctor-dtor-privacy -Wreorder -Wno-deprecated -Wstrict-null-sentinel -Wno-non-template-friend -Wno-pragmas -Wno-parentheses -DDO_TPCCATRACKER_EFF_PERFORMANCE -DNonhomogeneousField -DCBM -DUSE_TIMERS) # -Weffc++ -Wnon-virtual-dtor -Woverloaded-virtual -Wold-style-cast   : wait for other parts of cbmroot\root.
 EndIf()
 
-IF (SSE_FOUND)
+IF(SSE_FOUND)
   Message(STATUS "KFParticleInterface will be compiled with SSE support")
   ADD_DEFINITIONS(-DHAVE_SSE)
-  SET_SOURCE_FILES_PROPERTIES(${SRCS} PROPERTIES COMPILE_FLAGS 
-  "-msse -O3")
-ELSE (SSE_FOUND)
+  SET_SOURCE_FILES_PROPERTIES(${SRCS} PROPERTIES COMPILE_FLAGS
+    "-msse -O3")
+ELSE(SSE_FOUND)
   MESSAGE(STATUS "KFParticleInterface will be compiled without SSE support")
-  SET_SOURCE_FILES_PROPERTIES(${SRCS} PROPERTIES COMPILE_FLAGS 
-  "-O3")
-ENDIF (SSE_FOUND)
+  SET_SOURCE_FILES_PROPERTIES(${SRCS} PROPERTIES COMPILE_FLAGS
+    "-O3")
+ENDIF(SSE_FOUND)
 
 set(LINKDEF KFParticleInterfaceLinkDef.h)
 Set(LIBRARY_NAME KFParticleInterface)
 Set(DEPENDENCIES
-    KF KFQA Vc.a KFParticle L1
+  Algo KF KFQA KFParticle L1
 )
 Set(DEFINITIONS -DDO_TPCCATRACKER_EFF_PERFORMANCE -DNonhomogeneousField -DCBM -DUSE_TIMERS)
 
diff --git a/reco/KF/KFQA.cmake b/reco/KF/KFQA.cmake
index 339202e24feaa760a9575894fef61c0cfb17d1de..cde5bf857efade0fb2a673ca4d8dc13d258b8bad 100644
--- a/reco/KF/KFQA.cmake
+++ b/reco/KF/KFQA.cmake
@@ -17,6 +17,8 @@ ${CBMDATA_DIR}/rich
 ${CBMDATA_DIR}/tof
 ${CBMDATA_DIR}/global
 
+${CBMROOT_SOURCE_DIR}/algo
+
 ${CBMROOT_SOURCE_DIR}/reco/KF
 ${CBMROOT_SOURCE_DIR}/reco/KF/Interface
 ${CBMROOT_SOURCE_DIR}/reco/KF/KFQA
@@ -34,14 +36,13 @@ Include_Directories( ${INCLUDE_DIRECTORIES})
 
 Set(SYSTEM_INCLUDE_DIRECTORIES
   ${KFParticle_INCLUDE_DIR}
-  ${VC_INCLUDE_DIRS}
   ${BASE_INCLUDE_DIRECTORIES} 
 )
 
 Include_Directories(SYSTEM ${SYSTEM_INCLUDE_DIRECTORIES})
 
 set(LINK_DIRECTORIES
-${Vc_LIB_DIR}
+${Algo_LIB_DIR}
 ${KFParticle_LIB_DIR}
 ${FAIRROOT_LIBRARY_DIR}
 ${ROOT_LIBRARY_DIR}
@@ -103,7 +104,7 @@ ENDIF (SSE_FOUND)
 set(LINKDEF KFQALinkDef.h)
 Set(LIBRARY_NAME KFQA)
 Set(DEPENDENCIES
-    KF Vc.a L1 KFParticle
+    Algo KF L1 KFParticle
 )
 
 Set(DEFINITIONS -DDO_TPCCATRACKER_EFF_PERFORMANCE -DNonhomogeneousField -DCBM -DUSE_TIMERS)
diff --git a/reco/L1/CMakeLists.txt b/reco/L1/CMakeLists.txt
index 4bbf0d3ee48de423bf11c647b67b14579f51025d..e4a2eb298a1db893bab5c08d6e072746b3853f24 100644
--- a/reco/L1/CMakeLists.txt
+++ b/reco/L1/CMakeLists.txt
@@ -16,6 +16,8 @@ ELSE(SSE_FOUND)
 ENDIF(SSE_FOUND)
 
 Set(INCLUDE_DIRECTORIES
+
+  ${CBMROOT_SOURCE_DIR}/algo
   ${CBMROOT_SOURCE_DIR}/reco/base
   ${CBMROOT_SOURCE_DIR}/reco/detectors/sts
   ${CBMROOT_SOURCE_DIR}/reco/detectors/rich
@@ -63,7 +65,6 @@ Set(INCLUDE_DIRECTORIES
 Include_Directories(${INCLUDE_DIRECTORIES})
 
 Set(SYSTEM_INCLUDE_DIRECTORIES
-  ${VC_INCLUDE_DIRS}
   ${BASE_INCLUDE_DIRECTORIES}
   ${KFParticle_INCLUDE_DIR}
 )
@@ -80,7 +81,7 @@ endif()
 Include_Directories(SYSTEM ${SYSTEM_INCLUDE_DIRECTORIES})
 
 set(LINK_DIRECTORIES
-  ${Vc_LIB_DIR}
+  ${Algo_LIB_DIR}
   ${KFParticle_LIB_DIR}
   ${FAIRROOT_LIBRARY_DIR}
   ${ROOT_LIBRARY_DIR}
@@ -247,7 +248,7 @@ Set(LINKDEF L1LinkDef.h)
 Set(LIBRARY_NAME L1)
 
 Set(DEPENDENCIES
-  Vc.a
+  Algo
   KF
   KFParticle
   Base
@@ -305,7 +306,7 @@ Install(FILES CbmL1Counters.h
   L1Algo/L1Constants.h
   L1Algo/L1Utils.h
   L1Algo/L1NaN.h
-  L1Algo/L1SimdSerializer.h 
+  L1Algo/L1SimdSerializer.h
   DESTINATION include
 )
 
@@ -316,8 +317,3 @@ Install(FILES L1Algo/L1Algo.h
   L1Algo/L1Vector.h
   DESTINATION include/L1Algo
 )
-
-Install(FILES vectors/L1vec.h
-  vectors/L1vecVc.h
-  DESTINATION include/vectors
-)
diff --git a/reco/L1/L1Algo/L1CATrackFinder.cxx b/reco/L1/L1Algo/L1CATrackFinder.cxx
index c7d63da86e1ab89b65f1b6e66f103e292930d449..9ef1489aaef6bfa42d504bb3b42a5f9a41ac53fa 100644
--- a/reco/L1/L1Algo/L1CATrackFinder.cxx
+++ b/reco/L1/L1Algo/L1CATrackFinder.cxx
@@ -895,11 +895,11 @@ inline void L1Algo::findTripletsStep0(  // input
         T3.SetOneEntry(n3_4, T2, i2_4);
         u_front_3[n3_V][n3_4] = hitr.U();
         u_back_3[n3_V][n3_4]  = hitr.V();
-        du_[n3_V][n3_4]     = hitr.dU();
-        dv_[n3_V][n3_4]     = hitr.dV();
-        z_Pos_3[n3_V][n3_4] = zr;
-        timeR[n3_V][n3_4]   = hitr.time;
-        timeER[n3_V][n3_4]  = hitr.timeEr;
+        du_[n3_V][n3_4]       = hitr.dU();
+        dv_[n3_V][n3_4]       = hitr.dV();
+        z_Pos_3[n3_V][n3_4]   = zr;
+        timeR[n3_V][n3_4]     = hitr.time;
+        timeER[n3_V][n3_4]    = hitr.timeEr;
 
         n3++;
         n3_V = n3 / fvec::size();
@@ -1547,8 +1547,8 @@ inline void L1Algo::TripletsStaPort(  /// creates triplets:
     L1Vector<fvec>& z_pos3          = fz_pos3[Thread];
     L1Vector<fvec>& timeR           = fTimeR[Thread];
     L1Vector<fvec>& timeER          = fTimeER[Thread];
-    L1Vector<fvec>& du3 = du[Thread];
-    L1Vector<fvec>& dv3 = dv[Thread];
+    L1Vector<fvec>& du3             = du[Thread];
+    L1Vector<fvec>& dv3             = dv[Thread];
 
     T_3.clear();
     hitsl_3.clear();
@@ -1573,8 +1573,7 @@ inline void L1Algo::TripletsStaPort(  /// creates triplets:
 
       mrDuplets,
       // output
-      n3, T_3, hitsl_3, hitsm_3, hitsr_3, u_front3, u_back3, z_pos3,
-      du3, dv3, timeR, timeER);
+      n3, T_3, hitsl_3, hitsm_3, hitsr_3, u_front3, u_back3, z_pos3, du3, dv3, timeR, timeER);
 
 
     n3_V = (n3 + fvec::size() - 1) / fvec::size();
@@ -1590,8 +1589,7 @@ inline void L1Algo::TripletsStaPort(  /// creates triplets:
 
     /// Add the right hits to parameters estimation.
     findTripletsStep1(  // input
-      n3_V, star, u_front3, u_back3, z_pos3,
-      du3, dv3, timeR, timeER,
+      n3_V, star, u_front3, u_back3, z_pos3, du3, dv3, timeR, timeER,
       // output
       T_3);
 
diff --git a/reco/L1/L1Algo/L1Def.h b/reco/L1/L1Algo/L1Def.h
index cf4eda7de4ae445d1a4c7ff3dbbc34f267443c95..b372c25cabc22999546ec08512024f21b8c6735e 100644
--- a/reco/L1/L1Algo/L1Def.h
+++ b/reco/L1/L1Algo/L1Def.h
@@ -11,8 +11,6 @@
 
 #include <assert.h>
 
-#include "vectors/L1vec.h"
-
 #ifdef FAST_CODE
 
 #define L1_NO_ASSERT  // use with asserts, etc.
@@ -67,5 +65,4 @@
 
 typedef int index_type;
 
-
 #endif
diff --git a/reco/L1/L1Algo/L1NaN.h b/reco/L1/L1Algo/L1NaN.h
index 55cf40a52780a3b6d6522b9c094515efafe0a2c6..ec516463036c430baa09cb605b838aa13814ac0e 100644
--- a/reco/L1/L1Algo/L1NaN.h
+++ b/reco/L1/L1Algo/L1NaN.h
@@ -18,6 +18,8 @@
 #include <cmath>
 
 #include "L1Def.h"
+#include "ca/simd/CaSimd.h"
+using namespace cbm::algo::ca;  // TODO: remove "using" from headers
 
 /// Namespace L1NaN defines functions to set variables to NaN and check wether they are NaN or not
 ///
diff --git a/reco/L1/L1Algo/L1SimdSerializer.h b/reco/L1/L1Algo/L1SimdSerializer.h
index 3a8b0e373f9fcb33ffef7d39f4d134344345f85d..4b7a4dd4cb8706d186d608c740eaacd8d4c87f82 100644
--- a/reco/L1/L1Algo/L1SimdSerializer.h
+++ b/reco/L1/L1Algo/L1SimdSerializer.h
@@ -13,7 +13,7 @@
 #include <boost/serialization/access.hpp>
 #include <boost/serialization/split_free.hpp>
 
-#include "vectors/L1vec.h"
+#include "ca/simd/CaSimd.h"
 /// This header defines functionality for saving and loading SIMDized vectors. At the moment, only the first element of
 /// the vector can be saved, and the loaded vector will be horizontally equal.
 ///
diff --git a/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.h b/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.h
index fec973655b31fe7b328641753456b26968f3660b..bed36ac9f58a4b71eb550a13674eec83bf721e73 100644
--- a/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.h
+++ b/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.h
@@ -24,9 +24,8 @@
 
 #include "CbmRichRingFinder.h"
 
-#include "vectors/L1vec.h"
-//#include "../vectors/PSEUDO_F32vec4.h" // for check
-//#include "../vectors/PSEUDO_F32vec1.h" // for check
+#include "ca/simd/CaSimd.h"
+using namespace cbm::algo::ca;  // TODO: remove "using" from headers
 
 #include "TStopwatch.h"
 #include "TString.h"
diff --git a/reco/L1/ParticleFinder/CbmL1PFFitter.cxx b/reco/L1/ParticleFinder/CbmL1PFFitter.cxx
index 8ec8617c0a3f3d330fc0655f3bd267c393faf33f..9d4d40709fab3f62a14ede609914290e7650062a 100644
--- a/reco/L1/ParticleFinder/CbmL1PFFitter.cxx
+++ b/reco/L1/ParticleFinder/CbmL1PFFitter.cxx
@@ -37,6 +37,7 @@
 
 #include "KFParticleDatabase.h"
 #include "L1Algo.h"  // Also defines L1Parameters
+#include "L1Def.h"
 #include "L1Extrapolation.h"
 #include "L1Filtration.h"
 #include "L1Fit.h"
@@ -59,7 +60,7 @@ CbmL1PFFitter::CbmL1PFFitter() {}
 
 CbmL1PFFitter::~CbmL1PFFitter() {}
 
-void CbmL1PFFitter::FilterFirst(L1TrackPar& track, fvec& x, fvec& y, L1Station& st)
+void FilterFirst(L1TrackPar& track, fvec& x, fvec& y, L1Station& st)
 {
   track.C00 = st.XYInfo.C00;
   track.C10 = st.XYInfo.C10;
diff --git a/reco/L1/ParticleFinder/CbmL1PFFitter.h b/reco/L1/ParticleFinder/CbmL1PFFitter.h
index 4c08cf58595bb88fc3872a1189d9aea8da266630..946e7c747e3e50c2ef21bd52c5149ed9cc3f7078 100644
--- a/reco/L1/ParticleFinder/CbmL1PFFitter.h
+++ b/reco/L1/ParticleFinder/CbmL1PFFitter.h
@@ -22,8 +22,6 @@
 
 #include <vector>
 
-#include "L1Def.h"
-
 class CbmL1Track;
 class CbmStsTrack;
 class L1TrackPar;
@@ -38,8 +36,6 @@ public:
   CbmL1PFFitter();
   ~CbmL1PFFitter();
 
-  void FilterFirst(L1TrackPar& track, fvec& x, fvec& y, L1Station& st);
-
   //functions for fitting CbmStsTrack
   void Fit(std::vector<CbmStsTrack>& Tracks, std::vector<int>& pidHypo);
   void CalculateFieldRegion(std::vector<CbmStsTrack>& Tracks, std::vector<L1FieldRegion>& Field);
diff --git a/reco/L1/vectors/L1vecPseudo.h b/reco/L1/vectors/L1vecPseudo.h
deleted file mode 100644
index ad0af0e0dc57768c69ea6c975b9013961f1e7101..0000000000000000000000000000000000000000
--- a/reco/L1/vectors/L1vecPseudo.h
+++ /dev/null
@@ -1,267 +0,0 @@
-/* Copyright (C) 2010 Frankfurt Institute for Advanced Studies, Goethe-Universität Frankfurt, Frankfurt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Igor Kulakov [committer] */
-
-#ifndef L1vecPseudo_H
-#define L1vecPseudo_H
-
-#include <iomanip>
-#include <iostream>
-
-#include <cmath>
-
-typedef float fscal;
-
-/**********************************
- *
- *   Pseudo SIMD vector
- *
- **********************************/
-
-fscal min(fscal x, fscal y);
-fscal max(fscal x, fscal y);
-fscal asgnb(fscal x, fscal y);
-fscal sgn(fscal x);
-
-
-class fmask {
-
-public:
-  static constexpr int Size {4};
-
-  static constexpr size_t size() { return Size; }
-
-  bool v[Size];
-
-  bool& operator[](size_t i) { return v[i]; }
-  bool operator[](size_t i) const { return v[i]; }
-
-  fmask() : fmask(0.f) {}
-
-  fmask(const fmask& a)
-  {
-    for (size_t i = 0; i < size(); i++) {
-      v[i] = a.v[i];
-    }
-  }
-
-  fmask(bool a)
-  {
-    for (size_t i = 0; i < size(); i++) {
-      v[i] = a;
-    }
-  }
-
-  static fmask One() { return fmask(true); }
-
-  static fmask Zero() { return fmask(false); }
-
-#define _op(A, B, F)                                                                                                   \
-  fmask z;                                                                                                             \
-  for (size_t i = 0; i < size(); i++) {                                                                                \
-    z[i] = (A[i] F B[i]);                                                                                              \
-  }                                                                                                                    \
-  return z;
-
-  /* Logic */
-  friend fmask operator&&(const fmask& a, const fmask& b) { _op(a, b, &&) }
-  friend fmask operator||(const fmask& a, const fmask& b) { _op(a, b, ||) }
-  friend fmask operator&(const fmask& a, const fmask& b) { _op(a, b, &) }
-  friend fmask operator|(const fmask& a, const fmask& b) { _op(a, b, |) }
-  friend fmask operator^(const fmask& a, const fmask& b) { _op(a, b, ^) }
-
-#undef _op
-
-  friend fmask operator!(const fmask& a)
-  {
-    fmask z;
-    for (size_t i = 0; i < size(); i++) {
-      z[i] = !a[i];
-    }
-    return z;
-  }
-
-  bool isEmpty()
-  {
-    bool ret = true;
-    for (size_t i = 0; i < size(); i++) {
-      ret = ret && (!v[i]);
-    }
-    return ret;
-  }
-
-  bool isNotEmpty() { return !isEmpty(); }
-
-
-  friend std::ostream& operator<<(std::ostream& strm, const fmask& a)
-  {
-    strm << '[';
-    for (size_t i = 0; i < size(); i++) {
-      strm << std::setw(12) << std::setfill(' ') << a[i] << ' ';
-    }
-    return strm;
-  }
-
-  friend std::istream& operator>>(std::istream& strm, fmask& a)
-  {
-    for (size_t i = 0; i < size(); i++) {
-      strm >> a[i];
-    }
-    return strm;
-  }
-};
-
-
-class fvec {
-
-public:
-  static constexpr size_t size() { return fmask::size(); }
-
-  fscal v[fmask::Size];
-
-  fvec() : fvec(0.) {}
-
-  fvec(const fvec& a)
-  {
-    for (size_t i = 0; i < size(); i++) {
-      v[i] = a.v[i];
-    }
-  }
-
-  fvec(fscal a)
-  {
-    for (size_t i = 0; i < size(); i++) {
-      v[i] = a;
-    }
-  }
-
-  static fvec One() { return fvec(1.); }
-
-  static fvec Zero() { return fvec(0.); }
-
-  fscal& operator[](size_t i) { return v[i]; }
-
-  fscal operator[](size_t i) const { return v[i]; }
-
-  void setZero(fmask m)
-  {
-    for (size_t i = 0; i < size(); i++) {
-      if (m[i]) { v[i] = 0.; }
-    }
-  }
-
-#define _f1(A, F)                                                                                                      \
-  fvec z;                                                                                                              \
-  for (size_t i = 0; i < size(); i++) {                                                                                \
-    z[i] = F(A[i]);                                                                                                    \
-  }                                                                                                                    \
-  return z;
-
-#define _f2(A, B, F)                                                                                                   \
-  fvec z;                                                                                                              \
-  for (size_t i = 0; i < size(); i++) {                                                                                \
-    z[i] = F(A[i], B[i]);                                                                                              \
-  }                                                                                                                    \
-  return z;
-
-#define _op(A, B, F)                                                                                                   \
-  fvec z;                                                                                                              \
-  for (size_t i = 0; i < size(); i++) {                                                                                \
-    z[i] = (A[i] F B[i]);                                                                                              \
-  }                                                                                                                    \
-  return z;
-
-#define _opComp(A, B, F)                                                                                               \
-  fmask z;                                                                                                             \
-  for (size_t i = 0; i < size(); i++) {                                                                                \
-    z[i] = (A[i] F B[i]);                                                                                              \
-  }                                                                                                                    \
-  return z;
-
-
-  /* Arithmetic Operators */
-  friend fvec operator+(const fvec& a, const fvec& b) { _op(a, b, +) }
-  friend fvec operator-(const fvec& a, const fvec& b) { _op(a, b, -) }
-  friend fvec operator*(const fvec& a, const fvec& b) { _op(a, b, *) }
-  friend fvec operator/(const fvec& a, const fvec& b) { _op(a, b, /) }
-
-  /* Comparison */
-  friend fmask operator<(const fvec& a, const fvec& b) { _opComp(a, b, <) }
-  friend fmask operator<=(const fvec& a, const fvec& b) { _opComp(a, b, <=) }
-  friend fmask operator>(const fvec& a, const fvec& b) { _opComp(a, b, >) }
-  friend fmask operator>=(const fvec& a, const fvec& b) { _opComp(a, b, >=) }
-  friend fmask operator==(const fvec& a, const fvec& b) { _opComp(a, b, ==) }
-
-  friend fmask isnan(const fvec& a)
-  {
-    fmask m;
-    for (size_t i = 0; i < size(); i++) {
-      m[i] = std::isnan(a[i]);
-    }
-    return m;
-  }
-
-  friend fvec iif(fmask a, fvec b, fvec c)
-  {
-    fvec z;
-    for (size_t i = 0; i < size(); i++) {
-      z[i] = a[i] ? b[i] : c[i];
-    }
-    return z;
-  }
-
-  /* Functions */
-  friend fscal min(fscal x, fscal y) { return x < y ? x : y; }
-  friend fscal max(fscal x, fscal y) { return x < y ? y : x; }
-  friend fscal asgnb(fscal x, fscal y) { return y >= 0.f ? fabs(x) : -fabs(x); }
-  friend fscal sgn(fscal x) { return x >= 0.f ? 1.f : -1.f; }
-
-  friend fvec min(const fvec& a, const fvec& b) { _f2(a, b, min) }
-  friend fvec max(const fvec& a, const fvec& b) { _f2(a, b, max) }
-  friend fvec asgnb(const fvec& a, const fvec& b) { _f2(a, b, asgnb) }
-  friend fvec sqrt(const fvec& a) { _f1(a, sqrt) }
-  friend fvec abs(const fvec& a) { _f1(a, fabs) }
-  friend fvec sgn(const fvec& a) { _f1(a, sgn) }
-  friend fvec exp(const fvec& a) { _f1(a, exp) }
-  friend fvec log(const fvec& a) { _f1(a, log) }
-  friend fvec sin(const fvec& a) { _f1(a, sin) }
-  friend fvec cos(const fvec& a) { _f1(a, cos) }
-#undef _f1
-#undef _f2
-#undef _op
-#undef _opComp
-
-  /* Define all operators for consistensy */
-
-  friend fvec operator-(const fvec& a) { return fvec(0) - a; }
-  friend fvec operator+(const fvec& a) { return a; }
-
-  friend void operator+=(fvec& a, const fvec& b) { a = a + b; }
-  friend void operator-=(fvec& a, const fvec& b) { a = a - b; }
-  friend void operator*=(fvec& a, const fvec& b) { a = a * b; }
-  friend void operator/=(fvec& a, const fvec& b) { a = a / b; }
-
-  friend std::ostream& operator<<(std::ostream& strm, const fvec& a)
-  {
-    //strm << "[" << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << "]";
-    strm << '[';
-    for (size_t i = 0; i < size(); i++) {
-      strm << std::setw(12) << std::setfill(' ') << a[i] << ' ';
-    }
-    return strm;
-  }
-
-  friend std::istream& operator>>(std::istream& strm, fvec& a)
-  {
-    for (size_t i = 0; i < size(); i++) {
-      strm >> a[i];
-    }
-    return strm;
-  }
-
-} __attribute__((aligned(16)));
-
-#define _fvecalignment __attribute__((aligned(fvec::size() * sizeof(fscal))))
-
-
-#endif
diff --git a/reco/eventbuilder/CMakeLists.txt b/reco/eventbuilder/CMakeLists.txt
index dbbd738472b2f6b9fb19a0acb7dcb64c20742141..b63dca16d786d77248f32ed49c195b0a7b7ad691 100644
--- a/reco/eventbuilder/CMakeLists.txt
+++ b/reco/eventbuilder/CMakeLists.txt
@@ -22,6 +22,7 @@ ${CBMDATA_DIR}/tof
 ${CBMDATA_DIR}/psd
 ${CBMDATA_DIR}/global
 
+${CBMROOT_SOURCE_DIR}/algo
 ${CBMROOT_SOURCE_DIR}/reco/L1
 ${CBMROOT_SOURCE_DIR}/reco/L1/L1Algo
 
@@ -89,7 +90,7 @@ ENDIF (SSE_FOUND)
 set(LINKDEF CbmEventBuilderLinkDef.h)
 Set(LIBRARY_NAME CbmEventBuilder)
 Set(DEPENDENCIES
-    CbmData CbmBase CbmField CbmStsBase CbmMvd Base CbmQaBase Vc.a
+    Algo CbmData CbmBase CbmField CbmStsBase CbmMvd Base CbmQaBase
 )
 
 GENERATE_LIBRARY()
diff --git a/reco/littrack/CMakeLists.txt b/reco/littrack/CMakeLists.txt
index cb31c94913acfd097b6d285354ad8772ea1a28d5..f50d7d29ed2111c2f3d2fe0f7f1371aa32f648ff 100644
--- a/reco/littrack/CMakeLists.txt
+++ b/reco/littrack/CMakeLists.txt
@@ -22,6 +22,7 @@ ${CMAKE_CURRENT_SOURCE_DIR}/cbm/qa/fieldapr
 ${CMAKE_CURRENT_SOURCE_DIR}/cbm/qa/radlength
 ${CMAKE_CURRENT_SOURCE_DIR}/cbm/qa/tof
 
+${CBMROOT_SOURCE_DIR}/algo
 ${CBMROOT_SOURCE_DIR}/reco/base
 
 # needed only for the LitrackQA library
@@ -50,7 +51,6 @@ ${CBMDETECTORBASE_DIR}/rich/utils
 
 ${CBMROOT_SOURCE_DIR}/reco/KF
 ${CBMROOT_SOURCE_DIR}/reco/KF/Interface
-${CBMROOT_SOURCE_DIR}/reco/L1/vectors 
 
 ${CBMROOT_SOURCE_DIR}/run
 )
@@ -65,6 +65,7 @@ Set(SYSTEM_INCLUDE_DIRECTORIES
 Include_Directories(SYSTEM ${SYSTEM_INCLUDE_DIRECTORIES})
 
 set(LINK_DIRECTORIES
+${Algo_LIB_DIR}
 ${KFParticle_LIB_DIR}
 ${FAIRROOT_LIBRARY_DIR}
 ${ROOT_LIBRARY_DIR}
@@ -182,7 +183,7 @@ EndIf (Boost_FOUND)
 set(LINKDEF  LittrackLinkDef.h)
 Set(LIBRARY_NAME Littrack)
 Set(DEPENDENCIES
-    Littrackparallel KF KFParticleInterface L1 CbmMuchBase CbmStsBase CbmRichBase CbmRecoBase CbmBase CbmData
+    Algo Littrackparallel KF KFParticleInterface CbmMuchBase CbmStsBase CbmRichBase CbmRecoBase CbmBase CbmData
     CbmTofBase Base
 )
 GENERATE_LIBRARY()
diff --git a/reco/littrack/parallel/CMakeLists.txt b/reco/littrack/parallel/CMakeLists.txt
index 8aa95f147cdc127064c8adbc864833759803516d..73edc0172eb7c8cf98dc75790d98b43aadb99986 100644
--- a/reco/littrack/parallel/CMakeLists.txt
+++ b/reco/littrack/parallel/CMakeLists.txt
@@ -1,13 +1,14 @@
 # Create a library called "libLittrackparallel".
 
 set(INCLUDE_DIRECTORIES
-  ${CBMROOT_SOURCE_DIR}/reco/L1/vectors
+  ${CBMROOT_SOURCE_DIR}/algo
 )
 
 include_directories(${INCLUDE_DIRECTORIES})
 
 set(LINK_DIRECTORIES
   ${Vc_LIB_DIR}
+  ${Algo_LIB_DIR}
 )
 
 link_directories(${LINK_DIRECTORIES})
@@ -35,7 +36,7 @@ ENDIF(SSE_FOUND)
 add_library(Littrackparallel SHARED ${LITTRACKPARALLEL_SRCS})
 set_target_properties(Littrackparallel PROPERTIES ${FAIRROOT_LIBRARY_PROPERTIES})
 
-target_link_libraries(Littrackparallel Vc.a)
+target_link_libraries(Littrackparallel Algo Vc.a)
 
 # install(TARGETS Littrackparallel DESTINATION ${CMAKE_BINARY_DIR}/lib)
 install(TARGETS Littrackparallel DESTINATION lib)
diff --git a/reco/littrack/parallel/LitTypes.h b/reco/littrack/parallel/LitTypes.h
index ebb98961d3a47cd4a0b8c041c791655732246624..b3bbff2476ab64670dfc3fb42915edc4f21b5f45 100644
--- a/reco/littrack/parallel/LitTypes.h
+++ b/reco/littrack/parallel/LitTypes.h
@@ -12,6 +12,9 @@
 #ifndef LITTYPES_H_
 #define LITTYPES_H_
 
-#include "L1vecVc.h"
+#include "ca/simd/CaSimd.h"
+
+using cbm::algo::ca::fscal;
+using cbm::algo::ca::fvec;
 
 #endif /* LITTYPES_H_ */
diff --git a/reco/littrack/parallel/vectors/P4_F32vec4.h b/reco/littrack/parallel/vectors/P4_F32vec4.h
deleted file mode 100644
index 7361b284e81fbd28a69ba71a10e8d47f44c37b0a..0000000000000000000000000000000000000000
--- a/reco/littrack/parallel/vectors/P4_F32vec4.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/* Copyright (C) 2010-2014 GSI/JINR-LIT, Darmstadt/Dubna
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Andrey Lebedev [committer] */
-
-#ifndef LIT_F32VEC4P4_H
-#define LIT_F32VEC4P4_H
-
-
-#include <iostream>
-
-#include <cmath>
-
-#include "vec_arithmetic.h"
-#include "xmmintrin.h"
-
-/**********************************
- *
- *   Vector of four single floats
- *
- **********************************/
-
-//#pragma pack(push,16)/* Must ensure class & union 16-B aligned */
-
-//typedef __m128 VectorFloat __attribute__ ((aligned(16)));
-
-const union {
-  float f;
-  int i;
-} __f_one = {(float) 1.};
-
-const union {
-  int i[4];
-  __m128 m;
-} __f32vec4_abs_mask_cheat = {{0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff}},
-  __f32vec4_sgn_mask_cheat = {{static_cast<int>(0x80000000), static_cast<int>(0x80000000), static_cast<int>(0x80000000),
-                               static_cast<int>(0x80000000)}},
-  __f32vec4_zero_cheat = {{0, 0, 0, 0}}, __f32vec4_one_cheat = {{__f_one.i, __f_one.i, __f_one.i, __f_one.i}},
-  __f32vec4_true_cheat  = {{static_cast<int>(0xFFFFFFFF), static_cast<int>(0xFFFFFFFF), static_cast<int>(0xFFFFFFFF),
-                           static_cast<int>(0xFFFFFFFF)}},
-  __f32vec4_false_cheat = {{0x00000000, 0x00000000, 0x00000000, 0x00000000}};
-
-#define _f32vec4_abs_mask ((F32vec4) __f32vec4_abs_mask_cheat.m)
-#define _f32vec4_sgn_mask ((F32vec4) __f32vec4_sgn_mask_cheat.m)
-#define _f32vec4_zero ((F32vec4) __f32vec4_zero_cheat.m)
-#define _f32vec4_one ((F32vec4) __f32vec4_one_cheat.m)
-#define _f32vec4_true ((F32vec4) __f32vec4_true_cheat.m)
-#define _f32vec4_false ((F32vec4) __f32vec4_false_cheat.m)
-
-class F32vec4 {
-public:
-  __m128 v;
-
-  float& operator[](int i) { return ((float*) &v)[i]; }
-  float operator[](int i) const { return ((float*) &v)[i]; }
-
-  F32vec4() : v(_mm_set_ps1(0)) {}
-  F32vec4(const __m128& a) : v(a) {}
-  F32vec4(const float& a) : v(_mm_set_ps1(a)) {}
-
-  F32vec4(const float& f0, const float& f1, const float& f2, const float& f3) : v(_mm_set_ps(f3, f2, f1, f0)) {}
-
-  /* Conversion function */
-  operator __m128() const { return v; } /* Convert to __m128 */
-
-  /* Arithmetic Operators */
-  friend F32vec4 operator+(const F32vec4& a, const F32vec4& b) { return _mm_add_ps(a, b); }
-  friend F32vec4 operator-(const F32vec4& a, const F32vec4& b) { return _mm_sub_ps(a, b); }
-  friend F32vec4 operator*(const F32vec4& a, const F32vec4& b) { return _mm_mul_ps(a, b); }
-  friend F32vec4 operator/(const F32vec4& a, const F32vec4& b) { return _mm_div_ps(a, b); }
-
-  /* Functions */
-  friend F32vec4 min(const F32vec4& a, const F32vec4& b) { return _mm_min_ps(a, b); }
-  friend F32vec4 max(const F32vec4& a, const F32vec4& b) { return _mm_max_ps(a, b); }
-
-  /* Square Root */
-  friend F32vec4 sqrt(const F32vec4& a) { return _mm_sqrt_ps(a); }
-
-  /* Reciprocal( inverse) Square Root */
-  friend F32vec4 rsqrt(const F32vec4& a) { return _mm_rsqrt_ps(a); }
-
-  /* Reciprocal (inversion) */
-  friend F32vec4 rcp(const F32vec4& a) { return _mm_rcp_ps(a); }
-  //friend F32vec4 rcp  ( const F32vec4 &a ){ return 1./a; }
-
-  /* Absolute value */
-  friend F32vec4 fabs(const F32vec4& a) { return _mm_and_ps(a, _f32vec4_abs_mask); }
-
-  /* Sign */
-  friend F32vec4 sgn(const F32vec4& a) { return _mm_or_ps(_mm_and_ps(a, _f32vec4_sgn_mask), _f32vec4_one); }
-  friend F32vec4 asgnb(const F32vec4& a, const F32vec4& b) { return _mm_or_ps(_mm_and_ps(b, _f32vec4_sgn_mask), a); }
-
-  /* Logical */
-
-  friend F32vec4 operator&(const F32vec4& a, const F32vec4& b)
-  {  // mask returned
-    return _mm_and_ps(a, b);
-  }
-  friend F32vec4 operator|(const F32vec4& a, const F32vec4& b)
-  {  // mask returned
-    return _mm_or_ps(a, b);
-  }
-  friend F32vec4 operator^(const F32vec4& a, const F32vec4& b)
-  {  // mask returned
-    return _mm_xor_ps(a, b);
-  }
-  friend F32vec4 operator!(const F32vec4& a)
-  {  // mask returned
-    return _mm_xor_ps(a, _f32vec4_true);
-  }
-  //friend F32vec4 operator||( const F32vec4& a, const F32vec4& b ) { // mask returned
-  //   return _mm_or_ps(a, b);
-  //}
-
-  /* Comparison */
-
-  friend F32vec4 operator<(const F32vec4& a, const F32vec4& b)
-  {  // mask returned
-    return _mm_cmplt_ps(a, b);
-  }
-
-  /* Non intrinsic functions */
-
-#define _f1(A, F) F32vec4(F(A[0]), F(A[1]), F(A[2]), F(A[3]))
-
-  friend F32vec4 exp(const F32vec4& a) { return _f1(a, exp); }
-  friend F32vec4 log(const F32vec4& a) { return _f1(a, log); }
-  friend F32vec4 sin(const F32vec4& a) { return _f1(a, sin); }
-  friend F32vec4 cos(const F32vec4& a) { return _f1(a, cos); }
-
-#undef _f1
-
-  /* Define all operators for consistensy */
-
-  vec_arithmetic(F32vec4, float);
-
-  friend std::ostream& operator<<(std::ostream& strm, const F32vec4& a)
-  {
-    strm << a[0] << " " << a[1] << " " << a[2] << " " << a[3];
-    return strm;
-  }
-
-  friend std::istream& operator>>(std::istream& strm, F32vec4& a)
-  {
-    float tmp;
-    strm >> tmp;
-    a = tmp;
-    return strm;
-  }
-
-} __attribute__((aligned(16)));
-
-
-typedef F32vec4 fvec;
-typedef float fscal;
-const int fvecLen = 4;
-//#define fvec_true  _f32vec4_true
-//#define fvec_false _f32vec4_false
-#define _fvecalignment __attribute__((aligned(16)))
-
-#endif
diff --git a/reco/littrack/parallel/vectors/PSEUDO_F32vec1.h b/reco/littrack/parallel/vectors/PSEUDO_F32vec1.h
deleted file mode 100644
index 5d63232f6040383cdd50b8ac9acc1f63b0e56da1..0000000000000000000000000000000000000000
--- a/reco/littrack/parallel/vectors/PSEUDO_F32vec1.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/* Copyright (C) 2010-2013 GSI/JINR-LIT, Darmstadt/Dubna
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Andrey Lebedev [committer] */
-
-#ifndef LIT_F32VEC1_H
-#define LIT_F32VEC1_H
-
-#include <iostream>
-
-#include <cmath>
-
-/**********************************
- *
- *   Vector of one single float
- *
- **********************************/
-
-//const union {
-//   int i[1];
-//   float m;
-//}
-//__f32vec1_true_cheat     = {0xFFFFFFFF},
-//__f32vec1_false_cheat    = {0x00000000};
-
-//#define _f32vec1_true     ((F32vec1)__f32vec1_true_cheat.m)
-//#define _f32vec1_false    ((F32vec1)__f32vec1_false_cheat.m)
-
-class F32vec1 {
-public:
-  float v;
-
-  float& operator[](int i) { return v; }
-  float operator[](int i) const { return v; }
-
-  F32vec1() {}
-  F32vec1(const float& v0) { v = v0; }
-
-  /* Conversion function */
-  operator float() const { return v; } /* Convert to __m128 */
-
-  /* Arithmetic Operators */
-
-  /* Functions */
-  //friend F32vec1 min( const F32vec1 &a, const F32vec1 &b ){ return a<b ?a :b; }
-  //friend F32vec1 max( const F32vec1 &a, const F32vec1 &b ){ return a>b ?a :b; }
-
-  /* Square Root */
-
-  /* Reciprocal( inverse) Square Root */
-  //friend F32vec1 rsqrt( const F32vec1 &a ){ return 1./sqrt(a); }
-
-  /* Reciprocal (inversion) */
-  friend F32vec1 rcp(const F32vec1& a) { return 1. / a; }
-
-  /* Absolute value */
-  //friend F32vec1 fabs(const F32vec1 &a){ return fabs(a); }
-
-  /* Sign */
-  //friend F32vec1 sgn(const F32vec1 &a){ return a<0 ?-1 :(a>0 ?1 :0); }
-
-  /* Logical */
-  /*
-   friend F32vec1 operator&( const F32vec1 &a, const F32vec1 &b ){ // mask returned
-     F32vec1 tmp;
-     int *x = (int*)&tmp;
-     int *y = (int*)&a;
-     int *z = (int*)&b;
-     x[0] = y[0] & z[0];
-     x[1] = y[1] & z[1];
-     return tmp;
-   }
-   */
-  /* Non intrinsic functions */
-
-  /* Define all operators for consistensy */
-
-  friend void operator+=(F32vec1& a, const F32vec1& b) { a = a + b; }
-  friend void operator-=(F32vec1& a, const F32vec1& b) { a = a - b; }
-  friend void operator*=(F32vec1& a, const F32vec1& b) { a = a * b; }
-  friend void operator/=(F32vec1& a, const F32vec1& b) { a = a / b; }
-
-  friend std::ostream& operator<<(std::ostream& strm, const F32vec1& a)
-  {
-    strm << a[0];
-    return strm;
-  }
-
-  friend std::istream& operator>>(std::istream& strm, F32vec1& a)
-  {
-    float tmp;
-    strm >> tmp;
-    a = tmp;
-    return strm;
-  }
-
-};  //__attribute__ ((aligned(16)));;
-
-typedef F32vec1 fvec;
-const int fvecLen = 1;
-typedef float fscal;
-//#define fvec_true  _f32vec1_true
-//#define fvec_false _f32vec1_false
-#define _fvecalignment
-
-#endif
diff --git a/reco/littrack/parallel/vectors/vec_arithmetic.h b/reco/littrack/parallel/vectors/vec_arithmetic.h
deleted file mode 100644
index 8b98dce71b6d47578e70bac562adc60424d1fa18..0000000000000000000000000000000000000000
--- a/reco/littrack/parallel/vectors/vec_arithmetic.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Copyright (C) 2010-2014 GSI/JINR-LIT, Darmstadt/Dubna
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Andrey Lebedev [committer] */
-
-#ifndef LIT_VEC_ARITHMETIC_H
-#define LIT_VEC_ARITHMETIC_H
-
-/* Define all operators after definition of  basic operators */
-
-#define vec_arithmetic(V, S)                                                                                           \
-  friend V operator-(const V& a) { return V(0) - a; }                                                                  \
-  friend V operator+(const V& a) { return a; }                                                                         \
-  friend V operator+(const V& a, const S& b) { return a + V(b); }                                                      \
-  friend V operator-(const V& a, const S& b) { return a - V(b); }                                                      \
-  friend V operator*(const V& a, const S& b) { return a * V(b); }                                                      \
-  friend V operator/(const V& a, const S& b) { return a / V(b); }                                                      \
-  friend V operator+(const S& a, const V& b) { return V(a) + b; }                                                      \
-  friend V operator-(const S& a, const V& b) { return V(a) - b; }                                                      \
-  friend V operator*(const S& a, const V& b) { return V(a) * b; }                                                      \
-  friend V operator/(const S& a, const V& b) { return V(a) / b; }                                                      \
-  friend void operator+=(V& a, const V& b) { a = a + b; }                                                              \
-  friend void operator-=(V& a, const V& b) { a = a - b; }                                                              \
-  friend void operator*=(V& a, const V& b) { a = a * b; }                                                              \
-  friend void operator/=(V& a, const V& b) { a = a / b; }                                                              \
-  friend void operator+=(V& a, const S& b) { a = a + b; }                                                              \
-  friend void operator-=(V& a, const S& b) { a = a - b; }                                                              \
-  friend void operator*=(V& a, const S& b) { a = a * b; }                                                              \
-  friend void operator/=(V& a, const S& b) { a = a / b; }
-
-#endif