diff --git a/src/corner_scene.h b/src/corner_scene.h
index a2cd43c7869b0b0c7c53ee420d3e18ca7d742324..19e45d3c057fe47c2b9d858ab9d11d733794cc96 100644
--- a/src/corner_scene.h
+++ b/src/corner_scene.h
@@ -11,13 +11,29 @@
 #include <iostream>
 #include <fstream>
 
+/**************************
+ *      Falko includes      *
+ **************************/
+#include <falkolib/Feature/FALKO.h>
+#include <falkolib/Feature/CGH.h>
+#include <falkolib/Feature/BSC.h>
+#include <falkolib/Feature/FALKOExtractor.h>
+
+#include <falkolib/Feature/BSCExtractor.h>
+#include <falkolib/Feature/CGHExtractor.h>
+
+#include <falkolib/Matching/NNMatcher.h>
+#include <falkolib/Matching/AHTMatcher.h>
+
 namespace laserscanutils
 {
+
+template <typename D>
 struct cornerScene{
-    std::vector<double> keypointsList;
-    std::vector<double> descriptorsList;
+    std::vector<falkolib::FALKO> keypointsList;
+    std::vector<D> descriptorsList;
 };
 
 } /* namespace laserscanutils */
 
-#endif /* CORNER_SCENE_H_ */
\ No newline at end of file
+#endif /* CORNER_SCENE_H_ */
diff --git a/src/loop_closure_base_2d.h b/src/loop_closure_base_2d.h
index ec48fe61056c4527c0ebfe6e327441088c1189d3..def39c0476b51016b0aa5921d63dd34dd2dafbcd 100644
--- a/src/loop_closure_base_2d.h
+++ b/src/loop_closure_base_2d.h
@@ -51,11 +51,12 @@ public:
 
     /** \brief compare new scans against the trained set in order to find loop closures
      **/
-    virtual void findLoopClosure(std::list<cornerScene>& scenes, const cornerScene newScene){}
+    //virtual void findLoopClosure(std::list<cornerScene>& scenes, const cornerScene newScene){}
+    virtual void findLoopClosure(){}
 
     /** \brief update the scene struct with keypoints and descriptors
      **/
-    virtual std::shared_ptr<cornerScene> extractScene(LaserScan &scan,LaserScanParams &scanParams){}
+    virtual void extractScene(LaserScan &scan,LaserScanParams &scanParams){}
 
     /** \brief Convert scans from laserscanutils::LaserScan to falkolib::LaserScan object
      **/
diff --git a/src/loop_closure_falko.cpp b/src/loop_closure_falko.cpp
index 9e9b3c4231dc77255e41930365355f29390bbb1d..38fb1643cfbb7e729d862ef391a05d8933154690 100644
--- a/src/loop_closure_falko.cpp
+++ b/src/loop_closure_falko.cpp
@@ -10,8 +10,8 @@
 namespace laserscanutils{
 
     //CONSTRUCTOR
-    template <typename E, typename M>
-    loopClosureFalko<E, M>::loopClosureFalko(){
+    template <typename D,typename E, typename M>
+    loopClosureFalko<D,E, M>::loopClosureFalko(){
         // FALKO Extractor Parameters
         setMinExtractionRange(0.1);
         setMaxExtractionRange(25);
@@ -23,18 +23,21 @@ namespace laserscanutils{
 
         // Matcher Extractor Parameters
         matcher.setDistanceThreshold(0.1);
+
     }
 
     // DESTRUCTOR
-    template <typename E, typename M>
-    loopClosureFalko<E,M>::~loopClosureFalko(){}
+    template <typename D,typename E, typename M>
+    loopClosureFalko<D,E,M>::~loopClosureFalko(){}
+
+    template <typename D,typename E, typename M>
+    std::shared_ptr<cornerScene<D>> loopClosureFalko<D,E, M>::extractScene(LaserScan &scan,LaserScanParams &scanParams){
+
+        auto scanFALKO =loopClosureFalko<D,E,M>::convert2LaserScanFALKO(scan, scanParams);
 
-    template <typename E, typename M>
-    std::shared_ptr<cornerScene> loopClosureFalko<E, M>::extractScene(LaserScan &scan,LaserScanParams &scanParams){
 
-        auto scanFALKO =loopClosureFalko<E,M>::convert2LaserScanFALKO(scan, scanParams);
+        auto NewScene=std::make_shared<cornerScene<D>>();
 
-        auto NewScene=std::make_shared<cornerScene>();
 
         return NewScene;
     }
diff --git a/src/loop_closure_falko.h b/src/loop_closure_falko.h
index 8a7aabd5e9f7c889abc8b00da66dc93a51c8e445..451cb82dd84e08df40956ff6d9c7758685e3df2f 100644
--- a/src/loop_closure_falko.h
+++ b/src/loop_closure_falko.h
@@ -34,12 +34,15 @@
 
 namespace laserscanutils
 {
+
+typedef falkolib::BSC bsc;
 typedef falkolib::BSCExtractor<falkolib::FALKO> bscExtractor;
 typedef falkolib::NNMatcher<falkolib::FALKO> NNMatcher;
 
+
    /** \brief A base class for loop closure using falko library
    **/
-template <typename E, typename M>
+template <typename D, typename E, typename M>
 class loopClosureFalko : public falkolib::FALKOExtractor{
 private:
 
@@ -54,11 +57,11 @@ public:
 
     /** \brief compare new scans against the trained set in order to find loop closures
      **/
-    void findLoopClosure(std::list<cornerScene>& scenes, const cornerScene newScene){}
+    //void findLoopClosure(std::list<cornerScene>& scenes, const cornerScene newScene){}
 
     /** \brief update the scene struct with keypoints and descriptors
      **/
-    std::shared_ptr<cornerScene> extractScene(LaserScan &scan,LaserScanParams &scanParams);
+    std::shared_ptr<cornerScene<D>> extractScene(LaserScan &scan,LaserScanParams &scanParams);
 
     E extractor;
     M matcher;