diff --git a/modules/aeolus/aeolus_amv.py b/modules/aeolus/aeolus_amv.py
index c477adf8c72e71d76fc431311018c9f3347e0596..3db084c694a83659c0cccce7058f43a823d82fd5 100644
--- a/modules/aeolus/aeolus_amv.py
+++ b/modules/aeolus/aeolus_amv.py
@@ -15,7 +15,7 @@ from amv.intercompare import get_raob_dict_cdf
 
 
 amv_file_duration = 60  # minutes
-half_width = 25  # search box centered on AEOLUS profile (FGF coordinates)
+half_width = 40  # search box centered on AEOLUS profile (FGF coordinates)
 num_elems = 5424
 num_lines = 5424
 
@@ -89,10 +89,47 @@ class Framework(AMVFiles):
         self.lon_name = 'Longitude'
         self.lat_name = 'Latitude'
 
-        self.out_params = ['Lon', 'Lat', 'Element', 'Line', 'pressure', 'wind_speed', 'wind_direction']
-        self.params = ['MedianPress', 'Wind_Speed', 'Wind_Dir']
+        self.out_params = ['Lon', 'Lat', 'Element', 'Line', 'pressure', 'wind_speed', 'wind_direction', 'BestFitPresLvl']
+        self.params = ['MedianPress', 'Wind_Speed', 'Wind_Dir', 'BestFitPresLvl']
         self.meta_dict = {'Lon': ('degrees east', 'f4'), 'Lat': ('degrees north', 'f4'), 'Element': (None, 'i4'), 'Line': (None, 'i4'),
-                          'pressure': ('hPa', 'f4'), 'wind_speed': ('m s-1', 'f4'), 'wind_direction': ('degrees', 'f4')}
+                          'pressure': ('hPa', 'f4'), 'wind_speed': ('m s-1', 'f4'), 'wind_direction': ('degrees', 'f4'),
+                          'BestFitPresLvl': ('hPa', 'f4')}
+
+    def get_parameters(self):
+        return self.params
+
+    def get_out_parameters(self):
+        return self.out_params
+
+    def get_meta_dict(self):
+        return self.meta_dict
+
+    def get_navigation(self):
+        return GEOSNavigation(sub_lon=-75.0)
+
+    def get_datetime(self, pathname):
+        fname = os.path.split(pathname)[1]
+        toks = fname.split('_')
+        dstr = toks[4]
+        tstr = toks[5]
+        dtstr = dstr + tstr
+        dto = datetime.datetime.strptime(dtstr, '%Y%j%H%M').replace(tzinfo=timezone.utc)
+
+        return dto
+
+
+class FrameworkCloudHeight(AMVFiles):
+    def __init__(self, files_path, file_time_span):
+        super().__init__(files_path, file_time_span, '*_CLOUD_HEIGHT_EN'+'*.nc', None)
+
+        self.elem_name = 'Element'
+        self.line_name = 'Line'
+        self.lon_name = 'Longitude'
+        self.lat_name = 'Latitude'
+
+        self.out_params = ['CldTopPres', 'CldTopHght', 'CldOptDpth']
+        self.params = ['CldTopPres', 'CldTopHght', 'CldOptDpth']
+        self.meta_dict = {'CldTopPres': ('hPa', 'f4'), 'CldTopHght': ('km', 'f4'), 'CldOptDpth': ('km', 'f4')}
 
     def get_parameters(self):
         return self.params
@@ -446,6 +483,44 @@ def run_best_fit_all():
         analyze2(amvs_list, bf_list, raob_match_list, bf_gfs_list)
 
 
+def get_product_at_locs(raob_to_amv_dct, ts, files, filepath=None):
+    keys = list(raob_to_amv_dct.keys())
+    m_dct = {}
+
+    nav = files.get_navigation()
+    the_params = files.get_parameters()
+    num_params = len(the_params)
+
+    if filepath is None:
+        filepath, ftime, f_idx = files.get_file(ts)
+    ds = Dataset(filepath)
+
+    param_s = []
+    for pstr in the_params:
+        data = ds[pstr][:]
+        data = data.data
+        param_s.append(data)
+    param_nd = np.stack(param_s)
+
+    for key in keys:
+        amvs = raob_to_amv_dct.get(key)
+        num_amvs = amvs.shape[1]
+        alons = amvs[0, :]
+        alats = amvs[1, :]
+
+        cc, ll = nav.earth_to_lc_s(alons, alats)
+
+        aaa = np.zeros((num_params, num_amvs), dtype=np.float)
+        for k in range(num_amvs):
+            aaa[:, k] = param_nd[:, ll[k], cc[k]]
+
+        m_dct[key] = aaa
+
+    ds.close()
+
+    return m_dct
+
+
 def run_best_fit(raob_to_amv_dct, raob_dct, gfs_filename=None):
     keys = list(raob_to_amv_dct.keys())