diff --git a/src/examples/fundamental_matrix.cpp b/src/examples/fundamental_matrix.cpp
index 98ffef9813eede56128cf5d9abb1ca1620057652..3f44500476a9d25e5586b175be7ef6a14f01a137 100644
--- a/src/examples/fundamental_matrix.cpp
+++ b/src/examples/fundamental_matrix.cpp
@@ -67,73 +67,14 @@ int main(int argc, char** argv)
     std::string det_name = vision_utils::readYamlType(yaml_file_params_vision_utils, "detector");
     vision_utils::DetectorBasePtr det_ptr = vision_utils::setupDetector(det_name, det_name + " detector", yaml_file_params_vision_utils);
 
-    if (det_name.compare("ORB") == 0)
-        det_ptr = std::static_pointer_cast<vision_utils::DetectorORB>(det_ptr);
-    else if (det_name.compare("FAST") == 0)
-        det_ptr = std::static_pointer_cast<vision_utils::DetectorFAST>(det_ptr);
-    else if (det_name.compare("SIFT") == 0)
-        det_ptr = std::static_pointer_cast<vision_utils::DetectorSIFT>(det_ptr);
-    else if (det_name.compare("SURF") == 0)
-        det_ptr = std::static_pointer_cast<vision_utils::DetectorSURF>(det_ptr);
-    else if (det_name.compare("BRISK") == 0)
-        det_ptr = std::static_pointer_cast<vision_utils::DetectorBRISK>(det_ptr);
-    else if (det_name.compare("MSER") == 0)
-        det_ptr = std::static_pointer_cast<vision_utils::DetectorMSER>(det_ptr);
-    else if (det_name.compare("GFTT") == 0)
-        det_ptr = std::static_pointer_cast<vision_utils::DetectorGFTT>(det_ptr);
-    else if (det_name.compare("HARRIS") == 0)
-        det_ptr = std::static_pointer_cast<vision_utils::DetectorHARRIS>(det_ptr);
-    else if (det_name.compare("SBD") == 0)
-        det_ptr = std::static_pointer_cast<vision_utils::DetectorSBD>(det_ptr);
-    else if (det_name.compare("KAZE") == 0)
-        det_ptr = std::static_pointer_cast<vision_utils::DetectorKAZE>(det_ptr);
-    else if (det_name.compare("AKAZE") == 0)
-        det_ptr = std::static_pointer_cast<vision_utils::DetectorAKAZE>(det_ptr);
-    else if (det_name.compare("AGAST") == 0)
-        det_ptr = std::static_pointer_cast<vision_utils::DetectorAGAST>(det_ptr);
-
     // Descriptor
     std::string des_name = vision_utils::readYamlType(yaml_file_params_vision_utils, "descriptor");
     vision_utils::DescriptorBasePtr des_ptr = vision_utils::setupDescriptor(des_name, des_name + " descriptor", yaml_file_params_vision_utils);
 
-    if (des_name.compare("ORB") == 0)
-        des_ptr = std::static_pointer_cast<vision_utils::DescriptorORB>(des_ptr);
-    else if (des_name.compare("SIFT") == 0)
-        des_ptr = std::static_pointer_cast<vision_utils::DescriptorSIFT>(des_ptr);
-    else if (des_name.compare("SURF") == 0)
-        des_ptr = std::static_pointer_cast<vision_utils::DescriptorSURF>(des_ptr);
-    else if (des_name.compare("BRISK") == 0)
-        des_ptr = std::static_pointer_cast<vision_utils::DescriptorBRISK>(des_ptr);
-    else if (des_name.compare("KAZE") == 0)
-        des_ptr = std::static_pointer_cast<vision_utils::DescriptorKAZE>(des_ptr);
-    else if (des_name.compare("AKAZE") == 0)
-        des_ptr = std::static_pointer_cast<vision_utils::DescriptorAKAZE>(des_ptr);
-    else if (des_name.compare("LATCH") == 0)
-        des_ptr = std::static_pointer_cast<vision_utils::DescriptorLATCH>(des_ptr);
-    else if (des_name.compare("FREAK") == 0)
-        des_ptr = std::static_pointer_cast<vision_utils::DescriptorFREAK>(des_ptr);
-    else if (des_name.compare("BRIEF") == 0)
-        des_ptr = std::static_pointer_cast<vision_utils::DescriptorBRIEF>(des_ptr);
-    else if (des_name.compare("DAISY") == 0)
-        des_ptr = std::static_pointer_cast<vision_utils::DescriptorDAISY>(des_ptr);
-    else if (des_name.compare("LUCID") == 0)
-        des_ptr = std::static_pointer_cast<vision_utils::DescriptorLUCID>(des_ptr);
-
     // Matcher
     std::string mat_name = vision_utils::readYamlType(yaml_file_params_vision_utils, "matcher");
     vision_utils::MatcherBasePtr mat_ptr = vision_utils::setupMatcher(mat_name, mat_name + " matcher", yaml_file_params_vision_utils);
 
-    if (mat_name.compare("FLANNBASED") == 0)
-        mat_ptr = std::static_pointer_cast<vision_utils::MatcherFLANNBASED>(mat_ptr);
-    if (mat_name.compare("BRUTEFORCE") == 0)
-        mat_ptr = std::static_pointer_cast<vision_utils::MatcherBRUTEFORCE>(mat_ptr);
-    if (mat_name.compare("BRUTEFORCE_L1") == 0)
-        mat_ptr = std::static_pointer_cast<vision_utils::MatcherBRUTEFORCE_L1>(mat_ptr);
-    if (mat_name.compare("BRUTEFORCE_HAMMING") == 0)
-        mat_ptr = std::static_pointer_cast<vision_utils::MatcherBRUTEFORCE_HAMMING>(mat_ptr);
-    if (mat_name.compare("BRUTEFORCE_HAMMING_2") == 0)
-        mat_ptr = std::static_pointer_cast<vision_utils::MatcherBRUTEFORCE_HAMMING_2>(mat_ptr);
-
     // set and print image properties
     unsigned int img_width = (unsigned int)capture.get(CV_CAP_PROP_FRAME_WIDTH);
     unsigned int img_height = (unsigned int)capture.get(CV_CAP_PROP_FRAME_HEIGHT);
diff --git a/src/examples/test_algorithm_activesearch.cpp b/src/examples/test_algorithm_activesearch.cpp
index dcba80964362bb83ded535dd7339944f626c9441..102bb655cbde41c7fea445a64abc609328054e48 100644
--- a/src/examples/test_algorithm_activesearch.cpp
+++ b/src/examples/test_algorithm_activesearch.cpp
@@ -43,73 +43,14 @@ int main(void)
     std::string det_name = readYamlType(yaml_file_params, "detector");
     DetectorBasePtr det_ptr = setupDetector(det_name, det_name + " detector", yaml_file_params);
 
-    if (det_name.compare("ORB") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorORB>(det_ptr);
-    else if (det_name.compare("FAST") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorFAST>(det_ptr);
-    else if (det_name.compare("SIFT") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSIFT>(det_ptr);
-    else if (det_name.compare("SURF") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSURF>(det_ptr);
-    else if (det_name.compare("BRISK") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorBRISK>(det_ptr);
-    else if (det_name.compare("MSER") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorMSER>(det_ptr);
-    else if (det_name.compare("GFTT") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorGFTT>(det_ptr);
-    else if (det_name.compare("HARRIS") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorHARRIS>(det_ptr);
-    else if (det_name.compare("SBD") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSBD>(det_ptr);
-    else if (det_name.compare("KAZE") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorKAZE>(det_ptr);
-    else if (det_name.compare("AKAZE") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorAKAZE>(det_ptr);
-    else if (det_name.compare("AGAST") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorAGAST>(det_ptr);
-
     // Descriptor
     std::string des_name = readYamlType(yaml_file_params, "descriptor");
     DescriptorBasePtr des_ptr = setupDescriptor(des_name, des_name + " descriptor", yaml_file_params);
 
-    if (des_name.compare("ORB") == 0)
-    	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("BRISK") == 0)
-      	des_ptr = std::static_pointer_cast<DescriptorBRISK>(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)
-    	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("FREAK") == 0)
-    	des_ptr = std::static_pointer_cast<DescriptorFREAK>(des_ptr);
-    else if (des_name.compare("BRIEF") == 0)
-    	des_ptr = std::static_pointer_cast<DescriptorBRIEF>(des_ptr);
-    else if (des_name.compare("DAISY") == 0)
-    	des_ptr = std::static_pointer_cast<DescriptorDAISY>(des_ptr);
-    else if (des_name.compare("LUCID") == 0)
-    	des_ptr = std::static_pointer_cast<DescriptorLUCID>(des_ptr);
-
     // Matcher
     std::string mat_name = readYamlType(yaml_file_params, "matcher");
     MatcherBasePtr mat_ptr = setupMatcher(mat_name, mat_name + " matcher", yaml_file_params);
 
-    if (mat_name.compare("FLANNBASED") == 0)
-    	mat_ptr = std::static_pointer_cast<MatcherFLANNBASED>(mat_ptr);
-    if (mat_name.compare("BRUTEFORCE") == 0)
-    	mat_ptr = std::static_pointer_cast<MatcherBRUTEFORCE>(mat_ptr);
-    if (mat_name.compare("BRUTEFORCE_L1") == 0)
-    	mat_ptr = std::static_pointer_cast<MatcherBRUTEFORCE_L1>(mat_ptr);
-    if (mat_name.compare("BRUTEFORCE_HAMMING") == 0)
-    	mat_ptr = std::static_pointer_cast<MatcherBRUTEFORCE_HAMMING>(mat_ptr);
-    if (mat_name.compare("BRUTEFORCE_HAMMING_2") == 0)
-       	mat_ptr = std::static_pointer_cast<MatcherBRUTEFORCE_HAMMING_2>(mat_ptr);
-
     // User info
     std::cout << std::endl << "... Testing " << det_ptr->getName() << ", " <<  des_ptr->getName() << ", " << mat_ptr->getName() << " and " << active_search_grid_ptr->getName() << " ..." << std::endl;
 
diff --git a/src/examples/test_algorithm_anms.cpp b/src/examples/test_algorithm_anms.cpp
index 91cbedd0beb813a47dd353de5aa4fd6616d24f8b..81d350efae792d0e3f98b547644d82b6d0ccebbe 100644
--- a/src/examples/test_algorithm_anms.cpp
+++ b/src/examples/test_algorithm_anms.cpp
@@ -41,73 +41,14 @@ int main(void)
     std::string det_name = readYamlType(yaml_file_params, "detector");
     DetectorBasePtr det_ptr = setupDetector(det_name, det_name + " detector", yaml_file_params);
 
-    if (det_name.compare("ORB") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorORB>(det_ptr);
-    else if (det_name.compare("FAST") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorFAST>(det_ptr);
-    else if (det_name.compare("SIFT") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSIFT>(det_ptr);
-    else if (det_name.compare("SURF") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSURF>(det_ptr);
-    else if (det_name.compare("BRISK") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorBRISK>(det_ptr);
-    else if (det_name.compare("MSER") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorMSER>(det_ptr);
-    else if (det_name.compare("GFTT") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorGFTT>(det_ptr);
-    else if (det_name.compare("HARRIS") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorHARRIS>(det_ptr);
-    else if (det_name.compare("SBD") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSBD>(det_ptr);
-    else if (det_name.compare("KAZE") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorKAZE>(det_ptr);
-    else if (det_name.compare("AKAZE") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorAKAZE>(det_ptr);
-    else if (det_name.compare("AGAST") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorAGAST>(det_ptr);
-
     // Descriptor
     std::string des_name = readYamlType(yaml_file_params, "descriptor");
     DescriptorBasePtr des_ptr = setupDescriptor(des_name, des_name + " descriptor", yaml_file_params);
 
-    if (des_name.compare("ORB") == 0)
-    	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("BRISK") == 0)
-      	des_ptr = std::static_pointer_cast<DescriptorBRISK>(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)
-    	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("FREAK") == 0)
-    	des_ptr = std::static_pointer_cast<DescriptorFREAK>(des_ptr);
-    else if (des_name.compare("BRIEF") == 0)
-    	des_ptr = std::static_pointer_cast<DescriptorBRIEF>(des_ptr);
-    else if (des_name.compare("DAISY") == 0)
-    	des_ptr = std::static_pointer_cast<DescriptorDAISY>(des_ptr);
-    else if (des_name.compare("LUCID") == 0)
-    	des_ptr = std::static_pointer_cast<DescriptorLUCID>(des_ptr);
-
     // Matcher
     std::string mat_name = readYamlType(yaml_file_params, "matcher");
     MatcherBasePtr mat_ptr = setupMatcher(mat_name, mat_name + " matcher", yaml_file_params);
 
-    if (mat_name.compare("FLANNBASED") == 0)
-    	mat_ptr = std::static_pointer_cast<MatcherFLANNBASED>(mat_ptr);
-    if (mat_name.compare("BRUTEFORCE") == 0)
-    	mat_ptr = std::static_pointer_cast<MatcherBRUTEFORCE>(mat_ptr);
-    if (mat_name.compare("BRUTEFORCE_L1") == 0)
-    	mat_ptr = std::static_pointer_cast<MatcherBRUTEFORCE_L1>(mat_ptr);
-    if (mat_name.compare("BRUTEFORCE_HAMMING") == 0)
-    	mat_ptr = std::static_pointer_cast<MatcherBRUTEFORCE_HAMMING>(mat_ptr);
-    if (mat_name.compare("BRUTEFORCE_HAMMING_2") == 0)
-       	mat_ptr = std::static_pointer_cast<MatcherBRUTEFORCE_HAMMING_2>(mat_ptr);
-
     // User info
     std::cout << std::endl << "... Testing " << det_ptr->getName() << ", " <<  des_ptr->getName() << ", " << mat_ptr->getName() << " and ANMS" << " ..." << std::endl;
 
diff --git a/src/examples/test_algorithm_opticalflowpyrlk.cpp b/src/examples/test_algorithm_opticalflowpyrlk.cpp
index 7ccd57f7dbdbd58ddf7b23b780953be20ebee0c0..c0cf4b3d183a1358a13673b78ee7a9cdf7c14bf2 100644
--- a/src/examples/test_algorithm_opticalflowpyrlk.cpp
+++ b/src/examples/test_algorithm_opticalflowpyrlk.cpp
@@ -41,31 +41,6 @@ int main(void)
     std::string det_name = readYamlType(yaml_file_params, "detector");
     DetectorBasePtr det_ptr = setupDetector(det_name, det_name + " detector", yaml_file_params);
 
-    if (det_name.compare("ORB") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorORB>(det_ptr);
-    else if (det_name.compare("FAST") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorFAST>(det_ptr);
-    else if (det_name.compare("SIFT") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSIFT>(det_ptr);
-    else if (det_name.compare("SURF") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSURF>(det_ptr);
-    else if (det_name.compare("BRISK") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorBRISK>(det_ptr);
-    else if (det_name.compare("MSER") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorMSER>(det_ptr);
-    else if (det_name.compare("GFTT") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorGFTT>(det_ptr);
-    else if (det_name.compare("HARRIS") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorHARRIS>(det_ptr);
-    else if (det_name.compare("SBD") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSBD>(det_ptr);
-    else if (det_name.compare("KAZE") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorKAZE>(det_ptr);
-    else if (det_name.compare("AKAZE") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorAKAZE>(det_ptr);
-    else if (det_name.compare("AGAST") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorAGAST>(det_ptr);
-
     // User info
     std::cout << std::endl << "... Testing " << det_ptr->getName() << " with " <<  alg_of_ptr->getName() << " ..." << std::endl;
 
diff --git a/src/examples/test_algorithm_trackfeatures.cpp b/src/examples/test_algorithm_trackfeatures.cpp
index ef0441b7c3d43be1448c047c4cddb1bc84759104..6040b5c1e652ecf9ef31d7edd83e85d4de91329f 100644
--- a/src/examples/test_algorithm_trackfeatures.cpp
+++ b/src/examples/test_algorithm_trackfeatures.cpp
@@ -43,73 +43,14 @@ int main(void)
     std::string det_name = readYamlType(yaml_file_params, "detector");
     DetectorBasePtr det_ptr = setupDetector(det_name, det_name + " detector", yaml_file_params);
 
-    if (det_name.compare("ORB") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorORB>(det_ptr);
-    else if (det_name.compare("FAST") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorFAST>(det_ptr);
-    else if (det_name.compare("SIFT") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSIFT>(det_ptr);
-    else if (det_name.compare("SURF") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSURF>(det_ptr);
-    else if (det_name.compare("BRISK") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorBRISK>(det_ptr);
-    else if (det_name.compare("MSER") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorMSER>(det_ptr);
-    else if (det_name.compare("GFTT") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorGFTT>(det_ptr);
-    else if (det_name.compare("HARRIS") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorHARRIS>(det_ptr);
-    else if (det_name.compare("SBD") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSBD>(det_ptr);
-    else if (det_name.compare("KAZE") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorKAZE>(det_ptr);
-    else if (det_name.compare("AKAZE") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorAKAZE>(det_ptr);
-    else if (det_name.compare("AGAST") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorAGAST>(det_ptr);
-
     // Descriptor
     std::string des_name = readYamlType(yaml_file_params, "descriptor");
     DescriptorBasePtr des_ptr = setupDescriptor(des_name, des_name + " descriptor", yaml_file_params);
 
-    if (des_name.compare("ORB") == 0)
-    	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("BRISK") == 0)
-      	des_ptr = std::static_pointer_cast<DescriptorBRISK>(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)
-    	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("FREAK") == 0)
-    	des_ptr = std::static_pointer_cast<DescriptorFREAK>(des_ptr);
-    else if (des_name.compare("BRIEF") == 0)
-    	des_ptr = std::static_pointer_cast<DescriptorBRIEF>(des_ptr);
-    else if (des_name.compare("DAISY") == 0)
-    	des_ptr = std::static_pointer_cast<DescriptorDAISY>(des_ptr);
-    else if (des_name.compare("LUCID") == 0)
-    	des_ptr = std::static_pointer_cast<DescriptorLUCID>(des_ptr);
-
     // Matcher
     std::string mat_name = readYamlType(yaml_file_params, "matcher");
     MatcherBasePtr mat_ptr = setupMatcher(mat_name, mat_name + " matcher", yaml_file_params);
 
-    if (mat_name.compare("FLANNBASED") == 0)
-    	mat_ptr = std::static_pointer_cast<MatcherFLANNBASED>(mat_ptr);
-    if (mat_name.compare("BRUTEFORCE") == 0)
-    	mat_ptr = std::static_pointer_cast<MatcherBRUTEFORCE>(mat_ptr);
-    if (mat_name.compare("BRUTEFORCE_L1") == 0)
-    	mat_ptr = std::static_pointer_cast<MatcherBRUTEFORCE_L1>(mat_ptr);
-    if (mat_name.compare("BRUTEFORCE_HAMMING") == 0)
-    	mat_ptr = std::static_pointer_cast<MatcherBRUTEFORCE_HAMMING>(mat_ptr);
-    if (mat_name.compare("BRUTEFORCE_HAMMING_2") == 0)
-       	mat_ptr = std::static_pointer_cast<MatcherBRUTEFORCE_HAMMING_2>(mat_ptr);
-
     // User info
     std::cout << std::endl << "... Testing " << det_ptr->getName() << ", " <<  des_ptr->getName() << ", " << mat_ptr->getName() << " and " << tracker_ptr->getName() << " ..." << std::endl;
 
diff --git a/src/examples/test_descriptor.cpp b/src/examples/test_descriptor.cpp
index f43fb97e593198e865e046a02e50881553a8f14f..532b426149c77bbb2d46ec9eadc1f8acb78b4777 100644
--- a/src/examples/test_descriptor.cpp
+++ b/src/examples/test_descriptor.cpp
@@ -31,31 +31,6 @@ int main(void)
 
     DetectorBasePtr det_ptr = setupDetector(det_name, det_name + " detector", vu_root + path_yaml_file + "/" + det_name + ".yaml");
 
-    if (det_name.compare("ORB") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorORB>(det_ptr);
-    else if (det_name.compare("FAST") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorFAST>(det_ptr);
-    else if (det_name.compare("SIFT") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSIFT>(det_ptr);
-    else if (det_name.compare("SURF") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSURF>(det_ptr);
-    else if (det_name.compare("BRISK") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorBRISK>(det_ptr);
-    else if (det_name.compare("MSER") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorMSER>(det_ptr);
-    else if (det_name.compare("GFTT") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorGFTT>(det_ptr);
-    else if (det_name.compare("HARRIS") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorHARRIS>(det_ptr);
-    else if (det_name.compare("SBD") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSBD>(det_ptr);
-    else if (det_name.compare("KAZE") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorKAZE>(det_ptr);
-    else if (det_name.compare("AKAZE") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorAKAZE>(det_ptr);
-    else if (det_name.compare("AGAST") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorAGAST>(det_ptr);
-
     std::cout << "\n================ DESCRIPTOR TEST  =================" << std::endl;
 
     std::string def_descriptor = "ORB";
@@ -64,29 +39,6 @@ int main(void)
 
     DescriptorBasePtr des_ptr = setupDescriptor(des_name, des_name + " descriptor", vu_root + path_yaml_file + "/" + des_name + ".yaml");
 
-    if (des_name.compare("ORB") == 0)
-    	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("BRISK") == 0)
-      	des_ptr = std::static_pointer_cast<DescriptorBRISK>(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)
-    	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("FREAK") == 0)
-    	des_ptr = std::static_pointer_cast<DescriptorFREAK>(des_ptr);
-    else if (des_name.compare("BRIEF") == 0)
-    	des_ptr = std::static_pointer_cast<DescriptorBRIEF>(des_ptr);
-    else if (des_name.compare("DAISY") == 0)
-    	des_ptr = std::static_pointer_cast<DescriptorDAISY>(des_ptr);
-    else if (des_name.compare("LUCID") == 0)
-    	des_ptr = std::static_pointer_cast<DescriptorLUCID>(des_ptr);
-
     std::cout << std::endl << "... Testing " << det_ptr->getName() << " with " <<  des_ptr->getName() << " ..." << std::endl;
 
     // Open camera
diff --git a/src/examples/test_detector.cpp b/src/examples/test_detector.cpp
index 14d634a4f5eaa8fbd8c33b646cd45549a158fb84..f90914330badde3c955b3ee0a649501943f05c43 100644
--- a/src/examples/test_detector.cpp
+++ b/src/examples/test_detector.cpp
@@ -32,31 +32,6 @@ int main(void)
 
     DetectorBasePtr det_ptr = setupDetector(det_name, det_name + " detector", vu_root + path_yaml_file + "/" + det_name + ".yaml");
 
-    if (det_name.compare("ORB") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorORB>(det_ptr);
-    else if (det_name.compare("FAST") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorFAST>(det_ptr);
-    else if (det_name.compare("SIFT") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSIFT>(det_ptr);
-    else if (det_name.compare("SURF") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSURF>(det_ptr);
-    else if (det_name.compare("BRISK") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorBRISK>(det_ptr);
-    else if (det_name.compare("MSER") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorMSER>(det_ptr);
-    else if (det_name.compare("GFTT") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorGFTT>(det_ptr);
-    else if (det_name.compare("HARRIS") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorHARRIS>(det_ptr);
-    else if (det_name.compare("SBD") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSBD>(det_ptr);
-    else if (det_name.compare("KAZE") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorKAZE>(det_ptr);
-    else if (det_name.compare("AKAZE") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorAKAZE>(det_ptr);
-    else if (det_name.compare("AGAST") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorAGAST>(det_ptr);
-
     std::cout << std::endl << "... Testing " << det_ptr->getName() << " ..." << std::endl;
 
     // Open camera
diff --git a/src/examples/test_matcher.cpp b/src/examples/test_matcher.cpp
index 7f68a07044a5cb1a908f77ef94dc189ed3f91f66..3b6cb23fffd027c4bd04af9293020c98b53d55a7 100644
--- a/src/examples/test_matcher.cpp
+++ b/src/examples/test_matcher.cpp
@@ -32,60 +32,12 @@ int main(void)
 
     DetectorBasePtr det_ptr = setupDetector(det_name, det_name + " detector", vu_root + path_yaml_file + "/" + det_name + ".yaml");
 
-    if (det_name.compare("ORB") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorORB>(det_ptr);
-    else if (det_name.compare("FAST") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorFAST>(det_ptr);
-    else if (det_name.compare("SIFT") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSIFT>(det_ptr);
-    else if (det_name.compare("SURF") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSURF>(det_ptr);
-    else if (det_name.compare("BRISK") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorBRISK>(det_ptr);
-    else if (det_name.compare("MSER") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorMSER>(det_ptr);
-    else if (det_name.compare("GFTT") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorGFTT>(det_ptr);
-    else if (det_name.compare("HARRIS") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorHARRIS>(det_ptr);
-    else if (det_name.compare("SBD") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorSBD>(det_ptr);
-    else if (det_name.compare("KAZE") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorKAZE>(det_ptr);
-    else if (det_name.compare("AKAZE") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorAKAZE>(det_ptr);
-    else if (det_name.compare("AGAST") == 0)
-    	det_ptr = std::static_pointer_cast<DetectorAGAST>(det_ptr);
-
     std::string def_descriptor = "ORB";
     std::cout << std::endl << "Which DESCRIPTOR do you want to test? Type one of the registered names  [default: " << def_descriptor << "]: ";
     std::string des_name = readFromUser(def_descriptor);
 
     DescriptorBasePtr des_ptr = setupDescriptor(des_name, des_name + " descriptor", vu_root + path_yaml_file + "/" + des_name + ".yaml");
 
-    if (des_name.compare("ORB") == 0)
-    	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("BRISK") == 0)
-      	des_ptr = std::static_pointer_cast<DescriptorBRISK>(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)
-    	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("FREAK") == 0)
-    	des_ptr = std::static_pointer_cast<DescriptorFREAK>(des_ptr);
-    else if (des_name.compare("BRIEF") == 0)
-    	des_ptr = std::static_pointer_cast<DescriptorBRIEF>(des_ptr);
-    else if (des_name.compare("DAISY") == 0)
-    	des_ptr = std::static_pointer_cast<DescriptorDAISY>(des_ptr);
-    else if (des_name.compare("LUCID") == 0)
-    	des_ptr = std::static_pointer_cast<DescriptorLUCID>(des_ptr);
-
     std::cout << "\n================ MATCHER TEST  =================" << std::endl;
 
     std::string def_matcher = "BRUTEFORCE";
@@ -94,17 +46,6 @@ int main(void)
 
     MatcherBasePtr mat_ptr = setupMatcher(mat_name, mat_name + " matcher", vu_root + path_yaml_file + "/" + mat_name + ".yaml");
 
-    if (mat_name.compare("FLANNBASED") == 0)
-    	mat_ptr = std::static_pointer_cast<MatcherFLANNBASED>(mat_ptr);
-    if (mat_name.compare("BRUTEFORCE") == 0)
-    	mat_ptr = std::static_pointer_cast<MatcherBRUTEFORCE>(mat_ptr);
-    if (mat_name.compare("BRUTEFORCE_L1") == 0)
-    	mat_ptr = std::static_pointer_cast<MatcherBRUTEFORCE_L1>(mat_ptr);
-    if (mat_name.compare("BRUTEFORCE_HAMMING") == 0)
-    	mat_ptr = std::static_pointer_cast<MatcherBRUTEFORCE_HAMMING>(mat_ptr);
-    if (mat_name.compare("BRUTEFORCE_HAMMING_2") == 0)
-    	mat_ptr = std::static_pointer_cast<MatcherBRUTEFORCE_HAMMING_2>(mat_ptr);
-
     std::cout << std::endl << "... Testing " << det_ptr->getName() << " with " <<  des_ptr->getName() << " and " <<  mat_ptr->getName() << " ..." << std::endl;
 
     // Open camera
diff --git a/src/test/gtest_detectors.cpp b/src/test/gtest_detectors.cpp
index 0e0b9172f514c57d6f864230214c290424b486fa..0e6a0eebc363f591ce430bbe44619f46b026c0b9 100644
--- a/src/test/gtest_detectors.cpp
+++ b/src/test/gtest_detectors.cpp
@@ -17,33 +17,6 @@ std::map<int, cv::Point2f> TestDetectorROI(const cv::Mat& _image, vision_utils::
 {
 	std::map<int, cv::Point2f> points_found;
 
-	if (_det_name.compare("ORB") == 0)
-	    	_det_ptr = std::static_pointer_cast<vision_utils::DetectorORB>(_det_ptr);
-	    else if (_det_name.compare("FAST") == 0)
-	    	_det_ptr = std::static_pointer_cast<vision_utils::DetectorFAST>(_det_ptr);
-	    else if (_det_name.compare("SIFT") == 0)
-	    	_det_ptr = std::static_pointer_cast<vision_utils::DetectorSIFT>(_det_ptr);
-	    else if (_det_name.compare("SURF") == 0)
-	    	_det_ptr = std::static_pointer_cast<vision_utils::DetectorSURF>(_det_ptr);
-	    else if (_det_name.compare("BRISK") == 0)
-	    	_det_ptr = std::static_pointer_cast<vision_utils::DetectorBRISK>(_det_ptr);
-	    else if (_det_name.compare("MSER") == 0)
-	    	_det_ptr = std::static_pointer_cast<vision_utils::DetectorMSER>(_det_ptr);
-	    else if (_det_name.compare("GFTT") == 0)
-	    	_det_ptr = std::static_pointer_cast<vision_utils::DetectorGFTT>(_det_ptr);
-	    else if (_det_name.compare("HARRIS") == 0)
-	    	_det_ptr = std::static_pointer_cast<vision_utils::DetectorHARRIS>(_det_ptr);
-	    else if (_det_name.compare("QUICKHARRIS") == 0)
-	    	_det_ptr = std::static_pointer_cast<vision_utils::DetectorQUICKHARRIS>(_det_ptr);
-	    else if (_det_name.compare("SBD") == 0)
-	    	_det_ptr = std::static_pointer_cast<vision_utils::DetectorSBD>(_det_ptr);
-	    else if (_det_name.compare("KAZE") == 0)
-	    	_det_ptr = std::static_pointer_cast<vision_utils::DetectorKAZE>(_det_ptr);
-	    else if (_det_name.compare("AKAZE") == 0)
-	    	_det_ptr = std::static_pointer_cast<vision_utils::DetectorAKAZE>(_det_ptr);
-	    else if (_det_name.compare("AGAST") == 0)
-	    	_det_ptr = std::static_pointer_cast<vision_utils::DetectorAGAST>(_det_ptr);
-
 	if(_det_ptr==NULL)
 		return points_found;