diff --git a/src/SURFEX/mode_read_grib.F90 b/src/SURFEX/mode_read_grib.F90
index 2eb32506329b395fc5f067472fdda84b334668f5..501ae26da178a98e7ee04f3330aaaaad92f24211 100644
--- a/src/SURFEX/mode_read_grib.F90
+++ b/src/SURFEX/mode_read_grib.F90
@@ -406,8 +406,6 @@ SELECT CASE (HINMODEL)
     CALL READ_GRIB(HGRIB,KLUOUT,172,IRET,PMASK) 
   CASE ('NCEP  ')
     CALL READ_GRIB(HGRIB,KLUOUT,172,IRET,PMASK) 
-
-
   CASE ('ARPEGE','ALADIN','MOCAGE')
     CALL READ_GRIB(HGRIB,KLUOUT,81,IRET,PMASK)          
   CASE ('HIRLAM')        
@@ -651,6 +649,9 @@ END SUBROUTINE READ_GRIB_SST
       SUBROUTINE READ_GRIB_TSWATER(HGRIB,KLUOUT,HINMODEL,PMASK,PTS)
 !     ###########################
 !
+!    MODIFICATIONS
+!    Julien Pergaud(via J.Escobar) 10/2018 : correction for GFS undef=9999. temperature values
+!
 USE MODD_SURF_PAR,   ONLY : XUNDEF
 !
 IMPLICIT NONE
@@ -676,7 +677,7 @@ SELECT CASE (HINMODEL)
      CALL ABOR1_SFX('MODE_READ_GRIB:READ_GRIB_TSWATER:OPTION NOT SUPPORTED '//HINMODEL)    
 END SELECT
 !
-IF (SIZE(PMASK)==SIZE(PTS)) WHERE (PMASK(:)/=1.) PTS = XUNDEF
+IF (SIZE(PMASK)==SIZE(PTS)) WHERE ((PMASK(:)/=1.) .OR. ((PMASK(:)==1.) .AND.(PTS(:)==9999.))) PTS = XUNDEF
 !
 IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:READ_GRIB_TSWATER',1,ZHOOK_HANDLE)
 END SUBROUTINE READ_GRIB_TSWATER
@@ -741,6 +742,9 @@ END SUBROUTINE READ_GRIB_T2
       SUBROUTINE READ_GRIB_T2_LAND(HGRIB,KLUOUT,HINMODEL,PMASK,ZFIELD)
 !     ###########################
 !
+!    MODIFICATIONS
+!    Julien Pergaud(via J.Escobar) 10/2018 : correction for GFS undef=9999. temperature values
+!
 USE MODD_SURF_PAR,   ONLY : XUNDEF
 !
 IMPLICIT NONE
@@ -758,7 +762,7 @@ IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:READ_GRIB_T2_LAND',0,ZHOOK_HANDLE)
 !
  CALL READ_GRIB_T2(HGRIB,KLUOUT,HINMODEL,PMASK,ZFIELD)
 !
-IF (SIZE(PMASK)==SIZE(ZFIELD)) WHERE (PMASK(:)/=1.) ZFIELD = XUNDEF
+IF (SIZE(PMASK)==SIZE(ZFIELD)) WHERE ((PMASK(:)/=1.) .OR. ((PMASK(:)==1.) .AND.(ZFIELD(:)==9999.))) ZFIELD = XUNDEF
 !
 IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:READ_GRIB_T2_LAND',1,ZHOOK_HANDLE)
 END SUBROUTINE READ_GRIB_T2_LAND
@@ -802,6 +806,9 @@ END SUBROUTINE PUT_LAYER_DEPTH
       SUBROUTINE FILL_PFIELD(KLUOUT,HROUT,KNLAYERDEEP,PDIN,PFIELDIN,PMASK,PFIELDOUT,PDOUT)
 !     #######################
 !
+!    MODIFICATIONS
+!    Julien Pergaud(via J.Escobar) 10/2018 : correction for GFS undef=9999. temperature values
+!
 USE MODD_SURF_PAR,   ONLY : XUNDEF
 !
 IMPLICIT NONE
@@ -836,9 +843,10 @@ DO JL=1,KNLAYERDEEP
   PDOUT(:,JL)=SUM(PDIN(1:JL))
   PFIELDOUT(:,JL)=PFIELDIN(:,JL)
   IF (SIZE(PMASK)==SIZE(PFIELDOUT,1)) &
-    WHERE (PMASK(:)/=1.) PFIELDOUT(:,JL) = XUNDEF
+    WHERE ((PMASK(:)/=1.) .OR. ((PMASK(:)==1.) .AND.(PFIELDOUT(:,JL)==9999.))) PFIELDOUT(:,JL) = XUNDEF
 ENDDO
 !
+
 IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:FILL_PFIELD',1,ZHOOK_HANDLE)
 END SUBROUTINE FILL_PFIELD
 !-------------------------------------------------------------------
@@ -2305,7 +2313,7 @@ REAL, DIMENSION(:,:), POINTER       :: PD        ! thickness of each layer
 !* local variables
 !  ---------------
 INTEGER(KIND=kindOfInt)                           :: IRET      ! return code
-INTEGER                           :: ILTYPE    ! type of level (Grib code table 3)
+INTEGER                           :: ILTYPE,ITER    ! type of level (Grib code table 3)
 INTEGER                           :: ILEV1     ! level definition
 INTEGER                           :: ILEV2     ! level definition
 INTEGER                           :: JL         ! layer loop counter
@@ -2335,6 +2343,8 @@ ZLEV1= 0.0
 ZLEV2= 0.1
 CALL READ_GRIB(HGRIB,KLUOUT,228139,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)
 !
+
+
 IF (IRET== 0) THEN
   ZD(1)=(ZLEV2 - ZLEV1)
 
@@ -2356,6 +2366,7 @@ ZLEV2= 2.0
 !
 CALL READ_GRIB(HGRIB,KLUOUT,228139,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)
 
+
 IF (IRET == 0) THEN
   INLAYERDEEP = 4
   ZD(4)=(ZLEV2 - ZLEV1)
@@ -2377,6 +2388,7 @@ ZLEV2= 1.0
 
  CALL READ_GRIB(HGRIB,KLUOUT,228139,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)
 !
+
 IF (IRET == 0) THEN      
   ZD(3)=(ZLEV2 - ZLEV1)
   ZTG(:,3)=ZFIELD 
@@ -2394,6 +2406,8 @@ ZLEV1= 0.1
 ZLEV2= 0.4
  CALL READ_GRIB(HGRIB,KLUOUT,228139,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)
 !
+
+
 IF (IRET== 0) THEN 
   ZD(2)=(ZLEV2 - ZLEV1)   
   ZTG(:,2)=ZFIELD
@@ -2414,7 +2428,6 @@ IF(SUM(ZD(1:INLAYERDEEP)) < 3.) THEN
   write(KLUOUT,'(a,i3,i3)') 'editionNumber MAKE_GRIB_INDEX',INLAYERDEEP
 
   ZD(INLAYERDEEP)=3.-SUM(ZD(1:INLAYERDEEP-1))
-  write(KLUOUT,*) 'ZD',ZD
 
   ZTG(:,INLAYERDEEP)=ZTG(:,INLAYERDEEP-1)
 ENDIF
@@ -2431,7 +2444,7 @@ WRITE  (KLUOUT,'(A)') 'MODE_READ_GRIB: FILL PROFILE'
 DEALLOCATE(ZD)
 DEALLOCATE(ZTG)
 !
-!write(KLUOUT,*) 'OUT FILL ZD',PD,PTG
+
 
 IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:READ_GRIB_TG_NCEP',1,ZHOOK_HANDLE)