Index: branches/2012/dev_3352_UKMO8_CICE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_cice.F90
===================================================================
--- branches/2012/dev_3352_UKMO8_CICE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_cice.F90	(revision 3355)
+++ branches/2012/dev_3352_UKMO8_CICE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_cice.F90	(revision 3356)
@@ -16,4 +16,5 @@
    USE domvvl
    USE phycst, only : rcp, rau0
+   USE eosbn2, only : tfreez
    USE in_out_manager  ! I/O manager
    USE lib_mpp         ! distributed memory computing library
@@ -43,5 +44,5 @@
                 flatn_f,fsurfn_f,fcondtopn_f,                    &
                 uatm,vatm,wind,fsw,flw,Tair,potT,Qa,rhoa,zlvl,   &
-                swvdr,swvdf,swidr,swidf
+                swvdr,swvdf,swidr,swidf,Tf
    USE ice_forcing, only: frcvdr,frcvdf,frcidr,frcidf
    USE ice_atmo, only: calc_strair
@@ -146,8 +147,10 @@
       !!---------------------------------------------------------------------
 
-      INTEGER  ::   ji, jj, jl                        ! dummy loop indices
+      INTEGER  ::   ji, jj, jk, jl             ! dummy loop indices
+      REAL(wp), DIMENSION(:,:,:), POINTER :: ztmp
 
       IF( nn_timing == 1 )  CALL timing_start('cice_sbc_init')
       !
+      CALL wrk_alloc( jpi,jpj,jpk, ztmp )
       IF(lwp) WRITE(numout,*)'cice_sbc_init'
 
@@ -171,7 +174,20 @@
       IF( sbc_ice_cice_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'sbc_ice_cice_alloc : unable to allocate cice arrays' )
 
+! Set freezing temperatures and ensure consistency between NEMO and CICE 
+! (-1.8 for fully coupled, salinity dependence otherwise)
+! Setting of Tf here or in cice_sbc_in will over-write anything already done in cice_init
 ! Ensure ocean temperatures are nowhere below freezing if not a NEMO restart
+
+      IF (nsbc == 5) THEN
+         ztmp(:,:,:)=-1.8
+         CALL nemo2cice(ztmp(:,:,1),Tf,'T', 1. )     ! Set in CICE here as won't be updated in cice_sbc_in  
+      ELSE
+         DO jk=1,jpk
+            ztmp(:,:,jk)= tfreez(tsn(:,:,jk,jp_sal),fsdepw(:,:,jk))
+         ENDDO
+      ENDIF
+
       IF( .NOT. ln_rstart ) THEN
-         tsn(:,:,:,jp_tem) = MAX (tsn(:,:,:,jp_tem),Tocnfrz)
+         tsn(:,:,:,jp_tem) = MAX (tsn(:,:,:,jp_tem),ztmp)
          tsb(:,:,:,jp_tem) = tsn(:,:,:,jp_tem)
       ENDIF
@@ -198,4 +214,6 @@
       CALL lbc_lnk ( fr_iu , 'U', 1. )
       CALL lbc_lnk ( fr_iv , 'V', 1. )
+      !
+      CALL wrk_dealloc( jpi,jpj,jpk, ztmp )
       !
       IF( nn_timing == 1 )  CALL timing_stop('cice_sbc_init')
@@ -354,10 +372,17 @@
       CALL nemo2cice(ztmp,frain,'T', 1. ) 
 
+! Recalculate freezing temperature and send to CICE except for fully coupled when
+! it remains as -1.8 throughout the run
+      IF ( nsbc==5 ) THEN
+         ztmp(:,:)=-1.8
+      ELSE
+         ztmp(:,:)=tfreez(sss_m(:,:))
+         CALL nemo2cice(ztmp,Tf,'T', 1. )
+      ENDIF
+
 ! Freezing/melting potential
 ! Calculated over NEMO leapfrog timestep (hence 2*dt)
-      nfrzmlt(:,:)=rau0*rcp*fse3t_m(:,:,1)*(Tocnfrz-sst_m(:,:))/(2.0*dt)
-
-      ztmp(:,:) = nfrzmlt(:,:)
-      CALL nemo2cice(ztmp,frzmlt,'T', 1. )
+      nfrzmlt(:,:)=rau0*rcp*fse3t_m(:,:,1)*(ztmp(:,:)-sst_m(:,:))/(2.0*dt)
+      CALL nemo2cice(nfrzmlt,frzmlt,'T', 1. )
 
 ! SST  and SSS
Index: branches/2012/dev_3352_UKMO8_CICE/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90
===================================================================
--- branches/2012/dev_3352_UKMO8_CICE/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90	(revision 3355)
+++ branches/2012/dev_3352_UKMO8_CICE/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90	(revision 3356)
@@ -678,5 +678,5 @@
 
 
-   FUNCTION tfreez( psal ) RESULT( ptf )
+   FUNCTION tfreez( psal, ppress ) RESULT( ptf )
       !!----------------------------------------------------------------------
       !!                 ***  ROUTINE eos_init  ***
@@ -691,10 +691,17 @@
       !!----------------------------------------------------------------------
       REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) ::   psal   ! salinity             [psu]
+      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ), OPTIONAL ::   ppress ! pressure             [dBar]
       ! Leave result array automatic rather than making explicitly allocated
       REAL(wp), DIMENSION(jpi,jpj)                ::   ptf    ! freezing temperature [Celcius]
+      REAL(wp), DIMENSION(jpi,jpj)                ::   zpress ! pressure [dBar]
       !!----------------------------------------------------------------------
       !
       ptf(:,:) = ( - 0.0575_wp + 1.710523e-3_wp * SQRT( psal(:,:) )   &
          &                     - 2.154996e-4_wp *       psal(:,:)   ) * psal(:,:)
+
+      IF( PRESENT(ppress) ) THEN
+         ptf(:,:) = ptf(:,:) - 7.53e-4_wp * ppress(:,:)
+      ENDIF
+
       !
    END FUNCTION tfreez
