diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 1fa68134abdc9269b40c655a8aa6b4870e4aa0a1..72f446e45d017f03ec7733d6e9079ac263b2b921 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -34,6 +34,8 @@ SET(sources
 	descriptors/orb/descriptor_orb_load_yaml.cpp
 	descriptors/sift/descriptor_sift.cpp
 	descriptors/sift/descriptor_sift_load_yaml.cpp	
+	descriptors/surf/descriptor_surf.cpp
+	descriptors/surf/descriptor_surf_load_yaml.cpp	
 	matchers/matcher_base.cpp )
 
 # application header files
@@ -61,6 +63,7 @@ SET(headers
 	descriptors/descriptor_base.h
 	descriptors/orb/descriptor_orb.h
 	descriptors/sift/descriptor_sift.h
+	descriptors/surf/descriptor_surf.h
 	matchers/matcher_factory.h
 	matchers/matcher_base.h)
 
diff --git a/src/examples/test_descriptor.cpp b/src/examples/test_descriptor.cpp
index 91841ed025ac7929288d83791d54e6e03f0ed1cb..bf1b19e5454dfbe7377406bc7f6f49f430a3b285 100644
--- a/src/examples/test_descriptor.cpp
+++ b/src/examples/test_descriptor.cpp
@@ -24,7 +24,7 @@
 // Descriptors
 #include "../descriptors/orb/descriptor_orb.h"
 #include "../descriptors/sift/descriptor_sift.h"
-//#include "../descriptors/surf/descriptor_surf.h"
+#include "../descriptors/surf/descriptor_surf.h"
 //#include "../descriptors/kaze/descriptor_kaze.h"
 //#include "../descriptors/akaze/descriptor_akaze.h"
 //#include "../descriptors/brisk/descriptor_brisk.h"
@@ -95,8 +95,8 @@ int main(void)
     	des_ptr = std::static_pointer_cast<DescriptorORB>(des_ptr);
     else if (des_name.compare("SIFT") == 0)
     	des_ptr = std::static_pointer_cast<DescriptorSIFT>(des_ptr);
-//    else if (des_name.compare("SURF") == 0)
-//    	des_ptr = std::static_pointer_cast<DescriptorSURF>(des_ptr);
+    else if (des_name.compare("SURF") == 0)
+    	des_ptr = std::static_pointer_cast<DescriptorSURF>(des_ptr);
 //    else if (des_name.compare("KAZE") == 0)
 //    	des_ptr = std::static_pointer_cast<DescriptorKAZE>(des_ptr);
 //    else if (des_name.compare("AKAZE") == 0)