diff --git a/alib2abstraction/src/abstraction/ValueHolderInterface.hpp b/alib2abstraction/src/abstraction/ValueHolderInterface.hpp
index 9a94ce2effca62062c40ebf64b5a38e1548c0900..4c35df1cdb0a943b270504c2d1efe40bad500a05 100644
--- a/alib2abstraction/src/abstraction/ValueHolderInterface.hpp
+++ b/alib2abstraction/src/abstraction/ValueHolderInterface.hpp
@@ -55,7 +55,7 @@ ParamType retrieveValue ( const std::shared_ptr < abstraction::Value > & param,
 	(void) move;
 	using Type = std::decay_t < ParamType >;
 
-	std::shared_ptr < ValueHolderInterface < std::decay_t < Type > > > interface = std::dynamic_pointer_cast < ValueHolderInterface < std::decay_t < Type > > > ( param->getProxyAbstraction ( ) );
+	std::shared_ptr < ValueHolderInterface < Type > > interface = std::dynamic_pointer_cast < ValueHolderInterface < Type > > ( param->getProxyAbstraction ( ) );
 	if ( ! interface )
 		throw std::invalid_argument ( "Abstraction does not provide value of type " + ext::to_string < ParamType > ( ) + " but " + param->getType ( ) + "." );
 
@@ -80,14 +80,14 @@ ParamType retrieveValue ( const std::shared_ptr < abstraction::Value > & param,
 			return res;
 		}
 	} else if constexpr ( std::is_copy_constructible_v < Type > && ! std::is_move_constructible_v < Type > ) {
-		if ( ! interface->isConst ( ) && move )
+		if ( ! interface->isConst ( ) && ( move || interface->isTemporary ( ) ) )
 			throw std::domain_error ( "Value not move constructible" );
 		else {
 			Type && res = interface->getValue ( );
 			return res;
 		}
 	} else if constexpr ( ! std::is_copy_constructible_v < Type > && std::is_move_constructible_v < Type > ) {
-		if ( ! interface->isConst ( ) && move )
+		if ( ! interface->isConst ( ) && ( move || interface->isTemporary ( ) ) )
 			return std::move ( interface->getValue ( ) );
 		else
 			throw std::domain_error ( "Value not copy constructible" );
diff --git a/alib2cli/src/ast/statements/ResultVariableStatement.h b/alib2cli/src/ast/statements/ResultVariableStatement.h
index cd623aa24cebe237f1de9e101d9ac5b06ab079ca..461662bd871225f1571c95ab6beab5314a7fa2c7 100644
--- a/alib2cli/src/ast/statements/ResultVariableStatement.h
+++ b/alib2cli/src/ast/statements/ResultVariableStatement.h
@@ -13,7 +13,7 @@ public:
 	}
 
 	std::shared_ptr < abstraction::Value > translateAndEval ( const std::shared_ptr < abstraction::Value > & prev, Environment & environment ) const override {
-		std::shared_ptr < abstraction::Value > res = prev->clone ( nullptr, abstraction::ParamQualifiers::ParamQualifierSet::NONE, false, true );
+		std::shared_ptr < abstraction::Value > res = prev->clone ( nullptr, abstraction::ParamQualifiers::ParamQualifierSet::NONE, false, false );
 		environment.setVariable ( m_name->eval ( environment ), res );
 		return res;
 	}