diff --git a/alib2abstraction/src/abstraction/AnyaryOperationAbstraction.hpp b/alib2abstraction/src/abstraction/AnyaryOperationAbstraction.hpp
index 7bed05b84517bbec23f19d6b4cb199c103f5d614..f1208513aa5848e7d1d0f7cd78971a49e81d0e6c 100644
--- a/alib2abstraction/src/abstraction/AnyaryOperationAbstraction.hpp
+++ b/alib2abstraction/src/abstraction/AnyaryOperationAbstraction.hpp
@@ -81,6 +81,10 @@ public:
 		return ext::type_index ( typeid ( ParamType ) );
 	}
 
+	virtual ext::set < abstraction::ParamQualifiers::ParamQualifier > getParamTypeQualifiers ( unsigned ) const override {
+		return abstraction::ParamQualifiers::paramQualifiers < ParamType > ( );
+	}
+
 };
 
 } /* namespace abstraction */
diff --git a/alib2abstraction/src/abstraction/NaryOperationAbstraction.hpp b/alib2abstraction/src/abstraction/NaryOperationAbstraction.hpp
index 5df783dbae70b199b117a44f92acdcc1ea5ced9a..38262a329d1c34de1b46d504b31158b46f5793e7 100644
--- a/alib2abstraction/src/abstraction/NaryOperationAbstraction.hpp
+++ b/alib2abstraction/src/abstraction/NaryOperationAbstraction.hpp
@@ -88,6 +88,10 @@ public:
 		return abstraction::ParamType < ParamTypes ... >::paramType ( index );
 	}
 
+	virtual ext::set < abstraction::ParamQualifiers::ParamQualifier > getParamTypeQualifiers ( unsigned index ) const override {
+		return abstraction::ParamType < ParamTypes ... >::paramTypeQualifiers ( index );
+	}
+
 };
 
 } /* namespace abstraction */
diff --git a/alib2abstraction/src/abstraction/OperationAbstraction.hpp b/alib2abstraction/src/abstraction/OperationAbstraction.hpp
index 491a4ae2639cc076a96293d0d8bc791fa8dcc1e8..9ab0e32e4866ff87eff4adde5e783aa5bec05dd6 100644
--- a/alib2abstraction/src/abstraction/OperationAbstraction.hpp
+++ b/alib2abstraction/src/abstraction/OperationAbstraction.hpp
@@ -11,6 +11,9 @@
 #include <alib/memory>
 #include <alib/string>
 #include <alib/typeindex>
+#include <alib/set>
+
+#include <common/ParamQualifiers.hpp>
 
 namespace abstraction {
 
@@ -38,10 +41,14 @@ public:
 		return ext::to_string ( getParamTypeIndex ( index ) );
 	}
 
+	virtual ext::set < abstraction::ParamQualifiers::ParamQualifier > getParamTypeQualifiers ( unsigned index ) const = 0;
+
 	std::string getReturnType ( ) const {
 		return ext::to_string ( getReturnTypeIndex ( ) );
 	}
 
+	virtual ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const = 0;
+
 	virtual std::shared_ptr < abstraction::OperationAbstraction > getProxyAbstraction ( ) {
 		return shared_from_this();
 	}
diff --git a/alib2abstraction/src/abstraction/PackingAbstraction.hpp b/alib2abstraction/src/abstraction/PackingAbstraction.hpp
index 37abbd7a2bf6bbe478cca459e6acb67f37facbad..0a481c28d30e309f8f070fcda12c49609235b0bd 100644
--- a/alib2abstraction/src/abstraction/PackingAbstraction.hpp
+++ b/alib2abstraction/src/abstraction/PackingAbstraction.hpp
@@ -105,10 +105,18 @@ public:
 		return m_abstractions [ m_connections.at ( index ) [ 0 ].targetId ]->getParamTypeIndex ( m_connections.at ( index ) [ 0 ].paramPosition );
 	}
 
+	virtual ext::set < abstraction::ParamQualifiers::ParamQualifier > getParamTypeQualifiers ( unsigned index ) const override {
+		return m_abstractions [ m_connections.at ( index ) [ 0 ].targetId ]->getParamTypeQualifiers ( m_connections.at ( index ) [ 0 ].paramPosition );
+	}
+
 	virtual ext::type_index getReturnTypeIndex ( ) const override {
 		return m_abstractions [ m_resultId ]->getReturnTypeIndex ( );
 	}
 
+	virtual ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const override {
+		return m_abstractions [ m_resultId ]->getReturnTypeQualifiers ( );
+	}
+
 	virtual std::shared_ptr < abstraction::OperationAbstraction > getProxyAbstraction ( ) override {
 		return m_abstractions [ m_resultId ]->getProxyAbstraction ( );
 	}
diff --git a/alib2abstraction/src/abstraction/ValueOperationAbstraction.hpp b/alib2abstraction/src/abstraction/ValueOperationAbstraction.hpp
index 2eac4cb4555ddf6e83b5c87476df61fc7050e049..af752aab1fe47375e7954cfceb1d1873c7304b5b 100644
--- a/alib2abstraction/src/abstraction/ValueOperationAbstraction.hpp
+++ b/alib2abstraction/src/abstraction/ValueOperationAbstraction.hpp
@@ -15,6 +15,7 @@
 #include <abstraction/OperationAbstraction.hpp>
 #include <abstraction/ValueProvider.hpp>
 
+#include <common/ParamQualifiers.hpp>
 #include <common/AbstractionHelpers.hpp>
 
 namespace abstraction {
@@ -58,6 +59,10 @@ public:
 		return ext::type_index ( typeid ( ReturnType ) );
 	}
 
+	ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const override {
+		return abstraction::ParamQualifiers::paramQualifiers < ReturnType > ( );
+	}
+
 	virtual bool cached ( ) const override {
 		return ( bool ) m_data;
 	}
@@ -103,6 +108,10 @@ public:
 		return ext::type_index ( typeid ( ReturnType ) );
 	}
 
+	ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const override {
+		return abstraction::ParamQualifiers::paramQualifiers < const ReturnType > ( );
+	}
+
 	virtual bool cached ( ) const override {
 		return ( bool ) m_data;
 	}
@@ -148,6 +157,10 @@ public:
 		return ext::type_index ( typeid ( ReturnType ) );
 	}
 
+	ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const override {
+		return abstraction::ParamQualifiers::paramQualifiers < ReturnType & > ( );
+	}
+
 	virtual bool cached ( ) const override {
 		return ( bool ) m_data;
 	}
@@ -193,6 +206,10 @@ public:
 		return ext::type_index ( typeid ( ReturnType ) );
 	}
 
+	ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const override {
+		return abstraction::ParamQualifiers::paramQualifiers < const ReturnType & > ( );
+	}
+
 	virtual bool cached ( ) const override {
 		return ( bool ) m_data;
 	}
@@ -240,6 +257,10 @@ public:
 		return ext::type_index ( typeid ( ReturnType ) );
 	}
 
+	ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const override {
+		return abstraction::ParamQualifiers::paramQualifiers < ReturnType && > ( );
+	}
+
 	virtual bool cached ( ) const override {
 		return ( bool ) m_data;
 	}
@@ -287,6 +308,10 @@ public:
 		return ext::type_index ( typeid ( ReturnType ) );
 	}
 
+	ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const override {
+		return abstraction::ParamQualifiers::paramQualifiers < const ReturnType && > ( );
+	}
+
 	virtual bool cached ( ) const override {
 		return ( bool ) m_data;
 	}
@@ -308,6 +333,10 @@ public:
 		return ext::type_index ( typeid ( void ) );
 	}
 
+	ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const override {
+		return abstraction::ParamQualifiers::paramQualifiers < void > ( );
+	}
+
 	virtual bool cached ( ) const override {
 		return false;
 	}
diff --git a/alib2abstraction/src/abstraction/WrapperAbstraction.hpp b/alib2abstraction/src/abstraction/WrapperAbstraction.hpp
index 0b2fc58e7c34cbe78b2f8137f08c77a3087102b8..f48c4a38adc974bd37db36d3c55cbcb859286d05 100644
--- a/alib2abstraction/src/abstraction/WrapperAbstraction.hpp
+++ b/alib2abstraction/src/abstraction/WrapperAbstraction.hpp
@@ -96,6 +96,10 @@ public:
 		return ParamType < ParamTypes ... >::paramType ( index );
 	}
 
+	virtual ext::set < abstraction::ParamQualifiers::ParamQualifier > getParamTypeQualifiers ( unsigned index ) const override {
+		return ParamType < ParamTypes ... >::paramTypeQualifiers ( index );
+	}
+
 	virtual std::shared_ptr < abstraction::OperationAbstraction > getProxyAbstraction ( ) override {
 		if ( this->cached ( ) )
 			return this->m_abstraction->getProxyAbstraction ( );
@@ -133,6 +137,10 @@ public:
 		return ext::type_index ( typeid ( ReturnType ) );
 	}
 
+	virtual ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const override {
+		return abstraction::ParamQualifiers::paramQualifiers < ReturnType > ( );
+	}
+
 };
 
 template < class ... ParamTypes >
@@ -156,6 +164,13 @@ public:
 			throw std::domain_error ( "Return type unknown before evaluation." );
 	}
 
+	virtual ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const override {
+		if ( this->cached ( ) )
+			return this->m_abstraction->getProxyAbstraction ( )->getReturnTypeQualifiers ( );
+		else
+			throw std::domain_error ( "Return type qualifiers unknown before evaluation." );
+	}
+
 };
 
 } /* namespace abstraction */
diff --git a/alib2abstraction/src/common/AbstractionHelpers.hpp b/alib2abstraction/src/common/AbstractionHelpers.hpp
index 25ce77edbf0954111b4a52d0a1aedffe6d9253ed..15a766012371bcf052d78c62274da1dae29ae120 100644
--- a/alib2abstraction/src/common/AbstractionHelpers.hpp
+++ b/alib2abstraction/src/common/AbstractionHelpers.hpp
@@ -62,6 +62,10 @@ struct ParamType < > {
 	static ext::type_index paramType ( unsigned ) {
 		throw std::logic_error ( "Out of types to check" );
 	}
+
+	static ext::set < abstraction::ParamQualifiers::ParamQualifier > paramTypeQualifiers ( unsigned ) {
+		throw std::logic_error ( "Out of types to check" );
+	}
 };
 
 template < class Param, class ... Params >
@@ -70,7 +74,14 @@ struct ParamType < Param, Params ... > {
 		if ( index == 0 )
 			return ext::type_index ( typeid ( Param ) );
 		else
-			return ParamType < Params ... >::paramType ( index - 1);
+			return ParamType < Params ... >::paramType ( index - 1 );
+	}
+
+	static ext::set < abstraction::ParamQualifiers::ParamQualifier > paramTypeQualifiers ( unsigned index ) {
+		if ( index == 0 )
+			return abstraction::ParamQualifiers::paramQualifiers < Param > ( );
+		else
+			return ParamType < Params ... >::paramTypeQualifiers ( index - 1 );
 	}
 };
 
diff --git a/alib2abstraction/src/common/AlgorithmHelper.cpp b/alib2abstraction/src/common/AlgorithmHelper.cpp
index 053452984fd570938f347a34bfe8d60f57668750..c0d5bc45a9c743f2e6ea3a43036e1478e7904f3b 100644
--- a/alib2abstraction/src/common/AlgorithmHelper.cpp
+++ b/alib2abstraction/src/common/AlgorithmHelper.cpp
@@ -14,10 +14,13 @@ namespace abstraction {
 
 std::shared_ptr < abstraction::OperationAbstraction > AlgorithmHelper::eval ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::shared_ptr < abstraction::OperationAbstraction > > & params, std::vector < bool > & moves, AlgorithmCategories::AlgorithmCategory category ) {
 	ext::vector < std::string > paramTypes;
-	for ( const std::shared_ptr < abstraction::OperationAbstraction > & param : params )
+	ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > paramTypeQualifiers;
+	for ( const std::shared_ptr < abstraction::OperationAbstraction > & param : params ) {
 		paramTypes.push_back ( param->getReturnType ( ) );
+		paramTypeQualifiers.push_back ( param->getReturnTypeQualifiers ( ) );
+	}
 
-	std::shared_ptr < abstraction::OperationAbstraction > algo = abstraction::Registry::getAlgorithmAbstraction ( name, templateParams, paramTypes, category );
+	std::shared_ptr < abstraction::OperationAbstraction > algo = abstraction::Registry::getAlgorithmAbstraction ( name, templateParams, paramTypes, paramTypeQualifiers, category );
 
 	unsigned i = 0;
 	ext::vector < std::shared_ptr < abstraction::OperationAbstraction > > casted_params;
diff --git a/alib2abstraction/src/registry/AlgorithmRegistry.cpp b/alib2abstraction/src/registry/AlgorithmRegistry.cpp
index 983d80facf9e542d925c233a76273120da0f99c9..6b2c3b6a9710bd483bd40f60ea7bcc2b3874d4d7 100644
--- a/alib2abstraction/src/registry/AlgorithmRegistry.cpp
+++ b/alib2abstraction/src/registry/AlgorithmRegistry.cpp
@@ -86,7 +86,7 @@ ext::map < ext::pair < std::string, ext::vector < std::string > >, ext::list < s
 	return group;
 }
 
-std::shared_ptr < abstraction::OperationAbstraction > AlgorithmRegistry::getAbstraction ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::string > & paramTypes, AlgorithmCategories::AlgorithmCategory ) {
+std::shared_ptr < abstraction::OperationAbstraction > AlgorithmRegistry::getAbstraction ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::string > & paramTypes, const ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > &, AlgorithmCategories::AlgorithmCategory ) {
 	auto group = findAbstractionGroup ( name, templateParams );
 
 	auto incompatibleLambda = [ ] ( MatchType compatibility ) {
diff --git a/alib2abstraction/src/registry/AlgorithmRegistry.hpp b/alib2abstraction/src/registry/AlgorithmRegistry.hpp
index bb704e65e7e74beb4138b6763ed5f6b315542da9..627833a726c44f867540d9f733c3227a7316fcd2 100644
--- a/alib2abstraction/src/registry/AlgorithmRegistry.hpp
+++ b/alib2abstraction/src/registry/AlgorithmRegistry.hpp
@@ -302,7 +302,7 @@ public:
 		registerInternal ( std::move ( algorithm ), std::move ( templateParams ), std::make_shared < WrapperImpl < ReturnType, ParamTypes ... > > ( category, std::move ( params ), std::move ( parameterNames ), std::move ( result ), callback ) );
 	}
 
-	static std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::string > & paramTypes, AlgorithmCategories::AlgorithmCategory category );
+	static std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::string > & paramTypes, const ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > & paramQualifiers, AlgorithmCategories::AlgorithmCategory category );
 
 	static ext::set < ext::pair < std::string, ext::vector < std::string > > > listGroup ( const std::string & group );
 
diff --git a/alib2abstraction/src/registry/Registry.cpp b/alib2abstraction/src/registry/Registry.cpp
index 7bc204e2f557c5170a82d309b5dd4cf142bbbe3a..7dcd2032c8a3406792c2aed77453f71b52de0314 100644
--- a/alib2abstraction/src/registry/Registry.cpp
+++ b/alib2abstraction/src/registry/Registry.cpp
@@ -44,8 +44,8 @@ std::shared_ptr < abstraction::OperationAbstraction > Registry::getContainerAbst
 	return ContainerRegistry::getAbstraction ( container, type );
 }
 
-std::shared_ptr < abstraction::OperationAbstraction > Registry::getAlgorithmAbstraction ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::string > & paramTypes, AlgorithmCategories::AlgorithmCategory category ) {
-	return AlgorithmRegistry::getAbstraction ( name, templateParams, paramTypes, category );
+std::shared_ptr < abstraction::OperationAbstraction > Registry::getAlgorithmAbstraction ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::string > & paramTypes, const ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > & paramQualifiers, AlgorithmCategories::AlgorithmCategory category ) {
+	return AlgorithmRegistry::getAbstraction ( name, templateParams, paramTypes, paramQualifiers, category );
 }
 
 std::shared_ptr < abstraction::OperationAbstraction > Registry::getCastAbstraction ( const std::string & target, const std::string & param ) {
diff --git a/alib2abstraction/src/registry/Registry.h b/alib2abstraction/src/registry/Registry.h
index b759517436b37948d869f0c5bd21c004c54f985e..12f08c528049cc3b406bd3d2eb67683341cb128c 100644
--- a/alib2abstraction/src/registry/Registry.h
+++ b/alib2abstraction/src/registry/Registry.h
@@ -29,7 +29,7 @@ public:
 	static ext::set < ext::tuple < AlgorithmCategories::AlgorithmCategory, ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > > >, ext::vector < std::string >, std::string > > listOverloads ( const std::string & algorithm, const ext::vector < std::string > & templateParams );
 
 	static std::shared_ptr < abstraction::OperationAbstraction > getContainerAbstraction ( const std::string & container, const std::string & type );
-	static std::shared_ptr < abstraction::OperationAbstraction > getAlgorithmAbstraction ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::string > & paramTypes, AlgorithmCategories::AlgorithmCategory );
+	static std::shared_ptr < abstraction::OperationAbstraction > getAlgorithmAbstraction ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::string > & paramTypes, const ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > & paramQualifiers, AlgorithmCategories::AlgorithmCategory );
 	static std::shared_ptr < abstraction::OperationAbstraction > getCastAbstraction ( const std::string & target, const std::string & param );
 	static bool isCastNoOp ( const std::string & target, const std::string & param );
 	static std::shared_ptr < abstraction::OperationAbstraction > getImmediateAbstraction ( const std::string & result, std::string value );
diff --git a/alib2cli/src/registration/InputFileTypeRegistration.cpp b/alib2cli/src/registration/InputFileTypeRegistration.cpp
index 26af7813f7716451c1203677278bced0cc219e3a..01fe22bec60620fab0f6cdbbf095bf00733e3b59 100644
--- a/alib2cli/src/registration/InputFileTypeRegistration.cpp
+++ b/alib2cli/src/registration/InputFileTypeRegistration.cpp
@@ -51,8 +51,9 @@ namespace {
 		ext::vector < std::string > templateParams;
 		ext::vector < std::string > paramTypes { ext::to_string < std::string > ( ) };
 		abstraction::AlgorithmCategories::AlgorithmCategory category = abstraction::AlgorithmCategories::AlgorithmCategory::NONE;
+		ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > paramTypeQualifiers { abstraction::ParamQualifiers::paramQualifiers < const std::string & > ( ) };
 
-		return abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::ReadFile", templateParams, paramTypes, category );
+		return abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::ReadFile", templateParams, paramTypes, paramTypeQualifiers, category );
 	}
 
 auto xmlInputFileHandler = registration::InputFileRegister ( "xml", dummy );
diff --git a/alib2cli/src/registration/OutputFileTypeRegistration.cpp b/alib2cli/src/registration/OutputFileTypeRegistration.cpp
index 50277ab395f48056033fba6485871a93ccbf6472..56eb9d66667afca364542312101af51abb6b1470 100644
--- a/alib2cli/src/registration/OutputFileTypeRegistration.cpp
+++ b/alib2cli/src/registration/OutputFileTypeRegistration.cpp
@@ -31,8 +31,9 @@ namespace {
 		ext::vector < std::string > templateParams;
 		ext::vector < std::string > paramTypes { ext::to_string < std::string > ( ), ext::to_string < std::string > ( ) };
 		abstraction::AlgorithmCategories::AlgorithmCategory category = abstraction::AlgorithmCategories::AlgorithmCategory::NONE;
+		ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > paramTypeQualifiers { abstraction::ParamQualifiers::paramQualifiers < const std::string & > ( ), abstraction::ParamQualifiers::paramQualifiers < const std::string & > ( ) };
 
-		return abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::WriteFile", templateParams, paramTypes, category );
+		return abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::WriteFile", templateParams, paramTypes, paramTypeQualifiers, category );
 	}
 
 auto xmlOutputFileHandler = registration::OutputFileRegister ( "xml", dummy );
diff --git a/alib2raw_cli_integration/src/InputFileTypeRegistration.cpp b/alib2raw_cli_integration/src/InputFileTypeRegistration.cpp
index cefbbc483be3ed0f175e66f9edc6f3161468a9d8..cbd4faf4c9c6efc0c723312712b7778a189e0d80 100644
--- a/alib2raw_cli_integration/src/InputFileTypeRegistration.cpp
+++ b/alib2raw_cli_integration/src/InputFileTypeRegistration.cpp
@@ -15,8 +15,9 @@ namespace {
 		ext::vector < std::string > templateParams;
 		ext::vector < std::string > paramTypes { ext::to_string < std::string > ( ) };
 		abstraction::AlgorithmCategories::AlgorithmCategory category = abstraction::AlgorithmCategories::AlgorithmCategory::NONE;
+		ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > paramTypeQualifiers { abstraction::ParamQualifiers::paramQualifiers < const std::string & > ( ) };
 
-		abstractions.push_back ( abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::ReadFile", templateParams, paramTypes, category ) );
+		abstractions.push_back ( abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::ReadFile", templateParams, paramTypes, paramTypeQualifiers, category ) );
 
 		auto rawParserAbstractionFinder = [ = ] ( const std::string & ) {
 			return abstraction::RawReaderRegistry::getAbstraction ( typehint );
diff --git a/alib2raw_cli_integration/src/OutputFileTypeRegistration.cpp b/alib2raw_cli_integration/src/OutputFileTypeRegistration.cpp
index 096fc0b6dcf7bd630eca9de4ce0ab34ea4f23178..668c59300a95a8d9133f9d009c20fcff309a004b 100644
--- a/alib2raw_cli_integration/src/OutputFileTypeRegistration.cpp
+++ b/alib2raw_cli_integration/src/OutputFileTypeRegistration.cpp
@@ -18,8 +18,9 @@ namespace {
 		ext::vector < std::string > templateParams;
 		ext::vector < std::string > paramTypes { ext::to_string < std::string > ( ), ext::to_string < std::string > ( ) };
 		abstraction::AlgorithmCategories::AlgorithmCategory category = abstraction::AlgorithmCategories::AlgorithmCategory::NONE;
+		ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > paramTypeQualifiers { abstraction::ParamQualifiers::paramQualifiers < const std::string & > ( ), abstraction::ParamQualifiers::paramQualifiers < const std::string & > ( ) };
 
-		abstractions.push_back ( abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::WriteFile", templateParams, paramTypes, category ) );
+		abstractions.push_back ( abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::WriteFile", templateParams, paramTypes, paramTypeQualifiers, category ) );
 
 		std::shared_ptr < abstraction::PackingAbstraction < 2 > > res = std::make_shared < abstraction::PackingAbstraction < 2 > > ( std::move ( abstractions ), 1 );
 		res->setInnerConnection ( 0, 1, 1, true );
diff --git a/alib2str_cli_integration/src/InputFileTypeRegistration.cpp b/alib2str_cli_integration/src/InputFileTypeRegistration.cpp
index 77acaad93afe1a754d6da684fef1e614c2c03c3c..b6eed2f0239bd2a64874243e4bfe8f4867afd09f 100644
--- a/alib2str_cli_integration/src/InputFileTypeRegistration.cpp
+++ b/alib2str_cli_integration/src/InputFileTypeRegistration.cpp
@@ -15,8 +15,9 @@ namespace {
 		ext::vector < std::string > templateParams;
 		ext::vector < std::string > paramTypes { ext::to_string < std::string > ( ) };
 		abstraction::AlgorithmCategories::AlgorithmCategory category = abstraction::AlgorithmCategories::AlgorithmCategory::NONE;
+		ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > paramTypeQualifiers { abstraction::ParamQualifiers::paramQualifiers < const std::string & > ( ) };
 
-		abstractions.push_back ( abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::ReadFile", templateParams, paramTypes, category ) );
+		abstractions.push_back ( abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::ReadFile", templateParams, paramTypes, paramTypeQualifiers, category ) );
 
 		auto stringParserAbstractionFinder = [ = ] ( const std::string & data ) {
 			return abstraction::StringReaderRegistry::getAbstraction ( typehint, data );
diff --git a/alib2str_cli_integration/src/OutputFileTypeRegistration.cpp b/alib2str_cli_integration/src/OutputFileTypeRegistration.cpp
index a7e427e7a00043af1e4fc23fd178c41e01d164e7..1b32d896488582454a389d0d7340dcecb0bd7876 100644
--- a/alib2str_cli_integration/src/OutputFileTypeRegistration.cpp
+++ b/alib2str_cli_integration/src/OutputFileTypeRegistration.cpp
@@ -18,8 +18,9 @@ namespace {
 		ext::vector < std::string > templateParams;
 		ext::vector < std::string > paramTypes { ext::to_string < std::string > ( ), ext::to_string < std::string > ( ) };
 		abstraction::AlgorithmCategories::AlgorithmCategory category = abstraction::AlgorithmCategories::AlgorithmCategory::NONE;
+		ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > paramTypeQualifiers { abstraction::ParamQualifiers::paramQualifiers < const std::string & > ( ), abstraction::ParamQualifiers::paramQualifiers < const std::string & > ( ) };
 
-		abstractions.push_back ( abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::WriteFile", templateParams, paramTypes, category ) );
+		abstractions.push_back ( abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::WriteFile", templateParams, paramTypes, paramTypeQualifiers, category ) );
 
 		std::shared_ptr < abstraction::PackingAbstraction < 2 > > res = std::make_shared < abstraction::PackingAbstraction < 2 > > ( std::move ( abstractions ), 1 );
 		res->setInnerConnection ( 0, 1, 1, true );