Index: /branches/2017/dev_r8657_UKMO_OBSoper/NEMOGCM/CONFIG/SHARED/namelist_ref
===================================================================
--- /branches/2017/dev_r8657_UKMO_OBSoper/NEMOGCM/CONFIG/SHARED/namelist_ref	(revision 8722)
+++ /branches/2017/dev_r8657_UKMO_OBSoper/NEMOGCM/CONFIG/SHARED/namelist_ref	(revision 8723)
@@ -1150,7 +1150,9 @@
    ln_sla      = .false.             ! Logical switch for SLA observations
    ln_sst      = .false.             ! Logical switch for SST observations
+   ln_sss      = .false.             ! Logical swithc for SSS observations
    ln_sic      = .false.             ! Logical switch for Sea Ice observations
    ln_vel3d    = .false.             ! Logical switch for velocity observations
    ln_altbias  = .false.             ! Logical switch for altimeter bias correction
+   ln_sstbias  = .false.             ! Logical switch for SST bias correction
    ln_nea      = .false.             ! Logical switch for rejection of observations near land
    ln_grid_global = .true.           ! Logical switch for global distribution of observations
@@ -1159,23 +1161,39 @@
    ln_s_at_t   = .false.             ! Logical switch for computing model S at T obs if not there
    ln_sstnight = .false.             ! Logical switch for calculating night-time average for SST obs
+   ln_sla_fp_indegs = .true.         ! Logical for SLA: T=> averaging footprint is in degrees, F=> in metres
+   ln_sst_fp_indegs = .true.         ! Logical for SST: T=> averaging footprint is in degrees, F=> in metres
+   ln_sss_fp_indegs = .true.         ! Logical for SSS: T=> averaging footprint is in degrees, F=> in metres
+   ln_sic_fp_indegs = .true.         ! Logical for SIC: T=> averaging footprint is in degrees, F=> in metres
 ! All of the *files* variables below are arrays. Use namelist_cfg to add more files
    cn_profbfiles = 'profiles_01.nc'  ! Profile feedback input observation file names
    cn_slafbfiles = 'sla_01.nc'       ! SLA feedback input observation file names
    cn_sstfbfiles = 'sst_01.nc'       ! SST feedback input observation file names
+   cn_sssfbfiles = 'sss_01.nc'       ! SSS feedback input observation file names
    cn_sicfbfiles = 'sic_01.nc'       ! SIC feedback input observation file names
    cn_velfbfiles = 'vel_01.nc'       ! Velocity feedback input observation file names
    cn_altbiasfile = 'altbias.nc'     ! Altimeter bias input file name
+   cn_sstbiasfiles = 'sstbias.nc'    ! SST bias input file name
    cn_gridsearchfile='gridsearch.nc' ! Grid search file name
    rn_gridsearchres = 0.5            ! Grid search resolution
+   rn_mdtcorr  = 1.61                ! MDT  correction
+   rn_mdtcutoff = 65.0               ! MDT cutoff for computed correction
    rn_dobsini  = 00010101.000000     ! Initial date in window YYYYMMDD.HHMMSS
    rn_dobsend  = 00010102.000000     ! Final date in window YYYYMMDD.HHMMSS
-   nn_1dint    = 0                   ! Type of vertical interpolation method
-   nn_2dint    = 0                   ! Type of horizontal interpolation method
+   rn_sla_avglamscl = 0.             ! E/W diameter of SLA observation footprint (metres/degrees)
+   rn_sla_avgphiscl = 0.             ! N/S diameter of SLA observation footprint (metres/degrees)
+   rn_sst_avglamscl = 0.             ! E/W diameter of SST observation footprint (metres/degrees)
+   rn_sst_avgphiscl = 0.             ! N/S diameter of SST observation footprint (metres/degrees)
+   rn_sss_avglamscl = 0.             ! E/W diameter of SSS observation footprint (metres/degrees)
+   rn_sss_avgphiscl = 0.             ! N/S diameter of SSS observation footprint (metres/degrees)
+   rn_sic_avglamscl = 0.             ! E/W diameter of SIC observation footprint (metres/degrees)
+   rn_sic_avgphiscl = 0.             ! N/S diameter of SIC observation footprint (metres/degrees)
+   nn_1dint = 0                      ! Type of vertical interpolation method
+   nn_2dint = 0                      ! Default horizontal interpolation method
+   nn_2dint_sla = 0                  ! Horizontal interpolation method for SLA
+   nn_2dint_sst = 0                  ! Horizontal interpolation method for SST
+   nn_2dint_sss = 0                  ! Horizontal interpolation method for SSS
+   nn_2dint_sic = 0                  ! Horizontal interpolation method for SIC
    nn_msshc    = 0                   ! MSSH correction scheme
-   rn_mdtcorr  = 1.61                ! MDT  correction
-   rn_mdtcutoff = 65.0               ! MDT cutoff for computed correction
    nn_profdavtypes = -1              ! Profile daily average types - array
-   ln_sstbias  = .false.             !
-   cn_sstbias_files = 'sstbias.nc'   !
 /
 !-----------------------------------------------------------------------
Index: /branches/2017/dev_r8657_UKMO_OBSoper/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90
===================================================================
--- /branches/2017/dev_r8657_UKMO_OBSoper/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90	(revision 8722)
+++ /branches/2017/dev_r8657_UKMO_OBSoper/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90	(revision 8723)
@@ -48,7 +48,24 @@
    LOGICAL, PUBLIC :: ln_diaobs   !: Logical switch for the obs operator
    LOGICAL :: ln_sstnight         !: Logical switch for night mean SST obs
-   
+   LOGICAL :: ln_sla_fp_indegs    !: T=> SLA obs footprint size specified in degrees, F=> in metres
+   LOGICAL :: ln_sst_fp_indegs    !: T=> SST obs footprint size specified in degrees, F=> in metres
+   LOGICAL :: ln_sss_fp_indegs    !: T=> SSS obs footprint size specified in degrees, F=> in metres
+   LOGICAL :: ln_sic_fp_indegs    !: T=> sea-ice obs footprint size specified in degrees, F=> in metres
+
+   REAL(wp) :: rn_sla_avglamscl !: E/W diameter of SLA observation footprint (metres)
+   REAL(wp) :: rn_sla_avgphiscl !: N/S diameter of SLA observation footprint (metres)
+   REAL(wp) :: rn_sst_avglamscl !: E/W diameter of SST observation footprint (metres)
+   REAL(wp) :: rn_sst_avgphiscl !: N/S diameter of SST observation footprint (metres)
+   REAL(wp) :: rn_sss_avglamscl !: E/W diameter of SSS observation footprint (metres)
+   REAL(wp) :: rn_sss_avgphiscl !: N/S diameter of SSS observation footprint (metres)
+   REAL(wp) :: rn_sic_avglamscl !: E/W diameter of sea-ice observation footprint (metres)
+   REAL(wp) :: rn_sic_avgphiscl !: N/S diameter of sea-ice observation footprint (metres)
+
    INTEGER :: nn_1dint       !: Vertical interpolation method
-   INTEGER :: nn_2dint       !: Horizontal interpolation method
+   INTEGER :: nn_2dint       !: Default horizontal interpolation method
+   INTEGER :: nn_2dint_sla   !: SLA horizontal interpolation method 
+   INTEGER :: nn_2dint_sst   !: SST horizontal interpolation method 
+   INTEGER :: nn_2dint_sss   !: SSS horizontal interpolation method 
+   INTEGER :: nn_2dint_sic   !: Seaice horizontal interpolation method 
    INTEGER, DIMENSION(imaxavtypes) :: &
       & nn_profdavtypes      !: Profile data types representing a daily average
@@ -61,5 +78,13 @@
       & nextrprof, &         !: Number of profile extra variables
       & nextrsurf            !: Number of surface extra variables
-   INTEGER, PUBLIC, ALLOCATABLE, DIMENSION(:) :: sstbias_type !SST bias type    
+   INTEGER, DIMENSION(:), ALLOCATABLE :: &
+      & n2dintsurf           !: Interpolation option for surface variables
+   REAL(wp), DIMENSION(:), ALLOCATABLE :: &
+      & ravglamscl, &        !: E/W diameter of averaging footprint for surface variables
+      & ravgphiscl           !: N/S diameter of averaging footprint for surface variables
+   LOGICAL, DIMENSION(:), ALLOCATABLE :: &
+      & lfpindegs, &         !: T=> surface obs footprint size specified in degrees, F=> in metres
+      & llnightav            !: Logical for calculating night-time averages
+
    TYPE(obs_surf), PUBLIC, POINTER, DIMENSION(:) :: &
       & surfdata, &          !: Initial surface data
@@ -116,8 +141,9 @@
          & cn_profbfiles, &      ! T/S profile input filenames
          & cn_sstfbfiles, &      ! Sea surface temperature input filenames
+         & cn_sssfbfiles, &      ! Sea surface salinity input filenames
          & cn_slafbfiles, &      ! Sea level anomaly input filenames
          & cn_sicfbfiles, &      ! Seaice concentration input filenames
          & cn_velfbfiles, &      ! Velocity profile input filenames
-         & cn_sstbias_files      ! SST bias input filenames
+         & cn_sstbiasfiles      ! SST bias input filenames
       CHARACTER(LEN=128) :: &
          & cn_altbiasfile        ! Altimeter bias input filename
@@ -130,14 +156,15 @@
       LOGICAL :: ln_sla          ! Logical switch for sea level anomalies 
       LOGICAL :: ln_sst          ! Logical switch for sea surface temperature
+      LOGICAL :: ln_sss          ! Logical switch for sea surface salinity
       LOGICAL :: ln_sic          ! Logical switch for sea ice concentration
       LOGICAL :: ln_vel3d        ! Logical switch for velocity (u,v) obs
       LOGICAL :: ln_nea          ! Logical switch to remove obs near land
       LOGICAL :: ln_altbias      ! Logical switch for altimeter bias
-      LOGICAL :: ln_sstbias     !: Logical switch for bias corection of SST 
+      LOGICAL :: ln_sstbias      ! Logical switch for bias corection of SST 
       LOGICAL :: ln_ignmis       ! Logical switch for ignoring missing files
       LOGICAL :: ln_s_at_t       ! Logical switch to compute model S at T obs
+      LOGICAL :: ln_bound_reject ! Logical to remove obs near boundaries in LAMs.
       LOGICAL :: llvar1          ! Logical for profile variable 1
       LOGICAL :: llvar2          ! Logical for profile variable 1
-      LOGICAL :: llnightav       ! Logical for calculating night-time averages
       LOGICAL, DIMENSION(jpmaxnfiles) :: lmask ! Used for finding number of sstbias files
 
@@ -189,7 +216,4 @@
       ! Read namelist parameters
       !-----------------------------------------------------------------------
-      
-      !Initalise all values in namelist arrays
-      ALLOCATE(sstbias_type(jpmaxnfiles))
       ! Some namelist arrays need initialising
       cn_profbfiles(:) = ''
@@ -199,5 +223,5 @@
       cn_velfbfiles(:) = ''
       cn_sssfbfiles(:)    = ''
-      cn_sstbias_files(:) = ''
+      cn_sstbiasfiles(:) = ''
       nn_profdavtypes(:) = -1
 
@@ -262,5 +286,5 @@
       IF (ln_sstbias) THEN 
          lmask(:) = .FALSE. 
-         WHERE (cn_sstbias_files(:) /= '') lmask(:) = .TRUE. 
+         WHERE (cn_sstbiasfiles(:) /= '') lmask(:) = .TRUE. 
          jnumsstbias = COUNT(lmask) 
          lmask(:) = .FALSE. 
@@ -463,7 +487,7 @@
             nvarssurf(jtype) = 1
             nextrsurf(jtype) = 0
-            llnightav = .FALSE.
+            llnightav(jtype) = .FALSE.
             IF ( TRIM(cobstypessurf(jtype)) == 'sla' ) nextrsurf(jtype) = 2
-            IF ( TRIM(cobstypessurf(jtype)) == 'sst' ) llnightav = ln_sstnight
+            IF ( TRIM(cobstypessurf(jtype)) == 'sst' ) llnightav(jtype) = ln_sstnight
 
             !Read in surface obs types
@@ -581,5 +605,4 @@
          & zgphi1,    &            ! Model latitudes for prof variable 1
          & zgphi2                  ! Model latitudes for prof variable 2
-      LOGICAL :: llnightav        ! Logical for calculating night-time average
 
       !Allocate local work arrays
@@ -971,3 +994,118 @@
    END SUBROUTINE fin_date
    
+    SUBROUTINE obs_settypefiles( ntypes, jpmaxnfiles, jtype, ctypein, &
+       &                         cfilestype, ifiles, cobstypes, cfiles )
+
+    INTEGER, INTENT(IN) :: ntypes      ! Total number of obs types
+    INTEGER, INTENT(IN) :: jpmaxnfiles ! Maximum number of files allowed for each type
+    INTEGER, INTENT(IN) :: jtype       ! Index of the current type of obs
+    INTEGER, DIMENSION(ntypes), INTENT(INOUT) :: &
+       &                   ifiles      ! Out appended number of files for this type
+
+    CHARACTER(len=6), INTENT(IN) :: ctypein 
+    CHARACTER(len=128), DIMENSION(jpmaxnfiles), INTENT(IN) :: &
+       &                   cfilestype  ! In list of files for this obs type
+    CHARACTER(len=6), DIMENSION(ntypes), INTENT(INOUT) :: &
+       &                   cobstypes   ! Out appended list of obs types
+    CHARACTER(len=128), DIMENSION(ntypes, jpmaxnfiles), INTENT(INOUT) :: &
+       &                   cfiles      ! Out appended list of files for all types
+
+    !Local variables
+    INTEGER :: jfile
+
+    cfiles(jtype,:) = cfilestype(:)
+    cobstypes(jtype) = ctypein
+    ifiles(jtype) = 0
+    DO jfile = 1, jpmaxnfiles
+       IF ( trim(cfiles(jtype,jfile)) /= '' ) &
+                 ifiles(jtype) = ifiles(jtype) + 1
+    END DO
+
+    IF ( ifiles(jtype) == 0 ) THEN
+         CALL ctl_stop( 'Logical for observation type '//TRIM(ctypein)//   &
+            &           ' set to true but no files available to read' )
+    ENDIF
+
+    IF(lwp) THEN    
+       WRITE(numout,*) '             '//cobstypes(jtype)//' input observation file names:'
+       DO jfile = 1, ifiles(jtype)
+          WRITE(numout,*) '                '//TRIM(cfiles(jtype,jfile))
+       END DO
+    ENDIF
+
+    END SUBROUTINE obs_settypefiles
+
+    SUBROUTINE obs_setinterpopts( ntypes, jtype, ctypein,             &
+               &                  n2dint_default, n2dint_type,        &
+               &                  ravglamscl_type, ravgphiscl_type,   &
+               &                  lfp_indegs_type, lavnight_type,     &
+               &                  n2dint, ravglamscl, ravgphiscl,     &
+               &                  lfpindegs, lavnight )
+
+    INTEGER, INTENT(IN)  :: ntypes             ! Total number of obs types
+    INTEGER, INTENT(IN)  :: jtype              ! Index of the current type of obs
+    INTEGER, INTENT(IN)  :: n2dint_default     ! Default option for interpolation type
+    INTEGER, INTENT(IN)  :: n2dint_type        ! Option for interpolation type
+    REAL(wp), INTENT(IN) :: &
+       &                    ravglamscl_type, & !E/W diameter of obs footprint for this type
+       &                    ravgphiscl_type    !N/S diameter of obs footprint for this type
+    LOGICAL, INTENT(IN)  :: lfp_indegs_type    !T=> footprint in degrees, F=> in metres
+    LOGICAL, INTENT(IN)  :: lavnight_type      !T=> obs represent night time average
+    CHARACTER(len=6), INTENT(IN) :: ctypein 
+
+    INTEGER, DIMENSION(ntypes), INTENT(INOUT) :: &
+       &                    n2dint 
+    REAL(wp), DIMENSION(ntypes), INTENT(INOUT) :: &
+       &                    ravglamscl, ravgphiscl
+    LOGICAL, DIMENSION(ntypes), INTENT(INOUT) :: &
+       &                    lfpindegs, lavnight
+
+    lavnight(jtype) = lavnight_type
+
+    IF ( (n2dint_type >= 1) .AND. (n2dint_type <= 6) ) THEN
+       n2dint(jtype) = n2dint_type
+    ELSE
+       n2dint(jtype) = n2dint_default
+    ENDIF
+
+    ! For averaging observation footprints set options for size of footprint 
+    IF ( (n2dint(jtype) > 4) .AND. (n2dint(jtype) <= 6) ) THEN
+       IF ( ravglamscl_type > 0._wp ) THEN
+          ravglamscl(jtype) = ravglamscl_type
+       ELSE
+          CALL ctl_stop( 'Incorrect value set for averaging footprint '// &
+                         'scale (ravglamscl) for observation type '//TRIM(ctypein) )      
+       ENDIF
+
+       IF ( ravgphiscl_type > 0._wp ) THEN
+          ravgphiscl(jtype) = ravgphiscl_type
+       ELSE
+          CALL ctl_stop( 'Incorrect value set for averaging footprint '// &
+                         'scale (ravgphiscl) for observation type '//TRIM(ctypein) )      
+       ENDIF
+
+       lfpindegs(jtype) = lfp_indegs_type 
+
+    ENDIF
+
+    ! Write out info 
+    IF(lwp) THEN
+       IF ( n2dint(jtype) <= 4 ) THEN
+          WRITE(numout,*) '             '//TRIM(ctypein)// &
+             &            ' model counterparts will be interpolated horizontally'
+       ELSE IF ( n2dint(jtype) <= 6 ) THEN
+          WRITE(numout,*) '             '//TRIM(ctypein)// &
+             &            ' model counterparts will be averaged horizontally'
+          WRITE(numout,*) '             '//'    with E/W scale: ',ravglamscl(jtype)
+          WRITE(numout,*) '             '//'    with N/S scale: ',ravgphiscl(jtype)
+          IF ( lfpindegs(jtype) ) THEN
+              WRITE(numout,*) '             '//'    (in degrees)'
+          ELSE
+              WRITE(numout,*) '             '//'    (in metres)'
+          ENDIF
+       ENDIF
+    ENDIF
+
+    END SUBROUTINE obs_setinterpopts
+
 END MODULE diaobs
Index: /branches/2017/dev_r8657_UKMO_OBSoper/NEMOGCM/NEMO/OPA_SRC/OBS/obs_oper.F90
===================================================================
--- /branches/2017/dev_r8657_UKMO_OBSoper/NEMOGCM/NEMO/OPA_SRC/OBS/obs_oper.F90	(revision 8722)
+++ /branches/2017/dev_r8657_UKMO_OBSoper/NEMOGCM/NEMO/OPA_SRC/OBS/obs_oper.F90	(revision 8723)
@@ -26,16 +26,15 @@
       & obs_int_z1d,    &
       & obs_int_z1d_spl
-   USE obs_const,  ONLY :     &
-      & obfillflt		  ! Fillvalue   
+   USE obs_const,  ONLY :    &    ! Obs fill value
+      & obfillflt
    USE dom_oce,       ONLY : &
       & glamt, glamf, &
-      & gphit, gphif, & 
-      & gdept_n, gdept_0 
-   USE lib_mpp,       ONLY : &
+      & gphit, gphif
+   USE lib_mpp,       ONLY : &    ! Warning and stopping routines
       & ctl_warn, ctl_stop
+   USE sbcdcy,        ONLY : &    ! For calculation of where it is night-time
+      & sbc_dcy, nday_qsr
    USE obs_grid,      ONLY : & 
       & obs_level_search     
-   USE sbcdcy,        ONLY : &    ! For calculation of where it is night-time
-      & sbc_dcy, nday_qsr
 
    IMPLICIT NONE
@@ -58,7 +57,9 @@
 CONTAINS
 
+
    SUBROUTINE obs_prof_opt( prodatqc, kt, kpi, kpj, kpk,          &
       &                     kit000, kdaystp,                      &
-      &                     pvar1, pvar2, pgdept, pmask1, pmask2, &
+      &                     pvar1, pvar2, pgdept, pgdepw,         &
+      &                     pmask1, pmask2,                       &  
       &                     plam1, plam2, pphi1, pphi2,           &
       &                     k1dint, k2dint, kdailyavtypes )
@@ -111,4 +112,5 @@
       !!      ! 07-03 (K. Mogensen) General handling of profiles
       !!      ! 15-02 (M. Martin) Combined routine for all profile types
+      !!      ! 17-02 (M. Martin) Include generalised vertical coordinate changes
       !!-----------------------------------------------------------------------
 
@@ -140,6 +142,7 @@
          & pphi1,    &               ! Model latitudes for variable 1
          & pphi2                     ! Model latitudes for variable 2
-      REAL(KIND=wp), INTENT(IN), DIMENSION(kpk) :: &
-         & pgdept                    ! Model array of depth levels
+      REAL(KIND=wp), INTENT(IN), DIMENSION(kpi,kpj,kpk) :: & 
+         & pgdept, &                 ! Model array of depth T levels 
+         & pgdepw                    ! Model array of depth W levels 
       INTEGER, DIMENSION(imaxavtypes), OPTIONAL :: &
          & kdailyavtypes             ! Types for daily averages
@@ -156,4 +159,6 @@
       INTEGER ::   iend
       INTEGER ::   iobs
+      INTEGER ::   iin, ijn, ikn, ik   ! looping indices over interpolation nodes 
+      INTEGER ::   inum_obs
       INTEGER, DIMENSION(imaxavtypes) :: &
          & idailyavtypes
@@ -163,4 +168,6 @@
          & igrdj1, &
          & igrdj2
+      INTEGER, ALLOCATABLE, DIMENSION(:) :: iv_indic
+
       REAL(KIND=wp) :: zlam
       REAL(KIND=wp) :: zphi
@@ -171,14 +178,17 @@
          & zobsk,    &
          & zobs2k
-      REAL(KIND=wp), DIMENSION(2,2,kpk) :: &
+      REAL(KIND=wp), DIMENSION(2,2,1) :: &
          & zweig1, &
-         & zweig2
+         & zweig2, &
+         & zweig
       REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: &
          & zmask1, &
          & zmask2, &
-         & zint1, &
-         & zint2, &
-         & zinm1, &
-         & zinm2
+         & zint1,  &
+         & zint2,  &
+         & zinm1,  &
+         & zinm2,  &
+         & zgdept, & 
+         & zgdepw
       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: &
          & zglam1, &
@@ -186,4 +196,7 @@
          & zgphi1, &
          & zgphi2
+      REAL(KIND=wp), DIMENSION(1) :: zmsk_1, zmsk_2   
+      REAL(KIND=wp), DIMENSION(:,:,:), ALLOCATABLE :: interp_corner
+
       LOGICAL :: ld_dailyav
 
@@ -266,6 +279,8 @@
          & zmask1(2,2,kpk,ipro),  &
          & zmask2(2,2,kpk,ipro),  &
-         & zint1(2,2,kpk,ipro),  &
-         & zint2(2,2,kpk,ipro)   &
+         & zint1(2,2,kpk,ipro),   &
+         & zint2(2,2,kpk,ipro),   &
+         & zgdept(2,2,kpk,ipro),  & 
+         & zgdepw(2,2,kpk,ipro)   & 
          & )
 
@@ -411,5 +426,5 @@
                ENDIF !idayend
 
-            ELSE 
+            ELSE   
 
                ! Point data 
@@ -476,4 +491,5 @@
 
                         ENDIF 
+
                      ENDDO depth_loop1 
      
Index: /branches/2017/dev_r8657_UKMO_OBSoper/NEMOGCM/NEMO/OPA_SRC/OBS/obs_prep.F90
===================================================================
--- /branches/2017/dev_r8657_UKMO_OBSoper/NEMOGCM/NEMO/OPA_SRC/OBS/obs_prep.F90	(revision 8722)
+++ /branches/2017/dev_r8657_UKMO_OBSoper/NEMOGCM/NEMO/OPA_SRC/OBS/obs_prep.F90	(revision 8723)
@@ -61,5 +61,4 @@
       !!----------------------------------------------------------------------
       !! * Modules used
-      USE domstp              ! Domain: set the time-step
       USE par_oce             ! Ocean parameters
       USE dom_oce, ONLY       :   glamt, gphit, tmask, nproc   ! Geographical information
@@ -262,5 +261,4 @@
       !!----------------------------------------------------------------------
       !! * Modules used
-      USE domstp              ! Domain: set the time-step
       USE par_oce             ! Ocean parameters
       USE dom_oce, ONLY : &   ! Geographical information
