diff --git a/ProcessLib/AbstractJacobianAssembler.h b/ProcessLib/AbstractJacobianAssembler.h
index e11cb1917c75945caa7930cad3ba2dc7c8609ea5..b148e7cf952fe7f354eb1088b2f59aea268bf814 100644
--- a/ProcessLib/AbstractJacobianAssembler.h
+++ b/ProcessLib/AbstractJacobianAssembler.h
@@ -10,7 +10,9 @@
 
 #pragma once
 
+#include <Eigen/Dense>
 #include <vector>
+
 #include "BaseLib/Error.h"
 
 namespace ProcessLib
@@ -38,9 +40,10 @@ public:
     //! \f$b\f$ with coupling.
     virtual void assembleWithJacobianForStaggeredScheme(
         LocalAssemblerInterface& /*local_assembler*/, double const /*t*/,
-        double const /*dt*/, std::vector<double> const& /*local_xdot*/,
-        const double /*dxdot_dx*/, const double /*dx_dx*/,
-        int const /*process_id*/, std::vector<double>& /*local_M_data*/,
+        double const /*dt*/, Eigen::VectorXd const& /*local_x*/,
+        std::vector<double> const& /*local_xdot*/, const double /*dxdot_dx*/,
+        const double /*dx_dx*/, int const /*process_id*/,
+        std::vector<double>& /*local_M_data*/,
         std::vector<double>& /*local_K_data*/,
         std::vector<double>& /*local_b_data*/,
         std::vector<double>& /*local_Jac_data*/,
diff --git a/ProcessLib/AnalyticalJacobianAssembler.cpp b/ProcessLib/AnalyticalJacobianAssembler.cpp
index 1959c2ef151139493faf15ef3ea8516982fd1c06..991f5b8edc305f9cf201ec9d0a4009c5799d2ba7 100644
--- a/ProcessLib/AnalyticalJacobianAssembler.cpp
+++ b/ProcessLib/AnalyticalJacobianAssembler.cpp
@@ -28,14 +28,14 @@ void AnalyticalJacobianAssembler::assembleWithJacobian(
 
 void AnalyticalJacobianAssembler::assembleWithJacobianForStaggeredScheme(
     LocalAssemblerInterface& local_assembler, double const t, double const dt,
-    std::vector<double> const& local_xdot, const double dxdot_dx,
-    const double dx_dx, int const process_id, std::vector<double>& local_M_data,
-    std::vector<double>& local_K_data, std::vector<double>& local_b_data,
-    std::vector<double>& local_Jac_data,
+    Eigen::VectorXd const& local_x, std::vector<double> const& local_xdot,
+    const double dxdot_dx, const double dx_dx, int const process_id,
+    std::vector<double>& local_M_data, std::vector<double>& local_K_data,
+    std::vector<double>& local_b_data, std::vector<double>& local_Jac_data,
     LocalCoupledSolutions const& local_coupled_solutions)
 {
     local_assembler.assembleWithJacobianForStaggeredScheme(
-        t, dt, local_xdot, dxdot_dx, dx_dx, process_id, local_M_data,
+        t, dt, local_x, local_xdot, dxdot_dx, dx_dx, process_id, local_M_data,
         local_K_data, local_b_data, local_Jac_data, local_coupled_solutions);
 }
 
diff --git a/ProcessLib/AnalyticalJacobianAssembler.h b/ProcessLib/AnalyticalJacobianAssembler.h
index 814f1166f0937c7d084005b786f9b5878bc70095..c8d7feef0a402fd18e41a368100549e7e9aeae0b 100644
--- a/ProcessLib/AnalyticalJacobianAssembler.h
+++ b/ProcessLib/AnalyticalJacobianAssembler.h
@@ -43,8 +43,9 @@ public:
 
     void assembleWithJacobianForStaggeredScheme(
         LocalAssemblerInterface& local_assembler, double const t,
-        double const dt, std::vector<double> const& local_xdot,
-        const double dxdot_dx, const double dx_dx, int const process_id,
+        double const dt, Eigen::VectorXd const& local_x,
+        std::vector<double> const& local_xdot, const double dxdot_dx,
+        const double dx_dx, int const process_id,
         std::vector<double>& local_M_data, std::vector<double>& local_K_data,
         std::vector<double>& local_b_data, std::vector<double>& local_Jac_data,
         LocalCoupledSolutions const& local_coupled_solutions) override;
diff --git a/ProcessLib/LocalAssemblerInterface.cpp b/ProcessLib/LocalAssemblerInterface.cpp
index 9bc1452eb926af8d4bc9f459bf833e9810157892..65dee4cc301a18e2b58986b570ca92c5b5678c27 100644
--- a/ProcessLib/LocalAssemblerInterface.cpp
+++ b/ProcessLib/LocalAssemblerInterface.cpp
@@ -54,7 +54,7 @@ void LocalAssemblerInterface::assembleWithJacobian(
 }
 
 void LocalAssemblerInterface::assembleWithJacobianForStaggeredScheme(
-    double const /*t*/, double const /*dt*/,
+    double const /*t*/, double const /*dt*/, Eigen::VectorXd const& /*local_x*/,
     std::vector<double> const& /*local_xdot*/, const double /*dxdot_dx*/,
     const double /*dx_dx*/, int const /*process_id*/,
     std::vector<double>& /*local_M_data*/,
diff --git a/ProcessLib/LocalAssemblerInterface.h b/ProcessLib/LocalAssemblerInterface.h
index d619eceb7c186553666bd07bee063c88e0549a56..b6bdd65e5f0e75747ceff3e4c2d43458b2e5b473 100644
--- a/ProcessLib/LocalAssemblerInterface.h
+++ b/ProcessLib/LocalAssemblerInterface.h
@@ -68,8 +68,9 @@ public:
                                       std::vector<double>& local_Jac_data);
 
     virtual void assembleWithJacobianForStaggeredScheme(
-        double const t, double const dt, std::vector<double> const& local_xdot,
-        const double dxdot_dx, const double dx_dx, int const process_id,
+        double const t, double const dt, Eigen::VectorXd const& local_x,
+        std::vector<double> const& local_xdot, const double dxdot_dx,
+        const double dx_dx, int const process_id,
         std::vector<double>& local_M_data, std::vector<double>& local_K_data,
         std::vector<double>& local_b_data, std::vector<double>& local_Jac_data,
         LocalCoupledSolutions const& local_coupled_solutions);
diff --git a/ProcessLib/VectorMatrixAssembler.cpp b/ProcessLib/VectorMatrixAssembler.cpp
index 61f73d3ae1bedb2f787dc9462ea8c6dba3f992b2..c58d77a181b04639f686bd3041cf1d8414662083 100644
--- a/ProcessLib/VectorMatrixAssembler.cpp
+++ b/ProcessLib/VectorMatrixAssembler.cpp
@@ -142,13 +142,15 @@ void VectorMatrixAssembler::assembleWithJacobian(
         auto local_coupled_xs =
             getCoupledLocalSolutions(x, indices_of_processes);
 
+        auto const local_x = MathLib::toVector(local_coupled_xs);
+
         ProcessLib::LocalCoupledSolutions local_coupled_solutions(
             std::move(local_coupled_xs0), std::move(local_coupled_xs));
 
         _jacobian_assembler->assembleWithJacobianForStaggeredScheme(
-            local_assembler, t, dt, local_xdot, dxdot_dx, dx_dx, process_id,
-            _local_M_data, _local_K_data, _local_b_data, _local_Jac_data,
-            local_coupled_solutions);
+            local_assembler, t, dt, local_x, local_xdot, dxdot_dx, dx_dx,
+            process_id, _local_M_data, _local_K_data, _local_b_data,
+            _local_Jac_data, local_coupled_solutions);
     }
 
     auto const num_r_c = indices.size();