diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8be13ac43f6e09405c89a615f880fdac8cbe49ea..c761d8d6de2c869e5c8f1ccc56109540b47008e5 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -15,11 +15,11 @@ stages:
 
 create the Gridded GLM buildbucket:
   stage: buildbucket_build
-  image: docker:19.03.1
+  image: docker:27.4.1
   tags:
     - docker
   services:
-    - docker:19.03.1-dind
+    - docker:dind
   script:
     - docker login --username $CI_REGISTRY_USER --password $CI_REGISTRY_PASSWORD $CI_REGISTRY
     - docker build -f buildbucket/Dockerfile --tag $BUILDBUCKET_IMAGE:$CI_COMMIT_SHORT_SHA --cache-from $BUILDBUCKET_IMAGE:latest buildbucket/
@@ -27,11 +27,11 @@ create the Gridded GLM buildbucket:
 
 create the Gridded GLM package:
   stage: gridded_glm_build
-  image: docker:19.03.1
+  image: docker:27.4.1
   tags:
     - docker
   services:
-    - docker:19.03.1-dind
+    - docker:dind
   script:
     - docker login --username $CI_REGISTRY_USER --password $CI_REGISTRY_PASSWORD $CI_REGISTRY
     # Creates the gridded GLM package
@@ -55,11 +55,11 @@ run tests:
 
 push our images with version tags:
   stage: release
-  image: docker:19.03.1
+  image: docker:27.4.1
   tags:
     - docker
   services:
-    - docker:19.03.1-dind
+    - docker:dind
   rules:
     - if: '$CI_COMMIT_TAG'
   script:
@@ -75,11 +75,11 @@ push our images with version tags:
 
 push our images as latest tags:
   stage: release
-  image: docker:19.03.1
+  image: docker:20.10
   tags:
     - docker
   services:
-    - docker:19.03.1-dind
+    - docker:dind
   script:
     - docker login --username $CI_REGISTRY_USER --password $CI_REGISTRY_PASSWORD $CI_REGISTRY
 # buildbucket
diff --git a/buildbucket/Dockerfile b/buildbucket/Dockerfile
index 586163233bf6568c7a65f5992370e169065f65cb..4c1ed0f50dae095c0843d0bd510353afaed701b2 100644
--- a/buildbucket/Dockerfile
+++ b/buildbucket/Dockerfile
@@ -1,6 +1,6 @@
 # To build:
 # docker build -t gitlab.ssec.wisc.edu:5555/cspp_geo/cspp-geo-gridded-glm/buildbucket:r$(date '+%Y%m%d') .
-FROM --platform=linux/amd64 centos:7
+FROM --platform=linux/amd64 rockylinux:8
 
 WORKDIR /work
 
@@ -8,12 +8,12 @@ COPY buildbucket_environment.yaml .
 COPY package.sh .
 
 # Install the `which` command for debugging
-RUN yum -y install which git && yum clean all
+RUN dnf -y install which git findutils xz && dnf clean all
 
 # Download and install miniforge
 # https://github.com/conda-forge/miniforge#miniforge
-RUN curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-$(uname)-$(uname -m).sh" && \
-    /bin/bash Mambaforge-$(uname)-$(uname -m).sh -b -p $HOME/miniforge && \
+RUN curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh" && \
+    /bin/bash Miniforge3-$(uname)-$(uname -m).sh -b -p $HOME/miniforge && \
     ln -s $HOME/miniforge/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \
     echo ". $HOME/miniforge/etc/profile.d/conda.sh" >> ~/.bashrc && \
     echo "conda activate base" >> ~/.bashrc
diff --git a/buildbucket/README.md b/buildbucket/README.md
index c5ebc01ffc03d7d2df1f808ca25ace9973e87e99..759aa0f0c9ef79953325a7e53d8bfd8d06f883ec 100644
--- a/buildbucket/README.md
+++ b/buildbucket/README.md
@@ -26,7 +26,7 @@ docker push gitlab.ssec.wisc.edu:5555/cspp_geo/cspp-geo-gridded-glm/buildbucket:
 To create the Gridded GLM package with the version number 1.0.0 in your current directory:
 
 ```bash
-docker run --rm -v "${PWD}":/dock gitlab.ssec.wisc.edu:5555/cspp_geo/cspp-geo-gridded-glm/buildbucket:latest ./package.sh 1.0.0
+docker run --rm -v "${PWD}":/dock --env GGLM_REF=develop gitlab.ssec.wisc.edu:5555/cspp_geo/cspp-geo-gridded-glm/buildbucket:latest ./package.sh 1.0.0
 ```
 
 If some things need to be customized you can specify various environment
diff --git a/buildbucket/buildbucket_environment.yaml b/buildbucket/buildbucket_environment.yaml
index 9b98a3b51bfd71800c19d5e2c9149ee19b0c5992..ce045c136602e60ecf3ab3046012aef9f043776a 100644
--- a/buildbucket/buildbucket_environment.yaml
+++ b/buildbucket/buildbucket_environment.yaml
@@ -25,7 +25,7 @@ dependencies:
   - shapely
   - pyorbital
   - pip:
-    - git+https://github.com/deeplycloudy/lmatools.git@1501be30c32b948a3ecd56adf1dfb2fc57316346
+    - git+https://github.com/deeplycloudy/lmatools.git@392eff5f15735be7b7f5ccc20d2835a617000117
     - git+https://github.com/deeplycloudy/stormdrain.git@3620621267215bf84b1f5199b4f395b430f309fc
-    - git+https://github.com/nbearson/glmtools.git@c61202aaaabd91b96cb98b5af7c59f05486cf4c6
-    - git+https://github.com/pytroll/satpy.git@v0.36.0
\ No newline at end of file
+    - git+https://github.com/levidpc/glmtools.git@afb6f8da0e72d5cad3fd2d7bb54ff790251d8832
+    - git+https://github.com/pytroll/satpy.git@v0.36.0
diff --git a/buildbucket/package.sh b/buildbucket/package.sh
index 829e5ff22c0306ab5f32c4ce43368949d740ff26..2b7bd542ea79db7b66c5cee4ee582679b17fffed 100755
--- a/buildbucket/package.sh
+++ b/buildbucket/package.sh
@@ -18,12 +18,18 @@
 
 if [ $# -eq 1 ]; then
     version=$1
+    unzipped_dir_version=$version
+elif [ $# -eq 2 ]; then
+    version=$1
+    unzipped_dir_version=$2
 else
-    echo "Usage: package.sh vX.Y.Z"
+    echo "Usage: package.sh vX.Y.Z (optionally) vA.B"
+    echo "X.Y.Z is the full package version while vA.B is what the directory will use for a version name when untarred."
     exit 1
 fi
 
 pkg_name=cspp-geo-gridded-glm-${version}
+major_minor_pkg_name=cspp-geo-gridded-glm-${unzipped_dir_version}
 DIST=${DIST:-"/dock"}
 GGLM_REPOS=${GGLM_REPOS:-"https://gitlab.ssec.wisc.edu/cspp_geo/cspp-geo-gridded-glm.git"}
 GGLM_REF=${GGLM_REF:-"master"}
@@ -77,6 +83,9 @@ cp $GGLM_DIR/PACKAGE_README.md ./README.md
 cp $GGLM_DIR/PACKAGE_LICENSE ./LICENSE
 cp $GGLM_DIR/bin/* ./bin/
 cp -r $GGLM_DIR/libexec/* ./libexec/
+echo "# __version__.py" > ./libexec/gridded_glm/__version__.py
+echo ""  >> ./libexec/gridded_glm/__version__.py
+echo "__version__ = \"$version\"" >> ./libexec/gridded_glm/__version__.py
 # Untar the tarball so we can put things where we want
 tar -xz -C ./libexec/python_runtime -f ../${conda_tb}
 # write a conda environment.yml to the python_runtime/ folder so that we can more easily audit what's included in our runtime between builds
@@ -99,6 +108,7 @@ if [ $MINIFY_TARBALL -ne 0 ]; then
 fi
 
 # Create tarball of package directory
-XZ_DEFAULTS="--threads=$(nproc)" tar -Jc --owner 0 --group 0 -f ${pkg_name}.tar.xz ${pkg_name}
+mv $pkg_name $major_minor_pkg_name
+XZ_DEFAULTS="--threads=$(nproc)" tar -Jc --owner 0 --group 0 -f ${pkg_name}.tar.xz ${major_minor_pkg_name}
 mv ${pkg_name}.tar.xz ${DIST}/
 make_dockerfile
diff --git a/gridded_glm/PACKAGE_README.md b/gridded_glm/PACKAGE_README.md
index 983b19e20cd5cfe679d9fb014aabdc652bec494f..e991e4f0f718671f5f1fcba9b437fc1c4d5a20ba 100644
--- a/gridded_glm/PACKAGE_README.md
+++ b/gridded_glm/PACKAGE_README.md
@@ -1,6 +1,26 @@
-# CSPP Geo Gridded GLM v1.0
+# CSPP Geo Gridded GLM v1.1
 
-CSPP Geo Gridded GLM software processes GOES-16 and GOES-17 Geostationary Lightning Mapper (GLM) Level 2+ LCFA products in mission standard format, generating a new set of products which have been gridded to the Advanced Baseline Imager (ABI) 2-km resolution, and are aggregated at one-minute intervals. Spatial extent information that is not readily available in the GLM L2+ data is recovered and used to create the gridded products.
+January 2025
+
+**Copyright (C) 2020-2025 Space Science and Engineering Center (SSEC), University 
+of Wisconsin-Madison.**
+
+University of Wisconsin-Madison
+Space Science and Engineering Center
+1225 West Dayton Street
+Madison, WI  53706
+
+CSPP Geo Software Lead: Levi Pfantz
+CSPP Geo Product Manager: Scott Lindstrom
+
+Contact: csppgeo.issues@ssec.wisc.edu
+Gridded GLM Documentation: https://cimss.ssec.wisc.edu/csppgeo/gridded-glm.html
+CSPP Geo Home Page: http://cimss.ssec.wisc.edu/csppgeo/
+
+
+## OVERVIEW
+
+CSPP Geo Gridded GLM software processes GOES-16, -17, -18 and -19 Geostationary Lightning Mapper (GLM) Level 2+ LCFA products in mission standard format, generating a new set of products which have been gridded to the Advanced Baseline Imager (ABI) 2-km resolution, and are aggregated at one-minute intervals. Spatial extent information that is not readily available in the GLM L2+ data is recovered and used to create the gridded products.
 
 The new gridded products are:
 
@@ -17,7 +37,7 @@ Questions and comments can be directed to <csppgeo.issues@ssec.wisc.edu>.
 
 ## ATTRIBUTION
 
-The software package is built on the open source glmtools software developed by Dr. Eric Bruning (Texas Tech University). Ongoing development of operational Gridded GLM products and related research is led by Dr. Scott Rudlosky (NOAA/NESDIS/STAR).
+The software package is built on the open source glmtools software developed by Dr. Eric Bruning (Texas Tech University). Development of operational Gridded GLM products and related research is led by Dr. Scott Rudlosky (NOAA/NESDIS/STAR).
 
 This release builds on two years of effort to refine the glmtools package in pre-operational demonstrations, and many of the contributors to that effort are coauthors on the paper that describes the GLM imagery creation approach in detail.
 
@@ -26,17 +46,32 @@ Bruning, E. C., Tillier, C. E., Edgington, S. F., Rudlosky, S. D., Zajic, J. K.,
 The developers wish to thank Lee Byerle and Joe Zajic, NWS TOWR-S team, for their assistance with tile development and AWIPS compatibility.
 
 
-## COPYRIGHT / LICENSE / DISCLAIMER
-
-Portions of the source code in this software package are: 
+## COPYRIGHT / LICENSE
 
-Copyright (C) 2020-2022 Space Science and Engineering Center (SSEC), University of Wisconsin-Madison.
+Portions of the source code in this software package are copyrighted by the 
+University of Wisconsin Regents. This package includes original software
+developed by the University of Wisconsin (UW), as well as third-party software 
+libraries. UW software is licensed under the GNU General Public License Version 3. 
+Other binary executable files and third-party source code are copyrighted and 
+licensed by their respective organizations, and are distributed consistent with 
+their licensing terms. For more information, refer to LICENSE and LICENSE.md files 
+distributed with the software package.
 
-Original UW/SSEC source code, scripts and automation included as part of this package are distributed under the GNU General Public License agreement version 3. 
 
-Binary executable files and third-party source code included as part of this software package are copyrighted and licensed by their respective organizations, and distributed consistent with their licensing terms.
+## DISCLAIMER
 
-The University of Wisconsin-Madison Space Science and Engineering Center (SSEC) makes no warranty of any kind with regard to the CSPP software or any accompanying documentation, including but not limited to the implied warranties of merchantability and fitness for a particular purpose. SSEC does not indemnify any infringement of copyright, patent, or trademark through the use or modification of this software. All risk of use is assumed by the user. Users agree not to hold SSEC, the University of Wisconsin-Madison, or any of its employees or assigns liable for any consequences resulting from the use of the CSPP software.
+The University of Wisconsin-Madison Space Science and Engineering Center 
+(SSEC) makes no warranty of any kind with regard to the CSPP Geo software or 
+any accompanying documentation, including but not limited to the implied 
+warranties of merchantability and fitness for a particular purpose. SSEC does
+not indemnify any infringement of copyright, patent, or trademark through the
+use or modification of this software.
+    
+There is no expressed or implied warranty made to anyone as to the suitability
+of this software for any purpose. All risk of use is assumed by the user. 
+Users agree not to hold SSEC, the University of Wisconsin-Madison, or any of
+its employees or assigns liable for any consequences resulting from the use of
+the CSPP Geo software.
 
 
 ## INSTALLATION
@@ -44,8 +79,8 @@ The University of Wisconsin-Madison Space Science and Engineering Center (SSEC)
 To install, extract the tarball and optionally add the bin directory to your PATH.
 
 ```
-tar xf cspp-geo-gridded-glm-1.0.tar.xz
-export PATH=$PATH:$PWD/cspp-geo-gridded-glm-1.0/bin
+tar xf cspp-geo-gridded-glm-1.1.0.tar.xz
+export PATH=$PATH:$PWD/cspp-geo-gridded-glm-1.1/bin
 ```
 
 A test data tarball can be downloaded from the same location as the software. Reference output is included. Refer to the EXAMPLES section below to run the test case.​
@@ -79,11 +114,11 @@ Create a single one-minute gridded product file by specifying three input 20-sec
 
 Create a single one-minute gridded product file by specifying only one of the three input 20-second GLM L2+ files ("realtime" mode)
 
-`cspp-geo-gglm.sh -1 /data/GLM-L2/2019299/17/OR_GLM-L2-LCFA_G16_s20192991759400_e20192991800000_c20192991800031.nc`
+`cspp-geo-gglm.sh -r /data/GLM-L2/2019299/17/OR_GLM-L2-LCFA_G16_s20192991759400_e20192991800000_c20192991800031.nc`
 
 Create a gridded product file and tiles
 
-`cspp-geo-gglm.sh -1 -t /data/GLM-L2/2019299/17/OR_GLM-L2-LCFA_G16_s20192991759400_e20192991800000_c20192991800031.nc`
+`cspp-geo-gglm.sh -r -t /data/GLM-L2/2019299/17/OR_GLM-L2-LCFA_G16_s20192991759400_e20192991800000_c20192991800031.nc`
 
 
 ## CAVEATS
diff --git a/gridded_glm/bin/cspp-geo-gglm.sh b/gridded_glm/bin/cspp-geo-gglm.sh
index 7320b710e66e155952b622f6265e74ca51026c26..69e8d5ac4b6bbff57d8f0d6eaba8aab2c16af580 100755
--- a/gridded_glm/bin/cspp-geo-gglm.sh
+++ b/gridded_glm/bin/cspp-geo-gglm.sh
@@ -1,6 +1,6 @@
 #!/usr/bin/env bash
 # encoding: utf-8
-# Copyright (C) 2019-2021 Space Science and Engineering Center (SSEC),
+# Copyright (C) 2019-2025 Space Science and Engineering Center (SSEC),
 #  University of Wisconsin-Madison.
 #
 #     This program is free software: you can redistribute it and/or modify
diff --git a/gridded_glm/libexec/env.sh b/gridded_glm/libexec/env.sh
index 6ee195beffbd127147741e83f85e70aebb6dc23e..755f761da703a33adf7fc1190ddf0384492cc0bb 100644
--- a/gridded_glm/libexec/env.sh
+++ b/gridded_glm/libexec/env.sh
@@ -1,6 +1,6 @@
 #!/usr/bin/env bash
 # encoding: utf-8
-# Copyright (C) 2019 Space Science and Engineering Center (SSEC),
+# Copyright (C) 2019-2025 Space Science and Engineering Center (SSEC),
 #  University of Wisconsin-Madison.
 #
 #     This program is free software: you can redistribute it and/or modify
diff --git a/gridded_glm/libexec/gridded_glm/_minute_gridder.py b/gridded_glm/libexec/gridded_glm/_minute_gridder.py
index 4e9cabd8924b4b391712b91057cbc2e0f2b46738..b8e23dd3d6ac596b6e8084dd67c311178b875293 100644
--- a/gridded_glm/libexec/gridded_glm/_minute_gridder.py
+++ b/gridded_glm/libexec/gridded_glm/_minute_gridder.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 """
-Copyright (C) 2020-2021 Space Science and Engineering Center (SSEC), University of Wisconsin-Madison.
+Copyright (C) 2020-2025 Space Science and Engineering Center (SSEC), University of Wisconsin-Madison.
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -55,6 +55,7 @@ from glmtools.grid.make_grids import grid_GLM_flashes
 from glmtools.io.glm import parse_glm_filename
 from lmatools.grid.fixed import get_GOESR_grid, get_GOESR_coordsys
 from statistics import create_statistics_file
+from __version__ import __version__
 
 import logging
 log = logging.getLogger(__name__)
@@ -65,6 +66,9 @@ warnings.filterwarnings("ignore")
 import dask
 dask.config.set(num_workers=1)
 
+GOES_SUPPORTED_SATS=['G16', 'G17', 'G18', 'G19']
+
+
 def create_parser():
     def bounded_float(afloat, inclusive_min, inclusive_max):
         value = float(afloat)
@@ -79,12 +83,12 @@ def create_parser():
     parser = argparse.ArgumentParser(prog=prog,
                                      description=parse_desc, 
                                      formatter_class=argparse.RawTextHelpFormatter) # RawTextHelpFormatter preserves our newlines in the example usage message
+    parser.add_argument('--version', action='version', version=__version__, help="show program's version identifier and exit")
     parser.add_argument('-v', '--verbose', dest='verbosity', action="count", default=0,
                         help="each occurrence increases verbosity 1 level through ERROR-WARNING-INFO-DEBUG\n"
                              "(default: ERROR)")
     parser.add_argument('-l', '--log', dest="log_fn", default=None,
-                        help="specify a log filename.\n"
-                             "(default: print to screen).")
+                        help="Redirect screen output to the specified log file. (default: off).")
     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', 'meso1', 'meso2'],
@@ -98,9 +102,7 @@ def create_parser():
     parser.add_argument('--ctr-lon', metavar='LONGITUDE',
                         type=partial(bounded_float, inclusive_min=-180, inclusive_max=180), help='center longitude (required for meso)')
     parser.add_argument('-r', "--realtime", default=False, action='store_true',
-                        help="enable 'realtime' mode, where we expect only one input file,\n"
-                        "find the surrounding trio, and automatically determine if a full minute\n"
-                        "of data is available (default: off)")
+                        help="Enable 'realtime' mode, where we expect onlyone input file and find\nother needed files if available. Can be called on each arriving\ninput file, but will only produce output for the 40s file, and\nonly if all 3 files for that minute are available. (default: off)")
     parser.add_argument('--system-environment-prefix', default="CG",
                         help="set the system environment prefix for the output grids (default: CG)")
     parser.add_argument('--system-environment-prefix-tiles', default="CSPP_OR",
@@ -116,17 +118,19 @@ def get_resolution(args):
     return resln
 
 
-# if provided "auto" position, we determine the sensor from the filename
-def get_goes_position(filenames):
-    if all("_G16_" in f for f in filenames):
-        return "east"
-    if all("_G17_" in f for f in filenames):
-        return "west"
-    if all("_G18_" in f for f in filenames):
-        return "west"
+def get_goes_position(files):
+  
+    position=""
+#Check that all files are the same position
+    for file in files:
+        new_position = Dataset(file, 'r').getncattr('orbital_slot')
+        if not position:
+            position=new_position
+        if not new_position == position:
+            raise ValueError("Input files contain a mix of positions. Check them and try again.")
+    position=position.split('-')[1]  
+    return position.lower()
 
-    # we require that all files are from the same sensor and raise an exception if not
-    raise ValueError("could not determine GOES position - did you provide a mix of satellites?")
 
 def glm_filename_to_minute(glm_filename):
     glminfo = parse_glm_filename(os.path.basename(glm_filename))
@@ -365,6 +369,8 @@ def grid_minute(minute, args):
             sector_id = "GOES_EAST"
         elif sector == "west":
             sector_id = "GOES_WEST"
+        elif sector == "test":
+            sector_id = "GOES_TEST"
         else:
             raise RuntimeError("could not determine sector_id")
 
@@ -441,14 +447,14 @@ def main():
         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.")
+            log.info("There are not yet three GLM files from this minute. This may be expected. Exiting.")
             # we expect people using realtime mode to run this on every file, so a return code of 0 is expected on a file before the end of the minute
             return 0
 
         # this allows a user to use realtime mode to process a large directory of GLM without
         # creating the same output file multiple times
         if sorted(fileglob)[-1] != args.filenames[0]:
-            log.error("This is not the last file from this minute. Exiting.")
+            log.info("This is not the last file from this minute. Exiting.")
             return 0
 
         args.filenames = fileglob
@@ -484,4 +490,4 @@ def main():
         return 0
 
 if __name__ == '__main__':
-    sys.exit(main())
\ No newline at end of file
+    sys.exit(main())
diff --git a/gridded_glm/libexec/gridded_glm/statistics.py b/gridded_glm/libexec/gridded_glm/statistics.py
index 2deea5df14e44ccdd00f2e8e4b6a3bdb8cdbb7a4..12128d5974ea70f276f1ea7b6cc2d6147e228c49 100644
--- a/gridded_glm/libexec/gridded_glm/statistics.py
+++ b/gridded_glm/libexec/gridded_glm/statistics.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 """
-Copyright (C) 2022 Space Science and Engineering Center (SSEC), University of Wisconsin-Madison.
+Copyright (C) 2022-2025 Space Science and Engineering Center (SSEC), University of Wisconsin-Madison.
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
diff --git a/tests/README.md b/tests/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..2d222e90ff073a5388b7cea670dfe9665d4dc3da
--- /dev/null
+++ b/tests/README.md
@@ -0,0 +1,10 @@
+# Testing
+
+Testing this is a little complicated.
+
+1. Build and extract a build from the hash you want to test
+2. Clone the repo at the same hash (makle sure you get git lfs files)
+3. Overwrite the repo's `gridded_glm/libexec/gridded_glm` directory with the build's `libexec/gridded_glm` directory
+4. Inside the build call `source libexec/env.sh`
+5. Run `pip isntall pytest -y`
+6. Navigate to the repo's `tests` directory and run `pytest`
\ No newline at end of file
diff --git a/tests/test-inputs/.gitignore b/tests/test-inputs/.gitignore
deleted file mode 100644
index 0bee393995d9dc961b2f064b033b21a163fc25c3..0000000000000000000000000000000000000000
--- a/tests/test-inputs/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# ignore all G18 test files until G18 data can be made public
-OR_GLM-L2-LCFA_G18*
diff --git a/tests/test-inputs/OR_GLM-L2-LCFA_G18_s20223141900000_e20223141900200_c20223141900209.nc b/tests/test-inputs/OR_GLM-L2-LCFA_G18_s20223141900000_e20223141900200_c20223141900209.nc
new file mode 100644
index 0000000000000000000000000000000000000000..dda450e4bf796bb06c87004a09d89c67c696c214
--- /dev/null
+++ b/tests/test-inputs/OR_GLM-L2-LCFA_G18_s20223141900000_e20223141900200_c20223141900209.nc
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9567ad519143956a5b55250d5c99b28ade9825be057e51b62586ef8fc3bacef9
+size 156288
diff --git a/tests/test-inputs/OR_GLM-L2-LCFA_G18_s20223141900200_e20223141900400_c20223141900415.nc b/tests/test-inputs/OR_GLM-L2-LCFA_G18_s20223141900200_e20223141900400_c20223141900415.nc
new file mode 100644
index 0000000000000000000000000000000000000000..0e6e9e9704602023d44d788120ef5cb7acbae0ce
--- /dev/null
+++ b/tests/test-inputs/OR_GLM-L2-LCFA_G18_s20223141900200_e20223141900400_c20223141900415.nc
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:71926b1555ec071d230fe9c6083a92535abe00387480155357af0e1e95dc5ba8
+size 152468
diff --git a/tests/test-inputs/OR_GLM-L2-LCFA_G18_s20223141900400_e20223141901000_c20223141901015.nc b/tests/test-inputs/OR_GLM-L2-LCFA_G18_s20223141900400_e20223141901000_c20223141901015.nc
new file mode 100644
index 0000000000000000000000000000000000000000..335c88a67cba0a9e21b48b054e5dc530a148e5fd
--- /dev/null
+++ b/tests/test-inputs/OR_GLM-L2-LCFA_G18_s20223141900400_e20223141901000_c20223141901015.nc
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2da2fbe749fc94dbc793d311ec7795d7106119b1f29b3cb336e9683976a875d3
+size 156288
diff --git a/tests/test-inputs/goes19-prelim/OR_GLM-L2-LCFA_G19_s20243230309000_e20243230309200_c20243230309216.nc b/tests/test-inputs/goes19-prelim/OR_GLM-L2-LCFA_G19_s20243230309000_e20243230309200_c20243230309216.nc
new file mode 100644
index 0000000000000000000000000000000000000000..0614b0e282cc08ba48a8dadff209389cc3dbde50
--- /dev/null
+++ b/tests/test-inputs/goes19-prelim/OR_GLM-L2-LCFA_G19_s20243230309000_e20243230309200_c20243230309216.nc
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bc421fa5a34e6b0829e06d66c43ca40de4e4c3f37677b6af23feee1eaf23e307
+size 161474
diff --git a/tests/test-inputs/goes19-prelim/OR_GLM-L2-LCFA_G19_s20243230309200_e20243230309400_c20243230309415.nc b/tests/test-inputs/goes19-prelim/OR_GLM-L2-LCFA_G19_s20243230309200_e20243230309400_c20243230309415.nc
new file mode 100644
index 0000000000000000000000000000000000000000..d1919a5a8f1dadfb3e106a4af4ebcb397a48538e
--- /dev/null
+++ b/tests/test-inputs/goes19-prelim/OR_GLM-L2-LCFA_G19_s20243230309200_e20243230309400_c20243230309415.nc
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:78df20aaed7f0cf232fb550abe1487328c6759d0fb0e385d70269bc99d78da2b
+size 155906
diff --git a/tests/test-inputs/goes19-prelim/OR_GLM-L2-LCFA_G19_s20243230309400_e20243230310000_c20243230310015.nc b/tests/test-inputs/goes19-prelim/OR_GLM-L2-LCFA_G19_s20243230309400_e20243230310000_c20243230310015.nc
new file mode 100644
index 0000000000000000000000000000000000000000..cf40dabb0c4fd05ab672bc73dfba87447b165d63
--- /dev/null
+++ b/tests/test-inputs/goes19-prelim/OR_GLM-L2-LCFA_G19_s20243230309400_e20243230310000_c20243230310015.nc
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9c305be00c7582c8a5f0d43bb11a62d04fdf7a58a4ce72440d53b4e7bc3dffa8
+size 156571
diff --git a/tests/test-inputs/issue-55-input/OR_GLM-L2-LCFA_G18_s20243121456000_e20243121456200_c20243121456209.nc b/tests/test-inputs/issue-55-input/OR_GLM-L2-LCFA_G18_s20243121456000_e20243121456200_c20243121456209.nc
new file mode 100644
index 0000000000000000000000000000000000000000..3f7b68f160e355e128714b050f4f51857c6bdb00
--- /dev/null
+++ b/tests/test-inputs/issue-55-input/OR_GLM-L2-LCFA_G18_s20243121456000_e20243121456200_c20243121456209.nc
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d1037be6c9c10b4c9f46a2657ee3c39ba1f5a29dbe863f88cb22bfd91f98362a
+size 68540
diff --git a/tests/test-inputs/issue-55-input/OR_GLM-L2-LCFA_G18_s20243121456200_e20243121456400_c20243121456410.nc b/tests/test-inputs/issue-55-input/OR_GLM-L2-LCFA_G18_s20243121456200_e20243121456400_c20243121456410.nc
new file mode 100644
index 0000000000000000000000000000000000000000..f4321feb0ad127587b2689aa02d9771f9777bd19
--- /dev/null
+++ b/tests/test-inputs/issue-55-input/OR_GLM-L2-LCFA_G18_s20243121456200_e20243121456400_c20243121456410.nc
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4ed9eefb12904e72a30c4d80443b6287130c4c26c3efd87aacb1d620cf37cb85
+size 137324
diff --git a/tests/test-inputs/issue-55-input/OR_GLM-L2-LCFA_G18_s20243121456400_e20243121457000_c20243121457009.nc b/tests/test-inputs/issue-55-input/OR_GLM-L2-LCFA_G18_s20243121456400_e20243121457000_c20243121457009.nc
new file mode 100644
index 0000000000000000000000000000000000000000..f8d862913b68306424a094276afcea6a69058e6c
--- /dev/null
+++ b/tests/test-inputs/issue-55-input/OR_GLM-L2-LCFA_G18_s20243121456400_e20243121457000_c20243121457009.nc
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3ac1e2454b0f22f9ef19a3c38e4d9b03371388cf4ac612ef27b3337b6f614646
+size 137324
diff --git a/tests/test_functionality.py b/tests/test_functionality.py
index ece6033a63ff0ef473a4e72a9a919963bf270d44..3fad9f4542717845aea0858bf41b1b41b2c0a3c1 100644
--- a/tests/test_functionality.py
+++ b/tests/test_functionality.py
@@ -131,9 +131,9 @@ def test_g17():
     assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G17_T23_20220920192200.nc', 1))
 
 def test_g18():
-    inputs = [os.path.join(TESTDIR, "test-inputs/OR_GLM-L2-LCFA_G18_s20222210000000_e20222210000200_c20222210000225.nc"),
-              os.path.join(TESTDIR, "test-inputs/OR_GLM-L2-LCFA_G18_s20222210000200_e20222210000400_c20222210000424.nc"),
-              os.path.join(TESTDIR, "test-inputs/OR_GLM-L2-LCFA_G18_s20222210000400_e20222210001000_c20222210001027.nc")]
+    inputs = [os.path.join(TESTDIR, "test-inputs/OR_GLM-L2-LCFA_G18_s20223141900000_e20223141900200_c20223141900209.nc"),
+              os.path.join(TESTDIR, "test-inputs/OR_GLM-L2-LCFA_G18_s20223141900200_e20223141900400_c20223141900415.nc"),
+              os.path.join(TESTDIR, "test-inputs/OR_GLM-L2-LCFA_G18_s20223141900400_e20223141901000_c20223141901015.nc")]
     for i in inputs:
         if not os.path.exists(i):
             warnings.warn(UserWarning("GOES-18 test files are not available in this environment. GOES-18 functionality has not been tested."))
@@ -148,22 +148,57 @@ def test_g18():
                                         ])
     assert completed_process.returncode == 0
     assert(check_fileglob("CG_GLM-L2-GLMF-M3_G18_*.nc", 1))
-    assert(check_fileglob("CSPP_OR_GLM-L2-GLMF-M3_G18_T*.nc", 15))
-
-    assert(check_fileglob("CG_GLM-L2-GLMF-M3_G18_s20222210000000_e20222210001000_c*.nc", 1))
-    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T04_20220809000100.nc', 1))
-    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T30_20220809000100.nc', 1))
-    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T18_20220809000100.nc', 1))
-    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T29_20220809000100.nc', 1))
-    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T49_20220809000100.nc', 1))
-    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T16_20220809000100.nc', 1))
-    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T27_20220809000100.nc', 1))
-    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T23_20220809000100.nc', 1))
-    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T17_20220809000100.nc', 1))
-    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T20_20220809000100.nc', 1))
-    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T08_20220809000100.nc', 1))
-    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T11_20220809000100.nc', 1))
-    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T21_20220809000100.nc', 1))
-    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T24_20220809000100.nc', 1))
-    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T10_20220809000100.nc', 1))
+    assert(check_fileglob("CSPP_OR_GLM-L2-GLMF-M3_G18_T*.nc", 10))
+
+    assert(check_fileglob("CG_GLM-L2-GLMF-M3_G18_s20223141900000_e20223141901000_c*.nc", 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T11_20221110190100.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T18_20221110190100.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T19_20221110190100.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T24_20221110190100.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T26_20221110190100.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T30_20221110190100.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T37_20221110190100.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T45_20221110190100.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T49_20221110190100.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G18_T52_20221110190100.nc', 1))
+
+def test_g19_sim():
+    inputs = [os.path.join(TESTDIR, "test-inputs/goes19-prelim/OR_GLM-L2-LCFA_G19_s20243230309000_e20243230309200_c20243230309216.nc"),
+              os.path.join(TESTDIR, "test-inputs/goes19-prelim/OR_GLM-L2-LCFA_G19_s20243230309200_e20243230309400_c20243230309415.nc"),
+              os.path.join(TESTDIR, "test-inputs/goes19-prelim/OR_GLM-L2-LCFA_G19_s20243230309400_e20243230310000_c20243230310015.nc")]
+    for i in inputs:
+        if not os.path.exists(i):
+            warnings.warn(UserWarning("GOES-19 prelim test files are not available in this environment. GOES-19 functionality has not been tested."))
+            return
+
+    completed_process = subprocess.run(['python',
+                                        MINUTE_GRIDDER,
+                                        "--create-tiles",
+                                        inputs[0],
+                                        inputs[1],
+                                        inputs[2],
+                                        ])
+    assert completed_process.returncode == 0
+    assert(check_fileglob("CG_GLM-L2-GLMF-M3_G19_*.nc", 1))
+    assert(check_fileglob("CSPP_OR_GLM-L2-GLMF-M3_G19_T*.nc", 15))
+
+    assert(check_fileglob("CG_GLM-L2-GLMF-M3_G19_s20243230309000_e20243230310000_c*.nc", 1))
+    assert(check_fileglob("CSPP_OR_GLM-L2-GLMF-M3_G19_statistics_e20241118031000.nc", 1))
+    
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G19_T15_20241118031000.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G19_T17_20241118031000.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G19_T21_20241118031000.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G19_T22_20241118031000.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G19_T23_20241118031000.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G19_T28_20241118031000.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G19_T29_20241118031000.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G19_T34_20241118031000.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G19_T35_20241118031000.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G19_T36_20241118031000.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G19_T40_20241118031000.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G19_T41_20241118031000.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G19_T47_20241118031000.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G19_T48_20241118031000.nc', 1))
+    assert(check_fileglob('CSPP_OR_GLM-L2-GLMF-M3_G19_T53_20241118031000.nc', 1))
+
 
diff --git a/tests/test_regressions.py b/tests/test_regressions.py
index 14c07251a85b5f7f98f442c16f1425fa2c9184c4..e1f554f466e6105a9032d39431187941640758a1 100644
--- a/tests/test_regressions.py
+++ b/tests/test_regressions.py
@@ -267,3 +267,14 @@ def test_issue38_no_valid_data():
     assert(ds.variables['total_energy'][:].all() is np.ma.masked)
     assert(ds.variables['total_energy'][:].all() is np.ma.masked)
     assert((ds.variables['DQF'][:] == 0).all())
+    
+# Check still succeeds when there is no lighting to be gridded
+def test_issue58_no_lightning():
+    completed_process = subprocess.run(['python',
+                                        MINUTE_GRIDDER,
+                                        os.path.join(TESTDIR, "test-inputs/issue-55-input/OR_GLM-L2-LCFA_G18_s20243121456000_e20243121456200_c20243121456209.nc"),
+                                        os.path.join(TESTDIR, "test-inputs/issue-55-input/OR_GLM-L2-LCFA_G18_s20243121456400_e20243121457000_c20243121457009.nc"),
+                                        os.path.join(TESTDIR, "test-inputs/issue-55-input/OR_GLM-L2-LCFA_G18_s20243121456200_e20243121456400_c20243121456410.nc"),
+                                        ])
+    assert completed_process.returncode == 0
+    assert(check_fileglob("CG_GLM-L2-GLMF-M3_G18_s20243121456000_e20243121457000_c*.nc", 1))