diff --git a/examples/heat-equation/tnl-heat-equation-eoc.h b/examples/heat-equation/tnl-heat-equation-eoc.h
index 7001a2d71c0dc45166468a752844847794c0cc82..6c4beddcb0ac46b111a1a2a6f35e580a10e191ed 100644
--- a/examples/heat-equation/tnl-heat-equation-eoc.h
+++ b/examples/heat-equation/tnl-heat-equation-eoc.h
@@ -28,10 +28,10 @@
 #include <problems/tnlHeatEquationEocRhs.h>
 #include <problems/tnlHeatEquationEocProblem.h>
 
-//typedef tnlDefaultBuildConfigTag BuildConfig;
+//typedef tnlDefaultBuildMeshConfig BuildConfig;
 typedef tnlFastBuildConfig BuildConfig;
 
-template< typename ConfigTag >
+template< typename MeshConfig >
 class heatEquationEocConfig
 {
    public:
@@ -47,7 +47,7 @@ template< typename Real,
           typename Device,
           typename Index,
           typename MeshType,
-          typename ConfigTag,
+          typename MeshConfig,
           typename SolverStarter >
 class heatEquationSetter
 {
diff --git a/examples/heat-equation/tnl-heat-equation.h b/examples/heat-equation/tnl-heat-equation.h
index 77c3121bc4718c06921cb67789224054ff1ed041..e094ea425c6198aacb251f2952fb710ea97fcda9 100644
--- a/examples/heat-equation/tnl-heat-equation.h
+++ b/examples/heat-equation/tnl-heat-equation.h
@@ -29,10 +29,10 @@
 #include <functors/tnlConstantFunction.h>
 #include <problems/tnlHeatEquationProblem.h>
 
-//typedef tnlDefaultBuildConfigTag BuildConfig;
+//typedef tnlDefaultBuildMeshConfig BuildConfig;
 typedef tnlFastBuildConfig BuildConfig;
 
-template< typename ConfigTag >
+template< typename MeshConfig >
 class heatEquationConfig
 {
    public:
@@ -54,7 +54,7 @@ template< typename Real,
           typename Device,
           typename Index,
           typename MeshType,
-          typename ConfigTag,
+          typename MeshConfig,
           typename SolverStarter >
 class heatEquationSetter
 {
diff --git a/src/mesh/CMakeLists.txt b/src/mesh/CMakeLists.txt
index 3e3eab15d6011b73583c424062d843cbcf63966b..1f083ebd983ae6460a96ed06165586d328cfb337 100755
--- a/src/mesh/CMakeLists.txt
+++ b/src/mesh/CMakeLists.txt
@@ -16,7 +16,7 @@ SET( headers tnlGrid.h
              tnlMesh.h
              tnlMeshEntity.h
              tnlMeshEntityId.h
-             tnlMeshEntityKey.h
+             tnlMeshEntitySeedKey.h
              tnlMeshReaderNetgen.h
              tnlMeshWriterNetgen.h
              tnlMeshInitializer.h
diff --git a/src/mesh/config/tnlMeshConfigBase.h b/src/mesh/config/tnlMeshConfigBase.h
index 034cc33c5c5603ed96b26685dc760e6cdd362308..174b2b0c95698471c71ee731050229fa09714cb8 100644
--- a/src/mesh/config/tnlMeshConfigBase.h
+++ b/src/mesh/config/tnlMeshConfigBase.h
@@ -39,7 +39,7 @@ struct tnlMeshConfigBase
    typedef Id          IdType;
 
    static const int worldDimensions = WorldDimensions;
-   static const int cellDimensions = Cell::dimensions;
+   static const int meshDimensions = Cell::dimensions;
 
    static tnlString getType()
    {
@@ -100,7 +100,7 @@ struct tnlMeshConfigBase
  * To disable it, write your own specialization with given
  * dimensions and config tag.
  */
-template< typename ConfigTag,
+template< typename MeshConfig,
           int Dimensions >
 struct tnlMeshEntityStorage
 {
@@ -112,19 +112,19 @@ struct tnlMeshEntityStorage
  * provided that they are stored in the mesh.
  * Write your own specialization if you do not want so.
  */
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag,
           int Dimensions >
 struct tnlMeshSubentityStorage
 {
-   enum { enabled = tnlMeshEntityStorage< ConfigTag, Dimensions >::enabled };
+   enum { enabled = tnlMeshEntityStorage< MeshConfig, Dimensions >::enabled };
 };
 
 /***
  * By default, NO SUPERENTITIES of any mesh entity ARE STORED.
  * Write your own specialization if you need to stored them.
  */
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag,
           int Dimensions >
 struct tnlMeshSuperentityStorage
diff --git a/src/mesh/layers/tnlMeshStorageLayer.h b/src/mesh/layers/tnlMeshStorageLayer.h
index 2884bfa622b602cd2353f0e138c738c9e9f7cce7..ae70e0316913639276e5c5de75ad4924d22aa436 100644
--- a/src/mesh/layers/tnlMeshStorageLayer.h
+++ b/src/mesh/layers/tnlMeshStorageLayer.h
@@ -22,79 +22,66 @@
 #include <mesh/traits/tnlMeshTraits.h>
 #include <mesh/traits/tnlMeshEntitiesTraits.h>
 #include <mesh/traits/tnlStorageTraits.h>
-#include <mesh/traits/tnlMeshConfigTraits.h>
+#include <mesh/traits/tnlMeshTraits.h>
 
 template< typename MeshConfig >
 class tnlMesh;
 
 template< typename DimensionsTag,
           typename Device,
-          typename ConfigTag,
-          typename EntityStorageTag = typename tnlMeshEntitiesTraits< ConfigTag,
-                                                                      DimensionsTag >::EntityStorageTag >
+          typename MeshConfig,
+          typename EntityStorageTag = typename tnlMeshEntitiesTraits< MeshConfig,
+                                                                      DimensionsTag::value >::EntityStorageTag >
 class tnlMeshStorageTag;
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename DimensionsTag,
-          typename EntityStorageTag = typename tnlMeshEntitiesTraits< ConfigTag,
-                                                                      DimensionsTag >::EntityStorageTag >
+          typename EntityStorageTag = typename tnlMeshEntitiesTraits< MeshConfig,
+                                                                      DimensionsTag::value >::EntityStorageTag >
 class tnlMeshStorageLayer;
 
 
-template< typename ConfigTag >
+template< typename MeshConfig >
 class tnlMeshStorageLayers
-   : public tnlMeshStorageLayer< ConfigTag,
-                                 typename tnlMeshTraits< ConfigTag >::DimensionsTag >
+   : public tnlMeshStorageLayer< MeshConfig,
+                                 typename tnlMeshTraits< MeshConfig >::DimensionsTag >
 {
 };
 
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename DimensionsTag >
-class tnlMeshStorageLayer< ConfigTag,
+class tnlMeshStorageLayer< MeshConfig,
                            DimensionsTag,
                            tnlStorageTraits< true > >
-   : public tnlMeshStorageLayer< ConfigTag, typename DimensionsTag::Decrement >,
-     public tnlMeshSuperentityStorageLayers< ConfigTag, 
-                                             typename tnlMeshConfigTraits< ConfigTag >::template EntityTraits< DimensionsTag >::Tag >
+   : public tnlMeshStorageLayer< MeshConfig, typename DimensionsTag::Decrement >,
+     public tnlMeshSuperentityStorageLayers< MeshConfig, 
+                                             typename tnlMeshTraits< MeshConfig >::template EntityTraits< DimensionsTag::value >::Tag >
 {
    public:
 
-   typedef tnlMeshStorageLayer< ConfigTag,
+   typedef tnlMeshStorageLayer< MeshConfig,
                                 typename DimensionsTag::Decrement >   BaseType;
-   typedef tnlMeshSuperentityStorageLayers< ConfigTag, 
-                                            typename tnlMeshConfigTraits< ConfigTag >::template EntityTraits< DimensionsTag >::Tag > SuperentityStorageBaseType;
+   typedef tnlMeshSuperentityStorageLayers< MeshConfig, 
+                                            typename tnlMeshTraits< MeshConfig >::template EntityTraits< DimensionsTag::value >::Tag > SuperentityStorageBaseType;
+   
+   typedef tnlMeshTraits< MeshConfig >                                          MeshTraits;
+   typedef typename MeshTraits::template EntityTraits< DimensionsTag::value >   EntityTraits; 
    
-   typedef tnlMeshEntitiesTraits< ConfigTag, DimensionsTag >         Tag;
-   typedef typename Tag::ContainerType                                  ContainerType;
-   typedef typename Tag::SharedContainerType                            SharedContainerType;
-   typedef typename ContainerType::IndexType                            GlobalIndexType;
-   typedef typename ContainerType::ElementType                          EntityType;
+   typedef typename EntityTraits::StorageArrayType                              StorageArrayType;
+   typedef typename EntityTraits::AccessArrayType                               AccessArrayType;
+   typedef typename EntityTraits::GlobalIndexType                               GlobalIndexType;
+   typedef typename EntityTraits::EntityType                                    EntityType;
 
 
-   using BaseType::setNumberOfEntities;
    using BaseType::getNumberOfEntities;
-   using BaseType::setEntity;
    using BaseType::getEntity;
    using BaseType::getEntities;
 
    tnlMeshStorageLayer()
    {
       this->entities.setName( tnlString( "tnlMeshStorageLayer < " ) + tnlString( DimensionsTag::value ) + " >::entities" );
-      this->sharedEntities.setName( tnlString( "tnlMeshStorageLayer < " ) + tnlString( DimensionsTag::value ) + " >::sharedEntities" );
-   }
-
-   /*~tnlMeshStorageLayer()
-   {
-      cout << "Destroying mesh storage layer with " << DimensionsTag::value << " dimensions and " << this->entities.getSize() << " entities." << endl;
-   }*/
-
-   bool setNumberOfEntities( DimensionsTag, const GlobalIndexType size )
-   {
-      if( ! this->entities.setSize( size ) )
-         return false;
-      this->sharedEntities.bind( this->entities );
-      return true;
+      this->entitiesAccess.setName( tnlString( "tnlMeshStorageLayer < " ) + tnlString( DimensionsTag::value ) + " >::entitiesAccess" );
    }
 
    GlobalIndexType getNumberOfEntities( DimensionsTag ) const
@@ -102,13 +89,6 @@ class tnlMeshStorageLayer< ConfigTag,
       return this->entities.getSize();
    }
 
-   void setEntity( DimensionsTag,
-                   const GlobalIndexType entityIndex,
-                   const EntityType& entity ) const
-   {
-      this->entities.setElement( entityIndex, entity );
-   }
-
    EntityType& getEntity( DimensionsTag,
                           const GlobalIndexType entityIndex )
    {
@@ -121,12 +101,12 @@ class tnlMeshStorageLayer< ConfigTag,
       return this->entities[ entityIndex ];
    }
 
-   SharedContainerType& getEntities( DimensionsTag )
+   AccessArrayType& getEntities( DimensionsTag )
    {
       return this->sharedEntities;
    }
 
-   const SharedContainerType& getEntities( DimensionsTag ) const
+   const AccessArrayType& getEntities( DimensionsTag ) const
    {
       return this->sharedEntities;
    }
@@ -151,7 +131,7 @@ class tnlMeshStorageLayer< ConfigTag,
          cerr << "Loading of the mesh entities with " << DimensionsTag::value << " dimensions failed." << endl;
          return false;
       }
-      this->sharedEntities.bind( this->entities );
+      this->entitiesAccess.bind( this->entities );
       return true;
    }
 
@@ -174,16 +154,16 @@ class tnlMeshStorageLayer< ConfigTag,
 
 
    protected:
-      ContainerType entities;
+      StorageArrayType entities;
 
-      SharedContainerType sharedEntities;
+      AccessArrayType entitiesAccess;
    
    // TODO: this is only for the mesh initializer - fix it
    public:
 
       using BaseType::entitiesArray;
       
-      typename tnlMeshConfigTraits< ConfigTag >::template EntityTraits< DimensionsTag >::ContainerType& entitiesArray( DimensionsTag )
+      typename EntityTraits::StorageArrayType& entitiesArray( DimensionsTag )
       {
          return entities; 
       }
@@ -191,27 +171,27 @@ class tnlMeshStorageLayer< ConfigTag,
       using BaseType::superentityIdsArray;
 	
       template< typename SuperDimensionsTag >
-      typename tnlMeshConfigTraits< ConfigTag >::GlobalIdArrayType& superentityIdsArray( DimensionsTag )
+      typename MeshTraits::GlobalIdArrayType& superentityIdsArray( DimensionsTag )
       {
          return SuperentityStorageBaseType::superentityIdsArray( SuperDimensionsTag() );
       }
 };
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename DimensionsTag >
-class tnlMeshStorageLayer< ConfigTag,
+class tnlMeshStorageLayer< MeshConfig,
                            DimensionsTag,
                            tnlStorageTraits< false > >
-   : public tnlMeshStorageLayer< ConfigTag,
+   : public tnlMeshStorageLayer< MeshConfig,
                                  typename DimensionsTag::Decrement >
 {
 };
 
-template< typename ConfigTag >
-class tnlMeshStorageLayer< ConfigTag,
+template< typename MeshConfig >
+class tnlMeshStorageLayer< MeshConfig,
                            tnlDimensionsTag< 0 >,
                            tnlStorageTraits< true > > :
-   public tnlMeshSuperentityStorageLayers< ConfigTag, 
+   public tnlMeshSuperentityStorageLayers< MeshConfig, 
                                            tnlMeshVertexTag >
 
 {
@@ -219,37 +199,22 @@ class tnlMeshStorageLayer< ConfigTag,
 
    typedef tnlDimensionsTag< 0 >                        DimensionsTag;
    
-   typedef tnlMeshSuperentityStorageLayers< ConfigTag, 
+   typedef tnlMeshSuperentityStorageLayers< MeshConfig, 
                                             tnlMeshVertexTag > SuperentityStorageBaseType;
 
-
-   typedef tnlMeshEntitiesTraits< ConfigTag,
-                                  DimensionsTag >       Tag;
-   typedef typename Tag::ContainerType                     ContainerType;
-   typedef typename Tag::SharedContainerType               SharedContainerType;
-   typedef typename ContainerType::IndexType               GlobalIndexType;
-   typedef typename ContainerType::ElementType             VertexType;
-   typedef typename VertexType::PointType                  PointType;
-
+   typedef tnlMeshTraits< MeshConfig >                                          MeshTraits;
+   typedef typename MeshTraits::template EntityTraits< DimensionsTag::value >   EntityTraits; 
+   
+   typedef typename EntityTraits::StorageArrayType                              StorageArrayType;
+   typedef typename EntityTraits::AccessArrayType                               AccessArrayType;
+   typedef typename EntityTraits::GlobalIndexType                               GlobalIndexType;
+   typedef typename EntityTraits::EntityType                                    VertexType;
+   typedef typename VertexType::PointType                                       PointType;
 
    tnlMeshStorageLayer()
    {
       this->vertices.setName( tnlString( "tnlMeshStorageLayer < " ) + tnlString( DimensionsTag::value ) + " >::vertices" );
-      this->sharedVertices.setName( tnlString( "tnlMeshStorageLayer < " ) + tnlString( DimensionsTag::value ) + " >::sharedVertices" );
-   }
-
-   /*~tnlMeshStorageLayer()
-   {
-        cout << "mesh storage layer: dimensions = " << DimensionsTag::value << " entities = " << this->vertices.getSize() << endl;
-   }*/
-
-
-   bool setNumberOfVertices( const GlobalIndexType size )
-   {
-      if( ! this->vertices.setSize( size ) )
-         return false;
-      this->sharedVertices.bind( this->vertices );
-      return true;
+      this->verticesAccess.setName( tnlString( "tnlMeshStorageLayer < " ) + tnlString( DimensionsTag::value ) + " >::sharedVertices" );
    }
 
    GlobalIndexType getNumberOfVertices() const
@@ -284,43 +249,30 @@ class tnlMeshStorageLayer< ConfigTag,
     * This is only for the completeness and compatibility
     * with higher dimensions entities storage layers.
     */
-   bool setNumberOfEntities( DimensionsTag,
-                             const GlobalIndexType size )
-   {
-      return this->vertices.setSize( size );
-   }
 
    GlobalIndexType getNumberOfEntities( DimensionsTag ) const
    {
       return this->vertices.getSize();
    }
 
-   void setEntity( DimensionsTag,
-                   const GlobalIndexType entityIndex,
-                   const VertexType& entity ) const
-   {
-      this->vertices.setElement( entityIndex, entity );
-   }
-
    VertexType& getEntity( DimensionsTag,
                           const GlobalIndexType entityIndex )
    {
       return this->vertices[ entityIndex ];
    }
 
-   
    const VertexType& getEntity( DimensionsTag,
                                 const GlobalIndexType entityIndex ) const
    {
       return this->vertices.getElement( entityIndex );
    }
 
-   SharedContainerType& getEntities( DimensionsTag )
+   AccessArrayType& getEntities( DimensionsTag )
    {
       return this->sharedVertices;
    }
 
-   const SharedContainerType& getEntities( DimensionsTag ) const
+   const AccessArrayType& getEntities( DimensionsTag ) const
    {
       return this->sharedVertices;
    }
@@ -342,7 +294,7 @@ class tnlMeshStorageLayer< ConfigTag,
          cerr << "Loading of the mesh entities with " << DimensionsTag::value << " dimensions failed." << endl;
          return false;
       }
-      this->sharedVertices.bind( this->vertices );
+      this->verticesAccess.bind( this->vertices );
       return true;
    }
 
@@ -362,21 +314,21 @@ class tnlMeshStorageLayer< ConfigTag,
 
    private:
 
-   ContainerType vertices;
+   StorageArrayType vertices;
 
-   SharedContainerType sharedVertices;
+   AccessArrayType verticesAccess;
    
    // TODO: this is only for the mesh initializer - fix it
    public:
       
-      typename tnlMeshConfigTraits< ConfigTag >::template EntityTraits< DimensionsTag >::ContainerType& entitiesArray( DimensionsTag )
+      typename EntityTraits::StorageArrayType& entitiesArray( DimensionsTag )
       {
          return vertices; 
       }
 
       
       template< typename SuperDimensionsTag >
-      typename tnlMeshConfigTraits< ConfigTag >::GlobalIdArrayType& superentityIdsArray( DimensionsTag )
+      typename MeshTraits::GlobalIdArrayType& superentityIdsArray( DimensionsTag )
       {
          return SuperentityStorageBaseType::superentityIdsArray( SuperDimensionsTag() );
       }
@@ -386,14 +338,11 @@ class tnlMeshStorageLayer< ConfigTag,
 /****
  * Forces termination of recursive inheritance (prevents compiler from generating huge error logs)
  */
-template< typename ConfigTag >
-class tnlMeshStorageLayer< ConfigTag,
+template< typename MeshConfig >
+class tnlMeshStorageLayer< MeshConfig,
                            tnlDimensionsTag< 0 >,
                            tnlStorageTraits< false > >
 {
-   protected:
-
-   void setNumberOfEntities();   
 };
 
 
diff --git a/src/mesh/layers/tnlMeshSubentityStorageLayer.h b/src/mesh/layers/tnlMeshSubentityStorageLayer.h
index 4328ec9077da592e627220a594da72d7a82c1678..a3ff49b10fb572670d40c8d7f203960e10f92371 100644
--- a/src/mesh/layers/tnlMeshSubentityStorageLayer.h
+++ b/src/mesh/layers/tnlMeshSubentityStorageLayer.h
@@ -22,49 +22,50 @@
 #include <mesh/tnlDimensionsTag.h>
 #include <mesh/traits/tnlStorageTraits.h>
 #include <mesh/traits/tnlMeshSubentitiesTraits.h>
+#include <mesh/tnlMeshEntityOrientation.h>
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag,
           typename DimensionsTag,
           typename SubentityStorageTag = 
-             typename tnlMeshSubentitiesTraits< ConfigTag,
+             typename tnlMeshSubentitiesTraits< MeshConfig,
                                                 EntityTag,
-                                                DimensionsTag >::SubentityStorageTag,
+                                                DimensionsTag::value >::SubentityStorageTag,
           typename SubentityOrientationStorage =
-             tnlStorageTraits< tnlMeshConfigTraits< ConfigTag>::
-                template SubentityTraits< EntityTag, DimensionsTag >::orientationEnabled > >
+             tnlStorageTraits< tnlMeshTraits< MeshConfig>::
+                template SubentityTraits< EntityTag, DimensionsTag::value >::orientationEnabled > >
 class tnlMeshSubentityStorageLayer;
 
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag >
 class tnlMeshSubentityStorageLayers
-   : public tnlMeshSubentityStorageLayer< ConfigTag,
+   : public tnlMeshSubentityStorageLayer< MeshConfig,
                                           EntityTag,
                                           tnlDimensionsTag< EntityTag::dimensions - 1 > >
 {
 };
 
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag,
           typename DimensionsTag >
-class tnlMeshSubentityStorageLayer< ConfigTag,
+class tnlMeshSubentityStorageLayer< MeshConfig,
                                     EntityTag,
                                     DimensionsTag,
                                     tnlStorageTraits< true >,
                                     tnlStorageTraits< true > >
-   : public tnlMeshSubentityStorageLayer< ConfigTag,
+   : public tnlMeshSubentityStorageLayer< MeshConfig,
                                           EntityTag,
                                           typename DimensionsTag::Decrement >
 {
-   typedef tnlMeshSubentityStorageLayer< ConfigTag,
+   typedef tnlMeshSubentityStorageLayer< MeshConfig,
                                          EntityTag,
                                          typename DimensionsTag::Decrement > BaseType;
 
-   typedef tnlMeshSubentitiesTraits< ConfigTag,
+   typedef tnlMeshSubentitiesTraits< MeshConfig,
                                      EntityTag,
-                                     DimensionsTag > SubentityTraits;
+                                     DimensionsTag::value > SubentityTraits;
 
    protected:
 
@@ -74,7 +75,7 @@ class tnlMeshSubentityStorageLayer< ConfigTag,
    typedef int                                            LocalIndexType;
    typedef typename SubentityTraits::IdArrayType          IdArrayType;
    typedef typename SubentityTraits::OrientationArrayType  OrientationArrayType;
-   typedef typename tnlMeshConfigTraits< ConfigTag >::IdPermutationArrayAccessorType   IdPermutationArrayAccessorType;
+   typedef typename tnlMeshTraits< MeshConfig >::IdPermutationArrayAccessorType   IdPermutationArrayAccessorType;
 
    tnlMeshSubentityStorageLayer()
    {
@@ -190,25 +191,25 @@ class tnlMeshSubentityStorageLayer< ConfigTag,
 };
 
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag,
           typename DimensionsTag >
-class tnlMeshSubentityStorageLayer< ConfigTag,
+class tnlMeshSubentityStorageLayer< MeshConfig,
                                     EntityTag,
                                     DimensionsTag,
                                     tnlStorageTraits< true >,
                                     tnlStorageTraits< false > >
-   : public tnlMeshSubentityStorageLayer< ConfigTag,
+   : public tnlMeshSubentityStorageLayer< MeshConfig,
                                           EntityTag,
                                           typename DimensionsTag::Decrement >
 {
-   typedef tnlMeshSubentityStorageLayer< ConfigTag,
+   typedef tnlMeshSubentityStorageLayer< MeshConfig,
                                          EntityTag,
                                          typename DimensionsTag::Decrement > BaseType;
 
-   typedef tnlMeshSubentitiesTraits< ConfigTag,
+   typedef tnlMeshSubentitiesTraits< MeshConfig,
                                      EntityTag,
-                                     DimensionsTag > SubentityTraits;
+                                     DimensionsTag::value > SubentityTraits;
 
    protected:
 
@@ -322,24 +323,24 @@ class tnlMeshSubentityStorageLayer< ConfigTag,
 
 };
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag,
           typename DimensionsTag >
-class tnlMeshSubentityStorageLayer< ConfigTag,
+class tnlMeshSubentityStorageLayer< MeshConfig,
                                     EntityTag,
                                     DimensionsTag,
                                     tnlStorageTraits< false >,
                                     tnlStorageTraits< false > >
-   : public tnlMeshSubentityStorageLayer< ConfigTag,
+   : public tnlMeshSubentityStorageLayer< MeshConfig,
                                           EntityTag,
                                           typename DimensionsTag::Decrement >
 {
 };
 
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag >
-class tnlMeshSubentityStorageLayer< ConfigTag,
+class tnlMeshSubentityStorageLayer< MeshConfig,
                                     EntityTag,
                                     tnlDimensionsTag< 0 >,
                                     tnlStorageTraits< true >,
@@ -347,9 +348,9 @@ class tnlMeshSubentityStorageLayer< ConfigTag,
 {
    typedef tnlDimensionsTag< 0 >                           DimensionsTag;
 
-   typedef tnlMeshSubentitiesTraits< ConfigTag,
+   typedef tnlMeshSubentitiesTraits< MeshConfig,
                                      EntityTag,
-                                     DimensionsTag > SubentityTraits;
+                                     DimensionsTag::value > SubentityTraits;
 
    protected:
 
@@ -447,9 +448,9 @@ class tnlMeshSubentityStorageLayer< ConfigTag,
       SharedContainerType sharedVerticesIndices;
 };
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag >
-class tnlMeshSubentityStorageLayer< ConfigTag,
+class tnlMeshSubentityStorageLayer< MeshConfig,
                                     EntityTag,
                                     tnlDimensionsTag< 0 >,
                                     tnlStorageTraits< false > >
diff --git a/src/mesh/layers/tnlMeshSuperentityAccess.h b/src/mesh/layers/tnlMeshSuperentityAccess.h
index 5b3df86d20f5a8e179c2869f01c772dd01a88003..2226752fd8b535267757aebdff60c981ad203b23 100644
--- a/src/mesh/layers/tnlMeshSuperentityAccess.h
+++ b/src/mesh/layers/tnlMeshSuperentityAccess.h
@@ -19,14 +19,14 @@
 #define	TNLSUPERENTITYACCESS_H
 
 #include <mesh/traits/tnlStorageTraits.h>
-#include <mesh/traits/tnlMeshConfigTraits.h>
+#include <mesh/traits/tnlMeshTraits.h>
 
 
 template< typename MeshConfig,
           typename MeshEntity,
           typename Dimensions,
           typename SuperentityStorage = 
-             tnlStorageTraits< tnlMeshConfigTraits< MeshConfig >::template SuperentityTraits< MeshEntity, Dimensions>::storageEnabled > >
+             tnlStorageTraits< tnlMeshTraits< MeshConfig >::template SuperentityTraits< MeshEntity, Dimensions>::storageEnabled > >
 class tnlMeshSuperentityAccessLayer;
 
 
@@ -35,7 +35,7 @@ template< typename MeshConfig,
 class tnlMeshSuperentityAccess :
    public tnlMeshSuperentityAccessLayer< MeshConfig, 
                                          MeshEntity,
-                                         tnlDimensionsTag< tnlMeshConfigTraits< MeshConfig >::meshDimensions > >
+                                         tnlDimensionsTag< tnlMeshTraits< MeshConfig >::meshDimensions > >
 {
    public:
       bool operator == ( const tnlMeshSuperentityAccess< MeshConfig, MeshEntity>& a ) const { return true; } // TODO: fix
@@ -56,7 +56,7 @@ class tnlMeshSuperentityAccessLayer< MeshConfig,
 	typedef tnlMeshSuperentityAccessLayer< MeshConfig, MeshEntity, typename Dimensions::Decrement > BaseType;
 
    public:
-	   typedef typename tnlMeshConfigTraits< MeshConfig >::IdArrayAccessorType    IdArrayAccessorType;
+	   typedef typename tnlMeshTraits< MeshConfig >::IdArrayAccessorType    IdArrayAccessorType;
 
 	   using BaseType::superentityIds;
 	   IdArrayAccessorType superentityIds( Dimensions ) const { return m_superentityIndices; }
diff --git a/src/mesh/layers/tnlMeshSuperentityStorageLayer.h b/src/mesh/layers/tnlMeshSuperentityStorageLayer.h
index d8a297a277f88dab30e971c62a43bc837ae53de7..620fbf1e9e18d5a63b9b6ef7321e605613166661 100644
--- a/src/mesh/layers/tnlMeshSuperentityStorageLayer.h
+++ b/src/mesh/layers/tnlMeshSuperentityStorageLayer.h
@@ -22,45 +22,45 @@
 #include <mesh/tnlDimensionsTag.h>
 #include <mesh/traits/tnlStorageTraits.h>
 #include <mesh/traits/tnlMeshTraits.h>
-#include <mesh/traits/tnlMeshConfigTraits.h>
+#include <mesh/traits/tnlMeshTraits.h>
 #include <mesh/traits/tnlMeshSuperentitiesTraits.h>
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag,
           typename DimensionsTag,
           typename SuperentityStorageTag =
-             typename tnlMeshSuperentitiesTraits< ConfigTag,
+             typename tnlMeshSuperentitiesTraits< MeshConfig,
                                                   EntityTag,
                                                   DimensionsTag >::SuperentityStorageTag >
 class tnlMeshSuperentityStorageLayer;
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag >
 class tnlMeshSuperentityStorageLayers
-   : public tnlMeshSuperentityStorageLayer< ConfigTag,
+   : public tnlMeshSuperentityStorageLayer< MeshConfig,
                                             EntityTag,
-                                            typename tnlMeshTraits< ConfigTag >::DimensionsTag >
+                                            typename tnlMeshTraits< MeshConfig >::DimensionsTag >
 {
 };
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag,
           typename DimensionsTag >
-class tnlMeshSuperentityStorageLayer< ConfigTag,
+class tnlMeshSuperentityStorageLayer< MeshConfig,
                                       EntityTag,
                                       DimensionsTag,
                                       tnlStorageTraits< true > >
-   : public tnlMeshSuperentityStorageLayer< ConfigTag,
+   : public tnlMeshSuperentityStorageLayer< MeshConfig,
                                             EntityTag,
                                             typename DimensionsTag::Decrement >
 {
    typedef
-      tnlMeshSuperentityStorageLayer< ConfigTag,
+      tnlMeshSuperentityStorageLayer< MeshConfig,
                                       EntityTag,
                                       typename DimensionsTag::Decrement >  BaseType;
 
    typedef
-      tnlMeshSuperentitiesTraits< ConfigTag, EntityTag, DimensionsTag >          SuperentityTag;
+      tnlMeshSuperentitiesTraits< MeshConfig, EntityTag, DimensionsTag >          SuperentityTag;
 
    protected:
 
@@ -184,20 +184,20 @@ class tnlMeshSuperentityStorageLayer< ConfigTag,
    public:
               
       using BaseType::superentityIdsArray;               
-      typename tnlMeshConfigTraits< ConfigTag >::GlobalIdArrayType& superentityIdsArray( DimensionsTag )
+      typename tnlMeshTraits< MeshConfig >::GlobalIdArrayType& superentityIdsArray( DimensionsTag )
       {
          return this->superentitiesIndices;
       }
 };
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag,
           typename DimensionsTag >
-class tnlMeshSuperentityStorageLayer< ConfigTag,
+class tnlMeshSuperentityStorageLayer< MeshConfig,
                                       EntityTag,
                                       DimensionsTag,
                                       tnlStorageTraits< false > >
-   : public tnlMeshSuperentityStorageLayer< ConfigTag,
+   : public tnlMeshSuperentityStorageLayer< MeshConfig,
                                             EntityTag,
                                             typename DimensionsTag::Decrement >
 {
@@ -205,20 +205,20 @@ class tnlMeshSuperentityStorageLayer< ConfigTag,
 
 };
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag >
-class tnlMeshSuperentityStorageLayer< ConfigTag,
+class tnlMeshSuperentityStorageLayer< MeshConfig,
                                       EntityTag,
                                       tnlDimensionsTag< EntityTag::dimensions >,
                                       tnlStorageTraits< false > >
 {
    typedef tnlDimensionsTag< EntityTag::dimensions >        DimensionsTag;
 
-   typedef tnlMeshSuperentitiesTraits< ConfigTag,
+   typedef tnlMeshSuperentitiesTraits< MeshConfig,
                                        EntityTag,
                                        DimensionsTag >      SuperentityTag;
 
-   typedef tnlMeshSuperentityStorageLayer< ConfigTag,
+   typedef tnlMeshSuperentityStorageLayer< MeshConfig,
                                            EntityTag,
                                            DimensionsTag,
                                            tnlStorageTraits< false > > ThisType;
@@ -263,26 +263,26 @@ class tnlMeshSuperentityStorageLayer< ConfigTag,
    }
    
    template< typename SuperDimensionsTag >
-   typename tnlMeshConfigTraits< ConfigTag >::GlobalIdArrayType& superentityIdsArray( DimensionsTag )
+   typename tnlMeshTraits< MeshConfig >::GlobalIdArrayType& superentityIdsArray( DimensionsTag )
    {
       tnlAssert( false, );
       //return this->superentitiesIndices;
    }
 };
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag >
-class tnlMeshSuperentityStorageLayer< ConfigTag,
+class tnlMeshSuperentityStorageLayer< MeshConfig,
                                       EntityTag,
                                       tnlDimensionsTag< EntityTag::dimensions >,
                                       tnlStorageTraits< true > >
 {
    typedef tnlDimensionsTag< EntityTag::dimensions >        DimensionsTag;
 
-   typedef tnlMeshSuperentitiesTraits< ConfigTag,
+   typedef tnlMeshSuperentitiesTraits< MeshConfig,
                                        EntityTag,
                                        DimensionsTag >      SuperentityTag;
-   typedef tnlMeshSuperentityStorageLayer< ConfigTag,
+   typedef tnlMeshSuperentityStorageLayer< MeshConfig,
                                            EntityTag,
                                            DimensionsTag,
                                            tnlStorageTraits< true > > ThisType;
@@ -327,7 +327,7 @@ class tnlMeshSuperentityStorageLayer< ConfigTag,
    }
    
    template< typename SuperDimensionsTag >
-   typename tnlMeshConfigTraits< ConfigTag >::GlobalIdArrayType& superentityIdsArray( DimensionsTag )
+   typename tnlMeshTraits< MeshConfig >::GlobalIdArrayType& superentityIdsArray( DimensionsTag )
    {
       tnlAssert( false, );
       //return this->superentitiesIndices;
diff --git a/src/mesh/tnlMesh.h b/src/mesh/tnlMesh.h
index b0b291119c1515af47b998c843a03336266f4bc5..71abf630d3b6fab03e9c67a4d5eb62bc698a240d 100644
--- a/src/mesh/tnlMesh.h
+++ b/src/mesh/tnlMesh.h
@@ -33,12 +33,8 @@ class tnlMesh : public tnlObject,
    typedef MeshConfig                                        Config;
    typedef tnlMeshTraits< MeshConfig >                       MeshTraits;
    typedef typename tnlMeshTraits< MeshConfig >::PointType   PointType;
-   enum { dimensions = tnlMeshTraits< MeshConfig >::meshDimensions };
-
-   /*~tnlMesh()
-   {
-      cerr << "Destroying mesh " << this->getName() << endl;
-   }*/
+   static const int dimensions = MeshTraits::meshDimensions;
+   template< typename Dimensions > using EntityTraits = typename MeshTraits::template EntityTraits< Dimensions::value >;
 
    static tnlString getType()
    {
@@ -75,104 +71,77 @@ class tnlMesh : public tnlObject,
       return true;
    }
 
-   template< int Dimensions >
+   /*template< int Dimensions >
    struct EntitiesTraits
    {
       typedef tnlDimensionsTag< Dimensions >                       DimensionsTag;
       typedef tnlMeshEntitiesTraits< MeshConfig, DimensionsTag >    MeshEntitiesTraits;
-      typedef typename MeshEntitiesTraits::Type                       Type;
+      typedef typename MeshEntitiesTraits::EntityType                       Type;
       typedef typename MeshEntitiesTraits::ContainerType              ContainerType;
       typedef typename MeshEntitiesTraits::SharedContainerType        SharedContainerType;
       typedef typename ContainerType::IndexType                       GlobalIndexType;
       typedef typename ContainerType::ElementType                     EntityType;
       static const bool available = MeshConfig::entityStorage( Dimensions );
    };
-   typedef EntitiesTraits< dimensions > CellTraits;
-
-   /*using BaseType::setNumberOfVertices;
-   using BaseType::getNumberOfVertices;
-   using BaseType::setVertex;
-   using BaseType::getVertex;*/
+   typedef EntitiesTraits< dimensions > CellTraits;*/
 
    template< int Dimensions >
    bool entitiesAvalable() const
    {
-      return EntitiesTraits< Dimensions >::available;
-   }
-
-   template< int Dimensions >
-   bool setNumberOfEntities( typename EntitiesTraits< Dimensions >::GlobalIndexType size )
-   {
-      return entitiesStorage.setNumberOfEntities( tnlDimensionsTag< Dimensions >(), size );
+      return MeshTraits::template EntityTraits< Dimensions >::available;
    }
 
    template< int Dimensions >
-   typename EntitiesTraits< Dimensions >::GlobalIndexType getNumberOfEntities() const
+   typename MeshTraits::template EntityTraits< Dimensions >::GlobalIndexType getNumberOfEntities() const
    {
       return entitiesStorage.getNumberOfEntities( tnlDimensionsTag< Dimensions >() );
    }
 
-   bool setNumberOfCells( typename EntitiesTraits< dimensions >::GlobalIndexType size )
-   {
-      return entitiesStorage.setNumberOfEntities( tnlDimensionsTag< dimensions >(), size );
-   }
-
-   typename EntitiesTraits< dimensions >::GlobalIndexType getNumberOfCells() const
+   typename MeshTraits::template EntityTraits< dimensions >::GlobalIndexType getNumberOfCells() const
    {
       return entitiesStorage.getNumberOfEntities( tnlDimensionsTag< dimensions >() );
    }
 
    template< int Dimensions >
-      typename EntitiesTraits< Dimensions >::EntityType&
-         getEntity( const typename EntitiesTraits< Dimensions >::GlobalIndexType entityIndex )
+      typename MeshTraits::template EntityTraits< Dimensions >::EntityType&
+         getEntity( const typename MeshTraits::template EntityTraits< Dimensions >::GlobalIndexType entityIndex )
    {
       return entitiesStorage.getEntity( tnlDimensionsTag< Dimensions >(), entityIndex );
    }
 
    template< int Dimensions >
-      const typename EntitiesTraits< Dimensions >::EntityType&
-         getEntity( const typename EntitiesTraits< Dimensions >::GlobalIndexType entityIndex ) const
+      const typename MeshTraits::template EntityTraits< Dimensions >::EntityType&
+         getEntity( const typename MeshTraits::template EntityTraits< Dimensions >::GlobalIndexType entityIndex ) const
    {
       return entitiesStorage.getEntity( tnlDimensionsTag< Dimensions >(), entityIndex );
    }
 
    template< int Dimensions >
-      void setEntity( const typename EntitiesTraits< Dimensions >::GlobalIndexType entityIndex,
-                      const typename EntitiesTraits< Dimensions >::EntityType& entity )
-   {
-      entitiesStorage.setEntity( tnlDimensionsTag< Dimensions >(), entityIndex, entity );
-   }
-
-   template< int Dimensions >
-   typename EntitiesTraits< Dimensions >::SharedContainerType& getEntities()
+   typename MeshTraits::template EntityTraits< Dimensions >::AccessArrayType& 
+   getEntities()
    {
       return entitiesStorage.getEntities( tnlDimensionsTag< Dimensions >() );
    }
 
    template< int Dimensions >
-   const typename EntitiesTraits< Dimensions >::SharedContainerType& getEntities() const
+   const typename MeshTraits::template EntityTraits< Dimensions >::AccessArrayType&
+   getEntities() const
    {
       return entitiesStorage.getEntities( tnlDimensionsTag< Dimensions >() );
    }
 
-   typename EntitiesTraits< dimensions >::EntityType&
-      getCell( const typename EntitiesTraits< dimensions >::GlobalIndexType entityIndex )
+   typename MeshTraits::template EntityTraits< dimensions >::EntityType&
+      getCell( const typename MeshTraits::template EntityTraits< dimensions >::GlobalIndexType entityIndex )
    {
       return entitiesStorage.getEntity( tnlDimensionsTag< dimensions >(), entityIndex );
    }
 
-   const typename EntitiesTraits< dimensions >::EntityType&
-      getCell( const typename EntitiesTraits< dimensions >::GlobalIndexType entityIndex ) const
+   const typename MeshTraits::template EntityTraits< dimensions >::EntityType&
+      getCell( const typename MeshTraits::template EntityTraits< dimensions >::GlobalIndexType entityIndex ) const
    {
       return entitiesStorage.getEntity( tnlDimensionsTag< dimensions >(), entityIndex );
    }
 
-   void setCell( const typename EntitiesTraits< dimensions >::GlobalIndexType entityIndex,
-                 const typename EntitiesTraits< dimensions >::EntityType& entity )
-   {
-      entitiesStorage.setEntity( tnlDimensionsTag< dimensions >(), entityIndex, entity );
-   }
-
    void print( ostream& str ) const
    {
       entitiesStorage.print( str );
@@ -185,18 +154,18 @@ class tnlMesh : public tnlObject,
 
    // TODO: this is only for mesh intializer - remove it if possible
    template< typename DimensionsTag >
-	typename tnlMeshConfigTraits< MeshConfig >::template EntityTraits< DimensionsTag >::ContainerType& entitiesArray()
+	typename MeshTraits::template EntityTraits< DimensionsTag::value >::StorageArrayType& entitiesArray()
    {
       return entitiesStorage.entitiesArray( DimensionsTag() ); 
    }
   
    template< typename DimensionsTag, typename SuperDimensionsTag >
-	typename tnlMeshConfigTraits< MeshConfig >::GlobalIdArrayType& superentityIdsArray()
+	typename tnlMeshTraits< MeshConfig >::GlobalIdArrayType& superentityIdsArray()
    {
       return entitiesStorage.template superentityIdsArray< SuperDimensionsTag >( DimensionsTag() ); 
    }
    
-   typedef typename tnlMeshConfigTraits< MeshConfig>::PointArrayType    PointArrayType;
+   typedef typename tnlMeshTraits< MeshConfig>::PointArrayType    PointArrayType;
    typedef typename tnlMeshTraits< MeshConfig>::CellSeedArrayType CellSeedArrayType;
 
    bool init( const PointArrayType& points,
@@ -207,11 +176,9 @@ class tnlMesh : public tnlObject,
    }
    
    protected:
-      
-      
+            
       tnlMeshStorageLayers< MeshConfig > entitiesStorage;
-
-
+      
       tnlMeshConfigValidator< MeshConfig > configValidator;
 };
 
diff --git a/src/mesh/tnlMeshEntity.h b/src/mesh/tnlMeshEntity.h
index a4997f450e1e0ccd697a65dfef5a68c9c6a5fde9..b6f0948d42f26bfcee1f6b9e8faa7cbad6bb79ff 100644
--- a/src/mesh/tnlMeshEntity.h
+++ b/src/mesh/tnlMeshEntity.h
@@ -29,25 +29,25 @@
 #include <mesh/layers/tnlMeshSuperentityAccess.h>
 #include <mesh/tnlMeshEntitySeed.h>
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag >
 class tnlMeshEntity
-   : public tnlMeshSubentityStorageLayers< ConfigTag, EntityTag >,     
-     public tnlMeshSuperentityAccess< ConfigTag, EntityTag >,
-     public tnlMeshEntityId< typename ConfigTag::IdType,
-                             typename ConfigTag::GlobalIndexType >
+   : public tnlMeshSubentityStorageLayers< MeshConfig, EntityTag >,     
+     public tnlMeshSuperentityAccess< MeshConfig, EntityTag >,
+     public tnlMeshEntityId< typename MeshConfig::IdType,
+                             typename MeshConfig::GlobalIndexType >
 {
    public:
 
    /****
     * Entity typedefs
     */
-   typedef ConfigTag                                            MeshConfigTag;
+   typedef MeshConfig                                            MeshMeshConfig;
    typedef EntityTag                                            Tag;
-   typedef tnlMeshEntitySeed< ConfigTag, EntityTag >            SeedType;
+   typedef tnlMeshEntitySeed< MeshConfig, EntityTag >            SeedType;
    enum { dimensions = Tag::dimensions };
-   enum { meshDimensions = tnlMeshTraits< ConfigTag >::meshDimensions };      
-   typedef typename tnlMeshConfigTraits< ConfigTag>::IdPermutationArrayAccessorType IdPermutationArrayAccessorType;
+   enum { meshDimensions = tnlMeshTraits< MeshConfig >::meshDimensions };      
+   typedef typename tnlMeshTraits< MeshConfig>::IdPermutationArrayAccessorType IdPermutationArrayAccessorType;
 
    tnlMeshEntity( const SeedType& entitySeed )
    {
@@ -61,7 +61,7 @@ class tnlMeshEntity
    static tnlString getType()
    {
       return tnlString( "tnlMesh< " ) +
-                        //ConfigTag::getType() + ", " +
+                        //MeshConfig::getType() + ", " +
                         //EntityTag::getType() + ", " +
                         " >";
    }
@@ -78,16 +78,16 @@ class tnlMeshEntity
 
    bool save( tnlFile& file ) const
    {
-      if( ! tnlMeshSubentityStorageLayers< ConfigTag, EntityTag >::save( file ) /*||
-          ! tnlMeshSuperentityStorageLayers< ConfigTag, EntityTag >::save( file )*/ )
+      if( ! tnlMeshSubentityStorageLayers< MeshConfig, EntityTag >::save( file ) /*||
+          ! tnlMeshSuperentityStorageLayers< MeshConfig, EntityTag >::save( file )*/ )
          return false;
       return true;
    }
 
    bool load( tnlFile& file )
    {
-      if( ! tnlMeshSubentityStorageLayers< ConfigTag, EntityTag >::load( file ) /*||
-          ! tnlMeshSuperentityStorageLayers< ConfigTag, EntityTag >::load( file ) */ )
+      if( ! tnlMeshSubentityStorageLayers< MeshConfig, EntityTag >::load( file ) /*||
+          ! tnlMeshSuperentityStorageLayers< MeshConfig, EntityTag >::load( file ) */ )
          return false;
       return true;
    }
@@ -95,16 +95,16 @@ class tnlMeshEntity
    void print( ostream& str ) const
    {
       str << "\t Mesh entity dimensions: " << EntityTag::dimensions << endl;
-      tnlMeshSubentityStorageLayers< ConfigTag, EntityTag >::print( str );
-      tnlMeshSuperentityAccess< ConfigTag, EntityTag >::print( str );
+      tnlMeshSubentityStorageLayers< MeshConfig, EntityTag >::print( str );
+      tnlMeshSuperentityAccess< MeshConfig, EntityTag >::print( str );
    }
 
    bool operator==( const tnlMeshEntity& entity ) const
    {
-      return ( tnlMeshSubentityStorageLayers< ConfigTag, EntityTag >::operator==( entity ) &&
-               tnlMeshSuperentityAccess< ConfigTag, EntityTag >::operator==( entity ) &&
-               tnlMeshEntityId< typename ConfigTag::IdType,
-                                typename ConfigTag::GlobalIndexType >::operator==( entity ) );
+      return ( tnlMeshSubentityStorageLayers< MeshConfig, EntityTag >::operator==( entity ) &&
+               tnlMeshSuperentityAccess< MeshConfig, EntityTag >::operator==( entity ) &&
+               tnlMeshEntityId< typename MeshConfig::IdType,
+                                typename MeshConfig::GlobalIndexType >::operator==( entity ) );
    }
 
    /****
@@ -115,9 +115,9 @@ class tnlMeshEntity
    {
       static_assert( Dimensions < meshDimensions, "Asking for subentities with more or the same number of dimensions then the mesh itself." );
       typedef tnlDimensionsTag< Dimensions >                 DimensionsTag;
-      typedef tnlMeshSubentitiesTraits< ConfigTag,
+      typedef tnlMeshSubentitiesTraits< MeshConfig,
                                         EntityTag,
-                                        DimensionsTag >      SubentityTraits;
+                                        DimensionsTag::value >      SubentityTraits;
       typedef typename SubentityTraits::ContainerType           ContainerType;
       typedef typename SubentityTraits::SharedContainerType     SharedContainerType;
       typedef typename ContainerType::ElementType               GlobalIndexType;
@@ -125,10 +125,10 @@ class tnlMeshEntity
 
       // TODO: make this as:
       // typedef typename Type::IndexType   LocalIndexType
-      /*enum { available = tnlMeshSubentityStorage< ConfigTag,
+      /*enum { available = tnlMeshSubentityStorage< MeshConfig,
                                                   EntityTag,
                                                   Dimensions >::enabled };*/
-      static const bool available = ConfigTag::template subentityStorage( EntityTag(), Dimensions );
+      static const bool available = MeshConfig::template subentityStorage( EntityTag(), Dimensions );
       enum { subentitiesCount = SubentityTraits::count };
    };
 
@@ -154,7 +154,7 @@ class tnlMeshEntity
                  cerr << "localIndex = " << localIndex
                       << " subentitiesCount = "
                       << SubentitiesTraits< Dimensions >::subentitiesCount );
-      typedef tnlMeshSubentityStorageLayers< ConfigTag, EntityTag >  SubentityBaseType;
+      typedef tnlMeshSubentityStorageLayers< MeshConfig, EntityTag >  SubentityBaseType;
       SubentityBaseType::setSubentityIndex( tnlDimensionsTag< Dimensions >(),
                                             localIndex,
                                             globalIndex );
@@ -170,7 +170,7 @@ class tnlMeshEntity
                     cerr << "localIndex = " << localIndex
                          << " subentitiesCount = "
                          << SubentitiesTraits< Dimensions >::subentitiesCount );
-         typedef tnlMeshSubentityStorageLayers< ConfigTag, EntityTag >  SubentityBaseType;
+         typedef tnlMeshSubentityStorageLayers< MeshConfig, EntityTag >  SubentityBaseType;
          return SubentityBaseType::getSubentityIndex( tnlDimensionsTag< Dimensions >(),
                                                       localIndex );
       }
@@ -180,7 +180,7 @@ class tnlMeshEntity
          getSubentitiesIndices()
    {
       static_assert( SubentitiesTraits< Dimensions >::available, "You try to get subentities which are not configured for storage." );
-      typedef tnlMeshSubentityStorageLayers< ConfigTag, EntityTag >  SubentityBaseType;
+      typedef tnlMeshSubentityStorageLayers< MeshConfig, EntityTag >  SubentityBaseType;
       return SubentityBaseType::getSubentitiesIndices( tnlDimensionsTag< Dimensions >() );
    }
 
@@ -189,7 +189,7 @@ class tnlMeshEntity
          getSubentitiesIndices() const
    {
       static_assert( SubentitiesTraits< Dimensions >::available, "You try to set subentities which are not configured for storage." );
-      typedef tnlMeshSubentityStorageLayers< ConfigTag, EntityTag >  SubentityBaseType;
+      typedef tnlMeshSubentityStorageLayers< MeshConfig, EntityTag >  SubentityBaseType;
       return SubentityBaseType::getSubentitiesIndices( tnlDimensionsTag< Dimensions >() );
    }
 
@@ -201,7 +201,7 @@ class tnlMeshEntity
    {
       static_assert( Dimensions <= meshDimensions, "Asking for subentities with more dimensions then the mesh itself." );
       typedef tnlDimensionsTag< Dimensions >                 DimensionsTag;
-      typedef tnlMeshSuperentitiesTraits< ConfigTag,
+      typedef tnlMeshSuperentitiesTraits< MeshConfig,
                                           EntityTag,
                                           DimensionsTag >    SuperentityTraits;
       typedef typename SuperentityTraits::ContainerType         ContainerType;
@@ -210,7 +210,7 @@ class tnlMeshEntity
       typedef int                                               LocalIndexType;      
       // TODO: make this as:
       // typedef typename Type::IndexType   LocalIndexType      
-      static const bool available = ConfigTag::template superentityStorage( EntityTag(), Dimensions );
+      static const bool available = MeshConfig::template superentityStorage( EntityTag(), Dimensions );
    };
 
    /*template< int Dimensions >
@@ -219,7 +219,7 @@ class tnlMeshEntity
       static_assert( SuperentitiesTraits< Dimensions >::available, "You try to set number of superentities which are not configured for storage." );
       tnlAssert( size >= 0,
                  cerr << "size = " << size << endl; );
-      typedef tnlMeshSuperentityStorageLayers< ConfigTag, EntityTag >  SuperentityBaseType;
+      typedef tnlMeshSuperentityStorageLayers< MeshConfig, EntityTag >  SuperentityBaseType;
       return SuperentityBaseType::setNumberOfSuperentities( tnlDimensionsTag< Dimensions >(),
                                                             size );
    }*/
@@ -228,7 +228,7 @@ class tnlMeshEntity
    typename SuperentitiesTraits< Dimensions >::LocalIndexType getNumberOfSuperentities() const
    {
       static_assert( SuperentitiesTraits< Dimensions >::available, "You try to get number of superentities which are not configured for storage." );
-      typedef tnlMeshSuperentityAccess< ConfigTag, EntityTag >  SuperentityBaseType;
+      typedef tnlMeshSuperentityAccess< MeshConfig, EntityTag >  SuperentityBaseType;
       return SuperentityBaseType::getNumberOfSuperentities( tnlDimensionsTag< Dimensions >() );
    }
 
@@ -240,7 +240,7 @@ class tnlMeshEntity
       tnlAssert( localIndex < this->getNumberOfSuperentities< Dimensions >(),
                  cerr << " localIndex = " << localIndex
                       << " this->getNumberOfSuperentities< Dimensions >() = " << this->getNumberOfSuperentities< Dimensions >() << endl; );
-      typedef tnlMeshSuperentityAccess< ConfigTag, EntityTag >  SuperentityBaseType;
+      typedef tnlMeshSuperentityAccess< MeshConfig, EntityTag >  SuperentityBaseType;
       SuperentityBaseType::setSuperentityIndex( tnlDimensionsTag< Dimensions >(),
                                                 localIndex,
                                                 globalIndex );
@@ -254,7 +254,7 @@ class tnlMeshEntity
       tnlAssert( localIndex < this->getNumberOfSuperentities< Dimensions >(),
                  cerr << " localIndex = " << localIndex
                       << " this->getNumberOfSuperentities< Dimensions >() = " << this->getNumberOfSuperentities< Dimensions >() << endl; );
-      typedef tnlMeshSuperentityAccess< ConfigTag, EntityTag >  SuperentityBaseType;
+      typedef tnlMeshSuperentityAccess< MeshConfig, EntityTag >  SuperentityBaseType;
       return SuperentityBaseType::getSuperentityIndex( tnlDimensionsTag< Dimensions >(),
                                                        localIndex );
    }
@@ -263,7 +263,7 @@ class tnlMeshEntity
       typename SuperentitiesTraits< Dimensions >::SharedContainerType& getSuperentitiesIndices()
    {
       static_assert( SuperentitiesTraits< Dimensions >::available, "You try to get superentities which are not configured for storage." );
-      typedef tnlMeshSuperentityAccess< ConfigTag, EntityTag >  SuperentityBaseType;
+      typedef tnlMeshSuperentityAccess< MeshConfig, EntityTag >  SuperentityBaseType;
       //return SuperentityBaseType::getSuperentitiesIndices( tnlDimensionsTag< Dimensions >() );
    }
 
@@ -271,7 +271,7 @@ class tnlMeshEntity
       const typename SuperentitiesTraits< Dimensions >::SharedContainerType& getSuperentitiesIndices() const
    {
       static_assert( SuperentitiesTraits< Dimensions >::available, "You try to get superentities which are not configured for storage." );
-      typedef tnlMeshSuperentityAccess< ConfigTag, EntityTag >  SuperentityBaseType;
+      typedef tnlMeshSuperentityAccess< MeshConfig, EntityTag >  SuperentityBaseType;
       return SuperentityBaseType::getSubentitiesIndices( tnlDimensionsTag< Dimensions >() );
    }
 
@@ -313,19 +313,19 @@ class tnlMeshEntity
    template< int dim >
    IdPermutationArrayAccessorType subentityOrientation( LocalIndexType index ) const
    {
-      static const LocalIndexType subentitiesCount = tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< EntityTag, tnlDimensionsTag<dim>>::count;
+      static const LocalIndexType subentitiesCount = tnlMeshTraits< MeshConfig >::template SubentityTraits< EntityTag, tnlDimensionsTag<dim>>::count;
       tnlAssert( 0 <= index && index < subentitiesCount, );
       
       return SubentityStorageLayers::subentityOrientation( tnlDimensionsTag< dim >(), index );
    }  
    
    // TODO: This is only for the mesh initializer, fix this
-   typedef tnlMeshSuperentityAccess< ConfigTag, EntityTag >                     SuperentityAccessBase;
-   typedef typename tnlMeshConfigTraits< ConfigTag>::IdArrayAccessorType        IdArrayAccessorType;
-   typedef tnlMeshSubentityStorageLayers< ConfigTag, EntityTag >                SubentityStorageLayers;
+   typedef tnlMeshSuperentityAccess< MeshConfig, EntityTag >                     SuperentityAccessBase;
+   typedef typename tnlMeshTraits< MeshConfig>::IdArrayAccessorType        IdArrayAccessorType;
+   typedef tnlMeshSubentityStorageLayers< MeshConfig, EntityTag >                SubentityStorageLayers;
    
    template< typename DimensionsTag >
-   typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< EntityTag, DimensionsTag >::IdArrayType& subentityIdsArray()
+   typename tnlMeshTraits< MeshConfig >::template SubentityTraits< EntityTag, DimensionsTag::value >::IdArrayType& subentityIdsArray()
    {
       return SubentityStorageLayers::subentityIdsArray( DimensionsTag() );
    }
@@ -337,30 +337,30 @@ class tnlMeshEntity
    }
    
    template< typename DimensionsTag >
-   typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< EntityTag, DimensionsTag >::OrientationArrayType& subentityOrientationsArray()
+   typename tnlMeshTraits< MeshConfig >::template SubentityTraits< EntityTag, DimensionsTag::value >::OrientationArrayType& subentityOrientationsArray()
    {
       return SubentityStorageLayers::subentityOrientationsArray( DimensionsTag() );
    }      
       
 };
 
-template< typename ConfigTag >
-class tnlMeshEntity< ConfigTag, tnlMeshVertexTag >
-   : public tnlMeshSuperentityAccess< ConfigTag, tnlMeshVertexTag >,
-     public tnlMeshEntityId< typename ConfigTag::IdType,
-                             typename ConfigTag::GlobalIndexType >
+template< typename MeshConfig >
+class tnlMeshEntity< MeshConfig, tnlMeshVertexTag >
+   : public tnlMeshSuperentityAccess< MeshConfig, tnlMeshVertexTag >,
+     public tnlMeshEntityId< typename MeshConfig::IdType,
+                             typename MeshConfig::GlobalIndexType >
 {
    public:
 
       /****
        * The entity typedefs
        */
-      typedef ConfigTag         MeshConfigTag;
+      typedef MeshConfig         MeshMeshConfig;
       typedef tnlMeshVertexTag  Tag;
-      typedef tnlMeshEntitySeed< ConfigTag, tnlMeshVertexTag >            SeedType;
-      typedef typename tnlMeshTraits< ConfigTag >::PointType PointType;
+      typedef tnlMeshEntitySeed< MeshConfig, tnlMeshVertexTag >            SeedType;
+      typedef typename tnlMeshTraits< MeshConfig >::PointType PointType;
       enum { dimensions = Tag::dimensions };
-      enum { meshDimensions = tnlMeshTraits< ConfigTag >::meshDimensions };
+      enum { meshDimensions = tnlMeshTraits< MeshConfig >::meshDimensions };
 
       /*tnlMeshEntity( const SeedType & entytiSeed )
       {
@@ -374,7 +374,7 @@ class tnlMeshEntity< ConfigTag, tnlMeshVertexTag >
       static tnlString getType()
       {
          return tnlString( "tnlMesh< " ) +
-                           //ConfigTag::getType() + ", " +
+                           //MeshConfig::getType() + ", " +
                            //EntityTag::getType() + ", " +
                            " >";
       }
@@ -392,7 +392,7 @@ class tnlMeshEntity< ConfigTag, tnlMeshVertexTag >
 
       bool save( tnlFile& file ) const
       {
-         if( //! tnlMeshSuperentityStorageLayers< ConfigTag, tnlMeshVertexTag >::save( file ) ||
+         if( //! tnlMeshSuperentityStorageLayers< MeshConfig, tnlMeshVertexTag >::save( file ) ||
              ! point.save( file ) )
             return false;
          return true;
@@ -400,7 +400,7 @@ class tnlMeshEntity< ConfigTag, tnlMeshVertexTag >
 
       bool load( tnlFile& file )
       {
-         if( //! tnlMeshSuperentityStorageLayers< ConfigTag, tnlMeshVertexTag >::load( file ) ||
+         if( //! tnlMeshSuperentityStorageLayers< MeshConfig, tnlMeshVertexTag >::load( file ) ||
              ! point.load( file ) )
             return false;
          return true;
@@ -410,14 +410,14 @@ class tnlMeshEntity< ConfigTag, tnlMeshVertexTag >
       {
          str << "\t Mesh entity dimensions: " << tnlMeshVertexTag::dimensions << endl;
          str << "\t Coordinates = ( " << point << " )";
-         tnlMeshSuperentityAccess< ConfigTag, tnlMeshVertexTag >::print( str );
+         tnlMeshSuperentityAccess< MeshConfig, tnlMeshVertexTag >::print( str );
       }
 
       bool operator==( const tnlMeshEntity& entity ) const
       {
-         return ( //tnlMeshSuperentityAccess< ConfigTag, tnlMeshVertexTag >::operator==( entity ) &&
-                  tnlMeshEntityId< typename ConfigTag::IdType,
-                                   typename ConfigTag::GlobalIndexType >::operator==( entity ) &&
+         return ( //tnlMeshSuperentityAccess< MeshConfig, tnlMeshVertexTag >::operator==( entity ) &&
+                  tnlMeshEntityId< typename MeshConfig::IdType,
+                                   typename MeshConfig::GlobalIndexType >::operator==( entity ) &&
                   point == entity.point );
 
       }
@@ -429,7 +429,7 @@ class tnlMeshEntity< ConfigTag, tnlMeshVertexTag >
    struct SuperentitiesTraits
    {
       typedef tnlDimensionsTag< Dimensions >                 DimensionsTag;
-      typedef tnlMeshSuperentitiesTraits< ConfigTag,
+      typedef tnlMeshSuperentitiesTraits< MeshConfig,
                                           tnlMeshVertexTag,
                                           DimensionsTag >    SuperentityTraits;
       typedef typename SuperentityTraits::ContainerType         ContainerType;
@@ -438,10 +438,10 @@ class tnlMeshEntity< ConfigTag, tnlMeshVertexTag >
       typedef int                                               LocalIndexType;
       // TODO: make this as:
       // typedef typename Type::IndexType   LocalIndexType
-      /*enum { available = tnlMeshSuperentityStorage< ConfigTag,
+      /*enum { available = tnlMeshSuperentityStorage< MeshConfig,
                                                     tnlMeshVertexTag,
                                                     Dimensions >::enabled };*/
-      static const bool available = ConfigTag::template superentityStorage< tnlMeshVertexTag >( Dimensions );
+      static const bool available = MeshConfig::template superentityStorage< tnlMeshVertexTag >( Dimensions );
    };
    
    /*template< int Dimensions >
@@ -449,7 +449,7 @@ class tnlMeshEntity< ConfigTag, tnlMeshVertexTag >
    {
       tnlAssert( size >= 0,
                  cerr << "size = " << size << endl; );
-      typedef tnlMeshSuperentityStorageLayers< ConfigTag, tnlMeshVertexTag >  SuperentityBaseType;
+      typedef tnlMeshSuperentityStorageLayers< MeshConfig, tnlMeshVertexTag >  SuperentityBaseType;
       return SuperentityBaseType::setNumberOfSuperentities( tnlDimensionsTag< Dimensions >(),
                                                             size );
    }*/
@@ -457,21 +457,21 @@ class tnlMeshEntity< ConfigTag, tnlMeshVertexTag >
    template< int Dimensions >
    typename SuperentitiesTraits< Dimensions >::LocalIndexType getNumberOfSuperentities() const
    {
-      typedef tnlMeshSuperentityAccess< ConfigTag, tnlMeshVertexTag >  SuperentityBaseType;
+      typedef tnlMeshSuperentityAccess< MeshConfig, tnlMeshVertexTag >  SuperentityBaseType;
       //return SuperentityBaseType::getNumberOfSuperentities( tnlDimensionsTag< Dimensions >() );
    }
 
    template< int Dimensions >
       typename SuperentitiesTraits< Dimensions >::SharedContainerType& getSuperentitiesIndices()
    {
-      typedef tnlMeshSuperentityAccess< ConfigTag, tnlMeshVertexTag >  SuperentityBaseType;
+      typedef tnlMeshSuperentityAccess< MeshConfig, tnlMeshVertexTag >  SuperentityBaseType;
       //return SuperentityBaseType::getSuperentitiesIndices( tnlDimensionsTag< Dimensions >() );
    }
 
    template< int Dimensions >
       const typename SuperentitiesTraits< Dimensions >::SharedContainerType& getSuperentitiesIndeces() const
    {
-      typedef tnlMeshSuperentityAccess< ConfigTag, tnlMeshVertexTag >  SuperentityBaseType;
+      typedef tnlMeshSuperentityAccess< MeshConfig, tnlMeshVertexTag >  SuperentityBaseType;
       //return SuperentityBaseType::getSubentitiesIndices( tnlDimensionsTag< Dimensions >() );
    }
 
@@ -482,7 +482,7 @@ class tnlMeshEntity< ConfigTag, tnlMeshVertexTag >
       tnlAssert( localIndex < this->getNumberOfSuperentities< Dimensions >(),
                  cerr << " localIndex = " << localIndex
                       << " this->getNumberOfSuperentities< Dimensions >() = " << this->getNumberOfSuperentities< Dimensions >() << endl; );
-      typedef tnlMeshSuperentityAccess< ConfigTag, tnlMeshVertexTag >  SuperentityBaseType;
+      typedef tnlMeshSuperentityAccess< MeshConfig, tnlMeshVertexTag >  SuperentityBaseType;
       SuperentityBaseType::setSuperentityIndex( tnlDimensionsTag< Dimensions >(),
                                                 localIndex,
                                                 globalIndex );
@@ -495,7 +495,7 @@ class tnlMeshEntity< ConfigTag, tnlMeshVertexTag >
       tnlAssert( localIndex < this->getNumberOfSuperentities< Dimensions >(),
                  cerr << " localIndex = " << localIndex
                       << " this->getNumberOfSuperentities< Dimensions >() = " << this->getNumberOfSuperentities< Dimensions >() << endl; );
-      typedef tnlMeshSuperentityAccess< ConfigTag, tnlMeshVertexTag >  SuperentityBaseType;
+      typedef tnlMeshSuperentityAccess< MeshConfig, tnlMeshVertexTag >  SuperentityBaseType;
       /*return SuperentityBaseType::getSuperentityIndex( tnlDimensionsTag< Dimensions >(),
                                                        localIndex );*/
    }
@@ -514,8 +514,8 @@ class tnlMeshEntity< ConfigTag, tnlMeshVertexTag >
    
    // TODO: This is only for the mesh initializer, fix this
    public:
-   typedef typename tnlMeshConfigTraits< ConfigTag>::IdArrayAccessorType        IdArrayAccessorType;
-   typedef tnlMeshSuperentityAccess< ConfigTag, tnlMeshVertexTag > SuperentityAccessBase;
+   typedef typename tnlMeshTraits< MeshConfig>::IdArrayAccessorType        IdArrayAccessorType;
+   typedef tnlMeshSuperentityAccess< MeshConfig, tnlMeshVertexTag > SuperentityAccessBase;
    
    template<typename DimensionsTag >
 	IdArrayAccessorType& superentityIdsArray()
@@ -525,9 +525,9 @@ class tnlMeshEntity< ConfigTag, tnlMeshVertexTag >
 
 };
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag >
-ostream& operator <<( ostream& str, const tnlMeshEntity< ConfigTag, EntityTag >& entity )
+ostream& operator <<( ostream& str, const tnlMeshEntity< MeshConfig, EntityTag >& entity )
 {
    entity.print( str );
    return str;
@@ -537,9 +537,9 @@ ostream& operator <<( ostream& str, const tnlMeshEntity< ConfigTag, EntityTag >&
  * This tells the compiler that theMeshEntity is a type with a dynamic memory allocation.
  * It is necessary for the loading and the saving of the mesh entities arrays.
  */
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag >
-struct tnlDynamicTypeTag< tnlMeshEntity< ConfigTag, EntityTag > >
+struct tnlDynamicTypeTag< tnlMeshEntity< MeshConfig, EntityTag > >
 {
    enum { value = true };
 };
diff --git a/src/mesh/tnlMeshEntityInitializer.h b/src/mesh/tnlMeshEntityInitializer.h
index 7a689c43baba3df41b65a6c53c858ec9fecf683b..340544f0ba6837b8b1204a14a36cc3b1d60758d5 100644
--- a/src/mesh/tnlMeshEntityInitializer.h
+++ b/src/mesh/tnlMeshEntityInitializer.h
@@ -22,61 +22,61 @@
 #include <mesh/tnlMeshSuperentityStorageInitializer.h>
 #include <mesh/tnlMeshSubentitySeedCreator.h>
 
-template< typename ConfigTag >
+template< typename MeshConfig >
 class tnlMeshInitializer;
 
-template<typename ConfigTag,
+template<typename MeshConfig,
          typename EntityTag,
          typename DimensionsTag,
          typename SubentityStorageTag =
-            typename tnlMeshSubentitiesTraits< ConfigTag,
+            typename tnlMeshSubentitiesTraits< MeshConfig,
                                                EntityTag,
-                                               DimensionsTag >::SubentityStorageTag,
+                                               DimensionsTag::value >::SubentityStorageTag,
          typename SubentityOrientationStorage = 
-            tnlStorageTraits< tnlMeshConfigTraits< ConfigTag >::
-               template SubentityTraits< EntityTag, DimensionsTag >::orientationEnabled >,
+            tnlStorageTraits< tnlMeshTraits< MeshConfig >::
+               template SubentityTraits< EntityTag, DimensionsTag::value >::orientationEnabled >,
          typename SuperentityStorageTag = 
-            typename tnlMeshSuperentitiesTraits< ConfigTag,
-                                                 typename tnlMeshSubentitiesTraits< ConfigTag,
+            typename tnlMeshSuperentitiesTraits< MeshConfig,
+                                                 typename tnlMeshSubentitiesTraits< MeshConfig,
                                                                                     EntityTag,
-                                                                                    DimensionsTag >::SubentityTag,
+                                                                                    DimensionsTag::value >::SubentityTag,
                                                                                tnlDimensionsTag< EntityTag::dimensions > >::SuperentityStorageTag >
 class tnlMeshEntityInitializerLayer;
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag >
 class tnlMeshEntityInitializer
-   : public tnlMeshEntityInitializerLayer< ConfigTag,
+   : public tnlMeshEntityInitializerLayer< MeshConfig,
                                            EntityTag, 
                                            tnlDimensionsTag< EntityTag::dimensions - 1 > >
 {
    typedef tnlDimensionsTag< EntityTag::dimensions >                                 DimensionsTag;
    private:
 
-      typedef tnlMeshEntityInitializerLayer< ConfigTag,
+      typedef tnlMeshEntityInitializerLayer< MeshConfig,
                                            EntityTag, 
                                            tnlDimensionsTag< EntityTag::dimensions - 1 > > BaseType;
       
    typedef
-      tnlMeshEntityInitializerLayer< ConfigTag,
+      tnlMeshEntityInitializerLayer< MeshConfig,
                                      EntityTag,
                                      tnlDimensionsTag< EntityTag::dimensions - 1 > >   SubentityBaseType;
    typedef
-      tnlMeshSuperentityStorageInitializerLayer< ConfigTag,
+      tnlMeshSuperentityStorageInitializerLayer< MeshConfig,
                                           EntityTag,
                                           typename
-                                          tnlMeshTraits< ConfigTag >::DimensionsTag > SuperentityBaseType;
+                                          tnlMeshTraits< MeshConfig >::DimensionsTag > SuperentityBaseType;
 
-   typedef typename tnlMeshEntitiesTraits< ConfigTag, DimensionsTag >::Type               EntityType;
-   typedef typename tnlMeshEntitiesTraits< ConfigTag,
-                                           DimensionsTag >::ContainerType::IndexType      GlobalIndexType;
+   typedef typename tnlMeshEntitiesTraits< MeshConfig, DimensionsTag::value >::EntityType               EntityType;   
+   typedef typename tnlMeshEntitiesTraits< MeshConfig,
+                                           DimensionsTag::value >::GlobalIndexType      GlobalIndexType;
 
-   typedef tnlMeshSubentitiesTraits< ConfigTag, EntityTag, tnlDimensionsTag< 0 > >        SubvertexTag;
+   typedef tnlMeshSubentitiesTraits< MeshConfig, EntityTag, 0 >                         SubvertexTag;
    typedef typename SubvertexTag::ContainerType::ElementType                                 VertexGlobalIndexType;
    typedef typename SubvertexTag::ContainerType::IndexType                                   VertexLocalIndexType;
 
-   typedef tnlMeshInitializer< ConfigTag >                                                   InitializerType;
-   typedef tnlMeshEntitySeed< ConfigTag, EntityTag >                            SeedType;
+   typedef tnlMeshInitializer< MeshConfig >                                                   InitializerType;
+   typedef tnlMeshEntitySeed< MeshConfig, EntityTag >                            SeedType;
 
    template< typename > class SubentitiesCreator;
 
@@ -95,7 +95,7 @@ class tnlMeshEntityInitializer
    }
    
    template< typename SuperentityDimensionTag >
-   typename tnlMeshSuperentitiesTraits< ConfigTag, EntityTag, SuperentityDimensionTag >::SharedContainerType& getSuperentityContainer( SuperentityDimensionTag )
+   typename tnlMeshSuperentitiesTraits< MeshConfig, EntityTag, SuperentityDimensionTag >::SharedContainerType& getSuperentityContainer( SuperentityDimensionTag )
    {
       return this->entity->template getSuperentitiesIndices< SuperentityDimensionTag::value >();
    }
@@ -138,36 +138,36 @@ class tnlMeshEntityInitializer< MeshConfig, tnlMeshVertexTag >
  *  SUBENTITY STORAGE     SUBENTITY ORIENTATION    SUPERENTITY STORAGE
  *      TRUE                    FALSE                    TRUE 
  */
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag,
           typename DimensionsTag >
-class tnlMeshEntityInitializerLayer< ConfigTag,
+class tnlMeshEntityInitializerLayer< MeshConfig,
                                      EntityTag,
                                      DimensionsTag,
                                      tnlStorageTraits< true >,
                                      tnlStorageTraits< false >,
                                      tnlStorageTraits< true > >
-   : public tnlMeshEntityInitializerLayer< ConfigTag,
+   : public tnlMeshEntityInitializerLayer< MeshConfig,
                                            EntityTag,
                                            typename DimensionsTag::Decrement >
 {
-   typedef tnlMeshEntityInitializerLayer< ConfigTag,
+   typedef tnlMeshEntityInitializerLayer< MeshConfig,
                                           EntityTag,
                                           typename DimensionsTag::Decrement >                   BaseType;
 
-   typedef tnlMeshSubentitiesTraits< ConfigTag, EntityTag, DimensionsTag >                     SubentitiesTraits;
+   typedef tnlMeshSubentitiesTraits< MeshConfig, EntityTag, DimensionsTag::value >             SubentitiesTraits;
    typedef typename SubentitiesTraits::SubentityContainerType                                  SubentityContainerType;
    typedef typename SubentitiesTraits::SharedContainerType                                     SharedContainerType;
    typedef typename SharedContainerType::ElementType                                           GlobalIndexType;
 
-   typedef tnlMeshInitializer< ConfigTag >                                                          InitializerType;
-   typedef tnlMeshEntityInitializer< ConfigTag, EntityTag >                                         EntityInitializerType;
+   typedef tnlMeshInitializer< MeshConfig >                                                          InitializerType;
+   typedef tnlMeshEntityInitializer< MeshConfig, EntityTag >                                         EntityInitializerType;
    typedef tnlDimensionsTag< EntityTag::dimensions >                                                EntityDimensionsTag;
-   typedef tnlMeshEntity< ConfigTag, EntityTag >                                                    EntityType;
-   typedef tnlMeshEntitySeed< ConfigTag, EntityTag >                                                SeedType;
-   typedef tnlMeshSubentitySeedsCreator< ConfigTag, EntityTag, DimensionsTag >                      SubentitySeedsCreatorType;
-   typedef typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< EntityTag, DimensionsTag >::IdArrayType IdArrayType;
-   typedef typename tnlMeshTraits< ConfigTag >::LocalIndexType                                             LocalIndexType;
+   typedef tnlMeshEntity< MeshConfig, EntityTag >                                                    EntityType;
+   typedef tnlMeshEntitySeed< MeshConfig, EntityTag >                                                SeedType;
+   typedef tnlMeshSubentitySeedsCreator< MeshConfig, EntityTag, DimensionsTag >                      SubentitySeedsCreatorType;
+   typedef typename tnlMeshTraits< MeshConfig >::template SubentityTraits< EntityTag, DimensionsTag >::IdArrayType IdArrayType;
+   typedef typename tnlMeshTraits< MeshConfig >::LocalIndexType                                             LocalIndexType;
 
    protected:
    static void initSubentities( EntityType& entity, GlobalIndexType entityIndex, const SeedType& entitySeed,
@@ -195,36 +195,36 @@ class tnlMeshEntityInitializerLayer< ConfigTag,
  *  SUBENTITY STORAGE     SUBENTITY ORIENTATION    SUPERENTITY STORAGE
  *      TRUE                    TRUE                    TRUE 
  */
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag,
           typename DimensionsTag >
-class tnlMeshEntityInitializerLayer< ConfigTag,
+class tnlMeshEntityInitializerLayer< MeshConfig,
                                      EntityTag,
                                      DimensionsTag,
                                      tnlStorageTraits< true >,
                                      tnlStorageTraits< true >,
                                      tnlStorageTraits< true > >
-   : public tnlMeshEntityInitializerLayer< ConfigTag,
+   : public tnlMeshEntityInitializerLayer< MeshConfig,
                                            EntityTag,
                                            typename DimensionsTag::Decrement >
 {
-   typedef tnlMeshEntityInitializerLayer< ConfigTag,
+   typedef tnlMeshEntityInitializerLayer< MeshConfig,
                                           EntityTag,
                                           typename DimensionsTag::Decrement >                   BaseType;
 
-   typedef tnlMeshSubentitiesTraits< ConfigTag, EntityTag, DimensionsTag >                     SubentitiesTraits;
+   typedef tnlMeshSubentitiesTraits< MeshConfig, EntityTag, DimensionsTag::value >                     SubentitiesTraits;
    typedef typename SubentitiesTraits::SubentityContainerType                                  SubentityContainerType;
    typedef typename SubentitiesTraits::SharedContainerType                                     SharedContainerType;
    typedef typename SharedContainerType::ElementType                                           GlobalIndexType;
 
-   typedef tnlMeshInitializer< ConfigTag >                                                          InitializerType;
-   typedef tnlMeshEntityInitializer< ConfigTag, EntityTag >                                         EntityInitializerType;
+   typedef tnlMeshInitializer< MeshConfig >                                                          InitializerType;
+   typedef tnlMeshEntityInitializer< MeshConfig, EntityTag >                                         EntityInitializerType;
    typedef tnlDimensionsTag< EntityTag::dimensions >                                                EntityDimensionsTag;
-   typedef tnlMeshEntity< ConfigTag, EntityTag >                                                    EntityType;
-   typedef tnlMeshEntitySeed< ConfigTag, EntityTag >                                                SeedType;
-   typedef tnlMeshSubentitySeedsCreator< ConfigTag, EntityTag, DimensionsTag >                      SubentitySeedsCreatorType;
-   typedef typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< EntityTag, DimensionsTag >::IdArrayType IdArrayType;
-   typedef typename tnlMeshTraits< ConfigTag >::LocalIndexType                                             LocalIndexType;
+   typedef tnlMeshEntity< MeshConfig, EntityTag >                                                    EntityType;
+   typedef tnlMeshEntitySeed< MeshConfig, EntityTag >                                                SeedType;
+   typedef tnlMeshSubentitySeedsCreator< MeshConfig, EntityTag, DimensionsTag >                      SubentitySeedsCreatorType;
+   typedef typename tnlMeshTraits< MeshConfig >::template SubentityTraits< EntityTag, DimensionsTag::value >::IdArrayType IdArrayType;
+   typedef typename tnlMeshTraits< MeshConfig >::LocalIndexType                                             LocalIndexType;
    typedef typename SubentitiesTraits::OrientationArrayType                                    OrientationArrayType;
 
    protected:
@@ -258,36 +258,36 @@ class tnlMeshEntityInitializerLayer< ConfigTag,
  *  SUBENTITY STORAGE     SUBENTITY ORIENTATION    SUPERENTITY STORAGE
  *      TRUE                    TRUE                    FALSE
  */
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag,
           typename DimensionsTag >
-class tnlMeshEntityInitializerLayer< ConfigTag,
+class tnlMeshEntityInitializerLayer< MeshConfig,
                                      EntityTag,
                                      DimensionsTag,
                                      tnlStorageTraits< true >,
                                      tnlStorageTraits< true >,
                                      tnlStorageTraits< false > >
-   : public tnlMeshEntityInitializerLayer< ConfigTag,
+   : public tnlMeshEntityInitializerLayer< MeshConfig,
                                            EntityTag,
                                            typename DimensionsTag::Decrement >
 {
-   typedef tnlMeshEntityInitializerLayer< ConfigTag,
+   typedef tnlMeshEntityInitializerLayer< MeshConfig,
                                           EntityTag,
                                           typename DimensionsTag::Decrement >                   BaseType;
 
-   typedef tnlMeshSubentitiesTraits< ConfigTag, EntityTag, DimensionsTag >                     SubentitiesTraits;
+   typedef tnlMeshSubentitiesTraits< MeshConfig, EntityTag, DimensionsTag::value >                     SubentitiesTraits;
    typedef typename SubentitiesTraits::SubentityContainerType                                  SubentityContainerType;
    typedef typename SubentitiesTraits::SharedContainerType                                     SharedContainerType;
    typedef typename SharedContainerType::ElementType                                           GlobalIndexType;
 
-   typedef tnlMeshInitializer< ConfigTag >                                                          InitializerType;
-   typedef tnlMeshEntityInitializer< ConfigTag, EntityTag >                                         EntityInitializerType;
+   typedef tnlMeshInitializer< MeshConfig >                                                          InitializerType;
+   typedef tnlMeshEntityInitializer< MeshConfig, EntityTag >                                         EntityInitializerType;
    typedef tnlDimensionsTag< EntityTag::dimensions >                                                EntityDimensionsTag;
-   typedef tnlMeshEntity< ConfigTag, EntityTag >                                                    EntityType;
-   typedef tnlMeshEntitySeed< ConfigTag, EntityTag >                                                SeedType;
-   typedef tnlMeshSubentitySeedsCreator< ConfigTag, EntityTag, DimensionsTag >                      SubentitySeedsCreatorType;
-   typedef typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< EntityTag, DimensionsTag >::IdArrayType IdArrayType;
-   typedef typename tnlMeshTraits< ConfigTag >::LocalIndexType                                             LocalIndexType;
+   typedef tnlMeshEntity< MeshConfig, EntityTag >                                                    EntityType;
+   typedef tnlMeshEntitySeed< MeshConfig, EntityTag >                                                SeedType;
+   typedef tnlMeshSubentitySeedsCreator< MeshConfig, EntityTag, DimensionsTag >                      SubentitySeedsCreatorType;
+   typedef typename tnlMeshTraits< MeshConfig >::template SubentityTraits< EntityTag, DimensionsTag >::IdArrayType IdArrayType;
+   typedef typename tnlMeshTraits< MeshConfig >::LocalIndexType                                             LocalIndexType;
    typedef typename SubentitiesTraits::OrientationArrayType                                    OrientationArrayType;
 
    protected:
@@ -310,38 +310,38 @@ class tnlMeshEntityInitializerLayer< ConfigTag,
 };
 
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag,
           typename DimensionsTag >
-class tnlMeshEntityInitializerLayer< ConfigTag,
+class tnlMeshEntityInitializerLayer< MeshConfig,
                                      EntityTag,
                                      DimensionsTag,
                                      tnlStorageTraits< true >,
                                      tnlStorageTraits< false >,
                                      tnlStorageTraits< false > >
-   : public tnlMeshEntityInitializerLayer< ConfigTag,
+   : public tnlMeshEntityInitializerLayer< MeshConfig,
                                            EntityTag,
                                            typename DimensionsTag::Decrement >
 {
-   typedef tnlMeshEntityInitializerLayer< ConfigTag,
+   typedef tnlMeshEntityInitializerLayer< MeshConfig,
                                           EntityTag,
                                           typename DimensionsTag::Decrement >                   BaseType;
 
-   typedef typename tnlMeshSubentitiesTraits< ConfigTag,
+   typedef typename tnlMeshSubentitiesTraits< MeshConfig,
                                               EntityTag,
-                                              DimensionsTag >::SubentityContainerType          SubentityContainerType;
-   typedef typename tnlMeshSubentitiesTraits< ConfigTag,
+                                              DimensionsTag::value >::SubentityContainerType          SubentityContainerType;
+   typedef typename tnlMeshSubentitiesTraits< MeshConfig,
                                               EntityTag,
-                                              DimensionsTag >::SharedContainerType             SharedContainerType;
+                                              DimensionsTag::value >::SharedContainerType             SharedContainerType;
    typedef typename SharedContainerType::ElementType                                           GlobalIndexType;
 
-   typedef tnlMeshInitializer< ConfigTag >                                                     InitializerType;
-   typedef tnlMeshEntityInitializer< ConfigTag, EntityTag >                                    EntityInitializerType;
-   typedef tnlMeshEntity< ConfigTag, EntityTag >                                               EntityType;
-   typedef tnlMeshEntitySeed< ConfigTag, EntityTag >                                           SeedType;
-   typedef tnlMeshSubentitySeedsCreator< ConfigTag, EntityTag, DimensionsTag >                 SubentitySeedsCreatorType;
-   typedef typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< EntityTag, DimensionsTag >::IdArrayType IdArrayType;
-   typedef typename tnlMeshTraits< ConfigTag >::LocalIndexType                                             LocalIndexType;
+   typedef tnlMeshInitializer< MeshConfig >                                                     InitializerType;
+   typedef tnlMeshEntityInitializer< MeshConfig, EntityTag >                                    EntityInitializerType;
+   typedef tnlMeshEntity< MeshConfig, EntityTag >                                               EntityType;
+   typedef tnlMeshEntitySeed< MeshConfig, EntityTag >                                           SeedType;
+   typedef tnlMeshSubentitySeedsCreator< MeshConfig, EntityTag, DimensionsTag >                 SubentitySeedsCreatorType;
+   typedef typename tnlMeshTraits< MeshConfig >::template SubentityTraits< EntityTag, DimensionsTag >::IdArrayType IdArrayType;
+   typedef typename tnlMeshTraits< MeshConfig >::LocalIndexType                                             LocalIndexType;
 
    protected:
    static void initSubentities( EntityType& entity, GlobalIndexType entityIndex, const SeedType& entitySeed,
@@ -358,39 +358,39 @@ class tnlMeshEntityInitializerLayer< ConfigTag,
    }
 };
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag,
           typename DimensionsTag >
-class tnlMeshEntityInitializerLayer< ConfigTag,
+class tnlMeshEntityInitializerLayer< MeshConfig,
                                      EntityTag,
                                      DimensionsTag,
                                      tnlStorageTraits< false >,
                                      tnlStorageTraits< false >,
                                      tnlStorageTraits< true > >
-   : public tnlMeshEntityInitializerLayer< ConfigTag,
+   : public tnlMeshEntityInitializerLayer< MeshConfig,
                                            EntityTag,
                                            typename DimensionsTag::Decrement >
 {
-   typedef tnlMeshEntityInitializerLayer< ConfigTag,
+   typedef tnlMeshEntityInitializerLayer< MeshConfig,
                                           EntityTag,
                                           typename DimensionsTag::Decrement >                BaseType;
 
-   typedef typename tnlMeshSubentitiesTraits< ConfigTag,
+   typedef typename tnlMeshSubentitiesTraits< MeshConfig,
                                               EntityTag,
-                                              DimensionsTag >::SubentityContainerType        SubentityContainerType;
-   typedef typename tnlMeshSubentitiesTraits< ConfigTag,
+                                              DimensionsTag::value >::SubentityContainerType        SubentityContainerType;
+   typedef typename tnlMeshSubentitiesTraits< MeshConfig,
                                               EntityTag,
-                                              DimensionsTag >::SharedContainerType           SharedContainerType;
+                                              DimensionsTag::value >::SharedContainerType           SharedContainerType;
    typedef typename SharedContainerType::DataType                                            GlobalIndexType;
 
-   typedef tnlMeshInitializer< ConfigTag >                                                   InitializerType;
-   typedef tnlMeshEntityInitializer< ConfigTag, EntityTag >                                  EntityInitializerType;
+   typedef tnlMeshInitializer< MeshConfig >                                                   InitializerType;
+   typedef tnlMeshEntityInitializer< MeshConfig, EntityTag >                                  EntityInitializerType;
    typedef tnlDimensionsTag< EntityTag::dimensions >                                      EntityDimensionsTag;
-   typedef tnlMeshEntity< ConfigTag, EntityTag >                                           EntityType;
-   typedef tnlMeshEntitySeed< ConfigTag, EntityTag >                                           SeedType;
-   typedef tnlMeshSubentitySeedsCreator< ConfigTag, EntityTag, DimensionsTag >                 SubentitySeedsCreatorType;
-   typedef typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< EntityTag, DimensionsTag >::IdArrayType IdArrayType;
-   typedef typename tnlMeshTraits< ConfigTag >::LocalIndexType                                             LocalIndexType;
+   typedef tnlMeshEntity< MeshConfig, EntityTag >                                           EntityType;
+   typedef tnlMeshEntitySeed< MeshConfig, EntityTag >                                           SeedType;
+   typedef tnlMeshSubentitySeedsCreator< MeshConfig, EntityTag, DimensionsTag >                 SubentitySeedsCreatorType;
+   typedef typename tnlMeshTraits< MeshConfig >::template SubentityTraits< EntityTag, DimensionsTag >::IdArrayType IdArrayType;
+   typedef typename tnlMeshTraits< MeshConfig >::LocalIndexType                                             LocalIndexType;
 
 
    protected:
@@ -412,23 +412,23 @@ class tnlMeshEntityInitializerLayer< ConfigTag,
       }
 };
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag,
           typename DimensionsTag >
-class tnlMeshEntityInitializerLayer< ConfigTag,
+class tnlMeshEntityInitializerLayer< MeshConfig,
                                      EntityTag,
                                      DimensionsTag,
                                      tnlStorageTraits< false >,
                                      tnlStorageTraits< false >,
                                      tnlStorageTraits< false > >
-   : public tnlMeshEntityInitializerLayer< ConfigTag,
+   : public tnlMeshEntityInitializerLayer< MeshConfig,
                                            EntityTag,
                                            typename DimensionsTag::Decrement >
 {};
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag >
-class tnlMeshEntityInitializerLayer< ConfigTag,
+class tnlMeshEntityInitializerLayer< MeshConfig,
                                      EntityTag,
                                      tnlDimensionsTag< 0 >,
                                      tnlStorageTraits< true >,
@@ -436,21 +436,21 @@ class tnlMeshEntityInitializerLayer< ConfigTag,
                                      tnlStorageTraits< true > >
 {
    typedef tnlDimensionsTag< 0 >                                  DimensionsTag;
-   typedef tnlMeshSubentitiesTraits< ConfigTag,
+   typedef tnlMeshSubentitiesTraits< MeshConfig,
                                      EntityTag,
-                                     DimensionsTag >                 SubentitiesTraits;
+                                     DimensionsTag::value >                 SubentitiesTraits;
 
    typedef typename SubentitiesTraits::SharedContainerType           SharedContainerType;
    typedef typename SharedContainerType::ElementType                 GlobalIndexType;
 
-   typedef tnlMeshInitializer< ConfigTag >                           InitializerType;
-   typedef tnlMeshEntityInitializer< ConfigTag, EntityTag >          EntityInitializerType;
+   typedef tnlMeshInitializer< MeshConfig >                           InitializerType;
+   typedef tnlMeshEntityInitializer< MeshConfig, EntityTag >          EntityInitializerType;
    typedef tnlDimensionsTag< EntityTag::dimensions >              EntityDimensionsTag;
-   typedef tnlMeshEntity< ConfigTag, EntityTag >                                                    EntityType;
-      typedef tnlMeshEntitySeed< ConfigTag, EntityTag >                                           SeedType;
-   typedef tnlMeshSubentitySeedsCreator< ConfigTag, EntityTag, DimensionsTag >                 SubentitySeedsCreatorType;
-   typedef typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< EntityTag, DimensionsTag >::IdArrayType IdArrayType;
-   typedef typename tnlMeshTraits< ConfigTag >::LocalIndexType                                             LocalIndexType;
+   typedef tnlMeshEntity< MeshConfig, EntityTag >                                                    EntityType;
+      typedef tnlMeshEntitySeed< MeshConfig, EntityTag >                                           SeedType;
+   typedef tnlMeshSubentitySeedsCreator< MeshConfig, EntityTag, DimensionsTag >                 SubentitySeedsCreatorType;
+   typedef typename tnlMeshTraits< MeshConfig >::template SubentityTraits< EntityTag, DimensionsTag::value >::IdArrayType IdArrayType;
+   typedef typename tnlMeshTraits< MeshConfig >::LocalIndexType                                             LocalIndexType;
 
 
    protected:
@@ -460,29 +460,29 @@ class tnlMeshEntityInitializerLayer< ConfigTag,
 
 };
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag >
-class tnlMeshEntityInitializerLayer< ConfigTag,
+class tnlMeshEntityInitializerLayer< MeshConfig,
                                      EntityTag,
                                      tnlDimensionsTag< 0 >,
                                      tnlStorageTraits< true >,
                                      tnlStorageTraits< false >,
                                      tnlStorageTraits< false > >
 {
-   typedef tnlMeshInitializer< ConfigTag >         InitializerType;
-   typedef tnlMeshEntityInitializer< ConfigTag,
+   typedef tnlMeshInitializer< MeshConfig >         InitializerType;
+   typedef tnlMeshEntityInitializer< MeshConfig,
                                      EntityTag >   EntityInitializerType;
    typedef tnlDimensionsTag< 0 >                   DimensionsTag;
-   typedef tnlMeshSubentitiesTraits< ConfigTag,
+   typedef tnlMeshSubentitiesTraits< MeshConfig,
                                      EntityTag,
-                                     DimensionsTag >                 SubentitiesTraits;
+                                     DimensionsTag::value >                 SubentitiesTraits;
    typedef typename SubentitiesTraits::SharedContainerType           SharedContainerType;
    typedef typename SharedContainerType::ElementType                 GlobalIndexType;
-   typedef tnlMeshEntity< ConfigTag, EntityTag >                                                    EntityType;
-      typedef tnlMeshEntitySeed< ConfigTag, EntityTag >                                           SeedType;
-   typedef tnlMeshSubentitySeedsCreator< ConfigTag, EntityTag, DimensionsTag >                 SubentitySeedsCreatorType;
-   typedef typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< EntityTag, DimensionsTag >::IdArrayType IdArrayType;
-   typedef typename tnlMeshTraits< ConfigTag >::LocalIndexType                                             LocalIndexType;
+   typedef tnlMeshEntity< MeshConfig, EntityTag >                                                    EntityType;
+      typedef tnlMeshEntitySeed< MeshConfig, EntityTag >                                           SeedType;
+   typedef tnlMeshSubentitySeedsCreator< MeshConfig, EntityTag, DimensionsTag >                 SubentitySeedsCreatorType;
+   typedef typename tnlMeshTraits< MeshConfig >::template SubentityTraits< EntityTag, DimensionsTag >::IdArrayType IdArrayType;
+   typedef typename tnlMeshTraits< MeshConfig >::LocalIndexType                                             LocalIndexType;
 
 
    protected:
@@ -492,45 +492,45 @@ class tnlMeshEntityInitializerLayer< ConfigTag,
    
 };
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag >
-class tnlMeshEntityInitializerLayer< ConfigTag,
+class tnlMeshEntityInitializerLayer< MeshConfig,
                                      EntityTag,
                                      tnlDimensionsTag< 0 >,
                                      tnlStorageTraits< false >,
                                      tnlStorageTraits< true > > // Forces termination of recursive inheritance (prevents compiler from generating huge error logs)
 {
-   typedef tnlMeshInitializer< ConfigTag >                  InitializerType;
-   typedef tnlMeshEntityInitializer< ConfigTag, EntityTag > EntityInitializerType;
+   typedef tnlMeshInitializer< MeshConfig >                  InitializerType;
+   typedef tnlMeshEntityInitializer< MeshConfig, EntityTag > EntityInitializerType;
    typedef tnlDimensionsTag< 0 >                   DimensionsTag;
-   typedef tnlMeshSubentitiesTraits< ConfigTag,
+   typedef tnlMeshSubentitiesTraits< MeshConfig,
                                      EntityTag,
-                                     DimensionsTag >                 SubentitiesTraits;
+                                     DimensionsTag::value >                 SubentitiesTraits;
    typedef typename SubentitiesTraits::SharedContainerType           SharedContainerType;
    typedef typename SharedContainerType::ElementType                 GlobalIndexType;
-   typedef tnlMeshEntity< ConfigTag, EntityTag >                                                    EntityType;
+   typedef tnlMeshEntity< MeshConfig, EntityTag >                                                    EntityType;
 
    protected:
    static void initSubentities( EntityType& entity, GlobalIndexType entityIndex, EntityInitializerType&, InitializerType& ) {}
 };
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag >
-class tnlMeshEntityInitializerLayer< ConfigTag,
+class tnlMeshEntityInitializerLayer< MeshConfig,
                                      EntityTag,
                                      tnlDimensionsTag< 0 >,
                                      tnlStorageTraits< false >,
                                      tnlStorageTraits< false > > // Forces termination of recursive inheritance (prevents compiler from generating huge error logs)
 {
-   typedef tnlMeshInitializer< ConfigTag >                  InitializerType;
-   typedef tnlMeshEntityInitializer< ConfigTag, EntityTag > EntityInitializerType;
+   typedef tnlMeshInitializer< MeshConfig >                  InitializerType;
+   typedef tnlMeshEntityInitializer< MeshConfig, EntityTag > EntityInitializerType;
    typedef tnlDimensionsTag< 0 >                   DimensionsTag;
-   typedef tnlMeshSubentitiesTraits< ConfigTag,
+   typedef tnlMeshSubentitiesTraits< MeshConfig,
                                      EntityTag,
-                                     DimensionsTag >                 SubentitiesTraits;
+                                     DimensionsTag::value >                 SubentitiesTraits;
    typedef typename SubentitiesTraits::SharedContainerType           SharedContainerType;
    typedef typename SharedContainerType::ElementType                 GlobalIndexType;
-   typedef tnlMeshEntity< ConfigTag, EntityTag >                                                    EntityType;
+   typedef tnlMeshEntity< MeshConfig, EntityTag >                                                    EntityType;
 
    protected:
    void initSubentities( EntityType& entity, GlobalIndexType entityIndex, EntityInitializerType&,
diff --git a/src/mesh/tnlMeshEntityOrientation.h b/src/mesh/tnlMeshEntityOrientation.h
index cf92302f574214e940f2bcf44907b17348c80659..12ba48d04a8eb41e80ae1698f13483c9262d0121 100644
--- a/src/mesh/tnlMeshEntityOrientation.h
+++ b/src/mesh/tnlMeshEntityOrientation.h
@@ -18,6 +18,8 @@
 #ifndef TNLMESHENTITYORIENTATION_H
 #define	TNLMESHENTITYORIENTATION_H
 
+#include <mesh/traits/tnlMeshTraits.h>
+
 template< typename MeshConfig,
           typename EntityTopology>
 class tnlMeshEntityOrientation
@@ -25,7 +27,7 @@ class tnlMeshEntityOrientation
    template< typename, typename> friend class tnlMeshEntityReferenceOrientation;
 
    public:
-      typedef typename tnlMeshConfigTraits< MeshConfig >::IdPermutationArrayAccessorType IdPermutationArrayAccessorType;
+      typedef typename tnlMeshTraits< MeshConfig >::IdPermutationArrayAccessorType IdPermutationArrayAccessorType;
 
       IdPermutationArrayAccessorType getSubvertexPermutation() const
       {
@@ -36,8 +38,8 @@ class tnlMeshEntityOrientation
       }
 
    private:
-      typedef typename tnlMeshConfigTraits< MeshConfig >::LocalIndexType        LocalIndexType;
-      typedef typename tnlMeshConfigTraits< MeshConfig >::template SubentityTraits< EntityTopology, tnlDimensionsTag< 0 > >::IdPermutationArrayType IdPermutationArrayType;
+      typedef typename tnlMeshTraits< MeshConfig >::LocalIndexType        LocalIndexType;
+      typedef typename tnlMeshTraits< MeshConfig >::template SubentityTraits< EntityTopology, 0 >::IdPermutationArrayType IdPermutationArrayType;
 
       void setPermutationValue( LocalIndexType index, LocalIndexType value )
       {
diff --git a/src/mesh/tnlMeshEntityReferenceOrientation.h b/src/mesh/tnlMeshEntityReferenceOrientation.h
index 1afe006e4089117c5e5f6542966c41fbc167ba5a..4cd6c8cb5e512a26ec9f61416fedad9fc261c3f7 100644
--- a/src/mesh/tnlMeshEntityReferenceOrientation.h
+++ b/src/mesh/tnlMeshEntityReferenceOrientation.h
@@ -21,8 +21,8 @@
 template< typename MeshConfig, typename EntityTopology >
 class tnlMeshEntityReferenceOrientation
 {
-	typedef typename tnlMeshConfigTraits< MeshConfig >::LocalIndexType  LocalIndexType;
-	typedef typename tnlMeshConfigTraits< MeshConfig >::GlobalIndexType GlobalIndexType;
+	typedef typename tnlMeshTraits< MeshConfig >::LocalIndexType  LocalIndexType;
+	typedef typename tnlMeshTraits< MeshConfig >::GlobalIndexType GlobalIndexType;
 
    public:
       typedef tnlMeshEntitySeed< MeshConfig, EntityTopology >         SeedType;
diff --git a/src/mesh/tnlMeshEntitySeed.h b/src/mesh/tnlMeshEntitySeed.h
index d2638e420c02e4ce4a0431d9ad062f568131c5e9..9eda53f8ec160abe422b453c2b029ade0be806da 100644
--- a/src/mesh/tnlMeshEntitySeed.h
+++ b/src/mesh/tnlMeshEntitySeed.h
@@ -18,22 +18,19 @@
 #ifndef TNLMESHENTITYSEED_H
 #define	TNLMESHENTITYSEED_H
 
-#include <mesh/traits/tnlMeshConfigTraits.h>
-
-template< typename MeshConfig >
-class tnlMeshConfigTraits;
+#include <mesh/traits/tnlMeshTraits.h>
 
 template< typename MeshConfig,
           typename EntityTopology >
 class tnlMeshEntitySeed
 {
-   typedef tnlMeshConfigTraits< MeshConfig >      MeshConfigTraits;
-   typedef typename tnlMeshConfigTraits< MeshConfig >::template SubentityTraits< EntityTopology, tnlDimensionsTag< 0 > > SubvertexTraits;
+   typedef tnlMeshTraits< MeshConfig >      MeshConfigTraits;
+   typedef typename tnlMeshTraits< MeshConfig >::template SubentityTraits< EntityTopology, 0 > SubvertexTraits;
 
    public:
-      typedef typename tnlMeshConfigTraits< MeshConfig >::GlobalIndexType                                      GlobalIndexType;
-      typedef typename tnlMeshConfigTraits< MeshConfig >::LocalIndexType                                       LocalIndexType;
-      typedef typename tnlMeshConfigTraits< MeshConfig >::IdArrayAccessorType                                  IdArrayAccessorType;
+      typedef typename tnlMeshTraits< MeshConfig >::GlobalIndexType                                      GlobalIndexType;
+      typedef typename tnlMeshTraits< MeshConfig >::LocalIndexType                                       LocalIndexType;
+      typedef typename tnlMeshTraits< MeshConfig >::IdArrayAccessorType                                  IdArrayAccessorType;
       typedef typename SubvertexTraits::ContainerType                                                          IdArrayType;
 
       static tnlString getType() { return tnlString( "tnlMeshEntitySeed<>" ); }
diff --git a/src/mesh/tnlMeshEntityKey.h b/src/mesh/tnlMeshEntitySeedKey.h
similarity index 86%
rename from src/mesh/tnlMeshEntityKey.h
rename to src/mesh/tnlMeshEntitySeedKey.h
index 55588a030c3d567986df56ed3fe28d14f346c3a5..f5680291ba6389930b06d04c7dd543ebcd4b6fe6 100644
--- a/src/mesh/tnlMeshEntityKey.h
+++ b/src/mesh/tnlMeshEntitySeedKey.h
@@ -20,30 +20,30 @@
 
 #include <mesh/tnlDimensionsTag.h>
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag >
 class tnlMeshEntitySeed;
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag,
-          typename DimensionsTag >
+          int Dimensions >
 class tnlMeshSubentitiesTraits;
 
 /****
  * Unique identification of a mesh entity by its vertices.
  * Uniqueness is preserved for entities of the same type only.
  */
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag >
 class tnlMeshEntitySeedKey
 {
    typedef
-      tnlMeshEntitySeed< ConfigTag, EntityTag >                               EntitySeedType;
+      tnlMeshEntitySeed< MeshConfig, EntityTag >                               EntitySeedType;
 
    typedef typename
-      tnlMeshSubentitiesTraits< ConfigTag,
+      tnlMeshSubentitiesTraits< MeshConfig,
                                 EntityTag,
-                                tnlDimensionsTag< 0 > >::ContainerType ContainerType;
+                                0 >::ContainerType ContainerType;
 
    public:
 
diff --git a/src/mesh/tnlMeshInitializer.h b/src/mesh/tnlMeshInitializer.h
index c27ae4b55caa416b53409c12cf173ec2de8c053a..15601ab2f2f3bae549e896fbcf72fd998db46cf9 100644
--- a/src/mesh/tnlMeshInitializer.h
+++ b/src/mesh/tnlMeshInitializer.h
@@ -29,28 +29,29 @@
 #include <mesh/tnlMeshSuperentityStorageInitializer.h>
 #include <mesh/tnlMeshEntityReferenceOrientation.h>
 #include <mesh/tnlMeshEntitySeed.h>
+#include <mesh/tnlMeshEntitySeedKey.h>
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename DimensionsTag,
           typename EntityStorageTag = 
-             typename tnlMeshEntitiesTraits< ConfigTag, DimensionsTag >::EntityStorageTag,
+             typename tnlMeshEntitiesTraits< MeshConfig, DimensionsTag::value >::EntityStorageTag,
           typename EntityReferenceOrientationStorage = 
-             tnlStorageTraits< tnlMeshConfigTraits< ConfigTag >::template EntityTraits< DimensionsTag >::orientationNeeded > >
+             tnlStorageTraits< tnlMeshTraits< MeshConfig >::template EntityTraits< DimensionsTag::value >::orientationNeeded > >
 class tnlMeshInitializerLayer;
 
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag>
 class tnlMeshEntityInitializer;
 
-template< typename ConfigTag >
+template< typename MeshConfig >
 class tnlMeshInitializer
-   : public tnlMeshInitializerLayer< ConfigTag,
-                                     typename tnlMeshTraits< ConfigTag >::DimensionsTag >
+   : public tnlMeshInitializerLayer< MeshConfig,
+                                     typename tnlMeshTraits< MeshConfig >::DimensionsTag >
 {
-   typedef tnlMesh< ConfigTag > MeshType;
-   typedef tnlMeshInitializerLayer< ConfigTag,
-                                    typename tnlMeshTraits< ConfigTag >::DimensionsTag > BaseType;
+   typedef tnlMesh< MeshConfig > MeshType;
+   typedef tnlMeshInitializerLayer< MeshConfig,
+                                    typename tnlMeshTraits< MeshConfig >::DimensionsTag > BaseType;
 
 
    public:
@@ -64,8 +65,8 @@ class tnlMeshInitializer
       this->verbose = verbose;
    }
 
-   typedef typename tnlMeshConfigTraits< ConfigTag >::PointArrayType    PointArrayType;
-   typedef typename tnlMeshTraits< ConfigTag >::CellSeedArrayType CellSeedArrayType;
+   typedef typename tnlMeshTraits< MeshConfig >::PointArrayType    PointArrayType;
+   typedef typename tnlMeshTraits< MeshConfig >::CellSeedArrayType CellSeedArrayType;
    
    bool createMesh( const PointArrayType& points,
                     const CellSeedArrayType& cellSeeds,
@@ -87,35 +88,35 @@ class tnlMeshInitializer
    }
    
    template<typename SubDimensionsTag, typename EntityType >
-   static typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< typename EntityType::Tag, SubDimensionsTag >::IdArrayType&
+   static typename tnlMeshTraits< MeshConfig >::template SubentityTraits< typename EntityType::Tag, SubDimensionsTag::value >::IdArrayType&
    subentityIdsArray( EntityType& entity )
    {
       return entity.template subentityIdsArray< SubDimensionsTag >();
    }
    
    template< typename SuperDimensionsTag, typename MeshEntity>
-   static typename tnlMeshConfigTraits< ConfigTag >::IdArrayAccessorType&
+   static typename tnlMeshTraits< MeshConfig >::IdArrayAccessorType&
    superentityIdsArray( MeshEntity& entity )
    {
       return entity.template superentityIdsArray< SuperDimensionsTag >();
    }
    
    template<typename SubDimensionsTag, typename MeshEntity >
-	static typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< typename MeshEntity::Tag, SubDimensionsTag >::OrientationArrayType&
+	static typename tnlMeshTraits< MeshConfig >::template SubentityTraits< typename MeshEntity::Tag, SubDimensionsTag::value >::OrientationArrayType&
    subentityOrientationsArray( MeshEntity &entity )
    {
       return entity.template subentityOrientationsArray< SubDimensionsTag >();
    }
    
    template< typename DimensionsTag >
-   typename tnlMeshConfigTraits< ConfigTag >::template EntityTraits< DimensionsTag>::ContainerType&
+   typename tnlMeshTraits< MeshConfig >::template EntityTraits< DimensionsTag::value >::StorageArrayType&
    meshEntitiesArray()
    {
       return mesh->template entitiesArray< DimensionsTag >();
    }
    
    template< typename DimensionsTag, typename SuperDimensionsTag >
-	typename tnlMeshConfigTraits< ConfigTag >::GlobalIdArrayType&
+	typename tnlMeshTraits< MeshConfig >::GlobalIdArrayType&
    meshSuperentityIdsArray()
    {
       return mesh->template superentityIdsArray< DimensionsTag, SuperDimensionsTag >();
@@ -128,15 +129,15 @@ class tnlMeshInitializer
    }
    
    template< typename DimensionsTag >
-   tnlMeshSuperentityStorageInitializer< ConfigTag, typename tnlMeshConfigTraits< ConfigTag >::template EntityTraits< DimensionsTag >::Tag >&
+   tnlMeshSuperentityStorageInitializer< MeshConfig, typename tnlMeshTraits< MeshConfig >::template EntityTraits< DimensionsTag::value >::Tag >&
    getSuperentityInitializer()
    {
       return BaseType::getSuperentityInitializer( DimensionsTag() );
    }
 
-   typedef typename tnlMeshTraits< ConfigTag >::GlobalIndexType GlobalIndexType;
+   typedef typename tnlMeshTraits< MeshConfig >::GlobalIndexType GlobalIndexType;
    template< typename DimensionsTag >
-	const tnlMeshEntityReferenceOrientation< ConfigTag, typename tnlMeshConfigTraits< ConfigTag >::template EntityTraits< DimensionsTag >::Tag >&
+	const tnlMeshEntityReferenceOrientation< MeshConfig, typename tnlMeshTraits< MeshConfig >::template EntityTraits< DimensionsTag::value >::Tag >&
    getReferenceOrientation( GlobalIndexType index) const
 	{
 		return BaseType::getReferenceOrientation( DimensionsTag(), index);
@@ -154,35 +155,35 @@ class tnlMeshInitializer
  *  - entities storage must turned on (cells must always be stored )
  *  - entities orientation does not make sense for cells => it is turned off
  */
-template< typename ConfigTag >
-class tnlMeshInitializerLayer< ConfigTag,
-                               typename tnlMeshTraits< ConfigTag >::DimensionsTag,
+template< typename MeshConfig >
+class tnlMeshInitializerLayer< MeshConfig,
+                               typename tnlMeshTraits< MeshConfig >::DimensionsTag,
                                tnlStorageTraits< true >,
                                tnlStorageTraits< false > >
-   : public tnlMeshInitializerLayer< ConfigTag,
-                                     typename tnlMeshTraits< ConfigTag >::DimensionsTag::Decrement >
+   : public tnlMeshInitializerLayer< MeshConfig,
+                                     typename tnlMeshTraits< MeshConfig >::DimensionsTag::Decrement >
 {
-   typedef typename tnlMeshTraits< ConfigTag >::DimensionsTag        DimensionsTag;
+   typedef typename tnlMeshTraits< MeshConfig >::DimensionsTag        DimensionsTag;
 
-   typedef tnlMeshInitializerLayer< ConfigTag,
+   typedef tnlMeshInitializerLayer< MeshConfig,
                                     typename DimensionsTag::Decrement >   BaseType;
 
-   typedef tnlMeshEntitiesTraits< ConfigTag, DimensionsTag >            EntityTraits;
+   typedef tnlMeshEntitiesTraits< MeshConfig, DimensionsTag::value >            EntityTraits;
    typedef typename EntityTraits::Tag                                            EntityTag;
-   typedef typename EntityTraits::ContainerType                                  ContainerType;
+   typedef typename EntityTraits::StorageArrayType                                  ContainerType;
    typedef typename ContainerType::IndexType                            GlobalIndexType;
-   typedef typename tnlMeshConfigTraits< ConfigTag >::CellTopology      CellTopology;
-   typedef typename EntityTraits::ContainerType                          EntityArrayType;
+   typedef typename tnlMeshTraits< MeshConfig >::CellTopology      CellTopology;
+   typedef typename EntityTraits::StorageArrayType                          EntityArrayType;
 
-   typedef tnlMeshInitializer< ConfigTag >                              InitializerType;
-   typedef tnlMeshEntityInitializer< ConfigTag, EntityTag >             EntityInitializerType;
-   typedef tnlMeshEntityInitializer< ConfigTag, EntityTag >             CellInitializerType;
+   typedef tnlMeshInitializer< MeshConfig >                              InitializerType;
+   typedef tnlMeshEntityInitializer< MeshConfig, EntityTag >             EntityInitializerType;
+   typedef tnlMeshEntityInitializer< MeshConfig, EntityTag >             CellInitializerType;
    typedef tnlArray< CellInitializerType, tnlHost, GlobalIndexType >    CellInitializerContainerType;
-   typedef typename tnlMeshConfigTraits< ConfigTag >::CellSeedArrayType CellSeedArrayType;
-   typedef typename tnlMeshConfigTraits< ConfigTag >::LocalIndexType    LocalIndexType;
-   typedef typename tnlMeshTraits< ConfigTag >::PointArrayType          PointArrayType;
-   typedef tnlMeshEntitySeed< ConfigTag, CellTopology >                 SeedType;
-   typedef  tnlMeshSuperentityStorageInitializer< ConfigTag, EntityTag >  SuperentityInitializerType;
+   typedef typename tnlMeshTraits< MeshConfig >::CellSeedArrayType CellSeedArrayType;
+   typedef typename tnlMeshTraits< MeshConfig >::LocalIndexType    LocalIndexType;
+   typedef typename tnlMeshTraits< MeshConfig >::PointArrayType          PointArrayType;
+   typedef tnlMeshEntitySeed< MeshConfig, CellTopology >                 SeedType;
+   typedef  tnlMeshSuperentityStorageInitializer< MeshConfig, EntityTag >  SuperentityInitializerType;
 
    public:
       using BaseType::getEntityInitializer;
@@ -227,7 +228,7 @@ class tnlMeshInitializerLayer< ConfigTag,
    
       bool checkCells()
       {
-         typedef typename tnlMeshEntity< ConfigTag, EntityTag >::template SubentitiesTraits< 0 >::LocalIndexType LocalIndexType;
+         typedef typename tnlMeshEntity< MeshConfig, EntityTag >::template SubentitiesTraits< 0 >::LocalIndexType LocalIndexType;
          const GlobalIndexType numberOfVertices( this->getMesh().getNumberOfVertices() );
          for( GlobalIndexType cell = 0;
               cell < this->getMesh().getNumberOfCells();
@@ -254,7 +255,7 @@ class tnlMeshInitializerLayer< ConfigTag,
       }
 
    private:
-      typedef  typename tnlMeshEntitiesTraits< ConfigTag, DimensionsTag >::SeedIndexedSetType                     SeedIndexedSet;      
+      typedef  typename tnlMeshEntitiesTraits< MeshConfig, DimensionsTag::value >::SeedIndexedSetType                     SeedIndexedSet;      
 
       SeedIndexedSet seedsIndexedSet;
       SuperentityInitializerType superentityInitializer;
@@ -265,45 +266,45 @@ class tnlMeshInitializerLayer< ConfigTag,
  * - entities storage is turned on
  * - entities orientation storage is turned off
  */
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename DimensionsTag >
-class tnlMeshInitializerLayer< ConfigTag,
+class tnlMeshInitializerLayer< MeshConfig,
                                DimensionsTag,
                                tnlStorageTraits< true >,
                                tnlStorageTraits< false > >
-   : public tnlMeshInitializerLayer< ConfigTag,
+   : public tnlMeshInitializerLayer< MeshConfig,
                                      typename DimensionsTag::Decrement >
 {
-   typedef tnlMeshInitializerLayer< ConfigTag,
+   typedef tnlMeshInitializerLayer< MeshConfig,
                                     typename DimensionsTag::Decrement >  BaseType;
 
-   typedef tnlMeshEntitiesTraits< ConfigTag, DimensionsTag >            Tag;
+   typedef tnlMeshEntitiesTraits< MeshConfig, DimensionsTag::value >            Tag;
    typedef typename Tag::Tag                                               EntityTag;
    typedef typename Tag::Type                                              EntityType;
    typedef typename Tag::ContainerType                                     ContainerType;
    typedef typename Tag::UniqueContainerType                               UniqueContainerType;
    typedef typename ContainerType::IndexType                               GlobalIndexType;
-   typedef typename tnlMeshConfigTraits< ConfigTag >::CellTopology          CellTopology;
+   typedef typename tnlMeshTraits< MeshConfig >::CellTopology          CellTopology;
 
-   typedef tnlMeshInitializer< ConfigTag >                                 InitializerType;
-   typedef tnlMeshEntityInitializer< ConfigTag,
-                                     typename ConfigTag::CellTopology >         CellInitializerType;
-   typedef tnlMeshEntityInitializer< ConfigTag, EntityTag >                EntityInitializerType;
+   typedef tnlMeshInitializer< MeshConfig >                                 InitializerType;
+   typedef tnlMeshEntityInitializer< MeshConfig,
+                                     typename MeshConfig::CellTopology >         CellInitializerType;
+   typedef tnlMeshEntityInitializer< MeshConfig, EntityTag >                EntityInitializerType;
    typedef tnlArray< EntityInitializerType, tnlHost, GlobalIndexType >     EntityInitializerContainerType;
-   typedef typename tnlMeshConfigTraits< ConfigTag >::CellSeedArrayType    CellSeedArrayType;
-   typedef typename tnlMeshConfigTraits< ConfigTag >::LocalIndexType       LocalIndexType;
-   typedef typename tnlMeshTraits< ConfigTag >::PointArrayType          PointArrayType;
-   typedef tnlMeshEntitiesTraits< ConfigTag, DimensionsTag >            EntityTraits;
+   typedef typename tnlMeshTraits< MeshConfig >::CellSeedArrayType    CellSeedArrayType;
+   typedef typename tnlMeshTraits< MeshConfig >::LocalIndexType       LocalIndexType;
+   typedef typename tnlMeshTraits< MeshConfig >::PointArrayType          PointArrayType;
+   typedef tnlMeshEntitiesTraits< MeshConfig, DimensionsTag::value >            EntityTraits;
    typedef typename EntityTraits::ContainerType                          EntityArrayType;
    typedef typename EntityTraits::SeedArrayType                          SeedArrayType;
-   typedef tnlMeshEntitySeed< ConfigTag, EntityTag >                 SeedType;
-   typedef  tnlMeshSuperentityStorageInitializer< ConfigTag, EntityTag >  SuperentityInitializerType;
+   typedef tnlMeshEntitySeed< MeshConfig, EntityTag >                 SeedType;
+   typedef  tnlMeshSuperentityStorageInitializer< MeshConfig, EntityTag >  SuperentityInitializerType;
 
 
    typedef typename
-      tnlMeshSubentitiesTraits< ConfigTag,
-                                typename ConfigTag::CellTopology,
-                                DimensionsTag >::SubentityContainerType SubentitiesContainerType;
+      tnlMeshSubentitiesTraits< MeshConfig,
+                                typename MeshConfig::CellTopology,
+                                DimensionsTag::value >::SubentityContainerType SubentitiesContainerType;
 
    public:
 
@@ -315,7 +316,7 @@ class tnlMeshInitializerLayer< ConfigTag,
 
       void createEntitySeedsFromCellSeeds( const CellSeedArrayType& cellSeeds )
       {
-         typedef tnlMeshSubentitySeedsCreator< ConfigTag, CellTopology, DimensionsTag >  SubentitySeedsCreator;
+         typedef tnlMeshSubentitySeedsCreator< MeshConfig, CellTopology, DimensionsTag >  SubentitySeedsCreator;
          //cout << " Creating mesh entities with " << DimensionsTag::value << " dimensions ... " << endl;
          for( GlobalIndexType i = 0; i < cellSeeds.getSize(); i++ )         
          {
@@ -369,7 +370,7 @@ class tnlMeshInitializerLayer< ConfigTag,
       void createEntityReferenceOrientations() const {}
    private:
       
-      typedef  typename tnlMeshEntitiesTraits< ConfigTag, DimensionsTag >::SeedIndexedSetType                     SeedIndexedSet;
+      typedef  typename tnlMeshEntitiesTraits< MeshConfig, DimensionsTag::value >::SeedIndexedSetType                     SeedIndexedSet;
       SeedIndexedSet seedsIndexedSet;
       SuperentityInitializerType superentityInitializer;
 };
@@ -379,47 +380,47 @@ class tnlMeshInitializerLayer< ConfigTag,
  * - entities storage is turned on
  * - entities orientation storage is turned on
  */
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename DimensionsTag >
-class tnlMeshInitializerLayer< ConfigTag,
+class tnlMeshInitializerLayer< MeshConfig,
                                DimensionsTag,
                                tnlStorageTraits< true >,
                                tnlStorageTraits< true > >
-   : public tnlMeshInitializerLayer< ConfigTag,
+   : public tnlMeshInitializerLayer< MeshConfig,
                                      typename DimensionsTag::Decrement >
 {
-   typedef tnlMeshInitializerLayer< ConfigTag,
+   typedef tnlMeshInitializerLayer< MeshConfig,
                                     typename DimensionsTag::Decrement >  BaseType;
 
-   typedef tnlMeshEntitiesTraits< ConfigTag, DimensionsTag >            Tag;
+   typedef tnlMeshEntitiesTraits< MeshConfig, DimensionsTag::value >            Tag;
    typedef typename Tag::Tag                                               EntityTag;
-   typedef typename Tag::Type                                              EntityType;
-   typedef typename Tag::ContainerType                                     ContainerType;
+   typedef typename Tag::EntityType                                              EntityType;
+   typedef typename Tag::StorageArrayType                                  ContainerType;
    typedef typename Tag::UniqueContainerType                               UniqueContainerType;
    typedef typename ContainerType::IndexType                               GlobalIndexType;
-   typedef typename tnlMeshConfigTraits< ConfigTag >::CellTopology          CellTopology;
+   typedef typename tnlMeshTraits< MeshConfig >::CellTopology          CellTopology;
 
-   typedef tnlMeshInitializer< ConfigTag >                                 InitializerType;
-   typedef tnlMeshEntityInitializer< ConfigTag,
-                                     typename ConfigTag::CellTopology >         CellInitializerType;
-   typedef tnlMeshEntityInitializer< ConfigTag, EntityTag >                EntityInitializerType;
+   typedef tnlMeshInitializer< MeshConfig >                                 InitializerType;
+   typedef tnlMeshEntityInitializer< MeshConfig,
+                                     typename MeshConfig::CellTopology >         CellInitializerType;
+   typedef tnlMeshEntityInitializer< MeshConfig, EntityTag >                EntityInitializerType;
    typedef tnlArray< EntityInitializerType, tnlHost, GlobalIndexType >     EntityInitializerContainerType;
-   typedef typename tnlMeshConfigTraits< ConfigTag >::CellSeedArrayType    CellSeedArrayType;
-   typedef typename tnlMeshConfigTraits< ConfigTag >::LocalIndexType       LocalIndexType;
-   typedef typename tnlMeshTraits< ConfigTag >::PointArrayType          PointArrayType;
-   typedef tnlMeshEntitiesTraits< ConfigTag, DimensionsTag >            EntityTraits;
-   typedef typename EntityTraits::ContainerType                          EntityArrayType;
+   typedef typename tnlMeshTraits< MeshConfig >::CellSeedArrayType    CellSeedArrayType;
+   typedef typename tnlMeshTraits< MeshConfig >::LocalIndexType       LocalIndexType;
+   typedef typename tnlMeshTraits< MeshConfig >::PointArrayType          PointArrayType;
+   typedef tnlMeshEntitiesTraits< MeshConfig, DimensionsTag::value >            EntityTraits;
+   typedef typename EntityTraits::StorageArrayType                          EntityArrayType;
    typedef typename EntityTraits::SeedArrayType                          SeedArrayType;
-   typedef tnlMeshEntitySeed< ConfigTag, EntityTag >                 SeedType;
-   typedef  tnlMeshSuperentityStorageInitializer< ConfigTag, EntityTag >  SuperentityInitializerType;
+   typedef tnlMeshEntitySeed< MeshConfig, EntityTag >                 SeedType;
+   typedef  tnlMeshSuperentityStorageInitializer< MeshConfig, EntityTag >  SuperentityInitializerType;
    typedef typename EntityTraits::ReferenceOrientationType               ReferenceOrientationType;
    typedef typename EntityTraits::ReferenceOrientationArrayType          ReferenceOrientationArrayType;
 
 
    typedef typename
-      tnlMeshSubentitiesTraits< ConfigTag,
-                                typename ConfigTag::CellTopology,
-                                DimensionsTag >::SubentityContainerType SubentitiesContainerType;
+      tnlMeshSubentitiesTraits< MeshConfig,
+                                typename MeshConfig::CellTopology,
+                                DimensionsTag::value >::SubentityContainerType SubentitiesContainerType;
 
    public:      
       
@@ -431,7 +432,7 @@ class tnlMeshInitializerLayer< ConfigTag,
 
       void createEntitySeedsFromCellSeeds( const CellSeedArrayType& cellSeeds )
       {
-         typedef tnlMeshSubentitySeedsCreator< ConfigTag, CellTopology, DimensionsTag >  SubentitySeedsCreator;
+         typedef tnlMeshSubentitySeedsCreator< MeshConfig, CellTopology, DimensionsTag >  SubentitySeedsCreator;
          //cout << " Creating mesh entities with " << DimensionsTag::value << " dimensions ... " << endl;
          for( GlobalIndexType i = 0; i < cellSeeds.getSize(); i++ )         
          {
@@ -505,7 +506,7 @@ class tnlMeshInitializerLayer< ConfigTag,
       
    private:
       
-      typedef  typename tnlMeshEntitiesTraits< ConfigTag, DimensionsTag >::SeedIndexedSetType                     SeedIndexedSet;
+      typedef  typename tnlMeshEntitiesTraits< MeshConfig, DimensionsTag::value >::SeedIndexedSetType                     SeedIndexedSet;
       SeedIndexedSet seedsIndexedSet;
       SuperentityInitializerType superentityInitializer;
       ReferenceOrientationArrayType referenceOrientations;
@@ -514,13 +515,13 @@ class tnlMeshInitializerLayer< ConfigTag,
 /****
  * Mesh initializer layer for entities not being stored
  */
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename DimensionsTag >
-class tnlMeshInitializerLayer< ConfigTag,
+class tnlMeshInitializerLayer< MeshConfig,
                                DimensionsTag,
                                tnlStorageTraits< false >,
                                tnlStorageTraits< false > >
-   : public tnlMeshInitializerLayer< ConfigTag,
+   : public tnlMeshInitializerLayer< MeshConfig,
                                      typename DimensionsTag::Decrement >
 {};
 
@@ -529,35 +530,35 @@ class tnlMeshInitializerLayer< ConfigTag,
  * - vertices must always be stored
  * - their orientation does not make sense
  */
-template< typename ConfigTag >
-class tnlMeshInitializerLayer< ConfigTag,
+template< typename MeshConfig >
+class tnlMeshInitializerLayer< MeshConfig,
                                tnlDimensionsTag< 0 >,
                                tnlStorageTraits< true >,
                                tnlStorageTraits< false > >
 {
-   typedef tnlMesh< ConfigTag >                                        MeshType;
+   typedef tnlMesh< MeshConfig >                                        MeshType;
    typedef tnlDimensionsTag< 0 >                                    DimensionsTag;
 
-   typedef tnlMeshEntitiesTraits< ConfigTag, DimensionsTag >        Tag;
+   typedef tnlMeshEntitiesTraits< MeshConfig, DimensionsTag::value >        Tag;
    typedef typename Tag::Tag                                           EntityTag;
-   typedef typename Tag::ContainerType                                 ContainerType;
-   typedef typename Tag::SharedContainerType                           SharedContainerType;
+   typedef typename Tag::StorageArrayType                              ContainerType;
+   typedef typename Tag::AccessArrayType                               SharedContainerType;
    typedef typename ContainerType::IndexType                           GlobalIndexType;
 
-   typedef typename tnlMeshTraits< ConfigTag >::CellTopology           CellTopology;
+   typedef typename tnlMeshTraits< MeshConfig >::CellTopology           CellTopology;
 
-   typedef tnlMeshInitializer< ConfigTag >                             InitializerType;
-   typedef tnlMeshEntityInitializer< ConfigTag, 
-                                     typename ConfigTag::CellTopology >     CellInitializerType;
-   typedef tnlMeshEntityInitializer< ConfigTag, EntityTag >            VertexInitializerType;
+   typedef tnlMeshInitializer< MeshConfig >                             InitializerType;
+   typedef tnlMeshEntityInitializer< MeshConfig, 
+                                     typename MeshConfig::CellTopology >     CellInitializerType;
+   typedef tnlMeshEntityInitializer< MeshConfig, EntityTag >            VertexInitializerType;
    typedef tnlArray< VertexInitializerType, tnlHost, GlobalIndexType > VertexInitializerContainerType;
-   typedef typename tnlMeshConfigTraits< ConfigTag >::CellSeedArrayType CellSeedArrayType;
-   typedef typename tnlMeshConfigTraits< ConfigTag >::LocalIndexType    LocalIndexType;
-   typedef typename tnlMeshTraits< ConfigTag >::PointArrayType           PointArrayType;
-   typedef tnlMeshEntitiesTraits< ConfigTag, DimensionsTag >            EntityTraits;
-   typedef typename EntityTraits::ContainerType                          EntityArrayType;
-   typedef tnlMeshEntityInitializer< ConfigTag, EntityTag >                EntityInitializerType;
-   typedef  tnlMeshSuperentityStorageInitializer< ConfigTag, EntityTag >  SuperentityInitializerType;
+   typedef typename tnlMeshTraits< MeshConfig >::CellSeedArrayType CellSeedArrayType;
+   typedef typename tnlMeshTraits< MeshConfig >::LocalIndexType    LocalIndexType;
+   typedef typename tnlMeshTraits< MeshConfig >::PointArrayType           PointArrayType;
+   typedef tnlMeshEntitiesTraits< MeshConfig, DimensionsTag::value >            EntityTraits;
+   typedef typename EntityTraits::StorageArrayType                          EntityArrayType;
+   typedef tnlMeshEntityInitializer< MeshConfig, EntityTag >                EntityInitializerType;
+   typedef  tnlMeshSuperentityStorageInitializer< MeshConfig, EntityTag >  SuperentityInitializerType;
 
    public:
 
diff --git a/src/mesh/tnlMeshIntegrityCheckerLayer.h b/src/mesh/tnlMeshIntegrityCheckerLayer.h
index 9966a2608124ff810e17ac187616ffbf22528e7d..42582afba380ccc4e9c12febcaa83882dc06ca26 100644
--- a/src/mesh/tnlMeshIntegrityCheckerLayer.h
+++ b/src/mesh/tnlMeshIntegrityCheckerLayer.h
@@ -25,7 +25,7 @@
 template< typename MeshType,
           typename DimensionsTag,
           typename EntityStorageTag = typename tnlMeshEntitiesTraits< typename MeshType::Config,
-                                                                      DimensionsTag >::EntityStorageTag >
+                                                                      DimensionsTag::value >::EntityStorageTag >
 class tnlMeshIntegrityCheckerLayer;
 
 template< typename MeshType,
diff --git a/src/mesh/tnlMeshReaderNetgen.h b/src/mesh/tnlMeshReaderNetgen.h
index b22fab8f36b4406a72da7b53173d99daf2e134f3..007c607af973aded1d6be3cc342700c84ab1c098 100644
--- a/src/mesh/tnlMeshReaderNetgen.h
+++ b/src/mesh/tnlMeshReaderNetgen.h
@@ -158,7 +158,7 @@ class tnlMeshReaderNetgen
          return false;
       getline( inputFile, line );
       iss.str( line );
-      typedef typename MeshType::template EntitiesTraits< 0 >::GlobalIndexType VertexIndexType;
+      typedef typename MeshType::MeshTraits::template EntityTraits< 0 >::GlobalIndexType VertexIndexType;
       VertexIndexType pointsCount;
       iss >> pointsCount;
       if( ! meshBuilder.setPointsCount( pointsCount ) )
@@ -192,7 +192,7 @@ class tnlMeshReaderNetgen
       /****
        * Read number of cells
        */
-       typedef typename MeshType::template EntitiesTraits< dimensions >::GlobalIndexType CellIndexType;
+       typedef typename MeshType::MeshTraits::template EntityTraits< dimensions >::GlobalIndexType CellIndexType;
        if( ! inputFile )
        {
           cerr << "I cannot read the mesh cells." << endl;
diff --git a/src/mesh/tnlMeshSubentitySeedCreator.h b/src/mesh/tnlMeshSubentitySeedCreator.h
index dfa7f24de25ed26f039202b3cff2521e398621c4..1cd50f44bf84fc606d35097cbcacfcc3df175567 100644
--- a/src/mesh/tnlMeshSubentitySeedCreator.h
+++ b/src/mesh/tnlMeshSubentitySeedCreator.h
@@ -25,11 +25,11 @@ template< typename MeshConfig,
           typename SubDimensionsTag >
 class tnlMeshSubentitySeedsCreator
 {
-	typedef typename tnlMeshConfigTraits< MeshConfig >::LocalIndexType                                       LocalIndexType;
-	typedef typename tnlMeshConfigTraits< MeshConfig >::template SubentityTraits< EntityTopology, SubDimensionsTag > SubentityTraits;
+	typedef typename tnlMeshTraits< MeshConfig >::LocalIndexType                                       LocalIndexType;
+	typedef typename tnlMeshTraits< MeshConfig >::template SubentityTraits< EntityTopology, SubDimensionsTag::value > SubentityTraits;
 	typedef typename SubentityTraits::SubentityTag                                                              Subtopology;
-	typedef typename tnlMeshConfigTraits< MeshConfig >::IdArrayAccessorType                                   IdArrayAccessorType;
-	typedef typename tnlMeshConfigTraits< MeshConfig >::template SubentityTraits< Subtopology, tnlDimensionsTag< 0 > >     SubentityVertexTraits;
+	typedef typename tnlMeshTraits< MeshConfig >::IdArrayAccessorType                                   IdArrayAccessorType;
+	typedef typename tnlMeshTraits< MeshConfig >::template SubentityTraits< Subtopology, 0 >     SubentityVertexTraits;
 
 	static const LocalIndexType SUBENTITIES_COUNT = SubentityTraits::count;
 	static const LocalIndexType SUBENTITY_VERTICES_COUNT = SubentityVertexTraits::count;
diff --git a/src/mesh/tnlMeshSuperentityStorageInitializer.h b/src/mesh/tnlMeshSuperentityStorageInitializer.h
index ad55764b939d5adaa93e55b022dbe62be072bed0..c532b9282fd8523250c2dc9bf84c8d31bc5f5da1 100644
--- a/src/mesh/tnlMeshSuperentityStorageInitializer.h
+++ b/src/mesh/tnlMeshSuperentityStorageInitializer.h
@@ -22,43 +22,43 @@
 #include <mesh/tnlDimensionsTag.h>
 #include <algorithm>
 
-template< typename ConfigTag >
+template< typename MeshConfig >
 class tnlMeshInitializer;
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag,
           typename DimensionsTag,
-          typename SuperentityStorageTag = typename tnlMeshSuperentitiesTraits< ConfigTag, EntityTag, DimensionsTag >::SuperentityStorageTag >
+          typename SuperentityStorageTag = typename tnlMeshSuperentitiesTraits< MeshConfig, EntityTag, DimensionsTag >::SuperentityStorageTag >
 class tnlMeshSuperentityStorageInitializerLayer;
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag >
 class tnlMeshSuperentityStorageInitializer :
-   public tnlMeshSuperentityStorageInitializerLayer< ConfigTag, EntityTag, tnlDimensionsTag< tnlMeshConfigTraits< ConfigTag >::meshDimensions > >
+   public tnlMeshSuperentityStorageInitializerLayer< MeshConfig, EntityTag, tnlDimensionsTag< tnlMeshTraits< MeshConfig >::meshDimensions > >
 {};
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag,
           typename DimensionsTag >
-class tnlMeshSuperentityStorageInitializerLayer< ConfigTag,
+class tnlMeshSuperentityStorageInitializerLayer< MeshConfig,
                                           EntityTag,
                                           DimensionsTag,
                                           tnlStorageTraits< true > >
-   : public tnlMeshSuperentityStorageInitializerLayer< ConfigTag,
+   : public tnlMeshSuperentityStorageInitializerLayer< MeshConfig,
                                                 EntityTag,
                                                 typename DimensionsTag::Decrement >
 {
-   typedef tnlMeshSuperentityStorageInitializerLayer< ConfigTag,
+   typedef tnlMeshSuperentityStorageInitializerLayer< MeshConfig,
                                                       EntityTag,
                                                       typename DimensionsTag::Decrement >      BaseType;
 
    typedef tnlDimensionsTag< EntityTag::dimensions >                                    EntityDimensions;
 	
-   typedef typename tnlMeshConfigTraits< ConfigTag >::GlobalIdArrayType                 GlobalIdArrayType;
+   typedef typename tnlMeshTraits< MeshConfig >::GlobalIdArrayType                 GlobalIdArrayType;
 
       
-   typedef typename tnlMeshConfigTraits< ConfigTag >::GlobalIndexType                   GlobalIndexType;
-   typedef tnlMeshInitializer< ConfigTag >                                              MeshInitializer;
+   typedef typename tnlMeshTraits< MeshConfig >::GlobalIndexType                   GlobalIndexType;
+   typedef tnlMeshInitializer< MeshConfig >                                              MeshInitializer;
 
    public:      
       using BaseType::addSuperentity;
@@ -110,21 +110,21 @@ class tnlMeshSuperentityStorageInitializerLayer< ConfigTag,
    
 };
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag,
           typename DimensionsTag >
-class tnlMeshSuperentityStorageInitializerLayer< ConfigTag,
+class tnlMeshSuperentityStorageInitializerLayer< MeshConfig,
                                           EntityTag,
                                           DimensionsTag,
                                           tnlStorageTraits< false > >
-   : public tnlMeshSuperentityStorageInitializerLayer< ConfigTag,
+   : public tnlMeshSuperentityStorageInitializerLayer< MeshConfig,
                                                 EntityTag,
                                                 typename DimensionsTag::Decrement >
 {
-   typedef tnlMeshSuperentityStorageInitializerLayer< ConfigTag,
+   typedef tnlMeshSuperentityStorageInitializerLayer< MeshConfig,
                                                 EntityTag,
                                                 typename DimensionsTag::Decrement > BaseType;
-   typedef tnlMeshInitializer< ConfigTag >                                      MeshInitializerType;
+   typedef tnlMeshInitializer< MeshConfig >                                      MeshInitializerType;
    
    public:
    void addSuperentity()                           {} // This method is due to 'using BaseType::...;' in the derived classes.
@@ -132,28 +132,28 @@ class tnlMeshSuperentityStorageInitializerLayer< ConfigTag,
    void initSuperentities( MeshInitializerType& ) {cerr << "***" << endl;} 
 };
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag >
-class tnlMeshSuperentityStorageInitializerLayer< ConfigTag,
+class tnlMeshSuperentityStorageInitializerLayer< MeshConfig,
                                           EntityTag,
                                           tnlDimensionsTag< EntityTag::dimensions >,
                                           tnlStorageTraits< true > >
 {
-   typedef tnlMeshInitializer< ConfigTag >                                      MeshInitializerType;
+   typedef tnlMeshInitializer< MeshConfig >                                      MeshInitializerType;
    
    public:
    void addSuperentity()                           {} // This method is due to 'using BaseType::...;' in the derived classes.
    void initSuperentities( MeshInitializerType& ) {}
 };
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag >
-class tnlMeshSuperentityStorageInitializerLayer< ConfigTag,
+class tnlMeshSuperentityStorageInitializerLayer< MeshConfig,
                                           EntityTag,
                                           tnlDimensionsTag< EntityTag::dimensions >,
                                           tnlStorageTraits< false > >
 {
-   typedef tnlMeshInitializer< ConfigTag >                                      MeshInitializerType;
+   typedef tnlMeshInitializer< MeshConfig >                                      MeshInitializerType;
 
    public:
    void addSuperentity()                           {} // This method is due to 'using BaseType::...;' in the derived classes.
diff --git a/src/mesh/tnlMeshWriterVTKLegacy.h b/src/mesh/tnlMeshWriterVTKLegacy.h
index 2b854936c262159b94bddec8f59567c17c42cf45..4ad1aecd91e0f48ebdcc62a09e0d1bda9b00988a 100644
--- a/src/mesh/tnlMeshWriterVTKLegacy.h
+++ b/src/mesh/tnlMeshWriterVTKLegacy.h
@@ -51,10 +51,10 @@ enum tnlVTKMeshEntities { tnlVTKVertex = 1,
 template< typename MeshEntity >
 struct tnlMeshEntityVTKType{};
 
-template< typename ConfigTag > struct tnlMeshEntityVTKType< tnlMeshEntity< ConfigTag, tnlMeshTriangleTag > >     { enum { VTKType = tnlVTKTriangle }; };
-template< typename ConfigTag > struct tnlMeshEntityVTKType< tnlMeshEntity< ConfigTag, tnlMeshQuadrilateralTag > >{ enum { VTKType = tnlVTKQuad }; };
-template< typename ConfigTag > struct tnlMeshEntityVTKType< tnlMeshEntity< ConfigTag, tnlMeshTetrahedronTag > >  { enum { VTKType = tnlVTKTetra }; };
-template< typename ConfigTag > struct tnlMeshEntityVTKType< tnlMeshEntity< ConfigTag, tnlMeshHexahedronTag > >   { enum { VTKType = tnlVTKHexahedron }; };
+template< typename MeshConfig > struct tnlMeshEntityVTKType< tnlMeshEntity< MeshConfig, tnlMeshTriangleTag > >     { enum { VTKType = tnlVTKTriangle }; };
+template< typename MeshConfig > struct tnlMeshEntityVTKType< tnlMeshEntity< MeshConfig, tnlMeshQuadrilateralTag > >{ enum { VTKType = tnlVTKQuad }; };
+template< typename MeshConfig > struct tnlMeshEntityVTKType< tnlMeshEntity< MeshConfig, tnlMeshTetrahedronTag > >  { enum { VTKType = tnlVTKTetra }; };
+template< typename MeshConfig > struct tnlMeshEntityVTKType< tnlMeshEntity< MeshConfig, tnlMeshHexahedronTag > >   { enum { VTKType = tnlVTKHexahedron }; };
 
 class tnlMeshWriterVTKLegacy
 {
@@ -90,8 +90,7 @@ class tnlMeshWriterVTKLegacy
                           MeshType& mesh,
                           bool verbose )
    {
-      typedef typename MeshType::CellTraits MeshEntitiesTraits;
-      typedef typename MeshEntitiesTraits::Type CellType;
+      typedef typename MeshType::MeshTraits::CellEntity CellEntityType;
       file << "# vtk DataFile Version 2.0" << endl;
       file << "TNL Mesh" << endl;
       file << "ASCII" << endl;
@@ -123,7 +122,7 @@ class tnlMeshWriterVTKLegacy
       file << "CELL_TYPES " <<  mesh.template getNumberOfCells() << endl;      
       for( int i = 0; i < mesh.template getNumberOfCells(); i++ )      
       {
-         file << tnlMeshEntityVTKType< CellType >::VTKType << endl;
+         file << tnlMeshEntityVTKType< CellEntityType >::VTKType << endl;
       }
       file << endl;
       return true;
diff --git a/src/mesh/topologies/tnlMeshVertexTag.h b/src/mesh/topologies/tnlMeshVertexTag.h
index 4737680768d9406cb45aabbe54cd1b8fc33aee6f..06459a46581e4d565493eee1b5d1dbaea19bbed2 100644
--- a/src/mesh/topologies/tnlMeshVertexTag.h
+++ b/src/mesh/topologies/tnlMeshVertexTag.h
@@ -20,7 +20,7 @@
 
 struct tnlMeshVertexTag
 {
-   enum { dimensions = 0 };
+   static const int dimensions = 0;
 };
 
 
diff --git a/src/mesh/traits/tnlMeshConfigTraits.h b/src/mesh/traits/tnlMeshConfigTraits.h
deleted file mode 100644
index dab0bcf266c4ac57f183c925f1c457a0a1bc7e25..0000000000000000000000000000000000000000
--- a/src/mesh/traits/tnlMeshConfigTraits.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/***************************************************************************
-                          tnlMeshConfigTraits.h  -  description
-                             -------------------
-    begin                : Aug 14, 2015
-    copyright            : (C) 2015 by Tomas Oberhuber et al.
-    email                : tomas.oberhuber@fjfi.cvut.cz
- ***************************************************************************/
-
-/***************************************************************************
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- ***************************************************************************/
-
-#ifndef TNLMESHCONFIGTRAITS_H
-#define TNLMESHCONFIGTRAITS_H
-
-#include <core/tnlHost.h>
-#include <mesh/traits/tnlMeshEntitiesTraits.h>
-#include <mesh/traits/tnlMeshSubentitiesTraits.h>
-#include <mesh/traits/tnlMeshSuperentitiesTraits.h>
-
-template< typename MeshConfig >
-class tnlMeshConfigTraits
-{
-   public:
-      static const int meshDimensions = MeshConfig::CellTopology::dimensions;
-      static const int worldDimensions = MeshConfig::worldDimensions;
-
-      typedef typename MeshConfig::RealType                                     RealType;
-      typedef typename MeshConfig::GlobalIndexType                              GlobalIndexType;
-      typedef typename MeshConfig::LocalIndexType                               LocalIndexType;
-      typedef typename tnlMeshEntitiesTag< MeshConfig, 
-                                           tnlDimensionsTag< 0 > >::Tag         VertexType;
-      typedef typename MeshConfig::CellTopology                                 CellTopology;
-
-      typedef tnlDimensionsTag< meshDimensions >                                MeshDimensions;
-      typedef typename tnlMeshTraits< MeshConfig >::PointType                   Point;
-      //typedef Entity<TConfig, TVertexTopology>                                  TVertex;     
-      typedef tnlMeshEntitySeed< MeshConfig, CellTopology >                         CellSeed;
-
-      // TODO: to asi presunout do implementace, stejne to bude vazane na TNL
-      typedef tnlArray< GlobalIndexType, tnlHost, GlobalIndexType >             GlobalIdArrayType;
-      typedef tnlConstSharedArray< GlobalIndexType, tnlHost, LocalIndexType >   IdArrayAccessorType;
-      typedef tnlConstSharedArray< LocalIndexType, tnlHost, LocalIndexType >         IdPermutationArrayAccessorType;
-      typedef tnlArray< Point, tnlHost, GlobalIndexType>                        PointArrayType;
-      typedef tnlArray< CellSeed, tnlHost, GlobalIndexType >                    CellSeedArrayType;
-
-      template< typename Dimensions > using EntityTraits = 
-         tnlMeshEntitiesTraits< MeshConfig, Dimensions >;
-      
-      template< typename MeshEntity, typename SubDimensions > using SubentityTraits =
-         tnlMeshSubentitiesTraits< MeshConfig, MeshEntity, SubDimensions >;
-      
-      template< typename MeshEntity, typename SuperDimensions > using SuperentityTraits =
-         tnlMeshSuperentitiesTraits< MeshConfig, MeshEntity, SuperDimensions >;
-};
-
-#endif	/* TNLMESHCONFIGTRAITS_H */
-
diff --git a/src/mesh/traits/tnlMeshEntitiesTag.h b/src/mesh/traits/tnlMeshEntitiesTag.h
index f7bcbe5684c389bf3893970de75f9c5a9d1f60d6..d5585f13e2c68aa7b67feca4175b7e8ae5b09778 100644
--- a/src/mesh/traits/tnlMeshEntitiesTag.h
+++ b/src/mesh/traits/tnlMeshEntitiesTag.h
@@ -21,23 +21,23 @@
 #include <mesh/traits/tnlMeshTraits.h>
 #include <mesh/topologies/tnlMeshEntityTopology.h>
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename DimensionsTag >
 class tnlMeshEntitiesTag
 {
    public:
 
-   typedef typename tnlSubentities< typename ConfigTag::CellTopology,
+   typedef typename tnlSubentities< typename MeshConfig::CellTopology,
                                     DimensionsTag::value >::Tag Tag;
 };
 
-template< typename ConfigTag >
-class tnlMeshEntitiesTag< ConfigTag,
-                          typename tnlMeshTraits< ConfigTag >::DimensionsTag >
+template< typename MeshConfig >
+class tnlMeshEntitiesTag< MeshConfig,
+                          tnlDimensionsTag< MeshConfig::CellTopology::dimensions > >
 {
    public:
 
-   typedef typename ConfigTag::CellTopology Tag;
+   typedef typename MeshConfig::CellTopology Tag;
 };
 
 
diff --git a/src/mesh/traits/tnlMeshEntitiesTraits.h b/src/mesh/traits/tnlMeshEntitiesTraits.h
index ebc26638438a609c8339ad345501aa6662c33e1d..54a029b0c4451986da01538d6cc03bc757198b52 100644
--- a/src/mesh/traits/tnlMeshEntitiesTraits.h
+++ b/src/mesh/traits/tnlMeshEntitiesTraits.h
@@ -18,30 +18,33 @@
 #ifndef TNLMESHENTITIESTRAITS_H_
 #define TNLMESHENTITIESTRAITS_H_
 
+#include <core/vectors/tnlStaticVector.h>
 #include <core/arrays/tnlArray.h>
+#include <core/arrays/tnlSharedArray.h>
 #include <core/arrays/tnlConstSharedArray.h>
 #include <core/tnlIndexedSet.h>
 #include <mesh/traits/tnlMeshEntitiesTag.h>
 #include <mesh/config/tnlMeshConfigBase.h>
-#include <mesh/tnlMeshEntityKey.h>
-#include <mesh/tnlMeshEntitySeed.h>
+#include <mesh/traits/tnlStorageTraits.h>
+#include <mesh/traits/tnlMeshTraits.h>
 
-template< typename MeshConfig > class tnlMeshConfigTraits;
+template< typename MeshConfig, typename EntityTopology > class tnlMeshEntity;
 template< typename MeshConfig, typename EntityTopology > class tnlMeshEntitySeed;
+template< typename MeshConfig, typename EntityTopology > class tnlMeshEntitySeedKey;
 template< typename MeshConfig, typename EntityTopology > class tnlMeshEntityReferenceOrientation;
 
 template< typename MeshConfig,
           typename DimensionsTag,
-          typename SuperDimensionsTag = tnlDimensionsTag< tnlMeshConfigTraits< MeshConfig >::meshDimensions > >
+          typename SuperDimensionsTag = tnlDimensionsTag< MeshConfig::meshDimensions > >
 class tnlMeshEntityOrientationNeeded
 {
 	static_assert( 0 <= DimensionsTag::value && DimensionsTag::value < MeshConfig::CellTopology::dimensions, "invalid dimensions" );
 	static_assert( DimensionsTag::value < SuperDimensionsTag::value && SuperDimensionsTag::value <= MeshConfig::CellTopology::dimensions, "invalid superentity dimensions");
 
-	typedef typename tnlMeshConfigTraits< MeshConfig >::template EntityTraits< SuperDimensionsTag >::Tag SuperentityTopology;
+	typedef typename tnlMeshTraits< MeshConfig >::template EntityTraits< SuperDimensionsTag::value >::Tag SuperentityTopology;
 
 	static const bool previousSuperDimensionsValue = tnlMeshEntityOrientationNeeded< MeshConfig, DimensionsTag, typename SuperDimensionsTag::Decrement >::value;
-	static const bool thisSuperDimensionsValue = tnlMeshConfigTraits< MeshConfig >::template SubentityTraits< SuperentityTopology, DimensionsTag >::orientationEnabled;
+	static const bool thisSuperDimensionsValue = tnlMeshTraits< MeshConfig >::template SubentityTraits< SuperentityTopology, DimensionsTag::value >::orientationEnabled;
 
    public:
       static const bool value = ( previousSuperDimensionsValue || thisSuperDimensionsValue );
@@ -57,37 +60,36 @@ class tnlMeshEntityOrientationNeeded< MeshConfig, DimensionsTag, DimensionsTag >
 };
 
 
-template< typename ConfigTag,
-          typename DimensionsTag >
+template< typename MeshConfig,
+          int Dimensions >
 class tnlMeshEntitiesTraits
 {   
    public:
 
-      static const bool storageEnabled = ConfigTag::entityStorage( DimensionsTag::value );
-      static const bool orientationNeeded = tnlMeshEntityOrientationNeeded< ConfigTag, DimensionsTag >::value;
-
-      typedef typename ConfigTag::GlobalIndexType                    GlobalIndexType;
-      typedef typename ConfigTag::LocalIndexType                     LocalIndexType;
-      typedef typename tnlMeshEntitiesTag< ConfigTag,
-                                           DimensionsTag >::Tag      EntityTag;
-      typedef tnlMeshEntitySeedKey< ConfigTag, EntityTag >               Key;
-
+      static const bool storageEnabled = MeshConfig::entityStorage( Dimensions );
+      static const bool orientationNeeded = tnlMeshEntityOrientationNeeded< MeshConfig, tnlDimensionsTag< Dimensions > >::value;
 
+      typedef typename MeshConfig::GlobalIndexType                              GlobalIndexType;
+      typedef typename MeshConfig::LocalIndexType                               LocalIndexType;
+      typedef typename tnlMeshEntitiesTag< MeshConfig,
+                                           tnlDimensionsTag< Dimensions > >::Tag      EntityTag;
+      
       typedef EntityTag                                              Tag;
-      typedef tnlMeshEntity< ConfigTag, Tag >                        Type;
-      typedef tnlMeshEntitySeed< ConfigTag, EntityTag >              SeedType;
-      typedef tnlMeshEntityReferenceOrientation< ConfigTag, EntityTag >        ReferenceOrientationType;
+      typedef tnlMeshEntity< MeshConfig, Tag >                        EntityType;
+      typedef tnlMeshEntitySeed< MeshConfig, EntityTag >              SeedType;
+      typedef tnlMeshEntityReferenceOrientation< MeshConfig, EntityTag >        ReferenceOrientationType;
+      typedef tnlMeshEntitySeedKey< MeshConfig, EntityTag >               Key;
 
       typedef tnlStorageTraits< storageEnabled >                     EntityStorageTag;
 
-      typedef tnlArray< Type, tnlHost, GlobalIndexType >             ContainerType;
-      typedef tnlSharedArray< Type, tnlHost, GlobalIndexType >       SharedContainerType;
-      typedef tnlIndexedSet< Type, GlobalIndexType, Key >            UniqueContainerType;
+      typedef tnlArray< EntityType, tnlHost, GlobalIndexType >                  StorageArrayType;
+      typedef tnlSharedArray< EntityType, tnlHost, GlobalIndexType >            AccessArrayType;
+      typedef tnlIndexedSet< EntityType, GlobalIndexType, Key >            UniqueContainerType;
       typedef tnlIndexedSet< SeedType, GlobalIndexType, Key >        SeedIndexedSetType;
       typedef tnlArray< SeedType, tnlHost, GlobalIndexType >         SeedArrayType;
       typedef tnlArray< ReferenceOrientationType, tnlHost, GlobalIndexType > ReferenceOrientationArrayType;
 
-      typedef tnlConstSharedArray< Type, tnlHost, GlobalIndexType >  SharedArrayType;
+      typedef tnlConstSharedArray< EntityType, tnlHost, GlobalIndexType >  SharedArrayType;
 };
 
 
diff --git a/src/mesh/traits/tnlMeshSubentitiesTraits.h b/src/mesh/traits/tnlMeshSubentitiesTraits.h
index c9aebcb92bfa398db69c1d18546a6cb3e2b03c39..fef2e4b06f8573a7ad897c37ea64e3b0e5993753 100644
--- a/src/mesh/traits/tnlMeshSubentitiesTraits.h
+++ b/src/mesh/traits/tnlMeshSubentitiesTraits.h
@@ -23,28 +23,29 @@
 #include <mesh/tnlMeshEntity.h>
 #include <mesh/config/tnlMeshConfigBase.h>
 #include <mesh/topologies/tnlMeshEntityTopology.h>
-#include <mesh/tnlMeshEntitySeed.h>
-#include <mesh/tnlMeshEntityOrientation.h>
 
-template< typename ConfigTag,
+
+template< typename MeshConfig, typename EntityTopology > class tnlMeshEntityOrientation;
+
+template< typename MeshConfig,
           typename EntityTag,
-          typename DimensionsTag >
+          int Dimensions >
 class tnlMeshSubentitiesTraits
 {
    public:   
-      static const bool storageEnabled = ConfigTag::subentityStorage( EntityTag(), DimensionsTag::value );
-      static const bool orientationEnabled = ConfigTag::subentityOrientationStorage( EntityTag(), DimensionsTag::value );
+      static const bool storageEnabled = MeshConfig::subentityStorage( EntityTag(), Dimensions );
+      static const bool orientationEnabled = MeshConfig::subentityOrientationStorage( EntityTag(), Dimensions );
 
-      typedef typename ConfigTag::GlobalIndexType                  GlobalIndexType;
-      typedef typename ConfigTag::LocalIndexType                   LocalIndexType;
-      typedef tnlSubentities< EntityTag, DimensionsTag::value > Tag;
+      typedef typename MeshConfig::GlobalIndexType                  GlobalIndexType;
+      typedef typename MeshConfig::LocalIndexType                   LocalIndexType;
+      typedef tnlSubentities< EntityTag, Dimensions > Tag;
 
 
-      typedef tnlMeshEntity< ConfigTag, EntityTag >                 EntityType;
+      typedef tnlMeshEntity< MeshConfig, EntityTag >                 EntityType;
       typedef typename Tag::Tag                                     SubentityTag;
-      typedef tnlMeshEntity< ConfigTag, SubentityTag >              SubentityType;
-      typedef tnlMeshEntitySeed< ConfigTag, SubentityTag >          Seed;
-      typedef tnlMeshEntityOrientation< ConfigTag, SubentityTag >   Orientation;
+      typedef tnlMeshEntity< MeshConfig, SubentityTag >              SubentityType;
+      typedef tnlMeshEntitySeed< MeshConfig, SubentityTag >          Seed;
+      typedef tnlMeshEntityOrientation< MeshConfig, SubentityTag >   Orientation;
 
       typedef tnlStorageTraits< storageEnabled >                    SubentityStorageTag;
 
@@ -70,7 +71,7 @@ class tnlMeshSubentitiesTraits
                                             subentityVertexIndex>::index };
       };
 
-      static_assert( EntityTag::dimensions > DimensionsTag::value, "You try to create subentities traits where subentity dimensions are not smaller than the entity dimensions." );
+      static_assert( EntityTag::dimensions > Dimensions, "You try to create subentities traits where subentity dimensions are not smaller than the entity dimensions." );
 };
 
 
diff --git a/src/mesh/traits/tnlMeshSuperentitiesTraits.h b/src/mesh/traits/tnlMeshSuperentitiesTraits.h
index 131991d48cb710107e6014ff06278c4dc1a1dbad..3af7ec8c715825cf9240b7dd996a7c2224185792 100644
--- a/src/mesh/traits/tnlMeshSuperentitiesTraits.h
+++ b/src/mesh/traits/tnlMeshSuperentitiesTraits.h
@@ -26,24 +26,24 @@
 #include <mesh/topologies/tnlMeshEntityTopology.h>
 #include <mesh/traits/tnlMeshEntitiesTraits.h>
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename EntityTag,
           typename DimensionsTag >
 class tnlMeshSuperentitiesTraits
 {
-   typedef typename ConfigTag::GlobalIndexType                              GlobalIndexType;
-   typedef typename ConfigTag::LocalIndexType                               LocalIndexType;
+   typedef typename MeshConfig::GlobalIndexType                              GlobalIndexType;
+   typedef typename MeshConfig::LocalIndexType                               LocalIndexType;
 
    public:
 
-   static const bool storageEnabled = ConfigTag::template superentityStorage< EntityTag >( EntityTag(), DimensionsTag::value );
-   typedef tnlMeshEntity< ConfigTag, EntityTag >                            EntityType;
+   static const bool storageEnabled = MeshConfig::template superentityStorage< EntityTag >( EntityTag(), DimensionsTag::value );
+   typedef tnlMeshEntity< MeshConfig, EntityTag >                            EntityType;
    typedef typename
-      tnlMeshEntitiesTraits< ConfigTag,
-                             DimensionsTag >::Tag                        SuperentityTag;
+      tnlMeshEntitiesTraits< MeshConfig,
+                             DimensionsTag::value >::Tag                        SuperentityTag;
    typedef typename
-      tnlMeshEntitiesTraits< ConfigTag,
-                             DimensionsTag >::Type                       SuperentityType;
+      tnlMeshEntitiesTraits< MeshConfig,
+                             DimensionsTag::value >::EntityType                       SuperentityType;
 
    typedef tnlStorageTraits< storageEnabled >                               SuperentityStorageTag;
 
diff --git a/src/mesh/traits/tnlMeshTraits.h b/src/mesh/traits/tnlMeshTraits.h
index adf701250f9ef5f8609a0f35d4c12332af20dd28..dd2b7372333a8420f9e43bcc60e55cd5c7c446dc 100644
--- a/src/mesh/traits/tnlMeshTraits.h
+++ b/src/mesh/traits/tnlMeshTraits.h
@@ -20,18 +20,16 @@
 
 #include <core/vectors/tnlStaticVector.h>
 #include <core/arrays/tnlArray.h>
+#include <core/arrays/tnlSharedArray.h>
+#include <core/arrays/tnlConstSharedArray.h>
 #include <mesh/tnlDimensionsTag.h>
-#include <mesh/topologies/tnlMeshVertexTag.h>
-
-
-template< typename ConfigTag,
-          typename EntityTag >
-class tnlMeshEntity;
-
-template< typename ConfigTag,
-          typename EntityTag >
-class tnlMeshEntitySeed;
 
+struct tnlMeshVertexTag;
+template< typename MeshConfig, typename EntityTag > class tnlMeshEntity;
+template< typename MeshConfig, typename EntityTag > class tnlMeshEntitySeed;
+template< typename MeshConfig, int Dimensions > class tnlMeshEntitiesTraits;
+template< typename MeshConfig, typename MeshEntity, int SubDimensions > class tnlMeshSubentitiesTraits;
+template< typename MeshConfig, typename MeshEntity, typename SuperDimensions > class tnlMeshSuperentitiesTraits;
 
 template< typename MeshConfig,
           typename Device = tnlHost >
@@ -56,6 +54,19 @@ class tnlMeshTraits
       
       typedef tnlArray< PointType, tnlHost, GlobalIndexType >                      PointArrayType;
       typedef tnlArray< CellSeedType, tnlHost, GlobalIndexType >                   CellSeedArrayType;
+      typedef tnlArray< GlobalIndexType, tnlHost, GlobalIndexType >                GlobalIdArrayType;
+      typedef tnlConstSharedArray< GlobalIndexType, tnlHost, LocalIndexType >      IdArrayAccessorType;
+      typedef tnlConstSharedArray< LocalIndexType, tnlHost, LocalIndexType >       IdPermutationArrayAccessorType;
+      
+      template< int Dimensions > using EntityTraits = 
+         tnlMeshEntitiesTraits< MeshConfig, Dimensions >;
+      
+      template< typename MeshEntity, int SubDimensions > using SubentityTraits =
+         tnlMeshSubentitiesTraits< MeshConfig, MeshEntity, SubDimensions >;
+      
+      template< typename MeshEntity, typename SuperDimensions > using SuperentityTraits =
+         tnlMeshSuperentitiesTraits< MeshConfig, MeshEntity, SuperDimensions >;
+
 };
 
 
diff --git a/src/solvers/tnlBuildConfigTags.h b/src/solvers/tnlBuildConfigTags.h
index 5b094846fbe5899d9f72cb184da920f2f3bd76bc..f19daad01de69c449bf1c10cfe1102e6f8a53f64 100644
--- a/src/solvers/tnlBuildConfigTags.h
+++ b/src/solvers/tnlBuildConfigTags.h
@@ -1,5 +1,5 @@
 /***************************************************************************
-                          tnlConfigTags.h  -  description
+                          tnlMeshConfigs.h  -  description
                              -------------------
     begin                : Jul 7, 2014
     copyright            : (C) 2014 by Tomas Oberhuber
@@ -15,56 +15,56 @@
  *                                                                         *
  ***************************************************************************/
 
-#ifndef TNLCONFIGTAGS_H_
-#define TNLCONFIGTAGS_H_
+#ifndef TNLMeshConfigS_H_
+#define TNLMeshConfigS_H_
 
 #include <mesh/tnlGrid.h>
 
-class tnlDefaultBuildConfigTag{};
+class tnlDefaultBuildMeshConfig{};
 
 /****
  * All devices are enabled by default. Those which are not available
  * are disabled.
  */
-template< typename ConfigTag, typename Device > struct tnlConfigTagDevice{ enum { enabled = true }; };
+template< typename MeshConfig, typename Device > struct tnlMeshConfigDevice{ enum { enabled = true }; };
 #ifndef HAVE_CUDA
-template< typename ConfigTag > struct tnlConfigTagDevice< ConfigTag, tnlCuda >{ enum { enabled = false }; };
+template< typename MeshConfig > struct tnlMeshConfigDevice< MeshConfig, tnlCuda >{ enum { enabled = false }; };
 #endif
 
 /****
  * All real types are enabled by default.
  */
-template< typename ConfigTag, typename Real > struct tnlConfigTagReal{ enum { enabled = true }; };
+template< typename MeshConfig, typename Real > struct tnlMeshConfigReal{ enum { enabled = true }; };
 
 /****
  * All index types are enabled ba default.
  */
-template< typename ConfigTag, typename Index > struct tnlConfigTagIndex{ enum { enabled = true }; };
+template< typename MeshConfig, typename Index > struct tnlMeshConfigIndex{ enum { enabled = true }; };
 
 /****
  * The mesh type will be resolved by the tnlSolver by default.
  */
-template< typename ConfigTag > struct tnlConfigTagMeshResolve{ enum { enabled = true }; };
+template< typename MeshConfig > struct tnlMeshConfigMeshResolve{ enum { enabled = true }; };
 
 /****
  * 1, 2, and 3 dimensions are enabled by default
  */
-template< typename ConfigTag, int Dimensions > struct tnlConfigTagDimensions{ enum { enabled = false }; };
-   template< typename ConfigTag > struct tnlConfigTagDimensions< ConfigTag, 1 >{ enum { enabled = true }; };
-   template< typename ConfigTag > struct tnlConfigTagDimensions< ConfigTag, 2 >{ enum { enabled = true }; };
-   template< typename ConfigTag > struct tnlConfigTagDimensions< ConfigTag, 3 >{ enum { enabled = true }; };
+template< typename MeshConfig, int Dimensions > struct tnlMeshConfigDimensions{ enum { enabled = false }; };
+   template< typename MeshConfig > struct tnlMeshConfigDimensions< MeshConfig, 1 >{ enum { enabled = true }; };
+   template< typename MeshConfig > struct tnlMeshConfigDimensions< MeshConfig, 2 >{ enum { enabled = true }; };
+   template< typename MeshConfig > struct tnlMeshConfigDimensions< MeshConfig, 3 >{ enum { enabled = true }; };
 
 /****
  * Up to the exceptions enlisted below, all mesh types are disabled by default.
  */
-template< typename ConfigTag, typename MeshType > struct tnlConfigTagMesh{ enum { enabled = false }; };
+template< typename MeshConfig, typename MeshType > struct tnlMeshConfigMesh{ enum { enabled = false }; };
 
 /****
  * Use of tnlGrid is enabled for allowed dimensions by default.
  */
-template< typename ConfigTag, int Dimensions, typename Real, typename Device, typename Index >
-   struct tnlConfigTagMesh< ConfigTag, tnlGrid< Dimensions, Real, Device, Index > >
-      { enum { enabled = tnlConfigTagDimensions< ConfigTag, Dimensions >::enabled }; };
+template< typename MeshConfig, int Dimensions, typename Real, typename Device, typename Index >
+   struct tnlMeshConfigMesh< MeshConfig, tnlGrid< Dimensions, Real, Device, Index > >
+      { enum { enabled = tnlMeshConfigDimensions< MeshConfig, Dimensions >::enabled }; };
 
 /****
  * All time discretisations (explicit, semi-impicit and implicit ) are
@@ -74,7 +74,7 @@ class tnlExplicitTimeDiscretisationTag{};
 class tnlSemiImplicitTimeDiscretisationTag{};
 class tnlImplicitTimeDiscretisationTag{};
 
-template< typename ConfigTag, typename TimeDiscretisation > struct tnlConfigTagTimeDiscretisation{ enum { enabled = true }; };
+template< typename MeshConfig, typename TimeDiscretisation > struct tnlMeshConfigTimeDiscretisation{ enum { enabled = true }; };
 
 /****
  * All explicit solvers are enabled by default
@@ -82,7 +82,7 @@ template< typename ConfigTag, typename TimeDiscretisation > struct tnlConfigTagT
 class tnlExplicitEulerSolverTag{};
 class tnlExplicitMersonSolverTag{};
 
-template< typename ConfigTag, typename ExplicitSolver > struct tnlConfigTagExplicitSolver{ enum { enabled = true }; };
+template< typename MeshConfig, typename ExplicitSolver > struct tnlMeshConfigExplicitSolver{ enum { enabled = true }; };
 
 /****
  * All semi-implicit solvers are enabled by default
@@ -93,6 +93,6 @@ class  tnlSemiImplicitCGSolverTag{};
 class  tnlSemiImplicitBICGStabSolverTag{};
 class  tnlSemiImplicitGMRESSolverTag{};
 
-template< typename ConfigTag, typename SemiImplicitSolver > struct tnlConfigTagSemiImplicitSolver{ enum { enabled = true }; };
+template< typename MeshConfig, typename SemiImplicitSolver > struct tnlMeshConfigSemiImplicitSolver{ enum { enabled = true }; };
 
-#endif /* TNLCONFIGTAGS_H_ */
+#endif /* TNLMeshConfigS_H_ */
diff --git a/src/solvers/tnlFastBuildConfigTag.h b/src/solvers/tnlFastBuildConfigTag.h
index 23b603cf7a24e19262c6b9b0dba8dc02319b93b0..11b897753983e4e035e66b08533c94e15a2220b0 100644
--- a/src/solvers/tnlFastBuildConfigTag.h
+++ b/src/solvers/tnlFastBuildConfigTag.h
@@ -30,35 +30,35 @@ class tnlFastBuildConfig
 /****
  * Turn off support for float and long double.
  */
-template<> struct tnlConfigTagReal< tnlFastBuildConfig, float > { enum { enabled = false }; };
-template<> struct tnlConfigTagReal< tnlFastBuildConfig, long double > { enum { enabled = false }; };
+template<> struct tnlMeshConfigReal< tnlFastBuildConfig, float > { enum { enabled = false }; };
+template<> struct tnlMeshConfigReal< tnlFastBuildConfig, long double > { enum { enabled = false }; };
 
 /****
  * Turn off support for short int and long int indexing.
  */
-template<> struct tnlConfigTagIndex< tnlFastBuildConfig, short int >{ enum { enabled = false }; };
-template<> struct tnlConfigTagIndex< tnlFastBuildConfig, long int >{ enum { enabled = false }; };
+template<> struct tnlMeshConfigIndex< tnlFastBuildConfig, short int >{ enum { enabled = false }; };
+template<> struct tnlMeshConfigIndex< tnlFastBuildConfig, long int >{ enum { enabled = false }; };
 
 /****
  * Use of tnlGrid is enabled for allowed dimensions and Real, Device and Index types.
  */
 template< int Dimensions, typename Real, typename Device, typename Index >
-   struct tnlConfigTagMesh< tnlFastBuildConfig, tnlGrid< Dimensions, Real, Device, Index > >
-      { enum { enabled = tnlConfigTagDimensions< tnlFastBuildConfig, Dimensions >::enabled  &&
-                         tnlConfigTagReal< tnlFastBuildConfig, Real >::enabled &&
-                         tnlConfigTagDevice< tnlFastBuildConfig, Device >::enabled &&
-                         tnlConfigTagIndex< tnlFastBuildConfig, Index >::enabled }; };
+   struct tnlMeshConfigMesh< tnlFastBuildConfig, tnlGrid< Dimensions, Real, Device, Index > >
+      { enum { enabled = tnlMeshConfigDimensions< tnlFastBuildConfig, Dimensions >::enabled  &&
+                         tnlMeshConfigReal< tnlFastBuildConfig, Real >::enabled &&
+                         tnlMeshConfigDevice< tnlFastBuildConfig, Device >::enabled &&
+                         tnlMeshConfigIndex< tnlFastBuildConfig, Index >::enabled }; };
 
 /****
  * Please, chose your preferred time discretisation  here.
  */
-template<> struct tnlConfigTagTimeDiscretisation< tnlFastBuildConfig, tnlExplicitTimeDiscretisationTag >{ enum { enabled = true }; };
-template<> struct tnlConfigTagTimeDiscretisation< tnlFastBuildConfig, tnlSemiImplicitTimeDiscretisationTag >{ enum { enabled = true }; };
-template<> struct tnlConfigTagTimeDiscretisation< tnlFastBuildConfig, tnlImplicitTimeDiscretisationTag >{ enum { enabled = false }; };
+template<> struct tnlMeshConfigTimeDiscretisation< tnlFastBuildConfig, tnlExplicitTimeDiscretisationTag >{ enum { enabled = true }; };
+template<> struct tnlMeshConfigTimeDiscretisation< tnlFastBuildConfig, tnlSemiImplicitTimeDiscretisationTag >{ enum { enabled = true }; };
+template<> struct tnlMeshConfigTimeDiscretisation< tnlFastBuildConfig, tnlImplicitTimeDiscretisationTag >{ enum { enabled = false }; };
 
 /****
  * Only the Runge-Kutta-Merson solver is enabled by default.
  */
-template<> struct tnlConfigTagExplicitSolver< tnlFastBuildConfig, tnlExplicitEulerSolverTag >{ enum { enabled = false }; };
+template<> struct tnlMeshConfigExplicitSolver< tnlFastBuildConfig, tnlExplicitEulerSolverTag >{ enum { enabled = false }; };
 
 #endif /* TNLDEFAULTCONFIG_H_ */
diff --git a/src/solvers/tnlMeshTypeResolver.h b/src/solvers/tnlMeshTypeResolver.h
index f10b8d8ab383fdf8d0fb5000eb043f76d5e99c6d..702fab91e6bbc4dd9eafa5acdc5ed6c5e8a18d91 100644
--- a/src/solvers/tnlMeshTypeResolver.h
+++ b/src/solvers/tnlMeshTypeResolver.h
@@ -20,34 +20,34 @@
 
 #include <config/tnlParameterContainer.h>
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
           typename Device,
           typename Index,
-          typename ConfigTag,
-          bool ResolveMesh = tnlConfigTagMeshResolve< ConfigTag >::enabled >
+          typename MeshConfig,
+          bool ResolveMesh = tnlMeshConfigMeshResolve< MeshConfig >::enabled >
 class tnlMeshTypeResolver
 {
 };
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
           typename Device,
           typename Index,
-          typename ConfigTag >
-class tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, ConfigTag, false >
+          typename MeshConfig >
+class tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, MeshConfig, false >
 {
    public:
 
    static bool run( const tnlParameterContainer& parameters );
 };
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
           typename Device,
           typename Index,
-          typename ConfigTag  >
-class tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, ConfigTag, true >
+          typename MeshConfig  >
+class tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, MeshConfig, true >
 {
    public:
 
diff --git a/src/solvers/tnlMeshTypeResolver_impl.h b/src/solvers/tnlMeshTypeResolver_impl.h
index 427fff4265038092bc344a84bcd7599a0faba6d8..a50b15df3a3eeb5351cb1447622dc426d490bba2 100644
--- a/src/solvers/tnlMeshTypeResolver_impl.h
+++ b/src/solvers/tnlMeshTypeResolver_impl.h
@@ -23,37 +23,37 @@
 #include <mesh/tnlDummyMesh.h>
 #include <solvers/tnlSolverStarter.h>
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
           typename Device,
           typename Index,
           typename MeshType,
-          typename ConfigTag,
-          bool MeshTypeSupported = tnlConfigTagMesh< ConfigTag, MeshType >::enabled >
+          typename MeshConfig,
+          bool MeshTypeSupported = tnlMeshConfigMesh< MeshConfig, MeshType >::enabled >
 class tnlMeshResolverTerminator{};
 
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
           typename Device,
           typename Index,
-          typename ConfigTag >
-bool tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, ConfigTag, false  >::run( const tnlParameterContainer& parameters )
+          typename MeshConfig >
+bool tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, MeshConfig, false  >::run( const tnlParameterContainer& parameters )
 {
    return ProblemSetter< Real,
                          Device,
                          Index,
                          tnlDummyMesh< Real, Device, Index >,
-                         ConfigTag,
-                         tnlSolverStarter< ConfigTag > >::template run< Real, Device, Index, ConfigTag >( parameters );
+                         MeshConfig,
+                         tnlSolverStarter< MeshConfig > >::template run< Real, Device, Index, MeshConfig >( parameters );
 };
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
           typename Device,
           typename Index,
-          typename ConfigTag >
-bool tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, ConfigTag, true >::run( const tnlParameterContainer& parameters )
+          typename MeshConfig >
+bool tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, MeshConfig, true >::run( const tnlParameterContainer& parameters )
 {
    const tnlString& meshFileName = parameters.getParameter< tnlString >( "mesh" );
 
@@ -73,12 +73,12 @@ bool tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, ConfigTag, true >:
    return resolveMeshDimensions( parameters, parsedMeshType );
 }
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
           typename Device,
           typename Index,
-          typename ConfigTag >
-bool tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, ConfigTag, true >::resolveMeshDimensions( const tnlParameterContainer& parameters,
+          typename MeshConfig >
+bool tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, MeshConfig, true >::resolveMeshDimensions( const tnlParameterContainer& parameters,
                                                                                                         const tnlList< tnlString >& parsedMeshType )
 {
    int dimensions = atoi( parsedMeshType[ 1 ].getString() );
@@ -93,13 +93,13 @@ bool tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, ConfigTag, true >:
    return false;
 }
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
           typename Device,
           typename Index,
-          typename ConfigTag >
+          typename MeshConfig >
    template< int MeshDimensions >
-bool tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, ConfigTag, true >::resolveMeshRealType( const tnlParameterContainer& parameters,
+bool tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, MeshConfig, true >::resolveMeshRealType( const tnlParameterContainer& parameters,
                                                                                                       const tnlList< tnlString >& parsedMeshType )
 {
    if( parsedMeshType[ 2 ] == "float" )
@@ -112,14 +112,14 @@ bool tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, ConfigTag, true >:
    return false;
 }
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
           typename Device,
           typename Index,
-          typename ConfigTag >
+          typename MeshConfig >
    template< int MeshDimensions,
              typename MeshRealType >
-bool tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, ConfigTag, 1 >::resolveMeshIndexType( const tnlParameterContainer& parameters,
+bool tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, MeshConfig, 1 >::resolveMeshIndexType( const tnlParameterContainer& parameters,
                                                                                                     const tnlList< tnlString >& parsedMeshType )
 {
    if( parsedMeshType[ 4 ] == "short int" )
@@ -132,33 +132,33 @@ bool tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, ConfigTag, 1 >::re
    return false;
 }
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
           typename Device,
           typename Index,
-          typename ConfigTag >
+          typename MeshConfig >
    template< int MeshDimensions,
              typename MeshRealType,
              typename MeshIndexType >
-bool tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, ConfigTag, true >::resolveMeshType( const tnlParameterContainer& parameters,
+bool tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, MeshConfig, true >::resolveMeshType( const tnlParameterContainer& parameters,
                                                                                                   const tnlList< tnlString >& parsedMeshType )
 {
    if( parsedMeshType[ 0 ] == "tnlGrid" )
    {
       typedef tnlGrid< MeshDimensions, MeshRealType, Device, MeshIndexType > MeshType;
-      return tnlMeshResolverTerminator< ProblemSetter, Real, Device, Index, MeshType, ConfigTag >::run( parameters );
+      return tnlMeshResolverTerminator< ProblemSetter, Real, Device, Index, MeshType, MeshConfig >::run( parameters );
    }
    cerr << "Unknown mesh type " << parsedMeshType[ 0 ] << "." << endl;
    return false;
 }
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
           typename Device,
           typename Index,
           typename MeshType,
-          typename ConfigTag >
-class tnlMeshResolverTerminator< ProblemSetter, Real, Device, Index, MeshType, ConfigTag, false >
+          typename MeshConfig >
+class tnlMeshResolverTerminator< ProblemSetter, Real, Device, Index, MeshType, MeshConfig, false >
 {
    public:
       static bool run( const tnlParameterContainer& parameters )
@@ -168,18 +168,18 @@ class tnlMeshResolverTerminator< ProblemSetter, Real, Device, Index, MeshType, C
       };
 };
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
           typename Device,
           typename Index,
           typename MeshType,
-          typename ConfigTag >
-class tnlMeshResolverTerminator< ProblemSetter, Real, Device, Index, MeshType, ConfigTag, true >
+          typename MeshConfig >
+class tnlMeshResolverTerminator< ProblemSetter, Real, Device, Index, MeshType, MeshConfig, true >
 {
    public:
       static bool run( const tnlParameterContainer& parameters )
       {
-         return ProblemSetter< Real, Device, Index, MeshType, ConfigTag, tnlSolverStarter< ConfigTag > >::run( parameters );
+         return ProblemSetter< Real, Device, Index, MeshType, MeshConfig, tnlSolverStarter< MeshConfig > >::run( parameters );
       }
 };
 
diff --git a/src/solvers/tnlSolver.h b/src/solvers/tnlSolver.h
index 9e4040d87a48621acbe7750bb4f2164063c73c11..aeff94b70019f24eff84fa731f0c88ef96eea5e3 100644
--- a/src/solvers/tnlSolver.h
+++ b/src/solvers/tnlSolver.h
@@ -20,9 +20,9 @@
 
 #include <solvers/tnlBuildConfigTags.h>
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           template< typename ConfTag > class ProblemConfig,
-          typename ConfigTag = tnlDefaultBuildConfigTag >
+          typename MeshConfig = tnlDefaultBuildMeshConfig >
 class tnlSolver
 {
    public:
diff --git a/src/solvers/tnlSolverConfig.h b/src/solvers/tnlSolverConfig.h
index d266fa802125b33f36cd58c301bec62d5bbde270..446bb65632cb402d9836fe9e607fc1fb7887145d 100644
--- a/src/solvers/tnlSolverConfig.h
+++ b/src/solvers/tnlSolverConfig.h
@@ -20,7 +20,7 @@
 
 #include <config/tnlConfigDescription.h>
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename ProblemConfig >
 class tnlSolverConfig
 {
diff --git a/src/solvers/tnlSolverConfig_impl.h b/src/solvers/tnlSolverConfig_impl.h
index 329b0335918660845018b304f8191b543e7b302f..728de597cdac2464886583e69e9c03b86ac1ad04 100644
--- a/src/solvers/tnlSolverConfig_impl.h
+++ b/src/solvers/tnlSolverConfig_impl.h
@@ -24,9 +24,9 @@
 #include <solvers/pde/tnlExplicitTimeStepper.h>
 #include <solvers/pde/tnlPDESolver.h>
 
-template< typename ConfigTag,
+template< typename MeshConfig,
           typename ProblemConfig >
-bool tnlSolverConfig< ConfigTag, ProblemConfig >::configSetup( tnlConfigDescription& config )
+bool tnlSolverConfig< MeshConfig, ProblemConfig >::configSetup( tnlConfigDescription& config )
 {
    typedef tnlDummyProblem< double, tnlHost, int > DummyProblem;
 
@@ -37,11 +37,11 @@ bool tnlSolverConfig< ConfigTag, ProblemConfig >::configSetup( tnlConfigDescript
    config.addEntry< tnlString >( "real-type",
                                  "Precision of the floating point arithmetics.",
                                  "double" );
-   if( tnlConfigTagReal< ConfigTag, float >::enabled )
+   if( tnlMeshConfigReal< MeshConfig, float >::enabled )
       config.addEntryEnum( "float" );
-   if( tnlConfigTagReal< ConfigTag, double >::enabled )
+   if( tnlMeshConfigReal< MeshConfig, double >::enabled )
       config.addEntryEnum( "double" );
-   if( tnlConfigTagReal< ConfigTag, long double >::enabled )
+   if( tnlMeshConfigReal< MeshConfig, long double >::enabled )
       config.addEntryEnum( "long-double" );
 
    /****
@@ -50,10 +50,10 @@ bool tnlSolverConfig< ConfigTag, ProblemConfig >::configSetup( tnlConfigDescript
    config.addEntry< tnlString >( "device",
                                  "Device to use for the computations.",
                                  "host" );
-   if( tnlConfigTagDevice< ConfigTag, tnlHost >::enabled )
+   if( tnlMeshConfigDevice< MeshConfig, tnlHost >::enabled )
       config.addEntryEnum( "host" );
 #ifdef HAVE_CUDA
-   if( tnlConfigTagDevice< ConfigTag, tnlCuda >::enabled )
+   if( tnlMeshConfigDevice< MeshConfig, tnlCuda >::enabled )
       config.addEntryEnum( "cuda" );
 #endif
 
@@ -63,13 +63,13 @@ bool tnlSolverConfig< ConfigTag, ProblemConfig >::configSetup( tnlConfigDescript
    config.addEntry< tnlString >( "index-type",
                                  "Indexing type for arrays, vectors, matrices etc.",
                                  "int" );
-   if( tnlConfigTagIndex< ConfigTag, short int >::enabled )
+   if( tnlMeshConfigIndex< MeshConfig, short int >::enabled )
       config.addEntryEnum( "short-int" );
 
-   if( tnlConfigTagIndex< ConfigTag, int >::enabled )
+   if( tnlMeshConfigIndex< MeshConfig, int >::enabled )
       config.addEntryEnum( "int" );
 
-   if( tnlConfigTagIndex< ConfigTag, long int >::enabled )
+   if( tnlMeshConfigIndex< MeshConfig, long int >::enabled )
       config.addEntryEnum( "long-int" );
 
    /****
@@ -86,64 +86,64 @@ bool tnlSolverConfig< ConfigTag, ProblemConfig >::configSetup( tnlConfigDescript
    typedef tnlExplicitTimeStepper< DummyProblem, tnlEulerSolver > ExplicitTimeStepper;
    tnlPDESolver< DummyProblem, ExplicitTimeStepper >::configSetup( config );
    ExplicitTimeStepper::configSetup( config );
-   if( tnlConfigTagTimeDiscretisation< ConfigTag, tnlExplicitTimeDiscretisationTag >::enabled ||
-       tnlConfigTagTimeDiscretisation< ConfigTag, tnlSemiImplicitTimeDiscretisationTag >::enabled ||
-       tnlConfigTagTimeDiscretisation< ConfigTag, tnlImplicitTimeDiscretisationTag >::enabled )
+   if( tnlMeshConfigTimeDiscretisation< MeshConfig, tnlExplicitTimeDiscretisationTag >::enabled ||
+       tnlMeshConfigTimeDiscretisation< MeshConfig, tnlSemiImplicitTimeDiscretisationTag >::enabled ||
+       tnlMeshConfigTimeDiscretisation< MeshConfig, tnlImplicitTimeDiscretisationTag >::enabled )
    {
       config.addRequiredEntry< tnlString >( "time-discretisation", "Discratisation in time.");
-      if( tnlConfigTagTimeDiscretisation< ConfigTag, tnlExplicitTimeDiscretisationTag >::enabled )
+      if( tnlMeshConfigTimeDiscretisation< MeshConfig, tnlExplicitTimeDiscretisationTag >::enabled )
          config.addEntryEnum( "explicit" );
-      if( tnlConfigTagTimeDiscretisation< ConfigTag, tnlSemiImplicitTimeDiscretisationTag >::enabled )
+      if( tnlMeshConfigTimeDiscretisation< MeshConfig, tnlSemiImplicitTimeDiscretisationTag >::enabled )
          config.addEntryEnum( "semi-implicit" );
-      if( tnlConfigTagTimeDiscretisation< ConfigTag, tnlImplicitTimeDiscretisationTag >::enabled )
+      if( tnlMeshConfigTimeDiscretisation< MeshConfig, tnlImplicitTimeDiscretisationTag >::enabled )
          config.addEntryEnum( "implicit" );
    }
    config.addRequiredEntry< tnlString >( "discrete-solver", "The solver of the discretised problem:" );
-   if( tnlConfigTagTimeDiscretisation< ConfigTag, tnlExplicitTimeDiscretisationTag >::enabled )
+   if( tnlMeshConfigTimeDiscretisation< MeshConfig, tnlExplicitTimeDiscretisationTag >::enabled )
    {      
-      if( tnlConfigTagExplicitSolver< ConfigTag, tnlExplicitEulerSolverTag >::enabled )
+      if( tnlMeshConfigExplicitSolver< MeshConfig, tnlExplicitEulerSolverTag >::enabled )
          config.addEntryEnum( "euler" );
-      if( tnlConfigTagExplicitSolver< ConfigTag, tnlExplicitMersonSolverTag >::enabled )
+      if( tnlMeshConfigExplicitSolver< MeshConfig, tnlExplicitMersonSolverTag >::enabled )
          config.addEntryEnum( "merson" );
    }
-   if( tnlConfigTagTimeDiscretisation< ConfigTag, tnlSemiImplicitTimeDiscretisationTag >::enabled )
+   if( tnlMeshConfigTimeDiscretisation< MeshConfig, tnlSemiImplicitTimeDiscretisationTag >::enabled )
    {
-      if( tnlConfigTagSemiImplicitSolver< ConfigTag, tnlSemiImplicitCGSolverTag >::enabled )
+      if( tnlMeshConfigSemiImplicitSolver< MeshConfig, tnlSemiImplicitCGSolverTag >::enabled )
          config.addEntryEnum( "cg" );
-      if( tnlConfigTagSemiImplicitSolver< ConfigTag, tnlSemiImplicitBICGStabSolverTag >::enabled )
+      if( tnlMeshConfigSemiImplicitSolver< MeshConfig, tnlSemiImplicitBICGStabSolverTag >::enabled )
          config.addEntryEnum( "bicgstab" );
-      if( tnlConfigTagSemiImplicitSolver< ConfigTag, tnlSemiImplicitGMRESSolverTag >::enabled )
+      if( tnlMeshConfigSemiImplicitSolver< MeshConfig, tnlSemiImplicitGMRESSolverTag >::enabled )
          config.addEntryEnum( "gmres" );
-      if( tnlConfigTagSemiImplicitSolver< ConfigTag, tnlSemiImplicitSORSolverTag >::enabled )
+      if( tnlMeshConfigSemiImplicitSolver< MeshConfig, tnlSemiImplicitSORSolverTag >::enabled )
          config.addEntryEnum( "sor" );
    }
-   if( tnlConfigTagTimeDiscretisation< ConfigTag, tnlExplicitTimeDiscretisationTag >::enabled ||
-       tnlConfigTagTimeDiscretisation< ConfigTag, tnlSemiImplicitTimeDiscretisationTag >::enabled )
+   if( tnlMeshConfigTimeDiscretisation< MeshConfig, tnlExplicitTimeDiscretisationTag >::enabled ||
+       tnlMeshConfigTimeDiscretisation< MeshConfig, tnlSemiImplicitTimeDiscretisationTag >::enabled )
    {
       config.addDelimiter( " === Iterative solvers parameters === " );
       tnlIterativeSolver< double, int >::configSetup( config );
    }
-   if( tnlConfigTagTimeDiscretisation< ConfigTag, tnlExplicitTimeDiscretisationTag >::enabled )
+   if( tnlMeshConfigTimeDiscretisation< MeshConfig, tnlExplicitTimeDiscretisationTag >::enabled )
    {
       config.addDelimiter( " === Explicit solvers parameters === " );
       tnlExplicitSolver< tnlDummyProblem< double, tnlHost, int > >::configSetup( config );
-      if( tnlConfigTagExplicitSolver< ConfigTag, tnlExplicitEulerSolverTag >::enabled )
+      if( tnlMeshConfigExplicitSolver< MeshConfig, tnlExplicitEulerSolverTag >::enabled )
          tnlEulerSolver< tnlDummyProblem< double, tnlHost, int > >::configSetup( config );
 
-      if( tnlConfigTagExplicitSolver< ConfigTag, tnlExplicitMersonSolverTag >::enabled )
+      if( tnlMeshConfigExplicitSolver< MeshConfig, tnlExplicitMersonSolverTag >::enabled )
          tnlMersonSolver< tnlDummyProblem< double, tnlHost, int > >::configSetup( config );
    }
-   if( tnlConfigTagTimeDiscretisation< ConfigTag, tnlSemiImplicitTimeDiscretisationTag >::enabled )
+   if( tnlMeshConfigTimeDiscretisation< MeshConfig, tnlSemiImplicitTimeDiscretisationTag >::enabled )
    {
       config.addDelimiter( " === Semi-implicit solvers parameters === " );      
       typedef tnlCSRMatrix< double, tnlHost, int > MatrixType;
-      if( tnlConfigTagSemiImplicitSolver< ConfigTag, tnlSemiImplicitCGSolverTag >::enabled )
+      if( tnlMeshConfigSemiImplicitSolver< MeshConfig, tnlSemiImplicitCGSolverTag >::enabled )
          tnlCGSolver< MatrixType >::configSetup( config );
-      if( tnlConfigTagSemiImplicitSolver< ConfigTag, tnlSemiImplicitBICGStabSolverTag >::enabled )
+      if( tnlMeshConfigSemiImplicitSolver< MeshConfig, tnlSemiImplicitBICGStabSolverTag >::enabled )
          tnlBICGStabSolver< MatrixType >::configSetup( config );
-      if( tnlConfigTagSemiImplicitSolver< ConfigTag, tnlSemiImplicitGMRESSolverTag >::enabled )
+      if( tnlMeshConfigSemiImplicitSolver< MeshConfig, tnlSemiImplicitGMRESSolverTag >::enabled )
          tnlGMRESSolver< MatrixType >::configSetup( config );
-      if( tnlConfigTagSemiImplicitSolver< ConfigTag, tnlSemiImplicitSORSolverTag >::enabled )
+      if( tnlMeshConfigSemiImplicitSolver< MeshConfig, tnlSemiImplicitSORSolverTag >::enabled )
          tnlSORSolver< MatrixType >::configSetup( config );
    }
 
diff --git a/src/solvers/tnlSolverInitiator.h b/src/solvers/tnlSolverInitiator.h
index 525d304c9d2bfea36396c2b0e35cbfae65903527..5cad3ee8150864a21a8b27d5bcd6f394de168514 100644
--- a/src/solvers/tnlSolverInitiator.h
+++ b/src/solvers/tnlSolverInitiator.h
@@ -22,8 +22,8 @@
 #include <config/tnlParameterContainer.h>
 #include <solvers/tnlBuildConfigTags.h>
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
-          typename ConfigTag >
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
+          typename MeshConfig >
 class tnlSolverInitiator : public tnlObject
 {
    public:
diff --git a/src/solvers/tnlSolverInitiator_impl.h b/src/solvers/tnlSolverInitiator_impl.h
index 0876bd27527879a2a9cf4faaa071fc5f5bfa90df..634336602fc9e3f41638c7f50639e58a8b177ea8 100644
--- a/src/solvers/tnlSolverInitiator_impl.h
+++ b/src/solvers/tnlSolverInitiator_impl.h
@@ -25,48 +25,48 @@
 #include <core/tnlHost.h>
 #include <core/tnlCuda.h>
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
-          typename ConfigTag,
-          bool enabled = tnlConfigTagReal< ConfigTag, Real >::enabled >
+          typename MeshConfig,
+          bool enabled = tnlMeshConfigReal< MeshConfig, Real >::enabled >
 class tnlSolverInitiatorRealResolver{};
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
           typename Device,
-          typename ConfigTag,
-          bool enabled = tnlConfigTagDevice< ConfigTag, Device >::enabled >
+          typename MeshConfig,
+          bool enabled = tnlMeshConfigDevice< MeshConfig, Device >::enabled >
 class tnlSolverInitiatorDeviceResolver{};
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
           typename Device,
           typename Index,
-          typename ConfigTag,
-          bool enabled = tnlConfigTagIndex< ConfigTag, Index >::enabled >
+          typename MeshConfig,
+          bool enabled = tnlMeshConfigIndex< MeshConfig, Index >::enabled >
 class tnlSolverInitiatorIndexResolver{};
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
-          typename ConfigTag  >
-bool tnlSolverInitiator< ProblemSetter, ConfigTag > :: run( const tnlParameterContainer& parameters )
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
+          typename MeshConfig  >
+bool tnlSolverInitiator< ProblemSetter, MeshConfig > :: run( const tnlParameterContainer& parameters )
 {
    const tnlString& realType = parameters. getParameter< tnlString >( "real-type" );
    if( parameters. getParameter< int >( "verbose" ) )
       cout << "Setting RealType to   ... " << realType << endl;
    if( realType == "float" )
-      return tnlSolverInitiatorRealResolver< ProblemSetter, float, ConfigTag >::run( parameters );
+      return tnlSolverInitiatorRealResolver< ProblemSetter, float, MeshConfig >::run( parameters );
    if( realType == "double" )
-      return tnlSolverInitiatorRealResolver< ProblemSetter, double, ConfigTag >::run( parameters );
+      return tnlSolverInitiatorRealResolver< ProblemSetter, double, MeshConfig >::run( parameters );
    if( realType == "long-double" )
-      return tnlSolverInitiatorRealResolver< ProblemSetter, long double, ConfigTag >::run( parameters );
+      return tnlSolverInitiatorRealResolver< ProblemSetter, long double, MeshConfig >::run( parameters );
    cerr << "The real type '" << realType << "' is not defined. " << endl;
    return false;
 };
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
-          typename ConfigTag >
-class tnlSolverInitiatorRealResolver< ProblemSetter, Real, ConfigTag, true >
+          typename MeshConfig >
+class tnlSolverInitiatorRealResolver< ProblemSetter, Real, MeshConfig, true >
 {
    public:
       static bool run( const tnlParameterContainer& parameters )
@@ -76,18 +76,18 @@ class tnlSolverInitiatorRealResolver< ProblemSetter, Real, ConfigTag, true >
             cout << "Setting DeviceType to ... " << device << endl;
 
          if( device == "host" )
-            return tnlSolverInitiatorDeviceResolver< ProblemSetter, Real, tnlHost, ConfigTag >::run( parameters );
+            return tnlSolverInitiatorDeviceResolver< ProblemSetter, Real, tnlHost, MeshConfig >::run( parameters );
          if( device == "cuda" )
-            return tnlSolverInitiatorDeviceResolver< ProblemSetter, Real, tnlCuda, ConfigTag >::run( parameters );
+            return tnlSolverInitiatorDeviceResolver< ProblemSetter, Real, tnlCuda, MeshConfig >::run( parameters );
          cerr << "The device '" << device << "' is not defined. " << endl;
          return false;
       }
 };
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
-          typename ConfigTag >
-class tnlSolverInitiatorRealResolver< ProblemSetter, Real, ConfigTag, false >
+          typename MeshConfig >
+class tnlSolverInitiatorRealResolver< ProblemSetter, Real, MeshConfig, false >
 {
    public:
       static bool run( const tnlParameterContainer& parameters )
@@ -97,11 +97,11 @@ class tnlSolverInitiatorRealResolver< ProblemSetter, Real, ConfigTag, false >
       }
 };
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
           typename Device,
-          typename ConfigTag >
-class tnlSolverInitiatorDeviceResolver< ProblemSetter, Real, Device, ConfigTag, true >
+          typename MeshConfig >
+class tnlSolverInitiatorDeviceResolver< ProblemSetter, Real, Device, MeshConfig, true >
 {
    public:
       static bool run( const tnlParameterContainer& parameters )
@@ -110,21 +110,21 @@ class tnlSolverInitiatorDeviceResolver< ProblemSetter, Real, Device, ConfigTag,
          if( parameters. getParameter< int >( "verbose" ) )
             cout << "Setting IndexType to  ... " << indexType << endl;
          if( indexType == "short-int" )
-            return tnlSolverInitiatorIndexResolver< ProblemSetter, Real, Device, short int, ConfigTag >::run( parameters );
+            return tnlSolverInitiatorIndexResolver< ProblemSetter, Real, Device, short int, MeshConfig >::run( parameters );
          if( indexType == "int" )
-            return tnlSolverInitiatorIndexResolver< ProblemSetter, Real, Device, int, ConfigTag >::run( parameters );
+            return tnlSolverInitiatorIndexResolver< ProblemSetter, Real, Device, int, MeshConfig >::run( parameters );
          if( indexType == "long int" )
-            return tnlSolverInitiatorIndexResolver< ProblemSetter, Real, Device, long int, ConfigTag >::run( parameters );
+            return tnlSolverInitiatorIndexResolver< ProblemSetter, Real, Device, long int, MeshConfig >::run( parameters );
          cerr << "The index type '" << indexType << "' is not defined. " << endl;
          return false;
       }
 };
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
           typename Device,
-          typename ConfigTag >
-class tnlSolverInitiatorDeviceResolver< ProblemSetter, Real, Device, ConfigTag, false >
+          typename MeshConfig >
+class tnlSolverInitiatorDeviceResolver< ProblemSetter, Real, Device, MeshConfig, false >
 {
    public:
       static bool run( const tnlParameterContainer& parameters )
@@ -134,12 +134,12 @@ class tnlSolverInitiatorDeviceResolver< ProblemSetter, Real, Device, ConfigTag,
       }
 };
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
           typename Device,
           typename Index,
-          typename ConfigTag >
-class tnlSolverInitiatorIndexResolver< ProblemSetter, Real, Device, Index, ConfigTag, false >
+          typename MeshConfig >
+class tnlSolverInitiatorIndexResolver< ProblemSetter, Real, Device, Index, MeshConfig, false >
 {
    public:
       static bool run( const tnlParameterContainer& parameters )
@@ -149,17 +149,17 @@ class tnlSolverInitiatorIndexResolver< ProblemSetter, Real, Device, Index, Confi
       }
 };
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
           typename Real,
           typename Device,
           typename Index,
-          typename ConfigTag >
-class tnlSolverInitiatorIndexResolver< ProblemSetter, Real, Device, Index, ConfigTag, true >
+          typename MeshConfig >
+class tnlSolverInitiatorIndexResolver< ProblemSetter, Real, Device, Index, MeshConfig, true >
 {
    public:
       static bool run( const tnlParameterContainer& parameters )
       {
-         return tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, ConfigTag >::run( parameters );
+         return tnlMeshTypeResolver< ProblemSetter, Real, Device, Index, MeshConfig >::run( parameters );
       }
 };
 
diff --git a/src/solvers/tnlSolverStarter.h b/src/solvers/tnlSolverStarter.h
index a2f604bedc3b21d29e34b58d967b5708ee354abb..7b9bc2d8f3757487ac9f479ac274ab18ddef4ddd 100644
--- a/src/solvers/tnlSolverStarter.h
+++ b/src/solvers/tnlSolverStarter.h
@@ -23,7 +23,7 @@
 #include <core/tnlTimerCPU.h>
 #include <ostream>
 
-template< typename ConfigTag >
+template< typename MeshConfig >
 class tnlSolverStarter
 {
    public:
diff --git a/src/solvers/tnlSolverStarter_impl.h b/src/solvers/tnlSolverStarter_impl.h
index 09e61c33e25d96b0d63cbe30891d21b274f7a296..2f6d9efeddeabe41ee1e0f413c0f7b3b6d77654a 100644
--- a/src/solvers/tnlSolverStarter_impl.h
+++ b/src/solvers/tnlSolverStarter_impl.h
@@ -34,49 +34,49 @@
 #include <solvers/ode/tnlODESolverMonitor.h>
 
 template< typename Problem,
-          typename ConfigTag,
+          typename MeshConfig,
           typename TimeStepper = typename Problem::TimeStepper >
 class tnlUserDefinedTimeDiscretisationSetter;
 
 template< typename Problem,
           typename TimeDiscretisation,
-          typename ConfigTag,
-          bool enabled = tnlConfigTagTimeDiscretisation< ConfigTag, TimeDiscretisation >::enabled >
+          typename MeshConfig,
+          bool enabled = tnlMeshConfigTimeDiscretisation< MeshConfig, TimeDiscretisation >::enabled >
 class tnlSolverStarterTimeDiscretisationSetter{};
 
 template< typename Problem,
           typename ExplicitSolver,
-          typename ConfigTag,
-          bool enabled = tnlConfigTagExplicitSolver< ConfigTag, ExplicitSolver >::enabled >
+          typename MeshConfig,
+          bool enabled = tnlMeshConfigExplicitSolver< MeshConfig, ExplicitSolver >::enabled >
 class tnlSolverStarterExplicitSolverSetter{};
 
 template< typename Problem,
           typename SemiImplicitSolver,
-          typename ConfigTag,
-          bool enabled = tnlConfigTagSemiImplicitSolver< ConfigTag, SemiImplicitSolver >::enabled >
+          typename MeshConfig,
+          bool enabled = tnlMeshConfigSemiImplicitSolver< MeshConfig, SemiImplicitSolver >::enabled >
 class tnlSolverStarterSemiImplicitSolverSetter{};
 
 
 template< typename Problem,
           typename ExplicitSolver,
           typename TimeStepper,
-          typename ConfigTag >
+          typename MeshConfig >
 class tnlSolverStarterExplicitTimeStepperSetter;
 
 template< typename Problem,
           typename TimeStepper,
-          typename ConfigTag >
+          typename MeshConfig >
 class tnlSolverStarterSemiImplicitTimeStepperSetter;
 
-template< typename ConfigTag >
-tnlSolverStarter< ConfigTag > :: tnlSolverStarter()
+template< typename MeshConfig >
+tnlSolverStarter< MeshConfig > :: tnlSolverStarter()
 : logWidth( 80 )
 {
 }
 
-template< typename ConfigTag >
+template< typename MeshConfig >
    template< typename Problem >
-bool tnlSolverStarter< ConfigTag > :: run( const tnlParameterContainer& parameters )
+bool tnlSolverStarter< MeshConfig > :: run( const tnlParameterContainer& parameters )
 {
    /****
     * Create and set-up the problem
@@ -88,11 +88,11 @@ bool tnlSolverStarter< ConfigTag > :: run( const tnlParameterContainer& paramete
       return false;
    }
 
-   return tnlUserDefinedTimeDiscretisationSetter< Problem, ConfigTag >::run( problem, parameters );
+   return tnlUserDefinedTimeDiscretisationSetter< Problem, MeshConfig >::run( problem, parameters );
 }
 
 template< typename Problem,
-          typename ConfigTag,
+          typename MeshConfig,
           typename TimeStepper >
 class tnlUserDefinedTimeDiscretisationSetter
 {
@@ -106,14 +106,14 @@ class tnlUserDefinedTimeDiscretisationSetter
             cerr << "The time stepper initiation failed!" << endl;
             return false;
          }
-         tnlSolverStarter< ConfigTag > solverStarter;
+         tnlSolverStarter< MeshConfig > solverStarter;
          return solverStarter.template runPDESolver< Problem, TimeStepper >( problem, parameters, timeStepper );
       }
 };
 
 template< typename Problem,
-          typename ConfigTag >
-class tnlUserDefinedTimeDiscretisationSetter< Problem, ConfigTag, void >
+          typename MeshConfig >
+class tnlUserDefinedTimeDiscretisationSetter< Problem, MeshConfig, void >
 {
    public:
       static bool run( Problem& problem,
@@ -124,11 +124,11 @@ class tnlUserDefinedTimeDiscretisationSetter< Problem, ConfigTag, void >
           */
          const tnlString& timeDiscretisation = parameters. getParameter< tnlString>( "time-discretisation" );
          if( timeDiscretisation == "explicit" )
-            return tnlSolverStarterTimeDiscretisationSetter< Problem, tnlExplicitTimeDiscretisationTag, ConfigTag >::run( problem, parameters );
+            return tnlSolverStarterTimeDiscretisationSetter< Problem, tnlExplicitTimeDiscretisationTag, MeshConfig >::run( problem, parameters );
          if( timeDiscretisation == "semi-implicit" )
-            return tnlSolverStarterTimeDiscretisationSetter< Problem, tnlSemiImplicitTimeDiscretisationTag, ConfigTag >::run( problem, parameters );
+            return tnlSolverStarterTimeDiscretisationSetter< Problem, tnlSemiImplicitTimeDiscretisationTag, MeshConfig >::run( problem, parameters );
          if( timeDiscretisation == "implicit" )
-            return tnlSolverStarterTimeDiscretisationSetter< Problem, tnlImplicitTimeDiscretisationTag, ConfigTag >::run( problem, parameters );
+            return tnlSolverStarterTimeDiscretisationSetter< Problem, tnlImplicitTimeDiscretisationTag, MeshConfig >::run( problem, parameters );
          cerr << "Uknown time discretisation: " << timeDiscretisation << "." << endl;
          return false;
       }
@@ -140,8 +140,8 @@ class tnlUserDefinedTimeDiscretisationSetter< Problem, ConfigTag, void >
 
 template< typename Problem,
           typename TimeDiscretisation,
-          typename ConfigTag >
-class tnlSolverStarterTimeDiscretisationSetter< Problem, TimeDiscretisation, ConfigTag, false >
+          typename MeshConfig >
+class tnlSolverStarterTimeDiscretisationSetter< Problem, TimeDiscretisation, MeshConfig, false >
 {
    public:
       static bool run( Problem& problem,
@@ -153,8 +153,8 @@ class tnlSolverStarterTimeDiscretisationSetter< Problem, TimeDiscretisation, Con
 };
 
 template< typename Problem,
-          typename ConfigTag >
-class tnlSolverStarterTimeDiscretisationSetter< Problem, tnlExplicitTimeDiscretisationTag, ConfigTag, true >
+          typename MeshConfig >
+class tnlSolverStarterTimeDiscretisationSetter< Problem, tnlExplicitTimeDiscretisationTag, MeshConfig, true >
 {
    public:
       static bool run( Problem& problem,
@@ -168,16 +168,16 @@ class tnlSolverStarterTimeDiscretisationSetter< Problem, tnlExplicitTimeDiscreti
             return false;
          }
          if( discreteSolver == "euler" )
-            return tnlSolverStarterExplicitSolverSetter< Problem, tnlExplicitEulerSolverTag, ConfigTag >::run( problem, parameters );
+            return tnlSolverStarterExplicitSolverSetter< Problem, tnlExplicitEulerSolverTag, MeshConfig >::run( problem, parameters );
          if( discreteSolver == "merson" )
-            return tnlSolverStarterExplicitSolverSetter< Problem, tnlExplicitMersonSolverTag, ConfigTag >::run( problem, parameters );
+            return tnlSolverStarterExplicitSolverSetter< Problem, tnlExplicitMersonSolverTag, MeshConfig >::run( problem, parameters );
          return false;
       }
 };
 
 template< typename Problem,
-          typename ConfigTag >
-class tnlSolverStarterTimeDiscretisationSetter< Problem, tnlSemiImplicitTimeDiscretisationTag, ConfigTag, true >
+          typename MeshConfig >
+class tnlSolverStarterTimeDiscretisationSetter< Problem, tnlSemiImplicitTimeDiscretisationTag, MeshConfig, true >
 {
    public:
       static bool run( Problem& problem,
@@ -194,20 +194,20 @@ class tnlSolverStarterTimeDiscretisationSetter< Problem, tnlSemiImplicitTimeDisc
          }
 
          if( discreteSolver == "sor" )
-            return tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitSORSolverTag, ConfigTag >::run( problem, parameters );
+            return tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitSORSolverTag, MeshConfig >::run( problem, parameters );
          if( discreteSolver == "cg" )
-            return tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitCGSolverTag, ConfigTag >::run( problem, parameters );
+            return tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitCGSolverTag, MeshConfig >::run( problem, parameters );
          if( discreteSolver == "bicgstab" )
-            return tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitBICGStabSolverTag, ConfigTag >::run( problem, parameters );
+            return tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitBICGStabSolverTag, MeshConfig >::run( problem, parameters );
          if( discreteSolver == "gmres" )
-            return tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitGMRESSolverTag, ConfigTag >::run( problem, parameters );
+            return tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitGMRESSolverTag, MeshConfig >::run( problem, parameters );
          return false;
       }
 };
 
 template< typename Problem,
-          typename ConfigTag >
-class tnlSolverStarterTimeDiscretisationSetter< Problem, tnlImplicitTimeDiscretisationTag, ConfigTag, true >
+          typename MeshConfig >
+class tnlSolverStarterTimeDiscretisationSetter< Problem, tnlImplicitTimeDiscretisationTag, MeshConfig, true >
 {
    public:
       static bool run( Problem& problem,
@@ -224,8 +224,8 @@ class tnlSolverStarterTimeDiscretisationSetter< Problem, tnlImplicitTimeDiscreti
 
 template< typename Problem,
           typename ExplicitSolver,
-          typename ConfigTag >
-class tnlSolverStarterExplicitSolverSetter< Problem, ExplicitSolver, ConfigTag, false >
+          typename MeshConfig >
+class tnlSolverStarterExplicitSolverSetter< Problem, ExplicitSolver, MeshConfig, false >
 {
    public:
       static bool run( Problem& problem,
@@ -237,8 +237,8 @@ class tnlSolverStarterExplicitSolverSetter< Problem, ExplicitSolver, ConfigTag,
 };
 
 template< typename Problem,
-          typename ConfigTag >
-class tnlSolverStarterExplicitSolverSetter< Problem, tnlExplicitEulerSolverTag, ConfigTag, true >
+          typename MeshConfig >
+class tnlSolverStarterExplicitSolverSetter< Problem, tnlExplicitEulerSolverTag, MeshConfig, true >
 {
    public:
       static bool run( Problem& problem,
@@ -249,13 +249,13 @@ class tnlSolverStarterExplicitSolverSetter< Problem, tnlExplicitEulerSolverTag,
          return tnlSolverStarterExplicitTimeStepperSetter< Problem,
                                                            ExplicitSolver,
                                                            TimeStepper,
-                                                           ConfigTag >::run( problem, parameters );
+                                                           MeshConfig >::run( problem, parameters );
       }
 };
 
 template< typename Problem,
-          typename ConfigTag >
-class tnlSolverStarterExplicitSolverSetter< Problem, tnlExplicitMersonSolverTag, ConfigTag, true >
+          typename MeshConfig >
+class tnlSolverStarterExplicitSolverSetter< Problem, tnlExplicitMersonSolverTag, MeshConfig, true >
 {
    public:
       static bool run( Problem& problem,
@@ -266,7 +266,7 @@ class tnlSolverStarterExplicitSolverSetter< Problem, tnlExplicitMersonSolverTag,
          return tnlSolverStarterExplicitTimeStepperSetter< Problem,
                                                            ExplicitSolver,
                                                            TimeStepper,
-                                                           ConfigTag >::run( problem, parameters );
+                                                           MeshConfig >::run( problem, parameters );
       }
 };
 
@@ -276,8 +276,8 @@ class tnlSolverStarterExplicitSolverSetter< Problem, tnlExplicitMersonSolverTag,
 
 template< typename Problem,
           typename SemiImplicitSolver,
-          typename ConfigTag >
-class tnlSolverStarterSemiImplicitSolverSetter< Problem, SemiImplicitSolver, ConfigTag, false >
+          typename MeshConfig >
+class tnlSolverStarterSemiImplicitSolverSetter< Problem, SemiImplicitSolver, MeshConfig, false >
 {
    public:
       static bool run( Problem& problem,
@@ -289,8 +289,8 @@ class tnlSolverStarterSemiImplicitSolverSetter< Problem, SemiImplicitSolver, Con
 };
 
 template< typename Problem,
-          typename ConfigTag >
-class tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitSORSolverTag, ConfigTag, true >
+          typename MeshConfig >
+class tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitSORSolverTag, MeshConfig, true >
 {
    public:
       static bool run( Problem& problem,
@@ -301,13 +301,13 @@ class tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitSORSolve
          typedef tnlSemiImplicitTimeStepper< Problem, LinearSystemSolver > TimeStepper;
          return tnlSolverStarterSemiImplicitTimeStepperSetter< Problem,
                                                                TimeStepper,
-                                                               ConfigTag >::run( problem, parameters );
+                                                               MeshConfig >::run( problem, parameters );
       }
 };
 
 template< typename Problem,
-          typename ConfigTag >
-class tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitCGSolverTag, ConfigTag, true >
+          typename MeshConfig >
+class tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitCGSolverTag, MeshConfig, true >
 {
    public:
       static bool run( Problem& problem,
@@ -318,13 +318,13 @@ class tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitCGSolver
          typedef tnlSemiImplicitTimeStepper< Problem, LinearSystemSolver > TimeStepper;
          return tnlSolverStarterSemiImplicitTimeStepperSetter< Problem,
                                                                TimeStepper,
-                                                               ConfigTag >::run( problem, parameters );
+                                                               MeshConfig >::run( problem, parameters );
       }
 };
 
 template< typename Problem,
-          typename ConfigTag >
-class tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitBICGStabSolverTag, ConfigTag, true >
+          typename MeshConfig >
+class tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitBICGStabSolverTag, MeshConfig, true >
 {
    public:
       static bool run( Problem& problem,
@@ -335,13 +335,13 @@ class tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitBICGStab
          typedef tnlSemiImplicitTimeStepper< Problem, LinearSystemSolver > TimeStepper;
          return tnlSolverStarterSemiImplicitTimeStepperSetter< Problem,
                                                                TimeStepper,
-                                                               ConfigTag >::run( problem, parameters );
+                                                               MeshConfig >::run( problem, parameters );
       }
 };
 
 template< typename Problem,
-          typename ConfigTag >
-class tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitGMRESSolverTag, ConfigTag, true >
+          typename MeshConfig >
+class tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitGMRESSolverTag, MeshConfig, true >
 {
    public:
       static bool run( Problem& problem,
@@ -352,7 +352,7 @@ class tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitGMRESSol
          typedef tnlSemiImplicitTimeStepper< Problem, LinearSystemSolver > TimeStepper;
          return tnlSolverStarterSemiImplicitTimeStepperSetter< Problem,
                                                                TimeStepper,
-                                                               ConfigTag >::run( problem, parameters );
+                                                               MeshConfig >::run( problem, parameters );
       }
 };
 
@@ -363,7 +363,7 @@ class tnlSolverStarterSemiImplicitSolverSetter< Problem, tnlSemiImplicitGMRESSol
 template< typename Problem,
           typename ExplicitSolver,
           typename TimeStepper,
-          typename ConfigTag >
+          typename MeshConfig >
 class tnlSolverStarterExplicitTimeStepperSetter
 {
    public:
@@ -393,7 +393,7 @@ class tnlSolverStarterExplicitTimeStepperSetter
          }
          timeStepper.setSolver( explicitSolver );
 
-         tnlSolverStarter< ConfigTag > solverStarter;
+         tnlSolverStarter< MeshConfig > solverStarter;
          return solverStarter.template runPDESolver< Problem, TimeStepper >( problem, parameters, timeStepper );
       };
 };
@@ -403,7 +403,7 @@ class tnlSolverStarterExplicitTimeStepperSetter
  */
 template< typename Problem,
           typename TimeStepper,
-          typename ConfigTag >
+          typename MeshConfig >
 class tnlSolverStarterSemiImplicitTimeStepperSetter
 {
    public:
@@ -434,7 +434,7 @@ class tnlSolverStarterSemiImplicitTimeStepperSetter
          }
          timeStepper.setSolver( linearSystemSolver );
 
-         tnlSolverStarter< ConfigTag > solverStarter;
+         tnlSolverStarter< MeshConfig > solverStarter;
          return solverStarter.template runPDESolver< Problem, TimeStepper >( problem, parameters, timeStepper );
       };
 };
@@ -445,9 +445,9 @@ class tnlSolverStarterSemiImplicitTimeStepperSetter
 
 
 #ifdef UNDEF
-template< typename ConfigTag >
+template< typename MeshConfig >
    template< typename Problem >
-bool tnlSolverStarter< ConfigTag > :: setDiscreteSolver( Problem& problem,
+bool tnlSolverStarter< MeshConfig > :: setDiscreteSolver( Problem& problem,
                                                          const tnlParameterContainer& parameters )
 {
    if( ( discreteSolver == "sor" ||
@@ -509,10 +509,10 @@ bool tnlSolverStarter< ConfigTag > :: setDiscreteSolver( Problem& problem,
 }
 #endif
 
-template< typename ConfigTag >
+template< typename MeshConfig >
    template< typename Problem,
              typename TimeStepper >
-bool tnlSolverStarter< ConfigTag > :: runPDESolver( Problem& problem,
+bool tnlSolverStarter< MeshConfig > :: runPDESolver( Problem& problem,
                                                     const tnlParameterContainer& parameters,
                                                     TimeStepper& timeStepper )
 {
@@ -625,9 +625,9 @@ bool tnlSolverStarter< ConfigTag > :: runPDESolver( Problem& problem,
    return returnCode;
 }
 
-template< typename ConfigTag >
+template< typename MeshConfig >
    template< typename Solver >
-bool tnlSolverStarter< ConfigTag > :: writeEpilog( ostream& str, const Solver& solver  )
+bool tnlSolverStarter< MeshConfig > :: writeEpilog( ostream& str, const Solver& solver  )
 {
    tnlLogger logger( logWidth, str );
    logger.writeCurrentTime( "Finished at:" );
diff --git a/src/solvers/tnlSolver_impl.h b/src/solvers/tnlSolver_impl.h
index 7fa9f6b970dd0c736b86282348b39d4f068ea1bd..33d9b2fe8b794321db5ec0089f459959ed0bfd1e 100644
--- a/src/solvers/tnlSolver_impl.h
+++ b/src/solvers/tnlSolver_impl.h
@@ -22,21 +22,21 @@
 #include <solvers/tnlSolverStarter.h>
 #include <solvers/tnlSolverConfig.h>
 
-template< template< typename Real, typename Device, typename Index, typename MeshType, typename ConfigTag, typename SolverStarter > class ProblemSetter,
-          template< typename ConfigTag > class ProblemConfig,
-          typename ConfigTag >
+template< template< typename Real, typename Device, typename Index, typename MeshType, typename MeshConfig, typename SolverStarter > class ProblemSetter,
+          template< typename MeshConfig > class ProblemConfig,
+          typename MeshConfig >
 bool
-tnlSolver< ProblemSetter, ProblemConfig, ConfigTag >::
+tnlSolver< ProblemSetter, ProblemConfig, MeshConfig >::
 run( int argc, char* argv[] )
 {
    tnlParameterContainer parameters;
    tnlConfigDescription configDescription;
-   ProblemConfig< ConfigTag >::configSetup( configDescription );
-   tnlSolverConfig< ConfigTag, ProblemConfig< ConfigTag> >::configSetup( configDescription );
+   ProblemConfig< MeshConfig >::configSetup( configDescription );
+   tnlSolverConfig< MeshConfig, ProblemConfig< MeshConfig> >::configSetup( configDescription );
    if( ! parseCommandLine( argc, argv, configDescription, parameters ) )
       return false;
 
-   tnlSolverInitiator< ProblemSetter, ConfigTag > solverInitiator;
+   tnlSolverInitiator< ProblemSetter, MeshConfig > solverInitiator;
    return solverInitiator.run( parameters );
 };