diff --git a/src/icp.cpp b/src/icp.cpp
index 4db9504012ebd82b71b7c3fdbbdf6f643894ec37..aa43c13911d56725e6bd1c40d75c73104e62830e 100644
--- a/src/icp.cpp
+++ b/src/icp.cpp
@@ -13,7 +13,6 @@ public:
     {
         int num_rays = scan.ranges_raw_.size();
         laser_data = ld_alloc_new(num_rays);
-
         int i = 0;
         for(auto it : scan.ranges_raw_){
             laser_data->theta[i] = scan_params.angle_min_ + i*scan_params.angle_step_;
@@ -29,9 +28,6 @@ public:
             ++i;
         }
 
-        // for(int i = 0; i < num_rays; ++i){
-        //     laser_data->theta[i] = laser_data->theta[i] * 0.0175;
-        // }
         laser_data->min_theta = laser_data->theta[0];
         laser_data->max_theta = laser_data->theta[num_rays-1];
 
@@ -89,8 +85,70 @@ icpOutput ICP::align(const LaserScan &_current_ls, const LaserScan &_ref_ls, con
   csm_input.outliers_maxPerc = _icp_params.outliers_maxPerc;
   csm_input.outliers_adaptive_order = _icp_params.outliers_adaptive_order;
   csm_input.outliers_adaptive_mult = _icp_params.outliers_adaptive_mult;
-
-  csm_input.do_compute_covariance = 1;
+  csm_input.do_compute_covariance = _icp_params.do_compute_covariance;
+
+  csm_input.max_angular_correction_deg = _icp_params.max_angular_correction_deg;
+  csm_input.max_linear_correction = _icp_params.max_linear_correction;
+  csm_input.epsilon_xy = _icp_params.epsilon_xy;
+  csm_input.epsilon_theta = _icp_params.epsilon_theta;
+  csm_input.sigma = _icp_params.sigma;
+  csm_input.restart = _icp_params.restart;
+  csm_input.restart_threshold_mean_error = _icp_params.restart_threshold_mean_error;
+  csm_input.restart_dt = _icp_params.restart_dt;
+  csm_input.restart_dtheta = _icp_params.restart_dtheta;
+  csm_input.clustering_threshold = _icp_params.clustering_threshold;
+  csm_input.orientation_neighbourhood = _icp_params.orientation_neighbourhood;
+  csm_input.do_alpha_test = _icp_params.do_alpha_test;
+  csm_input.do_alpha_test_thresholdDeg = _icp_params.do_alpha_test_thresholdDeg;
+  csm_input.do_visibility_test = _icp_params.do_visibility_test;
+  csm_input.outliers_remove_doubles = _icp_params.outliers_remove_doubles;
+  csm_input.debug_verify_tricks = _icp_params.debug_verify_tricks;
+  csm_input.gpm_theta_bin_size_deg = _icp_params.gpm_theta_bin_size_deg;
+  csm_input.gpm_extend_range_deg = _icp_params.gpm_extend_range_deg;
+  csm_input.gpm_interval = _icp_params.gpm_interval;
+
+  // std::cout<< "=========================================================================================================================================\n";
+  // std::cout << "csm max_angular_correction_deg " << csm_input.max_angular_correction_deg << " icp max_angular_correction_deg " << _icp_params.max_angular_correction_deg << "\n";
+  // std::cout << "csm max_linear_correction " << csm_input.max_linear_correction << " icp max_linear_correction " << _icp_params.max_linear_correction << "\n";
+  // std::cout << "csm epsilon_xy " << csm_input.epsilon_xy << " icp epsilon_xy " << _icp_params.epsilon_xy << "\n";
+  // std::cout << "csm epsilon_theta " << csm_input.epsilon_theta << " icp epsilon_theta " << _icp_params.epsilon_theta << "\n";
+  // std::cout << "csm sigma " << csm_input.sigma << " icp sigma " << _icp_params.sigma << "\n";
+  // std::cout << "csm restart " << csm_input.restart << " icp restart " << _icp_params.restart << "\n";
+  // std::cout << "csm restart_threshold_mean_error " << csm_input.restart_threshold_mean_error << " icp restart_threshold_mean_error " << _icp_params.restart_threshold_mean_error << "\n";
+  // std::cout << "csm restart_dt " << csm_input.restart_dt << " icp restart_dt " << _icp_params.restart_dt << "\n";
+  // std::cout << "csm restart_dtheta " << csm_input.restart_dtheta << " icp restart_dtheta " << _icp_params.restart_dtheta << "\n";
+  // std::cout << "csm clustering_threshold " << csm_input.clustering_threshold << " icp clustering_threshold " << _icp_params.clustering_threshold << "\n";
+  // std::cout << "csm orientation_neighbourhood " << csm_input.orientation_neighbourhood << " icp orientation_neighbourhood " << _icp_params.orientation_neighbourhood << "\n";
+  // std::cout << "csm do_alpha_test " << csm_input.do_alpha_test << " icp do_alpha_test " << _icp_params.do_alpha_test << "\n";
+  // std::cout << "csm do_alpha_test_thresholdDeg " << csm_input.do_alpha_test_thresholdDeg << " icp do_alpha_test_thresholdDeg " << _icp_params.do_alpha_test_thresholdDeg << "\n";
+  // std::cout << "csm do_visibility_test " << csm_input.do_visibility_test << " icp do_visibility_test " << _icp_params.do_visibility_test << "\n";
+  // std::cout << "csm outliers_remove_doubles " << csm_input.outliers_remove_doubles << " icp outliers_remove_doubles " << _icp_params.outliers_remove_doubles << "\n";
+  // std::cout << "csm debug_verify_tricks " << csm_input.debug_verify_tricks << " icp debug_verify_tricks " << _icp_params.debug_verify_tricks << "\n";
+  // std::cout << "csm gpm_theta_bin_size_deg " << csm_input.gpm_theta_bin_size_deg << " icp gpm_theta_bin_size_deg " << _icp_params.gpm_theta_bin_size_deg << "\n";
+  // std::cout << "csm gpm_extend_range_deg " << csm_input.gpm_extend_range_deg << " icp gpm_extend_range_deg " << _icp_params.gpm_extend_range_deg << "\n";
+  // std::cout << "csm gpm_interval " << csm_input.gpm_interval << " icp gpm_interval " << _icp_params.gpm_interval << "\n";
+  // std::cout << "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
+  //              "000000000000000000000000000000000\n";
+
+  //Not implemented (yet) in CSM
+  // csm_input.laser_x = _icp_params.laser_x;
+  // csm_input.laser_y = _icp_params.laser_y;
+  // csm_input.laser_theta = _icp_params.laser_theta;
+
+  csm_input.min_reading = _icp_params.min_reading;
+  csm_input.max_reading = _icp_params.max_reading;
+  csm_input.use_ml_weights = _icp_params.use_ml_weights;
+  csm_input.use_sigma_weights = _icp_params.use_sigma_weights;
+
+  // Not implemented (yet) in CSM
+  // csm_input.hsm_linear_cell_size = _icp_params.hsm_linear_cell_size;
+  // csm_input.hsm_angular_cell_size_deg = _icp_params.hsm_angular_cell_size_deg;
+  // csm_input.hsm_num_angular_hypotheses = _icp_params.hsm_num_angular_hypotheses;
+  // csm_input.hsm_xc_directions_min_distance_deg = _icp_params.hsm_xc_directions_min_distance_deg;
+  // csm_input.hsm_xc_ndirections = _icp_params.hsm_xc_ndirections;
+  // csm_input.hsm_angular_hyp_min_distance_deg = _icp_params.hsm_angular_hyp_min_distance_deg;
+  // csm_input.hsm_linear_xc_max_npeaks = _icp_params.hsm_linear_xc_max_npeaks;
+  // csm_input.hsm_linear_xc_peaks_min_distance = _icp_params.hsm_linear_xc_peaks_min_distance;
 
   sm_icp(&csm_input, &csm_output);
 
diff --git a/src/icp.h b/src/icp.h
index 8fa7e7994e5d99ef2e6879e51683f8b6771fb93b..389a616024efadd9af042fe8be0dd2a22495f046 100644
--- a/src/icp.h
+++ b/src/icp.h
@@ -25,6 +25,42 @@ struct icpParams{
     double outliers_maxPerc;
     double outliers_adaptive_order;
     double outliers_adaptive_mult;
+
+    int do_compute_covariance;
+    double max_angular_correction_deg;
+    double max_linear_correction;
+    double epsilon_xy;
+    double epsilon_theta;
+    double sigma;
+    int restart;
+    double restart_threshold_mean_error;
+    double restart_dt;
+    double restart_dtheta;
+    double clustering_threshold;
+    int orientation_neighbourhood;
+    int do_alpha_test;
+    double do_alpha_test_thresholdDeg;
+    int do_visibility_test;
+    int outliers_remove_doubles;
+    int debug_verify_tricks;
+    double gpm_theta_bin_size_deg;
+    double gpm_extend_range_deg;
+    double gpm_interval;
+    double laser_x;
+    double laser_y;
+    double laser_theta;
+    double min_reading;
+    double max_reading;
+    int use_ml_weights;
+    int use_sigma_weights;
+    double hsm_linear_cell_size;
+    double hsm_angular_cell_size_deg;
+    double hsm_num_angular_hypotheses;
+    double hsm_xc_directions_min_distance_deg;
+    double hsm_xc_ndirections;
+    double hsm_angular_hyp_min_distance_deg;
+    double hsm_linear_xc_max_npeaks;
+    double hsm_linear_xc_peaks_min_distance;
 };
 
 class ICP
diff --git a/src/laser_scan.cpp b/src/laser_scan.cpp
index 6df84b75674f842af6adce9a5add6a94e96a51dc..3840a7b16ad4a778bd69f963259396a3f35269ea 100644
--- a/src/laser_scan.cpp
+++ b/src/laser_scan.cpp
@@ -3,15 +3,15 @@
 namespace laserscanutils
 {
 void LaserScanParams::print() const{
-    std::cout << "PRINTING LASERSCANPARAMS ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
-    std::cout << "angle_min_: " << angle_min_ << std::endl;
-    std::cout << "angle_max_: " << angle_max_ << std::endl;
-    std::cout << "angle_step_: " << angle_step_ << std::endl;
-    std::cout << "scan_time_: " << scan_time_ << std::endl;
-    std::cout << "range_min_: " << range_min_ << std::endl;
-    std::cout << "range_max_: " << range_max_ << std::endl;
-    std::cout << "range_std_dev_: " << range_std_dev_ << std::endl;
-    std::cout << "angle_std_dev_: " << angle_std_dev_ << std::endl;
+    std::cout << "DBG PRINTING LASERSCANPARAMS ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
+    std::cout << "DBG angle_min_: " << angle_min_ << std::endl;
+    std::cout << "DBG angle_max_: " << angle_max_ << std::endl;
+    std::cout << "DBG angle_step_: " << angle_step_ << std::endl;
+    std::cout << "DBG scan_time_: " << scan_time_ << std::endl;
+    std::cout << "DBG range_min_: " << range_min_ << std::endl;
+    std::cout << "DBG range_max_: " << range_max_ << std::endl;
+    std::cout << "DBG range_std_dev_: " << range_std_dev_ << std::endl;
+    std::cout << "DBG angle_std_dev_: " << angle_std_dev_ << std::endl;
 }
 LaserScan::LaserScan() :
     is_raw_processed_(false)