Index: branches/pap/magic/remove/src/streaksremove.c
===================================================================
--- branches/pap/magic/remove/src/streaksremove.c	(revision 28498)
+++ branches/pap/magic/remove/src/streaksremove.c	(revision 28534)
@@ -577,5 +577,5 @@
 }
 
-static void 
+static void
 setStreakBits(psImage *maskImage, psU32 maskStreak)
 {
@@ -644,5 +644,5 @@
             if (exciseAll) {
                 strkGetMaskValues(sf);
-                
+
                 // add the STREAK bit to the mask image pixels
                 setStreakBits(sf->inMask->image, sf->maskStreak);
@@ -941,9 +941,5 @@
         psArray *inTable = psFitsReadTable(in->fits);
         if (!inTable) {
-            psErrorStackPrint(stderr, "failed to read tablle in %s", in->resolved_name);
-            streaksExit("", PS_EXIT_DATA_ERROR);
-        }
-        if (!inTable->n) {
-            psErrorStackPrint(stderr, "table in %s is empty", in->resolved_name);
+            psErrorStackPrint(stderr, "failed to read table in %s", in->resolved_name);
             streaksExit("", PS_EXIT_DATA_ERROR);
         }
@@ -983,4 +979,12 @@
                 streaksExit("", PS_EXIT_DATA_ERROR);
             }
+        } else if (psArrayLength(inTable) == 0) {
+            printf("No input sources\n");
+            // We'd like to write a blank table, but this is as good as it gets without more work to parse the
+            // header and create dummy columns.
+            if (!psFitsWriteBlank(out->fits, header, extname)) {
+                psErrorStackPrint(stderr, "failed to write empty header to %s", out->resolved_name);
+                streaksExit("", PS_EXIT_DATA_ERROR);
+            }
         } else {
             printf("Censored ALL %d sources\n", numCensored);
