Index: trunk/psModules/src/concepts/pmConceptsStandard.c
===================================================================
--- trunk/psModules/src/concepts/pmConceptsStandard.c	(revision 8848)
+++ trunk/psModules/src/concepts/pmConceptsStandard.c	(revision 9510)
@@ -282,5 +282,5 @@
 
 
-psMetadataItem *p_pmConceptParse_CELL_TIMESYS(psMetadataItem *concept,
+psMetadataItem *p_pmConceptParse_TIMESYS(psMetadataItem *concept,
         psMetadataItem *pattern,
         psMetadata *cameraFormat,
@@ -295,5 +295,5 @@
     psString sys = concept->data.V;     // The time system string
     if (concept->type != PS_DATA_STRING || strlen(sys) <= 0) {
-        psError(PS_ERR_UNKNOWN, true, "Can't interpret CELL.TIMESYS --- assuming UTC.\n");
+        psError(PS_ERR_UNKNOWN, true, "Can't interpret %s --- assuming UTC.\n", pattern->name);
     } else if (strcasecmp(sys, "TAI") == 0) {
         timeSys = PS_TIME_TAI;
@@ -305,5 +305,5 @@
         timeSys = PS_TIME_TT;
     } else {
-        psError(PS_ERR_UNKNOWN, true, "Can't interpret CELL.TIMESYS --- assuming UTC.\n");
+        psError(PS_ERR_UNKNOWN, true, "Can't interpret %s --- assuming UTC.\n", pattern->name);
     }
 
@@ -311,22 +311,34 @@
 }
 
-psMetadataItem *p_pmConceptParse_CELL_TIME(psMetadataItem *concept,
-        psMetadataItem *pattern,
-        psMetadata *cameraFormat,
-        pmFPA *fpa,
-        pmChip *chip,
-        pmCell *cell)
+psMetadataItem *p_pmConceptParse_TIME(psMetadataItem *concept,
+                                      psMetadataItem *pattern,
+                                      psMetadata *cameraFormat,
+                                      pmFPA *fpa,
+                                      pmChip *chip,
+                                      pmCell *cell)
 {
     assert(concept);
     assert(cameraFormat);
-    assert(cell);
-
-    // Need CELL.TIMESYS first
-    bool mdok = true;                  // Result of MD lookup
-    psTimeType timeSys = psMetadataLookupS32(&mdok, cell->concepts, "CELL.TIMESYS"); // The time system
+
+    // Need TIMESYS first
+    psString timesysName = psStringCopy(pattern->name); // e.g., "CELL.TIME" --> "CELL.TIMESYS"
+    timesysName = psStringSubstitute(timesysName, "TIMESYS", "TIME");
+    bool mdok = false;                  // Result of MD lookup
+    psTimeType timeSys;                 // The time system
+    if (cell) {
+        timeSys = psMetadataLookupS32(&mdok, cell->concepts, timesysName);
+    }
+    if (!mdok && chip) {
+        timeSys = psMetadataLookupS32(&mdok, chip->concepts, timesysName);
+    }
+    if (!mdok && fpa) {
+        timeSys = psMetadataLookupS32(&mdok, fpa->concepts, timesysName);
+    }
     if (!mdok) {
-        psLogMsg(__func__, PS_LOG_WARN, "Unable to find CELL.TIMESYS in concepts --- assuming UTC.\n");
+        psLogMsg(__func__, PS_LOG_WARN, "Unable to find %s in concepts when parsing %s --- assuming UTC.\n",
+                 timesysName, pattern->name);
         timeSys = PS_TIME_UTC;
     }
+    psFree(timesysName);
 
     // Work out how the time is represented
@@ -344,7 +356,7 @@
     }
 
-    psString timeFormat = psMetadataLookupStr(&mdok, formats, "CELL.TIME");
+    psString timeFormat = psMetadataLookupStr(&mdok, formats, pattern->name);
     if (!mdok || strlen(timeFormat) == 0) {
-        psError(PS_ERR_UNKNOWN, true, "Unable to find CELL.TIME in FORMATS.\n");
+        psError(PS_ERR_UNKNOWN, true, "Unable to find %s in FORMATS.\n", pattern->name);
         return NULL;
     }
@@ -377,6 +389,6 @@
             usaTime = false;
         } else {
-            psError(PS_ERR_UNKNOWN, true, "Unrecognised FORMATS option for CELL.TIME: %s --- "
-                    "ignored.\n", timeFormat);
+            psError(PS_ERR_UNKNOWN, true, "Unrecognised FORMATS option for %s: %s --- "
+                    "ignored.\n", pattern->name, timeFormat);
             psFree(timeFormatsIter);
             psFree(timeFormats);
@@ -481,6 +493,6 @@
                 time = psTimeFromMJD(timeValue);
             } else {
-                psError(PS_ERR_UNKNOWN, true, "Not sure how to parse CELL.TIME (%f) --- trying JD\n",
-                        timeValue);
+                psError(PS_ERR_UNKNOWN, true, "Not sure how to parse %s (%f) --- trying JD\n",
+                        pattern->name, timeValue);
                 time = psTimeFromJD(timeValue);
             }
@@ -494,6 +506,6 @@
                 time = psTimeFromMJD(timeValue);
             } else {
-                psError(PS_ERR_UNKNOWN, true, "Not sure how to parse CELL.TIME (%f) --- trying JD\n",
-                        timeValue);
+                psError(PS_ERR_UNKNOWN, true, "Not sure how to parse %s (%f) --- trying JD\n",
+                        pattern->name, timeValue);
                 time = psTimeFromJD(timeValue);
             }
@@ -501,5 +513,5 @@
         }
     default:
-        psError(PS_ERR_UNKNOWN, true, "Unable to parse CELL.TIME.\n");
+        psError(PS_ERR_UNKNOWN, true, "Unable to parse %s.\n", pattern->name);
         return NULL;
     }
@@ -652,5 +664,5 @@
 
 
-psMetadataItem *p_pmConceptFormat_CELL_TIMESYS(psMetadataItem *concept,
+psMetadataItem *p_pmConceptFormat_TIMESYS(psMetadataItem *concept,
         psMetadata *cameraFormat,
         pmFPA *fpa,
@@ -681,9 +693,9 @@
 }
 
-psMetadataItem *p_pmConceptFormat_CELL_TIME(psMetadataItem *concept,
-        psMetadata *cameraFormat,
-        pmFPA *fpa,
-        pmChip *chip,
-        pmCell *cell)
+psMetadataItem *p_pmConceptFormat_TIME(psMetadataItem *concept,
+                                       psMetadata *cameraFormat,
+                                       pmFPA *fpa,
+                                       pmChip *chip,
+                                       pmCell *cell)
 {
     psTime *time = concept->data.V;     // The time
@@ -700,5 +712,5 @@
     psMetadata *formats = psMetadataLookupMD(&mdok, cameraFormat, "FORMATS"); // The formats
     if (mdok && formats) {
-        psString format = psMetadataLookupStr(&mdok, formats, "CELL.TIME"); // The formats for CELL.TIME
+        psString format = psMetadataLookupStr(&mdok, formats, concept->name); // The formats for eg, CELL.TIME
         if (mdok && format && strlen(format) > 0) {
             psList *formatList = psStringSplit(format, " ,;", false); // List of formats specified
@@ -732,6 +744,6 @@
                     separateTime = false;
                 } else {
-                    psLogMsg(__func__, PS_LOG_WARN, "Unrecognised FORMATS option for CELL.TIME: %s --- "
-                             "ignored.\n", format);
+                    psLogMsg(__func__, PS_LOG_WARN, "Unrecognised FORMATS option for %s: %s --- "
+                             "ignored.\n", concept->name, format);
                 }
             }
