diff --git a/NumLib/ODESolver/MatrixTranslator.h b/NumLib/ODESolver/MatrixTranslator.h
index 6df68880311403152646c2f83cc466a9d4e055a7..76970880311f22f24b019df4123cc7bef0d026c2 100644
--- a/NumLib/ODESolver/MatrixTranslator.h
+++ b/NumLib/ODESolver/MatrixTranslator.h
@@ -404,7 +404,7 @@ public:
         // Note: using x_old here is correct, since this method is called from within
         //       CrankNicolson::pushState() __after__ x_old has been updated to the result
         //       from the timestep just finished.
-        auto const x_old = _crank_nicolson.getXOld();
+        auto const& x_old = _crank_nicolson.getXOld();
 
         // _M_bar = (1.0-theta) * M;
         BLAS::copy(M, _M_bar);
diff --git a/NumLib/ODESolver/TimeLoopSingleODE.h b/NumLib/ODESolver/TimeLoopSingleODE.h
index dd69d77269297970ae877de696844827705db139..ff8f29d8e086bda2b65dc8b9b7c5fbfaff4f6a36 100644
--- a/NumLib/ODESolver/TimeLoopSingleODE.h
+++ b/NumLib/ODESolver/TimeLoopSingleODE.h
@@ -64,7 +64,7 @@ public:
      * \retval false otherwise
      */
     template<typename Callback>
-    bool loop(const double t0, const Vector x0,
+    bool loop(const double t0, Vector const& x0,
               const double t_end, const double delta_t,
               Callback& post_timestep);
 
@@ -81,7 +81,7 @@ template<typename Matrix, typename Vector, NonlinearSolverTag NLTag>
 template<typename Callback>
 bool
 TimeLoopSingleODE<Matrix, Vector, NLTag>::
-loop(const double t0, const Vector x0, const double t_end, const double delta_t,
+loop(const double t0, Vector const& x0, const double t_end, const double delta_t,
      Callback& post_timestep)
 {
     // solution vector