diff --git a/AMDiS/src/AdaptBase.h b/AMDiS/src/AdaptBase.h
index 0dd035a01e92e835ca3fea1b3f73fcfdcfa5cf8b..0787450bceb58588a6e8bc53431d7520781dd416 100644
--- a/AMDiS/src/AdaptBase.h
+++ b/AMDiS/src/AdaptBase.h
@@ -45,20 +45,20 @@ namespace AMDiS {
      */
     AdaptBase(const std::string& name,
 	      ProblemIterationInterface *problemIteration,
-	      AdaptInfo *adaptInfo,
+	      AdaptInfo *adapt,
 	      ProblemTimeInterface *problemTime = NULL,
 	      AdaptInfo *initialAdaptInfo = NULL)
       : name_(name),
 	problemIteration_(problemIteration),
-	adaptInfo_(adaptInfo),
+	adaptInfo(adapt),
 	problemTime_(problemTime),
 	initialAdaptInfo_(initialAdaptInfo)
-    {};
+    {}
 
     /** \brief
      * Destructor
      */
-    virtual ~AdaptBase() {};
+    virtual ~AdaptBase() {}
 
     /** \brief
      * Pure virtual method. Must be overloaded by sub classes to perform
@@ -71,32 +71,32 @@ namespace AMDiS {
      */
     inline const std::string& getName() const { 
       return name_; 
-    };
+    }
 
     /** \brief
      * Returns \ref problemIteration_
      */
     inline ProblemIterationInterface *getProblemIteration() {
       return problemIteration_;
-    };
+    }
 
     inline void setProblemIteration(ProblemIterationInterface *pii) {
       problemIteration_ = pii;
-    };
+    }
 
     /** \brief
-     * Returns \ref adaptInfo_
+     * Returns \ref adaptInfo
      */
     inline AdaptInfo *getAdaptInfo() { 
-      return adaptInfo_; 
-    };
+      return adaptInfo; 
+    }
 
     /** \brief
      * Returns \ref problemTime_
      */
     inline ProblemTimeInterface *getProblemTime() {
       return problemTime_;
-    };
+    }
 
     inline void setProblemTime(ProblemTimeInterface *pti) {
       problemTime_ = pti;
@@ -107,7 +107,7 @@ namespace AMDiS {
      */
     inline AdaptInfo *getInitialAdaptInfo() { 
       return initialAdaptInfo_; 
-    };
+    }
 
   protected:
     /** \brief
@@ -123,7 +123,7 @@ namespace AMDiS {
     /** \brief
      * Main adapt info
      */
-    AdaptInfo *adaptInfo_;
+    AdaptInfo *adaptInfo;
 
     /** \brief
      * problem time interface
diff --git a/AMDiS/src/AdaptInfo.cc b/AMDiS/src/AdaptInfo.cc
index 66a4aa98f43c85812227d161585a2bbb392fa2ef..4829f3f7ea41f5230ad3e12dba68e759e8d7db50 100644
--- a/AMDiS/src/AdaptInfo.cc
+++ b/AMDiS/src/AdaptInfo.cc
@@ -31,6 +31,7 @@ namespace AMDiS {
     out.write(reinterpret_cast<const char*>(&minTimestep), sizeof(double));
     out.write(reinterpret_cast<const char*>(&maxTimestep), sizeof(double));
     out.write(reinterpret_cast<const char*>(&timestepNumber), sizeof(int));
+    out.write(reinterpret_cast<const char*>(&nTimesteps), sizeof(int));
     out.write(reinterpret_cast<const char*>(&solverIterations), sizeof(int));
     out.write(reinterpret_cast<const char*>(&maxSolverIterations), sizeof(int));
     out.write(reinterpret_cast<const char*>(&solverTolerance), sizeof(double));
@@ -80,6 +81,7 @@ namespace AMDiS {
     in.read(reinterpret_cast<char*>(&minTimestep), sizeof(double));
     in.read(reinterpret_cast<char*>(&maxTimestep), sizeof(double));
     in.read(reinterpret_cast<char*>(&timestepNumber), sizeof(int));
+    in.read(reinterpret_cast<char*>(&nTimesteps), sizeof(int));
     in.read(reinterpret_cast<char*>(&solverIterations), sizeof(int));
     in.read(reinterpret_cast<char*>(&maxSolverIterations), sizeof(int));
     in.read(reinterpret_cast<char*>(&solverTolerance), sizeof(double));
diff --git a/AMDiS/src/AdaptInfo.h b/AMDiS/src/AdaptInfo.h
index b7bcb4166e47ff41f9eedc790abc8c71d2ac507b..ee62973d4cbebe2b4285f948e3dc4998276fe3e8 100644
--- a/AMDiS/src/AdaptInfo.h
+++ b/AMDiS/src/AdaptInfo.h
@@ -165,6 +165,7 @@ namespace AMDiS {
 	minTimestep(0.0),
 	maxTimestep(1.0),
 	timestepNumber(0),
+	nTimesteps(0),
 	solverIterations(0),
 	maxSolverIterations(0),
 	solverTolerance(1e-8),
@@ -183,6 +184,8 @@ namespace AMDiS {
       GET_PARAMETER(0, name_ + "->min timestep", "%f", &minTimestep);
       GET_PARAMETER(0, name_ + "->max timestep", "%f", &maxTimestep);
 
+      GET_PARAMETER(0, name_ + "->number of timesteps", "%d", &nTimesteps);
+
       if (size == 1) {
 	scalContents[0] = new ScalContent(name); 
       } else {
@@ -400,6 +403,11 @@ namespace AMDiS {
       return timestepNumber; 
     }
 
+    /// Returns \ref nTimesteps.
+    inline int getNumberOfTimesteps() {
+      return nTimesteps;
+    }
+
     /** \brief
      * Increments \ref timestepNumber by 1;
      */
@@ -536,6 +544,15 @@ namespace AMDiS {
       return timestep;
     }
 
+    /** \brief
+     * Returns true, if the end time is reached and no more timestep
+     * computations must be done.
+     */
+    inline bool reachedEndTime() {
+      return !(time < endTime - DBL_TOL ||
+	       (nTimesteps > 0 && timestepNumber < nTimesteps));
+    }
+
     /** \brief
      * Gets \ref timestep
      */
@@ -798,6 +815,13 @@ namespace AMDiS {
      * Number of current time step
      */
     int timestepNumber;
+
+    /** \brief
+     * Per default this value is 0 and not used. If it is set to a non-zero value,
+     * the computation of the stationary problem is done nTimesteps times with a
+     * fixed timestep.
+     */
+    int nTimesteps;
   
     /** \brief
      * number of iterations needed of linear or nonlinear solver
diff --git a/AMDiS/src/AdaptInstationary.cc b/AMDiS/src/AdaptInstationary.cc
index 7a810425703c5af39c94b74c9999f2f6407988e5..7f0575121695a11fa1142d5580ba30133be084d5 100644
--- a/AMDiS/src/AdaptInstationary.cc
+++ b/AMDiS/src/AdaptInstationary.cc
@@ -78,24 +78,24 @@ namespace AMDiS {
     FUNCNAME("AdaptInstationary::explicitTimeStrategy()");
 
     // estimate before first adaption
-    if (adaptInfo_->getTime() <= adaptInfo_->getStartTime()) {
-      problemIteration_->oneIteration(adaptInfo_, ESTIMATE);
+    if (adaptInfo->getTime() <= adaptInfo->getStartTime()) {
+      problemIteration_->oneIteration(adaptInfo, ESTIMATE);
     }
 
     // increment time
-    adaptInfo_->setTime(adaptInfo_->getTime() + adaptInfo_->getTimestep());
+    adaptInfo->setTime(adaptInfo->getTime() + adaptInfo->getTimestep());
 
-    problemTime_->setTime(adaptInfo_);
+    problemTime_->setTime(adaptInfo);
 
     INFO(info_,6)("time = %e, timestep = %e\n",
-		  adaptInfo_->getTime(), adaptInfo_->getTimestep());
+		  adaptInfo->getTime(), adaptInfo->getTimestep());
 
-    adaptInfo_->setSpaceIteration(0);
+    adaptInfo->setSpaceIteration(0);
   
     // do the iteration
-    problemIteration_->beginIteration(adaptInfo_);
-    problemIteration_->oneIteration(adaptInfo_, FULL_ITERATION);
-    problemIteration_->endIteration(adaptInfo_);
+    problemIteration_->beginIteration(adaptInfo);
+    problemIteration_->oneIteration(adaptInfo, FULL_ITERATION);
+    problemIteration_->endIteration(adaptInfo);
   }
 
   void AdaptInstationary::implicitTimeStrategy()
@@ -103,66 +103,66 @@ namespace AMDiS {
     FUNCNAME("AdaptInstationary::implicitTimeStrategy()");
 
     do {
-      adaptInfo_->setTime(adaptInfo_->getTime() + adaptInfo_->getTimestep());
-      problemTime_->setTime(adaptInfo_);
+      adaptInfo->setTime(adaptInfo->getTime() + adaptInfo->getTimestep());
+      problemTime_->setTime(adaptInfo);
 
       INFO(info_,6)("time = %e, try timestep = %e\n",
-		    adaptInfo_->getTime(), adaptInfo_->getTimestep());
+		    adaptInfo->getTime(), adaptInfo->getTimestep());
     
-      problemIteration_->oneIteration(adaptInfo_, NO_ADAPTION);
+      problemIteration_->oneIteration(adaptInfo, NO_ADAPTION);
 
-      adaptInfo_->incTimestepIteration();
+      adaptInfo->incTimestepIteration();
 
       if (!fixedTimestep_ && 
-	  !adaptInfo_->timeToleranceReached() &&
-	  !adaptInfo_->getTimestep() <= adaptInfo_->getMinTimestep()) {
+	  !adaptInfo->timeToleranceReached() &&
+	  !adaptInfo->getTimestep() <= adaptInfo->getMinTimestep()) {
 
-	adaptInfo_->setTime(adaptInfo_->getTime() - adaptInfo_->getTimestep());
-	adaptInfo_->setTimestep(adaptInfo_->getTimestep() * time_delta_1);
+	adaptInfo->setTime(adaptInfo->getTime() - adaptInfo->getTimestep());
+	adaptInfo->setTimestep(adaptInfo->getTimestep() * time_delta_1);
 	continue;
       }
 
-      adaptInfo_->setSpaceIteration(0);
+      adaptInfo->setSpaceIteration(0);
 
 
       /* === Do only space iterations only if the maximum is higher than 0. === */
 
-      if (adaptInfo_->getMaxSpaceIteration() > 0) {
+      if (adaptInfo->getMaxSpaceIteration() > 0) {
     
 	/* === Space iterations === */
 	do {
-	  problemIteration_->beginIteration(adaptInfo_);
+	  problemIteration_->beginIteration(adaptInfo);
 	  
-	  if (problemIteration_->oneIteration(adaptInfo_, FULL_ITERATION)) {
+	  if (problemIteration_->oneIteration(adaptInfo, FULL_ITERATION)) {
 	    if (!fixedTimestep_ && 
-		!adaptInfo_->timeToleranceReached() &&
-		!adaptInfo_->getTimestep() <= adaptInfo_->getMinTimestep()) 
+		!adaptInfo->timeToleranceReached() &&
+		!adaptInfo->getTimestep() <= adaptInfo->getMinTimestep()) 
 	      {
-		adaptInfo_->setTime(adaptInfo_->getTime() - adaptInfo_->getTimestep());
-		adaptInfo_->setTimestep(adaptInfo_->getTimestep() * time_delta_1);
-		problemIteration_->endIteration(adaptInfo_);
-		adaptInfo_->incSpaceIteration();
+		adaptInfo->setTime(adaptInfo->getTime() - adaptInfo->getTimestep());
+		adaptInfo->setTimestep(adaptInfo->getTimestep() * time_delta_1);
+		problemIteration_->endIteration(adaptInfo);
+		adaptInfo->incSpaceIteration();
 		break;
 	      }	
 	  }
 
-	  adaptInfo_->incSpaceIteration();
-	  problemIteration_->endIteration(adaptInfo_);
+	  adaptInfo->incSpaceIteration();
+	  problemIteration_->endIteration(adaptInfo);
 	  
-	} while(!adaptInfo_->spaceToleranceReached() && 
-		adaptInfo_->getSpaceIteration() <= adaptInfo_->getMaxSpaceIteration());
+	} while(!adaptInfo->spaceToleranceReached() && 
+		adaptInfo->getSpaceIteration() <= adaptInfo->getMaxSpaceIteration());
 
       } else {
-	problemIteration_->endIteration(adaptInfo_);
+	problemIteration_->endIteration(adaptInfo);
       }
 
 
-    } while(!adaptInfo_->timeToleranceReached() &&
-	    !adaptInfo_->getTimestep() <= adaptInfo_->getMinTimestep() && 
-	    adaptInfo_->getTimestepIteration() <= adaptInfo_->getMaxTimestepIteration());  
+    } while(!adaptInfo->timeToleranceReached() &&
+	    !adaptInfo->getTimestep() <= adaptInfo->getMinTimestep() && 
+	    adaptInfo->getTimestepIteration() <= adaptInfo->getMaxTimestepIteration());  
 
-    if (!fixedTimestep_ && adaptInfo_->timeErrorLow()) {
-      adaptInfo_->setTimestep(adaptInfo_->getTimestep() *time_delta_2);
+    if (!fixedTimestep_ && adaptInfo->timeErrorLow()) {
+      adaptInfo->setTimestep(adaptInfo->getTimestep() *time_delta_2);
       if (dbgMode) {
 	// print information about timestep increase
       }
@@ -173,8 +173,8 @@ namespace AMDiS {
 	if (fixedTimestep_) {
 	  std::cout << "   fixedTimestep = true\n";	
 	}
-	if (!adaptInfo_->timeErrorLow()) {
-	  adaptInfo_->printTimeErrorLowInfo();
+	if (!adaptInfo->timeErrorLow()) {
+	  adaptInfo->printTimeErrorLowInfo();
 	}
       }
     }
@@ -184,7 +184,7 @@ namespace AMDiS {
   {
     FUNCNAME("AdaptInstationary::oneTimestep()");
 
-    adaptInfo_->setTimestepIteration(0);
+    adaptInfo->setTimestepIteration(0);
 
     switch (strategy) {
     case 0:
@@ -198,7 +198,7 @@ namespace AMDiS {
       explicitTimeStrategy();
     }
 
-    adaptInfo_->incTimestepNumber();
+    adaptInfo->incTimestepNumber();
   }
 
   int AdaptInstationary::adapt()
@@ -207,35 +207,33 @@ namespace AMDiS {
 
     int errorCode = 0;
 
-    TEST_EXIT(adaptInfo_->getTimestep() >= adaptInfo_->getMinTimestep())
+    TEST_EXIT(adaptInfo->getTimestep() >= adaptInfo->getMinTimestep())
       ("timestep < min timestep\n");
-    TEST_EXIT(adaptInfo_->getTimestep() <= adaptInfo_->getMaxTimestep())
+    TEST_EXIT(adaptInfo->getTimestep() <= adaptInfo->getMaxTimestep())
       ("timestep > max timestep\n");
 
-    TEST_EXIT(adaptInfo_->getTimestep() > 0)("timestep <= 0!\n");
+    TEST_EXIT(adaptInfo->getTimestep() > 0)("timestep <= 0!\n");
 
-    if (adaptInfo_->getTimestepNumber() == 0) {
-      adaptInfo_->setTime(adaptInfo_->getStartTime());
-      initialAdaptInfo_->setStartTime(adaptInfo_->getStartTime());
-      initialAdaptInfo_->setTime(adaptInfo_->getStartTime());
+    if (adaptInfo->getTimestepNumber() == 0) {
+      adaptInfo->setTime(adaptInfo->getStartTime());
+      initialAdaptInfo_->setStartTime(adaptInfo->getStartTime());
+      initialAdaptInfo_->setTime(adaptInfo->getStartTime());
 
-      problemTime_->setTime(adaptInfo_);
+      problemTime_->setTime(adaptInfo);
 
       // initial adaption
       problemTime_->solveInitialProblem(initialAdaptInfo_);
-      problemTime_->transferInitialSolution(adaptInfo_);
+      problemTime_->transferInitialSolution(adaptInfo);
     }
 
-    while (adaptInfo_->getTime() < adaptInfo_->getEndTime() - DBL_TOL) {
+    while (!adaptInfo->reachedEndTime()) {
       iterationTimestamp_ = time(NULL);
 
-      problemTime_->initTimestep(adaptInfo_);
-
+      problemTime_->initTimestep(adaptInfo);
       oneTimestep();
+      problemTime_->closeTimestep(adaptInfo);
 
-      problemTime_->closeTimestep(adaptInfo_);
-
-      if (breakWhenStable && (adaptInfo_->getSolverIterations() == 0)) {
+      if (breakWhenStable && (adaptInfo->getSolverIterations() == 0)) {
 	break;
       }
 
@@ -277,7 +275,7 @@ namespace AMDiS {
     FUNCNAME("AdaptInstationary::serialize()");
 
     problemIteration_->serialize(out);
-    adaptInfo_->serialize(out);
+    adaptInfo->serialize(out);
     if (problemTime_) {
       problemTime_->serialize(out);
     }
@@ -288,7 +286,7 @@ namespace AMDiS {
     FUNCNAME("AdaptInstationary::deserialize()");
 
     problemIteration_->deserialize(in);
-    adaptInfo_->deserialize(in);
+    adaptInfo->deserialize(in);
     if (problemTime_) {
       problemTime_->deserialize(in);
     }
diff --git a/AMDiS/src/AdaptInstationary.h b/AMDiS/src/AdaptInstationary.h
index 1cbf8cf79466cfd2e94e6a29f6e730027f403ca0..83f87a3c2a3d22a70d7355c77c5cf087fa5dcb2b 100644
--- a/AMDiS/src/AdaptInstationary.h
+++ b/AMDiS/src/AdaptInstationary.h
@@ -78,7 +78,7 @@ namespace AMDiS {
      */
     const int getStrategy() const {
       return strategy;
-    };
+    }
 
     /** \brief
      * Implementation of AdaptBase::adapt()
diff --git a/AMDiS/src/AdaptStationary.cc b/AMDiS/src/AdaptStationary.cc
index 62a297d153258dd0d2e69217db19c6314a117669..b5265570007526a9bb60596e00a7f42c0b0fe63d 100644
--- a/AMDiS/src/AdaptStationary.cc
+++ b/AMDiS/src/AdaptStationary.cc
@@ -20,26 +20,26 @@ namespace AMDiS {
     FUNCNAME("AdaptStationary::adapt()");
 
     // initial iteration
-    if (adaptInfo_->getSpaceIteration() == -1) {
-      problemIteration_->beginIteration(adaptInfo_);
-      problemIteration_->oneIteration(adaptInfo_, NO_ADAPTION);
-      problemIteration_->endIteration(adaptInfo_);
-      adaptInfo_->incSpaceIteration();
+    if (adaptInfo->getSpaceIteration() == -1) {
+      problemIteration_->beginIteration(adaptInfo);
+      problemIteration_->oneIteration(adaptInfo, NO_ADAPTION);
+      problemIteration_->endIteration(adaptInfo);
+      adaptInfo->incSpaceIteration();
     }
 
     // adaption loop
-    while (!adaptInfo_->spaceToleranceReached() && 
-	   (adaptInfo_->getSpaceIteration() < adaptInfo_->getMaxSpaceIteration() || 
-	    adaptInfo_->getMaxSpaceIteration() < 0) ) {
+    while (!adaptInfo->spaceToleranceReached() && 
+	   (adaptInfo->getSpaceIteration() < adaptInfo->getMaxSpaceIteration() || 
+	    adaptInfo->getMaxSpaceIteration() < 0) ) {
 
-      problemIteration_->beginIteration(adaptInfo_);
-      Flag adapted = problemIteration_->oneIteration(adaptInfo_, FULL_ITERATION);
-      problemIteration_->endIteration(adaptInfo_);
+      problemIteration_->beginIteration(adaptInfo);
+      Flag adapted = problemIteration_->oneIteration(adaptInfo, FULL_ITERATION);
+      problemIteration_->endIteration(adaptInfo);
       
       if (!adapted) 
 	break;
       
-      adaptInfo_->incSpaceIteration();
+      adaptInfo->incSpaceIteration();
     }
 
     return 0;
diff --git a/AMDiS/src/AdaptStationary.h b/AMDiS/src/AdaptStationary.h
index 9b457e3705c2db2a9bcba5c03c0c82381cb6f327..2b2440b839ba2e8378c82ea8456c5a1bcd7646e8 100644
--- a/AMDiS/src/AdaptStationary.h
+++ b/AMDiS/src/AdaptStationary.h
@@ -65,7 +65,7 @@ namespace AMDiS {
     /** \brief
      * Destructor
      */
-    virtual ~AdaptStationary() {};
+    virtual ~AdaptStationary() {}
 
     /** \brief
      * Implementation of AdaptBase::adapt()
diff --git a/AMDiS/src/parareal/AdaptParaReal.cc b/AMDiS/src/parareal/AdaptParaReal.cc
index 9ddf1176bdb8cccd766ff2f0804a4349d6e4cad5..283009b6029a5749885728ed9c1615f9705e56a1 100644
--- a/AMDiS/src/parareal/AdaptParaReal.cc
+++ b/AMDiS/src/parareal/AdaptParaReal.cc
@@ -5,11 +5,11 @@ namespace AMDiS {
   int AdaptParaReal::adapt()
   {    
     // Compute number of coarse and fine time stages.
-    int coarseStages = static_cast<int>(round(adaptInfo_->getEndTime() / coarseTimestep));
+    int coarseStages = static_cast<int>(round(adaptInfo->getEndTime() / coarseTimestep));
     int fineStages = static_cast<int>(round(coarseTimestep / fineTimestep));
 
     // First, sequentially calculate first approximation on coarse time grid.
-    adaptInfo_->setTimestep(coarseTimestep);
+    adaptInfo->setTimestep(coarseTimestep);
     pararealProb->setStoreSolutions(false, true);
     pararealProb->setStoreInitSolution(true);
     pararealProb->setInitSolutionVec(NULL);
@@ -19,9 +19,9 @@ namespace AMDiS {
     for (int k = 0; k < pararealIter; k++) {
       // Compute solutions with fine timestep on the coarse grid slides.
       for (int i = 0; i < coarseStages; i++) {
-	adaptInfo_->resetTimeValues(fineTimestep,
-				    i * coarseTimestep,
-				    (i + 1) *coarseTimestep);
+	adaptInfo->resetTimeValues(fineTimestep,
+				   i * coarseTimestep,
+				   (i + 1) *coarseTimestep);
 	pararealProb->setStoreSolutions(true, false);
 	pararealProb->setStoreInitSolution(false);
 	pararealProb->setInitSolutionVec((*pararealProb->getCoarseSolutions())[i]);
@@ -38,7 +38,7 @@ namespace AMDiS {
       
       // Again, compute solutions on coarse grid and calculate the corrected solutions.
       for (int i = 1; i <= coarseStages; i++) {
-	adaptInfo_->resetTimeValues(coarseTimestep,
+	adaptInfo->resetTimeValues(coarseTimestep,
 				    (i - 1) * coarseTimestep,
 				    i * coarseTimestep);
 	pararealProb->setStoreSolutions(false, true);