diff --git a/alib2common/src/abstraction/AlgorithmRegistry.hpp b/alib2common/src/abstraction/AlgorithmRegistry.hpp
index c35067f9792fa7c020e5535d5fbe4fa9add50be0..2e400ab150cb0968ecd4d8c0a955b399e6d27a48 100644
--- a/alib2common/src/abstraction/AlgorithmRegistry.hpp
+++ b/alib2common/src/abstraction/AlgorithmRegistry.hpp
@@ -64,6 +64,11 @@ class AlgorithmRegistry {
 		INCOMPATIBLE
 	};
 
+	template < class ParamType >
+	static ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > convertParamType ( std::string paramName ) {
+		return ext::make_tuple ( ext::to_string < typename std::decay < ParamType >::type > ( ), abstraction::ParamQualifiers::paramQualifiers < ParamType > ( ), std::move ( paramName ) );
+	}
+
 	template < class ... ParamTypes >
 	static ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > convertParamTypes ( std::array < std::string, sizeof ... ( ParamTypes ) > paramNames ) {
 		/* make unused parameter warning go away in case of sizeof ... ( ParamTypes ) == 0 */
@@ -72,7 +77,7 @@ class AlgorithmRegistry {
 		ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > params;
 
 		unsigned i = 0; /* the evaluation order in initializer list is actually defined */
-		( void ) std::initializer_list < int > { ( params.push_back ( ext::make_tuple ( ext::to_string < typename std::decay < ParamTypes >::type > ( ), abstraction::ParamQualifiers::paramQualifiers < ParamTypes > ( ), std::move ( paramNames [ i ++ ] ) ) ), 0 ) ... };
+		( void ) std::initializer_list < int > { ( params.push_back ( convertParamType < ParamTypes > ( std::move ( paramNames [ i ++ ] ) ) ), 0 ) ... };
 
 		return params;
 	}