Index: trunk/psModules/src/config/pmConfig.c
===================================================================
--- trunk/psModules/src/config/pmConfig.c	(revision 13833)
+++ trunk/psModules/src/config/pmConfig.c	(revision 13858)
@@ -4,6 +4,6 @@
  *  @author EAM (IfA)
  *
- *  @version $Revision: 1.97 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2007-06-14 20:56:57 $
+ *  @version $Revision: 1.98 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2007-06-17 01:18:08 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -700,7 +700,22 @@
                 continue;
             }
-            psMetadata *newRule = psMetadataLookupMetadata(NULL, filerules, new); // New rule (replacement)
-            if (!newRule) {
+            psMetadataItem *newItem = psMetadataLookup(filerules, new); // The rule of interest, or a redir.
+            if (!newItem) {
                 psWarning("Can't find file rule %s in camera %s --- ignored.", new, cameraItem->name);
+                continue;
+            }
+            psMetadata *newRule;        // New rule (replacement)
+            switch (newItem->type) {
+              case PS_DATA_STRING:
+                // A redirection
+                newRule = psMetadataLookupMetadata(NULL, filerules, newItem->data.str);
+                break;
+              case PS_DATA_METADATA:
+                // The rule itself
+                newRule = newItem->data.md;
+                break;
+              default:
+                psWarning("Unable to find filerule %s of the correct type in camera %s --- ignored.",
+                          new, cameraItem->name);
                 continue;
             }
@@ -940,8 +955,16 @@
             psMetadata *testCamera = camerasItem->data.md; // Camera to test against what we've got:
             if (formatFromHeader(&format, &name, testCamera, header, camerasItem->name)) {
-                config->camera = psMemIncrRefCounter(testCamera);
-                config->cameraName = psStringCopy(camerasItem->name);
-                config->formatName = name;
-                config->format = format;
+                // Set the defaults, if they are not already set
+                if (!config->camera && !config->cameraName) {
+                    config->camera = psMemIncrRefCounter(testCamera);
+                    config->cameraName = psStringCopy(camerasItem->name);
+                }
+                if (!config->format && !config->formatName) {
+                    config->formatName = name;
+                    config->format = format;
+                } else {
+                    psFree(name);
+                    psFree(format);
+                }
             } else {
                 psErr *error = psErrorLast();
@@ -975,15 +998,11 @@
     }
 
-    // Free the format and name just in case they've already been allocated
-    if (config->format || config->formatName) {
-        if (config->format != format || strcmp(config->formatName, name) != 0) {
-            psWarning("Default camera format configuration has changed!\n");
-        }
-        psFree(config->format);
-        psFree(config->formatName);
-    }
-    config->formatName = name;
-    config->format = format;
-    return psMemIncrRefCounter(format);
+    if (!config->format && !config->formatName) {
+        config->formatName = name;
+        config->format = format;
+    } else {
+        psFree(name);
+    }
+    return format;
 }
 
