diff --git a/src/storm/storage/SparseMatrix.cpp b/src/storm/storage/SparseMatrix.cpp
index 3f70b8f2a..42b762b64 100644
--- a/src/storm/storage/SparseMatrix.cpp
+++ b/src/storm/storage/SparseMatrix.cpp
@@ -1165,7 +1165,7 @@ namespace storm {
             
             return result;
         }
-        
+
         template<typename ValueType>
         void SparseMatrix<ValueType>::multiplyWithVector(std::vector<ValueType> const& vector, std::vector<ValueType>& result) const {
 #ifdef STORM_HAVE_INTELTBB
@@ -1178,59 +1178,60 @@ namespace storm {
             return multiplyWithVectorSequential(vector, result);
 #endif
         }
-        
+
         template<typename ValueType>
         void SparseMatrix<ValueType>::multiplyWithVectorSequential(std::vector<ValueType> const& vector, std::vector<ValueType>& result) const {
-            const_iterator it = this->begin();
-            const_iterator ite;
-            std::vector<index_type>::const_iterator rowIterator = rowIndications.begin();
-            typename std::vector<ValueType>::iterator resultIterator = result.begin();
-            typename std::vector<ValueType>::iterator resultIteratorEnd = result.end();
-            
-            // If the vector to multiply with and the target vector are actually the same, we need an auxiliary variable
-            // to store the intermediate result.
             if (&vector == &result) {
-                for (; resultIterator != resultIteratorEnd; ++rowIterator, ++resultIterator) {
-                    ValueType tmpValue = storm::utility::zero<ValueType>();
-                    
-                    for (ite = this->begin() + *(rowIterator + 1); it != ite; ++it) {
-                        tmpValue += it->getValue() * vector[it->getColumn()];
-                    }
-                    *resultIterator = tmpValue;
-                }
+                STORM_LOG_WARN("Matrix-vector-multiplication invoked but the target vector uses the same memory as the input vector. This requires to allocate auxiliary memory.");
+                std::vector<ValueType> tmpVector(this->getRowCount());
+                multiplyWithVectorSequential(vector, tmpVector);
+                result = std::move(tmpVector);
             } else {
+                const_iterator it = this->begin();
+                const_iterator ite;
+                std::vector<index_type>::const_iterator rowIterator = rowIndications.begin();
+                typename std::vector<ValueType>::iterator resultIterator = result.begin();
+                typename std::vector<ValueType>::iterator resultIteratorEnd = result.end();
+
                 for (; resultIterator != resultIteratorEnd; ++rowIterator, ++resultIterator) {
                     *resultIterator = storm::utility::zero<ValueType>();
-                    
+
                     for (ite = this->begin() + *(rowIterator + 1); it != ite; ++it) {
                         *resultIterator += it->getValue() * vector[it->getColumn()];
                     }
                 }
             }
         }
-        
+
 #ifdef STORM_HAVE_INTELTBB
         template<typename ValueType>
         void SparseMatrix<ValueType>::multiplyWithVectorParallel(std::vector<ValueType> const& vector, std::vector<ValueType>& result) const {
-            tbb::parallel_for(tbb::blocked_range<index_type>(0, result.size(), 10),
-                              [&] (tbb::blocked_range<index_type> const& range) {
-                                  index_type startRow = range.begin();
-                                  index_type endRow = range.end();
-                                  const_iterator it = this->begin(startRow);
-                                  const_iterator ite;
-                                  std::vector<index_type>::const_iterator rowIterator = this->rowIndications.begin() + startRow;
-                                  std::vector<index_type>::const_iterator rowIteratorEnd = this->rowIndications.begin() + endRow;
-                                  typename std::vector<ValueType>::iterator resultIterator = result.begin() + startRow;
-                                  typename std::vector<ValueType>::iterator resultIteratorEnd = result.begin() + endRow;
-                                  
-                                  for (; resultIterator != resultIteratorEnd; ++rowIterator, ++resultIterator) {
-                                      *resultIterator = storm::utility::zero<ValueType>();
-                                      
-                                      for (ite = this->begin() + *(rowIterator + 1); it != ite; ++it) {
-                                          *resultIterator += it->getValue() * vector[it->getColumn()];
+            if (&vector == &result) {
+                STORM_LOG_WARN("Matrix-vector-multiplication invoked but the target vector uses the same memory as the input vector. This requires to allocate auxiliary memory.");
+                std::vector<ValueType> tmpVector(this->getRowCount());
+                multiplyWithVectorParallel(vector, tmpVector);
+                result = std::move(tmpVector);
+            } else {
+                tbb::parallel_for(tbb::blocked_range<index_type>(0, result.size(), 10),
+                                  [&] (tbb::blocked_range<index_type> const& range) {
+                                      index_type startRow = range.begin();
+                                      index_type endRow = range.end();
+                                      const_iterator it = this->begin(startRow);
+                                      const_iterator ite;
+                                      std::vector<index_type>::const_iterator rowIterator = this->rowIndications.begin() + startRow;
+                                      std::vector<index_type>::const_iterator rowIteratorEnd = this->rowIndications.begin() + endRow;
+                                      typename std::vector<ValueType>::iterator resultIterator = result.begin() + startRow;
+                                      typename std::vector<ValueType>::iterator resultIteratorEnd = result.begin() + endRow;
+
+                                      for (; resultIterator != resultIteratorEnd; ++rowIterator, ++resultIterator) {
+                                          *resultIterator = storm::utility::zero<ValueType>();
+
+                                          for (ite = this->begin() + *(rowIterator + 1); it != ite; ++it) {
+                                              *resultIterator += it->getValue() * vector[it->getColumn()];
+                                          }
                                       }
-                                  }
-                              });
+                                  });
+            }
         }
 #endif