diff --git a/src/mesh.F90 b/src/mesh.F90
index 00562f2..61a04af 100644
--- a/src/mesh.F90
+++ b/src/mesh.F90
@@ -40,7 +40,7 @@ module mesh
 #ifdef PROFILE
 ! timer indices
 !
-  integer            , save :: imi, img, imu, ima, imp, imr, ims
+  integer            , save :: imi, ims, img, imu, ima, imp, imr
 #endif /* PROFILE */
 
 ! file handler for the mesh statistics
@@ -117,12 +117,12 @@ module mesh
 ! set timer descriptions
 !
     call set_timer('mesh initialization'    , imi)
+    call set_timer('mesh statistics'        , ims)
     call set_timer('initial mesh generation', img)
     call set_timer('adaptive mesh update'   , imu)
     call set_timer('block autobalancing'    , ima)
     call set_timer('block restriction'      , imr)
     call set_timer('block prolongation'     , imp)
-    call set_timer('mesh statistics'        , ims)
 
 ! start accounting time for module initialization/finalization
 !
@@ -240,6 +240,197 @@ module mesh
 !
 !===============================================================================
 !
+! subroutine STORE_MESH_STATS:
+! ---------------------------
+!
+!   Subroutine prepares and stores various mesh statistics.
+!
+!   Arguments:
+!
+!     step - the integration step;
+!     time - the physical time;
+!
+!===============================================================================
+!
+  subroutine store_mesh_stats(step, time)
+
+! import external procedures and variables
+!
+    use blocks       , only : ndims, block_meta, list_meta
+    use blocks       , only : get_mblocks, get_nleafs
+    use coordinates  , only : ng, im, jm, km, toplev, effres
+    use mpitools     , only : master, nprocs
+
+! local variables are not implicit by default
+!
+    implicit none
+
+! subroutine arguments
+!
+    integer     , intent(in) :: step
+    real(kind=8), intent(in) :: time
+
+! local variables
+!
+    integer(kind=4) :: l
+    real(kind=8)    :: cv, ef
+
+! local pointers
+!
+    type(block_meta), pointer :: pmeta
+
+! local saved variables
+!
+    logical        , save :: first = .true.
+    integer(kind=4), save :: nm = 0, nl = 0, nt = 0, nc = 0
+
+! local arrays
+!
+    integer(kind=4), dimension(toplev) :: ldist
+#ifdef MPI
+    integer(kind=4), dimension(nprocs) :: cdist
+#endif /* MPI */
+
+!-------------------------------------------------------------------------------
+!
+#ifdef PROFILE
+! start accounting time for the mesh statistics
+!
+    call start_timer(ims)
+#endif /* PROFILE */
+
+! store the mesh statistics only on master
+!
+    if (master) then
+
+! store the mesh statistics only if they changed
+!
+      if (nm /= get_mblocks() .or. nl /= get_nleafs()) then
+
+! get the mximum block number and maximum level
+!
+        if (first) then
+
+! set the pointer to the first block on the meta block list
+!
+          pmeta => list_meta
+
+! determine the number of base blocks
+!
+          do while(associated(pmeta))
+
+! if the block is at the lowest level, count it
+!
+            if (pmeta%level == 1) nt = nt + 1
+
+! associate the pointer with the next block
+!
+            pmeta => pmeta%next
+
+          end do ! pmeta
+
+! calculate the maximum block number
+!
+          nt = nt * 2**(ndims*(toplev - 1))
+
+! calculate the number of cell in one block (including the ghost cells)
+!
+          nc = im * jm * km
+
+! reset the first execution flag
+!
+          first = .false.
+
+        end if ! first
+
+! get the new numbers of meta blocks and leafs
+!
+        nm = get_mblocks()
+        nl = get_nleafs()
+
+! calculate the coverage (the number of leafs divided by the maximum
+! block number) and the efficiency (the cells count for adaptive mesh
+! divided by the cell count for corresponding uniform mesh)
+!
+        cv = (1.0d+00 * nl) / nt
+        ef = (1.0d+00 * nl) * nc / product(effres(1:ndims) + 2 * ng)
+
+! initialize the level and process block counter
+!
+        ldist(:) = 0
+#ifdef MPI
+        cdist(:) = 0
+#endif /* MPI */
+
+! set the pointer to the first block on the meta block list
+!
+        pmeta => list_meta
+
+! scan all meta blocks and prepare get the block level and process
+! distributions
+!
+        do while(associated(pmeta))
+
+! process only leafs
+!
+          if (pmeta%leaf) then
+
+! increase the block level and process counts
+!
+            ldist(pmeta%level) = ldist(pmeta%level) + 1
+#ifdef MPI
+            cdist(pmeta%cpu+1) = cdist(pmeta%cpu+1) + 1
+#endif /* MPI */
+
+          end if ! the leaf
+
+! associate the pointer with the next block
+!
+          pmeta => pmeta%next
+
+        end do ! pmeta
+
+! write down the block statistics
+!
+        write(funit, "(i9,3e14.6,2(2x,i9))", advance="no")                     &
+                                                    step, time, cv, ef, nm, nl
+
+! write down the block level distribution
+!
+        write(funit,"(12x)", advance="no")
+        do l = 1, toplev
+          write(funit,"(1x,i9)", advance="no") ldist(l)
+        end do ! l = 1, toplev
+
+#ifdef MPI
+! write down the process level distribution
+!
+        write(funit,"(10x)", advance="no")
+        do l = 1, nprocs
+          write(funit,"(1x,i9)", advance="no") cdist(l)
+        end do ! l = 1, nprocs
+#endif /* MPI */
+
+! write the new line symbol
+!
+        write(funit,"('')")
+
+      end if ! number of blocks or leafs changed
+
+    end if ! master
+
+#ifdef PROFILE
+! stop accounting time for the mesh statistics
+!
+    call stop_timer(ims)
+#endif /* PROFILE */
+
+!-------------------------------------------------------------------------------
+!
+  end subroutine store_mesh_stats
+!
+!===============================================================================
+!
 ! subroutine GENERATE_MESH:
 ! ------------------------
 !
@@ -1567,197 +1758,6 @@ module mesh
 !-------------------------------------------------------------------------------
 !
   end subroutine restrict_block
-!
-!===============================================================================
-!
-! subroutine STORE_MESH_STATS:
-! ---------------------------
-!
-!   Subroutine prepares and stores various mesh statistics.
-!
-!   Arguments:
-!
-!     step - the integration step;
-!     time - the physical time;
-!
-!===============================================================================
-!
-  subroutine store_mesh_stats(step, time)
-
-! import external procedures and variables
-!
-    use blocks       , only : ndims, block_meta, list_meta
-    use blocks       , only : get_mblocks, get_nleafs
-    use coordinates  , only : ng, im, jm, km, toplev, effres
-    use mpitools     , only : master, nprocs
-
-! local variables are not implicit by default
-!
-    implicit none
-
-! subroutine arguments
-!
-    integer     , intent(in) :: step
-    real(kind=8), intent(in) :: time
-
-! local variables
-!
-    integer(kind=4) :: l
-    real(kind=8)    :: cv, ef
-
-! local pointers
-!
-    type(block_meta), pointer :: pmeta
-
-! local saved variables
-!
-    logical        , save :: first = .true.
-    integer(kind=4), save :: nm = 0, nl = 0, nt = 0, nc = 0
-
-! local arrays
-!
-    integer(kind=4), dimension(toplev) :: ldist
-#ifdef MPI
-    integer(kind=4), dimension(nprocs) :: cdist
-#endif /* MPI */
-
-!-------------------------------------------------------------------------------
-!
-#ifdef PROFILE
-! start accounting time for the mesh statistics
-!
-    call start_timer(ims)
-#endif /* PROFILE */
-
-! store the mesh statistics only on master
-!
-    if (master) then
-
-! store the mesh statistics only if they changed
-!
-      if (nm /= get_mblocks() .or. nl /= get_nleafs()) then
-
-! get the mximum block number and maximum level
-!
-        if (first) then
-
-! set the pointer to the first block on the meta block list
-!
-          pmeta => list_meta
-
-! determine the number of base blocks
-!
-          do while(associated(pmeta))
-
-! if the block is at the lowest level, count it
-!
-            if (pmeta%level == 1) nt = nt + 1
-
-! associate the pointer with the next block
-!
-            pmeta => pmeta%next
-
-          end do ! pmeta
-
-! calculate the maximum block number
-!
-          nt = nt * 2**(ndims*(toplev - 1))
-
-! calculate the number of cell in one block (including the ghost cells)
-!
-          nc = im * jm * km
-
-! reset the first execution flag
-!
-          first = .false.
-
-        end if ! first
-
-! get the new numbers of meta blocks and leafs
-!
-        nm = get_mblocks()
-        nl = get_nleafs()
-
-! calculate the coverage (the number of leafs divided by the maximum
-! block number) and the efficiency (the cells count for adaptive mesh
-! divided by the cell count for corresponding uniform mesh)
-!
-        cv = (1.0d+00 * nl) / nt
-        ef = (1.0d+00 * nl) * nc / product(effres(1:ndims) + 2 * ng)
-
-! initialize the level and process block counter
-!
-        ldist(:) = 0
-#ifdef MPI
-        cdist(:) = 0
-#endif /* MPI */
-
-! set the pointer to the first block on the meta block list
-!
-        pmeta => list_meta
-
-! scan all meta blocks and prepare get the block level and process
-! distributions
-!
-        do while(associated(pmeta))
-
-! process only leafs
-!
-          if (pmeta%leaf) then
-
-! increase the block level and process counts
-!
-            ldist(pmeta%level) = ldist(pmeta%level) + 1
-#ifdef MPI
-            cdist(pmeta%cpu+1) = cdist(pmeta%cpu+1) + 1
-#endif /* MPI */
-
-          end if ! the leaf
-
-! associate the pointer with the next block
-!
-          pmeta => pmeta%next
-
-        end do ! pmeta
-
-! write down the block statistics
-!
-        write(funit, "(i9,3e14.6,2(2x,i9))", advance="no")                     &
-                                                    step, time, cv, ef, nm, nl
-
-! write down the block level distribution
-!
-        write(funit,"(12x)", advance="no")
-        do l = 1, toplev
-          write(funit,"(1x,i9)", advance="no") ldist(l)
-        end do ! l = 1, toplev
-
-#ifdef MPI
-! write down the process level distribution
-!
-        write(funit,"(10x)", advance="no")
-        do l = 1, nprocs
-          write(funit,"(1x,i9)", advance="no") cdist(l)
-        end do ! l = 1, nprocs
-#endif /* MPI */
-
-! write the new line symbol
-!
-        write(funit,"('')")
-
-      end if ! number of blocks or leafs changed
-
-    end if ! master
-
-#ifdef PROFILE
-! stop accounting time for the mesh statistics
-!
-    call stop_timer(ims)
-#endif /* PROFILE */
-
-!-------------------------------------------------------------------------------
-!
-  end subroutine store_mesh_stats
 #ifdef DEBUG
 !
 !===============================================================================