Index: trunk/ppImage/src/Makefile.am
===================================================================
--- trunk/ppImage/src/Makefile.am	(revision 10288)
+++ trunk/ppImage/src/Makefile.am	(revision 10294)
@@ -5,4 +5,5 @@
 	ppImageOptions.h \
 	ppImageDetrendFringe.h \
+	ppImageVersion.h \
 	ppMem.h
 
@@ -24,5 +25,6 @@
 	ppImagePhotom.c \
 	ppImageAstrom.c \
-	ppImageAddstar.c
+	ppImageAddstar.c \
+	ppImageVersion.c
 
 ppFocus_CPPFLAGS = $(PSLIB_CFLAGS) $(PSMODULE_CFLAGS) $(PSPHOT_CFLAGS) $(PSASTRO_CFLAGS) $(PPSTATS_CFLAGS) $(ppImage_CFLAGS)
@@ -45,5 +47,6 @@
 	ppImagePhotom.c \
 	ppImageAstrom.c \
-	ppImageAddstar.c
+	ppImageAddstar.c \
+	ppImageVersion.c
 
 ppTest_CPPFLAGS = $(PSLIB_CFLAGS) $(PSMODULE_CFLAGS) $(ppImage_CFLAGS)
Index: trunk/ppImage/src/ppImageLoop.c
===================================================================
--- trunk/ppImage/src/ppImageLoop.c	(revision 10288)
+++ trunk/ppImage/src/ppImageLoop.c	(revision 10294)
@@ -6,4 +6,5 @@
 #include "ppImage.h"
 #include "ppImageDetrendFringe.h"
+#include "ppImageVersion.h"
 
 
@@ -36,5 +37,6 @@
     }
 
-    pmFPAview *view = pmFPAviewAlloc(0);
+    pmFPAview *view = pmFPAviewAlloc(0);// View for level of interest
+    pmHDU *lastHDU = NULL;              // Last HDU that was updated
 
     // files associated with the science image
@@ -61,4 +63,17 @@
                 return false;
             }
+
+            // Put version information into the header
+            pmHDU *hdu = pmHDUFromCell(cell);
+            if (!hdu) {
+                psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to find HDU for cell (%d,%d)!\n",
+                        view->chip, view->cell);
+                return false;
+            }
+            if (hdu != lastHDU) {
+                ppImageVersionMetadata(hdu->header);
+                lastHDU = hdu;
+            }
+
 
             // process each of the readouts
Index: trunk/ppImage/src/ppImageVersion.c
===================================================================
--- trunk/ppImage/src/ppImageVersion.c	(revision 10294)
+++ trunk/ppImage/src/ppImageVersion.c	(revision 10294)
@@ -0,0 +1,68 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <pslib.h>
+#include <psmodules.h>
+#include <psphot.h>
+#include <psastro.h>
+#include <ppStats.h>
+
+#include "ppImageVersion.h"
+
+static const char *cvsTag = "$Name: not supported by cvs2svn $";// CVS tag name
+
+psString ppImageVersion(void)
+{
+    psString version = NULL;            // Version, to return
+    psStringAppend(&version, "%s-%s",PACKAGE_NAME,PACKAGE_VERSION);
+    return version;
+}
+
+psString ppImageVersionLong(void)
+{
+    psString version = ppImageVersion(); // Version, to return
+    psString tag = psStringStripCVS(cvsTag, "Name"); // CVS tag
+    psStringAppend(&version, " (cvs tag %s) %s, %s", tag, __DATE__, __TIME__);
+    psFree(tag);
+    return version;
+}
+
+
+void ppImageVersionMetadata(psMetadata *metadata)
+{
+    PS_ASSERT_METADATA_NON_NULL(metadata,);
+
+    psString pslib = psLibVersionLong();// psLib version
+    psString psmodules = psModulesVersionLong(); // psModules version
+    psString psphot = psphotVersionLong(); // psphot version
+    psString psastro = psastroVersionLong(); // psastro version
+    psString ppStats = ppStatsVersionLong(); // ppStats version
+    psString ppImage = ppImageVersionLong(); // ppImage version
+
+    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, "ppImage processing at %s. Component information:", timeString);
+    psFree(timeString);
+
+    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, psphot, "");
+    psMetadataAddStr(metadata, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK, psastro, "");
+    psMetadataAddStr(metadata, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK, ppStats, "");
+    psMetadataAddStr(metadata, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK, ppImage, "");
+
+    psFree(head);
+    psFree(pslib);
+    psFree(psmodules);
+    psFree(psphot);
+    psFree(psastro);
+    psFree(ppStats);
+    psFree(ppImage);
+
+    return;
+}
Index: trunk/ppImage/src/ppImageVersion.h
===================================================================
--- trunk/ppImage/src/ppImageVersion.h	(revision 10294)
+++ trunk/ppImage/src/ppImageVersion.h	(revision 10294)
@@ -0,0 +1,14 @@
+#ifndef PP_IMAGE_VERSION_H
+#define PP_IMAGE_VERSION_H
+
+/// Return short version information
+psString ppImageVersion(void);
+
+/// Return long version information
+psString ppImageVersionLong(void);
+
+/// Update the metadata with version information for all dependencies
+void ppImageVersionMetadata(psMetadata *metadata ///< Metadata to update with version information
+    );
+
+#endif
