diff --git a/src/corner_falko_2d.cpp b/src/corner_falko_2d.cpp
index 5c1193ad957e56c19361e0b118f3d29132ee540b..c48b92836c734472d6c9acfd62171644a6c6311a 100644
--- a/src/corner_falko_2d.cpp
+++ b/src/corner_falko_2d.cpp
@@ -29,13 +29,7 @@ CornerFalko2d::~CornerFalko2d()
 
 }
 
-void CornerFalko2d::storeCorners (LaserScan scan,LaserScanParams scanParams, int scanInterval){
-
-    scanNumber=scanNumber+1;
-
-    if (scanNumber % scanInterval == 0){
-
-        falkolib::LaserScan scanFALKO= convert2LaserScanFALKO(scan, scanParams);
+void CornerFalko2d::AddNewReferenceScene (falkolib::LaserScan scanFALKO){
 
         // Extract keypoints
         lastKeypointSet.clear();
@@ -50,8 +44,6 @@ void CornerFalko2d::storeCorners (LaserScan scan,LaserScanParams scanParams, int
 
         scansExtracted=scansExtracted+1;
 
-    }
-
 }
 
 void CornerFalko2d::findLoopClosure(LaserScan scan,LaserScanParams scanParams){
@@ -80,15 +72,7 @@ void CornerFalko2d::findLoopClosure(LaserScan scan,LaserScanParams scanParams){
             matchingNumber=NewMatchingNumber;
             matchingPosition=i;
         }
-
-/*        for (auto& match : assoNN) {
-            if (match.second >= 0) {
-                int i1 = match.first;
-                int i2 = match.second;
-                std::cout << "i1: " << i1 << "\ti2: " << i2 << "\t keypoints distance: " << (keypoints1[i1].distance(keypoints2[i2])) << "\t CHG Distance: " << (cghDesc1[i1].distance(cghDesc2[i2])) << "\t BSC Distance: " << (bscDesc1[i1].distance(bscDesc2[i2])) << endl;
-            }
-       }
- */    }
+    }
 
 }
 
@@ -101,6 +85,26 @@ falkolib::LaserScan CornerFalko2d::convert2LaserScanFALKO(LaserScan scan,LaserSc
 
 }
 
+int CornerFalko2d::evaluateNewReferenceScene(LaserScan scan,LaserScanParams scanParams, int scanInterval){
+
+    scanNumber=scanNumber+1;
+
+    int NewSceneAdded=0;
+
+    if (scanNumber % scanInterval == 0){
+
+        falkolib::LaserScan scanFALKO= convert2LaserScanFALKO(scan, scanParams);
+
+        AddNewReferenceScene(scanFALKO);
+
+        NewSceneAdded=1;
+
+    }
+
+    return NewSceneAdded;
+
+}
+
 
 
 } // laserscanutils namespace
diff --git a/src/corner_falko_2d.h b/src/corner_falko_2d.h
index 4d707cd150fe6bfe6795001efc9ad17e5f605891..bdab93494a13c3a96eae9a81d9170b940621513f 100644
--- a/src/corner_falko_2d.h
+++ b/src/corner_falko_2d.h
@@ -48,6 +48,11 @@ namespace laserscanutils
 
 class CornerFalko2d: public falkolib::FALKOExtractor, public falkolib::BSCExtractor<falkolib::FALKO>, public falkolib::NNMatcher<falkolib::FALKO>
 {
+private:
+    /** \brief Get and stores a scene to use as trained/Reference set of keypoints.
+     **/
+    void AddNewReferenceScene (falkolib::LaserScan scanFALKO);
+
 public:
     /**
      * @brief Constructor
@@ -65,10 +70,6 @@ public:
      **/
     ~CornerFalko2d();
 
-    /** \brief Gets a set of landmarks/scenes to use as trained set.
-     **/
-    void storeCorners(LaserScan scan, LaserScanParams scanParams, int scanInterval);
-
     /** \brief Extract landmark/scene (list of corners) from a given 2D scan
      **/
 
@@ -85,6 +86,13 @@ public:
      **/
     falkolib::LaserScan convert2LaserScanFALKO(LaserScan scan,LaserScanParams scanParams);
 
+    /** \brief Evaluates if New scene is a good candidate to be a Reference Scene. If it is detected as good,
+     * the scene is added and the functions returns 1. If it is not a good candidate, the function returns 0
+     * and the scene is not added.
+     **/
+    int evaluateNewReferenceScene(LaserScan scan,LaserScanParams scanParams, int scanInterval);
+
+
     std::vector<std::vector<falkolib::FALKO>> keypointSets;
     std::vector<falkolib::FALKO> lastKeypointSet;
     std::vector<std::vector<falkolib::BSC>> descriptorSets;
diff --git a/src/examples/corner_falko_demo.cpp b/src/examples/corner_falko_demo.cpp
index 4a969bd798a33c0370acd0202ebb1663123913eb..e9af47f7d89e519686f0908b07ad9c84739d40e6 100644
--- a/src/examples/corner_falko_demo.cpp
+++ b/src/examples/corner_falko_demo.cpp
@@ -35,7 +35,7 @@ int main(int argc, char** argv)
 
     CornerFalko2d cornerMatching;
 
-    cornerMatching.storeCorners(scan, laserParams, scanInterval);
+    cornerMatching.evaluateNewReferenceScene(scan, laserParams, scanInterval);
 
     std::cout << "num keypoints1 extracted: " << cornerMatching.lastKeypointSet.size() << std::endl;