Index: /trunk/magic/remove/src/streaksVersion.c
===================================================================
--- /trunk/magic/remove/src/streaksVersion.c	(revision 30314)
+++ /trunk/magic/remove/src/streaksVersion.c	(revision 30315)
@@ -58,5 +58,5 @@
     psString source = streaksSource();   // Software source
 
-    psMetadataAddStr(header, PS_LIST_TAIL, "STREAK_V", 0, NULL, source);
+    psMetadataAddStr(header, PS_LIST_TAIL, "STREAK_V", PS_META_REPLACE, NULL, source);
     
     psStringPrepend(&version, "%s version: ", streaksProgram);
Index: /trunk/magic/remove/src/streakscompare.c
===================================================================
--- /trunk/magic/remove/src/streakscompare.c	(revision 30314)
+++ /trunk/magic/remove/src/streakscompare.c	(revision 30315)
@@ -18,6 +18,6 @@
     ippStage stage = psMetadataLookupS32(&status, config->arguments, "STAGE");
 
-    sFile *file1 = sFileOpen(config, stage, "INPUT1", NULL, true);
-    sFile *file2 = sFileOpen(config, stage, "INPUT2", NULL, true);
+    sFile *file1 = sFileOpen(config, stage, "INPUT1", NULL, true, false);
+    sFile *file2 = sFileOpen(config, stage, "INPUT2", NULL, true, false);
 
     int ncomponents;
Index: /trunk/magic/remove/src/streaksio.c
===================================================================
--- /trunk/magic/remove/src/streaksio.c	(revision 30314)
+++ /trunk/magic/remove/src/streaksio.c	(revision 30315)
@@ -42,5 +42,5 @@
     sf->class_id = psMetadataLookupStr(&status, config->arguments, "CLASS_ID");
 
-    sf->inImage = sFileOpen(config, stage, "INPUT", NULL, true);
+    sf->inImage = sFileOpen(config, stage, "INPUT", NULL, true, false);
     sf->nHDU = sf->inImage->nHDU;
 
@@ -48,22 +48,22 @@
     // The names of the temporary and recovery files are taken from the input
     char *inputBasename = basename(sf->inImage->name);
-    sf->outImage = sFileOpen(config, stage, "OUTPUT", inputBasename, true);
+    sf->outImage = sFileOpen(config, stage, "OUTPUT", inputBasename, true, true);
 
     if (remove) {
         // XXX: the recovery file should be required if stage is raw and the replace flag is set
         // that is if the input raw image is to be destroyed
-        sf->recImage = sFileOpen(config, stage, "RECOVERY", inputBasename, false);
-    } else {
-        sf->recImage = sFileOpen(config, stage, "RECOVERY.IMAGE", NULL, true);
-    }
-
-    sf->inMask = sFileOpen(config, stage, "INPUT.MASK", NULL, false);
+        sf->recImage = sFileOpen(config, stage, "RECOVERY", inputBasename, false, false);
+    } else {
+        sf->recImage = sFileOpen(config, stage, "RECOVERY.IMAGE", NULL, true, false);
+    }
+
+    sf->inMask = sFileOpen(config, stage, "INPUT.MASK", NULL, false, false);
     if (sf->inMask && (sf->stage != IPP_STAGE_RAW)) {
         inputBasename = basename(sf->inMask->name);
-        sf->outMask = sFileOpen(config, stage, "OUTPUT", inputBasename, true);
+        sf->outMask = sFileOpen(config, stage, "OUTPUT", inputBasename, true, true);
         if (remove) {
-            sf->recMask = sFileOpen(config, stage, "RECOVERY", inputBasename, false);
+            sf->recMask = sFileOpen(config, stage, "RECOVERY", inputBasename, false, false);
         } else {
-            sf->recMask = sFileOpen(config, stage, "RECOVERY.MASK", NULL, true);
+            sf->recMask = sFileOpen(config, stage, "RECOVERY.MASK", NULL, true, false);
         }
     }
@@ -73,27 +73,27 @@
     // If it doesn't exist, we didn't have a camera mask
     if (remove && sf->inMask && (stage == IPP_STAGE_CHIP)) {
-        sf->inChMask = sFileOpen(config, stage, "INPUT.CHMASK", NULL, false);
+        sf->inChMask = sFileOpen(config, stage, "INPUT.CHMASK", NULL, false, false);
         if (sf->inChMask) {
             inputBasename = basename(sf->inChMask->name);
-            sf->outChMask = sFileOpen(config, stage, "OUTPUT", inputBasename, true);
-            sf->recChMask = sFileOpen(config, stage, "RECOVERY", inputBasename, false);
-        }
-    }
-
-    sf->inWeight = sFileOpen(config, stage, "INPUT.WEIGHT", NULL, false);
+            sf->outChMask = sFileOpen(config, stage, "OUTPUT", inputBasename, true, true);
+            sf->recChMask = sFileOpen(config, stage, "RECOVERY", inputBasename, false, false);
+        }
+    }
+
+    sf->inWeight = sFileOpen(config, stage, "INPUT.WEIGHT", NULL, false, false);
     if (sf->inWeight) {
         inputBasename = basename(sf->inWeight->name);
-        sf->outWeight = sFileOpen(config, stage, "OUTPUT", inputBasename, true);
+        sf->outWeight = sFileOpen(config, stage, "OUTPUT", inputBasename, true, true);
         if (remove) {
-            sf->recWeight = sFileOpen(config, stage, "RECOVERY", inputBasename, false);
+            sf->recWeight = sFileOpen(config, stage, "RECOVERY", inputBasename, false, false);
         } else {
-            sf->recWeight = sFileOpen(config, stage, "RECOVERY.WEIGHT", NULL, true);
+            sf->recWeight = sFileOpen(config, stage, "RECOVERY.WEIGHT", NULL, true, false);
         }
     }
     if (remove) {
-        sf->inSources = sFileOpen(config, stage, "SOURCES", NULL, false);
+        sf->inSources = sFileOpen(config, stage, "SOURCES", NULL, false, false);
         if (sf->inSources) {
             inputBasename = basename(sf->inSources->name);
-            sf->outSources = sFileOpen(config, stage, "OUTPUT", inputBasename, true);
+            sf->outSources = sFileOpen(config, stage, "OUTPUT", inputBasename, true, true);
         }
     }
@@ -212,5 +212,5 @@
 
 static psString
-resolveFilename(pmConfig *config, sFile *sfile, bool create)
+resolveFilename(pmConfig *config, sFile *sfile, bool create, bool checkIfDestreaked)
 {
     sfile->inNebulous = IN_NEBULOUS(sfile->name);
@@ -223,5 +223,5 @@
             // instance. It will get created below in pmConfigConvertFilename
             if ((sfile->resolved_name = nebFind(server, sfile->name)) != NULL) {
-                if (!nebFileIsDestreaked(sfile)) {
+                if (checkIfDestreaked && !nebFileIsDestreaked(sfile)) {
                     psError(PS_ERR_IO, false, "attempting to delete file that has not been destreaked %s", sfile->name);
                     return NULL;
@@ -238,5 +238,5 @@
 
 sFile *sFileOpen(pmConfig *config, ippStage stage, psString fileSelect,
-    psString outputFilename, bool required)
+    psString outputFilename, bool required, bool checkIfDestreaked)
 {
     bool status;
@@ -313,6 +313,7 @@
     // and the file is to be opened for writing
     if (outputFilename) {
+        sfile->write = true;
         psStringAppend(&sfile->name, "%s%s", name, outputFilename);
-        sfile->resolved_name = resolveFilename(config, sfile, true);
+        sfile->resolved_name = resolveFilename(config, sfile, true, checkIfDestreaked);
         if (!sfile->resolved_name) {
             psError(PS_ERR_IO, false, "Failed to resolve filename for %s", sfile->name);
@@ -326,5 +327,5 @@
     } else {
         sfile->name = psStringCopy(name);
-        sfile->resolved_name = resolveFilename(config, sfile, false);
+        sfile->resolved_name = resolveFilename(config, sfile, false, false);
         if (!sfile->resolved_name) {
             psError(PS_ERR_IO, false, "Failed to resolve name for %s", sfile->name);
@@ -393,8 +394,8 @@
 
 void
-addDestreakKeyword(psMetadata *header)
+addDestreakKeyword(psMetadata *header, bool value)
 {
     psMetadataAddBool(header, PS_LIST_TAIL, "PSDESTRK", PS_META_REPLACE,
-        "Have streaks been removed from image?", true);
+        "Have streaks been removed from image?", value);
 }
 
@@ -407,5 +408,5 @@
 
 void
-copyPHU(streakFiles *sfiles, bool remove)
+copyPHU(streakFiles *sfiles, bool remove, bool destreak)
 {
     psAssert(sfiles->stage == IPP_STAGE_RAW, "copyPHU should only be used for raw stage");
@@ -424,5 +425,5 @@
 
     // add keyword indicating that streaks have been removed
-    addDestreakKeyword(imageHeader);
+    addDestreakKeyword(imageHeader, destreak);
 
     if (!psFitsWriteBlank(sfiles->outImage->fits, imageHeader, NULL)) {
@@ -454,5 +455,5 @@
         }
         // add keyword indicating that streaks have been removed
-        addDestreakKeyword(maskHeader);
+        addDestreakKeyword(maskHeader, destreak);
         if (!psFitsWriteBlank(sfiles->outMask->fits, maskHeader, NULL)) {
             psError(PS_ERR_IO, false, "failed to write primary header to %s",
@@ -484,5 +485,5 @@
 
         // add keyword indicating that streaks have been removed
-        addDestreakKeyword(weightHeader);
+        addDestreakKeyword(weightHeader, destreak);
         if (!psFitsWriteBlank(sfiles->outWeight->fits, weightHeader, NULL)) {
             psError(PS_ERR_IO, false, "failed to write primary header to %s",
@@ -674,5 +675,5 @@
     psVector *tiles)
 {
-    if (!sfile) {
+    if (!sfile || !sfile->write) {
         return;
     }
@@ -1242,4 +1243,6 @@
     } else if (in->image->type.type == PS_TYPE_F32) {
         in->exciseValue = NAN;
+    } else if (in->image->type.type == PS_TYPE_F64) {
+        in->exciseValue = NAN;
     } else {
         psError(PS_ERR_PROGRAMMING, true, "unexpected image type found: %d\n", in->image->type.type);
Index: /trunk/magic/remove/src/streaksio.h
===================================================================
--- /trunk/magic/remove/src/streaksio.h	(revision 30314)
+++ /trunk/magic/remove/src/streaksio.h	(revision 30315)
@@ -5,5 +5,5 @@
 
 sFile *sFileOpen(pmConfig *config, ippStage stage, psString fileSelect,
-    psString outputFilename, bool required);
+    psString outputFilename, bool required, bool checkIfDestreaked);
 
 void closeImages(streakFiles *sfiles);
@@ -12,5 +12,5 @@
 
 void readImage(sFile *sfile, int extnum, ippStage stage, bool isMask);
-void copyPHU(streakFiles *sfiles, bool remove);
+void copyPHU(streakFiles *sfiles, bool remove, bool destreaked);
 void copyTable(sFile *out, sFile *in, int extnum);
 void copyFitsOptions(sFile *out, sFile *rec, sFile *in, psVector *tiles);
@@ -24,5 +24,5 @@
 void readImageFrom_pmFile(streakFiles *sf);
 
-void addDestreakKeyword(psMetadata *);
+void addDestreakKeyword(psMetadata *, bool value);
 void addRecoveryKeyword(psMetadata *);
 
Index: /trunk/magic/remove/src/streaksrelease.c
===================================================================
--- /trunk/magic/remove/src/streaksrelease.c	(revision 30314)
+++ /trunk/magic/remove/src/streaksrelease.c	(revision 30315)
@@ -24,5 +24,5 @@
     if (sfiles->stage == IPP_STAGE_RAW) {
         // copy PHU to output files
-        copyPHU(sfiles, true);
+        copyPHU(sfiles, false, true);
 
         // advance to the first image extension
Index: /trunk/magic/remove/src/streaksremove.c
===================================================================
--- /trunk/magic/remove/src/streaksremove.c	(revision 30314)
+++ /trunk/magic/remove/src/streaksremove.c	(revision 30315)
@@ -93,5 +93,5 @@
         // Raw files have a phu and multiple extensions, one per chip
         // Since this is a raw file, copy it's PHU to output files
-        copyPHU(sfiles, true);
+        copyPHU(sfiles, true, true);
 
         // advance to the first image extension
@@ -617,5 +617,5 @@
         addRecoveryKeyword(sf->recImage->header);
     }
-    addDestreakKeyword(sf->outImage->header);
+    addDestreakKeyword(sf->outImage->header, true);
 
     if (!SFILE_IS_IMAGE(sf->inImage)) {
@@ -643,5 +643,5 @@
                 addRecoveryKeyword(sf->recMask->header);
             }
-            addDestreakKeyword(sf->outMask->header);
+            addDestreakKeyword(sf->outMask->header, true);
             // Note: we don't excise the mask pixels even if exciseAll is true.
             setupImageRefs(sf->outMask, sf->recMask, sf->inMask, sf->extnum, false);
@@ -675,5 +675,5 @@
             addRecoveryKeyword(sf->recWeight->header);
         }
-        addDestreakKeyword(sf->outWeight->header);
+        addDestreakKeyword(sf->outWeight->header, true);
         setupImageRefs(sf->outWeight, sf->recWeight, sf->inWeight, sf->extnum, exciseAll);
 
@@ -916,5 +916,5 @@
             streaksExit("", PS_EXIT_DATA_ERROR);
         }
-        addDestreakKeyword(header);
+        addDestreakKeyword(header, true);
 
         if (!psFitsWriteBlank(out->fits, header, extname)) {
@@ -977,5 +977,5 @@
         psArrayRealloc(outTable, j);
 
-        addDestreakKeyword(header);
+        addDestreakKeyword(header, true);
         if (psArrayLength(outTable) > 0) {
             printf("Censored %d sources\n", numCensored);
Index: /trunk/magic/remove/src/streaksremove.h
===================================================================
--- /trunk/magic/remove/src/streaksremove.h	(revision 30314)
+++ /trunk/magic/remove/src/streaksremove.h	(revision 30315)
@@ -18,4 +18,5 @@
     psString    name;
     bool        inNebulous;
+    bool        write;
     psFits      *fits;
     int         nHDU;
Index: /trunk/magic/remove/src/streaksreplace.c
===================================================================
--- /trunk/magic/remove/src/streaksreplace.c	(revision 30314)
+++ /trunk/magic/remove/src/streaksreplace.c	(revision 30315)
@@ -36,5 +36,5 @@
     if (sfiles->stage == IPP_STAGE_RAW) {
         // copy PHU to output files
-        copyPHU(sfiles, false);
+        copyPHU(sfiles, false, false);
 
         // advance to the first image extension
@@ -296,4 +296,5 @@
 
     sf->outImage->header = (psMetadata*) psMemIncrRefCounter(sf->inImage->header);
+    addDestreakKeyword(sf->outImage->header, false);
 
     if (!SFILE_IS_IMAGE(sf->inImage)) {
@@ -317,4 +318,6 @@
         readImage(sf->recMask, sf->extnum, sf->stage, true);
         sf->outMask->header = (psMetadata*) psMemIncrRefCounter(sf->inMask->header);
+        
+        addDestreakKeyword(sf->outMask->header, false);
 
         // XXX: TODO
@@ -329,4 +332,5 @@
 
         sf->outWeight->header = (psMetadata*) psMemIncrRefCounter(sf->inWeight->header);
+        addDestreakKeyword(sf->outWeight->header, false);
         setupImageRefs(sf->outMask, NULL, sf->inMask, sf->extnum, false);
 
