diff --git a/mpp b/mpp
index ee33eb4836a746c7a74b83248660aad95a1f4e16..9979806b3f3f94fa6d5f44c3fd7ebb5cbb3382fa 160000
--- a/mpp
+++ b/mpp
@@ -1 +1 @@
-Subproject commit ee33eb4836a746c7a74b83248660aad95a1f4e16
+Subproject commit 9979806b3f3f94fa6d5f44c3fd7ebb5cbb3382fa
diff --git a/src/cellmodels/solvers/MElphySolver.cpp b/src/cellmodels/solvers/MElphySolver.cpp
index 131433395f86ac4b0aa1c53c1cf08c034afb2b6b..c0f30225e48ecdcddd63e77854915bd4e303ff36 100644
--- a/src/cellmodels/solvers/MElphySolver.cpp
+++ b/src/cellmodels/solvers/MElphySolver.cpp
@@ -33,7 +33,7 @@ void MElphySolver::Solve(TimeSeries &microTS, Vectors &u) {
     g[i] = std::vector<double>(cellModel.Size());//vorher: size
 
   for (row r = u[0].rows(); r != u[0].rows_end(); ++r) {
-    for (int j = 0; j < r.n(); ++j) {
+    for (int j = 0; j < r.NumberOfDofs(); ++j) {
       for (int i = 0; i < cellModel.Size(); ++i) {//stimmt hier der max-WErt?
         vw[i] = (*gating)[i](r, j);
       }
@@ -145,7 +145,7 @@ void MElphySolver::PrintMaxMinGating() const {
     minGatingOverVertices[i] = 10000000;
   }
   for (row r = (*maxgating).rows(); r != (*maxgating).rows_end(); ++r) {
-    for (int j = 0; j < r.n(); ++j) {
+    for (int j = 0; j < r.NumberOfDofs(); ++j) {
       for (int i = 0; i < cellModel.Size(); i++) {
         if ((*mingating)[i](r, j) < minGatingOverVertices[i]) {
           minGatingOverVertices[i] = (*mingating)[i](r, j);
diff --git a/src/coupled/solvers/CellModelSolver.cpp b/src/coupled/solvers/CellModelSolver.cpp
index e2af47122369fce012977219e084e03480fe8cfb..247670d617ee13f59a8a7f98dc6c3c8a08c28501 100644
--- a/src/coupled/solvers/CellModelSolver.cpp
+++ b/src/coupled/solvers/CellModelSolver.cpp
@@ -31,7 +31,7 @@ void CellModelSolver::Solve(Vector &potential, Vector &stretch) {
 
     // Update Invariant
     for (row r = stretch.rows(); r != stretch.rows_end(); ++r) {
-      for (int j = 0; j < r.n(); ++j) {
+      for (int j = 0; j < r.NumberOfDofs(); ++j) {
         uNew[2](r, j) = (1.0 + uNew[1](r, j)) * (1.0 + uNew[1](r, j));
       }
     }
diff --git a/src/electrophysiology/assemble/IElphyAssemble.cpp b/src/electrophysiology/assemble/IElphyAssemble.cpp
index e49e36a2affa8b38edb70610c43dee5ff2ea8758..8cbd040261922cfc89ae34b70d3fb7cfc1598d28 100644
--- a/src/electrophysiology/assemble/IElphyAssemble.cpp
+++ b/src/electrophysiology/assemble/IElphyAssemble.cpp
@@ -80,7 +80,7 @@ void IElphyAssemble::PrintVariable(const Vector &var,const std::string &varname)
     Point P = problem.getEvaluationPointAt(i);
     if (var.find_row(P) != var.rows_end()) {
       row r = var.find_row(P);
-      if (r.n() == 2) {
+      if (r.NumberOfDofs() == 2) {
         value = var(P, 1);
       } else {
         value = var(P, 0);
@@ -154,7 +154,7 @@ void IElphyAssemble::PrintV(const Vector &V) const {
     Point P = problem.getEvaluationPointAt(i);
     if (V.find_row(P) != V.rows_end()) {
       row r = V.find_row(P);
-      if (r.n() == 2) {
+      if (r.NumberOfDofs() == 2) {
         v = V(P, 1);
       } else {
         v = V(P, 0);
diff --git a/src/electrophysiology/assemble/MonodomainSplitting.cpp b/src/electrophysiology/assemble/MonodomainSplitting.cpp
index 3102edd0e389f9a8a81190755edb744fc6c6465c..4b641905b1a50bb80f4ad60789bc7995b1a0b6e1 100644
--- a/src/electrophysiology/assemble/MonodomainSplitting.cpp
+++ b/src/electrophysiology/assemble/MonodomainSplitting.cpp
@@ -29,7 +29,7 @@ void MonodomainSplitting::updateExternalCurrent(const Vector &V) {
   if(!isNormIextZero) {
     double tNew = Time()+timeUpdateIext;
     for (row r = Iext->rows(); r != Iext->rows_end(); ++r) {
-      for (int j = 0; j < r.n(); ++j) {
+      for (int j = 0; j < r.NumberOfDofs(); ++j) {
         (*Iext)(r, j) = (1 - theta) * excitationFunc(1000 * Time(), Amplitude(excData, r, j),
                                                      1000 * Excitation(excData, r, j),
                                                      1000 * Duration(excData, r, j));
diff --git a/src/electrophysiology/solvers/SplittingSolver.cpp b/src/electrophysiology/solvers/SplittingSolver.cpp
index d99d101b26ac796033bcec84cb9178dac34ae841..39e6fb6e4437ce3517f4d4c4752911bd7b1e3026 100644
--- a/src/electrophysiology/solvers/SplittingSolver.cpp
+++ b/src/electrophysiology/solvers/SplittingSolver.cpp
@@ -40,7 +40,7 @@ void IBTSplittingSolver::Initialize(IElphyAssemble &A, Vector &V) {
     atriaParameters.initParameters(A.StepSize() / (odeSteps * subSteps));
     for (row r = V.rows(); r != V.rows_end(); ++r) {
 
-      for (int j = 0; j < r.n(); ++j) {
+      for (int j = 0; j < r.NumberOfDofs(); ++j) {
         if (DP(r, j) == 1) {
           cellModel[r() + j * shift2] = std::make_unique<ElphyIBT>(atriaParameters,
                                                                    Excitation(A.ExcitationData(), r, j),
@@ -58,7 +58,7 @@ void IBTSplittingSolver::Initialize(IElphyAssemble &A, Vector &V) {
     }
   } else {
     for (row r = V.rows(); r != V.rows_end(); ++r) {
-      for (int j = 0; j < r.n(); ++j) {
+      for (int j = 0; j < r.NumberOfDofs(); ++j) {
         cellModel[r() + j * shift2] = std::make_unique<ElphyIBT>(ventricleParameters,
                                                                  Excitation(A.ExcitationData(), r, j),
                                                                  Duration(A.ExcitationData(), r, j),
@@ -75,7 +75,7 @@ void IBTSplittingSolver::solveCellModels(Vectors &values, double t, double dt) {
   double e_dt = dt / subSteps;
 
   for (row r = V.rows(); r != V.rows_end(); ++r) {
-    for (int j = 0; j < r.n(); j++) {
+    for (int j = 0; j < r.NumberOfDofs(); j++) {
       for (int k = 0; k < subSteps; ++k) {
         V(r, j) = cellModel.find(r() + j * shift2)->second->update(e_dt, V(r, j));
       }