diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3de1ad0855c24d42a947a640eb44b619e0d4b6ed..1886fd5119aa1aaba3259fb5fcbfc1832e34bdbc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -85,11 +85,6 @@ find_package(PkgConfig)
 pkg_check_modules(csm QUIET csm)
 # link_directories(${csm_LIBRARY_DIRS})
 find_package(PCL 1.10 COMPONENTS common registration io)
-if (PCL_FOUND)
-include_directories(${PCL_INCLUDE_DIRS} )
-link_directories(${PCL_LIBRARY_DIRS})
-add_definitions(${PCL_DEFINITIONS})
-endif(PCL_FOUND)
 
 # ============ CONFIG.H ============ 
 set(_WOLF_ROOT_DIR ${CMAKE_SOURCE_DIR})
@@ -241,20 +236,6 @@ if(PCL_FOUND)
   SET(SRCS_PROCESSOR ${SRCS_PROCESSOR}
       src/processor/processor_odom_icp_3d.cpp
     )
-
-
-# SET(HDRS_PROCESSOR ${HDRS_PROCESSOR}
-#   include/${PROJECT_NAME}/processor/processor_loop_closure_falko.h
-#   )
-# SET(SRCS_PROCESSOR ${SRCS_PROCESSOR}
-#   src/processor/processor_loop_closure_falko.cpp
-#   )
-# SET(HDRS_FEATURE ${HDRS_FEATURE}
-#   include/${PROJECT_NAME}/feature/feature_scene_falko.h
-#   )
-# SET(SRCS_FEATURE ${SRCS_FEATURE}
-#   src/feature/feature_scene_falko.cpp
-#   )
 endif(PCL_FOUND)
 
 
diff --git a/include/laser/capture/capture_laser_3d.h b/include/laser/capture/capture_laser_3d.h
index 7917cb0d7e5d50f9623350d069f70238558edfab..4e0e84f6f4deb54d8c8ae6cde43efd0b0dedd7dd 100644
--- a/include/laser/capture/capture_laser_3d.h
+++ b/include/laser/capture/capture_laser_3d.h
@@ -31,8 +31,6 @@
 
 namespace wolf
 {
-namespace laser
-{
 
 WOLF_PTR_TYPEDEFS(CaptureLaser3d);
 
@@ -41,14 +39,14 @@ class CaptureLaser3d : public CaptureBase
   public:
     CaptureLaser3d(const TimeStamp& _timestamp, SensorBasePtr _sensor, pcl::PointCloud<pcl::PointXYZ>::Ptr _point_cloud);
     ~CaptureLaser3d();
-    pcl::PointCloud<pcl::PointXYZ>::Ptr getPointCloud() const;
+    pcl::PointCloud<pcl::PointXYZ>::Ptr getPointCloud();
+    pcl::PointCloud<pcl::PointXYZ>::ConstPtr getPointCloud() const;
 
     
   private:
     pcl::PointCloud<pcl::PointXYZ>::Ptr point_cloud_;
 };
 
-}  // namespace laser
 }  // namespace wolf
 
 #endif  // CAPTURE_LASER_3d_H_
\ No newline at end of file
diff --git a/include/laser/processor/processor_odom_icp_3d.h b/include/laser/processor/processor_odom_icp_3d.h
index 8ac0c656b4646922a25fe4198f8bef57291f9c0f..8a4e7902b2b8f3c4a8760ef90ef5df03b7dbd756 100644
--- a/include/laser/processor/processor_odom_icp_3d.h
+++ b/include/laser/processor/processor_odom_icp_3d.h
@@ -44,9 +44,6 @@
 namespace wolf
 {
 
-namespace laser
-{
-
 WOLF_STRUCT_PTR_TYPEDEFS(ParamsProcessorOdomIcp3d);
 
 struct ParamsProcessorOdomIcp3d : public ParamsProcessorTracker, public ParamsMotionProvider
@@ -168,7 +165,7 @@ class ProcessorOdomIcp3d : public ProcessorTracker, public MotionProvider
 
     void establishFactors() override;
 };
-}  // namespace laser
+
 }  // namespace wolf
 
 #endif  // SRC_PROCESSOR_ODOM_ICP_3D_H_
diff --git a/include/laser/sensor/sensor_laser_3d.h b/include/laser/sensor/sensor_laser_3d.h
index 771b96e061fd5bbe842169c6cac57c1458d3aaf3..9b9ca106bfbe6f220ea1e429ee140807d32528ec 100644
--- a/include/laser/sensor/sensor_laser_3d.h
+++ b/include/laser/sensor/sensor_laser_3d.h
@@ -27,8 +27,6 @@
 
 namespace wolf
 {
-namespace laser
-{
 
 WOLF_STRUCT_PTR_TYPEDEFS(ParamsSensorLaser3d);
 
@@ -54,8 +52,6 @@ class SensorLaser3d : public SensorBase
     ParamsSensorLaser3dPtr params_laser3d_;
 };
 
-
-}  // namespace laser
 }  // namespace wolf
 
 #endif  // SENSOR_LASER_3d_H_
\ No newline at end of file
diff --git a/include/laser/utils/laser3d_tools.h b/include/laser/utils/laser3d_tools.h
index f1c19fa21b1b2c217bcb2647522441f265f527a2..b0e2dcfd510bc083ff9e73282b427482822990cc 100644
--- a/include/laser/utils/laser3d_tools.h
+++ b/include/laser/utils/laser3d_tools.h
@@ -37,8 +37,6 @@
 
 namespace wolf
 {
-namespace laser
-{
 // _cloud_ref: first PointCloud
 // _cloud_other: second PointCloud
 inline void pairAlign(const pcl::PointCloud<pcl::PointXYZ>::Ptr                          _cloud_ref,
@@ -91,5 +89,4 @@ inline void pairAlign(const pcl::PointCloud<pcl::PointXYZ>::Ptr
     // _transform_final = _transform_final.inverse();   // Maybe we messed up
 }
 
-}  // namespace laser
 }  // namespace wolf
diff --git a/src/capture/capture_laser_3d.cpp b/src/capture/capture_laser_3d.cpp
index 63fe33ceb4f4e9b5bb7ac54408d9d9c3902c3f27..7df9a1b1f8c1a95aedd6000668c819976923ffe5 100644
--- a/src/capture/capture_laser_3d.cpp
+++ b/src/capture/capture_laser_3d.cpp
@@ -23,8 +23,6 @@
 
 namespace wolf
 {
-namespace laser
-{
 
 CaptureLaser3d::CaptureLaser3d(const TimeStamp& _timestamp, SensorBasePtr _sensor, pcl::PointCloud<pcl::PointXYZ>::Ptr _point_cloud)
     : CaptureBase("CaptureLaser3d", _timestamp, _sensor), point_cloud_(_point_cloud)
@@ -33,10 +31,14 @@ CaptureLaser3d::CaptureLaser3d(const TimeStamp& _timestamp, SensorBasePtr _senso
 
 CaptureLaser3d::~CaptureLaser3d() {}
 
-pcl::PointCloud<pcl::PointXYZ>::Ptr CaptureLaser3d::getPointCloud() const
+pcl::PointCloud<pcl::PointXYZ>::Ptr CaptureLaser3d::getPointCloud()
+{
+    return point_cloud_;
+}
+
+pcl::PointCloud<pcl::PointXYZ>::ConstPtr CaptureLaser3d::getPointCloud() const
 {
     return point_cloud_;
 }
 
-}  // namespace laser
 }  // namespace wolf
\ No newline at end of file
diff --git a/src/processor/processor_loop_closure_icp.cpp b/src/processor/processor_loop_closure_icp.cpp
index 09d35ccdf3fcc2eb75ced42a97da1d4844b798db..3877c722fd75ac1af83aab812cd42a4906a9d3f9 100644
--- a/src/processor/processor_loop_closure_icp.cpp
+++ b/src/processor/processor_loop_closure_icp.cpp
@@ -85,11 +85,8 @@ std::map<double,MatchLoopClosurePtr> ProcessorLoopClosureIcp::findLoopClosures(C
         // Frame can have more than one laser capture
         for (auto cap_ref : frm->getCapturesOfType<CaptureLaser2d>())
         {
-            auto cap_ref_laser = std::dynamic_pointer_cast<CaptureLaser2d>(cap_ref);
-            assert(cap_ref_laser != nullptr);
-
             // Match Scans
-            auto match = matchScans(cap_ref_laser, cap_laser);
+            auto match = matchScans(cap_ref, cap_laser);
 
             // IT'S A MATCH!
             if (match != nullptr)
diff --git a/src/processor/processor_odom_icp_3d.cpp b/src/processor/processor_odom_icp_3d.cpp
index 92e2dfdaf36b5c3b37581b6135a589e1228affab..c9104c9026b20e1f28ccb4f1d408851248e2c255 100644
--- a/src/processor/processor_odom_icp_3d.cpp
+++ b/src/processor/processor_odom_icp_3d.cpp
@@ -25,8 +25,7 @@
 
 namespace wolf
 {
-namespace laser
-{
+
 ProcessorOdomIcp3d::ProcessorOdomIcp3d(ParamsProcessorOdomIcp3dPtr _params)
     : ProcessorTracker("ProcessorOdomIcp3d", "PO", 3, _params), MotionProvider("PO", _params)
 {
@@ -187,5 +186,4 @@ void ProcessorOdomIcp3d::establishFactors()
         feature, feature, origin_laser_->getFrame(), shared_from_this(), false, TOP_MOTION);
 };
 
-}  // namespace laser
 }  // namespace wolf
\ No newline at end of file
diff --git a/src/sensor/sensor_laser_3d.cpp b/src/sensor/sensor_laser_3d.cpp
index f72ae298bdcac594a40d3cff7e61eb3e8733715a..1cb46b8b355aa6df5d6b37e9228d10e4228f1fc2 100644
--- a/src/sensor/sensor_laser_3d.cpp
+++ b/src/sensor/sensor_laser_3d.cpp
@@ -23,8 +23,6 @@
 
 namespace wolf
 {
-namespace laser
-{
 
 SensorLaser3d::SensorLaser3d(StateBlockPtr _p_ptr, StateBlockPtr _o_ptr)
     : SensorBase("SensorLaser3d", _p_ptr, _o_ptr, nullptr, 0)
@@ -44,5 +42,4 @@ SensorBase("SensorLaser3d",
 
 SensorLaser3d::~SensorLaser3d() {}
 
-}  // namespace laser
 }  // namespace wolf
\ No newline at end of file
diff --git a/test/gtest_laser3d_tools.cpp b/test/gtest_laser3d_tools.cpp
index d0cedb247a70c58e624f1bae5130e21646de5cc3..8c5541d5f51b220ebb2c56f1a702932fe629bd8b 100644
--- a/test/gtest_laser3d_tools.cpp
+++ b/test/gtest_laser3d_tools.cpp
@@ -86,7 +86,7 @@ TEST(pairAlign, identity)
     registration_solver.setMaximumIterations(200);
 
     // Alignment
-    wolf::laser::pairAlign(pcl_ref,
+    wolf::pairAlign(pcl_ref,
                            pcl_other,
                            transformation_guess,
                            transformation_final,
@@ -136,7 +136,7 @@ TEST(pairAlign, known_transformation)
     registration_solver.setMaximumIterations(100);
 
     // Alignment
-    wolf::laser::pairAlign(pcl_ref,
+    wolf::pairAlign(pcl_ref,
                            pcl_other,
                            transformation_guess,
                            transformation_final,
diff --git a/test/gtest_processor_odom_icp_3d.cpp b/test/gtest_processor_odom_icp_3d.cpp
index b14d44658b2b9233dfc20950ff418c232c6da045..0cb18a1fb3a270ef879cac22b38f1b1455596018 100644
--- a/test/gtest_processor_odom_icp_3d.cpp
+++ b/test/gtest_processor_odom_icp_3d.cpp
@@ -1,3 +1,24 @@
+//--------LICENSE_START--------
+//
+// Copyright (C) 2020,2021,2022 Institut de Robòtica i Informàtica Industrial, CSIC-UPC.
+// Authors: Joan Solà Ortega (jsola@iri.upc.edu)
+// All rights reserved.
+//
+// This file is part of WOLF
+// WOLF is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program.  If not, see <http://www.gnu.org/licenses/>.
+//
+//--------LICENSE_END--------
 // wolf
 #include "laser/processor/processor_odom_icp_3d.h"
 #include "core/processor/factory_processor.h"