Index: branches/tap_branches/psastro/src/psastroAnalysis.c
===================================================================
--- branches/tap_branches/psastro/src/psastroAnalysis.c	(revision 25900)
+++ branches/tap_branches/psastro/src/psastroAnalysis.c	(revision 27838)
@@ -69,4 +69,9 @@
     }
 
+    if (!psastroRemoveClumpsRawstars(config)) {
+        psError (PSASTRO_ERR_UNKNOWN, false, "failed to remove RAWSTAR clumps\n");
+        return false;
+    }
+
     // load the reference stars overlapping the data stars
     psArray *refs = psastroLoadRefstars(config, "PSASTRO.INPUT");
@@ -110,23 +115,47 @@
     if (chipastro) {
         if (!psastroChipAstrom (config)) {
-            psError (PSASTRO_ERR_UNKNOWN, false, "failed to perform single chip astrometry\n");
-            return false;
+            // This is likely a data quality issue
+            psWarning("Failed single chip astrometry --- suspect bad data quality");
+            if (stats && psMetadataLookupS32(NULL, stats, "QUALITY") == 0) {
+                psMetadataAddS32(stats, PS_LIST_TAIL, "QUALITY", PS_META_REPLACE,
+                                 "Single chip astrometry failed", PSASTRO_ERR_DATA);
+            }
+            fileSave(config, "PSASTRO.OUTPUT", false);
+            fileSave(config, "PSASTRO.OUTPUT.MASK", false);
+            fileSave(config, "PSASTRO.OUT.REFSTARS", false);
+            psErrorClear();
+            return true;
         }
     }
     if (mosastro) {
         if (!psastroMosaicAstrom (config)) {
-            psError (PSASTRO_ERR_UNKNOWN, false, "failed to perform mosaic camera astrometry\n");
-            return false;
+            // This is likely a data quality issue
+            psWarning("Failed mosaic astrometry --- suspect bad data quality");
+            if (stats && psMetadataLookupS32(NULL, stats, "QUALITY") == 0) {
+                psMetadataAddS32(stats, PS_LIST_TAIL, "QUALITY", PS_META_REPLACE,
+                                 "Mosaic astrometry failed", PSASTRO_ERR_DATA);
+            }
+            fileSave(config, "PSASTRO.OUTPUT", false);
+            fileSave(config, "PSASTRO.OUTPUT.MASK", false);
+            fileSave(config, "PSASTRO.OUT.REFSTARS", false);
+            psErrorClear();
+            return true;
         }
     }
 
-    psastroZeroPoint (config);
+    if (!psastroZeroPoint (config)) {
+        psError(psErrorCodeLast(), false, "Failed to calculate zero point.");
+        return false;
+    }
 
-    psastroAstromGuessCheck (config);
+    if (!psastroAstromGuessCheck (config)) {
+        psError(psErrorCodeLast(), false, "Failed to check astrometry guess.");
+        return false;
+    }
 
-    psastroMaskUpdates (config);
-
-    // XXX how do we specify stack astrometry?
-    // psastroStackAstrom (config, refs);
+    if (!psastroMaskUpdates (config)) {
+        psError(psErrorCodeLast(), false, "Failed to generate dynamic masks.");
+        return false;
+    }
 
     return true;
