Index: trunk/psModules/src/config/Makefile.am
===================================================================
--- trunk/psModules/src/config/Makefile.am	(revision 23242)
+++ trunk/psModules/src/config/Makefile.am	(revision 23243)
@@ -19,4 +19,5 @@
 	pmConfigMask.c \
 	pmConfigDump.c \
+	pmConfigRun.c \
 	pmVersion.c \
 	pmErrorCodes.c
@@ -29,4 +30,5 @@
 	pmConfigMask.h \
 	pmConfigDump.h \
+	pmConfigRun.h \
 	pmVersion.h \
 	pmErrorCodes.h
Index: trunk/psModules/src/config/pmConfigRun.c
===================================================================
--- trunk/psModules/src/config/pmConfigRun.c	(revision 23243)
+++ trunk/psModules/src/config/pmConfigRun.c	(revision 23243)
@@ -0,0 +1,70 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <pslib.h>
+
+#include "pmConfig.h"
+#include "pmFPAfile.h"
+
+#include "pmConfigRun.h"
+
+// Get the nominated element of the configuration
+static psMetadata *configElement(psMetadata *md, // Metadata with element
+                                 const char *name, // Name of element
+                                 const char *comment // Comment for element
+                             )
+{
+    psAssert(md, "Require metadata");
+    psAssert(name, "Require name of element");
+
+    bool mdok;                          // Status of MD lookup
+    psMetadata *elem = psMetadataLookupMetadata(&mdok, md, name); // Element of interest
+    if (!elem) {
+        elem = psMetadataAlloc();
+        psMetadataAddMetadata(md, PS_LIST_HEAD, name, 0, comment, elem);
+    }
+    return elem;
+}
+
+// Get the RUN information from the configuration
+static psMetadata *configRun(pmConfig *config // Configuration
+                             )
+{
+    psAssert(config, "Require configuration");
+    return configElement(config->user, "RUN", "Run-time information");
+}
+
+
+bool pmConfigRunFileAdd(pmConfig *config, const pmFPAfile *file)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+    PS_ASSERT_PTR_NON_NULL(file, false);
+
+    psMetadata *run = configRun(config);// RUN information
+    psAssert(run, "Require run-time information");
+    psMetadata *files = configElement(run, "FILES", "Filerules used during execution");
+    psAssert(files, "Require list of files");
+
+    return psMetadataAddStr(files, PS_LIST_TAIL, file->name, PS_META_DUPLICATE_OK, NULL, file->filename);
+}
+
+
+bool pmConfigRunCommand(pmConfig *config, int argc, const char **argv)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    psMetadata *run = configRun(config);// Run-time information
+    psAssert(run, "Require run-time information");
+
+    psString command = NULL;
+    for (int i = 0; i < argc; i++) {
+        psStringAppend(&command, "%s", argv[i]);
+    }
+
+    psMetadataAddStr(run, PS_LIST_TAIL, "COMMAND", PS_META_REPLACE, "Command line", command);
+    psFree(command);
+
+    return true;
+}
Index: trunk/psModules/src/config/pmConfigRun.h
===================================================================
--- trunk/psModules/src/config/pmConfigRun.h	(revision 23243)
+++ trunk/psModules/src/config/pmConfigRun.h	(revision 23243)
@@ -0,0 +1,19 @@
+#ifndef PM_CONFIG_RUN_H
+#define PM_CONFIG_RUN_H
+
+#include <pslib.h>
+#include <pmConfig.h>
+
+/// Add a file to the list of files used in the run-time information
+bool pmConfigRunFileAdd(
+    pmConfig *config,                   ///< Configuration
+    const pmFPAfile *file               ///< File to add
+    );
+
+/// Add the command line to the run-time information
+bool pmConfigRunCommand(pmConfig *config, ///< Configuration
+                        int argc, const char **argv ///< Command line arguments
+    );
+
+#endif
+
