Index: trunk/ppMerge/src/ppMerge.c
===================================================================
--- trunk/ppMerge/src/ppMerge.c	(revision 5862)
+++ trunk/ppMerge/src/ppMerge.c	(revision 6903)
@@ -1,70 +1,41 @@
-# include "ppMerge.h"
+#include <stdio.h>
+#include "pslib.h"
+#include "pmConcepts.h"
+#include "ppMerge.h"
+#include "ppMem.h"
 
-int main (int argc, char **argv) {
+int main(int argc, char **argv)
+{
+    ppMergeOptions *options = ppMergeOptionsAlloc();
+    ppConfig *config = ppConfigAlloc();
 
-    ppData data;
-    ppConfig config;
-    ppOptions options;
-
-
-    psTimerStart("merge");
+    psTimerStart(TIMERNAME);
 
     // Parse the configuration and arguments
-    ppMergeConfig (&config, argc, argv);
+    ppImageConfig(config, argc, argv);
 
     // Open the input image, output image, output mask
     // Get camera configuration from header if not already defined
     // Construct camera in preparation for reading
-    ppMergeParseCamera (&data, &config);
+    ppImageParseCamera(data, config);
 
     // Set various tasks (define optional operations)
-    ppMergeOptions (&data, &options, &config);
+    ppImageOptionsParse(data, options, config);
 
-    // open detrend images (mask), load headers
-    ppMergeParseDetrend (&data, &options, &config);
+    // open detrend images, load headers, optionally load pixels
+    ppImageParseDetrend(data, options, config);
 
-    // Image Merge Loop
-    ppMergeLoop (&data, &options, &config);
+    // Image Arithmetic Loop
+    ppImageLoop(data, options, config);
 
-    // output options
-    ppMergeOutput (&data, &options, &config);
+    // Cleaning up
+    psFree(data);
+    psFree(options);
+    psFree(config);
+    psTimerStop();
+    psTraceReset();
+    pmConceptsDone();
+    ppMemCheck();
 
-    exit (0);
+    return EXIT_SUCCESS;
 }
-
-int speedTest (void) 
-{
-    # define NTEST 10000000
-    psStats *testData, *stats;
-    stats = psStatsAlloc (PS_STAT_ROBUST_MEAN);
-    psList *testList = psListAlloc (NULL);
-    psArray *testArray = psArrayAlloc (NTEST);
-
-    psTimerStart("merge");
-    for (int i = 0; i < NTEST; i++) {
-	testArray->data[i] = stats;
-    }
-    fprintf (stderr, "added %d objects to array: %f usec / obj\n", NTEST, 1e6*psTimerMark ("merge")/NTEST);
-
-    psTimerStart("merge");
-    for (int i = 0; i < NTEST; i++) {
-	psListAdd (testList, PS_LIST_TAIL, stats);
-    }
-    fprintf (stderr, "added %d objects to list: %f usec / obj\n", NTEST, 1e6*psTimerMark ("merge")/NTEST);
-
-    psTimerStart("merge");
-    for (int i = 0; i < NTEST; i++) {
-	testData = testArray->data[i];
-    }
-    fprintf (stderr, "pulled %d objects from array: %f usec / obj\n", NTEST, 1e6*psTimerMark ("merge")/NTEST);
-
-    psTimerStart("merge");
-    psListElem *tmpInput = (psListElem *) testList->head;
-    while (tmpInput != NULL) {
-	testData = tmpInput->data;
-	tmpInput = tmpInput->next;
-    }
-    fprintf (stderr, "pulled %d objects from list: %f usec / obj\n", NTEST, 1e6*psTimerMark ("merge")/NTEST);
-
-    exit (0);
-}
