diff --git a/src/icp.cpp b/src/icp.cpp
index a2ca9a996cc4f0abd3a4dacf60d32275c8a16916..617a09b4e43819c77d86c8d65608bf1fde4e598e 100644
--- a/src/icp.cpp
+++ b/src/icp.cpp
@@ -92,7 +92,10 @@ icpOutput ICP::matchPC(LaserScan &_last_ls, LaserScan &_origin_ls, LaserScanPara
     result.res_transf(2) = csm_output.x[2];
 
     result.nvalid = csm_output.nvalid;
-    result.error      = csm_output.error;
+    result.error  = csm_output.error;
+
+    std::cout << "ICP: add covariance!" << '\n';
+    // result.res_covar = Eigen::Zeros();
 
     // std::cout << "Number of valid correspondences: " << csm_output.nvalid << '\n';
     // std::cout << "Number of iterations: " << csm_output.iterations << '\n';
diff --git a/src/icp.h b/src/icp.h
index eb58cacc73edfb098455a2087ef0f7433fc9741a..fb222aa10e4fa1c67816ea1289f2b2c0409ffff8 100644
--- a/src/icp.h
+++ b/src/icp.h
@@ -3,15 +3,17 @@
 #include <random>
 #include "laser_scan.h"
 #include <csm/csm_all.h>
-
+#include <Eigen
 // using namespace CSM;
 
 namespace laserscanutils{
 
 struct icpOutput{
+    int valid; /** 1 if the result is valid */
     Eigen::Vector3s res_transf;
+    Eigen::Matrix3s res_covar;
     int nvalid;     /** Number of valid correspondence in the end */
-    double error;   	/** Total correspondence error */
+    double error;   	/** Total correspondence error */    
 };
 
 struct icpParams{