diff --git a/alib2abstraction/src/abstraction/ValueHolderInterface.hpp b/alib2abstraction/src/abstraction/ValueHolderInterface.hpp
index 4c35df1cdb0a943b270504c2d1efe40bad500a05..b0a0a82500af199361ff08c788ad4e295b7bd3b3 100644
--- a/alib2abstraction/src/abstraction/ValueHolderInterface.hpp
+++ b/alib2abstraction/src/abstraction/ValueHolderInterface.hpp
@@ -19,6 +19,10 @@ class ValueHolderInterface : public Value {
 
 protected:
 	ValueHolderInterface ( const std::shared_ptr < abstraction::OperationAbstraction > & ref, ParamQualifiers::ParamQualifierSet paramQualifierSet, bool isTemporary ) : Value ( ref ), m_paramQualifierSet ( paramQualifierSet ), m_isTemporary ( isTemporary ) {
+		if ( this->isLvalueRef ( ) && this->isTemporary ( ) )
+			throw std::domain_error ( "Lvalue references cannot be a temporarie." );
+		if ( this->isLvalueRef ( ) && this->isRvalueRef ( ) )
+			throw std::domain_error ( "A reference cannot be both, rvalue and lvalue." );
 	}
 
 public:
diff --git a/alib2abstraction/src/abstraction/ValueOperationAbstraction.hpp b/alib2abstraction/src/abstraction/ValueOperationAbstraction.hpp
index b209b5cc9dd30d0b77cf126f87e885543b03a63a..347d08a7b391ac680c2b7eaa8f85b01ac4821c90 100644
--- a/alib2abstraction/src/abstraction/ValueOperationAbstraction.hpp
+++ b/alib2abstraction/src/abstraction/ValueOperationAbstraction.hpp
@@ -23,7 +23,7 @@ class ValueOperationAbstraction : virtual public OperationAbstraction {
 public:
 	template < typename ... ParamTypes, typename Callable >
 	inline std::shared_ptr < abstraction::Value > run_helper ( Callable callback, const ext::array < std::pair < std::shared_ptr < abstraction::Value >, bool >, sizeof ... ( ParamTypes ) > & inputs ) {
-		return std::make_shared < abstraction::ValueHolder < ReturnType > > ( this->getProxyAbstraction ( ), abstraction::apply < ParamTypes ... > ( callback, inputs ), true );
+		return std::make_shared < abstraction::ValueHolder < ReturnType > > ( this->getProxyAbstraction ( ), abstraction::apply < ParamTypes ... > ( callback, inputs ), std::is_lvalue_reference_v < ReturnType > ? false : true );
 	}
 
 	abstraction::ParamQualifiers::ParamQualifierSet getReturnTypeQualifiers ( ) const override {
diff --git a/alib2cli/src/ast/statements/ResultPrintStatement.h b/alib2cli/src/ast/statements/ResultPrintStatement.h
index 30bc7f77a30fa0a4dab8a1dd97e092951fecb0bf..dc0636a8d3da59c770b2081784032490956b91d3 100644
--- a/alib2cli/src/ast/statements/ResultPrintStatement.h
+++ b/alib2cli/src/ast/statements/ResultPrintStatement.h
@@ -18,7 +18,7 @@ public:
 			return std::make_shared < abstraction::Void > ( nullptr );
 
 		res->attachInput ( prev, 0, false );
-		res->attachInput ( std::make_shared < abstraction::ValueHolder < std::ostream & > > ( nullptr, common::Streams::out, true ), 1, false );
+		res->attachInput ( std::make_shared < abstraction::ValueHolder < std::ostream & > > ( nullptr, common::Streams::out, false ), 1, false );
 		std::shared_ptr < abstraction::Value > result = res->eval ( );
 		if ( ! result )
 			throw std::invalid_argument ( "Eval of result print statement failed." );