Index: NEMO/trunk/src/OCE/SBC/sbccpl.F90
===================================================================
--- NEMO/trunk/src/OCE/SBC/sbccpl.F90	(revision 14718)
+++ NEMO/trunk/src/OCE/SBC/sbccpl.F90	(revision 14834)
@@ -1301,5 +1301,5 @@
          IF( llnewtau ) THEN
             zcoef = 1. / ( zrhoa * zcdrag )
-            DO_2D( 1, 1, 1, 1 )
+            DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )
                frcv(jpr_w10m)%z3(ji,jj,1) = SQRT( frcv(jpr_taum)%z3(ji,jj,1) * zcoef )
             END_2D
Index: NEMO/trunk/src/OCE/SBC/sbcmod.F90
===================================================================
--- NEMO/trunk/src/OCE/SBC/sbcmod.F90	(revision 14718)
+++ NEMO/trunk/src/OCE/SBC/sbcmod.F90	(revision 14834)
@@ -475,11 +475,13 @@
       END SELECT
 
-      IF( ln_icebergs    )   THEN
-                                     CALL icb_stp( kt, Kmm )           ! compute icebergs
-         ! Icebergs do not melt over the haloes.
-         ! So emp values over the haloes are no more consistent with the inner domain values.
-         ! A lbc_lnk is therefore needed to ensure reproducibility and restartability.
-         ! see ticket #2113 for discussion about this lbc_lnk.
-         IF( .NOT. ln_passive_mode ) CALL lbc_lnk( 'sbcmod', emp, 'T', 1.0_wp ) ! ensure restartability with icebergs
+      IF( ln_icebergs    )   CALL icb_stp( kt, Kmm )              ! compute icebergs
+
+      ! Icebergs do not melt over the haloes.
+      ! So emp values over the haloes are no more consistent with the inner domain values.
+      ! A lbc_lnk is therefore needed to ensure reproducibility and restartability.
+      ! see ticket #2113 for discussion about this lbc_lnk.
+      ! The lbc_lnk is also needed for SI3 with nn_hls > 1 as emp is not yet defined for these points in iceupdate.F90
+      IF( (ln_icebergs .AND. .NOT. ln_passive_mode) .OR. (nn_ice == 2 .AND. nn_hls == 2) ) THEN
+         CALL lbc_lnk( 'sbcmod', emp, 'T', 1.0_wp )
       ENDIF
 
Index: NEMO/trunk/src/OCE/SBC/sbcrnf.F90
===================================================================
--- NEMO/trunk/src/OCE/SBC/sbcrnf.F90	(revision 14718)
+++ NEMO/trunk/src/OCE/SBC/sbcrnf.F90	(revision 14834)
@@ -211,5 +211,5 @@
       IF( ln_rnf_depth .OR. ln_rnf_depth_ini ) THEN      !==   runoff distributed over several levels   ==!
          IF( ln_linssh ) THEN    !* constant volume case : just apply the runoff input flow
-            DO_2D( 1, 1, 1, 1 )
+            DO_2D_OVR( nn_hls-1, nn_hls, nn_hls-1, nn_hls )
                DO jk = 1, nk_rnf(ji,jj)
                   phdivn(ji,jj,jk) = phdivn(ji,jj,jk) - ( rnf(ji,jj) + rnf_b(ji,jj) ) * zfact * r1_rho0 / h_rnf(ji,jj)
@@ -217,5 +217,5 @@
             END_2D
          ELSE                    !* variable volume case
-            DO_2D( 1, 1, 1, 1 )              ! update the depth over which runoffs are distributed
+            DO_2D_OVR( nn_hls, nn_hls, nn_hls, nn_hls )         ! update the depth over which runoffs are distributed
                h_rnf(ji,jj) = 0._wp
                DO jk = 1, nk_rnf(ji,jj)                             ! recalculates h_rnf to be the depth in metres
@@ -229,6 +229,8 @@
          ENDIF
       ELSE                       !==   runoff put only at the surface   ==!
-         h_rnf (:,:)   = e3t (:,:,1,Kmm)        ! update h_rnf to be depth of top box
-         phdivn(:,:,1) = phdivn(:,:,1) - ( rnf(:,:) + rnf_b(:,:) ) * zfact * r1_rho0 / e3t(:,:,1,Kmm)
+         DO_2D_OVR( nn_hls, nn_hls, nn_hls, nn_hls )
+            h_rnf (ji,jj)   = e3t (ji,jj,1,Kmm)        ! update h_rnf to be depth of top box
+            phdivn(ji,jj,1) = phdivn(ji,jj,1) - ( rnf(ji,jj) + rnf_b(ji,jj) ) * zfact * r1_rho0 / e3t(ji,jj,1,Kmm)
+         END_2D
       ENDIF
       !
@@ -363,5 +365,5 @@
          !
          nk_rnf(:,:) = 0                               ! set the number of level over which river runoffs are applied
-         DO_2D( 1, 1, 1, 1 )
+         DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )
             IF( h_rnf(ji,jj) > 0._wp ) THEN
                jk = 2
@@ -376,5 +378,5 @@
             ENDIF
          END_2D
-         DO_2D( 1, 1, 1, 1 )                           ! set the associated depth
+         DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )                           ! set the associated depth
             h_rnf(ji,jj) = 0._wp
             DO jk = 1, nk_rnf(ji,jj)
@@ -406,5 +408,5 @@
          WHERE( zrnfcl(:,:,1) > 0._wp )  h_rnf(:,:) = zacoef * zrnfcl(:,:,1)   ! compute depth for all runoffs
          !
-         DO_2D( 1, 1, 1, 1 )                ! take in account min depth of ocean rn_hmin
+         DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )                ! take in account min depth of ocean rn_hmin
             IF( zrnfcl(ji,jj,1) > 0._wp ) THEN
                jk = mbkt(ji,jj)
@@ -414,5 +416,5 @@
          !
          nk_rnf(:,:) = 0                       ! number of levels on which runoffs are distributed
-         DO_2D( 1, 1, 1, 1 )
+         DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )
             IF( zrnfcl(ji,jj,1) > 0._wp ) THEN
                jk = 2
@@ -425,5 +427,5 @@
          END_2D
          !
-         DO_2D( 1, 1, 1, 1 )                          ! set the associated depth
+         DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )                          ! set the associated depth
             h_rnf(ji,jj) = 0._wp
             DO jk = 1, nk_rnf(ji,jj)
Index: NEMO/trunk/src/OCE/SBC/sbcssr.F90
===================================================================
--- NEMO/trunk/src/OCE/SBC/sbcssr.F90	(revision 14718)
+++ NEMO/trunk/src/OCE/SBC/sbcssr.F90	(revision 14834)
@@ -98,5 +98,5 @@
             !
             IF( nn_sstr == 1 ) THEN                                   !* Temperature restoring term
-               DO_2D( 1, 1, 1, 1 )
+               DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )
                   zqrp = rn_dqdt * ( sst_m(ji,jj) - sf_sst(1)%fnow(ji,jj,1) ) * tmask(ji,jj,1)
                   qns(ji,jj) = qns(ji,jj) + zqrp
@@ -108,5 +108,5 @@
               ! use fraction of ice ( fr_i ) to adjust relaxation under ice if nn_sssr_ice .ne. 1
               ! n.b. coefice is initialised and fixed to 1._wp if nn_sssr_ice = 1
-               DO_2D( 1, 1, 1, 1 )
+               DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )
                   SELECT CASE ( nn_sssr_ice )
                     CASE ( 0 )    ;  coefice(ji,jj) = 1._wp - fr_i(ji,jj)              ! no/reduced damping under ice
@@ -118,5 +118,5 @@
             IF( nn_sssr == 1 ) THEN                                   !* Salinity damping term (salt flux only (sfx))
                zsrp = rn_deds / rday                                  ! from [mm/day] to [kg/m2/s]
-               DO_2D( 1, 1, 1, 1 )
+               DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )
                   zerp = zsrp * ( 1. - 2.*rnfmsk(ji,jj) )   &      ! No damping in vicinity of river mouths
                      &        *   coefice(ji,jj)            &      ! Optional control of damping under sea-ice
@@ -129,5 +129,5 @@
                zsrp = rn_deds / rday                                  ! from [mm/day] to [kg/m2/s]
                zerp_bnd = rn_sssr_bnd / rday                          !       -              -    
-               DO_2D( 1, 1, 1, 1 )
+               DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )
                   zerp = zsrp * ( 1. - 2.*rnfmsk(ji,jj) )   &      ! No damping in vicinity of river mouths
                      &        *   coefice(ji,jj)            &      ! Optional control of damping under sea-ice
