diff --git a/src/ZSOLVER/mass_leak.f90 b/src/ZSOLVER/mass_leak.f90
index 9ffe52c67bd2b3bceed6459854309e30d6eb4468..6a6b7206dc5a60d53ac683957f3e8c672ef06732 100644
--- a/src/ZSOLVER/mass_leak.f90
+++ b/src/ZSOLVER/mass_leak.f90
@@ -132,7 +132,7 @@ REAL, DIMENSION(:,:,:),        INTENT(INOUT) :: PRVS ! momentum  tendencies
 !
 !JUAN16
 REAL                               :: ZLEAK     ! total leak of mass
-REAL, ALLOCATABLE, DIMENSION (:,:) :: ZLEAK_W_2D , ZLEAK_E_2D , ZLEAK_S_2D , ZLEAK_N_2D
+REAL, SAVE , ALLOCATABLE, DIMENSION (:,:) :: ZLEAK_W_2D , ZLEAK_E_2D , ZLEAK_S_2D , ZLEAK_N_2D
 !JUAN16
 
 REAL                :: ZUSTOP     ! wind correction!
@@ -151,6 +151,7 @@ INTEGER             :: IINFO_ll   ! return code of parallel routine
 LOGICAL :: GWEST,GEAST,GSOUTH,GNORTH
 REAL    :: ZLEAK_W,ZLEAK_E,ZLEAK_S,ZLEAK_N
 !
+LOGICAL , SAVE :: GFIRST_CALL_MASS_LEAK = .TRUE.
 !-------------------------------------------------------------------------------
 !
 !*       1.    COMPUTE DIMENSIONS OF ARRAYS AND OTHER INDICES:
@@ -177,9 +178,19 @@ ZLEAK_W=0.
 ZLEAK_S=0.
 ZLEAK_N=0.
 !
-IF( HLBCY(1) /= 'CYCL' ) THEN
-   ALLOCATE( ZLEAK_W_2D(IIB:IIB,IJB:IJE))
-   ALLOCATE( ZLEAK_E_2D(IIE+1:IIE+1,IJB:IJE))   
+IF (GFIRST_CALL_MASS_LEAK) THEN
+   GFIRST_CALL_MASS_LEAK = .FALSE.
+   IF( HLBCX(1) /= 'CYCL' ) THEN
+      ALLOCATE( ZLEAK_W_2D(IIB:IIB,IJB:IJE))
+      ALLOCATE( ZLEAK_E_2D(IIE+1:IIE+1,IJB:IJE))
+   END IF
+   IF( HLBCY(1) /= 'CYCL' ) THEN
+      ALLOCATE( ZLEAK_S_2D(IIB:IIE,IJB:IJB))
+      ALLOCATE( ZLEAK_N_2D(IIB:IIE,IJE+1:IJE+1))
+   END IF
+END IF
+!
+IF( HLBCX(1) /= 'CYCL' ) THEN
    !$acc kernels async
    ZLEAK_W_2D = 0.0   
    IF( GWEST ) THEN
@@ -209,8 +220,6 @@ IF( HLBCY(1) /= 'CYCL' ) THEN
 END IF
 !
 IF( HLBCY(1) /= 'CYCL' ) THEN
-   ALLOCATE( ZLEAK_S_2D(IIB:IIE,IJB:IJB))
-   ALLOCATE( ZLEAK_N_2D(IIB:IIE,IJE+1:IJE+1))
    !
    !$acc kernels async
    ZLEAK_S_2D = 0.0 
@@ -242,10 +251,6 @@ IF( HLBCY(1) /= 'CYCL' ) THEN
 END IF
 !
 ZLEAK = ZLEAK_E + ZLEAK_W + ZLEAK_S + ZLEAK_N
-!!$ZLEAK = ZLEAK_E
-!!$ZLEAK = ZLEAK + ZLEAK_W
-!!$ZLEAK = ZLEAK + ZLEAK_S
-!!$ZLEAK = ZLEAK + ZLEAK_N
 !
 !CALL REDUCESUM_ll(ZLEAK,IINFO_ll)	! we do the reducesum_ll in SUM_DD_R2_ll so we do not do it here
 !