diff --git a/gridded_glm/libexec/_minute_gridder.py b/gridded_glm/libexec/_minute_gridder.py
index 8b1fe742787f06cb4b82c237c4ad7af4c0ec2212..320c59f695af0381e00b323664e06f3d75ecc54f 100644
--- a/gridded_glm/libexec/_minute_gridder.py
+++ b/gridded_glm/libexec/_minute_gridder.py
@@ -77,7 +77,7 @@ def create_parser():
                              "(default: print to screen).")
     parser.add_argument('-o', '--output-dir', metavar='OUTPUT_DIR',
                         default=os.getcwd(), help="output directory (default: use current directory)")
-    parser.add_argument('--goes-sector', default="full", choices=['full', 'conus', 'meso'],
+    parser.add_argument('--goes-sector', default="full", choices=['full', 'conus', 'meso', 'meso1', 'meso2'],
                         help="If sector is meso, ctr_lon and ctr_lat \n"
                              "are interpreted as the ctr_x and ctr_y of the fixed grid.\n"
                              "(default: full)")
@@ -154,8 +154,10 @@ def get_sector_shortstring(args):
         return 'F'
     elif args.goes_sector == 'conus':
         return 'C'
-    elif args.goes_sector == 'meso':
+    elif args.goes_sector == 'meso' or args.goes_sector == 'meso1':
         return 'M1'
+    elif args.goes_sector == 'meso2':
+        return 'M2'
     else:
         raise RuntimeError("sector not recognized")
 
@@ -196,7 +198,25 @@ def grid_setup(glm_files, args, work_dir=os.getcwd()):
     min_events = None
     min_groups = None
 
-    if args.goes_sector == "meso" and (args.ctr_lat == None or args.ctr_lon == None):
+    if args.realtime:
+        if len(args.filenames) != 1:
+            log.error("realtime mode only accepts one input file")
+            exit(1)
+        glminfo = parse_glm_filename(os.path.basename(args.filenames[0]))
+
+        globstring = "{}_{}_{}_s{}*".format(glminfo[0], glminfo[1], glminfo[2], glminfo[3].strftime("%Y%j%H%M"))
+        fileglob = glob(os.path.join(os.path.dirname(args.filenames[0]), globstring))
+        if len(fileglob) != 3:
+            log.error("There are not (yet) three GLM files from this minute. This may be expected. Exiting.")
+            exit(0)
+        args.filenames = fileglob
+
+    for f in args.filenames:
+        if not os.path.exists(f):
+            log.error("Tried to grid file that does not exist: {}".format(f))
+            exit(1)
+
+    if "meso" in args.goes_sector and (args.ctr_lat == None or args.ctr_lon == None):
         log.error("sector 'meso' requires --ctr-lat & --ctr-lon")
         exit(1)
 
@@ -214,18 +234,23 @@ def grid_setup(glm_files, args, work_dir=os.getcwd()):
 
     goes_position = get_goes_position(glm_files)
 
+    if "meso" in args.goes_sector:
+        view = "meso"
+    else:
+        view = args.goes_sector
+
     resln = get_resolution(args)
-    view = get_GOESR_grid(position=goes_position,
-                          view=args.goes_sector,
+    grid = get_GOESR_grid(position=goes_position,
+                          view=view,
                           resolution=resln)
-    nadir_lon = view['nadir_lon']
-    dx = dy = view['resolution']
-    nx, ny = view['pixelsEW'], view['pixelsNS']
+    nadir_lon = grid['nadir_lon']
+    dx = dy = grid['resolution']
+    nx, ny = grid['pixelsEW'], grid['pixelsNS']
     geofixcs, grs80lla = get_GOESR_coordsys(sat_lon_nadir=nadir_lon)
 
-    if 'centerEW' in view:
-        x_ctr, y_ctr = view['centerEW'], view['centerNS']
-    elif args.goes_sector == 'meso':
+    if 'centerEW' in grid:
+        x_ctr, y_ctr = grid['centerEW'], grid['centerNS']
+    elif view == 'meso':
         # use ctr_lon, ctr_lat to get the center of the mesoscale FOV
         x_ctr, y_ctr, z_ctr = geofixcs.fromECEF(
             *grs80lla.toECEF(args.ctr_lon, args.ctr_lat, 0.0))