Index: /trunk/ippconfig/megacam/format_raw.config
===================================================================
--- /trunk/ippconfig/megacam/format_raw.config	(revision 11131)
+++ /trunk/ippconfig/megacam/format_raw.config	(revision 11132)
@@ -133,4 +133,5 @@
 	FPA.AZ			STR	TELAZ
 	FPA.TEMP		STR	DETTEM
+	FPA.EXPOSURE		STR	EXPTIME
 	CHIP.TEMP		STR	DETTEM
 	CELL.EXPOSURE		STR	EXPTIME
Index: /trunk/ippconfig/megacam/format_spliced.config
===================================================================
--- /trunk/ippconfig/megacam/format_spliced.config	(revision 11131)
+++ /trunk/ippconfig/megacam/format_spliced.config	(revision 11132)
@@ -99,4 +99,5 @@
 	FPA.AZ		STR	TELAZ
 	FPA.TEMP	STR	DETTEM
+	FPA.EXPOSURE	STR	EXPTIME
 	CHIP.TEMP	STR	DETTEM
         CELL.EXPOSURE   STR     EXPTIME
Index: /trunk/ippconfig/megacam/format_split.config
===================================================================
--- /trunk/ippconfig/megacam/format_split.config	(revision 11131)
+++ /trunk/ippconfig/megacam/format_split.config	(revision 11132)
@@ -98,4 +98,5 @@
 	FPA.AZ		STR	TELAZ
 	FPA.TEMP	STR	DETTEM
+	FPA.EXPOSURE	STR	EXPTIME
 	CHIP.TEMP	STR	DETTEM
         CELL.EXPOSURE   STR     EXPTIME
Index: /trunk/psModules/src/concepts/pmConceptsStandard.c
===================================================================
--- /trunk/psModules/src/concepts/pmConceptsStandard.c	(revision 11131)
+++ /trunk/psModules/src/concepts/pmConceptsStandard.c	(revision 11132)
@@ -42,4 +42,88 @@
     psAbort(__func__, "Should never ever get here.\n");
     return NAN;
+}
+
+// FPA.FILTER
+psMetadataItem *p_pmConceptParse_FPA_FILTER(const psMetadataItem *concept,
+        const psMetadataItem *pattern,
+        const psMetadata *cameraFormat,
+        const pmFPA *fpa,
+        const pmChip *chip,
+        const pmCell *cell)
+{
+    assert(concept);
+    assert(pattern);
+    assert(fpa);
+    assert(fpa->camera);
+
+    if (concept->type != PS_DATA_STRING) {
+        psError(PS_ERR_BAD_PARAMETER_TYPE, true, "Type for %s (%x) is not STR\n",
+                pattern->name, concept->type);
+        return NULL;
+    }
+
+    bool mdok;                          // Status of MD lookup
+    psMetadata *filters = psMetadataLookupMetadata(&mdok, fpa->camera, "FILTER.ID");
+    if (!mdok || !filters) {
+        psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to find FILTER.ID in camera configuration.\n");
+        return NULL;
+    }
+
+    const char *key = concept->data.str;        // The name to look up
+    psString value = psMetadataLookupStr(&mdok, filters, key); // Value to use
+    if (!mdok || !value || strlen(value) == 0) {
+        psError(PS_ERR_UNEXPECTED_NULL, true,
+                "Unable to find %s in FILTER.ID in camera configuration.\n", key);
+        return NULL;
+    }
+
+    return psMetadataItemAllocStr(pattern->name, pattern->comment, value);
+}
+
+psMetadataItem *p_pmConceptFormat_FPA_FILTER(const psMetadataItem *concept,
+        const psMetadata *cameraFormat,
+        const pmFPA *fpa,
+        const pmChip *chip,
+        const pmCell *cell)
+{
+    assert(concept);
+    assert(fpa);
+    assert(fpa->camera);
+
+    if (concept->type != PS_DATA_STRING) {
+        psError(PS_ERR_BAD_PARAMETER_TYPE, true, "Type for %s (%x) is not STR\n",
+                concept->name, concept->type);
+        return NULL;
+    }
+
+    bool mdok;                          // Status of MD lookup
+    psMetadata *filters = psMetadataLookupMetadata(&mdok, fpa->camera, "FILTER.ID");
+    if (!mdok || !filters) {
+        psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to find FILTER.ID in camera configuration.\n");
+        return NULL;
+    }
+
+    psMetadataIterator *iter = psMetadataIteratorAlloc(filters, PS_LIST_HEAD, NULL); // Iterator for filters
+    psMetadataItem *item;               // Item from iteration
+    char *name = NULL;                  // The winning name
+    while ((item = psMetadataGetAndIncrement(iter))) {
+        if (item->type != PS_DATA_STRING) {
+            psWarning("Type for %s (%x) in FILTER.ID in camera configuration is not STR\n",
+                      item->name, item->type);
+            continue;
+        }
+        if (strcmp(item->data.str, concept->data.str)) {
+            name = item->name;
+            break;
+        }
+    }
+    if (!name) {
+        psError(PS_ERR_UNEXPECTED_NULL, false,
+                "Unable to find any filter matching %s in FILTER.ID in camera configuration.\n",
+                concept->data.str);
+        return NULL;
+    }
+
+    return psMetadataItemAllocStr(concept->name, concept->comment, name);
 }
 
Index: /trunk/psModules/src/concepts/pmConceptsStandard.h
===================================================================
--- /trunk/psModules/src/concepts/pmConceptsStandard.h	(revision 11131)
+++ /trunk/psModules/src/concepts/pmConceptsStandard.h	(revision 11132)
@@ -7,6 +7,6 @@
 /// @author Paul Price, IfA
 ///
-/// @version $Revision: 1.6 $ $Name: not supported by cvs2svn $
-/// @date $Date: 2006-10-16 22:03:56 $
+/// @version $Revision: 1.7 $ $Name: not supported by cvs2svn $
+/// @date $Date: 2007-01-18 03:14:09 $
 ///
 /// Copyright 2005-2006 Institute for Astronomy, University of Hawaii
@@ -21,4 +21,21 @@
 // Functions to parse and format the standard concepts
 
+
+/// Parse the FPA.FILTER concept to apply a lookup table
+psMetadataItem *p_pmConceptParse_FPA_FILTER(const psMetadataItem *concept, ///< Concept to parse
+        const psMetadataItem *pattern, ///< Pattern to use in parsing
+        const psMetadata *cameraFormat, ///< Camera format definition
+        const pmFPA *fpa, ///< FPA for concept, or NULL
+        const pmChip *chip, ///< Chip for concept, or NULL
+        const pmCell *cell ///< Cell for concept, or NULL
+                                           );
+
+/// Format the FPA.FILTER concept to (reverse-)apply a lookup table
+psMetadataItem *p_pmConceptFormat_FPA_FILTER(const psMetadataItem *concept, ///< Concept to format
+        const psMetadata *cameraFormat, ///< Camera format definition
+        const pmFPA *fpa, ///< FPA for concept, or NULL
+        const pmChip *chip, ///< Chip for concept, or NULL
+        const pmCell *cell ///< Cell for concept, or NULL
+                                            );
 
 /// Parse the coordinates concepts: FPA.RA and FPA.DEC
