diff --git a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/SplineSmoothing.h b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/SplineSmoothing.h
index 21b74320570fc4be36a548f19d2d345bf1b5dac8..3c95fe4d0f927d458811de8854ffba1ab3ea2b70 100644
--- a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/SplineSmoothing.h
+++ b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/SplineSmoothing.h
@@ -61,7 +61,7 @@ private:
   void exec();
 
   /// smooth a single spectrum of the workspace
-  void smoothSpectrum(int index);
+  void smoothSpectrum(int index, int maxBreaks);
 
   /// calculate derivatives for a single spectrum
   void calculateSpectrumDerivatives(int index, int order);
@@ -81,7 +81,7 @@ private:
 
   /// choose points to define a spline and smooth the data
   void selectSmoothingPoints(API::MatrixWorkspace_const_sptr inputWorkspace,
-                             size_t row);
+                             size_t row, int maxBreaks);
 
   /// calculate the spline based on the smoothing points chosen
   void calculateSmoothing(API::MatrixWorkspace_const_sptr inputWorkspace,
diff --git a/Code/Mantid/Framework/CurveFitting/src/SplineSmoothing.cpp b/Code/Mantid/Framework/CurveFitting/src/SplineSmoothing.cpp
index cd8f927f1b604c449bffd99f6cc62acc2d04dc88..7ff4be49e2e726c85841191a50e49311beace43e 100644
--- a/Code/Mantid/Framework/CurveFitting/src/SplineSmoothing.cpp
+++ b/Code/Mantid/Framework/CurveFitting/src/SplineSmoothing.cpp
@@ -69,6 +69,11 @@ void SplineSmoothing::init() {
   errorSizeValidator->setLower(0.0);
   declareProperty("Error", 0.05, errorSizeValidator,
                   "The amount of error we wish to tolerate in smoothing");
+
+  auto numOfBreaks = boost::make_shared<BoundedValidator<int>>();
+  numOfBreaks->setLower(M_START_SMOOTH_POINTS);
+  declareProperty("MaxNumberOfBreaks", 0, numOfBreaks,
+                  "To set the positions of the break-points");
 }
 
 //----------------------------------------------------------------------------------------------
@@ -80,6 +85,9 @@ void SplineSmoothing::exec() {
   int histNo = static_cast<int>(m_inputWorkspace->getNumberHistograms());
   int order = static_cast<int>(getProperty("DerivOrder"));
 
+  // retrieving number of breaks
+  int maxBreaks = static_cast<int>(getProperty("MaxNumberOfBreaks"));
+
   m_inputWorkspacePointData = convertBinnedData(m_inputWorkspace);
   m_outputWorkspace = setupOutputWorkspace(m_inputWorkspacePointData, histNo);
 
@@ -90,7 +98,7 @@ void SplineSmoothing::exec() {
 
   Progress pgress(this, 0.0, 1.0, histNo);
   for (int i = 0; i < histNo; ++i) {
-    smoothSpectrum(i);
+    smoothSpectrum(i, maxBreaks);
     calculateSpectrumDerivatives(i, order);
     pgress.report();
   }
@@ -106,12 +114,12 @@ void SplineSmoothing::exec() {
  *
  * @param index :: index of the spectrum to smooth
  */
-void SplineSmoothing::smoothSpectrum(int index) {
+void SplineSmoothing::smoothSpectrum(int index, int maxBreaks) {
   m_cspline = boost::make_shared<BSpline>();
   m_cspline->setAttributeValue("Uniform", false);
 
   // choose some smoothing points from input workspace
-  selectSmoothingPoints(m_inputWorkspacePointData, index);
+  selectSmoothingPoints(m_inputWorkspacePointData, index, maxBreaks);
   performAdditionalFitting(m_inputWorkspacePointData, index);
 
   // compare the data set against our spline
@@ -204,10 +212,9 @@ SplineSmoothing::convertBinnedData(MatrixWorkspace_sptr workspace) {
  * @param outputWorkspace :: The output workspace
  * @param row :: The row of spectra to use
  */
-void
-SplineSmoothing::calculateSmoothing(MatrixWorkspace_const_sptr inputWorkspace,
-                                    MatrixWorkspace_sptr outputWorkspace,
-                                    size_t row) const {
+void SplineSmoothing::calculateSmoothing(
+    MatrixWorkspace_const_sptr inputWorkspace,
+    MatrixWorkspace_sptr outputWorkspace, size_t row) const {
   // define the spline's parameters
   const auto &xIn = inputWorkspace->readX(row);
   size_t nData = xIn.size();
@@ -302,29 +309,41 @@ void SplineSmoothing::addSmoothingPoints(const std::set<int> &points,
  * @param row :: The row of spectra to use
  */
 void SplineSmoothing::selectSmoothingPoints(
-    MatrixWorkspace_const_sptr inputWorkspace, size_t row) {
+    MatrixWorkspace_const_sptr inputWorkspace, size_t row, int maxBreaks) {
   std::set<int> smoothPts;
   const auto &xs = inputWorkspace->readX(row);
   const auto &ys = inputWorkspace->readY(row);
 
   int xSize = static_cast<int>(xs.size());
-
+  // if retrienved value is default zero
+  if (maxBreaks == 0) {
+    setProperty("MaxNumberOfBreaks", xs.size());
+    maxBreaks = static_cast<int>(getProperty("MaxNumberOfBreaks"));
+  }
   // number of points to start with
-  int numSmoothPts(M_START_SMOOTH_POINTS);
+  int numSmoothPts(maxBreaks);
 
   // evenly space initial points over data set
   int delta = xSize / numSmoothPts;
-  for (int i = 0; i < xSize; i += delta) {
+  
+  g_log.information() << "delta is: " << delta << std::endl;
+  
+  for (int i = 0; i < xSize; i+=delta) {
     smoothPts.insert(i);
   }
   smoothPts.insert(xSize - 1);
+  
+  g_log.information() << "smoothPtrs has: " << smoothPts.size() << " elements"
+                      << std::endl;
 
   bool resmooth(true);
   while (resmooth) {
     // if we're using all points then we can't do anything more.
-    if (smoothPts.size() >= xs.size() - 1)
+    if (smoothPts.size() > maxBreaks + 2)
       break;
 
+    g_log.information() << "iteration inside resmooth " << std::endl;
+
     addSmoothingPoints(smoothPts, xs.data(), ys.data());
     resmooth = false;