diff --git a/tile_gen/Dockerfile b/tile_gen/Dockerfile
index adb49510792227ef0d57b6716aec1a567b9f063b..7d7d9e89246b8ae94092aa98d1182dcee2801417 100644
--- a/tile_gen/Dockerfile
+++ b/tile_gen/Dockerfile
@@ -1,10 +1,14 @@
 FROM tiledb/tiledb-geospatial:latest
 
 # TODO may need the unzip command to be installed if not already
-RUN wget http://ssec.wisc.edu/~rayg/pub/amqpfind.zip && \
+RUN apt-get update && apt-get install -y unzip && \
+    wget http://ssec.wisc.edu/~rayg/pub/amqpfind.zip && \
     unzip amqpfind.zip && \
-    rm amqpfind.zip
+    rm amqpfind.zip && \
+    rm -rf /var/lib/apt/lists/*
 
+# FIXME: Remove once added to parent image
+RUN pip3 install shapely
 COPY tile_index.py .
 COPY generate_tiles.py .
 COPY run.sh .
diff --git a/tile_gen/README.md b/tile_gen/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..53d434fcadf46786ce05b04c5d4b2643d0759e73
--- /dev/null
+++ b/tile_gen/README.md
@@ -0,0 +1,18 @@
+# Tile Generation
+
+## Build
+
+```bash
+docker build -t gitlab.ssec.wisc.edu:5555/cspp_geo/cspp-geo-web-viewer/tile_gen:latest tile_gen/
+docker push gitlab.ssec.wisc.edu:5555/cspp_geo/cspp-geo-web-viewer/tile_gen:latest
+```
+
+## Usage
+
+```bash
+docker run -p 8888:80 -d gitlab.ssec.wisc.edu:5555/cspp_geo/cspp-geo-web-viewer/mapserver:latest
+```
+
+Then the main mapserv CGI script can be accessed with:
+
+http://localhost:8888/cgi-bin/mapserv
diff --git a/tile_gen/generate_tiles.py b/tile_gen/generate_tiles.py
index ed8fe09423e78a46f5d99c86d50890bf68b54f23..daeca8b114b83c33494b9ec4b5dceebd7c7a4bc9 100644
--- a/tile_gen/generate_tiles.py
+++ b/tile_gen/generate_tiles.py
@@ -26,7 +26,7 @@ def group_files(products, input_files):
 def remap_to_lonlat(itif, otif):
     """Remap a single geotiff by calling gdalwarp."""
     try:
-        subprocess.run(['gdalwarp', '-t_srs', 'EPSG:4326', itif, otif], check=True)
+        subprocess.run(['gdalwarp', '-multi', '-wo', 'NUM_THREADS=ALL_CPUS', '-t_srs', 'EPSG:4326', itif, otif], check=True)
     except subprocess.CalledProcessError:
         LOG.error("Could not remap geotiff %s -> %s" % (itif, otif))
         return None
@@ -57,15 +57,15 @@ def main():
                         help="Shapefile filename pattern to use and placed in the output directory. (default: '{product}.shp')")
     parser.add_argument('out_dir',
                         help="Output path to save tile information to (ex. '/data/tiles/{product}')")
-    parser.add_argument('input_files',
+    parser.add_argument('input_files', nargs="+",
                         help="Input geotiffs to generate tiles for (separate from product lists with '--')")
     args = parser.parse_args()
 
     groups = group_files(args.products, args.input_files)
     for prod, prod_files in groups.items():
-        out_dir = args.out_dir.format(prod)
+        out_dir = args.out_dir.format(product=prod)
         os.makedirs(out_dir, exist_ok=True)
-        shp_fn = args.shape_file.format(prod)
+        shp_fn = args.shape_file.format(product=prod)
         shp_pathname = os.path.join(out_dir, shp_fn)
 
         # remap if needed