Index: /trunk/ppSub/src/ppSub.h
===================================================================
--- /trunk/ppSub/src/ppSub.h	(revision 23172)
+++ /trunk/ppSub/src/ppSub.h	(revision 23173)
@@ -89,6 +89,6 @@
     );
 
-/// Put the program version information into a metadata
-void ppSubVersionMetadata(psMetadata *metadata ///< Metadata to populate
+/// Put the program version information into a header
+bool ppSubVersionHeader(psMetadata *header ///< Header to populate
     );
 
Index: /trunk/ppSub/src/ppSubLoop.c
===================================================================
--- /trunk/ppSub/src/ppSubLoop.c	(revision 23172)
+++ /trunk/ppSub/src/ppSubLoop.c	(revision 23173)
@@ -59,5 +59,4 @@
 
     pmFPAview *view = pmFPAviewAlloc(0); // Pointer into FPA hierarchy
-    pmHDU *lastHDU = NULL;              // Last HDU that was updated
 
     // Iterate over the FPA hierarchy
@@ -99,14 +98,4 @@
             if (!pmFPAfileIOChecks(config, view, PM_FPA_BEFORE)) {
                 return false;
-            }
-
-            // Put version information into the header
-            pmHDU *hdu = pmHDUFromCell(inCell);
-            if (hdu && hdu != lastHDU) {
-                if (!hdu->header) {
-                    hdu->header = psMetadataAlloc();
-                }
-                ppSubVersionMetadata(hdu->header);
-                lastHDU = hdu;
             }
 
Index: /trunk/ppSub/src/ppSubReadoutUpdate.c
===================================================================
--- /trunk/ppSub/src/ppSubReadoutUpdate.c	(revision 23172)
+++ /trunk/ppSub/src/ppSubReadoutUpdate.c	(revision 23173)
@@ -44,4 +44,5 @@
     psMetadataAddStr(outHDU->header, PS_LIST_TAIL, "PPSUB.INPUT", 0,
                      "Subtraction input", inFile->filename);
+    ppSubVersionHeader(outHDU->header);
 
     // Statistics on the matching
Index: /trunk/ppSub/src/ppSubVersion.c
===================================================================
--- /trunk/ppSub/src/ppSubVersion.c	(revision 23172)
+++ /trunk/ppSub/src/ppSubVersion.c	(revision 23173)
@@ -19,4 +19,5 @@
 #include <psmodules.h>
 #include <ppStats.h>
+#include <psphot.h>
 
 #include "ppSub.h"
@@ -60,32 +61,33 @@
 
 
-void ppSubVersionMetadata(psMetadata *metadata)
+bool ppSubVersionHeader(psMetadata *header)
 {
-    PS_ASSERT_METADATA_NON_NULL(metadata,);
-
-    psString pslib = psLibVersionLong();// psLib version
-    psString psmodules = psModulesVersionLong(); // psModules version
-    psString ppStats = ppStatsVersionLong(); // ppStats version
-    psString ppSub = ppSubVersionLong(); // ppSub version
+    PS_ASSERT_METADATA_NON_NULL(header, false);
 
     psTime *time = psTimeGetNow(PS_TIME_TAI); // The time now
     psString timeString = psTimeToISO(time); // The time in an ISO string
     psFree(time);
-    psString head = NULL;               // Head string
-    psStringAppend(&head, "ppSub processing at %s. Component information:", timeString);
+    psString history = NULL;               // History string
+    psStringAppend(&history, "ppSub at %s", timeString);
     psFree(timeString);
+    psMetadataAddStr(header, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK, NULL, history);
+    psFree(history);
 
-    psMetadataAddStr(metadata, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK, head, "");
-    psMetadataAddStr(metadata, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK, pslib, "");
-    psMetadataAddStr(metadata, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK, psmodules, "");
-    psMetadataAddStr(metadata, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK, ppStats, "");
-    psMetadataAddStr(metadata, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK, ppSub, "");
+    psLibVersionHeader(header);
+    psModulesVersionHeader(header);
+    psphotVersionHeader(header);
+    ppStatsVersionHeader(header);
 
-    psFree(head);
-    psFree(pslib);
-    psFree(psmodules);
-    psFree(ppStats);
-    psFree(ppSub);
+    psString version = ppSubVersion(); // Software version
+    psString source  = ppSubSource();  // Software source
 
-    return;
+    psMetadataAddStr(header, PS_LIST_TAIL, "IPP.PPSUB.VERSION", PS_META_REPLACE,
+                     "Software version", version);
+    psMetadataAddStr(header, PS_LIST_TAIL, "IPP.PPSUB.SOURCE", PS_META_REPLACE,
+                     "S/W source", source);
+
+    psFree(version);
+    psFree(source);
+
+    return true;
 }
