diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 780d6fe7dc23829285b855aef8d31c30076d820d..30fd52c85ace17a9339dcecac08a7862c616b91a 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -41,7 +41,9 @@ SET(sources
 	descriptors/kaze/descriptor_kaze.cpp
 	descriptors/kaze/descriptor_kaze_load_yaml.cpp
 	descriptors/akaze/descriptor_akaze.cpp
-	descriptors/akaze/descriptor_akaze_load_yaml.cpp	
+	descriptors/akaze/descriptor_akaze_load_yaml.cpp
+	descriptors/latch/descriptor_latch.cpp
+	descriptors/latch/descriptor_latch_load_yaml.cpp	
 	matchers/matcher_base.cpp )
 
 # application header files
@@ -72,7 +74,8 @@ SET(headers
 	descriptors/surf/descriptor_surf.h
 	descriptors/brisk/descriptor_brisk.h
 	descriptors/kaze/descriptor_kaze.h	
-	descriptors/akaze/descriptor_akaze.h		
+	descriptors/akaze/descriptor_akaze.h
+	descriptors/latch/descriptor_latch.h
 	matchers/matcher_factory.h
 	matchers/matcher_base.h)
 
diff --git a/src/examples/test_descriptor.cpp b/src/examples/test_descriptor.cpp
index 6a27f49b371c242722633e85bcc14c12292f0a39..22bf08d1a798a07100785af2ee872ceabd77521d 100644
--- a/src/examples/test_descriptor.cpp
+++ b/src/examples/test_descriptor.cpp
@@ -28,7 +28,7 @@
 #include "../descriptors/brisk/descriptor_brisk.h"
 #include "../descriptors/kaze/descriptor_kaze.h"
 #include "../descriptors/akaze/descriptor_akaze.h"
-//#include "../descriptors/latch/descriptor_latch.h"
+#include "../descriptors/latch/descriptor_latch.h"
 //#include "../descriptors/freak/descriptor_freak.h"
 //#include "../descriptors/brief/descriptor_brief.h"
 //#include "../descriptors/daisy/descriptor_daisy.h"
@@ -102,8 +102,8 @@ int main(void)
     	des_ptr = std::static_pointer_cast<DescriptorKAZE>(des_ptr);
     else if (des_name.compare("AKAZE") == 0)
     	des_ptr = std::static_pointer_cast<DescriptorAKAZE>(des_ptr);
-//    else if (des_name.compare("LATCH") == 0)
-//    	des_ptr = std::static_pointer_cast<DescriptorLATCH>(des_ptr);
+    else if (des_name.compare("LATCH") == 0)
+    	des_ptr = std::static_pointer_cast<DescriptorLATCH>(des_ptr);
 //    else if (des_name.compare("FREAK") == 0)
 //    	des_ptr = std::static_pointer_cast<DescriptorFREAK>(des_ptr);
 //    else if (des_name.compare("BRIEF") == 0)
diff --git a/src/vision_utils.h b/src/vision_utils.h
index 1d23220c7ea3b7f661eaa29adf889037a6a915bc..435415edf57240cd4d5382bea7c1872e37cb8e8a 100644
--- a/src/vision_utils.h
+++ b/src/vision_utils.h
@@ -24,7 +24,9 @@ using namespace boost::assign; // bring 'operator+=()' into scope
 #include <opencv2/imgproc/imgproc.hpp>
 #include <opencv2/highgui/highgui.hpp>
 #include <opencv2/features2d/features2d.hpp>
+#include <opencv2/features2d.hpp>
 #include <opencv2/xfeatures2d/nonfree.hpp>
+#include <opencv2/xfeatures2d.hpp>
 #include <opencv2/line_descriptor/descriptor.hpp>
 
 typedef std::vector<cv::KeyPoint> KeyPointVector;