Index: trunk/pswarp/src/Makefile.am
===================================================================
--- trunk/pswarp/src/Makefile.am	(revision 23169)
+++ trunk/pswarp/src/Makefile.am	(revision 23170)
@@ -28,5 +28,5 @@
 	pswarpSetThreads.c	        \
 	pswarpTransformReadout.c	\
-	pswarpTransformSources.c \
+	pswarpTransformSources.c 	\
 	pswarpTransformTile.c		\
 	pswarpVersion.c            
Index: trunk/pswarp/src/pswarp.h
===================================================================
--- trunk/pswarp/src/pswarp.h	(revision 23169)
+++ trunk/pswarp/src/pswarp.h	(revision 23170)
@@ -121,2 +121,7 @@
 /// Return long software version information
 psString pswarpVersionLong(void);
+
+/// Populate header with version information
+bool pswarpVersionHeader(
+    psMetadata *header                  ///< Header to populate
+    );
Index: trunk/pswarp/src/pswarpLoop.c
===================================================================
--- trunk/pswarp/src/pswarpLoop.c	(revision 23169)
+++ trunk/pswarp/src/pswarpLoop.c	(revision 23170)
@@ -339,4 +339,6 @@
     }
 
+    pswarpVersionHeader(hdu->header);
+
     if (!pmAstromWriteWCS(hdu->header, outFPA, outChip, WCS_NONLIN_TOL)) {
         psError(PS_ERR_UNKNOWN, false, "Unable to generate WCS header.");
Index: trunk/pswarp/src/pswarpVersion.c
===================================================================
--- trunk/pswarp/src/pswarpVersion.c	(revision 23169)
+++ trunk/pswarp/src/pswarpVersion.c	(revision 23170)
@@ -18,4 +18,6 @@
 #include <pslib.h>
 #include <psmodules.h>
+#include <psphot.h>
+#include <ppStats.h>
 #include "pswarp.h"
 
@@ -57,2 +59,35 @@
     return version;
 };
+
+
+bool pswarpVersionHeader(psMetadata *header)
+{
+    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 history = NULL;               // History string
+    psStringAppend(&history, "pswarp at %s", timeString);
+    psFree(timeString);
+    psMetadataAddStr(header, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK, NULL, history);
+    psFree(history);
+
+    psLibVersionHeader(header);
+    psModulesVersionHeader(header);
+    psphotVersionHeader(header);
+    ppStatsVersionHeader(header);
+
+    psString version = pswarpVersion(); // Software version
+    psString source  = pswarpSource();  // Software source
+
+    psMetadataAddStr(header, PS_LIST_TAIL, "IPP.PSWARP.VERSION", PS_META_REPLACE,
+                     "Software version", version);
+    psMetadataAddStr(header, PS_LIST_TAIL, "IPP.PSWARP.SOURCE", PS_META_REPLACE,
+                     "S/W source", source);
+
+    psFree(version);
+    psFree(source);
+
+    return true;
+}
