Index: /branches/pap_branch_080207/ppStack/src/ppStackPSF.c
===================================================================
--- /branches/pap_branch_080207/ppStack/src/ppStackPSF.c	(revision 16372)
+++ /branches/pap_branch_080207/ppStack/src/ppStackPSF.c	(revision 16372)
@@ -0,0 +1,30 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <pslib.h>
+#include <psmodules.h>
+
+#include "ppStack.h"
+
+pmPSF *ppStackPSF(const pmConfig *config, int numCols, int numRows, const psList *list)
+{
+    // Get the recipe values
+    int psfInstances = psMetadataLookupS32(NULL, config->arguments, "PSF.INSTANCES"); // Number of instances for PSF
+    float psfRadius = psMetadataLookupF32(NULL, config->arguments, "PSF.RADIUS"); // Radius for PSF
+    const char *psfModel = psMetadataLookupStr(NULL, config->arguments, "PSF.MODEL"); // Model for PSF
+    int psfOrder = psMetadataLookupS32(NULL, config->arguments, "PSF.ORDER"); // Spatial order for PSF
+
+    // Solve for the target PSF
+    psArray *array = psListToArray(list); // Array of PSFs
+    pmPSF *psf = pmPSFEnvelope(numCols, numRows, array, psfInstances, psfRadius, psfModel,
+                               psfOrder, psfOrder);
+    psFree(array);
+    if (!psf) {
+        psError(PS_ERR_UNKNOWN, false, "Unable to determine output PSF.");
+        return NULL;
+    }
+
+    return psf;
+}
