diff --git a/.cproject b/.cproject
index 088483fe3f8053dc185d2eae00bbfd366c6b9975..c75b15940281a9831b33ad8670834a82a5b53daa 100644
--- a/.cproject
+++ b/.cproject
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
 	<storageModule moduleId="org.eclipse.cdt.core.settings">
-		<cconfiguration id="cdt.managedbuild.toolchain.gnu.base.1244102678">
-			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.base.1244102678" moduleId="org.eclipse.cdt.core.settings" name="Default">
+		<cconfiguration id="cdt.managedbuild.toolchain.gnu.cross.base.772018425">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.cross.base.772018425" moduleId="org.eclipse.cdt.core.settings" name="Default">
 				<externalSettings/>
 				<extensions>
-					<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+					<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
 					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
@@ -14,45 +14,29 @@
 				</extensions>
 			</storageModule>
 			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-				<configuration buildProperties="" description="" id="cdt.managedbuild.toolchain.gnu.base.1244102678" name="Default" parent="org.eclipse.cdt.build.core.emptycfg">
-					<folderInfo id="cdt.managedbuild.toolchain.gnu.base.1244102678.1450977940" name="/" resourcePath="">
-						<toolChain id="cdt.managedbuild.toolchain.gnu.base.1670099165" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.base">
-							<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.GNU_ELF" id="cdt.managedbuild.target.gnu.platform.base.1425058182" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/>
-							<builder arguments="" buildPath="${workspace_loc:/vision_utils/build}" command="make" id="cdt.managedbuild.target.gnu.builder.base.1397358642" incrementalBuildTarget="" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="6" superClass="cdt.managedbuild.target.gnu.builder.base"/>
-							<tool id="cdt.managedbuild.tool.gnu.archiver.base.599567389" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
-							<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.base.1572359948" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base">
-								<option id="gnu.cpp.compiler.option.include.paths.1770487778" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
-									<listOptionValue builtIn="false" value="/usr/local/include"/>
-									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/Vision Utils/src}&quot;"/>
-								</option>
-								<option id="gnu.cpp.compiler.option.preprocessor.def.91385799" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols">
-									<listOptionValue builtIn="false" value="__cplusplus=201103"/>
-								</option>
-								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.466329004" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+				<configuration buildProperties="" description="" id="cdt.managedbuild.toolchain.gnu.cross.base.772018425" name="Default" parent="org.eclipse.cdt.build.core.emptycfg">
+					<folderInfo id="cdt.managedbuild.toolchain.gnu.cross.base.772018425.677700058" name="/" resourcePath="">
+						<toolChain id="cdt.managedbuild.toolchain.gnu.cross.base.1577360791" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.base">
+							<option id="cdt.managedbuild.option.gnu.cross.prefix.2047872140" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix"/>
+							<option id="cdt.managedbuild.option.gnu.cross.path.1906188929" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path"/>
+							<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.530116614" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/>
+							<builder buildPath="${workspace_loc:/vision_utils}/build" enabledIncrementalBuild="true" id="cdt.managedbuild.builder.gnu.cross.1321287044" incrementalBuildTarget="" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.builder.gnu.cross"/>
+							<tool id="cdt.managedbuild.tool.gnu.cross.c.compiler.2113617585" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler">
+								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.844027082" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
 							</tool>
-							<tool id="cdt.managedbuild.tool.gnu.c.compiler.base.1838202852" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base">
-								<option id="gnu.c.compiler.option.include.paths.1944000269" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
-									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/vision_utils/src}&quot;"/>
-									<listOptionValue builtIn="false" value="/usr/local/include"/>
-								</option>
-								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.964584931" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+							<tool id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.1552607345" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler">
+								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.2062058076" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
 							</tool>
-							<tool id="cdt.managedbuild.tool.gnu.c.linker.base.1546364764" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base"/>
-							<tool id="cdt.managedbuild.tool.gnu.cpp.linker.base.674742229" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.base">
-								<option id="gnu.cpp.link.option.paths.1264112011" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
-									<listOptionValue builtIn="false" value="/usr/local/lib"/>
-								</option>
-								<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.224259993" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+							<tool id="cdt.managedbuild.tool.gnu.cross.c.linker.1390296837" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/>
+							<tool id="cdt.managedbuild.tool.gnu.cross.cpp.linker.1526254170" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker">
+								<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1245904112" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
 									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
 									<additionalInput kind="additionalinput" paths="$(LIBS)"/>
 								</inputType>
 							</tool>
-							<tool id="cdt.managedbuild.tool.gnu.assembler.base.2121101980" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.base">
-								<option id="gnu.both.asm.option.include.paths.738910739" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
-									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/vision_utils/src}&quot;"/>
-									<listOptionValue builtIn="false" value="/usr/local/include"/>
-								</option>
-								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1979788870" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+							<tool id="cdt.managedbuild.tool.gnu.cross.archiver.1731621126" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/>
+							<tool id="cdt.managedbuild.tool.gnu.cross.assembler.1714654559" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler">
+								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1492925080" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
 							</tool>
 						</toolChain>
 					</folderInfo>
@@ -61,16 +45,6 @@
 			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 		</cconfiguration>
 	</storageModule>
-	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-		<project id="vision_utils.null.866851028" name="vision_utils"/>
-	</storageModule>
-	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
-	<storageModule moduleId="refreshScope" versionNumber="2">
-		<configuration configurationName="Default">
-			<resource resourceType="PROJECT" workspacePath="/vision_utils"/>
-		</configuration>
-	</storageModule>
-	<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
 	<storageModule moduleId="scannerConfiguration">
 		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 		<scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.base.1819918851;cdt.managedbuild.toolchain.gnu.base.1819918851.1318867162;cdt.managedbuild.tool.gnu.cpp.compiler.base.1649772065;cdt.managedbuild.tool.gnu.cpp.compiler.input.146329834">
@@ -104,4 +78,14 @@
 			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 		</scannerConfigBuildInfo>
 	</storageModule>
+	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+		<project id="vision_utils.null.1064155195" name="vision_utils"/>
+	</storageModule>
+	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+	<storageModule moduleId="refreshScope" versionNumber="2">
+		<configuration configurationName="Default">
+			<resource resourceType="PROJECT" workspacePath="/vision_utils"/>
+		</configuration>
+	</storageModule>
+	<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
 </cproject>
diff --git a/.gitignore b/.gitignore
index f848ed1130417e69e86b7effdeb9b70470d5380b..aad876f7774aac6f7caf1a28df89fffa360bb65f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,4 +4,3 @@ perf.data
 **/*.*~
 .settings/
 .cproject
-*.cproject
diff --git a/src/algorithms/activesearch/alg_activesearch.h b/src/algorithms/activesearch/alg_activesearch.h
index 100d51426b5045b52c3ac7c1d92e4ccd9a07bd4a..a7c1bfa33a3e9b159421a285aac26fea9657fc15 100644
--- a/src/algorithms/activesearch/alg_activesearch.h
+++ b/src/algorithms/activesearch/alg_activesearch.h
@@ -14,7 +14,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(AlgorithmACTIVESEARCH);
-VU_PTR_TYPEDEFS(AlgorithmParamsACTIVESEARCH);
+VU_STRUCT_PTR_TYPEDEFS(AlgorithmParamsACTIVESEARCH);
 
 /** \brief Class parameters
  *
diff --git a/src/algorithms/algorithm_base.h b/src/algorithms/algorithm_base.h
index e8d1745eb3d555fb7ea33703a7628481ecfb4781..782b7f5c1841fdcb1ea0760842a1c58c274cb659 100644
--- a/src/algorithms/algorithm_base.h
+++ b/src/algorithms/algorithm_base.h
@@ -13,7 +13,7 @@ namespace vision_utils
 
 // Create all pointers
 VU_PTR_TYPEDEFS(AlgorithmBase);
-VU_PTR_TYPEDEFS(AlgorithmParamsBase);
+VU_STRUCT_PTR_TYPEDEFS(AlgorithmParamsBase);
 
 /** \brief Class parameters
  *
diff --git a/src/algorithms/opticalflowpyrlk/alg_opticalflowpyrlk.h b/src/algorithms/opticalflowpyrlk/alg_opticalflowpyrlk.h
index 62f689fb9d0c38a00f8cdf58776bbdcd72133513..74343d0d6d4f8d2391e1b8a0e4f00b393f78fdbf 100644
--- a/src/algorithms/opticalflowpyrlk/alg_opticalflowpyrlk.h
+++ b/src/algorithms/opticalflowpyrlk/alg_opticalflowpyrlk.h
@@ -14,7 +14,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(AlgorithmOPTFLOWPYRLK);
-VU_PTR_TYPEDEFS(AlgorithmParamsOPTFLOWPYRLK);
+VU_STRUCT_PTR_TYPEDEFS(AlgorithmParamsOPTFLOWPYRLK);
 
 /** \brief Class parameters
  *
diff --git a/src/algorithms/residualtrilinearity/alg_residualtrilinearity.h b/src/algorithms/residualtrilinearity/alg_residualtrilinearity.h
index 52e1d21b38332505b9d5bad86c66c5657e22ebc8..b4be39c9d2e5b6d809f61d39df9c7d32534efb5e 100644
--- a/src/algorithms/residualtrilinearity/alg_residualtrilinearity.h
+++ b/src/algorithms/residualtrilinearity/alg_residualtrilinearity.h
@@ -10,7 +10,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(AlgorithmRESIDUALTRILINEARITY);
-VU_PTR_TYPEDEFS(AlgorithmParamsRESIDUALTRILINEARITY);
+VU_STRUCT_PTR_TYPEDEFS(AlgorithmParamsRESIDUALTRILINEARITY);
 
 /** \brief Class parameters
  *
diff --git a/src/algorithms/trackfeatures/alg_trackfeatures.h b/src/algorithms/trackfeatures/alg_trackfeatures.h
index cdc1c8704c15e4ba3d7ef8dfc88b758feec303c1..334bbe57c05e183831a0b9b84bb2cc5d05ea36eb 100644
--- a/src/algorithms/trackfeatures/alg_trackfeatures.h
+++ b/src/algorithms/trackfeatures/alg_trackfeatures.h
@@ -14,7 +14,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(AlgorithmTRACKFEATURES);
-VU_PTR_TYPEDEFS(AlgorithmParamsTRACKFEATURES);
+VU_STRUCT_PTR_TYPEDEFS(AlgorithmParamsTRACKFEATURES);
 
 /** \brief Class parameters
  *
diff --git a/src/descriptors/akaze/descriptor_akaze.h b/src/descriptors/akaze/descriptor_akaze.h
index 47c724c05fa6dbe76b34c3c4c586436d7d5b2ab0..d01dc79f5447c839e7a6ef55aa7b52939ad17242 100644
--- a/src/descriptors/akaze/descriptor_akaze.h
+++ b/src/descriptors/akaze/descriptor_akaze.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DescriptorAKAZE);
-VU_PTR_TYPEDEFS(DescriptorParamsAKAZE);
+VU_STRUCT_PTR_TYPEDEFS(DescriptorParamsAKAZE);
 
 /** \brief Class parameters
  *
diff --git a/src/descriptors/brief/descriptor_brief.h b/src/descriptors/brief/descriptor_brief.h
index 58f45cfa4cc13bc08ed587f096a661c67e23757f..19e21d35540000cbf1102336ed6766f14e099464 100644
--- a/src/descriptors/brief/descriptor_brief.h
+++ b/src/descriptors/brief/descriptor_brief.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DescriptorBRIEF);
-VU_PTR_TYPEDEFS(DescriptorParamsBRIEF);
+VU_STRUCT_PTR_TYPEDEFS(DescriptorParamsBRIEF);
 
 /** \brief Class parameters
  *
diff --git a/src/descriptors/brisk/descriptor_brisk.h b/src/descriptors/brisk/descriptor_brisk.h
index 34f598e9e2147572922141c67e06e5308863ab1f..c92c8e93b8fd5113cdcea0c7e31c4811c244a66e 100644
--- a/src/descriptors/brisk/descriptor_brisk.h
+++ b/src/descriptors/brisk/descriptor_brisk.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DescriptorBRISK);
-VU_PTR_TYPEDEFS(DescriptorParamsBRISK);
+VU_STRUCT_PTR_TYPEDEFS(DescriptorParamsBRISK);
 
 /** \brief Class parameters
  *
diff --git a/src/descriptors/daisy/descriptor_daisy.h b/src/descriptors/daisy/descriptor_daisy.h
index 1af4d994179c37ae7b2137549aebf7ba58504db8..193ed2b766178d628591cc987987aa4ac748ce50 100644
--- a/src/descriptors/daisy/descriptor_daisy.h
+++ b/src/descriptors/daisy/descriptor_daisy.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DescriptorDAISY);
-VU_PTR_TYPEDEFS(DescriptorParamsDAISY);
+VU_STRUCT_PTR_TYPEDEFS(DescriptorParamsDAISY);
 
 /** \DAISY Class parameters
  *
diff --git a/src/descriptors/descriptor_base.h b/src/descriptors/descriptor_base.h
index 948c0e09b5ba2fad9f03e810e0ff2b82ecf34d5d..7d0c6fdf7edc6b93634e6758d0cc81b8d84eb99e 100644
--- a/src/descriptors/descriptor_base.h
+++ b/src/descriptors/descriptor_base.h
@@ -15,7 +15,7 @@ namespace vision_utils
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DescriptorBase);
-VU_PTR_TYPEDEFS(DescriptorParamsBase);
+VU_STRUCT_PTR_TYPEDEFS(DescriptorParamsBase);
 
 /** \brief Class parameters
  *
diff --git a/src/descriptors/freak/descriptor_freak.h b/src/descriptors/freak/descriptor_freak.h
index 7e15759bcd5ea2e4c287e9d8862161070b62f9bd..516d015685471277aefd207a4e87ba71e8ed8403 100644
--- a/src/descriptors/freak/descriptor_freak.h
+++ b/src/descriptors/freak/descriptor_freak.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DescriptorFREAK);
-VU_PTR_TYPEDEFS(DescriptorParamsFREAK);
+VU_STRUCT_PTR_TYPEDEFS(DescriptorParamsFREAK);
 
 /** \brief Class parameters
  *
diff --git a/src/descriptors/kaze/descriptor_kaze.h b/src/descriptors/kaze/descriptor_kaze.h
index b7d81cef29cf705e69a595829a75bcc255049e2e..d3037565044e619e555404c0303709f9cf872146 100644
--- a/src/descriptors/kaze/descriptor_kaze.h
+++ b/src/descriptors/kaze/descriptor_kaze.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DescriptorKAZE);
-VU_PTR_TYPEDEFS(DescriptorParamsKAZE);
+VU_STRUCT_PTR_TYPEDEFS(DescriptorParamsKAZE);
 
 /** \brief Class parameters
  *
diff --git a/src/descriptors/latch/descriptor_latch.h b/src/descriptors/latch/descriptor_latch.h
index c7fd291b219b8a346d2322a60cfc7c7549800808..780ae5bb8dc755a8ecb3c84b254014b4a84ccf46 100644
--- a/src/descriptors/latch/descriptor_latch.h
+++ b/src/descriptors/latch/descriptor_latch.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DescriptorLATCH);
-VU_PTR_TYPEDEFS(DescriptorParamsLATCH);
+VU_STRUCT_PTR_TYPEDEFS(DescriptorParamsLATCH);
 
 /** \brief Class parameters
  *
diff --git a/src/descriptors/lucid/descriptor_lucid.h b/src/descriptors/lucid/descriptor_lucid.h
index ef1dfe05c22a850dd17e19dd93c14d7fb74d7fc7..db43b2544bec16be64579807f8eff658c0321eeb 100644
--- a/src/descriptors/lucid/descriptor_lucid.h
+++ b/src/descriptors/lucid/descriptor_lucid.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DescriptorLUCID);
-VU_PTR_TYPEDEFS(DescriptorParamsLUCID);
+VU_STRUCT_PTR_TYPEDEFS(DescriptorParamsLUCID);
 
 /** \brief Class parameters
  *
diff --git a/src/descriptors/orb/descriptor_orb.h b/src/descriptors/orb/descriptor_orb.h
index 7bfaec266109512a2c407c1d621404ef1c252cbe..c01e35e1e6262b3a38b7bb442c915c7ef8d1d4fb 100644
--- a/src/descriptors/orb/descriptor_orb.h
+++ b/src/descriptors/orb/descriptor_orb.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DescriptorORB);
-VU_PTR_TYPEDEFS(DescriptorParamsORB);
+VU_STRUCT_PTR_TYPEDEFS(DescriptorParamsORB);
 
 /** \brief Class parameters
  *
diff --git a/src/descriptors/sift/descriptor_sift.h b/src/descriptors/sift/descriptor_sift.h
index e462f2a6e3a49997c45f4630f81844069be4de86..ea69e58fad574d7acb4224f40d5ef375aa8c5fe3 100644
--- a/src/descriptors/sift/descriptor_sift.h
+++ b/src/descriptors/sift/descriptor_sift.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DescriptorSIFT);
-VU_PTR_TYPEDEFS(DescriptorParamsSIFT);
+VU_STRUCT_PTR_TYPEDEFS(DescriptorParamsSIFT);
 
 /** \brief Class parameters
  *
diff --git a/src/descriptors/surf/descriptor_surf.h b/src/descriptors/surf/descriptor_surf.h
index 9f788817853ce98f1c8d9c66e8a5cd3a7c744946..f631e07506100b513c32072f65c755d42bc4ded2 100644
--- a/src/descriptors/surf/descriptor_surf.h
+++ b/src/descriptors/surf/descriptor_surf.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DescriptorSURF);
-VU_PTR_TYPEDEFS(DescriptorParamsSURF);
+VU_STRUCT_PTR_TYPEDEFS(DescriptorParamsSURF);
 
 /** \brief Class parameters
  *
diff --git a/src/detectors/agast/detector_agast.cpp b/src/detectors/agast/detector_agast.cpp
index 576b23587869ade6d8c9b20e3e723dd2c0e1b898..6bc2746246546cad42497c9b6c0b0b2f23b71bfb 100644
--- a/src/detectors/agast/detector_agast.cpp
+++ b/src/detectors/agast/detector_agast.cpp
@@ -8,7 +8,7 @@ DetectorAGAST::DetectorAGAST(void)
 DetectorAGAST::~DetectorAGAST(void)
 {}
 
-KeyPointVector DetectorAGAST::detect(const cv::Mat& _image, const cv::InputArray& _mask)
+KeyPointVector DetectorAGAST::detect(const cv::Mat& _image, cv::InputArray& _mask)
 {
 	KeyPointVector kpts;
 	clock_t tStart = clock();
diff --git a/src/detectors/agast/detector_agast.h b/src/detectors/agast/detector_agast.h
index b0a1542b89ab0be4050070d528782f46cf99f170..4d9df26082dfa5c756b875f4f58674c998c93807 100644
--- a/src/detectors/agast/detector_agast.h
+++ b/src/detectors/agast/detector_agast.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DetectorAGAST);
-VU_PTR_TYPEDEFS(DetectorParamsAGAST);
+VU_STRUCT_PTR_TYPEDEFS(DetectorParamsAGAST);
 
 /** \brief Class parameters
  *
@@ -31,7 +31,7 @@ class DetectorAGAST : public DetectorBase {
 		DetectorAGAST();
         virtual ~DetectorAGAST(void);
 
-        KeyPointVector detect(const cv::Mat& _image, const cv::InputArray& _mask=cv::noArray() );
+        KeyPointVector detect(const cv::Mat& _image, cv::InputArray& _mask=cv::noArray() );
         KeyPointVector detect(const cv::Mat& _image, cv::Rect& _roi);
 
         // Factory method
diff --git a/src/detectors/akaze/detector_akaze.cpp b/src/detectors/akaze/detector_akaze.cpp
index 51642e4c22f62aae9d52f93ed43d2220f2b11d31..1bfdc1b51c590e4e2221c3a48aaf096e19079ab1 100644
--- a/src/detectors/akaze/detector_akaze.cpp
+++ b/src/detectors/akaze/detector_akaze.cpp
@@ -8,7 +8,7 @@ DetectorAKAZE::DetectorAKAZE(void)
 DetectorAKAZE::~DetectorAKAZE(void)
 {}
 
-KeyPointVector DetectorAKAZE::detect(const cv::Mat& _image, const cv::InputArray& _mask)
+KeyPointVector DetectorAKAZE::detect(const cv::Mat& _image, cv::InputArray& _mask)
 {
 	KeyPointVector kpts;
 	clock_t tStart = clock();
diff --git a/src/detectors/akaze/detector_akaze.h b/src/detectors/akaze/detector_akaze.h
index 69f49e6cb3eff05b3bcf9370704efa6f4fea8de8..7b0d3fa0d6ece84868f1216886899b7fcbc42e40 100644
--- a/src/detectors/akaze/detector_akaze.h
+++ b/src/detectors/akaze/detector_akaze.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DetectorAKAZE);
-VU_PTR_TYPEDEFS(DetectorParamsAKAZE);
+VU_STRUCT_PTR_TYPEDEFS(DetectorParamsAKAZE);
 
 /** \brief Class parameters
  *
@@ -35,7 +35,7 @@ class DetectorAKAZE : public DetectorBase {
 		DetectorAKAZE();
         virtual ~DetectorAKAZE(void);
 
-        KeyPointVector detect(const cv::Mat& _image, const cv::InputArray& _mask=cv::noArray() );
+        KeyPointVector detect(const cv::Mat& _image, cv::InputArray& _mask=cv::noArray() );
         KeyPointVector detect(const cv::Mat& _image, cv::Rect& _roi);
 
         // Factory method
diff --git a/src/detectors/brisk/detector_brisk.cpp b/src/detectors/brisk/detector_brisk.cpp
index 485fbbac86afcddd84cfda069215fa2e0ff78994..a6e8892988ec3ac784d5be1a93abe72c7ab2f4a4 100644
--- a/src/detectors/brisk/detector_brisk.cpp
+++ b/src/detectors/brisk/detector_brisk.cpp
@@ -8,7 +8,7 @@ DetectorBRISK::DetectorBRISK(void)
 DetectorBRISK::~DetectorBRISK(void)
 {}
 
-KeyPointVector DetectorBRISK::detect(const cv::Mat& _image, const cv::InputArray& _mask)
+KeyPointVector DetectorBRISK::detect(const cv::Mat& _image, cv::InputArray& _mask)
 {
 	KeyPointVector kpts;
 	clock_t tStart = clock();
diff --git a/src/detectors/brisk/detector_brisk.h b/src/detectors/brisk/detector_brisk.h
index 9c1f39c935a6d2feee8704bdac341b96c679233d..d38bac729504aa0b6a93c8f20f7689fdff80328e 100644
--- a/src/detectors/brisk/detector_brisk.h
+++ b/src/detectors/brisk/detector_brisk.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DetectorBRISK);
-VU_PTR_TYPEDEFS(DetectorParamsBRISK);
+VU_STRUCT_PTR_TYPEDEFS(DetectorParamsBRISK);
 
 /** \brief Class parameters
  *
@@ -31,7 +31,7 @@ class DetectorBRISK : public DetectorBase {
 		DetectorBRISK();
         virtual ~DetectorBRISK(void);
 
-        KeyPointVector detect(const cv::Mat& _image, const cv::InputArray& _mask=cv::noArray() );
+        KeyPointVector detect(const cv::Mat& _image, cv::InputArray& _mask=cv::noArray() );
         KeyPointVector detect(const cv::Mat& _image, cv::Rect& _roi);
 
         // Factory method
diff --git a/src/detectors/detector_base.h b/src/detectors/detector_base.h
index bd55c0a9c1b2ae69a0c23f83e638b51947889130..207795d35b338b42c7ee42777e3cda589fbf40be 100644
--- a/src/detectors/detector_base.h
+++ b/src/detectors/detector_base.h
@@ -15,7 +15,7 @@ namespace vision_utils
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DetectorBase);
-VU_PTR_TYPEDEFS(DetectorParamsBase);
+VU_STRUCT_PTR_TYPEDEFS(DetectorParamsBase);
 
 /** \brief Class parameters
  *
@@ -45,7 +45,7 @@ class DetectorBase : public VUBase, public std::enable_shared_from_this<Detector
          */
         virtual ~DetectorBase(void);
 
-        virtual KeyPointVector detect(const cv::Mat& _image, const cv::InputArray& _mask=cv::noArray() ) = 0;
+        virtual KeyPointVector detect(const cv::Mat& _image, cv::InputArray& _mask = cv::noArray() ) = 0;
         virtual KeyPointVector detect(const cv::Mat& _image, cv::Rect& _roi) = 0;
 
         std::string getName(void);
diff --git a/src/detectors/fast/detector_fast.cpp b/src/detectors/fast/detector_fast.cpp
index 23c37a59e38a38be7c7e5196d92060d180329a02..552e1190ae701ca8e9564fefef28ac34e19f2852 100644
--- a/src/detectors/fast/detector_fast.cpp
+++ b/src/detectors/fast/detector_fast.cpp
@@ -8,7 +8,7 @@ DetectorFAST::DetectorFAST(void)
 DetectorFAST::~DetectorFAST(void)
 {}
 
-KeyPointVector DetectorFAST::detect(const cv::Mat& _image, const cv::InputArray& _mask)
+KeyPointVector DetectorFAST::detect(const cv::Mat& _image, cv::InputArray& _mask)
 {
 	KeyPointVector kpts;
 	clock_t tStart = clock();
diff --git a/src/detectors/fast/detector_fast.h b/src/detectors/fast/detector_fast.h
index 5db5fcb2b8f9c04a5c2d19a072f41c9c04805470..c865ed3366d84caf7493367039e32692881c3595 100644
--- a/src/detectors/fast/detector_fast.h
+++ b/src/detectors/fast/detector_fast.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DetectorFAST);
-VU_PTR_TYPEDEFS(DetectorParamsFAST);
+VU_STRUCT_PTR_TYPEDEFS(DetectorParamsFAST);
 
 /** \brief Class parameters
  *
@@ -31,7 +31,7 @@ class DetectorFAST : public DetectorBase {
 		DetectorFAST();
         virtual ~DetectorFAST(void);
 
-        KeyPointVector detect(const cv::Mat& _image, const cv::InputArray& _mask=cv::noArray() );
+        KeyPointVector detect(const cv::Mat& _image, cv::InputArray& _mask=cv::noArray() );
         KeyPointVector detect(const cv::Mat& _image, cv::Rect& _roi);
 
         // Factory method
diff --git a/src/detectors/gftt/detector_gftt.cpp b/src/detectors/gftt/detector_gftt.cpp
index c49fc8f48407555e87f5bbe28d3f42d6e5842d4a..13bec44d82bb0dc24d48f20e1438fa24a981d65a 100644
--- a/src/detectors/gftt/detector_gftt.cpp
+++ b/src/detectors/gftt/detector_gftt.cpp
@@ -8,7 +8,7 @@ DetectorGFTT::DetectorGFTT(void)
 DetectorGFTT::~DetectorGFTT(void)
 {}
 
-KeyPointVector DetectorGFTT::detect(const cv::Mat& _image, const cv::InputArray& _mask)
+KeyPointVector DetectorGFTT::detect(const cv::Mat& _image, cv::InputArray& _mask)
 {
 	KeyPointVector kpts;
 	clock_t tStart = clock();
diff --git a/src/detectors/gftt/detector_gftt.h b/src/detectors/gftt/detector_gftt.h
index 874c60405651ae1a0f40047a1bad0799b73cb0bb..b2ea4be683a249892183bc3150a3a50107661d3d 100644
--- a/src/detectors/gftt/detector_gftt.h
+++ b/src/detectors/gftt/detector_gftt.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DetectorGFTT);
-VU_PTR_TYPEDEFS(DetectorParamsGFTT);
+VU_STRUCT_PTR_TYPEDEFS(DetectorParamsGFTT);
 
 /** \brief Class parameters
  *
@@ -34,7 +34,7 @@ class DetectorGFTT : public DetectorBase {
 		DetectorGFTT();
         virtual ~DetectorGFTT(void);
 
-        KeyPointVector detect(const cv::Mat& _image, const cv::InputArray& _mask=cv::noArray() );
+        KeyPointVector detect(const cv::Mat& _image, cv::InputArray& _mask=cv::noArray() );
         KeyPointVector detect(const cv::Mat& _image, cv::Rect& _roi);
 
         // Factory method
diff --git a/src/detectors/harris/detector_harris.cpp b/src/detectors/harris/detector_harris.cpp
index f2dd0f5c6d28bae4436bca17e8ff5fbac2db68c9..841eb4d962ffca6585e65552cad37bb9b901e50f 100644
--- a/src/detectors/harris/detector_harris.cpp
+++ b/src/detectors/harris/detector_harris.cpp
@@ -8,7 +8,7 @@ DetectorHARRIS::DetectorHARRIS(void)
 DetectorHARRIS::~DetectorHARRIS(void)
 {}
 
-KeyPointVector DetectorHARRIS::detect(const cv::Mat& _image, const cv::InputArray& _mask)
+KeyPointVector DetectorHARRIS::detect(const cv::Mat& _image, cv::InputArray& _mask)
 {
 	KeyPointVector kpts;
 	clock_t tStart = clock();
diff --git a/src/detectors/harris/detector_harris.h b/src/detectors/harris/detector_harris.h
index 0a24e2d50c64417e6bb6f01350ec3607602099da..1a2d55ec3e52ed1a68f9ec36f9c797285d476486 100644
--- a/src/detectors/harris/detector_harris.h
+++ b/src/detectors/harris/detector_harris.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DetectorHARRIS);
-VU_PTR_TYPEDEFS(DetectorParamsHARRIS);
+VU_STRUCT_PTR_TYPEDEFS(DetectorParamsHARRIS);
 
 /** \brief Class parameters
  *
@@ -34,7 +34,7 @@ class DetectorHARRIS : public DetectorBase {
 		DetectorHARRIS();
         virtual ~DetectorHARRIS(void);
 
-        KeyPointVector detect(const cv::Mat& _image, const cv::InputArray& _mask=cv::noArray() );
+        KeyPointVector detect(const cv::Mat& _image, cv::InputArray& _mask=cv::noArray() );
         KeyPointVector detect(const cv::Mat& _image, cv::Rect& _roi);
 
         // Factory method
diff --git a/src/detectors/kaze/detector_kaze.cpp b/src/detectors/kaze/detector_kaze.cpp
index 67e126b3f48540457ccdcef0a55389b54c25fd2d..d9930c6b997a03ef61ddc4d2bc2262b772ba2dd1 100644
--- a/src/detectors/kaze/detector_kaze.cpp
+++ b/src/detectors/kaze/detector_kaze.cpp
@@ -8,7 +8,7 @@ DetectorKAZE::DetectorKAZE(void)
 DetectorKAZE::~DetectorKAZE(void)
 {}
 
-KeyPointVector DetectorKAZE::detect(const cv::Mat& _image, const cv::InputArray& _mask)
+KeyPointVector DetectorKAZE::detect(const cv::Mat& _image, cv::InputArray& _mask)
 {
 	KeyPointVector kpts;
 	clock_t tStart = clock();
diff --git a/src/detectors/kaze/detector_kaze.h b/src/detectors/kaze/detector_kaze.h
index 47283de370636ce2bfd9793c87b3f3ea3cc72eb0..536965b19518e37fb37afc2084a221aea4f5fc90 100644
--- a/src/detectors/kaze/detector_kaze.h
+++ b/src/detectors/kaze/detector_kaze.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DetectorKAZE);
-VU_PTR_TYPEDEFS(DetectorParamsKAZE);
+VU_STRUCT_PTR_TYPEDEFS(DetectorParamsKAZE);
 
 /** \brief Class parameters
  *
@@ -34,7 +34,7 @@ class DetectorKAZE : public DetectorBase {
 		DetectorKAZE();
         virtual ~DetectorKAZE(void);
 
-        KeyPointVector detect(const cv::Mat& _image, const cv::InputArray& _mask=cv::noArray() );
+        KeyPointVector detect(const cv::Mat& _image, cv::InputArray& _mask=cv::noArray() );
         KeyPointVector detect(const cv::Mat& _image, cv::Rect& _roi);
 
         // Factory method
diff --git a/src/detectors/mser/detector_mser.cpp b/src/detectors/mser/detector_mser.cpp
index 7f14423700f9b59d20b33f424b6e8d0953af73b5..91c9ca1be340ce87d05af41902367cec419484ac 100644
--- a/src/detectors/mser/detector_mser.cpp
+++ b/src/detectors/mser/detector_mser.cpp
@@ -8,7 +8,7 @@ DetectorMSER::DetectorMSER(void)
 DetectorMSER::~DetectorMSER(void)
 {}
 
-KeyPointVector DetectorMSER::detect(const cv::Mat& _image, const cv::InputArray& _mask)
+KeyPointVector DetectorMSER::detect(const cv::Mat& _image, cv::InputArray& _mask)
 {
 	KeyPointVector kpts;
 	clock_t tStart = clock();
diff --git a/src/detectors/mser/detector_mser.h b/src/detectors/mser/detector_mser.h
index d8b7af342936fd74690bb97a95a51b7cddc12f9d..510a35e77297e2ec59001e07ac1f72077f31e218 100644
--- a/src/detectors/mser/detector_mser.h
+++ b/src/detectors/mser/detector_mser.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DetectorMSER);
-VU_PTR_TYPEDEFS(DetectorParamsMSER);
+VU_STRUCT_PTR_TYPEDEFS(DetectorParamsMSER);
 
 /** \brief Class parameters
  *
@@ -37,7 +37,7 @@ class DetectorMSER : public DetectorBase {
 		DetectorMSER();
         virtual ~DetectorMSER(void);
 
-        KeyPointVector detect(const cv::Mat& _image, const cv::InputArray& _mask=cv::noArray() );
+        KeyPointVector detect(const cv::Mat& _image, cv::InputArray& _mask=cv::noArray() );
         KeyPointVector detect(const cv::Mat& _image, cv::Rect& _roi);
 
         // Factory method
diff --git a/src/detectors/orb/detector_orb.cpp b/src/detectors/orb/detector_orb.cpp
index e208352fa911ff46cbdf36dd36e71108367cff01..c7bce5ce29307cd4547a4e5641ae7f4afe89d4b3 100644
--- a/src/detectors/orb/detector_orb.cpp
+++ b/src/detectors/orb/detector_orb.cpp
@@ -8,7 +8,7 @@ DetectorORB::DetectorORB(void)
 DetectorORB::~DetectorORB(void)
 {}
 
-KeyPointVector DetectorORB::detect(const cv::Mat& _image, const cv::InputArray& _mask)
+KeyPointVector DetectorORB::detect(const cv::Mat& _image, cv::InputArray& _mask)
 {
 	KeyPointVector kpts;
 	clock_t tStart = clock();
diff --git a/src/detectors/orb/detector_orb.h b/src/detectors/orb/detector_orb.h
index 5bd6a1d465901768c7f5262106fb5761c2d6c045..35d702d4acade4f86064a295bdedb089a10b5847 100644
--- a/src/detectors/orb/detector_orb.h
+++ b/src/detectors/orb/detector_orb.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DetectorORB);
-VU_PTR_TYPEDEFS(DetectorParamsORB);
+VU_STRUCT_PTR_TYPEDEFS(DetectorParamsORB);
 
 /** \brief Class parameters
  *
@@ -36,7 +36,7 @@ class DetectorORB : public DetectorBase {
 		DetectorORB();
         virtual ~DetectorORB(void);
 
-        KeyPointVector detect(const cv::Mat& _image, const cv::InputArray& _mask=cv::noArray() );
+        KeyPointVector detect(const cv::Mat& _image, cv::InputArray& _mask=cv::noArray() );
         KeyPointVector detect(const cv::Mat& _image, cv::Rect& _roi);
 
         // Factory method
diff --git a/src/detectors/quickharris/detector_quickharris.cpp b/src/detectors/quickharris/detector_quickharris.cpp
index 598020dc895fe446a36acad784f165c482aa7071..b590af10f1090698917e22c93bd11f39a29fa663 100644
--- a/src/detectors/quickharris/detector_quickharris.cpp
+++ b/src/detectors/quickharris/detector_quickharris.cpp
@@ -7,7 +7,7 @@ namespace vision_utils {
 #if GAUSSIAN_MASK_APPROX
     , int _convolutionGaussianApproxCoeffsNumber
 #endif
-		) : m_derivationSize_(1), m_convolutionSize_(_convolutionBoxSize), m_threshold_(_threshold), m_edge_(_edge), m_quickData_(nullptr)
+		) : /*m_derivationSize_(1),*/ m_convolutionSize_(_convolutionBoxSize), m_threshold_(_threshold), m_edge_(_edge), m_quickData_(nullptr)
 {
 	shift_conv_ = (m_convolutionSize_ - 1) / 2;
 
@@ -371,7 +371,7 @@ DetectorQUICKHARRIS::DetectorQUICKHARRIS(void)
 DetectorQUICKHARRIS::~DetectorQUICKHARRIS(void)
 {}
 
-KeyPointVector DetectorQUICKHARRIS::detect(const cv::Mat& _image, const cv::InputArray& _mask)
+KeyPointVector DetectorQUICKHARRIS::detect(const cv::Mat& _image, cv::InputArray& _mask)
 {
 	clock_t tStart = clock();
 
diff --git a/src/detectors/quickharris/detector_quickharris.h b/src/detectors/quickharris/detector_quickharris.h
index 0c985e76f651d11ac4b6a777ed880462e04f1977..72a68c47aac1e6f0b0faf7acc85bc56f84211082 100644
--- a/src/detectors/quickharris/detector_quickharris.h
+++ b/src/detectors/quickharris/detector_quickharris.h
@@ -63,13 +63,13 @@ public:
 #endif
 	);
 
-	~QuickHarrisDetector();
+	virtual ~QuickHarrisDetector();
 
 	virtual bool detect(const cv::Mat& _image, cv::KeyPoint& _kp, double& _scoreBest, const cv::Rect& _roi = cv::Rect(0,0,0,0));
 
 private:
 
-	int m_derivationSize_;
+//	int m_derivationSize_;
 	int m_convolutionSize_;
 	double m_threshold_;
 	double m_edge_;
@@ -107,7 +107,7 @@ private:
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DetectorQUICKHARRIS);
-VU_PTR_TYPEDEFS(DetectorParamsQUICKHARRIS);
+VU_STRUCT_PTR_TYPEDEFS(DetectorParamsQUICKHARRIS);
 
 /** \brief Class parameters
  *
@@ -136,7 +136,7 @@ class DetectorQUICKHARRIS : public DetectorBase {
 		DetectorQUICKHARRIS();
         virtual ~DetectorQUICKHARRIS(void);
 
-        KeyPointVector detect(const cv::Mat& _image, const cv::InputArray& _mask=cv::noArray() );
+        KeyPointVector detect(const cv::Mat& _image, cv::InputArray& _mask=cv::noArray() );
         KeyPointVector detect(const cv::Mat& _image, cv::Rect& _roi);
         bool detectSingle(const cv::Mat& _image, cv::Rect& _roi, cv::KeyPoint& _kp, double& scoreBest);
 
diff --git a/src/detectors/sbd/detector_sbd.cpp b/src/detectors/sbd/detector_sbd.cpp
index 550371d051377241a72fc2e5addb011d8b4b24fc..a8f7da3408a8759cc7b310e534479339fad960b8 100644
--- a/src/detectors/sbd/detector_sbd.cpp
+++ b/src/detectors/sbd/detector_sbd.cpp
@@ -8,7 +8,7 @@ DetectorSBD::DetectorSBD(void)
 DetectorSBD::~DetectorSBD(void)
 {}
 
-KeyPointVector DetectorSBD::detect(const cv::Mat& _image, const cv::InputArray& _mask)
+KeyPointVector DetectorSBD::detect(const cv::Mat& _image, cv::InputArray& _mask)
 {
 	KeyPointVector kpts;
 	clock_t tStart = clock();
diff --git a/src/detectors/sbd/detector_sbd.h b/src/detectors/sbd/detector_sbd.h
index f0c0a0e3590b99cdf2d9df84e188f7c3aa5abedc..e08834e579bda67fec419e31a0502369da39ff69 100644
--- a/src/detectors/sbd/detector_sbd.h
+++ b/src/detectors/sbd/detector_sbd.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DetectorSBD);
-VU_PTR_TYPEDEFS(DetectorParamsSBD);
+VU_STRUCT_PTR_TYPEDEFS(DetectorParamsSBD);
 
 /** \brief Class parameters
  *
@@ -29,7 +29,7 @@ class DetectorSBD : public DetectorBase {
 		DetectorSBD();
         virtual ~DetectorSBD(void);
 
-        KeyPointVector detect(const cv::Mat& _image, const cv::InputArray& _mask=cv::noArray() );
+        KeyPointVector detect(const cv::Mat& _image, cv::InputArray& _mask=cv::noArray() );
         KeyPointVector detect(const cv::Mat& _image, cv::Rect& _roi);
 
         // Factory method
diff --git a/src/detectors/sift/detector_sift.cpp b/src/detectors/sift/detector_sift.cpp
index 7e8801da53feb097030ff3d9ee984cfa04aaaaf0..6f2ebe756d30907fc78ea88b53d59a8c86639810 100644
--- a/src/detectors/sift/detector_sift.cpp
+++ b/src/detectors/sift/detector_sift.cpp
@@ -8,7 +8,7 @@ DetectorSIFT::DetectorSIFT(void)
 DetectorSIFT::~DetectorSIFT(void)
 {}
 
-KeyPointVector DetectorSIFT::detect(const cv::Mat& _image, const cv::InputArray& _mask)
+KeyPointVector DetectorSIFT::detect(const cv::Mat& _image, cv::InputArray& _mask)
 {
 	KeyPointVector kpts;
 	clock_t tStart = clock();
diff --git a/src/detectors/sift/detector_sift.h b/src/detectors/sift/detector_sift.h
index fe9f2594f1a7dbc357186af575e85bc39e8bc6d2..3066363efdcdbf36f61376ded113b12c9ab28ee1 100644
--- a/src/detectors/sift/detector_sift.h
+++ b/src/detectors/sift/detector_sift.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DetectorSIFT);
-VU_PTR_TYPEDEFS(DetectorParamsSIFT);
+VU_STRUCT_PTR_TYPEDEFS(DetectorParamsSIFT);
 
 /** \brief Class parameters
  *
@@ -33,7 +33,7 @@ class DetectorSIFT : public DetectorBase {
 		DetectorSIFT();
         virtual ~DetectorSIFT(void);
 
-        KeyPointVector detect(const cv::Mat& _image, const cv::InputArray& _mask=cv::noArray() );
+        KeyPointVector detect(const cv::Mat& _image, cv::InputArray& _mask=cv::noArray() );
         KeyPointVector detect(const cv::Mat& _image, cv::Rect& _roi);
 
         // Factory method
diff --git a/src/detectors/surf/detector_surf.cpp b/src/detectors/surf/detector_surf.cpp
index 22c5685dc03d755a2161c0e91f3488f4abdb8ecf..7c1eddbfe9da494111bc543e1b332ebcd2f827a7 100644
--- a/src/detectors/surf/detector_surf.cpp
+++ b/src/detectors/surf/detector_surf.cpp
@@ -8,7 +8,7 @@ DetectorSURF::DetectorSURF(void)
 DetectorSURF::~DetectorSURF(void)
 {}
 
-KeyPointVector DetectorSURF::detect(const cv::Mat& _image, const cv::InputArray& _mask)
+KeyPointVector DetectorSURF::detect(const cv::Mat& _image, cv::InputArray& _mask)
 {
 	KeyPointVector kpts;
 	clock_t tStart = clock();
diff --git a/src/detectors/surf/detector_surf.h b/src/detectors/surf/detector_surf.h
index 30520c7b653821091c1d2e2cd2749a13b416be6c..172033dac7e5b914cdf6695758bd5333d4a2efde 100644
--- a/src/detectors/surf/detector_surf.h
+++ b/src/detectors/surf/detector_surf.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(DetectorSURF);
-VU_PTR_TYPEDEFS(DetectorParamsSURF);
+VU_STRUCT_PTR_TYPEDEFS(DetectorParamsSURF);
 
 /** \brief Class parameters
  *
@@ -33,7 +33,7 @@ class DetectorSURF : public DetectorBase {
 		DetectorSURF();
         virtual ~DetectorSURF(void);
 
-        KeyPointVector detect(const cv::Mat& _image, const cv::InputArray& _mask=cv::noArray() );
+        KeyPointVector detect(const cv::Mat& _image, cv::InputArray& _mask=cv::noArray() );
         KeyPointVector detect(const cv::Mat& _image, cv::Rect& _roi);
 
         // Factory method
diff --git a/src/matchers/bruteforce/matcher_bruteforce.h b/src/matchers/bruteforce/matcher_bruteforce.h
index d08194c63440265ec3b163dbb004400aff5aba5e..24fb66d6bceb0f286bf25ae6e2be6dba13546238 100644
--- a/src/matchers/bruteforce/matcher_bruteforce.h
+++ b/src/matchers/bruteforce/matcher_bruteforce.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(MatcherBRUTEFORCE);
-VU_PTR_TYPEDEFS(MatcherParamsBRUTEFORCE);
+VU_STRUCT_PTR_TYPEDEFS(MatcherParamsBRUTEFORCE);
 
 /** \brief Class parameters
  *
diff --git a/src/matchers/bruteforce_hamming/matcher_bruteforce_hamming.h b/src/matchers/bruteforce_hamming/matcher_bruteforce_hamming.h
index bf0f86add7ed473be1e8fbfcbc3cf3cea6478645..1c6ad073d0283f24f67c3af159d612cdf49b3fce 100644
--- a/src/matchers/bruteforce_hamming/matcher_bruteforce_hamming.h
+++ b/src/matchers/bruteforce_hamming/matcher_bruteforce_hamming.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(MatcherBRUTEFORCE_HAMMING);
-VU_PTR_TYPEDEFS(MatcherParamsBRUTEFORCE_HAMMING);
+VU_STRUCT_PTR_TYPEDEFS(MatcherParamsBRUTEFORCE_HAMMING);
 
 /** \brief Class parameters
  *
diff --git a/src/matchers/bruteforce_hamming_2/matcher_bruteforce_hamming_2.h b/src/matchers/bruteforce_hamming_2/matcher_bruteforce_hamming_2.h
index cc3d3b8037b64838d9cce56ea864e94bbf920bd2..9b7e00b667e9b993fffa7ec799be2d220c8f19d4 100644
--- a/src/matchers/bruteforce_hamming_2/matcher_bruteforce_hamming_2.h
+++ b/src/matchers/bruteforce_hamming_2/matcher_bruteforce_hamming_2.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(MatcherBRUTEFORCE_HAMMING_2);
-VU_PTR_TYPEDEFS(MatcherParamsBRUTEFORCE_HAMMING_2);
+VU_STRUCT_PTR_TYPEDEFS(MatcherParamsBRUTEFORCE_HAMMING_2);
 
 /** \brief Class parameters
  *
diff --git a/src/matchers/bruteforce_l1/matcher_bruteforce_l1.h b/src/matchers/bruteforce_l1/matcher_bruteforce_l1.h
index 8b0b244bb8df86d8e2c4f3b89e116dafc38339e9..e2c44f2d58d752468c6a6b39c4a8b35969915fc7 100644
--- a/src/matchers/bruteforce_l1/matcher_bruteforce_l1.h
+++ b/src/matchers/bruteforce_l1/matcher_bruteforce_l1.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(MatcherBRUTEFORCE_L1);
-VU_PTR_TYPEDEFS(MatcherParamsBRUTEFORCE_L1);
+VU_STRUCT_PTR_TYPEDEFS(MatcherParamsBRUTEFORCE_L1);
 
 /** \brief Class parameters
  *
diff --git a/src/matchers/flannbased/matcher_flannbased.h b/src/matchers/flannbased/matcher_flannbased.h
index d2a1b3a0c45fa9e86de090ca9c830b695041388a..d30be93fd6e195bfb60e6434609d0c40981ed314 100644
--- a/src/matchers/flannbased/matcher_flannbased.h
+++ b/src/matchers/flannbased/matcher_flannbased.h
@@ -8,7 +8,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(MatcherFLANNBASED);
-VU_PTR_TYPEDEFS(MatcherParamsFLANNBASED);
+VU_STRUCT_PTR_TYPEDEFS(MatcherParamsFLANNBASED);
 
 /** \brief Class parameters
  *
diff --git a/src/matchers/matcher_base.h b/src/matchers/matcher_base.h
index 146a4f55a49176dabebfb23dcfa4bf2affb49a02..d6daf08133c7486a8484c949aecdd54756e1afd1 100644
--- a/src/matchers/matcher_base.h
+++ b/src/matchers/matcher_base.h
@@ -22,7 +22,7 @@ namespace vision_utils
 
 // Create all pointers
 VU_PTR_TYPEDEFS(MatcherBase);
-VU_PTR_TYPEDEFS(MatcherParamsBase);
+VU_STRUCT_PTR_TYPEDEFS(MatcherParamsBase);
 
 enum MATCH_TYPE{
 	MATCH = 1,
diff --git a/src/sensors/sensor_base.h b/src/sensors/sensor_base.h
index c27512f954a8d042fad78030861203ecfcd05d04..ee1b8859f56271a10c4b8bb562b9cca67b1158ad 100644
--- a/src/sensors/sensor_base.h
+++ b/src/sensors/sensor_base.h
@@ -13,7 +13,7 @@ namespace vision_utils
 
 // Create all pointers
 VU_PTR_TYPEDEFS(SensorBase);
-VU_PTR_TYPEDEFS(SensorParamsBase);
+VU_STRUCT_PTR_TYPEDEFS(SensorParamsBase);
 
 /** \brief Class parameters
  *
diff --git a/src/sensors/usb_cam/usb_cam.h b/src/sensors/usb_cam/usb_cam.h
index de3a47182128356dfc597b59e895cff4443f20db..48935ca67fbafe00393754ba1c375bcd005f0153 100644
--- a/src/sensors/usb_cam/usb_cam.h
+++ b/src/sensors/usb_cam/usb_cam.h
@@ -7,7 +7,7 @@ namespace vision_utils {
 
 // Create all pointers
 VU_PTR_TYPEDEFS(SensorCamera);
-VU_PTR_TYPEDEFS(IntrinsicsCamera);
+VU_STRUCT_PTR_TYPEDEFS(IntrinsicsCamera);
 
 /** \brief class parameters
  *
diff --git a/src/vision_utils.h b/src/vision_utils.h
index d24dfff6cf94cd183945b70ac3aabd1d097536e3..2d1fcdcde800f45b892fc570deac1481fbe69665 100644
--- a/src/vision_utils.h
+++ b/src/vision_utils.h
@@ -143,7 +143,7 @@ namespace vision_utils {
  *
  * Derive from this class to create classes of parameters.
  */
-class ParamsBase {
+struct ParamsBase {
 public:
 	ParamsBase(void) {
 	}
@@ -185,7 +185,7 @@ inline double VUBase::getTime(void)
 };
 
 // Create all pointers
-VU_PTR_TYPEDEFS(ParamsBase);
+VU_STRUCT_PTR_TYPEDEFS(ParamsBase);
 VU_PTR_TYPEDEFS(VUBase);
 
 /////////////////////////////////////////////////////////////////////////