diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90
index c778b2e1ea6fdbf0e56414a461a0ccfc98284eb5..2582fea44960ab4ce0e50f3d90d84f08a16afc23 100644
--- a/src/MNH/modeln.f90
+++ b/src/MNH/modeln.f90
@@ -2116,20 +2116,18 @@ IF (LFLYER)                                                                   &
 !*       24.2    STATION (observation diagnostic)
 !               --------------------------------
 !
-IF ( LSTATION )                                                        &
-  CALL STATION_n(XTSTEP, XZZ,                                          &
-                 XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST )
+IF ( LSTATION ) &
+  CALL STATION_n( XZZ, XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST )
 !
 !---------------------------------------------------------
 !
 !*       24.3    PROFILER (observation diagnostic)
 !               ---------------------------------
 !
-IF ( LPROFILER )                                                         &
-  CALL PROFILER_n(XTSTEP,                                                &
-                  XZZ, XRHODREF,                                         &
-                  XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST, &
-                  XAER, XCIT, PSEA=ZSEA(:,:))
+IF ( LPROFILER )                                                          &
+  CALL PROFILER_n( XZZ, XRHODREF,                                         &
+                   XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST, &
+                   XAER, XCIT, PSEA=ZSEA(:,:) )
 !
 !
 CALL SECOND_MNH2(ZTIME2)
diff --git a/src/MNH/profilern.f90 b/src/MNH/profilern.f90
index ccd26a860f640cb5a2f7bf7be8f71e74c7cb1960..a9215eb8eacb8900524c5246cbc345521816cc43 100644
--- a/src/MNH/profilern.f90
+++ b/src/MNH/profilern.f90
@@ -9,12 +9,10 @@ MODULE MODI_PROFILER_n
 !
 INTERFACE
 !
-      SUBROUTINE PROFILER_n( PTSTEP,                         &
-                             PZ, PRHODREF,                   &
+      SUBROUTINE PROFILER_n( PZ, PRHODREF,                   &
                              PU, PV, PW, PTH, PR, PSV, PTKE, &
                              PTS, PP, PAER, PCIT, PSEA )
 !
-REAL,                     INTENT(IN)     :: PTSTEP ! time step
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PZ     ! z array
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PU     ! horizontal wind X component
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PV     ! horizontal wind Y component
@@ -39,8 +37,7 @@ END INTERFACE
 END MODULE MODI_PROFILER_n
 !
 !     ########################################################
-      SUBROUTINE PROFILER_n( PTSTEP,                         &
-                             PZ, PRHODREF,                   &
+      SUBROUTINE PROFILER_n( PZ, PRHODREF,                   &
                              PU, PV, PW, PTH, PR, PSV, PTKE, &
                              PTS, PP, PAER, PCIT, PSEA )
 !     ########################################################
@@ -120,12 +117,12 @@ USE MODD_RAIN_ICE_DESCR,   ONLY: XALPHAR_I => XALPHAR, XNUR_I => XNUR, XLBEXR_I
                                  XALPHAI_I => XALPHAI, XNUI_I => XNUI, XDI_I => XDI, XLBEXI_I => XLBEXI,                   &
                                  XLBI_I => XLBI, XAI_I => XAI, XBI_I => XBI, XC_I_I => XC_I,                               &
                                  XRTMIN_I => XRTMIN, XCONC_LAND, XCONC_SEA
-USE MODD_TIME_n,           only: tdtcur
 !
 USE MODE_FGAU,             ONLY: GAULAG
 USE MODE_FSCATTER,         ONLY: BHMIE, QEPSI, QEPSW, MG, MOMG
 USE MODE_MSG
-USE MODE_STATPROF_TOOLS,   ONLY: STATPROF_INTERP_2D, STATPROF_INTERP_3D, STATPROF_INTERP_3D_U, STATPROF_INTERP_3D_V
+USE MODE_STATPROF_TOOLS,   ONLY: STATPROF_INSTANT, STATPROF_INTERP_2D, STATPROF_INTERP_3D, &
+                                 STATPROF_INTERP_3D_U, STATPROF_INTERP_3D_V
 !
 USE MODI_GPS_ZENITH_GRID
 USE MODI_WATER_SUM
@@ -137,7 +134,6 @@ IMPLICIT NONE
 !*      0.1  declarations of arguments
 !
 !
-REAL,                     INTENT(IN)     :: PTSTEP ! time step
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PZ     ! z array
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PU     ! horizontal wind X component
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PV     ! horizontal wind Y component
@@ -249,30 +245,18 @@ IKE = IKU-JPVEXT
 !
 !----------------------------------------------------------------------------
 !
-!
 !*      3.4  instant of storage
 !            ------------------
 !
-
-IF ( TPROFILERS_TIME%XTIME_CUR == XUNDEF ) TPROFILERS_TIME%XTIME_CUR = TPROFILERS_TIME%XTSTEP - PTSTEP
-!
-TPROFILERS_TIME%XTIME_CUR = TPROFILERS_TIME%XTIME_CUR + PTSTEP
-!
-IF ( TPROFILERS_TIME%XTIME_CUR >= TPROFILERS_TIME%XTSTEP - 1.E-10 ) THEN
-  TPROFILERS_TIME%XTIME_CUR = TPROFILERS_TIME%XTIME_CUR - TPROFILERS_TIME%XTSTEP
-  TPROFILERS_TIME%N_CUR = TPROFILERS_TIME%N_CUR + 1
-  IN = TPROFILERS_TIME%N_CUR
-  tprofilers_time%tpdates(in) = tdtcur
-ELSE
-  !No profiler storage at this time step
-  RETURN
-END IF
+CALL  STATPROF_INSTANT( TPROFILERS_TIME, IN )
+IF ( IN < 1 ) RETURN !No profiler storage at this time step
 !
 !----------------------------------------------------------------------------
 !
 !*      8.   DATA RECORDING
 !            --------------
 !
+!PW: TODO: ne faire le calcul que si necessaire (presence de profileurs locaux,...)
 ZTEMP(:,:,:)=PTH(:,:,:)*(PP(:,:,:)/ XP00) **(XRD/XCPD)
 ! Theta_v
 ZTHV(:,:,:) = PTH(:,:,:) / (1.+WATER_SUM(PR(:,:,:,:)))*(1.+PR(:,:,:,1)/ZRDSRV)
diff --git a/src/MNH/stationn.f90 b/src/MNH/stationn.f90
index b10c060a55277d2ef0763e9ea5d91eb8d6ab9ccd..172521e8abb91b0ef28830380b52e3aee4aea628 100644
--- a/src/MNH/stationn.f90
+++ b/src/MNH/stationn.f90
@@ -9,11 +9,10 @@ MODULE MODI_STATION_n
 !
 INTERFACE
 !
-      SUBROUTINE STATION_n( PTSTEP, PZ,                     &
+      SUBROUTINE STATION_n( PZ,                             &
                             PU, PV, PW, PTH, PR, PSV, PTKE, &
                             PTS, PP )
 !
-REAL,                     INTENT(IN)     :: PTSTEP ! time step
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PZ     ! z array
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PU     ! horizontal wind X component
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PV     ! horizontal wind Y component
@@ -34,7 +33,7 @@ END INTERFACE
 END MODULE MODI_STATION_n
 !
 !     #######################################################
-      SUBROUTINE STATION_n( PTSTEP, PZ,                     &
+      SUBROUTINE STATION_n( PZ,                             &
                             PU, PV, PW, PTH, PR, PSV, PTKE, &
                             PTS, PP )
 !     #######################################################
@@ -87,13 +86,12 @@ USE MODD_CONF,          ONLY: LCARTESIAN
 USE MODD_CST,           ONLY: XPI
 USE MODD_DIAG_IN_RUN
 USE MODD_GRID,          ONLY: XBETA, XLON0, XRPK
-USE MODD_PARAMETERS,    ONLY: JPVEXT, XUNDEF
+USE MODD_PARAMETERS,    ONLY: JPVEXT
 USE MODD_PARAM_n,       ONLY: CRAD
 USE MODD_STATION_n
 USE MODD_ALLSTATION_n,  ONLY: LDIAG_SURFRAD
-USE MODD_TIME_n,        ONLY: tdtcur
 !
-USE MODE_STATPROF_TOOLS, ONLY: STATPROF_INTERP_2D, STATPROF_INTERP_2D_U, STATPROF_INTERP_2D_V
+USE MODE_STATPROF_TOOLS, ONLY: STATPROF_INSTANT, STATPROF_INTERP_2D, STATPROF_INTERP_2D_U, STATPROF_INTERP_2D_V
 !
 !
 IMPLICIT NONE
@@ -102,7 +100,6 @@ IMPLICIT NONE
 !*      0.1  declarations of arguments
 !
 !
-REAL,                     INTENT(IN)     :: PTSTEP ! time step
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PZ     ! z array
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PU     ! horizontal wind X component
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PV     ! horizontal wind Y component
@@ -134,19 +131,8 @@ INTEGER :: JK          ! loop for levels
 !*      3.4  instant of storage
 !            ------------------
 !
-IF ( TSTATIONS_TIME%XTIME_CUR == XUNDEF ) TSTATIONS_TIME%XTIME_CUR = TSTATIONS_TIME%XTSTEP - PTSTEP
-!
-TSTATIONS_TIME%XTIME_CUR = TSTATIONS_TIME%XTIME_CUR + PTSTEP
-!
-IF ( TSTATIONS_TIME%XTIME_CUR >= TSTATIONS_TIME%XTSTEP - 1.E-10 ) THEN
-  TSTATIONS_TIME%XTIME_CUR = TSTATIONS_TIME%XTIME_CUR - TSTATIONS_TIME%XTSTEP
-  TSTATIONS_TIME%N_CUR = TSTATIONS_TIME%N_CUR + 1
-  IN = TSTATIONS_TIME%N_CUR
-  tstations_time%tpdates(in) = tdtcur
-ELSE
-  !No station storage at this time step
-  RETURN
-END IF
+CALL  STATPROF_INSTANT( TSTATIONS_TIME, IN )
+IF ( IN < 1 ) RETURN !No profiler storage at this time step
 !
 !----------------------------------------------------------------------------
 !
diff --git a/src/MNH/statprof_tools.f90 b/src/MNH/statprof_tools.f90
index ca8ff988c741378f68ac7bacd6aca4963d0b4eb2..3c19593bb9104d982bf29be3581b9bd6d47c12e6 100644
--- a/src/MNH/statprof_tools.f90
+++ b/src/MNH/statprof_tools.f90
@@ -13,7 +13,7 @@
 MODULE MODE_STATPROF_TOOLS
 !      ###################
 
-USE MODD_TYPE_STATPROF, ONLY: TPROFILERDATA, TSTATIONDATA, TSTATPROFDATA
+USE MODD_TYPE_STATPROF, ONLY: TPROFILERDATA, TSTATIONDATA, TSTATPROFDATA, TSTATPROFTIME
 
 IMPLICIT NONE
 
@@ -25,6 +25,7 @@ PUBLIC :: STATPROF_POSITION
 PUBLIC :: PROFILER_ADD, STATION_ADD
 PUBLIC :: STATPROF_INTERP_2D, STATPROF_INTERP_2D_U, STATPROF_INTERP_2D_V
 PUBLIC :: STATPROF_INTERP_3D, STATPROF_INTERP_3D_U, STATPROF_INTERP_3D_V
+PUBLIC :: STATPROF_INSTANT
 
 CONTAINS
 
@@ -723,5 +724,40 @@ FUNCTION STATPROF_INTERP_3D_V( TPSTATPROF, PA ) RESULT( PB )
 
 END FUNCTION STATPROF_INTERP_3D_V
 
+! #################################################
+SUBROUTINE STATPROF_INSTANT( TPSTATPROF_TIME, KIN )
+! #################################################
+  USE MODD_DYN_n,      ONLY: XTSTEP
+  USE MODD_PARAMETERS, ONLY: XUNDEF
+  USE MODD_TIME_n,     ONLY: TDTCUR
+
+  USE MODE_MSG
+
+  IMPLICIT NONE
+
+  TYPE(TSTATPROFTIME), INTENT(INOUT) :: TPSTATPROF_TIME
+  INTEGER,             INTENT(OUT)   :: KIN ! Current step of storage
+
+  IF ( TPSTATPROF_TIME%XTIME_CUR == XUNDEF ) TPSTATPROF_TIME%XTIME_CUR = TPSTATPROF_TIME%XTSTEP - XTSTEP
+
+  TPSTATPROF_TIME%XTIME_CUR = TPSTATPROF_TIME%XTIME_CUR + XTSTEP
+
+  IF ( TPSTATPROF_TIME%XTIME_CUR >= TPSTATPROF_TIME%XTSTEP - 1.E-10 ) THEN
+    TPSTATPROF_TIME%XTIME_CUR = TPSTATPROF_TIME%XTIME_CUR - TPSTATPROF_TIME%XTSTEP
+    TPSTATPROF_TIME%N_CUR = TPSTATPROF_TIME%N_CUR + 1
+    KIN = TPSTATPROF_TIME%N_CUR
+
+    IF ( KIN < 1 .OR. KIN > SIZE( TPSTATPROF_TIME%TPDATES ) ) THEN
+      CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'STATPROF_INSTANT', 'problem with step of storage' )
+      KIN = -2
+    ELSE
+      TPSTATPROF_TIME%TPDATES(KIN) = TDTCUR
+    END IF
+  ELSE
+    ! Return an invalid step number
+    KIN = -1
+  END IF
+
+END SUBROUTINE STATPROF_INSTANT
 
 END MODULE MODE_STATPROF_TOOLS