diff --git a/examples/heat-equation/tnl-heat-equation-eoc.h b/examples/heat-equation/tnl-heat-equation-eoc.h
index cc432b9e37b54f5d33a90584427a2aff6722f758..7001a2d71c0dc45166468a752844847794c0cc82 100644
--- a/examples/heat-equation/tnl-heat-equation-eoc.h
+++ b/examples/heat-equation/tnl-heat-equation-eoc.h
@@ -19,8 +19,8 @@
 #define TNL_HEAT_EQUATION_EOC_H_
 
 #include <solvers/tnlSolver.h>
-#include <solvers/tnlFastBuildConfig.h>
-#include <solvers/tnlConfigTags.h>
+#include <solvers/tnlFastBuildConfigTag.h>
+#include <solvers/tnlBuildConfigTags.h>
 #include <functors/tnlTestFunction.h>
 #include <operators/diffusion/tnlLinearDiffusion.h>
 #include <operators/diffusion/tnlExactLinearDiffusion.h>
@@ -28,7 +28,7 @@
 #include <problems/tnlHeatEquationEocRhs.h>
 #include <problems/tnlHeatEquationEocProblem.h>
 
-//typedef tnlDefaultConfigTag BuildConfig;
+//typedef tnlDefaultBuildConfigTag BuildConfig;
 typedef tnlFastBuildConfig BuildConfig;
 
 template< typename ConfigTag >
diff --git a/examples/heat-equation/tnl-heat-equation.h b/examples/heat-equation/tnl-heat-equation.h
index 8f4c1f835abaa4a283ff2c23e66e17615890988a..77c3121bc4718c06921cb67789224054ff1ed041 100644
--- a/examples/heat-equation/tnl-heat-equation.h
+++ b/examples/heat-equation/tnl-heat-equation.h
@@ -19,8 +19,8 @@
 #define TNL_HEAT_EQUATION_H_
 
 #include <solvers/tnlSolver.h>
-#include <solvers/tnlFastBuildConfig.h>
-#include <solvers/tnlConfigTags.h>
+#include <solvers/tnlFastBuildConfigTag.h>
+#include <solvers/tnlBuildConfigTags.h>
 #include <operators/diffusion/tnlLinearDiffusion.h>
 #include <operators/tnlAnalyticDirichletBoundaryConditions.h>
 #include <operators/tnlDirichletBoundaryConditions.h>
@@ -29,7 +29,7 @@
 #include <functors/tnlConstantFunction.h>
 #include <problems/tnlHeatEquationProblem.h>
 
-//typedef tnlDefaultConfigTag BuildConfig;
+//typedef tnlDefaultBuildConfigTag BuildConfig;
 typedef tnlFastBuildConfig BuildConfig;
 
 template< typename ConfigTag >
@@ -106,8 +106,7 @@ class heatEquationSetter
 
 int main( int argc, char* argv[] )
 {
-   tnlSolver< heatEquationSetter, heatEquationConfig, BuildConfig > solver;
-   if( ! solver. run( argc, argv ) )
+   if( ! tnlSolver< heatEquationSetter, heatEquationConfig, BuildConfig >::run( argc, argv ) )
       return EXIT_FAILURE;
    return EXIT_SUCCESS;
 }
diff --git a/src/core/cuda/cuda-reduction_impl.h b/src/core/cuda/cuda-reduction_impl.h
index 5b818c158af7d6bd3d84ba4d2d6ea413b6709f07..e374454acab270f27bd7d1e0e6ad954c9207bb23 100644
--- a/src/core/cuda/cuda-reduction_impl.h
+++ b/src/core/cuda/cuda-reduction_impl.h
@@ -282,8 +282,8 @@ typename Operation :: IndexType reduceOnCudaDevice( const Operation& operation,
    typedef typename Operation :: RealType RealType;
    typedef typename Operation :: ResultType ResultType;
 
-   const IndexType desBlockSize( 512 );
-   const IndexType desGridSize( 2048 );
+   const IndexType desBlockSize( 256 );
+   const IndexType desGridSize( 65536 );
    dim3 blockSize( 0 ), gridSize( 0 );
 
    /***
diff --git a/src/problems/tnlHeatEquationProblem.h b/src/problems/tnlHeatEquationProblem.h
index 8a41a409654b6e297667406cb7b209c87bd43db6..f1356515c047961790afb9f8d44dc6e5749656f9 100644
--- a/src/problems/tnlHeatEquationProblem.h
+++ b/src/problems/tnlHeatEquationProblem.h
@@ -42,6 +42,7 @@ class tnlHeatEquationProblem : public tnlPDEProblem< Mesh,
 
       using typename BaseType::MeshType;
       using typename BaseType::DofVectorType;
+      using typename BaseType::MeshDependentDataType;
 
       static tnlString getTypeStatic();
 
@@ -55,7 +56,7 @@ class tnlHeatEquationProblem : public tnlPDEProblem< Mesh,
       bool setInitialCondition( const tnlParameterContainer& parameters,
                                 const MeshType& mesh,
                                 DofVectorType& dofs,
-                                DofVectorType& auxDofs );
+                                MeshDependentDataType& meshDependentData );
 
       template< typename Matrix >
       bool setupLinearSystem( const MeshType& mesh,
@@ -65,7 +66,7 @@ class tnlHeatEquationProblem : public tnlPDEProblem< Mesh,
                          const IndexType& step,
                          const MeshType& mesh,
                          DofVectorType& dofs,
-                         DofVectorType& auxDofs );
+                         MeshDependentDataType& meshDependentData );
 
       IndexType getDofs( const MeshType& mesh ) const;
 
@@ -76,6 +77,7 @@ class tnlHeatEquationProblem : public tnlPDEProblem< Mesh,
                            const RealType& tau,
                            const MeshType& mesh,
                            DofVectorType& _u,
+                           MeshDependentDataType& meshDependentData,
                            DofVectorType& _fu );
 
       template< typename Matrix >
@@ -83,7 +85,7 @@ class tnlHeatEquationProblem : public tnlPDEProblem< Mesh,
                                  const RealType& tau,
                                  const MeshType& mesh,
                                  DofVectorType& dofs,
-                                 DofVectorType& auxDofs,
+                                 MeshDependentDataType& meshDependentData,
                                  Matrix& matrix,
                                  DofVectorType& rightHandSide );
 
diff --git a/src/problems/tnlHeatEquationProblem_impl.h b/src/problems/tnlHeatEquationProblem_impl.h
index 0f30069de8c850bae3f5a4f144320259ab238ff4..021c4cff6e03041434688274d5a7bd710cd1977f 100644
--- a/src/problems/tnlHeatEquationProblem_impl.h
+++ b/src/problems/tnlHeatEquationProblem_impl.h
@@ -109,7 +109,7 @@ tnlHeatEquationProblem< Mesh, BoundaryCondition, RightHandSide, DifferentialOper
 setInitialCondition( const tnlParameterContainer& parameters,
                      const MeshType& mesh,
                      DofVectorType& dofs,
-                     DofVectorType& auxiliaryDofs )
+                     MeshDependentDataType& meshDependentData )
 {
    this->bindDofs( mesh, dofs );
    const tnlString& initialConditionFile = parameters.getParameter< tnlString >( "initial-condition" );
@@ -158,7 +158,7 @@ makeSnapshot( const RealType& time,
               const IndexType& step,
               const MeshType& mesh,
               DofVectorType& dofs,
-              DofVectorType& auxiliaryDofs )
+              MeshDependentDataType& meshDependentData )
 {
    cout << endl << "Writing output at time " << time << " step " << step << "." << endl;
 
@@ -181,6 +181,7 @@ getExplicitRHS( const RealType& time,
                 const RealType& tau,
                 const MeshType& mesh,
                 DofVectorType& u,
+                MeshDependentDataType& meshDependentData,
                 DofVectorType& fu )
 {
    /****
@@ -220,7 +221,7 @@ assemblyLinearSystem( const RealType& time,
                       const RealType& tau,
                       const MeshType& mesh,
                       DofVectorType& u,
-                      DofVectorType& auxDofs,
+                      MeshDependentDataType& meshDependentData,
                       Matrix& matrix,
                       DofVectorType& b )
 {
@@ -244,6 +245,26 @@ assemblyLinearSystem( const RealType& time,
    cout << endl << b << endl;
    cout << endl << u << endl;
    abort();*/
+   /*cout << "Matrix multiplication test ..." << endl;
+   tnlVector< RealType, DeviceType, IndexType > y;
+   y.setLike( u );
+   tnlTimerRT timer;
+   timer.reset();
+   timer.start();
+   for( int i = 0; i < 100; i++ )
+      matrix.vectorProduct( u, y );
+   timer.stop();
+   cout << "The time is " << timer.getTime();
+   cout << "Scalar product test ..." << endl;
+   timer.reset();
+   RealType a;
+   timer.start();
+   for( int i = 0; i < 100; i++ )
+      a = y.scalarProduct( u );
+   timer.stop();
+   cout << "The time is " << timer.getTime();
+   cout << endl;
+   abort();*/
 }
 
 #endif /* TNLHEATEQUATIONPROBLEM_IMPL_H_ */
diff --git a/src/problems/tnlPDEProblem.h b/src/problems/tnlPDEProblem.h
index 12d8b5d21e34bc11af71862224296bcfe0b8b36f..7be3d7f0a161a2c0a7295961c73c4d94bad6bb16 100644
--- a/src/problems/tnlPDEProblem.h
+++ b/src/problems/tnlPDEProblem.h
@@ -61,14 +61,13 @@ class tnlPDEProblem : public tnlProblem< Real, Device, Index >
                        const RealType& tau,
                        const MeshType& mesh,
                        DofVectorType& dofs,
-                       DofVectorType& auxDofs );
+                       MeshDependentDataType& meshDependentData );
 
       bool postIterate( const RealType& time,
                         const RealType& tau,
                         const MeshType& mesh,
                         DofVectorType& dofs,
-                        DofVectorType& auxDofs );
-
+                        MeshDependentDataType& meshDependentData );
 
       tnlSolverMonitor< RealType, IndexType >* getSolverMonitor();
 
diff --git a/src/solvers/CMakeLists.txt b/src/solvers/CMakeLists.txt
index cd08601fdbdeaa3478c1da158037a21d095d8bc9..befbe5500a3fb236123bae2e3c4130577217de98 100755
--- a/src/solvers/CMakeLists.txt
+++ b/src/solvers/CMakeLists.txt
@@ -6,8 +6,8 @@ ADD_SUBDIRECTORY( preconditioners )
 
 SET( headers tnlIterativeSolver.h
              tnlIterativeSolver_impl.h
-             tnlConfigTags.h
-             tnlFastBuildConfig.h
+             tnlBuildConfigTags.h
+             tnlFastBuildConfigTag.h
              tnlMeshTypeResolver.h
              tnlMeshTypeResolver_impl.h
              tnlSolver.h
diff --git a/src/solvers/pde/tnlExplicitTimeStepper.h b/src/solvers/pde/tnlExplicitTimeStepper.h
index 136cfac9ed4cf1f40d53cfab723bf3a2ee78a9d6..9d3dc11a2754673c08fc008b6ebeabb0caa354fd 100644
--- a/src/solvers/pde/tnlExplicitTimeStepper.h
+++ b/src/solvers/pde/tnlExplicitTimeStepper.h
@@ -38,6 +38,7 @@ class tnlExplicitTimeStepper
    typedef typename Problem::IndexType IndexType;
    typedef typename Problem::MeshType MeshType;
    typedef typename ProblemType::DofVectorType DofVectorType;
+   typedef typename ProblemType::MeshDependentDataType MeshDependentDataType;
 
    tnlExplicitTimeStepper();
 
@@ -63,7 +64,7 @@ class tnlExplicitTimeStepper
                const RealType& stopTime,
                const MeshType& mesh,
                DofVectorType& dofVector,
-               DofVectorType& auxiliaryDofVector );
+               MeshDependentDataType& meshDependentData );
 
    void getExplicitRHS( const RealType& time,
                         const RealType& tau,
@@ -82,7 +83,7 @@ class tnlExplicitTimeStepper
 
    RealType timeStep;
 
-   DofVectorType* auxiliaryDofs;
+   MeshDependentDataType* meshDependentData;
    
    tnlTimerRT explicitUpdaterTimer;
 };
diff --git a/src/solvers/pde/tnlExplicitTimeStepper_impl.h b/src/solvers/pde/tnlExplicitTimeStepper_impl.h
index f5bf117ef68414fe6c3f757ccc8875467f655814..e47e0c562eeaa1f0040abc80e4763897330dc04c 100644
--- a/src/solvers/pde/tnlExplicitTimeStepper_impl.h
+++ b/src/solvers/pde/tnlExplicitTimeStepper_impl.h
@@ -110,7 +110,7 @@ solve( const RealType& time,
        const RealType& stopTime,
        const MeshType& mesh,
        DofVectorType& dofVector,
-       DofVectorType& auxiliaryDofVector )
+       MeshDependentDataType& meshDependentData )
 {
    tnlAssert( this->odeSolver, );
    this->odeSolver->setTau( this -> timeStep );
@@ -120,7 +120,7 @@ solve( const RealType& time,
    if( this->odeSolver->getMinIterations() )
       this->odeSolver->setMaxTau( ( stopTime - time ) / ( typename OdeSolver< Problem >::RealType ) this->odeSolver->getMinIterations() );
    this->mesh = &mesh;
-   this->auxiliaryDofs = &auxiliaryDofVector;
+   this->meshDependentData = &meshDependentData;
    return this->odeSolver->solve( dofVector );
 }
 
@@ -137,20 +137,20 @@ getExplicitRHS( const RealType& time,
                                     tau,
                                     *( this->mesh),
                                     u,
-                                    *( this->auxiliaryDofs ) ) )
+                                    *( this->meshDependentData ) ) )
    {
       cerr << endl << "Preiteration failed." << endl;
       return;
       //return false; // TODO: throw exception
    }
    this->explicitUpdaterTimer.start();   
-   this->problem->getExplicitRHS( time, tau, *( this->mesh ), u, fu );
+   this->problem->getExplicitRHS( time, tau, *( this->mesh ), u, fu, *( this->meshDependentData ) );
    this->explicitUpdaterTimer.stop();
    if( ! this->problem->postIterate( time,
                                      tau,
                                      *( this->mesh ),
                                      u,
-                                     *( this->auxiliaryDofs ) ) )
+                                     *( this->meshDependentData ) ) )
    {
       cerr << endl << "Postiteration failed." << endl;
       return;
diff --git a/src/solvers/pde/tnlPDESolver.h b/src/solvers/pde/tnlPDESolver.h
index ff495a772f5a44b2fc0777a16cb151472a46d4da..87c1f18e5b36a0814455703c9d689a54004f043b 100644
--- a/src/solvers/pde/tnlPDESolver.h
+++ b/src/solvers/pde/tnlPDESolver.h
@@ -91,8 +91,6 @@ class tnlPDESolver : public tnlObject
 
       DofVectorType dofs;
 
-      DofVectorType auxiliaryDofs;
-
       MeshDependentDataType meshDependentData;
 
       TimeStepper* timeStepper;
diff --git a/src/solvers/pde/tnlPDESolver_impl.h b/src/solvers/pde/tnlPDESolver_impl.h
index 8e369ca77d03f537d494eaa4cb3fede8e09d9dd1..3b5282e7410d5813f540180bf1965e35babf6ab0 100644
--- a/src/solvers/pde/tnlPDESolver_impl.h
+++ b/src/solvers/pde/tnlPDESolver_impl.h
@@ -35,7 +35,7 @@ tnlPDESolver()
   computeCpuTimer( 0 )
 {
    this->dofs.setName( "dofs" );
-   this->auxiliaryDofs.setName( "auxiliaryDofs" );
+   this->meshDependentData.setName( "meshDependentData" );
 }
 
 template< typename Problem,
@@ -87,20 +87,20 @@ setup( const tnlParameterContainer& parameters,
    }
    cout << " [ OK ]" << endl;
    this->dofs.setValue( 0.0 );
-   this->problem->bindDofs( mesh, this->dofs );
+   this->problem->bindDofs( this->mesh, this->dofs );
    
    /****
     * Set mesh dependent data
     */
-   this->problem->setMeshDependentData( mesh, this->meshDependentData );
-   this->problem->bindMeshDependentData( mesh, this->meshDependentData );
+   this->problem->setMeshDependentData( this->mesh, this->meshDependentData );
+   this->problem->bindMeshDependentData( this->mesh, this->meshDependentData );
    
    /***
     * Set-up the initial condition
     */
    cout << "Setting up the initial condition ... ";
    typedef typename Problem :: DofVectorType DofVectorType;
-   if( ! this->problem->setInitialCondition( parameters, mesh, this->dofs, this->auxiliaryDofs ) )
+   if( ! this->problem->setInitialCondition( parameters, this->mesh, this->dofs, this->meshDependentData ) )
       return false;
    cout << " [ OK ]" << endl;
 
@@ -329,22 +329,24 @@ solve()
    RealType t( this->initialTime );
    IndexType step( 0 );
    IndexType allSteps = ceil( ( this->finalTime - this->initialTime ) / this->snapshotPeriod );
-   this->timeStepper->setProblem( * ( this->problem ) );
-   this->timeStepper->init( mesh );
-   this->problem->bindDofs( mesh, this->dofs );
-   this->problem->bindMeshDependentData( mesh, this->meshDependentData );
 
-   if( ! this->problem->makeSnapshot( t, step, mesh, this->dofs, this->auxiliaryDofs ) )
+   if( ! this->problem->makeSnapshot( t, step, mesh, this->dofs, this->meshDependentData ) )
    {
       cerr << "Making the snapshot failed." << endl;
       return false;
    }
-   timeStepper->setTimeStep( this->timeStep * pow( mesh.getSmallestSpaceStep(), this->timeStepOrder ) );
+
+   /****
+    * Initialize the time stepper
+    */
+   this->timeStepper->setProblem( * ( this->problem ) );
+   this->timeStepper->init( this->mesh );
+   this->timeStepper->setTimeStep( this->timeStep * pow( mesh.getSmallestSpaceStep(), this->timeStepOrder ) );
    while( step < allSteps )
    {
       RealType tau = Min( this -> snapshotPeriod,
                           this -> finalTime - t );
-      if( ! this->timeStepper->solve( t, t + tau, mesh, this->dofs, this->auxiliaryDofs ) )
+      if( ! this->timeStepper->solve( t, t + tau, mesh, this->dofs, this->meshDependentData ) )
          return false;
       step ++;
       t += tau;
@@ -354,7 +356,7 @@ solve()
       this->computeRtTimer->stop();
       this->computeCpuTimer->stop();
 
-      if( ! this->problem->makeSnapshot( t, step, mesh, this->dofs, this->auxiliaryDofs ) )
+      if( ! this->problem->makeSnapshot( t, step, mesh, this->dofs, this->meshDependentData ) )
       {
          cerr << "Making the snapshot failed." << endl;
          return false;
diff --git a/src/solvers/pde/tnlSemiImplicitTimeStepper.h b/src/solvers/pde/tnlSemiImplicitTimeStepper.h
index b8dbe74f8da54bd30b957b86de724b7721fa3626..ab23a123dd6639794142e0dad15bc25206a41bb8 100644
--- a/src/solvers/pde/tnlSemiImplicitTimeStepper.h
+++ b/src/solvers/pde/tnlSemiImplicitTimeStepper.h
@@ -33,6 +33,7 @@ class tnlSemiImplicitTimeStepper
    typedef typename Problem::IndexType IndexType;
    typedef typename Problem::MeshType MeshType;
    typedef typename ProblemType::DofVectorType DofVectorType;
+   typedef typename ProblemType::MeshDependentDataType MeshDependentDataType;
    typedef LinearSystemSolver LinearSystemSolverType;
    typedef typename ProblemType::MatrixType MatrixType;
 
@@ -62,7 +63,7 @@ class tnlSemiImplicitTimeStepper
                const RealType& stopTime,
                const MeshType& mesh,
                DofVectorType& dofVector,
-               DofVectorType& auxiliaryDofVector );
+               MeshDependentDataType& meshDependentData );
    
    bool writeEpilog( tnlLogger& logger );
 
diff --git a/src/solvers/pde/tnlSemiImplicitTimeStepper_impl.h b/src/solvers/pde/tnlSemiImplicitTimeStepper_impl.h
index cb3efcad644e2030d4d35ad2d66b0689091e44da..26559d13d66015a2e0832de8070d8a821444b3dd 100644
--- a/src/solvers/pde/tnlSemiImplicitTimeStepper_impl.h
+++ b/src/solvers/pde/tnlSemiImplicitTimeStepper_impl.h
@@ -136,7 +136,7 @@ solve( const RealType& time,
        const RealType& stopTime,
        const MeshType& mesh,
        DofVectorType& dofVector,
-       DofVectorType& auxiliaryDofVector )
+       MeshDependentDataType& meshDependentData )
 {
    tnlAssert( this->problem != 0, );
    RealType t = time;
@@ -149,7 +149,7 @@ solve( const RealType& time,
                                        currentTau,
                                        mesh,
                                        dofVector,
-                                       auxiliaryDofVector ) )
+                                       meshDependentData ) )
       {
          cerr << endl << "Preiteration failed." << endl;
          return false;
@@ -161,7 +161,7 @@ solve( const RealType& time,
                                            currentTau,
                                            mesh,
                                            dofVector,
-                                           auxiliaryDofVector,
+                                           meshDependentData,
                                            this->matrix,
                                            this->rightHandSide );
       this->linearSystemAssemblerTimer.stop();
@@ -180,7 +180,7 @@ solve( const RealType& time,
                                         currentTau,
                                         mesh,
                                         dofVector,
-                                        auxiliaryDofVector ) )
+                                        meshDependentData ) )
       {
          cerr << endl << "Postiteration failed." << endl;
          return false;
diff --git a/src/solvers/tnlConfigTags.h b/src/solvers/tnlBuildConfigTags.h
similarity index 99%
rename from src/solvers/tnlConfigTags.h
rename to src/solvers/tnlBuildConfigTags.h
index 9f1794dcc0652a99c3340a931b1f592ed8687ecb..5b094846fbe5899d9f72cb184da920f2f3bd76bc 100644
--- a/src/solvers/tnlConfigTags.h
+++ b/src/solvers/tnlBuildConfigTags.h
@@ -20,7 +20,7 @@
 
 #include <mesh/tnlGrid.h>
 
-class tnlDefaultConfigTag{};
+class tnlDefaultBuildConfigTag{};
 
 /****
  * All devices are enabled by default. Those which are not available
diff --git a/src/solvers/tnlFastBuildConfig.h b/src/solvers/tnlFastBuildConfigTag.h
similarity index 98%
rename from src/solvers/tnlFastBuildConfig.h
rename to src/solvers/tnlFastBuildConfigTag.h
index b8bd739351d7637e7860f323598becede0f55850..23b603cf7a24e19262c6b9b0dba8dc02319b93b0 100644
--- a/src/solvers/tnlFastBuildConfig.h
+++ b/src/solvers/tnlFastBuildConfigTag.h
@@ -18,7 +18,7 @@
 #ifndef TNLFASTBUILDCONFIG_H_
 #define TNLFASTBUILDCONFIG_H_
 
-#include <solvers/tnlConfigTags.h>
+#include <solvers/tnlBuildConfigTags.h>
 
 class tnlFastBuildConfig
 {
diff --git a/src/solvers/tnlSolver.h b/src/solvers/tnlSolver.h
index c99bd3af92ab7621534801539b0d3656f27069ab..9e4040d87a48621acbe7750bb4f2164063c73c11 100644
--- a/src/solvers/tnlSolver.h
+++ b/src/solvers/tnlSolver.h
@@ -18,15 +18,15 @@
 #ifndef TNLSOLVER_H_
 #define TNLSOLVER_H_
 
-#include <solvers/tnlConfigTags.h>
+#include <solvers/tnlBuildConfigTags.h>
 
 template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
           template< typename ConfTag > class ProblemConfig,
-          typename ConfigTag = tnlDefaultConfigTag >
+          typename ConfigTag = tnlDefaultBuildConfigTag >
 class tnlSolver
 {
    public:
-   bool run( int argc, char* argv[] );
+   static bool run( int argc, char* argv[] );
 
    protected:
 };
diff --git a/src/solvers/tnlSolverConfig_impl.h b/src/solvers/tnlSolverConfig_impl.h
index 76012963e580d69c9edb2ea820f5f138b9cded6e..329b0335918660845018b304f8191b543e7b302f 100644
--- a/src/solvers/tnlSolverConfig_impl.h
+++ b/src/solvers/tnlSolverConfig_impl.h
@@ -19,7 +19,7 @@
 #define TNLSOLVERCONFIG_IMPL_H_
 
 #include <tnlConfig.h>
-#include <solvers/tnlConfigTags.h>
+#include <solvers/tnlBuildConfigTags.h>
 #include <solvers/tnlDummyProblem.h>
 #include <solvers/pde/tnlExplicitTimeStepper.h>
 #include <solvers/pde/tnlPDESolver.h>
diff --git a/src/solvers/tnlSolverInitiator.h b/src/solvers/tnlSolverInitiator.h
index 3a27cf53574aa383ee79f9036775e732d8139181..525d304c9d2bfea36396c2b0e35cbfae65903527 100644
--- a/src/solvers/tnlSolverInitiator.h
+++ b/src/solvers/tnlSolverInitiator.h
@@ -20,7 +20,7 @@
 
 #include <core/tnlObject.h>
 #include <config/tnlParameterContainer.h>
-#include <solvers/tnlConfigTags.h>
+#include <solvers/tnlBuildConfigTags.h>
 
 template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
           typename ConfigTag >
diff --git a/src/solvers/tnlSolverInitiator_impl.h b/src/solvers/tnlSolverInitiator_impl.h
index 05e281e1bc72a7d1fd2433d91195c405da5a0026..0876bd27527879a2a9cf4faaa071fc5f5bfa90df 100644
--- a/src/solvers/tnlSolverInitiator_impl.h
+++ b/src/solvers/tnlSolverInitiator_impl.h
@@ -17,7 +17,7 @@
 
 #include <config/tnlParameterContainer.h>
 #include <solvers/tnlMeshTypeResolver.h>
-#include <solvers/tnlConfigTags.h>
+#include <solvers/tnlBuildConfigTags.h>
 #include <solvers/linear/stationary/tnlSORSolver.h>
 #include <solvers/linear/krylov/tnlCGSolver.h>
 #include <solvers/linear/krylov/tnlBICGStabSolver.h>
diff --git a/src/solvers/tnlSolverStarter_impl.h b/src/solvers/tnlSolverStarter_impl.h
index c9245b57569056ff6b4c55abe4521ff941ff47ea..09e61c33e25d96b0d63cbe30891d21b274f7a296 100644
--- a/src/solvers/tnlSolverStarter_impl.h
+++ b/src/solvers/tnlSolverStarter_impl.h
@@ -524,9 +524,9 @@ bool tnlSolverStarter< ConfigTag > :: runPDESolver( Problem& problem,
     */
    tnlPDESolver< Problem, TimeStepper > solver;
    solver.setProblem( problem );
+   solver.setTimeStepper( timeStepper );
    if( ! solver.setup( parameters ) )
       return false;
-   solver.setTimeStepper( timeStepper );
 
    /****
     * Write a prolog