diff --git a/src/coupled/solvers/SegregatedSolver.cpp b/src/coupled/solvers/SegregatedSolver.cpp
index ea9fd8f3bd286f302714406220c0c02b8873d193..b302d0527dd6dc32b7a61b6d3d4553ce98698e78 100644
--- a/src/coupled/solvers/SegregatedSolver.cpp
+++ b/src/coupled/solvers/SegregatedSolver.cpp
@@ -353,11 +353,11 @@ bool SegregatedSolverOnCells::Method(IElphyAssemble &elphyAssemble, IElasticity
                               Vector &potential,
                               Vector &displacement) {
   const Meshes &M = displacement.GetMeshes();
-  LagrangeDiscretization disc0(M, 0, 1);
+  auto disc0 = std::make_shared<LagrangeDiscretization>(M, 0, 1);
   Vector gamma_f_c(disc0);
   gamma_f_c = 0;
   const Meshes &Mpot = potential.GetMeshes();
-  LagrangeDiscretization disc0pot(Mpot, 0, 1);
+  auto disc0pot = std::make_shared<LagrangeDiscretization>(Mpot, 0, 1);
   Vector gamma_f_c_pot(disc0pot);
   gamma_f_c_pot = 0;
 
diff --git a/src/coupled/transfers/MultiPartTransfer.cpp b/src/coupled/transfers/MultiPartTransfer.cpp
index 3f5345816fb60f04436969707299dfc1645be79b..2a3a7e29fd24d99024f873c8cf5963fe3856e1c4 100644
--- a/src/coupled/transfers/MultiPartTransfer.cpp
+++ b/src/coupled/transfers/MultiPartTransfer.cpp
@@ -111,7 +111,7 @@ void MultiPartLagrangeTransfer::ProlongateCell(const Vector &coarse, Vector &fin
   const Meshes &M_coarse = coarse.GetMeshes();
   int fineLevel=M_fine.Level();
   int coarseLevel=M_coarse.Level();
-  LagrangeDiscretization discFine (M_fine, 0, 1);
+  auto discFine = std::make_shared<LagrangeDiscretization>(M_fine, 0, 1);
   fine = 0.0;
   if(fineLevel!=coarseLevel){
     std::unique_ptr<Vector> fineNew;
@@ -211,8 +211,8 @@ void MultiPartLagrangeTransfer::ProjectCells(Vector &coarse, const Vector &fine)
 
   coarse = 0.0;
   if(fineLevel!=coarseLevel){
-    LagrangeDiscretization discFine (M_fine, 0, 1);
-    LagrangeDiscretization discCoarse (M_coarse, 0, 1);
+    auto discFine = std::make_shared<LagrangeDiscretization>(M_fine, 0, 1);
+    auto discCoarse = std::make_shared<LagrangeDiscretization>(M_coarse, 0, 1);
 
     std::unique_ptr<Vector> finePerStep;
     std::unique_ptr<Vector> fineCoarsePerStep;
diff --git a/src/elasticity/assemble/IElasticity.cpp b/src/elasticity/assemble/IElasticity.cpp
index 6e4ed0dcd9fc478d09ebe11051de6e28535d0347..3f715729ee330b96761f6c5dbfdd9d8fef41c6fd 100644
--- a/src/elasticity/assemble/IElasticity.cpp
+++ b/src/elasticity/assemble/IElasticity.cpp
@@ -25,7 +25,7 @@ void IElasticity::SetInitialValue(Vector &u) {
   eProblem.Initialize(StepSize(), Time(), ChamberVolume(u));
   const Meshes &M = u.GetMeshes();
   auto disc03 = std::make_shared<LagrangeDiscretization>(M, 0, 3);
-  gamma_c= !Prestress ? std::make_unique<Vector>(*disc03,prestressLevel) : std::make_unique<Vector>(*disc03);
+  gamma_c= !Prestress ? std::make_unique<Vector>(disc03,prestressLevel) : std::make_unique<Vector>(disc03);
 
   if (!Prestress) {
     Prestress = std::make_unique<Vector>(0.0, u);
diff --git a/src/elasticity/solvers/IterativePressureSolver.cpp b/src/elasticity/solvers/IterativePressureSolver.cpp
index 5b0cd9d576314c00f19a222a802dab2b55b77a3a..d3299f74e99b72b31a9ada6c92f4b4d95705f1b6 100644
--- a/src/elasticity/solvers/IterativePressureSolver.cpp
+++ b/src/elasticity/solvers/IterativePressureSolver.cpp
@@ -89,7 +89,7 @@ void CalculatePrestress(IElasticity &assemble, Vector &u) {
   Config::Get("PrestressSteps", prestressSteps);
   int prestressLevel=0;
   Config::Get("PrestressLevel", prestressLevel);
-  Vector uPrestressLevel(assemble.GetDisc(),prestressLevel);
+  Vector uPrestressLevel(assemble.GetSharedDisc(),prestressLevel);
   uPrestressLevel.Accumulate();
   IterativePressureSolver prestressSolver(assemble.GetElasticityProblem(), prestressSteps);
   prestressSolver.Method(assemble, uPrestressLevel);
diff --git a/src/electrophysiology/assemble/Monodomain.cpp b/src/electrophysiology/assemble/Monodomain.cpp
index 3c2bb6a1a71e0005685175fbf69c5f26484f938a..aba40c5c7fec5936dfd9187f879d7c2d1e4c77d6 100644
--- a/src/electrophysiology/assemble/Monodomain.cpp
+++ b/src/electrophysiology/assemble/Monodomain.cpp
@@ -43,7 +43,7 @@ void Monodomain::updateExternalCurrent(const Vector &V) {
     double tNew = Time() + timeUpdateIext;
     double tHalve = Time() + (StepSize() * 0.5);
     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) {
         (*Iext)(r, j) = excitationFunc(elphyModel.TimeScale() * tNew, Amplitude(excData, r, j),
                                        elphyModel.TimeScale() * Excitation(excData, r, j),
                                        elphyModel.TimeScale() * Duration(excData, r, j));
@@ -204,7 +204,7 @@ void MonodomainLINodes::updateIionVecs(const Vectors &VCW) {
   vout(10).StartBlock("Update Iion and DVIion");
   std::vector<double> vcw(elphyModel.ElphySize());
   for (row r = VCW[0].rows(); r != VCW[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 < elphyModel.ElphySize(); i++) {
         vcw[i] = VCW[i](r, j);
       }
@@ -218,7 +218,7 @@ void MonodomainLINodes::updateIionVecs(const Vectors &VCW) {
 void MonodomainLINodes::updateIion(const Vectors &VCW) {
   std::vector<double> vcw(elphyModel.ElphySize());
   for (row r = VCW[0].rows(); r != VCW[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 < elphyModel.ElphySize(); i++) {
         vcw[i] = VCW[i](r, j);
       }
@@ -232,7 +232,7 @@ void MonodomainLINodes::updateDVIion(const Vectors &VCW) {
 
   std::vector<double> vcw(elphyModel.ElphySize());
   for (row r = VCW[0].rows(); r != VCW[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 < elphyModel.ElphySize(); i++) {
         vcw[i] = VCW[i](r, j);
       }
@@ -487,7 +487,7 @@ void MonodomainFullNewton::Jacobi(const cell &c, const Vector &V, Matrix &jacobi
 
 void MonodomainFullNewton::updateVCW(const Vectors &VCW) {
   for (row r = VCW[0].rows(); r != VCW[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 < elphyModel.ElphySize(); i++) {
         (*VACAW)[i](r, j) = VCW[i](r, j);
       }
@@ -548,7 +548,7 @@ void MonodomainSemiImplicitNodes::updateIionVecs(const Vectors &VCW) {
   vout(10).StartBlock("Update Iion");
   std::vector<double> vcw(elphyModel.ElphySize());
   for (row r = VCW[0].rows(); r != VCW[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 < elphyModel.ElphySize(); i++) {
         vcw[i] = VCW[i](r, j);
       }
@@ -610,7 +610,7 @@ void MonodomainSemiImplicitCells::updateIionVecs(const Vectors &VCW) {
   vout(10).StartBlock("Update Iion ");
   std::vector<double> vcw(elphyModel.ElphySize());
   for (row r = VCW[0].rows(); r != VCW[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 < elphyModel.ElphySize(); i++) {
         vcw[i] = VCW[i](r, j);
       }
@@ -655,13 +655,14 @@ void MonodomainSemiImplicitCellsIextPerCell::updateExternalCurrent(const Vector
 }
 void MonodomainSemiImplicitCellsIextPerCell::SetInitialValue(Vector &V) {
 
-  Iext_cells=std::make_unique<Vector>(0.0,*disc0);
+  Iext_cells=std::make_unique<Vector>(0.0,disc0);//stimmt das?
+  // vorher: Iext_cells=std::make_unique<Vector>(0.0,*disc0);
 
   Vector amplitude( V);
   Vector excitation(V);
   Vector duration( V);
   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) {
       amplitude(r,j)=Amplitude(ExcitationData(), r, j);
       excitation(r,j)=Excitation(ExcitationData(), r, j);
       duration(r,j)=Duration(ExcitationData(), r, j);
diff --git a/src/electrophysiology/solvers/ElphySolver.cpp b/src/electrophysiology/solvers/ElphySolver.cpp
index 75627c182ca3739561240c566faacba6dfbf2b2b..40eea2d4a4e2321b8cb5b78544a337540ecc34d4 100644
--- a/src/electrophysiology/solvers/ElphySolver.cpp
+++ b/src/electrophysiology/solvers/ElphySolver.cpp
@@ -74,7 +74,7 @@ GetElphySolver(MCellModel &cellModel, const Vector &excitationData) {
 
 void ElphySolver::printVariableOnCells(IElphyAssemble &A,const Vector &var,const std::string &varname) const{
   const Meshes &mesh = var.GetMeshes();
-  LagrangeDiscretization disc0_var(mesh, 0, 1);
+  auto disc0_var = std::make_shared<LagrangeDiscretization>(mesh, 0, 1);
   Vector variable(disc0_var);
   variable=0;
   for(cell c= var.cells(); c != var.cells_end(); ++c){