Index: trunk/ppSim/src/ppSimLoop.c
===================================================================
--- trunk/ppSim/src/ppSimLoop.c	(revision 12833)
+++ trunk/ppSim/src/ppSimLoop.c	(revision 12834)
@@ -93,5 +93,5 @@
 
     psRegion *bounds = fpaBounds(fpa);  // Bounds of FPA
-    if (!bounds) {
+    if (!bounds || (bounds->x0 == 0.0 && bounds->x1 == 0.0) || (bounds->y0 == 0.0 && bounds->y1 == 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "Unable to determine bounds of FPA");
         return PS_EXIT_CONFIG_ERROR;
@@ -105,9 +105,29 @@
     float shutterTime = psMetadataLookupF32(NULL, config->arguments, "SHUTTER.TIME"); // Shutter time
     float skyRate = psMetadataLookupF32(NULL, config->arguments, "SKY.RATE"); // Sky rate
+
     float expTime = psMetadataLookupF32(NULL, config->arguments, "EXPTIME"); // Exposure time
+    const char *filter = psMetadataLookupStr(NULL, config->arguments, "FILTER"); // Filter name
     ppSimType type = psMetadataLookupS32(NULL, config->arguments, "TYPE"); // Type of image to simulate
 
     psRandom *rng = psRandomAlloc(PS_RANDOM_TAUS, 0); // Random number generator
     pmFPAview *view = pmFPAviewAlloc(0);// View for iterating over FPA
+
+    // Update concepts
+    const char *typeStr;                // Exposure type String
+    switch (type) {
+      case PPSIM_TYPE_BIAS:   typeStr = "BIAS";   break;
+      case PPSIM_TYPE_DARK:   typeStr = "DARK";   break;
+      case PPSIM_TYPE_FLAT:   typeStr = "FLAT";   break;
+      case PPSIM_TYPE_OBJECT: typeStr = "OBJECT"; break;
+      default:
+        psAbort("Should never get here.");
+    }
+    psMetadataAddStr(fpa->concepts, PS_LIST_TAIL, "FPA.OBSTYPE", PS_META_REPLACE,
+                     "Observation type", typeStr);
+    psMetadataAddF32(fpa->concepts, PS_LIST_TAIL, "FPA.EXPTIME", PS_META_REPLACE,
+                     "Exposure time (sec)", expTime);
+    psMetadataAddStr(fpa->concepts, PS_LIST_TAIL, "FPA.FILTERID", PS_META_REPLACE, "Filter name", filter);
+    psMetadataAddStr(fpa->concepts, PS_LIST_TAIL, "FPA.FILTER", PS_META_REPLACE, "Filter name", filter);
+
 
     pmChip *chip;                       // Chip from FPA
@@ -144,5 +164,5 @@
 
             // TO DO: Decide if cell is to be video readout
-            int numReadouts = 0.0;      // Number of readouts in cell
+            int numReadouts = 1;        // Number of readouts in cell
 
             for (int i = 0; i < numReadouts; i++) {
@@ -203,4 +223,7 @@
                 }
 
+                // TO DO: Add overscan
+
+#if 0
                 // Add the noise into the image
                 for (int y = 0; y < numRows; y++) {
@@ -211,4 +234,5 @@
                     }
                 }
+#endif
                 readout->image = signal;
                 psFree(variance);
@@ -217,6 +241,8 @@
             }
 
-            psMetadataAddF32(cell->concepts, PS_LIST_TAIL, "CELL.EXPTIME", 0, "Exposure time (sec)", expTime);
-            psMetadataAddF32(cell->concepts, PS_LIST_TAIL, "CELL.DARKTIME", 0, "Dark time (sec)", expTime);
+            psMetadataAddF32(cell->concepts, PS_LIST_TAIL, "CELL.EXPOSURE", PS_META_REPLACE,
+                             "Exposure time (sec)", expTime);
+            psMetadataAddF32(cell->concepts, PS_LIST_TAIL, "CELL.DARKTIME", PS_META_REPLACE,
+                             "Dark time (sec)", expTime);
 
             if (!pmFPAfileIOChecks(config, view, PM_FPA_AFTER)) {
@@ -239,25 +265,11 @@
     }
 
-    const char *typeStr;                // Exposure type String
-    switch (type) {
-      case PPSIM_TYPE_BIAS:   typeStr = "BIAS";   break;
-      case PPSIM_TYPE_DARK:   typeStr = "DARK";   break;
-      case PPSIM_TYPE_FLAT:   typeStr = "FLAT";   break;
-      case PPSIM_TYPE_OBJECT: typeStr = "OBJECT"; break;
-      default:
-        psAbort("Should never get here.");
-    }
-
-    psMetadataAddStr(fpa->concepts, PS_LIST_TAIL, "FPA.OBSTYPE", 0, "Observation type", typeStr);
-    psMetadataAddF32(fpa->concepts, PS_LIST_TAIL, "FPA.EXPTIME", 0, "Exposure time (sec)", expTime);
-
-            if (!pmFPAfileIOChecks(config, view, PM_FPA_AFTER)) {
-                psError(PS_ERR_IO, false, "Unable to write file.");
-                psFree(rng);
-                psFree(view);
-                psFree(bounds);
-                return PS_EXIT_SYS_ERROR;
-            }
-
+    if (!pmFPAfileIOChecks(config, view, PM_FPA_AFTER)) {
+        psError(PS_ERR_IO, false, "Unable to write file.");
+        psFree(rng);
+        psFree(view);
+        psFree(bounds);
+        return PS_EXIT_SYS_ERROR;
+    }
 
     psFree(rng);
