diff --git a/src/storage/expressions/ExprtkExpressionEvaluator.cpp b/src/storage/expressions/ExprtkExpressionEvaluator.cpp
old mode 100644
new mode 100755
index 4e79a8dc0..1d225ec12
--- a/src/storage/expressions/ExprtkExpressionEvaluator.cpp
+++ b/src/storage/expressions/ExprtkExpressionEvaluator.cpp
@@ -23,10 +23,10 @@ namespace storm {
         
         template<typename RationalType>
         bool ExprtkExpressionEvaluatorBase<RationalType>::asBool(Expression const& expression) const {
-            BaseExpression const* expressionPtr = expression.getBaseExpressionPointer().get();
-            auto const& expressionPair = this->compiledExpressions.find(expression.getBaseExpressionPointer().get());
+            std::shared_ptr<BaseExpression const> expressionPtr = expression.getBaseExpressionPointer();
+            auto const& expressionPair = this->compiledExpressions.find(expression.getBaseExpressionPointer());
             if (expressionPair == this->compiledExpressions.end()) {
-                CompiledExpressionType const& compiledExpression = this->getCompiledExpression(expressionPtr);
+                CompiledExpressionType const& compiledExpression = this->getCompiledExpression(expression);
                 return compiledExpression.value() == ValueType(1);
             }
             return expressionPair->second.value() == ValueType(1);
@@ -34,22 +34,22 @@ namespace storm {
         
         template<typename RationalType>
         int_fast64_t ExprtkExpressionEvaluatorBase<RationalType>::asInt(Expression const& expression) const {
-            BaseExpression const* expressionPtr = expression.getBaseExpressionPointer().get();
-            auto const& expressionPair = this->compiledExpressions.find(expression.getBaseExpressionPointer().get());
+            std::shared_ptr<BaseExpression const> expressionPtr = expression.getBaseExpressionPointer();
+            auto const& expressionPair = this->compiledExpressions.find(expression.getBaseExpressionPointer());
             if (expressionPair == this->compiledExpressions.end()) {
-                CompiledExpressionType const& compiledExpression = this->getCompiledExpression(expressionPtr);
+                CompiledExpressionType const& compiledExpression = this->getCompiledExpression(expression);
                 return static_cast<int_fast64_t>(compiledExpression.value());
             }
             return static_cast<int_fast64_t>(expressionPair->second.value());
         }
         
         template<typename RationalType>
-        typename ExprtkExpressionEvaluatorBase<RationalType>::CompiledExpressionType& ExprtkExpressionEvaluatorBase<RationalType>::getCompiledExpression(BaseExpression const* expression) const {
-            std::pair<CacheType::iterator, bool> result = this->compiledExpressions.emplace(expression, CompiledExpressionType());
+        typename ExprtkExpressionEvaluatorBase<RationalType>::CompiledExpressionType& ExprtkExpressionEvaluatorBase<RationalType>::getCompiledExpression(storm::expressions::Expression const& expression) const {
+            std::pair<CacheType::iterator, bool> result = this->compiledExpressions.emplace(expression.getBaseExpressionPointer(), CompiledExpressionType());
             CompiledExpressionType& compiledExpression = result.first->second;
             compiledExpression.register_symbol_table(symbolTable);
             bool parsingOk = parser.compile(ToExprtkStringVisitor().toString(expression), compiledExpression);
-            STORM_LOG_ASSERT(parsingOk, "Expression was not properly parsed by ExprTk: " << *expression);
+            STORM_LOG_ASSERT(parsingOk, "Expression was not properly parsed by ExprTk: " << expression);
             return compiledExpression;
         }
         
@@ -73,10 +73,10 @@ namespace storm {
         }
         
         double ExprtkExpressionEvaluator::asRational(Expression const& expression) const {
-            BaseExpression const* expressionPtr = expression.getBaseExpressionPointer().get();
-            auto const& expressionPair = this->compiledExpressions.find(expression.getBaseExpressionPointer().get());
+            std::shared_ptr<BaseExpression const> expressionPtr = expression.getBaseExpressionPointer();
+            auto const& expressionPair = this->compiledExpressions.find(expression.getBaseExpressionPointer());
             if (expressionPair == this->compiledExpressions.end()) {
-                CompiledExpressionType const& compiledExpression = this->getCompiledExpression(expressionPtr);
+                CompiledExpressionType const& compiledExpression = this->getCompiledExpression(expression);
                 return static_cast<double>(compiledExpression.value());
             }
             return static_cast<double>(expressionPair->second.value());
diff --git a/src/storage/expressions/ExprtkExpressionEvaluator.h b/src/storage/expressions/ExprtkExpressionEvaluator.h
old mode 100644
new mode 100755
index 77fc94993..2ae6800ba
--- a/src/storage/expressions/ExprtkExpressionEvaluator.h
+++ b/src/storage/expressions/ExprtkExpressionEvaluator.h
@@ -1,6 +1,7 @@
 #ifndef STORM_STORAGE_EXPRESSIONS_EXPRTKEXPRESSIONEVALUATOR_H_
 #define STORM_STORAGE_EXPRESSIONS_EXPRTKEXPRESSIONEVALUATOR_H_
 
+#include <memory>
 #include <unordered_map>
 #include <vector>
 
@@ -26,14 +27,14 @@ namespace storm {
         protected:
             typedef double ValueType;
             typedef exprtk::expression<ValueType> CompiledExpressionType;
-            typedef std::unordered_map<BaseExpression const*, CompiledExpressionType> CacheType;
+            typedef std::unordered_map<std::shared_ptr<BaseExpression const>, CompiledExpressionType> CacheType;
             
             /*!
              * Adds a compiled version of the given expression to the internal storage.
              *
              * @param expression The expression that is to be compiled.
              */
-            CompiledExpressionType& getCompiledExpression(BaseExpression const* expression) const;
+            CompiledExpressionType& getCompiledExpression(storm::expressions::Expression const& expression) const;
             
             // The parser used.
             mutable exprtk::parser<ValueType> parser;