diff --git a/modules/icing/pirep_goes.py b/modules/icing/pirep_goes.py
index 834b151ec495213d5d8f6fe7ec7cf777406d140b..517371d39e8502187ce56374a51f82ea1b3b13af 100644
--- a/modules/icing/pirep_goes.py
+++ b/modules/icing/pirep_goes.py
@@ -278,30 +278,38 @@ def analyze(ice_dct, no_ice_dct):
 
 
 def apply_qc_icing_pireps(icing_alt, cld_top_hgt, cld_phase, cld_opd, bt_11um, cld_mask):
-    opd_threshold = 6
+    opd_threshold = 2
     closeness = 100.0  # meters
     num_obs = len(icing_alt)
-    cld_mask = cld_mask.reshape((num_obs, -1))
-    cld_top_hgt = cld_top_hgt.reshape((num_obs, -1))
-    cld_phase = cld_phase.reshape((num_obs, -1))
-    cld_opd = cld_opd.reshape((num_obs, -1))
-    bt_11um = bt_11um.reshape((num_obs, -1))
-
-    keep_0 = np.logical_or(cld_mask == 2, cld_mask == 3)  # cloudy
-    keep_1 = np.invert(np.isnan(cld_top_hgt))
-    keep_2 = np.invert(np.isnan(bt_11um))
-    keep_3 = np.invert(np.isnan(cld_opd))
-    keep = keep_0 & keep_1 & keep_2 & keep_3
-
-    keep = np.where(keep, cld_top_hgt[:, ] > icing_alt[:], False)
-    keep = np.where(keep,
-        np.invert((cld_phase[:, ] == 3) &
-            np.logical_and(cld_top_hgt[:, ]+closeness > icing_alt[:], cld_top_hgt[:, ]-closeness < icing_alt[:])),
-                 False)
-
-    keep = np.where(keep, (cld_opd[:, ] > opd_threshold) & (cld_phase[:, ] == 3) & (cld_top_hgt[:, ] > icing_alt[:]), False)
-    keep = np.where(keep, np.invert((cld_phase[:, ] == 3) & (cld_opd[:, ] < 0.1) & (cld_top_hgt[:, ] > icing_alt[:]), False))
-    keep = np.where(keep, np.invert(bt_11um[:, ] > 270.0), False)
-    keep = np.where(keep, np.invert(bt_11um[:, ] < 228.0), False)
-
-    return keep
+    cld_mask = cld_mask[:, :, :].reshape((num_obs, -1))
+    cld_top_hgt = cld_top_hgt[:, :, :].reshape((num_obs, -1))
+    cld_phase = cld_phase[:, :, :].reshape((num_obs, -1))
+    cld_opd = cld_opd[:, :, :].reshape((num_obs, -1))
+    bt_11um = bt_11um[:, :, :].reshape((num_obs, -1))
+
+    mask = []
+    for i in range(num_obs):
+        keep_0 = np.logical_or(cld_mask[i,] == 2, cld_mask[i,] == 3)  # cloudy
+        keep_1 = np.invert(np.isnan(cld_top_hgt[i,]))
+        keep_2 = np.invert(np.isnan(bt_11um[i,]))
+        keep_3 = np.invert(np.isnan(cld_opd[i,]))
+        keep = keep_0 & keep_1 & keep_2 & keep_3
+
+        keep = np.where(keep, cld_top_hgt[i,] > icing_alt[i], False)
+
+        keep = np.where(keep,
+            np.invert((cld_phase[i,] == 3) &
+                np.logical_and(cld_top_hgt[i,]+closeness > icing_alt[i], cld_top_hgt[i,]-closeness < icing_alt[i])),
+                     False)
+
+        keep = np.where(keep, (cld_opd[i,] >= opd_threshold) & (cld_phase[i,] == 4) & (cld_top_hgt[i,] > icing_alt[i]), False)
+
+        keep = np.where(keep, np.invert((cld_phase[i,] == 3) & (cld_opd[i,] < 0.1) & (cld_top_hgt[i,] > icing_alt[i])), False)
+
+        keep = np.where(keep, np.invert(bt_11um[i,] > 270.0), False)
+
+        keep = np.where(keep, np.invert(bt_11um[i,] < 228.0), False)
+
+        mask.append(keep)
+
+    return mask