diff --git a/read_data.py b/read_data.py
index e7782854888877d097b4bd39486c4215b4819fbb..e43faf37a18357100110ca1b97796a3e7fbf7a8b 100644
--- a/read_data.py
+++ b/read_data.py
@@ -148,8 +148,8 @@ def get_data(file_names: Dict[str, str],
     viirs_data = read_data('viirs', f'{mod02}', f'{mod03}')
     viirs_data = read_ancillary_data(file_names, viirs_data)
 
-    m01 = viirs_data.M01.values
-    m02 = viirs_data.M02.values
+    m01 = viirs_data.M05.values
+    m02 = viirs_data.M07.values
     r1 = 2.0 * (np.power(m02, 2.0) - np.power(m01, 2.0)) + (1.5 * m02) + (0.5 * m01)
     r2 = m02 + m01 + 0.5
     r3 = r1 / r2
diff --git a/restoral.py b/restoral.py
index efb6ae1a9e4afd36477e13e9287cbaf6ed517c0c..4438e8d7a60162c87e10da0921c1f2e2646de384 100644
--- a/restoral.py
+++ b/restoral.py
@@ -47,7 +47,7 @@ def sunglint(viirs_data, threshold, bit, conf):
 
 def spatial(viirs_data, threshold, scene, conf):
 
-    m02 = viirs_data.M02.values
+    m02 = viirs_data.M07.values
     m31 = viirs_data.M15.values
 
     var_m31 = spatial_var(m31, 0.40)
@@ -63,3 +63,59 @@ def spatial(viirs_data, threshold, scene, conf):
     conf[idx] = 0.67
 
     return conf
+
+
+def land(viirs_data, threshold, scene, conf):
+    m04 = viirs_data.M04.values.ravel()
+    m05 = viirs_data.M08.values.ravel()
+    m20 = viirs_data.M12.values.ravel()
+    m22 = viirs_data.M13.values.ravel()
+    m31 = viirs_data.M15.values.ravel()
+    eco = viirs_data.eco.values.ravel()
+    desert = scene['desert'].ravel()
+    conf = conf.ravel()
+    tbadj = 0
+    ldsbt11bd = np.array(threshold['Land_Restoral']['ldsbt11bd'])
+    ldsbt11 = np.array(threshold['Land_Restoral']['ldsbt11bd'])
+
+    irclr = 1
+    hds11 = np.ones((eco.shape[0], 3)) * (ldsbt11 - tbadj)
+    hds11[eco == 8, :] = ldsbt11bd - tbadj
+
+    if irclr == 1:
+        conf[m31 > hds11[:, 2]] = 1
+        conf[(m31 > hds11[:, 1]) & (m31 <= hds11[:, 2])] = 0.96
+        conf[m31 <= hds11[:, 1]] = 0.5
+
+    m5_4_thr = np.full(eco.shape, threshold['Land_Restoral']['ldr5_4_thr'])
+    m5_4_thr[desert == 1] = threshold['Land_Restoral']['ldsr5_4_thr']
+
+    m5_4 = m05/m04
+    md1 = m20 - m22
+    md2 = m22 - m31
+
+    idx = np.nonzero((md1 < threshold['Land_Restoral']['ld20m22']) &
+                     (md2 < threshold['Land_Restoral']['ld22m31']) &
+                     (m5_4 > m5_4_thr) &
+                     (conf <= 0.95))
+    conf[idx] = 0.96
+
+    conf = conf.reshape(viirs_data.M01.shape)
+    return conf
+
+
+def coast(viirs_data, threshold, scene, conf):
+
+    m01 = viirs_data.M05.values
+    m02 = viirs_data.M07.values
+    coast_ndvi = threshold['Coastal_NDVI_Thresholds']['coast_ndvi']
+
+    irclr = 1
+
+    if irclr == 1:
+        ndvi = (m02 - m01)/(m01 + m02)
+
+        idx = np.nonzero((ndvi <= coast_ndvi[0]) | (ndvi >= coast_ndvi[1]))
+        conf[idx] = 1
+
+    return conf
diff --git a/spectral_tests.py b/spectral_tests.py
index 7ee812f0e62301e398eacfa6cd712d10b93dd091..73ee1eb9af52d1cb58c8f3cc6038dc30b614ab06 100644
--- a/spectral_tests.py
+++ b/spectral_tests.py
@@ -21,6 +21,7 @@ _DTR = np.pi/180
 # this is used for testing, eventually we want to remove it
 importlib.reload(preproc)
 importlib.reload(conf)
+importlib.reload(restoral)
 
 
 class CloudTests(object):
@@ -492,12 +493,22 @@ class ComputeTests(CloudTests):
 
         idx = np.nonzero((scene_flags['water'] == 1) & (scene_flags['ice'] == 0) &
                          (scene_flags['uniform'] == 1) & (cmin <= 0.99) & (cmin >= 0.05))
-        # cmin[idx] = restoral.spatial(self.data, self.thresholds['Sun_Glint'], scene_flags, cmin)[idx]
+        cmin[idx] = restoral.spatial(self.data, self.thresholds['Sun_Glint'], scene_flags, cmin)[idx]
 
         idx = np.nonzero((scene_flags['water'] == 1) & (scene_flags['sunglint'] == 1) &
                          (scene_flags['uniform'] == 1) & (cmin <= 0.95))
         cmin[idx] = restoral.sunglint(self.data, self.thresholds['Sun_Glint'], total_bit, cmin)[idx]
 
+        idx = np.nonzero((scene_flags['day'] == 1) & (scene_flags['land'] == 1) &
+                         (scene_flags['snow'] == 0) & (scene_flags['ice'] == 0) &
+                         (cmin <= 0.95))
+        cmin[idx] = restoral.land(self.data, self.thresholds, scene_flags, cmin)[idx]
+
+        idx = np.nonzero((scene_flags['day'] == 1) & (scene_flags['land'] == 1) &
+                         (scene_flags['coast'] == 1) & (scene_flags['snow'] == 0) &
+                         (scene_flags['ice'] == 0))
+        cmin[idx] = restoral.coast(self.data, self.thresholds, scene_flags, cmin)[idx]
+
         return cmin