Index: /trunk/ppStack/src/ppStackLoop.c
===================================================================
--- /trunk/ppStack/src/ppStackLoop.c	(revision 19755)
+++ /trunk/ppStack/src/ppStackLoop.c	(revision 19756)
@@ -188,9 +188,21 @@
     bool mdok;                          // Status of MD lookup
     bool tempDelete = psMetadataLookupBool(&mdok, recipe, "TEMP.DELETE"); // Delete temporary files?
+    const char *tempDir = psMetadataLookupStr(NULL, recipe, "TEMP.DIR"); // Directory for temporary images
+    if (!tempDir) {
+        psError(PS_ERR_BAD_PARAMETER_VALUE, false, "Unable to find TEMP.DIR in recipe");
+        return false;
+    }
+    const char *tempName = psMetadataLookupStr(NULL, config->arguments, "OUTPUT"); // Name for temporary files
+    tempName = basename(tempName);
+    if (!tempName) {
+        psError(PS_ERR_BAD_PARAMETER_VALUE, false, "Unable to construct basename for temporary files.");
+        return false;
+    }
+
     const char *tempImage = psMetadataLookupStr(NULL, recipe, "TEMP.IMAGE"); // Suffix for temporary images
     const char *tempMask = psMetadataLookupStr(NULL, recipe, "TEMP.MASK"); // Suffix for temporary masks
     const char *tempWeight = psMetadataLookupStr(NULL, recipe, "TEMP.WEIGHT"); // Suffix for temp weight maps
     if (!tempImage || !tempMask || !tempWeight) {
-        psError(PS_ERR_BAD_PARAMETER_VALUE, true,
+        psError(PS_ERR_BAD_PARAMETER_VALUE, false,
                 "Unable to find TEMP.IMAGE, TEMP.MASK and TEMP.WEIGHT in recipe");
         return false;
@@ -368,6 +380,4 @@
     memDump("psf");
 
-    const char *outName = psMetadataLookupStr(NULL, config->arguments, "OUTPUT"); // Output root
-    assert(outName);
     psArray *imageNames = psArrayAlloc(num);
     psArray *maskNames = psArrayAlloc(num);
@@ -375,7 +385,8 @@
     for (int i = 0; i < num; i++) {
         psString imageName = NULL, maskName = NULL, weightName = NULL; // Names for convolved images
-        psStringAppend(&imageName, "%s.%d.%s", outName, i, tempImage);
-        psStringAppend(&maskName, "%s.%d.%s", outName, i, tempMask);
-        psStringAppend(&weightName, "%s.%d.%s", outName, i, tempWeight);
+        psStringAppend(&imageName, "%s/%s.%d.%s", tempDir, tempName, i, tempImage);
+        psStringAppend(&maskName, "%s/%s.%d.%s", tempDir, tempName, i, tempMask);
+        psStringAppend(&weightName, "%s/%s.%d.%s", tempDir, tempName, i, tempWeight);
+        psTrace("ppStack", 5, "Temporary files: %s %s %s\n", imageName, maskName, weightName);
         imageNames->data[i] = imageName;
         maskNames->data[i] = maskName;
