diff --git a/Fit/Param/RealLimits.cpp b/Fit/Param/RealLimits.cpp
index 7cd92523b448d25ac88d2fc665f4d1442c0d029e..7e949377f7010010d897be2c1b5a8980f91c136f 100644
--- a/Fit/Param/RealLimits.cpp
+++ b/Fit/Param/RealLimits.cpp
@@ -46,11 +46,6 @@ void RealLimits::setLowerLimit(double value)
     m_has_lower_limit = true;
 }
 
-void RealLimits::removeLowerLimit()
-{
-    m_lower_limit = 0.;
-    m_has_lower_limit = false;
-}
 double RealLimits::max() const
 {
     return m_upper_limit;
@@ -62,12 +57,6 @@ void RealLimits::setUpperLimit(double value)
     m_has_upper_limit = true;
 }
 
-void RealLimits::removeUpperLimit()
-{
-    m_upper_limit = 0.;
-    m_has_upper_limit = false;
-}
-
 void RealLimits::setLimits(double xmin, double xmax)
 {
     setLowerLimit(xmin);
diff --git a/Fit/Param/RealLimits.h b/Fit/Param/RealLimits.h
index 2b02bbfcfb315a3c7a4527e0a7bc456e989ec142..45e7081acdc34a194b7de9c9e9fb5ab920d5cc8d 100644
--- a/Fit/Param/RealLimits.h
+++ b/Fit/Param/RealLimits.h
@@ -31,18 +31,12 @@ public:
     //! Sets lower limit
     void setLowerLimit(double value);
 
-    //! remove lower limit
-    void removeLowerLimit();
-
     //! Returns upper limit
     double max() const;
 
     //! Sets upper limit
     void setUpperLimit(double value);
 
-    //! remove upper limit
-    void removeUpperLimit();
-
     //! Sets lower and upper limits
     void setLimits(double xmin, double xmax);
 
diff --git a/Tests/Unit/Fit/RealLimitsTest.cpp b/Tests/Unit/Fit/RealLimitsTest.cpp
index 88c4e7e04ae490dfb4f1751e12854e9ce2ebaa01..9bf3e52ab350ec4925468f0415c9b17dfcd5fdf9 100644
--- a/Tests/Unit/Fit/RealLimitsTest.cpp
+++ b/Tests/Unit/Fit/RealLimitsTest.cpp
@@ -31,47 +31,6 @@ TEST(RealLimitsTest, LimitsSetLimit)
     EXPECT_TRUE(limits.isInRange(9.0));
     EXPECT_FALSE(limits.isInRange(10.0));
     EXPECT_FALSE(limits.isInRange(20.0));
-
-    // [inf, -10.0[
-    limits.removeLowerLimit();
-    EXPECT_FALSE(limits.isLimited());
-    EXPECT_FALSE(limits.hasLowerLimit());
-    EXPECT_EQ(0.0, limits.min());
-
-    EXPECT_TRUE(limits.isInRange(-std::numeric_limits<double>::infinity()));
-    EXPECT_TRUE(limits.isInRange(-2.0));
-    EXPECT_TRUE(limits.isInRange(9.0));
-    EXPECT_FALSE(limits.isInRange(10.0));
-    EXPECT_FALSE(limits.isInRange(std::numeric_limits<double>::infinity()));
-
-    // [2.1, -10.0[
-    limits.setLowerLimit(2.1);
-    EXPECT_TRUE(limits.hasLowerLimit());
-    EXPECT_EQ(2.1, limits.min());
-
-    EXPECT_FALSE(limits.isInRange(-std::numeric_limits<double>::infinity()));
-    EXPECT_FALSE(limits.isInRange(2.0));
-    EXPECT_TRUE(limits.isInRange(2.1));
-
-    //[2.1, inf]
-    limits.removeUpperLimit();
-    EXPECT_FALSE(limits.isLimited());
-    EXPECT_FALSE(limits.hasUpperLimit());
-    EXPECT_EQ(0.0, limits.max());
-
-    EXPECT_FALSE(limits.isInRange(-std::numeric_limits<double>::infinity()));
-    EXPECT_FALSE(limits.isInRange(2.0));
-    EXPECT_TRUE(limits.isInRange(2.1));
-    EXPECT_TRUE(limits.isInRange(20.0));
-    EXPECT_TRUE(limits.isInRange(std::numeric_limits<double>::infinity()));
-
-    // [2.1, 2.2[
-    limits.setUpperLimit(2.2);
-    EXPECT_TRUE(limits.hasUpperLimit());
-    EXPECT_EQ(2.2, limits.max());
-    EXPECT_TRUE(limits.isLimited());
-    EXPECT_TRUE(limits.isInRange(2.15));
-    EXPECT_FALSE(limits.isInRange(2.2));
 }
 
 TEST(RealLimitsTest, LimitsLowerLimited)
diff --git a/auto/Wrap/libBornAgainFit.py b/auto/Wrap/libBornAgainFit.py
index 294270097830ff6eae43edef9e1cbcb42011e45d..f9e17339a24530e24561448dc99267bc0593e5ad 100644
--- a/auto/Wrap/libBornAgainFit.py
+++ b/auto/Wrap/libBornAgainFit.py
@@ -1674,10 +1674,6 @@ class RealLimits(object):
         r"""__init__(RealLimits self) -> RealLimits"""
         _libBornAgainFit.RealLimits_swiginit(self, _libBornAgainFit.new_RealLimits())
 
-    def hasLowerLimit(self):
-        r"""hasLowerLimit(RealLimits self) -> bool"""
-        return _libBornAgainFit.RealLimits_hasLowerLimit(self)
-
     def min(self):
         r"""min(RealLimits self) -> double"""
         return _libBornAgainFit.RealLimits_min(self)
@@ -1686,14 +1682,6 @@ class RealLimits(object):
         r"""setLowerLimit(RealLimits self, double value)"""
         return _libBornAgainFit.RealLimits_setLowerLimit(self, value)
 
-    def removeLowerLimit(self):
-        r"""removeLowerLimit(RealLimits self)"""
-        return _libBornAgainFit.RealLimits_removeLowerLimit(self)
-
-    def hasUpperLimit(self):
-        r"""hasUpperLimit(RealLimits self) -> bool"""
-        return _libBornAgainFit.RealLimits_hasUpperLimit(self)
-
     def max(self):
         r"""max(RealLimits self) -> double"""
         return _libBornAgainFit.RealLimits_max(self)
@@ -1702,10 +1690,6 @@ class RealLimits(object):
         r"""setUpperLimit(RealLimits self, double value)"""
         return _libBornAgainFit.RealLimits_setUpperLimit(self, value)
 
-    def removeUpperLimit(self):
-        r"""removeUpperLimit(RealLimits self)"""
-        return _libBornAgainFit.RealLimits_removeUpperLimit(self)
-
     def setLimits(self, xmin, xmax):
         r"""setLimits(RealLimits self, double xmin, double xmax)"""
         return _libBornAgainFit.RealLimits_setLimits(self, xmin, xmax)
@@ -1760,6 +1744,14 @@ class RealLimits(object):
         r"""__ne__(RealLimits self, RealLimits other) -> bool"""
         return _libBornAgainFit.RealLimits___ne__(self, other)
 
+    def hasLowerLimit(self):
+        r"""hasLowerLimit(RealLimits self) -> bool"""
+        return _libBornAgainFit.RealLimits_hasLowerLimit(self)
+
+    def hasUpperLimit(self):
+        r"""hasUpperLimit(RealLimits self) -> bool"""
+        return _libBornAgainFit.RealLimits_hasUpperLimit(self)
+
     def isLimitless(self):
         r"""isLimitless(RealLimits self) -> bool"""
         return _libBornAgainFit.RealLimits_isLimitless(self)
diff --git a/auto/Wrap/libBornAgainFit_wrap.cpp b/auto/Wrap/libBornAgainFit_wrap.cpp
index 49bb967e8df77eec18cf5bd9576f656acb81d582..27097dcb658358902c8b669ad66ce707559d6ac0 100644
--- a/auto/Wrap/libBornAgainFit_wrap.cpp
+++ b/auto/Wrap/libBornAgainFit_wrap.cpp
@@ -24190,39 +24190,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_RealLimits_hasLowerLimit(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  RealLimits *arg1 = (RealLimits *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  bool result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_RealLimits, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_hasLowerLimit" "', argument " "1"" of type '" "RealLimits const *""'"); 
-  }
-  arg1 = reinterpret_cast< RealLimits * >(argp1);
-  {
-    try {
-      result = (bool)((RealLimits const *)arg1)->hasLowerLimit();
-    } catch (const std::exception& ex) {
-      // message shown in the Python interpreter
-      const std::string msg {
-        "BornAgain C++ Exception: " + std::string(ex.what())
-      };
-      SWIG_exception(SWIG_RuntimeError, msg.c_str());
-    }
-  }
-  resultobj = SWIG_From_bool(static_cast< bool >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_RealLimits_min(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   RealLimits *arg1 = (RealLimits *) 0 ;
@@ -24295,71 +24262,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_RealLimits_removeLowerLimit(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  RealLimits *arg1 = (RealLimits *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_RealLimits, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_removeLowerLimit" "', argument " "1"" of type '" "RealLimits *""'"); 
-  }
-  arg1 = reinterpret_cast< RealLimits * >(argp1);
-  {
-    try {
-      (arg1)->removeLowerLimit();
-    } catch (const std::exception& ex) {
-      // message shown in the Python interpreter
-      const std::string msg {
-        "BornAgain C++ Exception: " + std::string(ex.what())
-      };
-      SWIG_exception(SWIG_RuntimeError, msg.c_str());
-    }
-  }
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_RealLimits_hasUpperLimit(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  RealLimits *arg1 = (RealLimits *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  bool result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_RealLimits, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_hasUpperLimit" "', argument " "1"" of type '" "RealLimits const *""'"); 
-  }
-  arg1 = reinterpret_cast< RealLimits * >(argp1);
-  {
-    try {
-      result = (bool)((RealLimits const *)arg1)->hasUpperLimit();
-    } catch (const std::exception& ex) {
-      // message shown in the Python interpreter
-      const std::string msg {
-        "BornAgain C++ Exception: " + std::string(ex.what())
-      };
-      SWIG_exception(SWIG_RuntimeError, msg.c_str());
-    }
-  }
-  resultobj = SWIG_From_bool(static_cast< bool >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_RealLimits_max(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   RealLimits *arg1 = (RealLimits *) 0 ;
@@ -24432,38 +24334,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_RealLimits_removeUpperLimit(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  RealLimits *arg1 = (RealLimits *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_RealLimits, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_removeUpperLimit" "', argument " "1"" of type '" "RealLimits *""'"); 
-  }
-  arg1 = reinterpret_cast< RealLimits * >(argp1);
-  {
-    try {
-      (arg1)->removeUpperLimit();
-    } catch (const std::exception& ex) {
-      // message shown in the Python interpreter
-      const std::string msg {
-        "BornAgain C++ Exception: " + std::string(ex.what())
-      };
-      SWIG_exception(SWIG_RuntimeError, msg.c_str());
-    }
-  }
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_RealLimits_setLimits(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   RealLimits *arg1 = (RealLimits *) 0 ;
@@ -24889,6 +24759,72 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_RealLimits_hasLowerLimit(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  RealLimits *arg1 = (RealLimits *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  bool result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_RealLimits, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_hasLowerLimit" "', argument " "1"" of type '" "RealLimits const *""'"); 
+  }
+  arg1 = reinterpret_cast< RealLimits * >(argp1);
+  {
+    try {
+      result = (bool)((RealLimits const *)arg1)->hasLowerLimit();
+    } catch (const std::exception& ex) {
+      // message shown in the Python interpreter
+      const std::string msg {
+        "BornAgain C++ Exception: " + std::string(ex.what())
+      };
+      SWIG_exception(SWIG_RuntimeError, msg.c_str());
+    }
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_RealLimits_hasUpperLimit(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  RealLimits *arg1 = (RealLimits *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  bool result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_RealLimits, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_hasUpperLimit" "', argument " "1"" of type '" "RealLimits const *""'"); 
+  }
+  arg1 = reinterpret_cast< RealLimits * >(argp1);
+  {
+    try {
+      result = (bool)((RealLimits const *)arg1)->hasUpperLimit();
+    } catch (const std::exception& ex) {
+      // message shown in the Python interpreter
+      const std::string msg {
+        "BornAgain C++ Exception: " + std::string(ex.what())
+      };
+      SWIG_exception(SWIG_RuntimeError, msg.c_str());
+    }
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_RealLimits_isLimitless(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   RealLimits *arg1 = (RealLimits *) 0 ;
@@ -29850,14 +29786,10 @@ static PyMethodDef SwigMethods[] = {
 	 { "vector_pvacuum_double_t_swigregister", vector_pvacuum_double_t_swigregister, METH_O, NULL},
 	 { "vector_pvacuum_double_t_swiginit", vector_pvacuum_double_t_swiginit, METH_VARARGS, NULL},
 	 { "new_RealLimits", _wrap_new_RealLimits, METH_NOARGS, "new_RealLimits() -> RealLimits"},
-	 { "RealLimits_hasLowerLimit", _wrap_RealLimits_hasLowerLimit, METH_O, "RealLimits_hasLowerLimit(RealLimits self) -> bool"},
 	 { "RealLimits_min", _wrap_RealLimits_min, METH_O, "RealLimits_min(RealLimits self) -> double"},
 	 { "RealLimits_setLowerLimit", _wrap_RealLimits_setLowerLimit, METH_VARARGS, "RealLimits_setLowerLimit(RealLimits self, double value)"},
-	 { "RealLimits_removeLowerLimit", _wrap_RealLimits_removeLowerLimit, METH_O, "RealLimits_removeLowerLimit(RealLimits self)"},
-	 { "RealLimits_hasUpperLimit", _wrap_RealLimits_hasUpperLimit, METH_O, "RealLimits_hasUpperLimit(RealLimits self) -> bool"},
 	 { "RealLimits_max", _wrap_RealLimits_max, METH_O, "RealLimits_max(RealLimits self) -> double"},
 	 { "RealLimits_setUpperLimit", _wrap_RealLimits_setUpperLimit, METH_VARARGS, "RealLimits_setUpperLimit(RealLimits self, double value)"},
-	 { "RealLimits_removeUpperLimit", _wrap_RealLimits_removeUpperLimit, METH_O, "RealLimits_removeUpperLimit(RealLimits self)"},
 	 { "RealLimits_setLimits", _wrap_RealLimits_setLimits, METH_VARARGS, "RealLimits_setLimits(RealLimits self, double xmin, double xmax)"},
 	 { "RealLimits_isInRange", _wrap_RealLimits_isInRange, METH_VARARGS, "RealLimits_isInRange(RealLimits self, double value) -> bool"},
 	 { "RealLimits_lowerLimited", _wrap_RealLimits_lowerLimited, METH_O, "RealLimits_lowerLimited(double bound_value) -> RealLimits"},
@@ -29870,6 +29802,8 @@ static PyMethodDef SwigMethods[] = {
 	 { "RealLimits_clamp", _wrap_RealLimits_clamp, METH_VARARGS, "RealLimits_clamp(RealLimits self, double value) -> double"},
 	 { "RealLimits___eq__", _wrap_RealLimits___eq__, METH_VARARGS, "RealLimits___eq__(RealLimits self, RealLimits other) -> bool"},
 	 { "RealLimits___ne__", _wrap_RealLimits___ne__, METH_VARARGS, "RealLimits___ne__(RealLimits self, RealLimits other) -> bool"},
+	 { "RealLimits_hasLowerLimit", _wrap_RealLimits_hasLowerLimit, METH_O, "RealLimits_hasLowerLimit(RealLimits self) -> bool"},
+	 { "RealLimits_hasUpperLimit", _wrap_RealLimits_hasUpperLimit, METH_O, "RealLimits_hasUpperLimit(RealLimits self) -> bool"},
 	 { "RealLimits_isLimitless", _wrap_RealLimits_isLimitless, METH_O, "RealLimits_isLimitless(RealLimits self) -> bool"},
 	 { "RealLimits_isPositive", _wrap_RealLimits_isPositive, METH_O, "RealLimits_isPositive(RealLimits self) -> bool"},
 	 { "RealLimits_isNonnegative", _wrap_RealLimits_isNonnegative, METH_O, "RealLimits_isNonnegative(RealLimits self) -> bool"},