Index: trunk/ppStack/src/ppStackArguments.c
===================================================================
--- trunk/ppStack/src/ppStackArguments.c	(revision 21092)
+++ trunk/ppStack/src/ppStackArguments.c	(revision 21183)
@@ -79,6 +79,6 @@
         } \
     } \
-    psMaskType value = pmConfigMaskGet(name, config); \
-    psMetadataAddU8(recipe, PS_LIST_TAIL, RECIPENAME, PS_META_REPLACE, NULL, value); \
+    psImageMaskType value = pmConfigMaskGet(name, config); \
+    psMetadataAddImageMask(recipe, PS_LIST_TAIL, RECIPENAME, PS_META_REPLACE, NULL, value); \
 }
 
Index: trunk/ppStack/src/ppStackLoop.c
===================================================================
--- trunk/ppStack/src/ppStackLoop.c	(revision 21092)
+++ trunk/ppStack/src/ppStackLoop.c	(revision 21183)
@@ -403,5 +403,5 @@
     int numGood = 0;                    // Number of good frames
     int numCols = 0, numRows = 0;       // Size of image
-    psVector *inputMask = psVectorAlloc(num, PS_TYPE_U8); // Mask for inputs
+    psVector *inputMask = psVectorAlloc(num, PS_TYPE_VECTOR_MASK); // Mask for inputs
     psVectorInit(inputMask, 0);
     psVector *matchChi2 = psVectorAlloc(num, PS_TYPE_F32); // chi^2 for stamps when matching
@@ -449,5 +449,5 @@
                           sourceLists->data[i], targetPSF, rng, config)) {
             psErrorStackPrint(stderr, "Unable to match image %d --- ignoring.", i);
-            inputMask->data.U8[i] = PPSTACK_MASK_MATCH;
+            inputMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = PPSTACK_MASK_MATCH;
             psErrorClear();
             continue;
@@ -536,5 +536,5 @@
         psVector *values = psVectorAllocEmpty(num, PS_TYPE_F32); // Values to sort
         for (int i = 0; i < num; i++) {
-            if (inputMask->data.PS_TYPE_MASK_DATA[i] & PPSTACK_MASK_ALL) {
+            if (inputMask->data.PS_TYPE_VECTOR_MASK_DATA[i] & PPSTACK_MASK_ALL) {
                 continue;
             }
@@ -569,10 +569,10 @@
             numGood = 0;                    // Number of good images
             for (int i = 0; i < num; i++) {
-                if (inputMask->data.PS_TYPE_MASK_DATA[i] & PPSTACK_MASK_ALL) {
+	      if (inputMask->data.PS_TYPE_VECTOR_MASK_DATA[i] & PPSTACK_MASK_ALL) {
                     continue;
                 }
                 if (matchChi2->data.F32[i] > thresh) {
                     numRej++;
-                    inputMask->data.PS_TYPE_MASK_DATA[i] |= PPSTACK_MASK_CHI2;
+                    inputMask->data.PS_TYPE_VECTOR_MASK_DATA[i] |= PPSTACK_MASK_CHI2;
                     psLogMsg("ppStack", PS_LOG_INFO, "Rejecting image %d because of large matching chi^2: %f",
                              i, matchChi2->data.F32[i]);
@@ -647,5 +647,5 @@
 
         psString maskBadStr = psMetadataLookupStr(NULL, recipe, "MASK.BAD"); // Name of bits to mask for bad
-        psMaskType maskBad = pmConfigMaskGet(maskBadStr, config); // Bits to mask for bad pixels
+        psImageMaskType maskBad = pmConfigMaskGet(maskBadStr, config); // Bits to mask for bad pixels
         if (!pmReadoutStackDefineOutput(outRO, col0, row0, numCols, numRows, true, true, maskBad)) {
             psError(PS_ERR_UNKNOWN, false, "Unable to prepare output.");
@@ -728,5 +728,5 @@
         inspect = psArrayAlloc(num);
         for (int i = 0; i < num; i++) {
-            if (inputMask->data.U8[i]) {
+            if (inputMask->data.PS_TYPE_VECTOR_MASK_DATA[i]) {
                 continue;
             }
@@ -739,5 +739,5 @@
             psArray *results = job->results; // Results of job
             for (int i = 0; i < num; i++) {
-                if (inputMask->data.U8[i]) {
+                if (inputMask->data.PS_TYPE_VECTOR_MASK_DATA[i]) {
                     continue;
                 }
@@ -765,5 +765,5 @@
         // Count images rejected out of hand
         for (int i = 0; i < num; i++) {
-            if (inputMask->data.U8[i]) {
+            if (inputMask->data.PS_TYPE_VECTOR_MASK_DATA[i]) {
                 numRejected++;
             }
@@ -771,5 +771,5 @@
 
         for (int i = 0; i < num; i++) {
-            if (inputMask->data.U8[i]) {
+            if (inputMask->data.PS_TYPE_VECTOR_MASK_DATA[i]) {
                 continue;
             }
@@ -816,5 +816,5 @@
         // Reject bad pixels
         for (int i = 0; i < num; i++) {
-            if (inputMask->data.U8[i]) {
+            if (inputMask->data.PS_TYPE_VECTOR_MASK_DATA[i]) {
                 continue;
             }
@@ -859,5 +859,5 @@
                 psWarning("Rejection on image %d didn't work --- reject entire image.", i);
                 numRejected++;
-                inputMask->data.U8[i] = PPSTACK_MASK_REJECT;
+                inputMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = PPSTACK_MASK_REJECT;
             } else {
                 float frac = reject->n / (float)(numCols * numRows); // Pixel fraction
@@ -870,5 +870,5 @@
                     // reject == NULL means reject image completely
                     reject = NULL;
-                    inputMask->data.U8[i] = PPSTACK_MASK_BAD;
+                    inputMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = PPSTACK_MASK_BAD;
                     numRejected++;
                 }
@@ -982,5 +982,5 @@
     {
         psString maskBadStr = psMetadataLookupStr(NULL, recipe, "MASK.BAD"); // Name of bits for bad
-        psMaskType maskBad = pmConfigMaskGet(maskBadStr, config); // Bits to mask for bad pixels
+        psImageMaskType maskBad = pmConfigMaskGet(maskBadStr, config); // Bits to mask for bad pixels
         if (!pmReadoutMaskApply(outRO, maskBad)) {
             psWarning("Unable to apply mask");
@@ -992,5 +992,5 @@
     bool wcsDone = false;           // Have we done the WCS?
     for (int i = 0; i < num; i++) {
-        if (inputMask->data.U8[i]) {
+        if (inputMask->data.PS_TYPE_VECTOR_MASK_DATA[i]) {
             continue;
         }
@@ -1056,5 +1056,5 @@
         pmCell *cell1 = pmFPAfileThisCell(config->files, view, "PPSTACK.OUTPUT.JPEG1");
         pmCell *cell2 = pmFPAfileThisCell(config->files, view, "PPSTACK.OUTPUT.JPEG2");
-        psMaskType maskValue = pmConfigMaskGet("BLANK", config); // Bits to mask
+        psImageMaskType maskValue = pmConfigMaskGet("BLANK", config); // Bits to mask
 
         pmReadout *ro1 = pmReadoutAlloc(cell1), *ro2 = pmReadoutAlloc(cell2); // Binned readouts
@@ -1078,5 +1078,5 @@
         int renormNum = psMetadataLookupS32(&mdok, recipe, "RENORM.NUM"); // Number of samples
         float renormWidth = psMetadataLookupS32(&mdok, recipe, "RENORM.WIDTH"); // Width of Gaussian phot
-        psMaskType maskValue = pmConfigMaskGet("BLANK", config); // Bits to mask
+        psImageMaskType maskValue = pmConfigMaskGet("BLANK", config); // Bits to mask
         if (!pmReadoutWeightRenormPhot(outRO, maskValue, renormNum, renormWidth,
                                        renormMean, renormStdev, NULL)) {
@@ -1124,5 +1124,5 @@
         psTrace("ppStack", 1, "Gathering statistics on stacked image....\n");
         psString maskBadStr = psMetadataLookupStr(NULL, recipe, "MASK.BAD"); // Name of bits for bad
-        psMaskType maskBad = pmConfigMaskGet(maskBadStr, config); // Bits to mask for bad pixels
+        psImageMaskType maskBad = pmConfigMaskGet(maskBadStr, config); // Bits to mask for bad pixels
 
         ppStatsFPA(stats, outRO->parent->parent->parent, view, maskBad, config);
Index: trunk/ppStack/src/ppStackMatch.c
===================================================================
--- trunk/ppStack/src/ppStackMatch.c	(revision 21092)
+++ trunk/ppStack/src/ppStackMatch.c	(revision 21183)
@@ -104,5 +104,5 @@
 
 // Generate a background model of the readout we're matching
-psImage *stackBackgroundModel(pmReadout *ro, psMaskType maskVal, const psArray *sources, int size)
+psImage *stackBackgroundModel(pmReadout *ro, psImageMaskType maskVal, const psArray *sources, int size)
 {
     psImage *image = ro->image, *mask = ro->mask; // Image and mask of readout
@@ -169,9 +169,9 @@
 
     psString maskValStr = psMetadataLookupStr(NULL, recipe, "MASK.VAL"); // Name of bits to mask going in
-    psMaskType maskVal = pmConfigMaskGet(maskValStr, config); // Bits to mask going in to pmSubtractionMatch
+    psImageMaskType maskVal = pmConfigMaskGet(maskValStr, config); // Bits to mask going in to pmSubtractionMatch
     psString maskPoorStr = psMetadataLookupStr(NULL, recipe, "MASK.POOR"); // Name of bits to mask for poor
-    psMaskType maskPoor = pmConfigMaskGet(maskPoorStr, config); // Bits to mask for poor pixels
+    psImageMaskType maskPoor = pmConfigMaskGet(maskPoorStr, config); // Bits to mask for poor pixels
     psString maskBadStr = psMetadataLookupStr(NULL, recipe, "MASK.BAD"); // Name of bits to mask for bad
-    psMaskType maskBad = pmConfigMaskGet(maskBadStr, config); // Bits to mask for bad pixels
+    psImageMaskType maskBad = pmConfigMaskGet(maskBadStr, config); // Bits to mask for bad pixels
 
     bool mdok;                          // Status of MD lookup
Index: trunk/ppStack/src/ppStackPhotometry.c
===================================================================
--- trunk/ppStack/src/ppStackPhotometry.c	(revision 21092)
+++ trunk/ppStack/src/ppStackPhotometry.c	(revision 21183)
@@ -45,5 +45,5 @@
         return false;
     }
-    psMaskType maskVal = pmConfigMaskGet(maskValStr, config); // Bits to mask
+    psImageMaskType maskVal = pmConfigMaskGet(maskValStr, config); // Bits to mask
 
     psImage *image = ro->image, *mask = ro->mask; // Image and mask from readout
@@ -85,5 +85,5 @@
             float dy2 = PS_SQR(y - v); // Distance from centroid
             for (int u = xMin; u <= xMax; u++) {
-                if (mask->data.PS_TYPE_MASK_DATA[v][u] & maskVal) {
+                if (mask->data.PS_TYPE_IMAGE_MASK_DATA[v][u] & maskVal) {
                     numBadPix++;
                     continue;
@@ -133,8 +133,8 @@
 
     // set maskValue and markValue in the psphot recipe
-    psMaskType maskValue = pmConfigMaskGet("BLANK", config); // Bits to mask
-    psMaskType markValue = pmConfigMaskGet("MARK.VALUE", config); // Bits to use for marking
-    psMetadataAddU8 (recipe, PS_LIST_TAIL, "MASK.PSPHOT", PS_META_REPLACE, "Bits to mask", maskValue);
-    psMetadataAddU8 (recipe, PS_LIST_TAIL, "MARK.PSPHOT", PS_META_REPLACE, "Bits to use for mark", markValue);
+    psImageMaskType maskValue = pmConfigMaskGet("BLANK", config); // Bits to mask
+    psImageMaskType markValue = pmConfigMaskGet("MARK.VALUE", config); // Bits to use for marking
+    psMetadataAddImageMask (recipe, PS_LIST_TAIL, "MASK.PSPHOT", PS_META_REPLACE, "Bits to mask", maskValue);
+    psMetadataAddImageMask (recipe, PS_LIST_TAIL, "MARK.PSPHOT", PS_META_REPLACE, "Bits to use for mark", markValue);
 
     if (!psphotReadout(config, view)) {
Index: trunk/ppStack/src/ppStackReadout.c
===================================================================
--- trunk/ppStack/src/ppStackReadout.c	(revision 21092)
+++ trunk/ppStack/src/ppStackReadout.c	(revision 21183)
@@ -114,7 +114,7 @@
 
     psString maskValStr = psMetadataLookupStr(NULL, recipe, "MASK.VAL"); // Name of bits to mask going in
-    psMaskType maskVal = pmConfigMaskGet(maskValStr, config); // Bits to mask going in to pmSubtractionMatch
+    psImageMaskType maskVal = pmConfigMaskGet(maskValStr, config); // Bits to mask going in to pmSubtractionMatch
     psString maskBadStr = psMetadataLookupStr(NULL, recipe, "MASK.BAD"); // Name of bits to mask for bad
-    psMaskType maskBad = pmConfigMaskGet(maskBadStr, config); // Bits to mask for bad pixels
+    psImageMaskType maskBad = pmConfigMaskGet(maskBadStr, config); // Bits to mask for bad pixels
 
     int num = readouts->n;              // Number of inputs
@@ -141,5 +141,5 @@
         // Ensure there is a mask, or pmStackCombine will complain
         if (!ro->mask) {
-            ro->mask = psImageAlloc(ro->image->numCols, ro->image->numRows, PS_TYPE_MASK);
+            ro->mask = psImageAlloc(ro->image->numCols, ro->image->numRows, PS_TYPE_IMAGE_MASK);
             psImageInit(ro->mask, 0);
         }
@@ -208,7 +208,7 @@
 
     psString maskValStr = psMetadataLookupStr(NULL, recipe, "MASK.VAL"); // Name of bits to mask going in
-    psMaskType maskVal = pmConfigMaskGet(maskValStr, config); // Bits to mask going in to pmSubtractionMatch
+    psImageMaskType maskVal = pmConfigMaskGet(maskValStr, config); // Bits to mask going in to pmSubtractionMatch
     psString maskBadStr = psMetadataLookupStr(NULL, recipe, "MASK.BAD"); // Name of bits to mask for bad
-    psMaskType maskBad = pmConfigMaskGet(maskBadStr, config); // Bits to mask for bad pixels
+    psImageMaskType maskBad = pmConfigMaskGet(maskBadStr, config); // Bits to mask for bad pixels
 
     int num = readouts->n;              // Number of inputs
@@ -238,5 +238,5 @@
         // Ensure there is a mask, or pmStackCombine will complain
         if (!ro->mask) {
-            ro->mask = psImageAlloc(ro->image->numCols, ro->image->numRows, PS_TYPE_MASK);
+            ro->mask = psImageAlloc(ro->image->numCols, ro->image->numRows, PS_TYPE_IMAGE_MASK);
             psImageInit(ro->mask, 0);
         }
Index: trunk/ppStack/src/ppStackSources.c
===================================================================
--- trunk/ppStack/src/ppStackSources.c	(revision 21092)
+++ trunk/ppStack/src/ppStackSources.c	(revision 21183)
@@ -109,5 +109,5 @@
             psVectorInit(mag, NAN);
             for (int j = 0; j < match->num; j++) {
-                if (match->mask->data.PS_TYPE_MASK_DATA[j]) {
+                if (match->mask->data.PS_TYPE_VECTOR_MASK_DATA[j]) {
                     continue;
                 }
