diff --git a/dune/tectonic/factories/stackedblocksfactory.cc b/dune/tectonic/factories/stackedblocksfactory.cc
index b4665f042f70b46f37e8c3dcb1d82d079abf0d7f..877e32cfb52c3a498dc00709a0a5b777227128fd 100644
--- a/dune/tectonic/factories/stackedblocksfactory.cc
+++ b/dune/tectonic/factories/stackedblocksfactory.cc
@@ -95,23 +95,24 @@ void StackedBlocksFactory<HostGridType, VectorType>::setBodies() {
 #error CuboidGeometry only supports 2D and 3D!"
 #endif
 
-    // set up reference grids
-    gridConstructor_ = std::make_unique<GridsConstructor<HostGridType>>(cuboidGeometries_);
-    auto& grids = gridConstructor_->getGrids();
-
     for (size_t i=0; i<this->bodyCount_; i++) {
         const auto& cuboidGeometry = *cuboidGeometries_[i];
 
+        // set up reference grid
+        CuboidGridConstructor<HostGridType> gridConstructor(cuboidGeometry);
+
         // define weak patch and refine grid
         const auto& weakeningRegions = cuboidGeometry.weakeningRegions();
         for (size_t j=0; j<weakeningRegions.size(); j++) {
-            refine(*grids[i], weakeningRegions[j], this->parset_.template get<double>("boundary.friction.smallestDiameter"), CuboidGeometry::lengthScale());
+            gridConstructor.refine(weakeningRegions[j], this->parset_.template get<double>("boundary.friction.smallestDiameter"), CuboidGeometry::lengthScale());
         }
 
+        this->bodies_[i] = std::make_shared<typename Base::LeafBody>(bodyData_, gridConstructor.grid());
+
         // determine minDiameter and maxDiameter
         double minDiameter = std::numeric_limits<double>::infinity();
         double maxDiameter = 0.0;
-        for (auto &&e : elements(grids[i]->leafGridView())) {
+        for (auto &&e : elements(gridConstructor.grid()->leafGridView())) {
           auto const geometry = e.geometry();
           auto const diam = diameter(geometry);
           minDiameter = std::min(minDiameter, diam);
@@ -120,10 +121,6 @@ void StackedBlocksFactory<HostGridType, VectorType>::setBodies() {
         std::cout << "Grid" << i << " min diameter: " << minDiameter << std::endl;
         std::cout << "Grid" << i << " max diameter: " << maxDiameter << std::endl;
     }
-
-    for (size_t i=0; i<this->bodyCount_; i++) {
-        this->bodies_[i] = std::make_shared<typename Base::LeafBody>(bodyData_, grids[i]);
-    }
 }
 
 
diff --git a/dune/tectonic/factories/stackedblocksfactory.hh b/dune/tectonic/factories/stackedblocksfactory.hh
index fb21774a9619eafa7cb9626f2197649d1b8bcd74..d7d2c88d25834604d4d5808131718143eb74e47f 100644
--- a/dune/tectonic/factories/stackedblocksfactory.hh
+++ b/dune/tectonic/factories/stackedblocksfactory.hh
@@ -10,7 +10,7 @@
 #include "contactnetworkfactory.hh"
 
 #include "../problem-data/mybody.hh"
-#include "../problem-data/grid/mygrids.hh"
+#include "../problem-data/grid/cuboidgridconstructor.hh"
 #include "../problem-data/grid/cuboidgeometry.hh"
 
 template <class HostGridType, class VectorType> class StackedBlocksFactory : public ContactNetworkFactory<HostGridType, VectorType>{
@@ -39,8 +39,6 @@ template <class HostGridType, class VectorType> class StackedBlocksFactory : pub
 
     const std::shared_ptr<MyBodyData<dim>> bodyData_;     // material properties of bodies
 
-    std::unique_ptr<GridsConstructor<HostGridType>> gridConstructor_;
-
     std::vector<std::shared_ptr<CuboidGeometry>> cuboidGeometries_;
 
     std::vector<std::shared_ptr<LeafFaces>> leafFaces_;
@@ -54,7 +52,7 @@ template <class HostGridType, class VectorType> class StackedBlocksFactory : pub
 public:
     StackedBlocksFactory(const Dune::ParameterTree& parset) :
         Base(parset, parset.get<size_t>("problem.bodyCount"), parset.get<size_t>("problem.bodyCount")-1),
-        bodyData_(std::make_shared<MyBodyData<dim>>(this->parset_.sub("body"), this->parset_.template get<double>("gravity"), zenith_())),
+        bodyData_(std::make_shared<MyBodyData<dim>>(this->parset_.sub("body"), this->parset_.template get<double>("general.gravity"), zenith_())),
         cuboidGeometries_(this->bodyCount_),
         leafFaces_(this->bodyCount_),
         levelFaces_(this->bodyCount_),
diff --git a/dune/tectonic/problem-data/grid/mygrids.hh b/dune/tectonic/problem-data/grid/mygrids.hh
index 6883c228041c73e1a9b02c0013d23eb533e2ccbb..e324ead9ee3cb6e0ac43ee0b433bf6c9d5b648d5 100644
--- a/dune/tectonic/problem-data/grid/mygrids.hh
+++ b/dune/tectonic/problem-data/grid/mygrids.hh
@@ -7,6 +7,7 @@
 #include <dune/fufem/boundarypatch.hh>
 #include <dune/fufem/geometry/convexpolyhedron.hh>
 
+#include "cuboidgridconstructor.hh"
 #include "cuboidgeometry.hh"
 
 template <class GridView> struct MyFaces {
@@ -46,7 +47,7 @@ template <class GridView> struct MyFaces {
 
 
 template <class Grid>
-class CuboidGridConstructor : public GridConstructor<Grid> {
+class CuboidGridConstructor : public CuboidGridConstructor<Grid> {
 public:
   CuboidGridConstructor(const CuboidGeometry<typename Grid::ctype>& cuboidGeometry);
 
diff --git a/dune/tectonic/spatial-solving/fixedpointiterator.cc b/dune/tectonic/spatial-solving/fixedpointiterator.cc
index 265790d4de74e9c1e46ecc21aa082c8d824adb63..2798c76574e2718ac4de19ab965d869fa2790b9b 100644
--- a/dune/tectonic/spatial-solving/fixedpointiterator.cc
+++ b/dune/tectonic/spatial-solving/fixedpointiterator.cc
@@ -152,7 +152,7 @@ FixedPointIterator<Factory, NBodyAssembler, Updaters, ErrorNorms>::run(
     nBodyAssembler_.postprocess(total_v, velocityIterates);
     //Rprint(velocityIterates, "velocityIterates loop:");
     updaters.rate_->postProcess(velocityIterates);
-    bool breakCriterion = displacementCriterion(updaters, last_u); //displacementCriterion(updaters, last_u); //stateCriterion(alpha, newAlpha);
+    bool breakCriterion = stateCriterion(alpha, newAlpha); //displacementCriterion(updaters, last_u); //stateCriterion(alpha, newAlpha);
 
     //printRegularityTruncation(globalFriction_, total_v);
 
diff --git a/src/foam/foam.cfg b/src/foam/foam.cfg
index b0ce4bb0044aca99641654dbad7d77848e8c0c9e..572b7afc11e7d0d89e5580a814662605ac3e0d03 100644
--- a/src/foam/foam.cfg
+++ b/src/foam/foam.cfg
@@ -1,13 +1,13 @@
 # -*- mode:conf -*-
 [general]
-outPath = pipping-2013-euler # output written to ./output/outPath
+outPath = pipping-2013-newmark-double-1e5 # output written to ./output/outPath
 gravity         = 9.81     # [m/s^2]
 
 [body0]
 length          = 6.0      # [m]
 height          = 1.0     # [m]
-bulkModulus     = 0.0 # 4.12e7 #4.12e9   # [Pa] #2190
-poissonRatio    = 0.0 #0.3     # [1]  #0.11
+bulkModulus     = 4.12e7 #4.12e9   # [Pa] #2190
+poissonRatio    = 0.3     # [1]  #0.11
 [body0.elastic]
 density         = 5e3      # [kg/m^3] #750
 shearViscosity  = 0.0     # [Pas]
@@ -63,17 +63,17 @@ restarts.write  = true #true
 vtk.write       = true
 
 [problem]
-finalTime       = 15     # [s] #1000
+finalTime       = 50     # [s] #1000
 bodyCount       = 2
 
 [initialTime]
 timeStep = 0
 relativeTime = 0.0
-relativeTau = 1e-4 # 1e-6
+relativeTau = 1e-5 # 1e-6
 
 [timeSteps]
-scheme = backwardEuler # newmark
-timeSteps = 1e4
+scheme = newmark # newmark, backwardEuler
+timeSteps = 1e5
 
 [u0.solver]
 maximumIterations = 100
diff --git a/src/multi-body-problem/CMakeLists.txt b/src/multi-body-problem/CMakeLists.txt
index 272477e6da80977fb420868e4791bd02056e0ecc..9654fa4e1659f5204fc69b300aabfdfb23c23979 100644
--- a/src/multi-body-problem/CMakeLists.txt
+++ b/src/multi-body-problem/CMakeLists.txt
@@ -11,7 +11,7 @@ set(MSW_SOURCE_FILES
   ../../dune/tectonic/data-structures/network/contactnetwork.cc
   ../../dune/tectonic/data-structures/enumparser.cc
   #../../dune/tectonic/factories/cantorfactory.cc
-  ../../dune/tectonic/factories/threeblocksfactory.cc
+  #../../dune/tectonic/factories/threeblocksfactory.cc
   ../../dune/tectonic/factories/stackedblocksfactory.cc
   #../../dune/tectonic/io/vtk.cc
   #../../dune/tectonic/io/hdf5/frictionalboundary-writer.cc
@@ -21,7 +21,7 @@ set(MSW_SOURCE_FILES
   #../../dune/tectonic/io/hdf5/surface-writer.cc
   #../../dune/tectonic/io/hdf5/time-writer.cc
   ../../dune/tectonic/problem-data/grid/cuboidgeometry.cc
-  ../../dune/tectonic/problem-data/grid/mygrids.cc
+  #../../dune/tectonic/problem-data/grid/mygrids.cc
   ../../dune/tectonic/problem-data/grid/simplexmanager.cc
   ../../dune/tectonic/spatial-solving/solverfactory.cc
   ../../dune/tectonic/spatial-solving/fixedpointiterator.cc
@@ -30,6 +30,7 @@ set(MSW_SOURCE_FILES
   ../../dune/tectonic/time-stepping/rate.cc
   ../../dune/tectonic/time-stepping/rate/rateupdater.cc
   ../../dune/tectonic/time-stepping/state.cc
+  ../../dune/tectonic/time-stepping/uniformtimestepper.cc
   multi-body-problem.cc
 )
 
diff --git a/src/multi-body-problem/multi-body-problem-2D.cfg b/src/multi-body-problem/multi-body-problem-2D.cfg
index d17965a838358b1ed23731805907260c5bf5075e..f6110f74061c3e20f69c27855859fd284dedf12b 100644
--- a/src/multi-body-problem/multi-body-problem-2D.cfg
+++ b/src/multi-body-problem/multi-body-problem-2D.cfg
@@ -1,9 +1,9 @@
 # -*- mode:conf -*-
 [boundary.friction]
-smallestDiameter = 0.05  # 0.05 2e-3 [m]
+smallestDiameter = 2e-2  # 0.05 2e-3 [m]
 
 [timeSteps]
-refinementTolerance = 2e-2 # 1e-5
+refinementTolerance = 1e-5 # 1e-5
 
 [u0.solver]
 tolerance         = 1e-8
diff --git a/src/multi-body-problem/multi-body-problem.cc b/src/multi-body-problem/multi-body-problem.cc
index 84a580ddbdfdd974d3ec2b8e46630de1cc96e224..58da326b67f1a0e671aebe00856881c20cdeb45a 100644
--- a/src/multi-body-problem/multi-body-problem.cc
+++ b/src/multi-body-problem/multi-body-problem.cc
@@ -55,7 +55,7 @@
 #include <dune/tectonic/data-structures/friction/globalfriction.hh>
 
 #include <dune/tectonic/factories/stackedblocksfactory.hh>
-#include <dune/tectonic/factories/threeblocksfactory.hh>
+//#include <dune/tectonic/factories/threeblocksfactory.hh>
 
 #include <dune/tectonic/io/io-handler.hh>
 #include <dune/tectonic/io/hdf5-writer.hh>
@@ -64,7 +64,7 @@
 
 #include <dune/tectonic/problem-data/bc.hh>
 #include <dune/tectonic/problem-data/mybody.hh>
-#include <dune/tectonic/problem-data/grid/mygrids.hh>
+//#include <dune/tectonic/problem-data/grid/mygrids.hh>
 
 #include <dune/tectonic/spatial-solving/tnnmg/functional.hh>
 //#include <dune/tectonic/spatial-solving/preconditioners/multilevelpatchpreconditioner.hh>
@@ -72,6 +72,7 @@
 #include <dune/tectonic/spatial-solving/solverfactory.hh>
 
 #include <dune/tectonic/time-stepping/adaptivetimestepper.hh>
+#include <dune/tectonic/time-stepping/uniformtimestepper.hh>
 #include <dune/tectonic/time-stepping/rate.hh>
 #include <dune/tectonic/time-stepping/state.hh>
 #include <dune/tectonic/time-stepping/stepbase.hh>
@@ -92,11 +93,13 @@ size_t const dims = MY_DIM;
 #include <dune/tectonic/utils/reductionfactors.hh>
 std::vector<std::vector<double>> allReductionFactors;
 
+const std::string sourcePath = "/home/joscha/software/dune/dune-tectonic/src/multi-body-problem/";
+
 Dune::ParameterTree getParameters(int argc, char *argv[]) {
   Dune::ParameterTree parset;
-  Dune::ParameterTreeParser::readINITree("/home/joscha/software/dune/dune-tectonic/src/multi-body-problem/multi-body-problem.cfg", parset);
+  Dune::ParameterTreeParser::readINITree(sourcePath + "multi-body-problem.cfg", parset);
   Dune::ParameterTreeParser::readINITree(
-      Dune::Fufem::formatString("/home/joscha/software/dune/dune-tectonic/src/multi-body-problem/multi-body-problem-%dD.cfg", dims), parset);
+      Dune::Fufem::formatString(sourcePath + "multi-body-problem-%dD.cfg", dims), parset);
   Dune::ParameterTreeParser::readOptions(argc, argv, parset);
   return parset;
 }
@@ -105,6 +108,14 @@ static std::atomic<bool> terminationRequested(false);
 void handleSignal(int signum) { terminationRequested = true; }
 
 int main(int argc, char *argv[]) {
+  using BlocksFactory = StackedBlocksFactory<Grid, Vector>;
+  using ContactNetwork = typename BlocksFactory::ContactNetwork;
+  using MyProgramState = ProgramState<Vector, ScalarVector>;
+  using Assembler = MyAssembler<DefLeafGridView, dims>;
+
+  using IOHandler = IOHandler<Assembler, ContactNetwork, MyProgramState>;
+  std::unique_ptr<IOHandler> ioHandler;
+
   try {
     Dune::MPIHelper::instance(argc, argv);
 
@@ -115,24 +126,28 @@ int main(int argc, char *argv[]) {
         std::cout << argv[0] << std::endl;
     }
 
+    auto const parset = getParameters(argc, argv);
+
+    auto outPath = std::filesystem::current_path();
+    outPath +=  "/output/" + parset.get<std::string>("general.outPath");
+    if (!std::filesystem::is_directory(outPath))
+        std::filesystem::create_directories(outPath);
+
+    const auto copyOptions = std::filesystem::copy_options::overwrite_existing;
+    std::filesystem::copy(sourcePath + "multi-body-problem.cfg", outPath, copyOptions);
+    std::filesystem::copy(Dune::Fufem::formatString(sourcePath + "multi-body-problem-%dD.cfg", dims), outPath, copyOptions);
+    std::filesystem::current_path(outPath);
+
     std::ofstream out("multi-body-problem.log");
     std::streambuf *coutbuf = std::cout.rdbuf(); //save old buffer
     std::cout.rdbuf(out.rdbuf()); //redirect std::cout to log.txt
 
-    auto const parset = getParameters(argc, argv);
-
-    using Assembler = MyAssembler<DefLeafGridView, dims>;
     using field_type = Matrix::field_type;
 
     // ----------------------
     // set up contact network
     // ----------------------
-
-    using BlocksFactory = StackedBlocksFactory<Grid, Vector>;
-    //using BlocksFactory = ThreeBlocksFactory<Grid, Vector>;
     BlocksFactory blocksFactory(parset);
-
-    using ContactNetwork = typename BlocksFactory::ContactNetwork;
     blocksFactory.build();
 
     ContactNetwork& contactNetwork = blocksFactory.contactNetwork();
@@ -149,7 +164,7 @@ int main(int argc, char *argv[]) {
         const auto& level = *contactNetwork.level(i);
 
         for (size_t j=0; j<level.nBodies(); j++) {
-            writeToVTK(level.body(j)->gridView(), "../debug_print/bodies/", "body_" + std::to_string(j) + "_level_" + std::to_string(i));
+            //writeToVTK(level.body(j)->gridView(), "../debug_print/bodies/", "body_" + std::to_string(j) + "_level_" + std::to_string(i));
         }
     }
 
@@ -172,20 +187,44 @@ int main(int argc, char *argv[]) {
     for (size_t i=0; i<bodyCount; i++) {
         nVertices[i] = contactNetwork.body(i)->nVertices();
     }
+    print(nVertices, "#dofs: ");
 
-    using MyProgramState = ProgramState<Vector, ScalarVector>;
     MyProgramState programState(nVertices);
 
-    IOHandler<Assembler, ContactNetwork> ioHandler(parset.sub("io"), contactNetwork);
+    ioHandler = std::make_unique<IOHandler>(parset.sub("io"), contactNetwork);
 
-    bool restartRead = ioHandler.read(programState);
+    bool restartRead = ioHandler->read(programState);
     if (!restartRead) {
       programState.setupInitialConditions(parset, contactNetwork);
     }
 
-    //print(programState.u, "u:");
-
     auto& nBodyAssembler = contactNetwork.nBodyAssembler();
+
+    BitVector totalDirichletNodes;
+    contactNetwork.totalNodes("dirichlet", totalDirichletNodes);
+
+    using BoundaryNodes = typename ContactNetwork::BoundaryNodes;
+    BoundaryNodes dirichletNodes;
+    contactNetwork.boundaryNodes("dirichlet", dirichletNodes);
+
+    size_t dof = 0;
+    for (size_t i=0; i<bodyCount; i++) {
+        const auto& body = *contactNetwork.body(i);
+
+        if (body.data()->getYoungModulus() == 0.0) {
+            for (size_t j=0; j<body.nVertices(); j++) {
+                totalDirichletNodes[dof] = true;
+                dof++;
+            }
+        } else {
+            dof += body.nVertices();
+        }
+    }
+
+    std::vector<const Dune::BitSetVector<1>*> frictionNodes;
+    contactNetwork.frictionNodes(frictionNodes);
+
+
     for (size_t i=0; i<bodyCount; i++) {
       contactNetwork.body(i)->setDeformation(programState.u[i]);
     }
@@ -200,34 +239,14 @@ int main(int argc, char *argv[]) {
     auto& globalFriction = contactNetwork.globalFriction();
     globalFriction.updateAlpha(programState.alpha);
 
-
     IterationRegister iterationCount;
 
-    ioHandler.write(programState, contactNetwork, globalFriction, iterationCount, true);
-
-    //DUNE_THROW(Dune::Exception, "Just need to stop here!");
+    ioHandler->write(programState, contactNetwork, globalFriction, iterationCount, true);
 
     // -------------------
     // Set up TNNMG solver
     // -------------------
 
-    BitVector totalDirichletNodes;
-    contactNetwork.totalNodes("dirichlet", totalDirichletNodes);
-
-    for (size_t i=0; i<totalDirichletNodes.size(); i++) {
-        bool val = false;
-        for (size_t d=0; d<dims; d++) {
-            val = val || totalDirichletNodes[i][d];
-        }
-
-        totalDirichletNodes[i] = val;
-        for (size_t d=0; d<dims; d++) {
-            totalDirichletNodes[i][d] = val;
-        }
-    }
-
-    //print(totalDirichletNodes, "totalDirichletNodes:");
-
     //using Functional = Functional<Matrix&, Vector&, ZeroNonlinearity&, Vector&, Vector&, field_type>;
     using Functional = Functional<Matrix&, Vector&, GlobalFriction<Matrix, Vector>&, Vector&, Vector&, field_type>;
     using NonlinearFactory = SolverFactory<Functional, BitVector>;
@@ -240,18 +259,12 @@ int main(int argc, char *argv[]) {
     BoundaryFunctions velocityDirichletFunctions;
     contactNetwork.boundaryFunctions("dirichlet", velocityDirichletFunctions);
 
-    BoundaryNodes dirichletNodes;
-    contactNetwork.boundaryNodes("dirichlet", dirichletNodes);
-
     /*for (size_t i=0; i<dirichletNodes.size(); i++) {
         for (size_t j=0; j<dirichletNodes[i].size(); j++) {
         print(*dirichletNodes[i][j], "dirichletNodes_body_" + std::to_string(i) + "_boundary_" + std::to_string(j));
         }
     }*/
 
-    std::vector<const Dune::BitSetVector<1>*> frictionNodes;
-    contactNetwork.frictionNodes(frictionNodes);
-
     /*for (size_t i=0; i<frictionNodes.size(); i++) {
         print(*frictionNodes[i], "frictionNodes_body_" + std::to_string(i));
     }*/
@@ -272,7 +285,6 @@ int main(int argc, char *argv[]) {
             contactNetwork.couplings())
             );
 
-
     auto const refinementTolerance = parset.get<double>("timeSteps.refinementTolerance");
 
     const auto& stateEnergyNorms = contactNetwork.stateEnergyNorms();
@@ -346,21 +358,25 @@ int main(int argc, char *argv[]) {
         stepBase(parset, contactNetwork, totalDirichletNodes, globalFriction, frictionNodes,
                  externalForces, stateEnergyNorms);
 
+    /*UniformTimeStepper<NonlinearFactory, std::decay_t<decltype(contactNetwork)>, Updaters, std::decay_t<decltype(stateEnergyNorms)>>
+        timeStepper(stepBase, contactNetwork, current,
+                            programState.relativeTime, programState.relativeTau); */
+
     AdaptiveTimeStepper<NonlinearFactory, std::decay_t<decltype(contactNetwork)>, Updaters, std::decay_t<decltype(stateEnergyNorms)>>
-        adaptiveTimeStepper(stepBase, contactNetwork, current,
+        timeStepper(stepBase, contactNetwork, current,
                             programState.relativeTime, programState.relativeTau,
                             mustRefine);
 
-    size_t timeSteps = parset.get<size_t>("timeSteps.timeSteps");
+    size_t timeSteps = std::round(parset.get<double>("timeSteps.timeSteps"));
 
-    while (!adaptiveTimeStepper.reachedEnd()) {
+    while (!timeStepper.reachedEnd()) {
       programState.timeStep++;
 
       //preconditioner.build();
-      iterationCount = adaptiveTimeStepper.advance();
+      iterationCount = timeStepper.advance();
 
-      programState.relativeTime = adaptiveTimeStepper.relativeTime_;
-      programState.relativeTau = adaptiveTimeStepper.relativeTau_;
+      programState.relativeTime = timeStepper.relativeTime_;
+      programState.relativeTau = timeStepper.relativeTau_;
       current.rate_->extractDisplacement(programState.u);
       current.rate_->extractVelocity(programState.v);
       current.rate_->extractAcceleration(programState.a);
@@ -374,7 +390,7 @@ int main(int argc, char *argv[]) {
 
       contactNetwork.setDeformation(programState.u);
 
-      ioHandler.write(programState, contactNetwork, globalFriction, iterationCount, false);
+      ioHandler->write(programState, contactNetwork, globalFriction, iterationCount, false);
 
       if (programState.timeStep==timeSteps) {
         std::cout << "limit of timeSteps reached!" << std::endl;
diff --git a/src/multi-body-problem/multi-body-problem.cfg b/src/multi-body-problem/multi-body-problem.cfg
index 244aeb3bfbcd0d21824cefb96961ea6963fd128f..384b352c59baa4cf6c3ad6573c987fdeedd0be1a 100644
--- a/src/multi-body-problem/multi-body-problem.cfg
+++ b/src/multi-body-problem/multi-body-problem.cfg
@@ -1,34 +1,36 @@
 # -*- mode:conf -*-
+[general]
+outPath = newmark-1e4 # output written to ./output/outPath
 gravity         = 9.81  # [m/s^2]
 
 
 [body]
-bulkModulus     = 1.5e5 # [Pa]
-poissonRatio    = 0.11   # [1]
+bulkModulus     = 4.12e7 # [Pa]
+poissonRatio    = 0.3   # [1]
 [body.elastic]
-density         = 1300   # [kg/m^3]
-shearViscosity  = 0   # [Pas]
-bulkViscosity   = 0   # [Pas]
+density         = 5e3   # [kg/m^3]
+shearViscosity  = 0.0   # [Pas]
+bulkViscosity   = 0.0   # [Pas]
 [body.viscoelastic]
-density         = 1300  # [kg/m^3]
-shearViscosity  = 1e4   # [Pas]
-bulkViscosity   = 1e4   # [Pas]
+density         = 5e3  # [kg/m^3]
+shearViscosity  = 0.0   # [Pas]
+bulkViscosity   = 0.0   # [Pas]
 
 
 [boundary.friction]
-C               = 6       # [Pa]
-mu0             = 0.48      # [ ]
-V0              = 1e-3     # [m/s]
-L               = 1e-6  # [m]
-initialAlpha    = 0        # [ ]
+C               = 0       # [Pa]
+mu0             = 0.6      # [ ]
+V0              = 1e-6     # [m/s]
+L               = 1e-5  # [m]
+initialAlpha    = -10        # [ ]
 stateModel      = AgeingLaw
-frictionModel   = Truncated #Regularised
+frictionModel   = Truncated #Truncated #Regularised
 [boundary.friction.weakening]
-a               = 0.054    # [ ]
-b               = 0.074    # [ ]
+a               = 0.010    # [ ]
+b               = 0.015   # [ ]
 [boundary.friction.strengthening]
-a               = 0.054    # [ ]
-b               = 0.074    # [ ]
+a               = 0.010    # [ ]
+b               = 0.015    # [ ]
 
 
 [boundary.neumann]
@@ -36,30 +38,30 @@ sigmaN          =  0.0     # 200.0 [Pa]
 
 
 [boundary.dirichlet]
-finalVelocity   = 1e-4      # [m/s]
+finalVelocity   = 2e-4      # [m/s]
 
 
 [initialTime]
 timeStep = 0
 relativeTime = 0.0
-relativeTau = 2e-4 # 1e-6
+relativeTau = 1e-4 # 1e-6
 
 
 [timeSteps]
 scheme = newmark
-timeSteps = 5
+timeSteps = 1e4
 
 
 [problem]
-finalTime       = 100  # [s] #1000
+finalTime       = 50  # [s] #1000
 bodyCount       = 4
 
 
 [io]
-data.write      = false
+data.write      = true
 printProgress   = true
 restarts.first  = 0
-restarts.spacing= 1 #20
+restarts.spacing= 50 #20
 restarts.write  = true #true
 vtk.write       = true