Index: trunk/psModules/src/concepts/pmConceptsRead.c
===================================================================
--- trunk/psModules/src/concepts/pmConceptsRead.c	(revision 7280)
+++ trunk/psModules/src/concepts/pmConceptsRead.c	(revision 7311)
@@ -71,6 +71,8 @@
         parsed = parsePlain(concept, spec->blank);
     }
-    if (!parsed)
-        return false;
+    if (!parsed) {
+        psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to parse concept %s\n", spec->blank->name);
+        return false;
+    }
 
     // Plug the parsed concept into a new psMetadataItem, so each "concept" has its own version that can
@@ -117,5 +119,5 @@
 
     pmHDU *hdu = pmHDUGetLowest(NULL, NULL, cell); // The HDU at the lowest level
-    if (! hdu) {
+    if (!hdu) {
         return false;
     }
@@ -124,9 +126,9 @@
     psMetadataIterator *specsIter = psMetadataIteratorAlloc(specs, PS_LIST_HEAD, NULL); // Iterator
     psMetadataItem *specItem = NULL;    // Item from the specs metadata
+    bool status = true;                 // Status of reading concepts
     while ((specItem = psMetadataGetAndIncrement(specsIter))) {
         pmConceptSpec *spec = specItem->data.V; // The specification
         psString name = specItem->name; // The concept name
         psMetadataItem *conceptItem = psMetadataLookup(cellConfig, name); // The concept, or NULL
-        psMetadataItem *value = NULL; // The value of the concept
         if (conceptItem) {
             if (conceptItem->type == PS_DATA_STRING) {
@@ -138,6 +140,9 @@
                 psFree(nameSource);
                 if (mdok && strlen(source) > 0 && strcasecmp(source, "VALUE") == 0) {
-                    value = conceptItem;
-                    conceptParse(spec, value, cameraFormat, target, NULL, NULL, cell);
+                    if (!conceptParse(spec, conceptItem, cameraFormat, target, NULL, NULL, cell)) {
+                        psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to parse concept %s from camera "
+                                "configuration\n", name);
+                        status = false;
+                    }
                 } else if (source && (strlen(source) == 0 || strcasecmp(source, "HEADER") != 0)) {
                     // We leave "HEADER" to pmConceptsReadFromHeader
@@ -148,10 +153,14 @@
             } else {
                 // Another type --- should be OK
-                conceptParse(spec, conceptItem, cameraFormat, target, NULL, NULL, cell);
+                if (!conceptParse(spec, conceptItem, cameraFormat, target, NULL, NULL, cell)) {
+                    psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to parse concept %s from camera "
+                            "configuration.  It has a weird %s.SOURCE: %s\n", name, name);
+                    status = false;
+                }
             }
         }
     }
     psFree(specsIter);
-    return true;
+    return status;
 }
 
@@ -179,12 +188,16 @@
     psMetadataIterator *specsIter = psMetadataIteratorAlloc(specs, PS_LIST_HEAD, NULL); // Iterator
     psMetadataItem *specItem = NULL;    // Item from the specs metadata
+    bool status = true;                 // Status of reading concepts
     while ((specItem = psMetadataGetAndIncrement(specsIter))) {
         pmConceptSpec *spec = specItem->data.V; // The specification
         psString name = specItem->name; // The concept name
         psMetadataItem *conceptItem = psMetadataLookup(defaults, name); // The concept, or NULL
-        conceptParse(spec, conceptItem, cameraFormat, target, fpa, chip, cell);
+        if (conceptItem && !conceptParse(spec, conceptItem, cameraFormat, target, fpa, chip, cell)) {
+            psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to parse concept %s from DEFAULTS.\n", name);
+            status = false;
+        }
     }
     psFree(specsIter);
-    return true;
+    return status;
 }
 
@@ -213,4 +226,5 @@
     psMetadataIterator *specsIter = psMetadataIteratorAlloc(specs, PS_LIST_HEAD, NULL); // Iterator
     psMetadataItem *specItem = NULL;    // Item from the specs metadata
+    bool status = true;                 // Status of reading concepts
     while ((specItem = psMetadataGetAndIncrement(specsIter))) {
         pmConceptSpec *spec = specItem->data.V; // The specification
@@ -257,8 +271,11 @@
 
         // This will also clean up the name
-        conceptParse(spec, headerItem, cameraFormat, target, fpa, chip, cell);
+        if (headerItem && !conceptParse(spec, headerItem, cameraFormat, target, fpa, chip, cell)) {
+            psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to parse concept %s from header.\n", name);
+            status = false;
+        }
     }
     psFree(specsIter);
-    return true;
+    return status;
 }
 
@@ -294,4 +311,5 @@
     psMetadataIterator *specsIter = psMetadataIteratorAlloc(specs, PS_LIST_HEAD, NULL); // Iterator
     psMetadataItem *specItem = NULL;    // Item from the specs metadata
+    bool status = true;                 // Status of reading concepts
     while ((specItem = psMetadataGetAndIncrement(specsIter))) {
         pmConceptSpec *spec = specItem->data.V; // The specification
@@ -374,5 +392,9 @@
 
                     // Now we have the result
-                    conceptParse(spec, conceptItem, cameraFormat, target, fpa, chip, cell);
+                    if (!conceptParse(spec, conceptItem, cameraFormat, target, fpa, chip, cell)) {
+                        psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to parse concept %s from database.\n",
+                                name);
+                        status = false;
+                    }
 
                 }
@@ -385,5 +407,5 @@
     psFree(specsIter);
 
-    return true;
+    return status;
     #endif
 }
