Index: branches/simtest_nebulous_branches/ppSim/src/ppSimSequence.c
===================================================================
--- branches/simtest_nebulous_branches/ppSim/src/ppSimSequence.c	(revision 25061)
+++ branches/simtest_nebulous_branches/ppSim/src/ppSimSequence.c	(revision 25069)
@@ -180,17 +180,17 @@
 
         if (!strcasecmp (type, "BIAS")) {
-            ppSimSequenceBias (simfile, inject, sequence, i, rng, path, basename, ppSimCommandReal, injectCommandReal);
+            ppSimSequenceBias (simfile, inject, sequence, i, rng, path, basename, ppSimCommandReal, injectCommandReal, camera);
             continue;
         }
         if (!strcasecmp (type, "DARK")) {
-            ppSimSequenceDark (simfile, inject, sequence, i, rng, path, basename, ppSimCommandReal, injectCommandReal);
+            ppSimSequenceDark (simfile, inject, sequence, i, rng, path, basename, ppSimCommandReal, injectCommandReal, camera);
             continue;
         }
         if (!strcasecmp (type, "FLAT")) {
-            ppSimSequenceFlat (simfile, inject, sequence, i, rng, path, basename, ppSimCommandReal, injectCommandReal);
+            ppSimSequenceFlat (simfile, inject, sequence, i, rng, path, basename, ppSimCommandReal, injectCommandReal, camera);
             continue;
         }
         if (!strcasecmp (type, "OBJECT")) {
-            ppSimSequenceObject (simfile, inject, sequence, i, rng, path, basename, ppSimCommandReal, injectCommandReal);
+            ppSimSequenceObject (simfile, inject, sequence, i, rng, path, basename, ppSimCommandReal, injectCommandReal, camera);
             continue;
         }
Index: branches/simtest_nebulous_branches/ppSim/src/ppSimSequence.h
===================================================================
--- branches/simtest_nebulous_branches/ppSim/src/ppSimSequence.h	(revision 25061)
+++ branches/simtest_nebulous_branches/ppSim/src/ppSimSequence.h	(revision 25069)
@@ -12,8 +12,8 @@
 #include <psastro.h>
 
-bool ppSimSequenceBias 	 (FILE *simfile, FILE *inject, psMetadata *sequence, int nSeq, psRandom *rng, const char *path, const char *basename, const char *ppSimCommand, const char *injectCommand);
-bool ppSimSequenceDark 	 (FILE *simfile, FILE *inject, psMetadata *sequence, int nSeq, psRandom *rng, const char *path, const char *basename, const char *ppSimCommand, const char *injectCommand);
-bool ppSimSequenceFlat 	 (FILE *simfile, FILE *inject, psMetadata *sequence, int nSeq, psRandom *rng, const char *path, const char *basename, const char *ppSimCommand, const char *injectCommand);
-bool ppSimSequenceObject (FILE *simfile, FILE *inject, psMetadata *sequence, int nSeq, psRandom *rng, const char *path, const char *basename, const char *ppSimCommand, const char *injectCommand);
+bool ppSimSequenceBias 	 (FILE *simfile, FILE *inject, psMetadata *sequence, int nSeq, psRandom *rng, const char *path, const char *basename, const char *ppSimCommand, const char *injectCommand, const char *camera);
+bool ppSimSequenceDark 	 (FILE *simfile, FILE *inject, psMetadata *sequence, int nSeq, psRandom *rng, const char *path, const char *basename, const char *ppSimCommand, const char *injectCommand, const char *camera);
+bool ppSimSequenceFlat 	 (FILE *simfile, FILE *inject, psMetadata *sequence, int nSeq, psRandom *rng, const char *path, const char *basename, const char *ppSimCommand, const char *injectCommand, const char *camera);
+bool ppSimSequenceObject (FILE *simfile, FILE *inject, psMetadata *sequence, int nSeq, psRandom *rng, const char *path, const char *basename, const char *ppSimCommand, const char *injectCommand, const char *camera);
 
 #endif
Index: branches/simtest_nebulous_branches/ppSim/src/ppSimSequenceBias.c
===================================================================
--- branches/simtest_nebulous_branches/ppSim/src/ppSimSequenceBias.c	(revision 25061)
+++ branches/simtest_nebulous_branches/ppSim/src/ppSimSequenceBias.c	(revision 25069)
@@ -1,5 +1,5 @@
 # include "ppSimSequence.h"
 
-bool ppSimSequenceBias (FILE *simfile, FILE *inject, psMetadata *sequence, int nSeq, psRandom *rng, const char *path, const char *basename, const char *ppSimCommand, const char *injectCommand) {
+bool ppSimSequenceBias (FILE *simfile, FILE *inject, psMetadata *sequence, int nSeq, psRandom *rng, const char *path, const char *basename, const char *ppSimCommand, const char *injectCommand, const char *camera) {
 
     bool status, setLevel, setRange;
@@ -14,35 +14,64 @@
     int nImage = 0;
     for (int i = 0; i < nImages; i++) {
-	    
-	// define the output filename
-	psString filename = NULL;
-	if (path) {
-	    psStringAppend (&filename, "%s/%s.%03d.%03d", path, basename, nSeq, nImage);
-	} else {
-	    psStringAppend (&filename, "%s.%03d.%03d", basename, nSeq, nImage);
-	}
+	        
+	    // define the output filename
+	    psString filename = NULL;
+	    if (path) {
+	        psStringAppend (&filename, "%s/%s.%03d.%03d", path, basename, nSeq, nImage);
+	    } else {
+	        psStringAppend (&filename, "%s.%03d.%03d", basename, nSeq, nImage);
+	    }
 
-	// define the ppSim command
-	psString command = NULL;
+	    // define the ppSim command
+	    psString command = NULL;
 
-	psStringAppend (&command, "%s -type BIAS", ppSimCommand);
+	    psStringAppend (&command, "%s -type BIAS", ppSimCommand);
 
-	if (setLevel) psStringAppend (&command, " -biaslevel %f", level);
-	if (setRange) psStringAppend (&command, " -biasrange %f", range);
-      
-	psStringAppend (&command, " %s", filename);
+	    if (setLevel) psStringAppend (&command, " -biaslevel %f", level);
+	    if (setRange) psStringAppend (&command, " -biasrange %f", range);
+          
+	    psStringAppend (&command, " %s", filename);
 
-	fprintf (simfile, "%s\n", command);
-	psFree (command);
+	    fprintf (simfile, "%s\n", command);
+	    psFree (command);
+			        
+        // define the inject command
+		// path should be dirname/filename
+		// for SIMTEST camera nebulous insertion append .fits
+		// SIMMOSAIC nebulous insertions are appended with ChipXX.fits
+		// non-nebulous insertions use *.fits
+		const char *neb = "neb";
+
+		if (strncmp (path, neb, 3) == 0) {
 			    
-	// define the inject command
-	// path should be dirname/filename
-	command = psStringCopy (injectCommand);
-	psStringAppend (&command, " %s*.fits",    filename);
-	fprintf (inject, "%s\n", command);
-	psFree (command);
-	psFree (filename);
+            if (strcmp (camera, "SIMTEST") == 0) {
+                command = psStringCopy (injectCommand); 
+                psStringAppend (&command, " %s.fits", filename);
+                fprintf (inject, "%s\n", command);
+			            
+            } else if (strcmp (camera, "SIMMOSAIC") == 0) {
+                for (int i = 0; i < 2; i++) {
+                    for (int j = 0; j < 2; j++) {
+                        command = psStringCopy (injectCommand);
+			            psStringAppend (&command, " %s.Chip%d%d.fits", filename, i, j);
+			            fprintf (inject, "%s\n", command);
+				        command = NULL;
+					}
+                }
+				        
+            } else {
+                psLogMsg ("ppSimSequence", PS_LOG_WARN, "unsupported camera type for nebulous insertion");
+				exit (1);
+            }
+            
+        } else {
+            command = psStringCopy (injectCommand);
+            psStringAppend (&command, " %s*.fits",    filename);
+            fprintf (inject, "%s\n", command);
+        }
 
-	nImage ++;
+        psFree (command);
+        psFree (filename);
+        nImage ++;
     }
     return true;
Index: branches/simtest_nebulous_branches/ppSim/src/ppSimSequenceDark.c
===================================================================
--- branches/simtest_nebulous_branches/ppSim/src/ppSimSequenceDark.c	(revision 25061)
+++ branches/simtest_nebulous_branches/ppSim/src/ppSimSequenceDark.c	(revision 25069)
@@ -1,5 +1,5 @@
 # include "ppSimSequence.h"
 
-bool ppSimSequenceDark (FILE *simfile, FILE *inject, psMetadata *sequence, int nSeq, psRandom *rng, const char *path, const char *basename, const char *ppSimCommand, const char *injectCommand) {
+bool ppSimSequenceDark (FILE *simfile, FILE *inject, psMetadata *sequence, int nSeq, psRandom *rng, const char *path, const char *basename, const char *ppSimCommand, const char *injectCommand, const char *camera) {
 
     bool status, setRate;
@@ -9,6 +9,6 @@
     min = psMetadataLookupF32 (&status, sequence, "DARK.MIN");
     if (status) {
-	max = psMetadataLookupF32 (&status, sequence, "DARK.MAX");
-	setRate = true;
+		max = psMetadataLookupF32 (&status, sequence, "DARK.MAX");
+		setRate = true;
     }
 
@@ -22,45 +22,74 @@
     for (int i = 0; i < nImages->n; i++) {
 	    
-	float exptime = exptimes->data.F32[i];
-	float n = nImages->data.S32[i];
+		float exptime = exptimes->data.F32[i];
+		float n = nImages->data.S32[i];
 
-	for (int j = 0; j < n; j++) {
+	    for (int j = 0; j < n; j++) {
 
-	    // XXX need to add output filename
-	    psString filename = NULL;
-	    if (path) {
-		psStringAppend (&filename, "%s/%s.%03d.%03d", path, basename, nSeq, nImage);
-	    } else {
-		psStringAppend (&filename, "%s.%03d.%03d", basename, nSeq, nImage);
-	    }
+	        // XXX need to add output filename
+	        psString filename = NULL;
+	        if (path) {
+		    	psStringAppend (&filename, "%s/%s.%03d.%03d", path, basename, nSeq, nImage);
+	        } else {
+		    	psStringAppend (&filename, "%s.%03d.%03d", basename, nSeq, nImage);
+	        }
 
-	    // define the ppSim command
-	    psString command = NULL;
+	        // define the ppSim command
+	        psString command = NULL;
 
-	    psStringAppend (&command, "%s -type DARK", ppSimCommand);
-      
-	    if (setRate) {
-		double frnd = psRandomUniform(rng);
-		float rate = min + (max - min)*frnd;
-		psStringAppend (&command, " -darkrate %f", rate);
-	    }
+	        psStringAppend (&command, "%s -type DARK", ppSimCommand);
+          
+	        if (setRate) {
+				double frnd = psRandomUniform(rng);
+				float rate = min + (max - min)*frnd;
+				psStringAppend (&command, " -darkrate %f", rate);
+	        }
 
-	    psStringAppend (&command, " -exptime %f", exptime);
+	        psStringAppend (&command, " -exptime %f", exptime);
 
-	    psStringAppend (&command, " %s", filename);
+	        psStringAppend (&command, " %s", filename);
 
-	    fprintf (simfile, "%s\n", command);
-	    psFree (command);
-			    
-	    // define the inject command
-	    // path should be dirname/filename
-	    command = psStringCopy (injectCommand);
-	    psStringAppend (&command, " %s*.fits",    filename);
-	    fprintf (inject, "%s\n", command);
-	    psFree (command);
-	    psFree (filename);
+	        fprintf (simfile, "%s\n", command);
+	        psFree (command);
+			        
+	        // define the inject command
+		    // path should be dirname/filename
+		    // for SIMTEST camera nebulous insertion append .fits
+		    // SIMMOSAIC nebulous insertions are appended with ChipXX.fits
+		    // non-nebulous insertions use *.fits
+		    const char *neb = "neb";
 
-	    nImage ++;
-	}
+		    if (strncmp (path, neb, 3) == 0) {
+			        
+                if (strcmp (camera, "SIMTEST") == 0) {
+                    command = psStringCopy (injectCommand); 
+                    psStringAppend (&command, " %s.fits", filename);
+                    fprintf (inject, "%s\n", command);
+			                
+                } else if (strcmp (camera, "SIMMOSAIC") == 0) {
+                    for (int i = 0; i < 2; i++) {
+                        for (int j = 0; j < 2; j++) {
+                            command = psStringCopy (injectCommand);
+			                psStringAppend (&command, " %s.Chip%d%d.fits", filename, i, j);
+			                fprintf (inject, "%s\n", command);
+				            command = NULL;
+					    }
+                    }
+				            
+                } else {
+                    psLogMsg ("ppSimSequence", PS_LOG_WARN, "unsupported camera type for nebulous insertion");
+                    exit (1);
+                }
+                
+            } else {
+                command = psStringCopy (injectCommand);
+                psStringAppend (&command, " %s*.fits",    filename);
+                fprintf (inject, "%s\n", command);
+            }
+
+            psFree (command);
+            psFree (filename);
+            nImage ++;
+        }
     }
     return true;
Index: branches/simtest_nebulous_branches/ppSim/src/ppSimSequenceFlat.c
===================================================================
--- branches/simtest_nebulous_branches/ppSim/src/ppSimSequenceFlat.c	(revision 25061)
+++ branches/simtest_nebulous_branches/ppSim/src/ppSimSequenceFlat.c	(revision 25069)
@@ -1,5 +1,5 @@
 # include "ppSimSequence.h"
 
-bool ppSimSequenceFlat (FILE *simfile, FILE *inject, psMetadata *sequence, int nSeq, psRandom *rng, const char *path, const char *basename, const char *ppSimCommand, const char *injectCommand) {
+bool ppSimSequenceFlat (FILE *simfile, FILE *inject, psMetadata *sequence, int nSeq, psRandom *rng, const char *path, const char *basename, const char *ppSimCommand, const char *injectCommand, const char *camera) {
 
     bool status;
@@ -12,6 +12,6 @@
 
     if (filters->n != exptimes->n) {
-	psLogMsg ("ppSimSequence", PS_LOG_WARN, "mis-match in filter and exptime lists");
-	exit (1);
+	    psLogMsg ("ppSimSequence", PS_LOG_WARN, "mis-match in filter and exptime lists");
+	    exit (1);
     }
 
@@ -24,38 +24,66 @@
     for (int i = 0; i < filters->n; i++) {
 	    
-	// loop over the filters & exposure times
-	for (int j = 0; j < nSetup; j++) {
-	    
-	    // define the output filename
-	    psString filename = NULL;
-	    if (path) {
-		psStringAppend (&filename, "%s/%s.%03d.%03d", path, basename, nSeq, nImage);
-	    } else {
-		psStringAppend (&filename, "%s.%03d.%03d", basename, nSeq, nImage);
+	    // loop over the filters & exposure times
+	    for (int j = 0; j < nSetup; j++) {
+	        
+	        // define the output filename
+	        psString filename = NULL;
+	        if (path) {
+		        psStringAppend (&filename, "%s/%s.%03d.%03d", path, basename, nSeq, nImage);
+	        } else {
+		        psStringAppend (&filename, "%s.%03d.%03d", basename, nSeq, nImage);
+	        }
+
+	        // define the ppSim comand
+	        psString command = NULL;
+
+	        psStringAppend (&command, "%s -type FLAT", ppSimCommand);
+
+	        psStringAppend (&command, " -filter %s", (char *) filters->data[i]);
+	        psStringAppend (&command, " -exptime %f", exptimes->data.F32[i]);
+
+	        psStringAppend (&command, " %s", filename);
+
+	        fprintf (simfile, "%s\n", command);
+	        psFree (command);
+
+			// define the inject command
+	        // path should be dirname/filename
+			// for SIMTEST camera nebulous insertion append .fits
+			// SIMMOSAIC nebulous insertions are appended with ChipXX.fits
+			// non-nebulous insertions use *.fits
+			const char *neb = "neb";
+
+			if (strncmp (path, neb, 3) == 0) {
+				if (strcmp (camera, "SIMTEST") == 0) {
+					command = psStringCopy (injectCommand); 
+					psStringAppend (&command, " %s.fits", filename);
+					fprintf (inject, "%s\n", command);
+			                
+				} else if (strcmp (camera, "SIMMOSAIC") == 0) {
+					for (int i = 0; i < 2; i++) {
+						for (int j = 0; j < 2; j++) {
+							command = psStringCopy (injectCommand);
+			        		psStringAppend (&command, " %s.Chip%d%d.fits", filename, i, j);
+							fprintf (inject, "%s\n", command);
+				        	command = NULL;
+						}
+					}
+				            
+                } else {
+                    psLogMsg ("ppSimSequence", PS_LOG_WARN, "unsupported camera type for nebulous insertion");
+                    exit (1);
+                }
+                
+            } else {
+                command = psStringCopy (injectCommand);
+                psStringAppend (&command, " %s*.fits",    filename);
+                fprintf (inject, "%s\n", command);
+            }
+        
+			psFree (command);
+            psFree (filename);
+            nImage ++;
 	    }
-
-	    // define the ppSim comand
-	    psString command = NULL;
-
-	    psStringAppend (&command, "%s -type FLAT", ppSimCommand);
-
-	    psStringAppend (&command, " -filter %s", (char *) filters->data[i]);
-	    psStringAppend (&command, " -exptime %f", exptimes->data.F32[i]);
-
-	    psStringAppend (&command, " %s", filename);
-
-	    fprintf (simfile, "%s\n", command);
-	    psFree (command);
-
-	    // define the inject command
-	    // path should be dirname/filename
-	    command = psStringCopy (injectCommand);
-	    psStringAppend (&command, " %s*.fits",    filename);
-	    fprintf (inject, "%s\n", command);
-	    psFree (command);
-	    psFree (filename);
-
-	    nImage ++;
-	}
     }
     return true;
Index: branches/simtest_nebulous_branches/ppSim/src/ppSimSequenceObject.c
===================================================================
--- branches/simtest_nebulous_branches/ppSim/src/ppSimSequenceObject.c	(revision 25061)
+++ branches/simtest_nebulous_branches/ppSim/src/ppSimSequenceObject.c	(revision 25069)
@@ -1,5 +1,5 @@
 # include "ppSimSequence.h"
 
-bool ppSimSequenceObject (FILE *simfile, FILE *inject, psMetadata *sequence, int nSeq, psRandom *rng, const char *path, const char *basename, const char *ppSimCommand, const char *injectCommand) {
+bool ppSimSequenceObject (FILE *simfile, FILE *inject, psMetadata *sequence, int nSeq, psRandom *rng, const char *path, const char *basename, const char *ppSimCommand, const char *injectCommand, const char *camera) {
 
     bool status;
@@ -25,6 +25,6 @@
 
     if (filters->n != exptimes->n) {
-	psLogMsg ("ppSimSequence", PS_LOG_WARN, "mis-match in filter and exptime lists");
-	exit (1);
+	    psLogMsg ("ppSimSequence", PS_LOG_WARN, "mis-match in filter and exptime lists");
+	    exit (1);
     }
 
@@ -34,91 +34,121 @@
     // loop over the filters & exposure times
     for (int i = 0; i < filters->n; i++) {
-	    
-	// offset parameters
-	float dR = psMetadataLookupF32 (&status, sequence, "OFFSET.RA");
-	float dD = psMetadataLookupF32 (&status, sequence, "OFFSET.DEC");
-  
-	int nR = psMetadataLookupS32 (&status, sequence, "OFFSET.NR");
-	int nD = psMetadataLookupS32 (&status, sequence, "OFFSET.ND");
-  
-	// loop over the offset sequence
-	for (int iR = 0; iR < nR; iR++) {
-	    for (int iD = 0; iD < nD; iD++) {
+	        
+	    // offset parameters
+	    float dR = psMetadataLookupF32 (&status, sequence, "OFFSET.RA");
+	    float dD = psMetadataLookupF32 (&status, sequence, "OFFSET.DEC");
+      
+	    int nR = psMetadataLookupS32 (&status, sequence, "OFFSET.NR");
+	    int nD = psMetadataLookupS32 (&status, sequence, "OFFSET.ND");
+      
+	    // loop over the offset sequence
+	    for (int iR = 0; iR < nR; iR++) {
+	        for (int iD = 0; iD < nD; iD++) {
 
-		// RA & DEC in degrees XXX (should be radians...)
-		// offsets are in arcseconds
-		float R = Ro + dR*(iR - 0.5*nR + 0.5) / cos (RAD_DEG*Do) / 3600.0;
-		float D = Do + dD*(iD - 0.5*nD + 0.5) / 3600.0;
-      
-		// dither parameters
-		float dr = psMetadataLookupF32 (&status, sequence, "DITHER.RA");
-		float dd = psMetadataLookupF32 (&status, sequence, "DITHER.DEC");
-  
-		int nr = psMetadataLookupS32 (&status, sequence, "DITHER.NR");
-		int nd = psMetadataLookupS32 (&status, sequence, "DITHER.ND");
-  
-		// loop over the dither sequence
-		for (int ir = 0; ir < nr; ir++) {
-		    for (int id = 0; id < nd; id++) {
+		        // RA & DEC in degrees XXX (should be radians...)
+		        // offsets are in arcseconds
+		        float R = Ro + dR*(iR - 0.5*nR + 0.5) / cos (RAD_DEG*Do) / 3600.0;
+		        float D = Do + dD*(iD - 0.5*nD + 0.5) / 3600.0;
+              
+		        // dither parameters
+		        float dr = psMetadataLookupF32 (&status, sequence, "DITHER.RA");
+		        float dd = psMetadataLookupF32 (&status, sequence, "DITHER.DEC");
+          
+		        int nr = psMetadataLookupS32 (&status, sequence, "DITHER.NR");
+		        int nd = psMetadataLookupS32 (&status, sequence, "DITHER.ND");
+          
+		        // loop over the dither sequence
+		        for (int ir = 0; ir < nr; ir++) {
+		            for (int id = 0; id < nd; id++) {
 
-			// ra, dec in degrees; offsets in arcsec
-			float ra = R + dr*(ir - 0.5*nr + 0.5) / cos (RAD_DEG*D) / 3600.0;
-			float dec = D + dd*(id - 0.5*nd + 0.5) / 3600.0;
-	  
-			// rotation sequence parameters
-			float pos_min   = psMetadataLookupF32 (&status, sequence, "POS_MIN");
-			float pos_max   = psMetadataLookupF32 (&status, sequence, "POS_MAX");
-			float pos_delta = psMetadataLookupF32 (&status, sequence, "POS_DELTA");
-			assert (pos_delta > 0.0);
-			assert (pos_max >= pos_min);
-	    
-			// loop over rotation sequence
-			for (float pos = pos_min; pos <= pos_max; pos += pos_delta) {
-	      
-			    // define the output filename
-			    psString filename = NULL;
-			    if (path) {
-				psStringAppend (&filename, "%s/%s.%03d.%03d", path, basename, nSeq, nImage);
-			    } else {
-				psStringAppend (&filename, "%s.%03d.%03d", basename, nSeq, nImage);
-			    }
+			            // ra, dec in degrees; offsets in arcsec
+			            float ra = R + dr*(ir - 0.5*nr + 0.5) / cos (RAD_DEG*D) / 3600.0;
+			            float dec = D + dd*(id - 0.5*nd + 0.5) / 3600.0;
+	              
+			            // rotation sequence parameters
+			            float pos_min   = psMetadataLookupF32 (&status, sequence, "POS_MIN");
+			            float pos_max   = psMetadataLookupF32 (&status, sequence, "POS_MAX");
+			            float pos_delta = psMetadataLookupF32 (&status, sequence, "POS_DELTA");
+			            assert (pos_delta > 0.0);
+			            assert (pos_max >= pos_min);
+	                
+			            // loop over rotation sequence
+			            for (float pos = pos_min; pos <= pos_max; pos += pos_delta) {
+	                  
+			                // define the output filename
+			                psString filename = NULL;
+			                if (path) {
+				                psStringAppend (&filename, "%s/%s.%03d.%03d", path, basename, nSeq, nImage);
+			                } else {
+				                psStringAppend (&filename, "%s.%03d.%03d", basename, nSeq, nImage);
+			                }
 
-			    // define the ppSim command
-			    psString command = NULL;
+			                // define the ppSim command
+			                psString command = NULL;
 
-			    psStringAppend (&command, "%s -type OBJECT", ppSimCommand);
-			    psStringAppend (&command, " -filter %s", (char *) filters->data[i]);
-			    psStringAppend (&command, " -exptime %f", exptimes->data.F32[i]);
-			    psStringAppend (&command, " -skymags %f", skymags->data.F32[i]);
+			                psStringAppend (&command, "%s -type OBJECT", ppSimCommand);
+			                psStringAppend (&command, " -filter %s", (char *) filters->data[i]);
+			                psStringAppend (&command, " -exptime %f", exptimes->data.F32[i]);
+			                psStringAppend (&command, " -skymags %f", skymags->data.F32[i]);
 
-			    psStringAppend (&command, " -ra %f", ra);
-			    psStringAppend (&command, " -dec %f", dec);
-			    psStringAppend (&command, " -pa %f", pos);
-                            psStringAppend (&command, " -obs_mode OBJECT.%s", (char *) filters->data[i]);
+			                psStringAppend (&command, " -ra %f", ra);
+			                psStringAppend (&command, " -dec %f", dec);
+			                psStringAppend (&command, " -pa %f", pos);
+                                        psStringAppend (&command, " -obs_mode OBJECT.%s", (char *) filters->data[i]);
 
-			    double frnd = psRandomUniform(rng);
-			    float seeing = IQmin + (IQmax - IQmin)*frnd;
-	      
-			    psStringAppend (&command, " -seeing %f", seeing);
+			                double frnd = psRandomUniform(rng);
+			                float seeing = IQmin + (IQmax - IQmin)*frnd;
+	                  
+			                psStringAppend (&command, " -seeing %f", seeing);
 
-			    psStringAppend (&command, " %s", filename);
+			                psStringAppend (&command, " %s", filename);
 
-			    fprintf (simfile, "%s\n", command);
-			    psFree (command);
-			    
-			    // define the inject command
-			    // path should be dirname/filename
-			    command = psStringCopy (injectCommand);
-			    psStringAppend (&command, " %s*.fits",    filename);
-			    fprintf (inject, "%s\n", command);
-			    psFree (command);
-			    psFree (filename);
+			                fprintf (simfile, "%s\n", command);
+			                psFree (command);
+			                
+			                // define the inject command
+                            		// path should be dirname/filename
+			                // for SIMTEST camera nebulous insertion append .fits
+			                // SIMMOSAIC nebulous insertions are appended with ChipXX.fits
+			                // non-nebulous insertions use *.fits
+			                const char *neb = "neb";
 
-			    nImage ++;
-			}
-		    }
-		}
+			                if (strncmp (path, neb, 3) == 0) {
+			                
+			                    if (strcmp (camera, "SIMTEST") == 0) {
+			                        command = psStringCopy (injectCommand); 
+			                        psStringAppend (&command, " %s.fits", filename);
+			                        fprintf (inject, "%s\n", command);
+			                        
+								} else if (strcmp (camera, "SIMMOSAIC") == 0) {
+									for (int i = 0; i < 2; i++) {
+				                    	for (int j = 0; j < 2; j++) {
+					                		command = psStringCopy (injectCommand);
+			                            	psStringAppend (&command, " %s.Chip%d%d.fits", filename, i, j);
+			                           		fprintf (inject, "%s\n", command);
+				                        	command = NULL;
+					            		}
+				                	}
+				                    
+				            	} else {
+                            		psLogMsg ("ppSimSequence", PS_LOG_WARN, "unsupported camera type for nebulous insertion");
+                                	exit (1);
+
+				            	}
+
+			                } else {
+			                    command = psStringCopy (injectCommand);
+			                    psStringAppend (&command, " %s*.fits",    filename);
+			                    fprintf (inject, "%s\n", command);
+			                }
+
+			                psFree (command);
+			                psFree (filename);
+			                nImage ++;
+			            }
+		            }
+		        }
+	        }
 	    }
-	}
     }
     return true;
