Index: trunk/psModules/src/concepts/pmConceptsRead.c
===================================================================
--- trunk/psModules/src/concepts/pmConceptsRead.c	(revision 7429)
+++ trunk/psModules/src/concepts/pmConceptsRead.c	(revision 7450)
@@ -179,4 +179,6 @@
     PS_ASSERT_PTR_NON_NULL(target, false);
 
+    psTrace(__func__, 3, "Reading concepts from defaults...\n");
+
     pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level
     if (!hdu) {
@@ -199,4 +201,46 @@
         psString name = specItem->name; // The concept name
         psMetadataItem *conceptItem = psMetadataLookup(defaults, name); // The concept, or NULL
+        psTrace(__func__, 10, "%s: %x\n", name, conceptItem);
+        if (conceptItem && conceptItem->type == PS_DATA_METADATA) {
+            psTrace(__func__, 5, "%s is of type METADATA.\n", name);
+            // Check for DEPEND
+            psMetadata *dependMenu = conceptItem->data.V; // The DEPEND menu
+            psString depend = NULL; // The CONCEPT.DEPEND
+            psStringAppend(&depend, "%s.DEPEND", name);
+            const char *dependConcept = psMetadataLookupStr(&mdok, defaults, depend); // The concept name
+            if (!mdok || !dependConcept || strlen(dependConcept) == 0) {
+                psError(PS_ERR_IO, true, "Unable to parse %s: couldn't find %s in DEFAULTS.\n", name,
+                        depend);
+                psFree(depend);
+                continue;
+            }
+            psFree(depend);
+            // Now look up the depend value
+            psMetadataItem *dependValue = NULL; // The value of the concept we're looking up
+            if (cell) {
+                dependValue = psMetadataLookup(cell->concepts, dependConcept);
+            }
+            if (chip && !dependValue) {
+                dependValue = psMetadataLookup(chip->concepts, dependConcept);
+            }
+            if (fpa && !dependValue) {
+                dependValue = psMetadataLookup(chip->concepts, dependConcept);
+            }
+            if (!dependValue) {
+                psError(PS_ERR_IO, true, "Unable to find %s to resolve %s in DEFAULTS.\n",
+                        dependConcept, name);
+                continue;
+            }
+            if (dependValue->type != PS_DATA_STRING) {
+                psError(PS_ERR_BAD_PARAMETER_TYPE, true, "%s is required to resolve %s in DEFAULTS, "
+                        "but it is not of type STRING.\n", dependConcept, name);
+                continue;
+            }
+            const char *dependKey = dependValue->data.V; // The key to the DEPEND menu
+            psTrace(__func__, 7, "%s.DEPEND resolves to %s....\n", name, dependKey);
+
+            conceptItem = psMetadataLookup(dependMenu, dependKey);
+            // Now we can parse this as we would ordinarily
+        }
         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);
