diff --git a/isis/src/tgo/tsts/coloredMosaic/Makefile b/isis/src/tgo/tsts/coloredMosaic/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..b68428959bfb7bd3804a755a4ed2347558dbc02b
--- /dev/null
+++ b/isis/src/tgo/tsts/coloredMosaic/Makefile
@@ -0,0 +1,141 @@
+# This tests the production of a CaSSIS uncontrolled multi-color mosaic from ingestion to
+# export to pds4.
+#
+# @history 2018-02-22 Adam Goins - Original version, many things borrowed from
+#                             uncontrolled single-color cat test.
+#
+
+INGEST = tgocassis2isis
+SPICE = spiceinit
+MAPFILE = mosrange
+PROJECT = cam2map
+MOSAIC = automos
+EXPORT = isis2pds
+GETKEY = getkey
+CUBEIT = cubeit
+
+include $(ISISROOT)/make/isismake.tsts
+
+commands:
+  # Ingest Red
+	$(LS) $(INPUT)/*-RED-*.xml > $(OUTPUT)/redInputs.lis;
+	$(SED) 's/^.*input\///g' $(OUTPUT)/redInputs.lis > $(OUTPUT)/redRelative.lis;
+	$(SED) 's/\.xml//g' $(OUTPUT)/redRelative.lis > $(OUTPUT)/redBasenames.lis;
+	$(INGEST) $(TSTARGS) from=$(INPUT)/\$$\1.xml \
+            to=$(OUTPUT)/$\$$\1.cub -batchlist=$(OUTPUT)/redBasenames.lis > /dev/null;
+	$(SPICE) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub \
+            SPKPREDICTED=true CKPREDICTED=true -batchlist=$(OUTPUT)/redBasenames.lis > /dev/null;
+	$(LS) $(OUTPUT)/*-RED-*.cub > $(OUTPUT)/redCubes.lis;
+
+	# Ingest Blu
+	$(LS) $(INPUT)/*-BLU-*.xml > $(OUTPUT)/bluInputs.lis;
+	$(SED) 's/^.*input\///g' $(OUTPUT)/bluInputs.lis > $(OUTPUT)/bluRelative.lis;
+	$(SED) 's/\.xml//g' $(OUTPUT)/bluRelative.lis > $(OUTPUT)/bluBasenames.lis;
+	$(INGEST) $(TSTARGS) from=$(INPUT)/\$$\1.xml \
+            to=$(OUTPUT)/$\$$\1.cub -batchlist=$(OUTPUT)/bluBasenames.lis > /dev/null;
+	$(SPICE) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub \
+           SPKPREDICTED=true CKPREDICTED=true -batchlist=$(OUTPUT)/bluBasenames.lis > /dev/null;
+	$(LS) $(OUTPUT)/*-BLU-*.cub > $(OUTPUT)/bluCubes.lis;
+
+	# Ingest Pan
+	$(LS) $(INPUT)/*-PAN-*.xml > $(OUTPUT)/panInputs.lis;
+	$(SED) 's/^.*input\///g' $(OUTPUT)/panInputs.lis > $(OUTPUT)/panRelative.lis;
+	$(SED) 's/\.xml//g' $(OUTPUT)/panRelative.lis > $(OUTPUT)/panBasenames.lis;
+	$(INGEST) $(TSTARGS) from=$(INPUT)/\$$\1.xml \
+            to=$(OUTPUT)/$\$$\1.cub -batchlist=$(OUTPUT)/panBasenames.lis > /dev/null;
+	$(SPICE) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub \
+	    SPKPREDICTED=true CKPREDICTED=true -batchlist=$(OUTPUT)/panBasenames.lis > /dev/null;
+	$(LS) $(OUTPUT)/*-PAN-*.cub > $(OUTPUT)/panCubes.lis;
+
+	# Ingest Nir
+	$(LS) $(INPUT)/*-NIR-*.xml > $(OUTPUT)/nirInputs.lis;
+	$(SED) 's/^.*input\///g' $(OUTPUT)/nirInputs.lis > $(OUTPUT)/nirRelative.lis;
+	$(SED) 's/\.xml//g' $(OUTPUT)/nirRelative.lis > $(OUTPUT)/nirBasenames.lis;
+	$(INGEST) $(TSTARGS) from=$(INPUT)/\$$\1.xml \
+            to=$(OUTPUT)/$\$$\1.cub -batchlist=$(OUTPUT)/nirBasenames.lis > /dev/null;
+	$(SPICE) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub \
+            SPKPREDICTED=true CKPREDICTED=true -batchlist=$(OUTPUT)/nirBasenames.lis > /dev/null;
+	$(LS) $(OUTPUT)/*-NIR-*.cub > $(OUTPUT)/nirCubes.lis;
+
+	# MAP FILE
+	# Create list of all files.
+	$(LS) $(INPUT)/*.xml > $(OUTPUT)/allInputs.lis;
+	$(SED) 's/^.*input\//output\//g' $(OUTPUT)/allInputs.lis > $(OUTPUT)/allRelative.lis;
+	$(SED) 's/\.xml/.cub/g' $(OUTPUT)/allRelative.lis > $(OUTPUT)/allCubes.lis;
+	$(MAPFILE) $(TSTARGS) fromlist=$(OUTPUT)/allCubes.lis to=$(OUTPUT)/equi.map > /dev/null;
+
+	# MOSAICS
+	# Create Red Mosaic
+	$(PROJECT) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub to=$(OUTPUT)/$\$$\1_redEqui.cub \
+            map=$(OUTPUT)/equi.map \
+            pixres=mpp resolution=200 -batchlist=$(OUTPUT)/redBasenames.lis > /dev/null;
+	$(LS) $(OUTPUT)/*redEqui.cub > $(OUTPUT)/redMosaic.lis;
+	$(MOSAIC) $(TSTSARGS) fromlist=$(OUTPUT)/redMosaic.lis \
+    mosaic=$(OUTPUT)/redCassisMosaic.cub grange='USER' \
+    MAXLAT = `$(GETKEY) from=$(OUTPUT)/equi.map keyword=MaximumLatitude grpname=Mapping`  \
+    MINLAT = `$(GETKEY) from=$(OUTPUT)/equi.map keyword=MinimumLatitude grpname=Mapping`  \
+    MAXLON = `$(GETKEY) from=$(OUTPUT)/equi.map keyword=MaximumLongitude grpname=Mapping` \
+    MINLON = `$(GETKEY) from=$(OUTPUT)/equi.map keyword=MinimumLongitude grpname=Mapping` > /dev/null;
+
+# Create Blu Mosaic
+	$(PROJECT) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub to=$(OUTPUT)/$\$$\1_bluEqui.cub \
+             map=$(OUTPUT)/equi.map \
+             pixres=mpp resolution=200 -batchlist=$(OUTPUT)/bluBasenames.lis > /dev/null;
+	$(LS) $(OUTPUT)/*bluEqui.cub > $(OUTPUT)/bluMosaic.lis;
+	$(MOSAIC) $(TSTSARGS) fromlist=$(OUTPUT)/bluMosaic.lis \
+    mosaic=$(OUTPUT)/bluCassisMosaic.cub grange='USER' \
+    MAXLAT = `$(GETKEY) from=$(OUTPUT)/equi.map keyword=MaximumLatitude grpname=Mapping`  \
+    MINLAT = `$(GETKEY) from=$(OUTPUT)/equi.map keyword=MinimumLatitude grpname=Mapping`  \
+    MAXLON = `$(GETKEY) from=$(OUTPUT)/equi.map keyword=MaximumLongitude grpname=Mapping` \
+    MINLON = `$(GETKEY) from=$(OUTPUT)/equi.map keyword=MinimumLongitude grpname=Mapping` > /dev/null;
+
+# Create Pan Mosaic
+	$(PROJECT) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub to=$(OUTPUT)/$\$$\1_panEqui.cub \
+            map=$(OUTPUT)/equi.map \
+            pixres=mpp resolution=200 -batchlist=$(OUTPUT)/panBasenames.lis > /dev/null;
+	$(LS) $(OUTPUT)/*panEqui.cub > $(OUTPUT)/panMosaic.lis;
+	$(MOSAIC) $(TSTSARGS) fromlist=$(OUTPUT)/panMosaic.lis \
+   mosaic=$(OUTPUT)/panCassisMosaic.cub grange='USER' \
+   MAXLAT = `$(GETKEY) from=$(OUTPUT)/equi.map keyword=MaximumLatitude grpname=Mapping`  \
+   MINLAT = `$(GETKEY) from=$(OUTPUT)/equi.map keyword=MinimumLatitude grpname=Mapping`  \
+   MAXLON = `$(GETKEY) from=$(OUTPUT)/equi.map keyword=MaximumLongitude grpname=Mapping` \
+   MINLON = `$(GETKEY) from=$(OUTPUT)/equi.map keyword=MinimumLongitude grpname=Mapping` > /dev/null;
+
+# Create Nir Mosaic
+	$(PROJECT) $(TSTARGS) from=$(OUTPUT)/$\$$\1.cub to=$(OUTPUT)/$\$$\1_nirEqui.cub \
+             map=$(OUTPUT)/equi.map \
+             pixres=mpp resolution=200 -batchlist=$(OUTPUT)/nirBasenames.lis > /dev/null;
+	$(LS) $(OUTPUT)/*nirEqui.cub > $(OUTPUT)/nirMosaic.lis;
+	$(MOSAIC) $(TSTSARGS) fromlist=$(OUTPUT)/nirMosaic.lis \
+    mosaic=$(OUTPUT)/nirCassisMosaic.cub grange='USER' \
+    MAXLAT = `$(GETKEY) from=$(OUTPUT)/equi.map keyword=MaximumLatitude grpname=Mapping`  \
+    MINLAT = `$(GETKEY) from=$(OUTPUT)/equi.map keyword=MinimumLatitude grpname=Mapping`  \
+    MAXLON = `$(GETKEY) from=$(OUTPUT)/equi.map keyword=MaximumLongitude grpname=Mapping` \
+    MINLON = `$(GETKEY) from=$(OUTPUT)/equi.map keyword=MinimumLongitude grpname=Mapping` > /dev/null;
+
+# Create full color mos
+	$(LS) $(OUTPUT)/*CassisMosaic.cub > $(OUTPUT)/mosaicList.lis;
+	$(CUBEIT) fromlist=$(OUTPUT)/mosaicList.lis to=$(OUTPUT)/coloredMosaic.cub > /dev/null;
+	$(EXPORT) $(TSTSARGS) from=$(OUTPUT)/coloredMosaic.cub to=$(OUTPUT)/coloredMosaic \
+             pdsversion=pds4 > /dev/null;
+	$(SED) 's+\Product_Observational.*>+\Product_Observational>+' \
+            $(OUTPUT)/coloredMosaic.xml > $(OUTPUT)/coloredMosaic1.txt;
+	$(SED) 's+\FSW_HEADER.*>+\FSW_HEADER>+' \
+            $(OUTPUT)/coloredMosaic1.txt > $(OUTPUT)/coloredMosaic2.txt;
+	$(SED) 's+\PEHK_HEADER.*>+\PEHK_HEADER>+' \
+            $(OUTPUT)/coloredMosaic2.txt > $(OUTPUT)/coloredMosaic3.txt;
+	$(SED) 's+\Modification_Detail.*>+\Modification_Detail>+' \
+            $(OUTPUT)/coloredMosaic3.txt > $(OUTPUT)/coloredMosaic.txt;
+
+	# Cleanup
+	$(RM) $(OUTPUT)/coloredMosaic.xml;
+	$(RM) $(OUTPUT)/coloredMosaic1.txt;
+	$(RM) $(OUTPUT)/coloredMosaic2.txt;
+	$(RM) $(OUTPUT)/coloredMosaic3.txt;
+	$(RM) $(OUTPUT)/*.lis;
+	$(RM) $(OUTPUT)/CAS-MCO*.cub;
+	$(RM) $(OUTPUT)/bluCassisMosaic.cub;
+	$(RM) $(OUTPUT)/nirCassisMosaic.cub;
+	$(RM) $(OUTPUT)/panCassisMosaic.cub;
+	$(RM) $(OUTPUT)/redCassisMosaic.cub;
+	$(MV) $(OUTPUT)/equi.map $(OUTPUT)/equi.pvl