Index: trunk/pswarp/src/Makefile.am
===================================================================
--- trunk/pswarp/src/Makefile.am	(revision 27125)
+++ trunk/pswarp/src/Makefile.am	(revision 27126)
@@ -28,5 +28,5 @@
 	pswarp.c			\
 	pswarpArguments.c		\
-	pswarpCleanup.c			\
+	pswarpExit.c			\
 	pswarpLoop.c			\
 	pswarpDefine.c			\
@@ -42,5 +42,6 @@
 	pswarpTransformSources.c 	\
 	pswarpTransformTile.c		\
-	pswarpVersion.c            
+	pswarpVersion.c            	\
+	pswarpFiles.c
 
 noinst_HEADERS = \
Index: trunk/pswarp/src/pswarp.c
===================================================================
--- trunk/pswarp/src/pswarp.c	(revision 27125)
+++ trunk/pswarp/src/pswarp.c	(revision 27126)
@@ -11,5 +11,6 @@
  */
 
-# include "pswarp.h"
+#include "pswarp.h"
+#include "pswarpFileNames.h"
 
 static void usage (void) {
@@ -30,4 +31,8 @@
     pmModelClassInit();
     psphotInit();
+
+    const char *statsName = NULL;       // Filename for statistics
+    psMetadata *stats = NULL;           // Container for statistics
+    FILE *statsFile = NULL;             // File stream for statistics
 
     pmConfig *config = pswarpArguments(argc, argv);
@@ -50,6 +55,22 @@
     }
 
+    // Open the statistics file
+    bool mdok;                          ///< Status of MD lookup
+    statsName = psMetadataLookupStr(&mdok, config->arguments, "STATS"); ///< Filename for statistics
+    if (mdok && statsName && strlen(statsName) > 0) {
+        psString resolved = pmConfigConvertFilename(statsName, config, true, true);
+        statsFile = fopen(resolved, "w");
+        if (!statsFile) {
+            psError(PS_ERR_IO, true, "Unable to open statistics file %s for writing.\n", resolved);
+            psFree(resolved);
+            goto DIE;
+        }
+        psFree(resolved);
+        stats = psMetadataAlloc();
+        psMetadataAddS32(stats, PS_LIST_TAIL, "QUALITY", 0, "No problems", 0);
+    }
+
     // load and warp
-    if (!pswarpLoop(config)) {
+    if (!pswarpLoop(config, stats)) {
         goto DIE;
     }
@@ -58,4 +79,63 @@
 
 DIE:
-    return pswarpCleanup(config);
+    {
+        psExit exitValue = pswarpExitCode(PS_EXIT_SUCCESS); // Exit code
+
+        // Ensure everything is written out, at every level
+        pswarpFileActivation(config, detectorFiles, true);
+        pswarpFileActivation(config, skycellFiles, true);
+        pswarpFileActivation(config, photFiles, true);
+        pswarpFileActivation(config, independentFiles, true);
+        if (!pswarpIOChecksAfter(config)) {
+            psError(psErrorCodeLast(), false, "Unable to write files.");
+            exitValue = pswarpExitCode(exitValue);
+        }
+
+        // Write out summary statistics
+        if (stats) {
+            psMetadataAddF32(stats, PS_LIST_TAIL, "DT_WARP", 0, "Time for warp completion",
+                             psTimerMark("pswarp"));
+
+            const char *statsMDC = psMetadataConfigFormat(stats);
+            if (!statsMDC) {
+                psError(psErrorCodeLast(), false, "Unable to get statistics file.");
+                exitValue = pswarpExitCode(exitValue);
+            }
+            psFree(stats);
+            if (fprintf(statsFile, "%s", statsMDC) != strlen(statsMDC)) {
+                psError(PSWARP_ERR_IO, true, "Unable to write statistics file.");
+                exitValue = pswarpExitCode(exitValue);
+            }
+            psFree(statsMDC);
+            if (fclose(statsFile) == EOF) {
+                psError(PSWARP_ERR_IO, true, "Unable to close statistics file.");
+                exitValue = pswarpExitCode(exitValue);
+            }
+            pmConfigRunFilenameAddWrite(config, "STATS", statsName);
+        }
+
+        // Dump configuration
+        psString dump_file = psMetadataLookupStr(&mdok, config->arguments, "DUMP_CONFIG");
+        if (dump_file) {
+            if (!pmConfigDump(config, dump_file)) {
+                psError(psErrorCodeLast(), false, "Unable to dump configuration");
+                exitValue = pswarpExitCode(exitValue);
+            }
+        }
+
+        psThreadPoolFinalize();
+        psMemCheckCorruption(stderr, true);
+
+        psFree(config);
+
+        psTimerStop();
+        pmVisualClose();
+        pmModelClassCleanup();
+        pmConceptsDone();
+        pmConfigDone();
+        psLibFinalize();
+
+        exitValue = pswarpExitCode(exitValue);
+        return exitValue;
+    }
 }
Index: trunk/pswarp/src/pswarp.h
===================================================================
--- trunk/pswarp/src/pswarp.h	(revision 27125)
+++ trunk/pswarp/src/pswarp.h	(revision 27126)
@@ -80,6 +80,6 @@
 bool pswarpParseCamera (pmConfig *config);
 bool pswarpDefine (pmConfig *config);
-bool pswarpLoop (pmConfig *config);
-psExit pswarpCleanup (pmConfig *config);
+bool pswarpLoop (pmConfig *config, psMetadata *stats);
+psExit pswarpExitCode(psExit exitValue);
 bool pswarpTransformReadout (pmReadout *output, pmReadout *input, pmConfig *config);
 bool pswarpTransformSources(pmReadout *output, pmReadout *input, pmConfig *config);
@@ -129,2 +129,20 @@
 /// Print version information
 void pswarpVersionPrint(void);
+
+/// Activate a list of files
+///
+/// File list must be NULL-terminated
+void pswarpFileActivation(pmConfig *config, // Configuration
+                          char **files, // Files to turn on/off
+                          bool state   // Activation state
+    );
+
+
+// Run down the FPA hierarchy, checking files
+bool pswarpIOChecksBefore(pmConfig *config // Configuration
+    );
+
+// Run up the FPA hierarchy, checking files
+bool pswarpIOChecksAfter(pmConfig *config // Configuration
+    );
+
Index: trunk/pswarp/src/pswarpCleanup.c
===================================================================
--- trunk/pswarp/src/pswarpCleanup.c	(revision 27125)
+++ 	(revision )
@@ -1,69 +1,0 @@
-/** @file pswarpCleanup.c
- *
- *  @brief
- *
- *  @ingroup pswarp
- *
- *  @author IfA
- *  @version $Revision: 1.8 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2009-02-05 20:44:04 $
- *  Copyright 2009 Institute for Astronomy, University of Hawaii
- */
-
-# include "pswarp.h"
-
-psExit pswarpCleanup (pmConfig *config)
-{
-    psExit exitValue = PS_EXIT_SUCCESS;        // Exit value for program
-    psErrorCode errorCode = psErrorCodeLast(); // Error code
-    if (errorCode != PS_ERR_NONE) {
-        psErrorStackPrint(stderr, "Unable to perform warp.");
-        switch (errorCode) {
-          case PSWARP_ERR_UNKNOWN:
-          case PS_ERR_UNKNOWN:
-            exitValue = PS_EXIT_UNKNOWN_ERROR;
-            break;
-          case PS_ERR_IO:
-          case PS_ERR_DB_CLIENT:
-          case PS_ERR_DB_SERVER:
-          case PS_ERR_BAD_FITS:
-          case PS_ERR_OS_CALL_FAILED:
-          case PSWARP_ERR_IO:
-            exitValue = PS_EXIT_SYS_ERROR;
-            break;
-          case PS_ERR_BAD_PARAMETER_VALUE:
-          case PS_ERR_BAD_PARAMETER_TYPE:
-          case PS_ERR_BAD_PARAMETER_NULL:
-          case PS_ERR_BAD_PARAMETER_SIZE:
-          case PSWARP_ERR_ARGUMENTS:
-          case PSWARP_ERR_CONFIG:
-            exitValue = PS_EXIT_CONFIG_ERROR;
-            break;
-          case PSWARP_ERR_DATA:
-          case PSWARP_ERR_NO_OVERLAP:
-            exitValue = PS_EXIT_DATA_ERROR;
-            break;
-          case PS_ERR_UNEXPECTED_NULL:
-          case PS_ERR_PROGRAMMING:
-          case PSWARP_ERR_NOT_IMPLEMENTED:
-          default:
-            // It's a programming error if we're not dealing with the error correctly
-            exitValue = PS_EXIT_PROG_ERROR;
-            break;
-        }
-    }
-
-    psThreadPoolFinalize();
-    psMemCheckCorruption(stderr, true);
-
-    psFree(config);
-
-    psTimerStop();
-    pmVisualClose();
-    pmModelClassCleanup();
-    pmConceptsDone();
-    pmConfigDone();
-    psLibFinalize();
-
-    return exitValue;
-}
Index: trunk/pswarp/src/pswarpExit.c
===================================================================
--- trunk/pswarp/src/pswarpExit.c	(revision 27126)
+++ trunk/pswarp/src/pswarpExit.c	(revision 27126)
@@ -0,0 +1,57 @@
+/** @file pswarpExit.c
+ *
+ *  @brief
+ *
+ *  @ingroup pswarp
+ *
+ *  @author IfA
+ *  @version $Revision: 1.8 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2009-02-05 20:44:04 $
+ *  Copyright 2009 Institute for Astronomy, University of Hawaii
+ */
+
+# include "pswarp.h"
+
+
+psExit pswarpExitCode(psExit exitValue)
+{
+    if (exitValue != PS_EXIT_SUCCESS) {
+        return exitValue;
+    }
+
+    psErrorCode errorCode = psErrorCodeLast(); // Error code
+    if (errorCode != PS_ERR_NONE) {
+        psErrorStackPrint(stderr, "Unable to perform warp.");
+        switch (errorCode) {
+          case PSWARP_ERR_UNKNOWN:
+          case PS_ERR_UNKNOWN:
+            return PS_EXIT_UNKNOWN_ERROR;
+          case PS_ERR_IO:
+          case PS_ERR_DB_CLIENT:
+          case PS_ERR_DB_SERVER:
+          case PS_ERR_BAD_FITS:
+          case PS_ERR_OS_CALL_FAILED:
+          case PSWARP_ERR_IO:
+            return PS_EXIT_SYS_ERROR;
+          case PS_ERR_BAD_PARAMETER_VALUE:
+          case PS_ERR_BAD_PARAMETER_TYPE:
+          case PS_ERR_BAD_PARAMETER_NULL:
+          case PS_ERR_BAD_PARAMETER_SIZE:
+          case PSWARP_ERR_ARGUMENTS:
+          case PSWARP_ERR_CONFIG:
+            return PS_EXIT_CONFIG_ERROR;
+          case PSWARP_ERR_DATA:
+          case PSWARP_ERR_NO_OVERLAP:
+            return PS_EXIT_DATA_ERROR;
+          case PS_ERR_UNEXPECTED_NULL:
+          case PS_ERR_PROGRAMMING:
+          case PSWARP_ERR_NOT_IMPLEMENTED:
+          default:
+            // It's a programming error if we're not dealing with the error correctly
+            return PS_EXIT_PROG_ERROR;
+        }
+    }
+
+    return exitValue;
+}
+
Index: trunk/pswarp/src/pswarpFiles.c
===================================================================
--- trunk/pswarp/src/pswarpFiles.c	(revision 27126)
+++ trunk/pswarp/src/pswarpFiles.c	(revision 27126)
@@ -0,0 +1,65 @@
+/** @file pswarpFiles.c
+ *
+ *  @brief
+ *
+ *  @ingroup pswarp
+ *
+ *  @author IfA
+ *  @version $Revision: 1.38 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2009-02-13 21:54:32 $
+ *  Copyright 2009 Institute for Astronomy, University of Hawaii
+ */
+
+#include "pswarp.h"
+
+void pswarpFileActivation(pmConfig *config, char **files, bool state)
+{
+    for (int i = 0; files[i] != NULL; i++) {
+        pmFPAfileActivate(config->files, state, files[i]);
+    }
+    return;
+}
+
+bool pswarpIOChecksBefore(pmConfig *config)
+{
+    pmFPAview *view = pmFPAviewAlloc(0); // View for checking
+    if (!pmFPAfileIOChecks(config, view, PM_FPA_BEFORE)) {
+        psFree(view);
+        return false;
+    }
+    view->chip = 0;
+    if (!pmFPAfileIOChecks(config, view, PM_FPA_BEFORE)) {
+        psFree(view);
+        return false;
+    }
+    view->cell = 0;
+    if (!pmFPAfileIOChecks(config, view, PM_FPA_BEFORE)) {
+        psFree(view);
+        return false;
+    }
+    psFree(view);
+    return true;
+}
+
+bool pswarpIOChecksAfter(pmConfig *config)
+{
+    pmFPAview *view = pmFPAviewAlloc(0); // View for checking
+    view->chip = view->cell = 0;
+    if (!pmFPAfileIOChecks(config, view, PM_FPA_AFTER)) {
+        psFree(view);
+        return false;
+    }
+    view->cell = -1;
+    if (!pmFPAfileIOChecks(config, view, PM_FPA_AFTER)) {
+        psFree(view);
+        return false;
+    }
+    view->chip = -1;
+    if (!pmFPAfileIOChecks(config, view, PM_FPA_AFTER)) {
+        psFree(view);
+        return false;
+    }
+    psFree(view);
+    return true;
+}
+
Index: trunk/pswarp/src/pswarpLoop.c
===================================================================
--- trunk/pswarp/src/pswarpLoop.c	(revision 27125)
+++ trunk/pswarp/src/pswarpLoop.c	(revision 27126)
@@ -19,81 +19,15 @@
 
 
-// XXX these are generic functions which should be moved to psModules
-// Activate a list of files
-static void fileActivation(pmConfig *config, // Configuration
-                           char **files, // Files to turn on/off
-                           bool state   // Activation state
-    )
-{
-    for (int i = 0; files[i] != NULL; i++) {
-        pmFPAfileActivate(config->files, state, files[i]);
-    }
-    return;
-}
-
-/**
- * Run down the FPA hierarchy, checking files
- */
-static bool ioChecksBefore(pmConfig *config ///< Configuration
-                           )
-{
-    pmFPAview *view = pmFPAviewAlloc(0); ///< View for checking
-    if (!pmFPAfileIOChecks(config, view, PM_FPA_BEFORE)) {
-        psFree(view);
-        return false;
-    }
-    view->chip = 0;
-    if (!pmFPAfileIOChecks(config, view, PM_FPA_BEFORE)) {
-        psFree(view);
-        return false;
-    }
-    view->cell = 0;
-    if (!pmFPAfileIOChecks(config, view, PM_FPA_BEFORE)) {
-        psFree(view);
-        return false;
-    }
-    psFree(view);
-    return true;
-}
-
-/**
- * Run up the FPA hierarchy, checking files
- */
-static bool ioChecksAfter(pmConfig *config ///< Configuration
-                          )
-{
-    pmFPAview *view = pmFPAviewAlloc(0); ///< View for checking
-    view->chip = view->cell = 0;
-    if (!pmFPAfileIOChecks(config, view, PM_FPA_AFTER)) {
-        psFree(view);
-        return false;
-    }
-    view->cell = -1;
-    if (!pmFPAfileIOChecks(config, view, PM_FPA_AFTER)) {
-        psFree(view);
-        return false;
-    }
-    view->chip = -1;
-    if (!pmFPAfileIOChecks(config, view, PM_FPA_AFTER)) {
-        psFree(view);
-        return false;
-    }
-    psFree(view);
-    return true;
-}
-
-
-/**
- * Loop over the inputs, warp them to the output skycell and then write out the output.
- */
-bool pswarpLoop(pmConfig *config)
+
+// Loop over the inputs, warp them to the output skycell and then write out the output.
+bool pswarpLoop(pmConfig *config, psMetadata *stats)
 {
     bool status;
+    bool mdok;                          // Status of MD lookup
 
     const char *skyCamera = psMetadataLookupStr(NULL, config->arguments,
-                                                "SKYCELL.CAMERA");  ///< Name of camera for skycell
+                                                "SKYCELL.CAMERA");  // Name of camera for skycell
     pmConfigCamerasCull(config, skyCamera);
     pmConfigRecipesCull(config, "PSWARP,PPSTATS,PSPHOT,PSASTRO,MASKS,JPEG");
-
 
     // load the recipe
@@ -143,33 +77,17 @@
     psFree (view);
 
-    bool mdok;                          ///< Status of MD lookup
-    const char *statsName = psMetadataLookupStr(&mdok, config->arguments, "STATS"); ///< Filename for statistics
-    psMetadata *stats = NULL;           ///< Container for statistics
-    FILE *statsFile = NULL;             ///< File stream for statistics
-    if (mdok && statsName && strlen(statsName) > 0) {
-        psString resolved = pmConfigConvertFilename(statsName, config, true, true);
-        statsFile = fopen(resolved, "w");
-        if (!statsFile) {
-            psError(PS_ERR_IO, true, "Unable to open statistics file %s for writing.\n", resolved);
-            psFree(resolved);
-            return false;
-        }
-        psFree(resolved);
-        stats = psMetadataAlloc();
-        psMetadataAddS32(stats, PS_LIST_TAIL, "QUALITY", 0, "No problems", 0);
-    }
 
     // Turn all skycell files on to generate them, and then turn them off for the loop over the input images
     // the input, which is in a different format.
     {
-        fileActivation(config, detectorFiles, false);
-        fileActivation(config, photFiles, false);
-        fileActivation(config, independentFiles, false);
-        fileActivation(config, skycellFiles, true);
-        if (!ioChecksBefore(config)) {
+        pswarpFileActivation(config, detectorFiles, false);
+        pswarpFileActivation(config, photFiles, false);
+        pswarpFileActivation(config, independentFiles, false);
+        pswarpFileActivation(config, skycellFiles, true);
+        if (!pswarpIOChecksBefore(config)) {
             psError(psErrorCodeLast(), false, "Unable to read files.");
-            return false;
-        }
-        fileActivation(config, skycellFiles, false);
+            goto DONE;
+        }
+        pswarpFileActivation(config, skycellFiles, false);
     }
 
@@ -183,5 +101,5 @@
         if (!pmFPAfileIOChecks(config, view, PM_FPA_BEFORE)) {
             psError(psErrorCodeLast(), false, "Unable to read files.");
-            return false;
+            goto DONE;
         }
         while ((chip = pmFPAviewNextChip (view, input->fpa, 1)) != NULL) {
@@ -190,5 +108,5 @@
             if (!pmFPAfileIOChecks(config, view, PM_FPA_BEFORE)) {
                 psError(psErrorCodeLast(), false, "Unable to read files.");
-                return false;
+                goto DONE;
             }
             pmCell *cell;
@@ -199,19 +117,19 @@
                     !pmFPAfileIOChecks (config, view, PM_FPA_AFTER)) {
                     psError(psErrorCodeLast(), false, "Unable to read files.");
-                    return false;
+                    goto DONE;
                 }
             }
             if (!pmFPAfileIOChecks (config, view, PM_FPA_AFTER)) {
                 psError(psErrorCodeLast(), false, "Unable to write files.");
-                return false;
+                goto DONE;
             }
         }
         if (!pmFPAfileIOChecks (config, view, PM_FPA_AFTER)) {
             psError(psErrorCodeLast(), false, "Unable to write files.");
-            return false;
-        }
-        psFree(view);
-
-        fileActivation(config, detectorFiles, true);
+            goto DONE;
+        }
+        psFree(view);
+
+        pswarpFileActivation(config, detectorFiles, true);
         pmFPAfileActivate(config->files, false, "PSWARP.ASTROM");
     }
@@ -238,5 +156,5 @@
             psFree(view);
             psFree(stats);
-            return false;
+            goto DONE;
         }
     }
@@ -247,5 +165,5 @@
     if (!pmFPAfileIOChecks (config, view, PM_FPA_BEFORE)) {
         psError(psErrorCodeLast(), false, "Unable to read files.");
-        return false;
+        goto DONE;
     }
 
@@ -256,5 +174,5 @@
         if (!pmFPAfileIOChecks (config, view, PM_FPA_BEFORE)) {
             psError(psErrorCodeLast(), false, "Unable to read files.");
-            return false;
+            goto DONE;
         }
 
@@ -266,5 +184,5 @@
                 psFree(view);
                 psFree(stats);
-                return false;
+                goto DONE;
             }
         } else {
@@ -274,5 +192,5 @@
                 psFree(view);
                 psFree(stats);
-                return false;
+                goto DONE;
             }
         }
@@ -284,5 +202,5 @@
             if (!pmFPAfileIOChecks (config, view, PM_FPA_BEFORE)) {
                 psError(psErrorCodeLast(), false, "Unable to read files.");
-                return false;
+                goto DONE;
             }
 
@@ -294,5 +212,5 @@
                 if (!pmFPAfileIOChecks(config, view, PM_FPA_BEFORE)) {
                     psError(psErrorCodeLast(), false, "Unable to read files.");
-                    return false;
+                    goto DONE;
                 }
                 if (!readout->data_exists) {
@@ -312,15 +230,15 @@
                 if (!pmFPAfileIOChecks(config, view, PM_FPA_AFTER)) {
                     psError(psErrorCodeLast(), false, "Unable to write files.");
-                    return false;
+                    goto DONE;
                 }
             }
             if (!pmFPAfileIOChecks(config, view, PM_FPA_AFTER)) {
                 psError(psErrorCodeLast(), false, "Unable to write files.");
-                return false;
+                goto DONE;
             }
         }
         if (!pmFPAfileIOChecks(config, view, PM_FPA_AFTER)) {
             psError(psErrorCodeLast(), false, "Unable to write files.");
-            return false;
+            goto DONE;
         }
     }
@@ -346,5 +264,5 @@
         psFree(cells);
         psFree(view);
-        return false;
+        goto DONE;
     }
 
@@ -384,5 +302,5 @@
         psFree(cells);
         psFree(view);
-        return false;
+        goto DONE;
     }
     psFree(cells);
@@ -395,5 +313,5 @@
         psFree(stats);
         psFree(view);
-        return false;
+        goto DONE;
     }
 
@@ -421,5 +339,5 @@
             psError(PSWARP_ERR_DATA, false, "Unable to find skycell HDU.");
             psFree(view);
-            return false;
+            goto DONE;
         }
         hdu->header = psMetadataCopy(hdu->header, skyHDU->header);
@@ -431,15 +349,15 @@
         psError(psErrorCodeLast(), false, "Unable to generate WCS header.");
         psFree(stats);
-        return false;
+        goto DONE;
     }
 
     if (!pmFPAfileIOChecks(config, view, PM_FPA_AFTER)) {
         psError(psErrorCodeLast(), false, "Unable to write files.");
-        return false;
+        goto DONE;
     }
 
     // Done with the detector side of things
-    fileActivation(config, detectorFiles, false);
-    fileActivation(config, independentFiles, false);
+    pswarpFileActivation(config, detectorFiles, false);
+    pswarpFileActivation(config, independentFiles, false);
 
     // We need a new PSF model for the warped frame.  It would be good to generate this analytically, but
@@ -447,8 +365,8 @@
 
     if (psMetadataLookupBool(&mdok, recipe, "PSF")) {
-        fileActivation(config, photFiles, true);
-        if (!ioChecksBefore(config)) {
+        pswarpFileActivation(config, photFiles, true);
+        if (!pswarpIOChecksBefore(config)) {
             psError(psErrorCodeLast(), false, "Unable to read files.");
-            return false;
+            goto DONE;
         }
 
@@ -464,5 +382,5 @@
         if (!sources) {
             psError(psErrorCodeLast(), false, "No sources supplied to measure PSF");
-            return false;
+            goto DONE;
         }
 
@@ -533,47 +451,4 @@
  DONE:
 
-    // Ensure everything is written out, at every level
-    fileActivation(config, independentFiles, true);
-    fileActivation(config, skycellFiles, true);
-    if (!ioChecksAfter(config)) {
-        psError(psErrorCodeLast(), false, "Unable to write files.");
-        return false;
-    }
-
-    // Write out summary statistics
-    if (stats) {
-        psMetadataAddF32(stats, PS_LIST_TAIL, "DT_WARP", 0, "Time for warp completion",
-                         psTimerMark("pswarp"));
-
-        const char *statsMDC = psMetadataConfigFormat(stats);
-        if (!statsMDC) {
-            psError(psErrorCodeLast(), false, "Unable to get statistics file.");
-            psFree(stats);
-            fclose(statsFile);
-            return false;
-        }
-        psFree(stats);
-        if (fprintf(statsFile, "%s", statsMDC) != strlen(statsMDC)) {
-            psError(PSWARP_ERR_IO, true, "Unable to write statistics file.");
-            psFree(statsMDC);
-            return false;
-        }
-        psFree(statsMDC);
-        if (fclose(statsFile) == EOF) {
-            psError(PSWARP_ERR_IO, true, "Unable to close statistics file.");
-            return false;
-        }
-        pmConfigRunFilenameAddWrite(config, "STATS", statsName);
-    }
-
-    // Dump configuration
-    psString dump_file = psMetadataLookupStr(&status, config->arguments, "DUMP_CONFIG");
-    if (dump_file) {
-        if (!pmConfigDump(config, dump_file)) {
-            psError(psErrorCodeLast(), false, "Unable to dump configuration");
-            return false;
-        }
-    }
-
     return true;
 }
