diff --git a/src/corner_falko_2d.cpp b/src/corner_falko_2d.cpp
index 80e5b84193c06f8f51272acbaf1c95d1e8d45b4e..6e7b42f66bb61d6049b496f0d4f204860be7ad12 100644
--- a/src/corner_falko_2d.cpp
+++ b/src/corner_falko_2d.cpp
@@ -9,30 +9,31 @@
 
 namespace wolf{
 
-void CornerFalko2d::extract (falkolib::LaserScan scan){
-    
-    
-    
-    fe.setMinExtractionRange(0.25);
-	fe.setMaxExtractionRange(25);
-	fe.enableSubbeam(true);
-    fe.setNMSRadius(0.1);
-    fe.setNeighB(0.01);
-    fe.setBRatio(4);
-	fe.setGridSectors(16);
-    
-    std::vector<falkolib::FALKO> keypoints;
-
-    /*
-    fe.extract(scan, keypoints);
-    
-    
-    falkolib::BSCExtractor<falkolib::FALKO> bsc(16,8);
-    std::vector<falkolib::BSC> bscDesc;
-    bsc.compute(scan, keypoints, bscDesc);
-    */
+CornerFalko2d::CornerFalko2d(int _circularSectorNumber, int _radialRingNumber, bool _useKeypointRadius, double _radius) :BSCExtractor( _circularSectorNumber, _radialRingNumber, _useKeypointRadius ,_radius ) {
+    // FALKO EXTRACTOR PARAMS
+    setMinExtractionRange(0.25);
+    setMaxExtractionRange(25);
+    enableSubbeam(true);
+    setNMSRadius(0.1);
+    setNeighB(0.01);
+    setBRatio(4);
+    setGridSectors(16);
+
 }
 
+
+void CornerFalko2d::train (falkolib::LaserScan scan){
+
+    // Extract keypoints
+    lastKeypointSet.clear();
+    extract(scan, lastKeypointSet);
+
+    //Compute descriptors
+    lastDescriptorSet.clear();
+    bsc.compute(scan, lastKeypointSet, lastDescriptorSet);
+
 }
 
+} // wolf namespace
+
 
diff --git a/src/corner_falko_2d.h b/src/corner_falko_2d.h
index b5986b333b4ddedc77e691ed256c2deba03bc443..13d52892da45e5c3ec3ee89e23335c6631b673f7 100644
--- a/src/corner_falko_2d.h
+++ b/src/corner_falko_2d.h
@@ -33,15 +33,25 @@
 
 namespace wolf
 {
-class CornerFalko2d
+
+/** \brief A 2D corner extractor and loop closure computing class
+ *
+ *
+ *
+ *
+ */
+
+class CornerFalko2d: public falkolib::FALKOExtractor, falkolib::BSCExtractor<falkolib::FALKO>
 {
 public:
-    /** \brief Constructor
-     * 
-     * Constructor
-     * 
-     **/
-    CornerFalko2d(); 
+    /**
+     * @brief Constructor
+     * @param _circularSectorNumber number of grid circular sector (BSCExtractor)
+     * @param _radialRingNumber number of grid radial number (BSCExtractor)
+     * @param _useKeypointRadius if true, the selected neighborhood points search radius is keypoint one (BSCExtractor)
+     * @param _radius neighborhood points search radius (BSCExtractor)
+     */
+    CornerFalko2d(int _circularSectorNumber=16, int _radialRingNumber=8, bool _useKeypointRadius = true, double _radius = 0.1) ;
         
     /** \brief Destructor
      * 
@@ -52,19 +62,28 @@ public:
 
     /** \brief Gets a set of landmarks/scenes to use as trained set.
      **/
-    void train();
+    void train(falkolib::LaserScan scan);
 
     /** \brief Extract landmark/scene (list of corners) from a given 2D scan
      **/
-    void extract(falkolib::LaserScan scan);
+    //void extract(falkolib::LaserScan scan);
 
     /** \brief compare new scans against the training set in order to find loop closures
      **/
     void findLoopClosure();
 
-    std::vector<std::vector<falkolib::FALKO>> CornerSet;
+    std::vector<std::vector<falkolib::FALKO>> keypointSets;
+    std::vector<falkolib::FALKO> lastKeypointSet;
     std::vector<std::vector<falkolib::BSC>> descriptorSets;
-    falkolib::FALKOExtractor fe;
+    std::vector<falkolib::BSC>lastDescriptorSet;
+
+    //int _circularSectorNumber;
+    //int _radialRingNumber;
+    // Keypoints extractor
+    //falkolib::FALKOExtractor fe;
+    // BSC descriptor extractor
+    //falkolib::BSCExtractor<falkolib::FALKO> bsc(_circularSectorNumber,_radialRingNumber);
+
 };
 
 } /* namespace wolf */