diff --git a/ProcessLib/Utils/TransposeInPlace.h b/ProcessLib/Utils/TransposeInPlace.h
index 163ebf9713f2800ae344744777a130f1d04926b3..6b8b338ef5a58f1d940a9ca8885465aee3397336 100644
--- a/ProcessLib/Utils/TransposeInPlace.h
+++ b/ProcessLib/Utils/TransposeInPlace.h
@@ -37,4 +37,32 @@ std::vector<double> transposeInPlace(
     return result;
 }
 
+template <int Components>
+void transposeInPlace(std::vector<double>& values)
+{
+    MathLib::toMatrix<
+        Eigen::Matrix<double, Eigen::Dynamic, Components, Eigen::RowMajor>>(
+        values, values.size() / Components, Components) =
+        MathLib::toMatrix<
+            Eigen::Matrix<double, Components, Eigen::Dynamic, Eigen::RowMajor>>(
+            values, Components, values.size() / Components)
+            .transpose()
+            .eval();
+}
+
+inline void transposeInPlace(std::vector<double>& values,
+                             unsigned const num_components)
+{
+    MathLib::toMatrix<
+        Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>>(
+        values, values.size() / num_components, num_components) =
+        MathLib::toMatrix<Eigen::Matrix<double,
+                                        Eigen::Dynamic,
+                                        Eigen::Dynamic,
+                                        Eigen::RowMajor>>(
+            values, num_components, values.size() / num_components)
+            .transpose()
+            .eval();
+}
+
 }  // namespace ProcessLib