Index: trunk/ippTools/src/difftool.c
===================================================================
--- trunk/ippTools/src/difftool.c	(revision 18678)
+++ trunk/ippTools/src/difftool.c	(revision 18679)
@@ -652,5 +652,6 @@
 
 // Generate a single populated run
-static bool populatedrun(const char *workdir, // Working directory
+static bool populatedrun(psArray *list, // List of runs, to print
+                         const char *workdir, // Working directory
                          const char *skycell_id, // Skycell identifier
                          const char *tess_id, // Tessellation identifier
@@ -759,8 +760,6 @@
     }
 
-    if (!diffRunPrintObject(stdout, run, !simple)) {
-            psError(PS_ERR_UNKNOWN, false, "failed to print object");
-            psFree(run);
-            return false;
+    if (list) {
+        psArrayAdd(list, list->n, run);
     }
 
@@ -782,4 +781,5 @@
     PXOPT_LOOKUP_S64(input_warp_id, config->args, "-input_warp_id", false, false);
     PXOPT_LOOKUP_S64(input_stack_id, config->args, "-input_stack_id", false, false);
+    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
 
     if (template_stack_id && template_warp_id) {
@@ -803,10 +803,23 @@
     }
 
-    return populatedrun(workdir, skycell_id, tess_id,
-                        input_warp_id ? input_warp_id : PS_MAX_S64,
-                        input_stack_id ? input_stack_id : PS_MAX_S64,
-                        template_warp_id ? template_warp_id : PS_MAX_S64,
-                        template_stack_id ? template_stack_id : PS_MAX_S64,
-                        config);
+    psArray *list = psArrayAllocEmpty(16); // List of runs, to print
+
+    if (!populatedrun(list, workdir, skycell_id, tess_id,
+                      input_warp_id ? input_warp_id : PS_MAX_S64,
+                      input_stack_id ? input_stack_id : PS_MAX_S64,
+                      template_warp_id ? template_warp_id : PS_MAX_S64,
+                      template_stack_id ? template_stack_id : PS_MAX_S64,
+                      config)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to create populated diffRun");
+        psFree(list);
+        return false;
+    }
+
+    if (!diffRunPrintObjects(stdout, list, !simple)) {
+            psError(PS_ERR_UNKNOWN, false, "failed to print object");
+            psFree(list);
+            return false;
+    }
+    psFree(list);
 
     return true;
@@ -880,4 +893,5 @@
     }
 
+    psArray *list = psArrayAllocEmpty(16); // List of runs, to print
     long numGood = 0;                   // Number of good rows added
     for (long i = 0; i < output->n; i++) {
@@ -907,5 +921,6 @@
         }
 
-        if (!populatedrun(workdir, skycell_id, tess_id, warp_id, PS_MAX_S64, PS_MAX_S64, stack_id, config)) {
+        if (!populatedrun(list, workdir, skycell_id, tess_id, warp_id, PS_MAX_S64, PS_MAX_S64,
+                          stack_id, config)) {
             psWarning("Unable to add run for %s,%s,%" PRId64 ",%" PRId64, skycell_id, tess_id,
                       warp_id, stack_id);
@@ -916,9 +931,13 @@
         numGood++;
     }
-
-    psLogMsg("difftool", PS_LOG_INFO, "%ld runs added.", numGood);
-
     psFree(output);
 
-    return true;
-}
+    if (!diffRunPrintObjects(stdout, list, !simple)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to print object");
+        psFree(list);
+        return false;
+    }
+    psFree(list);
+
+    return true;
+}
