Index: /branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90
===================================================================
--- /branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90	(revision 10711)
+++ /branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90	(revision 10712)
@@ -990,4 +990,5 @@
             zincwgt = wgtiau(it)      ! IAU weight for the current time step 
             ! note this is not a tendency so should not be divided by rdt (as with the tracer and other increments)
+            ! EF: Actually CICE is expecting a tendency so is divided by rdt below
 
             IF(lwp) THEN
@@ -1211,4 +1212,6 @@
             zincwgt = wgtiau(it)      ! IAU weight for the current time step 
             ! note this is not a tendency so should not be divided by rdt (as with the tracer and other increments)
+            ! EF: Actually CICE is expecting a tendency so is divided by rdt below
+            
 
             IF(lwp) THEN
Index: /branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90
===================================================================
--- /branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90	(revision 10711)
+++ /branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90	(revision 10712)
@@ -191,4 +191,5 @@
          & cn_altbiasfile        ! Altimeter bias input filename
 
+      LOGICAL :: ln_seaicetypes = .FALSE.  ! Logical switch indicating data type is sea ice
 
       LOGICAL :: ln_t3d          ! Logical switch for temperature profiles
@@ -844,5 +845,11 @@
                &               rn_dobsini, rn_dobsend, ln_ignmis, .FALSE., llnightav(jtype) )
 
-            CALL obs_pre_surf( surfdata(jtype), surfdataqc(jtype), ln_nea, ln_bound_reject )
+
+            IF ( TRIM(cobstypessurf(jtype)) == 'sit' ) THEN
+              ln_seaicetypes = .TRUE.
+            ELSE
+              ln_seaicetypes = .FALSE.
+            ENDIF           
+            CALL obs_pre_surf( surfdata(jtype), surfdataqc(jtype), ln_nea, ln_bound_reject, ln_seaicetypes )
 
             IF ( TRIM(cobstypessurf(jtype)) == 'sla' ) THEN
@@ -1233,9 +1240,6 @@
                         &           'time-step but some obs are valid then.' )
                      WRITE(numout,*)surfdataqc(jtype)%nsstpmpp(1), &
-                        &           ' sea-ice concentration obs will be missed'
-                  ENDIF
-                  surfdataqc(jtype)%nsurfup = surfdataqc(jtype)%nsurfup + &
-                     &                        surfdataqc(jtype)%nsstp(1)
-                  CYCLE
+                        &           ' sea-ice concentration obs will be missed'                  
+                  ENDIF                                
                ELSE
 #if defined key_cice
@@ -1249,15 +1253,12 @@
                ENDIF
             CASE('sit')
-               IF ( kstp == 0 ) THEN ! **Copied from SIC, check applies to SIT!**
+               IF ( kstp == 0 ) THEN
                   IF ( lwp .AND. surfdataqc(jtype)%nsstpmpp(1) > 0 ) THEN
                      CALL ctl_warn( 'Sea-ice not initialised on zeroth '// &
                         &           'time-step but some obs are valid then.' )
                      WRITE(numout,*)surfdataqc(jtype)%nsstpmpp(1), &
-                        &           ' sea-ice thickness obs will be missed'
-                  ENDIF
-                  surfdataqc(jtype)%nsurfup = surfdataqc(jtype)%nsurfup + &
-                     &                        surfdataqc(jtype)%nsstp(1)
-                  CYCLE
-               ELSE            
+                        &           ' sea-ice thickness obs will be missed and QC flag set to 4'
+                  ENDIF                                  
+               ELSE       
 #if defined key_cice
                   zsurfvar(:,:) = thick_i(:,:)
Index: /branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/OBS/obs_oper.F90
===================================================================
--- /branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/OBS/obs_oper.F90	(revision 10711)
+++ /branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/OBS/obs_oper.F90	(revision 10712)
@@ -805,7 +805,15 @@
             surfdataqc%rext(jobs,1) = surfdataqc%robs(jobs,1)            
             surfdataqc%robs(jobs,1) = surfdataqc%rext(jobs,1) + 0.25*surfdataqc%rext(jobs,2)
+            ! If the corrected freeboard observation is outside -0.3 to 3.0 m (CPOM) then set the QC flag to bad
+            IF ((surfdataqc%robs(jobs,1) < -0.3) .OR. (surfdataqc%robs(jobs,1) > 3.0)) THEN
+              surfdataqc%nqc(jobs) = 4
+            ENDIF            
             ! Convert corrected freeboard to ice thickness following Tilling et al. (2016)
             surfdataqc%robs(jobs,1) = (surfdataqc%robs(jobs,1)*rhow + surfdataqc%rext(jobs,2)*rhos)/ &
-                                      (rhow - rhoi)            
+                                      (rhow - rhoi)
+            ! Flag any negative ice thickness values as bad
+            IF (surfdataqc%robs(jobs,1) < 0.0) THEN
+              surfdataqc%nqc(jobs) = 4
+            ENDIF                                      
          ENDIF
          
Index: /branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/OBS/obs_prep.F90
===================================================================
--- /branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/OBS/obs_prep.F90	(revision 10711)
+++ /branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/OBS/obs_prep.F90	(revision 10712)
@@ -53,5 +53,5 @@
 
    SUBROUTINE obs_pre_surf( surfdata, surfdataqc, ld_nea, ld_bound_reject, &
-                            kqc_cutoff )
+                            ld_seaicetypes, kqc_cutoff )
       !!----------------------------------------------------------------------
       !!                    ***  ROUTINE obs_pre_sla  ***
@@ -83,5 +83,6 @@
       LOGICAL, INTENT(IN) :: ld_nea                ! Switch for rejecting observation near land
       LOGICAL, INTENT(IN) :: ld_bound_reject       ! Switch for rejecting obs near the boundary
-      INTEGER, INTENT(IN), OPTIONAL :: kqc_cutoff   ! cut off for QC value
+      LOGICAL, INTENT(IN) :: ld_seaicetypes        ! Switch to indicate sea ice data
+      INTEGER, INTENT(IN), OPTIONAL :: kqc_cutoff  ! cut off for QC value
       !! * Local declarations
       INTEGER :: iqc_cutoff = 255   ! cut off for QC value
@@ -140,10 +141,19 @@
       ! -----------------------------------------------------------------------
 
-      CALL obs_coo_tim( icycle, &
-         &              iyea0,   imon0,   iday0,   ihou0,   imin0,      &
-         &              surfdata%nsurf,   surfdata%nyea, surfdata%nmon, &
-         &              surfdata%nday,    surfdata%nhou, surfdata%nmin, &
-         &              surfdata%nqc,     surfdata%mstp, iotdobs        )
-
+      IF ( ld_seaicetypes ) THEN
+         CALL obs_coo_tim( icycle, &
+            &              iyea0,   imon0,   iday0,   ihou0,   imin0,      &
+            &              surfdata%nsurf,   surfdata%nyea, surfdata%nmon, &
+            &              surfdata%nday,    surfdata%nhou, surfdata%nmin, &
+            &              surfdata%nqc,     surfdata%mstp, iotdobs,       &
+            &              ld_seaicetypes = ld_seaicetypes )
+      ELSE
+         CALL obs_coo_tim( icycle, &
+            &              iyea0,   imon0,   iday0,   ihou0,   imin0,      &
+            &              surfdata%nsurf,   surfdata%nyea, surfdata%nmon, &
+            &              surfdata%nday,    surfdata%nhou, surfdata%nmin, &
+            &              surfdata%nqc,     surfdata%mstp, iotdobs       )
+      ENDIF
+      
       CALL obs_mpp_sum_integer( iotdobs, iotdobsmpp )
       
@@ -558,5 +568,5 @@
       &                    kobsno,                                        &
       &                    kobsyea, kobsmon, kobsday, kobshou, kobsmin,   &
-      &                    kobsqc,  kobsstp, kotdobs                      )
+      &                    kobsqc,  kobsstp, kotdobs, ld_seaicetypes       )
       !!----------------------------------------------------------------------
       !!                    ***  ROUTINE obs_coo_tim ***
@@ -606,4 +616,6 @@
          & kobsstp          ! Number of time steps up to the 
                             ! observation time
+      LOGICAL, OPTIONAL, INTENT(IN) :: ld_seaicetypes
+      
 
       !! * Local declarations
@@ -620,4 +632,5 @@
       INTEGER :: iskip
       INTEGER :: idaystp
+      INTEGER :: icecount
       REAL(KIND=wp) :: zminstp
       REAL(KIND=wp) :: zhoustp
@@ -715,5 +728,23 @@
          ENDIF
 
-      END DO
+
+      !------------------------------------------------------------------------
+      ! Flag sea ice observations falling on initial timestep
+      !------------------------------------------------------------------------ 
+   
+      IF ( PRESENT(ld_seaicetypes) ) THEN
+      
+           IF ( ( kobsstp(jobs) == (nit000 - 1) ) ) THEN
+              WRITE(numout,*)( 'Sea-ice not initialised on zeroth '// &
+                        &    'time-step but observation valid then, flagging '// &
+                             'in time check subroutine obs_coo_tim.' )                  
+              kobsqc(jobs) = IBSET(kobsqc(jobs),13)
+              kotdobs      = kotdobs + 1
+              CYCLE
+           ENDIF
+               
+      ENDIF                      
+   
+   END DO
 
    END SUBROUTINE obs_coo_tim
