diff --git a/reco/L1/L1Algo/L1CAIteration.cxx b/reco/L1/L1Algo/L1CAIteration.cxx
index f2e7e3cadacc7f56dd50b7235f731545399d9e46..ecc36542ab1307f8ee34eefbb7c0246bd6b25894 100644
--- a/reco/L1/L1Algo/L1CAIteration.cxx
+++ b/reco/L1/L1Algo/L1CAIteration.cxx
@@ -11,15 +11,18 @@
 
 #include "L1CAIteration.h"
 
-#include <FairLogger.h>
-
 #include <sstream>
-//
-//----------------------------------------------------------------------------------------------------------------------
+
+#include "L1Constants.h"
+
+using namespace L1Constants::size;
+
+
+// ---------------------------------------------------------------------------------------------------------------------
 //
 L1CAIteration::L1CAIteration() noexcept { LOG(debug) << "L1CAIteration: Default constructor called for " << this; }
-//
-//----------------------------------------------------------------------------------------------------------------------
+
+// ---------------------------------------------------------------------------------------------------------------------
 //
 L1CAIteration::L1CAIteration(const L1CAIteration& other) noexcept
   // Basic fields
@@ -46,31 +49,31 @@ L1CAIteration::L1CAIteration(const L1CAIteration& other) noexcept
   , fIfSuppressGhost(other.fIfSuppressGhost)
 {
 }
-//
-//----------------------------------------------------------------------------------------------------------------------
+
+// ---------------------------------------------------------------------------------------------------------------------
 //
 L1CAIteration::L1CAIteration(L1CAIteration&& other) noexcept
 {
   this->Swap(other);
 }
-//
-//----------------------------------------------------------------------------------------------------------------------
+
+// ---------------------------------------------------------------------------------------------------------------------
 //
 L1CAIteration::L1CAIteration(const std::string& name) noexcept : fName(name) {}
-//
-//----------------------------------------------------------------------------------------------------------------------
+
+// ---------------------------------------------------------------------------------------------------------------------
 //
 L1CAIteration::~L1CAIteration() noexcept {}
-//
-//----------------------------------------------------------------------------------------------------------------------
+
+// ---------------------------------------------------------------------------------------------------------------------
 //
 L1CAIteration& L1CAIteration::operator=(const L1CAIteration& other) noexcept
 {
   if (this != &other) { L1CAIteration(other).Swap(*this); }
   return *this;
 }
-//
-//----------------------------------------------------------------------------------------------------------------------
+
+// ---------------------------------------------------------------------------------------------------------------------
 //
 L1CAIteration& L1CAIteration::operator=(L1CAIteration&& other) noexcept
 {
@@ -80,24 +83,46 @@ L1CAIteration& L1CAIteration::operator=(L1CAIteration&& other) noexcept
   }
   return *this;
 }
+
+// ---------------------------------------------------------------------------------------------------------------------
 //
-//----------------------------------------------------------------------------------------------------------------------
+bool L1CAIteration::Check() const
+{
+  bool res = true;
+  // TODO: SZh 06.10.2022: These values should be tuned
+  res = this->CheckValueLimits<float>("track_chi2_cut", fTrackChi2Cut, 0.f, 12.f) && res;
+  res = this->CheckValueLimits<float>("triplet_chi2_cut", fTripletChi2Cut, 0.f, 30.f) && res;
+  res = this->CheckValueLimits<float>("doublet_chi2_cut", fDoubletChi2Cut, 0.f, 15.f) && res;
+  res = this->CheckValueLimits<float>("pick_gather", fPickGather, 2.f, 5.f) && res;
+  res = this->CheckValueLimits<float>("pick_neighbour", fPickNeighbour, 2.f, 6.f) && res;
+  res = this->CheckValueLimits<float>("min_momentum", fMaxInvMom, 1.f / 1.f, 1.f / 0.05f) && res;
+  res = this->CheckValueLimits<float>("max_slope_pv", fMaxSlopePV, 0.1f, 2.f) && res;
+  res = this->CheckValueLimits<float>("max_slope", fMaxSlope, 1.f, 3.f) && res;
+  res = this->CheckValueLimits<float>("max_dz", fMaxDZ, 0.f, 1.0f) && res;
+  res = this->CheckValueLimits<int>("min_start_triplet_lvl", fMinLevelTripletStart, 0, 5) && res;
+  res = this->CheckValueLimits<int>("first_station_index", fFirstStationIndex, 0, kMaxNstations) && res;
+  res = this->CheckValueLimits<float>("target_pos_sigma_x", fTargetPosSigmaX, 0.01f, 15.f) && res;
+  res = this->CheckValueLimits<float>("target_pos_sigma_y", fTargetPosSigmaY, 0.01f, 15.f) && res;
+  return res;
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
 //
 void L1CAIteration::Print(int verbosityLevel) const
 {
   if (verbosityLevel == 0) { LOG(info) << "  - " << fName; }
   if (verbosityLevel > 0) { LOG(info) << ToString(0); }
 }
-//
-//----------------------------------------------------------------------------------------------------------------------
+
+// ---------------------------------------------------------------------------------------------------------------------
 //
 void L1CAIteration::SetTargetPosSigmaXY(float sigmaX, float sigmaY)
 {
   fTargetPosSigmaX = sigmaX;
   fTargetPosSigmaY = sigmaY;
 }
-//
-//----------------------------------------------------------------------------------------------------------------------
+
+// ---------------------------------------------------------------------------------------------------------------------
 //
 void L1CAIteration::Swap(L1CAIteration& other) noexcept
 {
@@ -124,8 +149,8 @@ void L1CAIteration::Swap(L1CAIteration& other) noexcept
   std::swap(fIfJumped, other.fIfJumped);
   std::swap(fIfSuppressGhost, other.fIfSuppressGhost);
 }
-//
-//----------------------------------------------------------------------------------------------------------------------
+
+// ---------------------------------------------------------------------------------------------------------------------
 //
 std::string L1CAIteration::ToString(int indentLevel) const
 {
diff --git a/reco/L1/L1Algo/L1CAIteration.h b/reco/L1/L1Algo/L1CAIteration.h
index 63d82156dd8f7d0c47a4c57682e6a84ee31f1806..508544c0ff39ce794fcc3af84faed12ebfcc7655 100644
--- a/reco/L1/L1Algo/L1CAIteration.h
+++ b/reco/L1/L1Algo/L1CAIteration.h
@@ -12,6 +12,8 @@
 #ifndef L1CAIteration_h
 #define L1CAIteration_h 1
 
+#include <FairLogger.h>
+
 #include <boost/serialization/access.hpp>
 #include <boost/serialization/string.hpp>
 
@@ -48,6 +50,9 @@ public:
   /// Move assignment operator
   L1CAIteration& operator=(L1CAIteration&& other) noexcept;
 
+  /// Checks parameters consistency
+  bool Check() const;
+
   /// Gets doublet chi2 upper cut
   float GetDoubletChi2Cut() const { return fDoubletChi2Cut; }
 
@@ -270,8 +275,29 @@ private:
     ar& fIfSuppressGhost;
   }
 
+  /// Checks, if a particular value lies within selected limits. In case of fail throws std::logic_error
+  /// \param  name   Name of parameters
+  /// \param  value  Value of parameter
+  /// \param  lLimit Lower limit of parameter
+  /// \param  uLimit Upper limit of parameter
+  template<typename T>
+  static bool CheckValueLimits(const std::string& name, T value, T lLimit, T uLimit);
 
   // ^ TODO: invent more proper name
 };
 
+// ---------------------------------------------------------------------------------------------------------------------
+// TODO: SZh. 06.10.2022: Probably, this method should be replaced to L1Utils
+template<typename T>
+bool L1CAIteration::CheckValueLimits(const std::string& name, T value, T lLimit, T uLimit)
+{
+  if (value < lLimit || value > uLimit) {
+    LOG(error) << "parameter\033[1;32m" << name << "\033[0m (" << value << ") runs out of range: [" << lLimit << ','
+               << uLimit << ']';
+    return false;
+  }
+  return true;
+}
+
+
 #endif  // L1CAIteration_h
diff --git a/reco/L1/L1Algo/L1Parameters.cxx b/reco/L1/L1Algo/L1Parameters.cxx
index 0ee8740a0c6789b100b9557d02e551b909dd7299..f3ec96511d3ec7dcd015c45b36d04a4a419e645d 100644
--- a/reco/L1/L1Algo/L1Parameters.cxx
+++ b/reco/L1/L1Algo/L1Parameters.cxx
@@ -235,8 +235,10 @@ void L1Parameters::CheckConsistency() const
 
   /*
    *  Check iterations sequence
-   *  1. Number of iterations with TrackFromTriplets flag turned on no more then 1
-   *  2. If this iteration exists, it should be the last one in the sequence
+   *  1. Number of iterations should be larger then zero
+   *  2. Each iteration should contain values within predefined limits
+   *  3. Number of iterations with TrackFromTriplets flag turned on no more then 1
+   *  4. If the TrackFromTriplets iteration exists, it should be the last one in the sequence
    */
   {
     int nIterations = fCAIterations.size();
@@ -246,6 +248,16 @@ void L1Parameters::CheckConsistency() const
       throw std::logic_error(msg.str());
     }
 
+    std::string names = "";
+    for (const auto iter : fCAIterations) {
+      if (!iter.Check()) { names += iter.GetName() + " "; }
+    }
+    if (names.size()) {
+      std::stringstream msg;
+      msg << "L1Parameters: some parameters are out of range for the following iterations: " << names;
+      throw std::logic_error(msg.str());
+    }
+
     nIterations = std::count_if(fCAIterations.begin(), fCAIterations.end(),
                                 [=](const L1CAIteration& it) { return it.GetTrackFromTripletsFlag(); });
     if (nIterations > 1) {