Index: /branches/rel10_ifa/psModules/src/astrom/pmConceptsRead.c
===================================================================
--- /branches/rel10_ifa/psModules/src/astrom/pmConceptsRead.c	(revision 6581)
+++ /branches/rel10_ifa/psModules/src/astrom/pmConceptsRead.c	(revision 6582)
@@ -187,4 +187,7 @@
     if (cell) {
         pmHDU *hdu = pmHDUGetLowest(NULL, NULL, cell); // The HDU at the lowest level
+        if (! hdu) {
+            return false;
+        }
         psMetadata *cameraFormat = hdu->format; // The camera format
         psMetadata *cellConfig = cell->config; // The camera configuration for this cell
@@ -197,16 +200,22 @@
             psMetadataItem *value = NULL; // The value of the concept
             if (conceptItem) {
-                // Check the SOURCE
-                psString nameSource = NULL; // String with the concept name and ".SOURCE" added
-                psStringAppend(&nameSource, "%s.SOURCE", name);
-                bool mdok = true;       // Status of MD lookup
-                psString source = psMetadataLookupStr(&mdok, cell->config, nameSource); // The source
-                if (mdok && strlen(source) > 0 && strcasecmp(source, "VALUE") == 0) {
-                    value = psMemIncrRefCounter(conceptItem);
-                    conceptParse(spec, value, cameraFormat, target, NULL, NULL, cell);
-                } else if (source && (strlen(source) == 0 || strcasecmp(source, "HEADER") != 0)) {
-                    // We leave "HEADER" to pmConceptsReadFromHeader
-                    psError(PS_ERR_IO, true, "%s isn't HEADER or VALUE --- can't read %s\n", source, name);
-                    continue;
+                if (conceptItem->type == PS_DATA_STRING) {
+                    // Check the SOURCE
+                    psString nameSource = NULL; // String with the concept name and ".SOURCE" added
+                    psStringAppend(&nameSource, "%s.SOURCE", name);
+                    bool mdok = true;       // Status of MD lookup
+                    psString source = psMetadataLookupStr(&mdok, cell->config, nameSource); // The source
+                    if (mdok && strlen(source) > 0 && strcasecmp(source, "VALUE") == 0) {
+                        value = psMemIncrRefCounter(conceptItem);
+                        conceptParse(spec, value, cameraFormat, target, NULL, NULL, cell);
+                    } else if (source && (strlen(source) == 0 || strcasecmp(source, "HEADER") != 0)) {
+                        // We leave "HEADER" to pmConceptsReadFromHeader
+                        psError(PS_ERR_IO, true, "%s isn't HEADER or VALUE --- can't read %s\n", source,
+                                name);
+                        continue;
+                    }
+                } else {
+                    // Another type --- should be OK
+                    conceptParse(spec, conceptItem, cameraFormat, target, NULL, NULL, cell);
                 }
             }
@@ -227,4 +236,7 @@
 {
     pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level
+    if (!hdu) {
+        return false;
+    }
     psMetadata *cameraFormat = hdu->format; // The camera format
     bool mdok = true;                   // Status of MD lookup
@@ -256,4 +268,7 @@
 {
     pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level
+    if (!hdu) {
+        return false;
+    }
     psMetadata *cameraFormat = hdu->format; // The camera format
     bool mdok = true;                   // Status of MD lookup
@@ -324,4 +339,7 @@
 {
     pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level
+    if (!hdu) {
+        return false;
+    }
     psMetadata *cameraFormat = hdu->format; // The camera format
     bool mdok = true;                   // Status of MD lookup
Index: /branches/rel10_ifa/psModules/src/astrom/pmFPAConstruct.c
===================================================================
--- /branches/rel10_ifa/psModules/src/astrom/pmFPAConstruct.c	(revision 6581)
+++ /branches/rel10_ifa/psModules/src/astrom/pmFPAConstruct.c	(revision 6582)
@@ -217,5 +217,22 @@
         // No extensions --- it's all in the PHU
         psString chipType = chipNameFromHeader(formatSpec, phu); // Type of chip
+        printf("chipType: %s<---\n", chipType);
+        #if 1                                   // This is here for the courtesy of MegaCam, which has "CCD13   "
+
+        char *space = NULL;             // Position of a space
+        if ((space = strchr(chipType, ' '))) {
+            psString temp = psStringNCopy(chipType, strlen(chipType) - strlen(space));
+            // Free memory???
+            chipType = temp;
+        }
+        #endif
+
         psString content = psMetadataLookupStr(&mdok, contents, chipType); // The content line
+        if (!mdok || strlen(content) == 0) {
+            psError(PS_ERR_IO, true, "Cannot find chip %s in the list of CONTENTS.\n");
+            psFree(chipType);
+            psFree(content);
+            return false;
+        }
 
         // Parse the list of first:second
Index: /branches/rel10_ifa/psModules/src/astrom/pmFPARead.c
===================================================================
--- /branches/rel10_ifa/psModules/src/astrom/pmFPARead.c	(revision 6581)
+++ /branches/rel10_ifa/psModules/src/astrom/pmFPARead.c	(revision 6582)
@@ -184,4 +184,7 @@
 {
     pmHDU *hdu = pmHDUFromCell(cell);   // The HDU
+    if (!hdu) {
+        return false;                    // Nothing to see here; move along
+    }
     if (!hdu->images && !pmHDURead(hdu, fits)) {
         psError(PS_ERR_IO, false, "Unable to read HDU for cell.\n");
