diff --git a/src/utility/solver.cpp b/src/utility/solver.cpp
index cae5bdb98..242078c9e 100644
--- a/src/utility/solver.cpp
+++ b/src/utility/solver.cpp
@@ -110,12 +110,22 @@ namespace storm {
             
             template<typename ValueType>
             std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> GmmxxLinearEquationSolverFactory<ValueType>::create(storm::storage::SparseMatrix<ValueType> const& matrix) const {
-                return std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>>(new storm::solver::GmmxxLinearEquationSolver<ValueType>(matrix));
+                return std::make_unique<storm::solver::GmmxxLinearEquationSolver<ValueType>>(matrix);
+            }
+
+            template<typename ValueType>
+            std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> GmmxxLinearEquationSolverFactory<ValueType>::create(storm::storage::SparseMatrix<ValueType>&& matrix) const {
+                return std::make_unique<storm::solver::GmmxxLinearEquationSolver<ValueType>>(std::move(matrix));
             }
 
             template<typename ValueType>
             std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> EigenLinearEquationSolverFactory<ValueType>::create(storm::storage::SparseMatrix<ValueType> const& matrix) const {
-                return std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>>(new storm::solver::EigenLinearEquationSolver<ValueType>(matrix));
+                return std::make_unique<storm::solver::EigenLinearEquationSolver<ValueType>>(matrix);
+            }
+
+            template<typename ValueType>
+            std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> EigenLinearEquationSolverFactory<ValueType>::create(storm::storage::SparseMatrix<ValueType>&& matrix) const {
+                return std::make_unique<storm::solver::EigenLinearEquationSolver<ValueType>>(std::move(matrix));
             }
             
             template<typename ValueType>
@@ -131,17 +141,21 @@ namespace storm {
                         this->method = storm::solver::NativeLinearEquationSolverSolutionMethod::SOR;
                         break;
                 }
-                omega = storm::settings::getModule<storm::settings::modules::NativeEquationSolverSettings>().getOmega();
             }
             
             template<typename ValueType>
-            NativeLinearEquationSolverFactory<ValueType>::NativeLinearEquationSolverFactory(typename storm::solver::NativeLinearEquationSolverSolutionMethod method, ValueType omega) : method(method), omega(omega) {
+            NativeLinearEquationSolverFactory<ValueType>::NativeLinearEquationSolverFactory(typename storm::solver::NativeLinearEquationSolverSolutionMethod method) : method(method) {
                 // Intentionally left empty.
             }
             
             template<typename ValueType>
             std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> NativeLinearEquationSolverFactory<ValueType>::create(storm::storage::SparseMatrix<ValueType> const& matrix) const {
-                return std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>>(new storm::solver::NativeLinearEquationSolver<ValueType>(matrix, method));
+                return std::make_unique<storm::solver::NativeLinearEquationSolver<ValueType>>(matrix, method);
+            }
+
+            template<typename ValueType>
+            std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> NativeLinearEquationSolverFactory<ValueType>::create(storm::storage::SparseMatrix<ValueType>&& matrix) const {
+                return std::make_unique<storm::solver::NativeLinearEquationSolver<ValueType>>(std::move(matrix), method);
             }
             
             template<typename ValueType>
diff --git a/src/utility/solver.h b/src/utility/solver.h
index bacc61e5e..a5fab02c7 100644
--- a/src/utility/solver.h
+++ b/src/utility/solver.h
@@ -136,25 +136,27 @@ namespace storm {
             class NativeLinearEquationSolverFactory : public LinearEquationSolverFactory<ValueType> {
             public:
                 NativeLinearEquationSolverFactory();
-                NativeLinearEquationSolverFactory(typename storm::solver::NativeLinearEquationSolverSolutionMethod method, ValueType omega);
+                NativeLinearEquationSolverFactory(storm::solver::NativeLinearEquationSolverSolutionMethod method);
                 
                 virtual std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> create(storm::storage::SparseMatrix<ValueType> const& matrix) const override;
+                virtual std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> create(storm::storage::SparseMatrix<ValueType>&& matrix) const override;
                 
             private:
-                typename storm::solver::NativeLinearEquationSolverSolutionMethod method;
-                ValueType omega;
+                storm::solver::NativeLinearEquationSolverSolutionMethod method;
             };
             
             template<typename ValueType>
             class GmmxxLinearEquationSolverFactory : public LinearEquationSolverFactory<ValueType> {
             public:
                 virtual std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> create(storm::storage::SparseMatrix<ValueType> const& matrix) const override;
+                virtual std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> create(storm::storage::SparseMatrix<ValueType>&& matrix) const override;
             };
             
             template<typename ValueType>
             class EigenLinearEquationSolverFactory : public LinearEquationSolverFactory<ValueType> {
             public:
                 virtual std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> create(storm::storage::SparseMatrix<ValueType> const& matrix) const override;
+                virtual std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> create(storm::storage::SparseMatrix<ValueType>&& matrix) const override;
             };
             
             template<typename ValueType>