diff --git a/alib2abstraction/src/common/CastHelper.cpp b/alib2abstraction/src/common/CastHelper.cpp
index 997f4a4ac07d633c9619128e8cb5b300a926f6b5..2b7a87c058c1cbf76a3e4065b828e2c4596832b8 100644
--- a/alib2abstraction/src/common/CastHelper.cpp
+++ b/alib2abstraction/src/common/CastHelper.cpp
@@ -10,7 +10,8 @@ std::shared_ptr < abstraction::Value > CastHelper::eval ( abstraction::Temporari
 		return param;
 	}
 
-	std::shared_ptr < abstraction::OperationAbstraction > res = abstraction::Registry::getCastAbstraction ( type, param->getType ( ) );
+	std::unique_ptr < abstraction::OperationAbstraction > res = abstraction::Registry::getCastAbstraction ( type, param->getType ( ) );
+
 	res->attachInput ( param, 0 );
 
 	std::shared_ptr < abstraction::Value > result = res->eval ( );
@@ -18,7 +19,7 @@ std::shared_ptr < abstraction::Value > CastHelper::eval ( abstraction::Temporari
 		throw std::invalid_argument ( "Eval of cast to " + type + " failed." );
 
 	if ( abstraction::Registry::hasNormalize ( result->getType ( ) ) ) {
-		std::shared_ptr < abstraction::OperationAbstraction > normalize = abstraction::Registry::getNormalizeAbstraction ( result->getType ( ) );
+		std::unique_ptr < abstraction::OperationAbstraction > normalize = abstraction::Registry::getNormalizeAbstraction ( result->getType ( ) );
 		normalize->attachInput ( result, 0 );
 		result = normalize->eval ( );
 		if ( ! result )
diff --git a/alib2abstraction/src/common/EvalHelper.cpp b/alib2abstraction/src/common/EvalHelper.cpp
index b64517d993b4f86572704498301c523a8f2b8635..f12b2ff2e9ecef317d184e1220ad8bc60740cc9d 100644
--- a/alib2abstraction/src/common/EvalHelper.cpp
+++ b/alib2abstraction/src/common/EvalHelper.cpp
@@ -66,7 +66,7 @@ std::shared_ptr < abstraction::Value > EvalHelper::evalOperator ( abstraction::T
 	}
 }
 
-std::shared_ptr < abstraction::Value > EvalHelper::evalAbstraction ( abstraction::TemporariesHolder & environment, std::shared_ptr < abstraction::OperationAbstraction > abstraction, const ext::vector < std::shared_ptr < abstraction::Value > > & params ) {
+std::shared_ptr < abstraction::Value > EvalHelper::evalAbstraction ( abstraction::TemporariesHolder & environment, std::unique_ptr < abstraction::OperationAbstraction > abstraction, const ext::vector < std::shared_ptr < abstraction::Value > > & params ) {
 	unsigned i = 0;
 	ext::vector < std::shared_ptr < abstraction::Value > > casted_params;
 	for ( const std::shared_ptr < abstraction::Value > & param : params ) {
@@ -90,7 +90,7 @@ std::shared_ptr < abstraction::Value > EvalHelper::evalAbstraction ( abstraction
 		throw std::invalid_argument ( "Internal error in abstraction evaluation." );
 
 	if ( abstraction::Registry::hasNormalize ( result->getType ( ) ) ) {
-		std::shared_ptr < abstraction::OperationAbstraction > normalize = abstraction::Registry::getNormalizeAbstraction ( result->getType ( ) );
+		std::unique_ptr < abstraction::OperationAbstraction > normalize = abstraction::Registry::getNormalizeAbstraction ( result->getType ( ) );
 		normalize->attachInput ( result, 0 );
 		result = normalize->eval ( );
 		if ( ! result )
diff --git a/alib2abstraction/src/common/EvalHelper.h b/alib2abstraction/src/common/EvalHelper.h
index aaffe52d30773896efd4c72acf907e5328ed318c..1718686e30f836cedd8ead3c2c802c4681bcf176 100644
--- a/alib2abstraction/src/common/EvalHelper.h
+++ b/alib2abstraction/src/common/EvalHelper.h
@@ -11,7 +11,7 @@
 namespace abstraction {
 
 class EvalHelper {
-	static std::shared_ptr < abstraction::Value > evalAbstraction ( abstraction::TemporariesHolder & environment, std::shared_ptr < abstraction::OperationAbstraction > abstraction, const ext::vector < std::shared_ptr < abstraction::Value > > & params );
+	static std::shared_ptr < abstraction::Value > evalAbstraction ( abstraction::TemporariesHolder & environment, std::unique_ptr < abstraction::OperationAbstraction > abstraction, const ext::vector < std::shared_ptr < abstraction::Value > > & params );
 
 public:
 	static std::shared_ptr < abstraction::Value > evalAlgorithm ( abstraction::TemporariesHolder & environment, const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::shared_ptr < abstraction::Value > > & params, abstraction::AlgorithmCategories::AlgorithmCategory category );
diff --git a/alib2cli/src/ast/command/PrintCommand.cpp b/alib2cli/src/ast/command/PrintCommand.cpp
index 0e88a5c29119b22c8433380e9a2f3207586eae3c..ec8bff01766be9e0b461c54641d21396fadf3545 100644
--- a/alib2cli/src/ast/command/PrintCommand.cpp
+++ b/alib2cli/src/ast/command/PrintCommand.cpp
@@ -11,7 +11,7 @@ CommandResult PrintCommand::run ( Environment & environment ) const {
 	if ( value->getType ( ) == ext::to_string < void > ( ) )
 		throw std::invalid_argument ( "Printing void is not allowed." );
 
-	std::shared_ptr < abstraction::OperationAbstraction > res = abstraction::Registry::getValuePrinterAbstraction ( value->getType ( ) );
+	std::unique_ptr < abstraction::OperationAbstraction > res = abstraction::Registry::getValuePrinterAbstraction ( value->getType ( ) );
 
 	res->attachInput ( value, 0 );
 	res->attachInput ( std::make_shared < abstraction::ValueHolder < ext::ostream & > > ( common::Streams::out, false ), 1 );
diff --git a/alib2cli/src/ast/statements/ContainerStatement.cpp b/alib2cli/src/ast/statements/ContainerStatement.cpp
index e5baff087827e6e1b2a4734f140f9758a47a87c6..404464dad97ea838f59727d10a501439b817e833 100644
--- a/alib2cli/src/ast/statements/ContainerStatement.cpp
+++ b/alib2cli/src/ast/statements/ContainerStatement.cpp
@@ -19,7 +19,7 @@ std::shared_ptr < abstraction::Value > ContainerStatement::translateAndEval ( co
 		params.push_back ( param->translateAndEval ( prev, environment ) );
 	}
 
-	std::shared_ptr < abstraction::OperationAbstraction > algo = abstraction::Registry::getContainerAbstraction ( m_container, m_type->getType ( ) );
+	std::unique_ptr < abstraction::OperationAbstraction > algo = abstraction::Registry::getContainerAbstraction ( m_container, m_type->getType ( ) );
 
 	int i = 0;
 	ext::vector < std::shared_ptr < abstraction::Value > > casted_params;
diff --git a/alib2cli/src/ast/statements/FileStatement.cpp b/alib2cli/src/ast/statements/FileStatement.cpp
index 49fbfeddfb2488607c3aa461d8240464825734a7..b4935322ba67802611b4cce99258616f1fc63cd3 100644
--- a/alib2cli/src/ast/statements/FileStatement.cpp
+++ b/alib2cli/src/ast/statements/FileStatement.cpp
@@ -24,7 +24,7 @@ std::shared_ptr < abstraction::Value > FileStatement::translateAndEval ( const s
 		templateParams.push_back ( param->eval ( environment ) );
 	}
 
-	std::shared_ptr < abstraction::OperationAbstraction > res = abstraction::InputFileRegistry::getAbstraction ( filetype, type, templateParams );
+	std::unique_ptr < abstraction::OperationAbstraction > res = abstraction::InputFileRegistry::getAbstraction ( filetype, type, templateParams );
 
 	std::shared_ptr < abstraction::ValueHolder < std::string > > file = std::make_shared < abstraction::ValueHolder < std::string > > ( m_file->eval ( environment ), true );
 	res->attachInput ( file, 0 );
diff --git a/alib2cli/src/ast/statements/ResultFileStatement.h b/alib2cli/src/ast/statements/ResultFileStatement.h
index 9e7d4e013da517bb710b8858536be09720211ec8..e0dcae08a98c7eac7de98558f3eef143b8aa08bd 100644
--- a/alib2cli/src/ast/statements/ResultFileStatement.h
+++ b/alib2cli/src/ast/statements/ResultFileStatement.h
@@ -19,7 +19,7 @@ public:
 		if ( m_fileType )
 			filetype = m_fileType->eval ( environment );
 
-		std::shared_ptr < abstraction::OperationAbstraction > res = abstraction::OutputFileRegistry::getAbstraction ( filetype, prev->getType ( ) );
+		std::unique_ptr < abstraction::OperationAbstraction > res = abstraction::OutputFileRegistry::getAbstraction ( filetype, prev->getType ( ) );
 
 		std::shared_ptr < abstraction::ValueHolder < std::string > > file = std::make_shared < abstraction::ValueHolder < std::string > > ( m_file->eval ( environment ), true );
 		res->attachInput ( file, 0 );
diff --git a/alib2gui/src/Converter.cpp b/alib2gui/src/Converter.cpp
index e57f24386e7094976707c650ad5c19a12350af96..71acaa5ea7be6772140c0f56defbe33b8deddc20 100644
--- a/alib2gui/src/Converter.cpp
+++ b/alib2gui/src/Converter.cpp
@@ -93,7 +93,7 @@ namespace Converter {
             ext::deque<sax::Token> tokens;
             sax::SaxParseInterface::parseMemory(xml.toStdString(), tokens);
             std::string type = tokens[0].getData();
-            std::shared_ptr<abstraction::OperationAbstraction> automaton = abstraction::XmlRegistry::getXmlParserAbstraction(
+            std::unique_ptr<abstraction::OperationAbstraction> automaton = abstraction::XmlRegistry::getXmlParserAbstraction(
                     type);
 
             auto tokensAbstraction = std::make_shared<abstraction::ValueHolder<ext::deque<sax::Token>>>(std::move ( tokens ), true);