diff --git a/NumLib/ODESolver/TimeDiscretizedODESystem.h b/NumLib/ODESolver/TimeDiscretizedODESystem.h
index 2fccfcd2580790833e635c32f40ad784106de2d3..63ec4822b0b7a99e5934ef8decb66a7b1c16c1d9 100644
--- a/NumLib/ODESolver/TimeDiscretizedODESystem.h
+++ b/NumLib/ODESolver/TimeDiscretizedODESystem.h
@@ -359,10 +359,14 @@ public:
             _ode.getKnownSolutions(_time_disc.getCurrentTime());
 
         if (known_solutions) {
+            using IndexType = typename MathLib::MatrixVectorTraits<Matrix>::Index;
+            std::vector<IndexType> ids;
+            std::vector<double> values;
             for (auto const& bc : *known_solutions) {
-                // TODO maybe it would be faster to apply all at once
-                MathLib::applyKnownSolution(A, rhs, x, bc.ids, bc.values);
+                std::copy(bc.ids.cbegin(), bc.ids.cend(), std::back_inserter(ids));
+                std::copy(bc.values.cbegin(), bc.values.cend(), std::back_inserter(values));
             }
+            MathLib::applyKnownSolution(A, rhs, x, ids, values);
         }
     }