Index: options/SPECIES/SPECIES_108
===================================================================
--- options/SPECIES/SPECIES_108	(revision 60403cdfd1dfc5def4c83aff4c9c55a236804c93)
+++ options/SPECIES/SPECIES_108	(revision 78e62dc004da36ae5da7b3ab5f03e1bd44af4586)
@@ -3,5 +3,5 @@
 *     Input file for the Lagrangian particle dispersion model FLEXPART     *
 *               Definition file of chemical species/radionuclides          *
-* ESO: edited to work with Rona's changes+Henrik                           *
+*     This file is on the format required by version 10 (05/2015)          *
 ****************************************************************************
 SO2                Tracer name
@@ -14,11 +14,12 @@
                    Dry deposition (gases) - Henrys const.
                    Dry deposition (gases) - f0 (reactivity)
-1.9E03            Dry deposition (particles) - rho
+1.9E+03            Dry deposition (particles) - rho
 4.0E-07            Dry deposition (particles) - dquer
 3.0E-01            Dry deposition (particles) - dsig
 -9.99              Alternative: dry deposition velocity
  64.00             molweight
--1.35E-12          OH Reaction rate - C
-1.0                OH Reaction rate - D
+1.35E-14           OH Reaction rate - C [cm^3/molecule/sec]
+120.0              OH Reaction rate - D [K]
+2.0                OH Reaction rate - N (no unit)
 -9                 number of associated specias (neg. none)
 -99.99             KOA - organic matter air partitioning
Index: src/FLEXPART.f90
===================================================================
--- src/FLEXPART.f90	(revision 8a65cb0801b09eb0ae933a1afabbe10361a9021b)
+++ src/FLEXPART.f90	(revision 78e62dc004da36ae5da7b3ab5f03e1bd44af4586)
@@ -69,5 +69,5 @@
 
   ! FLEXPART version string
-  flexversion='Version 10.0pre  (2015-03-01)'
+  flexversion='Version 10.0beta (2015-05-01)'
   verbosity=0
 
Index: src/FLEXPART_MPI.f90
===================================================================
--- src/FLEXPART_MPI.f90	(revision 2f8635b39cbfd085fa21b9d3ac811142936b3857)
+++ src/FLEXPART_MPI.f90	(revision 78e62dc004da36ae5da7b3ab5f03e1bd44af4586)
@@ -77,5 +77,5 @@
 
   ! FLEXPART version string
-  flexversion='Ver. 10.0pre MPI (2015-03-01)'
+  flexversion='Ver. 10 Beta MPI (2015-05-01)'
   verbosity=0
 
@@ -336,4 +336,7 @@
   !******************************************************************
 
+  if (mp_measure_time) call mpif_mtime('iotime',0)
+  if (lroot) then ! MPI: this part root process only
+
   if (lnetcdfout.eq.1) then 
     call writeheader_netcdf(lnest=.false.)
@@ -350,5 +353,5 @@
   endif
 
-  if (lroot) then ! MPI: this part root process only
+!
     if (verbosity.gt.0) then
       print*,'call writeheader'
@@ -364,7 +367,7 @@
   end if ! (mpif_pid == 0) 
 
+  if (mp_measure_time) call mpif_mtime('iotime',0)
+
   !open(unitdates,file=path(2)(1:length(2))//'dates')
-
-!open(unitdates,file=path(2)(1:length(2))//'dates')
 
   if (verbosity.gt.0 .and. lroot) then
Index: src/com_mod.f90
===================================================================
--- src/com_mod.f90	(revision 5f9d14aa526df192efa539f87fc409fdeeeee06c)
+++ src/com_mod.f90	(revision 78e62dc004da36ae5da7b3ab5f03e1bd44af4586)
@@ -26,4 +26,5 @@
   integer :: length(numpath+2*maxnests)
   character(len=256) :: pathfile, flexversion, arg1, arg2
+  character(len=256) :: ohfields_path
   
   ! path                    path names needed for trajectory model
@@ -32,4 +33,5 @@
   ! flexversion             version of flexpart
   ! arg                     input arguments from launch at command line
+  ! ohfields_path           path to binary files for OH fields
 
   !********************************************************
@@ -163,5 +165,5 @@
   real :: rgs(maxspec,5,numclass),rlu(maxspec,5,numclass)
   real :: rm(maxspec),dryvel(maxspec),kao(maxspec)
-  real :: ohcconst(maxspec),ohdconst(maxspec)
+  real :: ohcconst(maxspec),ohdconst(maxspec),ohnconst(maxspec)
   ! se  it is possible to associate a species with a second one to make transfer from gas to aerosol
   integer :: spec_ass(maxspec)
Index: src/getfields_mpi.f90
===================================================================
--- src/getfields_mpi.f90	(revision 5f9d14aa526df192efa539f87fc409fdeeeee06c)
+++ src/getfields_mpi.f90	(revision 78e62dc004da36ae5da7b3ab5f03e1bd44af4586)
@@ -43,8 +43,11 @@
 !
 !  eso 2014:
-!    MPI version. 3 fields instead of 2, to allow reading the newest in
-!    the background.
-!    Only one process (lmpreader=.true.) does the actual reading, while the
-!    rest call this routine only to update memind, memstat etc.
+!    MPI version. 
+!    If running with number of processes >= mpi_mod::read_grp_min,
+!    only one process (mpi_mod::lmpreader=.true.) does the actual reading, while
+!    the rest call this routine only to update memind, memstat etc.
+!
+!    If mpi_mod::lmp_sync=.true., uses 3 fields instead of 2, to allow reading 
+!    the newest in the background.
 !
 !    Return memstat, which is the sum of 
@@ -61,6 +64,6 @@
 ! indj                 indicates the number of the wind field to be read in  *
 ! indmin               remembers the number of wind fields already treated   *
-! memind(2)            pointer, on which place the wind fields are stored    *
-! memtime(2) [s]       times of the wind fields, which are kept in memory    *
+! memind(2[3])         pointer, on which place the wind fields are stored    *
+! memtime(2[3]) [s]    times of the wind fields, which are kept in memory    *
 ! itime [s]            current time since start date of trajectory calcu-    *
 !                      lation                                                *
Index: src/gethourlyOH.f90
===================================================================
--- src/gethourlyOH.f90	(revision 5f9d14aa526df192efa539f87fc409fdeeeee06c)
+++ src/gethourlyOH.f90	(revision 78e62dc004da36ae5da7b3ab5f03e1bd44af4586)
@@ -120,5 +120,5 @@
     memOHtime(1)=0.
 
-    jul2=bdate+real(1./24.,kind=dp)  ! date for next hour
+    jul2=bdate+ldirect*real(1./24.,kind=dp)  ! date for next hour
     call caldate(jul2,jjjjmmdd,hhmmss)
     m2=(jjjjmmdd-(jjjjmmdd/10000)*10000)/100
Index: src/mpi_mod.f90
===================================================================
--- src/mpi_mod.f90	(revision 5f9d14aa526df192efa539f87fc409fdeeeee06c)
+++ src/mpi_mod.f90	(revision 78e62dc004da36ae5da7b3ab5f03e1bd44af4586)
@@ -90,5 +90,5 @@
   integer :: tm1
   integer, parameter :: nvar_async=27 !29 :DBG:
-  !integer, dimension(:), allocatable :: tags
+!integer, dimension(:), allocatable :: tags
   integer, dimension(:), allocatable :: reqs
 
@@ -117,5 +117,5 @@
   logical, parameter :: mp_dbg_out = .false.
   logical, parameter :: mp_time_barrier=.true.
-  logical, parameter :: mp_measure_time=.true. 
+  logical, parameter :: mp_measure_time=.false. 
 
 ! for measuring CPU/Wall time
@@ -139,4 +139,6 @@
   real(dp) :: mp_conccalc_time_beg, mp_conccalc_time_end, mp_conccalc_time_total=0.
   real(dp) :: mp_total_wtime_beg, mp_total_wtime_end, mp_total_wtime_total=0.
+  real(dp) :: mp_vt_wtime_beg, mp_vt_wtime_end, mp_vt_wtime_total
+  real(sp) :: mp_vt_time_beg, mp_vt_time_end, mp_vt_time_total
 
 ! dat_lun           logical unit number for i/o
@@ -418,5 +420,4 @@
 
 
-
 ! redefine numpart as 'numpart per process' throughout the code
 !**************************************************************
@@ -438,8 +439,4 @@
 
     integer :: i
-
-
-!***********************************************************************
-
 
 ! Time for MPI communications
@@ -1243,5 +1240,5 @@
 
     do dest=0,mp_np-1 ! mp_np-2 will also work if last proc reserved for reading
-                      ! TODO: use mp_partgroup_np here
+! TODO: use mp_partgroup_np here
       if (dest.eq.id_read) cycle
       i=dest*nvar_async
@@ -1339,6 +1336,6 @@
              &MPI_COMM_WORLD,reqs(i),mp_ierr)
         if (mp_ierr /= 0) goto 600
-      ! else
-      !   i=i+2
+! else
+!   i=i+2
       end if
 
@@ -1389,8 +1386,8 @@
 
 ! :TODO: don't need these
-    ! d3s1=d3_size1
-    ! d3s2=d3_size2
-    ! d2s1=d2_size1 
-    ! d2s2=d2_size2
+! d3s1=d3_size1
+! d3s2=d3_size2
+! d2s1=d2_size1 
+! d2s2=d2_size2
 
 ! At the time this immediate receive is posted, memstat is the state of
@@ -1593,13 +1590,13 @@
     call MPI_Waitall(n_req,reqs,MPI_STATUSES_IGNORE,mp_ierr)
 !    endif
-    ! else
-    !   do i = 0, nvar_async*mp_np-1
-    !     if (mod(i,27).eq.0 .or. mod(i,28).eq.0) then
-    !       call MPI_Cancel(reqs(i),mp_ierr)
-    !       cycle
-    !     end if
-    !     call MPI_Wait(reqs(i),MPI_STATUS_IGNORE,mp_ierr)
-    !   end do
-    ! end if
+! else
+!   do i = 0, nvar_async*mp_np-1
+!     if (mod(i,27).eq.0 .or. mod(i,28).eq.0) then
+!       call MPI_Cancel(reqs(i),mp_ierr)
+!       cycle
+!     end if
+!     call MPI_Wait(reqs(i),MPI_STATUS_IGNORE,mp_ierr)
+!   end do
+! end if
 
     if (mp_ierr /= 0) goto 600 
@@ -1733,5 +1730,4 @@
            & mp_comm_used, mp_ierr)
     end if
-
 
     if ((WETDEP).and.(ldirect.gt.0)) then
@@ -1854,4 +1850,18 @@
       end if
 
+    case ('verttransform')
+      if (imode.eq.0) then
+        mp_vt_wtime_beg = mpi_wtime()
+        call cpu_time(mp_vt_time_beg)
+      else
+        mp_vt_wtime_end = mpi_wtime()
+        call cpu_time(mp_vt_time_end)
+
+        mp_vt_wtime_total = mp_vt_wtime_total + (mp_vt_wtime_end - &
+             & mp_vt_wtime_beg)
+        mp_vt_time_total = mp_vt_time_total + (mp_vt_time_end - &
+             & mp_vt_time_beg)
+      end if
+
     case ('readwind')
       if (imode.eq.0) then
@@ -1909,5 +1919,5 @@
 !***********************************************************************
 
-    if (mp_measure_time) then
+    IF (mp_measure_time) THEN
       do ip=0, mp_np-1
         call MPI_BARRIER(MPI_COMM_WORLD, mp_ierr)
@@ -1956,4 +1966,8 @@
           write(*,FMT='(A60,TR1,F9.2)') 'TOTAL WALL TIME FOR CONCCALC:',&
                & mp_conccalc_time_total
+          ! write(*,FMT='(A60,TR1,F9.2)') 'TOTAL WALL TIME FOR VERTTRANSFORM:',&
+          !      & mp_vt_wtime_total
+          ! write(*,FMT='(A60,TR1,F9.2)') 'TOTAL CPU TIME FOR VERTTRANSFORM:',&
+          !      & mp_vt_time_total
 ! NB: the 'flush' function is possibly a gfortran-specific extension
           call flush()
@@ -1962,15 +1976,26 @@
     end if
 
+! This call to barrier is for correctly formatting output
+    call MPI_BARRIER(MPI_COMM_WORLD, mp_ierr)
+
+    if (lroot) then
+      write(*,FMT='(72("#"))')
+      WRITE(*,*) "To turn off output of time measurements, set "
+      WRITE(*,*) "    mp_measure_time=.false."
+      WRITE(*,*) "in file mpi_mod.f90"
+      write(*,FMT='(72("#"))')
+    end if
+
 ! j=mp_pid*nvar_async
 ! In the implementation with 3 fields, the processes may have posted
 ! MPI_Irecv requests that should be cancelled here
 !! TODO:
-    ! if (.not.lmp_sync) then
-    !   r=mp_pid*nvar_async
-    !   do j=r,r+nvar_async-1
-    !     call MPI_Cancel(j,mp_ierr)
-    !     if (mp_ierr /= 0) write(*,*) '#### mpif_finalize::MPI_Cancel> ERROR ####'
-    !   end do
-    ! end if
+! if (.not.lmp_sync) then
+!   r=mp_pid*nvar_async
+!   do j=r,r+nvar_async-1
+!     call MPI_Cancel(j,mp_ierr)
+!     if (mp_ierr /= 0) write(*,*) '#### mpif_finalize::MPI_Cancel> ERROR ####'
+!   end do
+! end if
 
     call MPI_FINALIZE(mp_ierr)
@@ -1981,8 +2006,8 @@
 
 
-  end subroutine mpif_finalize
-
-
-  subroutine get_lun(my_lun)
+    end subroutine mpif_finalize
+
+
+    subroutine get_lun(my_lun)
 !***********************************************************************
 ! get_lun: 
@@ -1990,50 +2015,50 @@
 !***********************************************************************
 
-    implicit none
-
-    integer, intent(inout) :: my_lun
-    integer, save :: free_lun=100
-    logical :: exists, iopen
-
-!***********************************************************************
-
-    loop1: do
-      inquire(UNIT=free_lun, EXIST=exists, OPENED=iopen)
-      if (exists .and. .not.iopen) exit loop1
-      free_lun = free_lun+1
-    end do loop1
-    my_lun = free_lun
-
-  end subroutine get_lun
-
-
-  subroutine write_data_dbg(array_in, array_name, tstep, ident)
-!***********************************************************************
-! Write one-dimensional arrays to disk (for debugging purposes)
-!***********************************************************************
-    implicit none 
-
-    real, intent(in), dimension(:) :: array_in
-    integer, intent(in) :: tstep
-    integer :: lios
-    character(LEN=*), intent(in) :: ident, array_name
-
-    character(LEN=8) :: c_ts
-    character(LEN=40) :: fn_1, fn_2
-
-!***********************************************************************
-
-    write(c_ts, FMT='(I8.8,BZ)') tstep
-    fn_1='-'//trim(adjustl(c_ts))//'-'//trim(ident)
-    write(c_ts, FMT='(I2.2,BZ)') mp_np
-    fn_2= trim(adjustl(array_name))//trim(adjustl(fn_1))//'-np'//trim(adjustl(c_ts))//'.dat'
-
-    call get_lun(dat_lun)
-    open(UNIT=dat_lun, FILE=fn_2, IOSTAT=lios, ACTION='WRITE', &
-         FORM='UNFORMATTED', STATUS='REPLACE')
-    write(UNIT=dat_lun, IOSTAT=lios) array_in
-    close(UNIT=dat_lun)
-
-  end subroutine write_data_dbg
+      implicit none
+
+      integer, intent(inout) :: my_lun
+      integer, save :: free_lun=100
+      logical :: exists, iopen
+
+!***********************************************************************
+
+      loop1: do
+        inquire(UNIT=free_lun, EXIST=exists, OPENED=iopen)
+        if (exists .and. .not.iopen) exit loop1
+        free_lun = free_lun+1
+      end do loop1
+      my_lun = free_lun
+
+    end subroutine get_lun
+
+
+    subroutine write_data_dbg(array_in, array_name, tstep, ident)
+!***********************************************************************
+! Write one-dimensional arrays to file (for debugging purposes)
+!***********************************************************************
+      implicit none 
+
+      real, intent(in), dimension(:) :: array_in
+      integer, intent(in) :: tstep
+      integer :: lios
+      character(LEN=*), intent(in) :: ident, array_name
+
+      character(LEN=8) :: c_ts
+      character(LEN=40) :: fn_1, fn_2
+
+!***********************************************************************
+
+      write(c_ts, FMT='(I8.8,BZ)') tstep
+      fn_1='-'//trim(adjustl(c_ts))//'-'//trim(ident)
+      write(c_ts, FMT='(I2.2,BZ)') mp_np
+      fn_2= trim(adjustl(array_name))//trim(adjustl(fn_1))//'-np'//trim(adjustl(c_ts))//'.dat'
+
+      call get_lun(dat_lun)
+      open(UNIT=dat_lun, FILE=fn_2, IOSTAT=lios, ACTION='WRITE', &
+           FORM='UNFORMATTED', STATUS='REPLACE')
+      write(UNIT=dat_lun, IOSTAT=lios) array_in
+      close(UNIT=dat_lun)
+
+    end subroutine write_data_dbg
 
 
Index: src/ohreaction.f90
===================================================================
--- src/ohreaction.f90	(revision 8a65cb0801b09eb0ae933a1afabbe10361a9021b)
+++ src/ohreaction.f90	(revision 78e62dc004da36ae5da7b3ab5f03e1bd44af4586)
@@ -153,5 +153,5 @@
       do k=1,nspec                                
         if (ohcconst(k).gt.0.) then
-          ohrate=ohcconst(k)*temp**2*exp(-ohdconst(k)/temp)*oh_average
+          ohrate=ohcconst(k)*temp**ohnconst(k)*exp(-ohdconst(k)/temp)*oh_average
           ! new particle mass
           restmass = xmass1(jpart,k)*exp(-1*ohrate*abs(ltsample))
Index: src/readOHfield.f90
===================================================================
--- src/readOHfield.f90	(revision 8a65cb0801b09eb0ae933a1afabbe10361a9021b)
+++ src/readOHfield.f90	(revision 78e62dc004da36ae5da7b3ab5f03e1bd44af4586)
@@ -46,5 +46,4 @@
   use com_mod
 
-
   implicit none
 
@@ -69,5 +68,6 @@
     ! open netcdf file
     write(mm,fmt='(i2.2)') m
-    thefile=trim(path(1))//'OH_FIELDS/'//'geos-chem.OH.2005'//mm//'01.nc'
+!    thefile=trim(path(1))//'OH_FIELDS/'//'geos-chem.OH.2005'//mm//'01.nc'
+    thefile=trim(ohfields_path)//'OH_FIELDS/'//'geos-chem.OH.2005'//mm//'01.nc'
     ierr=nf_open(trim(thefile),NF_NOWRITE,nid)
     if(ierr.ne.0) then
@@ -163,5 +163,6 @@
 
   ! open netcdf file
-  thefile=trim(path(1))//'OH_FIELDS/jrate_average.nc'
+!  thefile=trim(path(1))//'OH_FIELDS/jrate_average.nc'
+  thefile=trim(ohfields_path)//'OH_FIELDS/jrate_average.nc'
   ierr=nf_open(trim(thefile),NF_NOWRITE,nid)
   if(ierr.ne.0) then
Index: src/readcommand.f90
===================================================================
--- src/readcommand.f90	(revision 8a65cb0801b09eb0ae933a1afabbe10361a9021b)
+++ src/readcommand.f90	(revision 78e62dc004da36ae5da7b3ab5f03e1bd44af4586)
@@ -111,5 +111,6 @@
   lnetcdfout, &
   surf_only, &
-  cblflag
+  cblflag, &
+  ohfields_path
 
   ! Presetting namelist command
@@ -143,4 +144,5 @@
   surf_only=0 
   cblflag=0
+  ohfields_path="../../flexin/"
 
   ! Open the command file and read user options
@@ -232,4 +234,5 @@
     if (old) call skplin(3,unitcommand)  !added by mc
     read(unitcommand,*) cblflag          !added by mc
+
     close(unitcommand)
 
Index: src/readreleases.f90
===================================================================
--- src/readreleases.f90	(revision 5f9d14aa526df192efa539f87fc409fdeeeee06c)
+++ src/readreleases.f90	(revision 78e62dc004da36ae5da7b3ab5f03e1bd44af4586)
@@ -385,5 +385,5 @@
     if (ohcconst(i).gt.0.) then
       OHREA=.true.
-      write (*,*) 'OHreaction switched on: ',ohcconst(i),i
+      if (lroot) write (*,*) 'OHreaction switched on: ',ohcconst(i),i
     endif
 
Index: src/readspecies.f90
===================================================================
--- src/readspecies.f90	(revision 5f9d14aa526df192efa539f87fc409fdeeeee06c)
+++ src/readspecies.f90	(revision 78e62dc004da36ae5da7b3ab5f03e1bd44af4586)
@@ -47,4 +47,5 @@
   ! ohcconst             OH reaction rate constant C                           *
   ! ohdconst             OH reaction rate constant D                           *
+  ! ohnconst             OH reaction rate constant n                           *
   ! id_spec              SPECIES number as referenced in RELEASE file          *
   ! id_pos               position where SPECIES data shall be stored           *
@@ -66,5 +67,5 @@
   character(len=16) :: pspecies
   real :: pdecay, pweta, pwetb, preldiff, phenry, pf0, pdensity, pdquer
-  real :: pdsigma, pdryvel, pweightmolar, pohcconst, pohdconst, pspec_ass, pkao
+  real :: pdsigma, pdryvel, pweightmolar, pohcconst, pohdconst, pohnconst, pspec_ass, pkao
   real :: pweta_in, pwetb_in, pwetc_in, pwetd_in
   integer :: readerror
@@ -75,5 +76,5 @@
        pweta_in, pwetb_in, pwetc_in, pwetd_in, &
        preldiff, phenry, pf0, pdensity, pdquer, &
-       pdsigma, pdryvel, pweightmolar, pohcconst, pohdconst, pspec_ass, pkao
+       pdsigma, pdryvel, pweightmolar, pohcconst, pohdconst, pohnconst, pspec_ass, pkao
 
   pspecies=" "
@@ -94,4 +95,5 @@
   pohcconst=-9.99
   pohdconst=-9.9E-09
+  pohnconst=2.0
   pspec_ass=-9
   pkao=-99.99
@@ -160,4 +162,6 @@
     read(unitspecies,'(f8.2)',end=22) ohdconst(pos_spec)
 !  write(*,*) ohdconst(pos_spec)
+    read(unitspecies,'(f8.2)',end=22) ohnconst(pos_spec)
+!  write(*,*) ohnconst(pos_spec)
     read(unitspecies,'(i18)',end=22) spec_ass(pos_spec)
 !  write(*,*) spec_ass(pos_spec)
@@ -183,4 +187,5 @@
     pohcconst=ohcconst(pos_spec)
     pohdconst=ohdconst(pos_spec)
+    pohnconst=ohnconst(pos_spec)
     pspec_ass=spec_ass(pos_spec)
     pkao=kao(pos_spec)
@@ -206,4 +211,5 @@
     ohcconst(pos_spec)=pohcconst
     ohdconst(pos_spec)=pohdconst
+    ohnconst(pos_spec)=pohnconst
     spec_ass(pos_spec)=pspec_ass
     kao(pos_spec)=pkao
Index: src/timemanager.f90
===================================================================
--- src/timemanager.f90	(revision 8a65cb0801b09eb0ae933a1afabbe10361a9021b)
+++ src/timemanager.f90	(revision 78e62dc004da36ae5da7b3ab5f03e1bd44af4586)
@@ -657,5 +657,5 @@
   if (linit_cond.ge.1) call initial_cond_output(itime)   ! dump initial cond. field
 
-  close(104)
+  !close(104)
 
   ! De-allocate memory and end
Index: src/timemanager_mpi.f90
===================================================================
--- src/timemanager_mpi.f90	(revision 5f9d14aa526df192efa539f87fc409fdeeeee06c)
+++ src/timemanager_mpi.f90	(revision 78e62dc004da36ae5da7b3ab5f03e1bd44af4586)
@@ -208,4 +208,6 @@
     endif
 
+! This time measure includes reading/MPI communication (for the reader process),
+! or MPI communication time only (for other processes)
     if (mp_measure_time) call mpif_mtime('getfields',0)
 
@@ -213,8 +215,12 @@
 
     if (mp_measure_time) call mpif_mtime('getfields',1)
+
+
 
 ! Broadcast fields to all MPI processes 
 ! Skip if all processes have called getfields or if no new fields
 !*****************************************************************
+
+    if (mp_measure_time.and..not.(lmpreader.and.lmp_use_reader)) call mpif_mtime('getfields',0)
 
 ! Version 1 (lmp_sync=.true.) uses a read-ahead process where send/recv is done
@@ -258,4 +264,7 @@
 
     end if
+
+    if (mp_measure_time.and..not.(lmpreader.and.lmp_use_reader)) call mpif_mtime('getfields',1)
+
 
 !*******************************************************************************
@@ -446,4 +455,5 @@
           call mpif_tm_reduce_grid
 
+          if (mp_measure_time) call mpif_mtime('iotime',0)
           if (surf_only.ne.1) then
             if (lroot) then
@@ -470,4 +480,5 @@
             endif
           endif
+          if (mp_measure_time) call mpif_mtime('iotime',1)
 
 ! :TODO: Correct calling of conc_surf above?
@@ -481,4 +492,6 @@
 !*********************************************
             call mpif_tm_reduce_grid_nest
+ 
+           if (mp_measure_time) call mpif_mtime('iotime',0)
 
             if (lnetcdfout.eq.0) then
@@ -515,4 +528,5 @@
             end if
           end if
+          
 
           outnum=0.
@@ -520,4 +534,6 @@
         if ((iout.eq.4).or.(iout.eq.5)) call plumetraj(itime)
         if (iflux.eq.1) call fluxoutput(itime)
+        if (mp_measure_time) call mpif_mtime('iotime',1)
+
         if (lroot) write(*,45) itime,numpart*mp_partgroup_np,gridtotalunc,&
              &wetgridtotalunc,drygridtotalunc
