Index: trunk/ippTools/src/chiptool.c
===================================================================
--- trunk/ippTools/src/chiptool.c	(revision 25774)
+++ trunk/ippTools/src/chiptool.c	(revision 25775)
@@ -605,12 +605,9 @@
     PXOPT_COPY_S64(config->args, where, "-magicked", "chipProcessedImfile.magicked", "==");
 
-    PXOPT_LOOKUP_U64(magicked, config->args, "-magicked", false, false);
-    PXOPT_LOOKUP_BOOL(destreaked, config->args,     "-destreaked", false);
-    PXOPT_LOOKUP_BOOL(not_destreaked, config->args, "-not_destreaked", false);
-
-    if (!psListLength(where->list) &&
-        !psMetadataLookupBool(NULL, config->args, "-all")) {
-        psFree(where);
-        psError(PXTOOLS_ERR_DATA, false, "search parameters (or -all) are required");
+    psString where2 = NULL;
+    pxmagicAddWhere(config, &where2, "chipProcessedImfile");
+    // add cuts on ra and decl if supplied
+    if (!pxspaceAddWhere(config, &where2, "rawExp")) {
+        psError(PXTOOLS_ERR_DATA, false, "pxSpaceAddWhere failed");
         return false;
     }
@@ -622,8 +619,14 @@
     }
 
-    if (where && psListLength(where->list)) {
+    if (psListLength(where->list)) {
         psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
         psStringAppend(&query, " WHERE %s", whereClause);
         psFree(whereClause);
+    } else if (!psMetadataLookupBool(NULL, config->args, "-all") && (faulted || where2)) {
+        psStringAppend(&query, " WHERE chipRun.chip_id IS NOT NULL %s", where2);
+    } else {
+        psFree(where);
+        psError(PXTOOLS_ERR_DATA, false, "search parameters (or -all) are required");
+        return false;
     }
     psFree(where);
@@ -635,18 +638,4 @@
         // don't list faulted rows
         psStringAppend(&query, " %s", "AND chipProcessedImfile.fault = 0");
-    }
-    if (not_destreaked) {
-        if (destreaked) {
-            psError(PXTOOLS_ERR_DATA, true, "providing -not_destreaked and -destreaked makes no sense");
-            return false;
-        }
-        if (magicked) {
-            psError(PXTOOLS_ERR_DATA, true, "providing -not_destreaked and -magicked makes no sense");
-            return false;
-        }
-        psStringAppend(&query, " AND chipProcessedImfile.magicked = 0");
-    }
-    if (destreaked) {
-        psStringAppend(&query, " AND chipProcessedImfile.magicked != 0");
     }
 
Index: trunk/ippTools/src/chiptoolConfig.c
===================================================================
--- trunk/ippTools/src/chiptoolConfig.c	(revision 25774)
+++ trunk/ippTools/src/chiptoolConfig.c	(revision 25775)
@@ -158,12 +158,12 @@
     psMetadataAddStr(processedimfileArgs,  PS_LIST_TAIL, "-reduction",          0, "search by reduction class", NULL);
     psMetadataAddStr(processedimfileArgs,  PS_LIST_TAIL, "-label",  PS_META_DUPLICATE_OK, "search by chipRun label (LIKE comparison)", NULL);
-
-    psMetadataAddBool(processedimfileArgs, PS_LIST_TAIL, "-destreaked",  0,      "search for destreaked images", false);
-    psMetadataAddBool(processedimfileArgs, PS_LIST_TAIL, "-not_destreaked",  0,  "search for images that have not been destreaked", false);
-    psMetadataAddS64(processedimfileArgs, PS_LIST_TAIL, "-magicked",  0,        "search by magicked value", 0);
+    pxmagicAddArguments(processedimfileArgs);
+
     psMetadataAddU64(processedimfileArgs,  PS_LIST_TAIL, "-limit",  0,           "limit result set to N items", 0);
     psMetadataAddBool(processedimfileArgs, PS_LIST_TAIL, "-all",  0,            "list everything without search terms", false);
     psMetadataAddBool(processedimfileArgs, PS_LIST_TAIL, "-faulted",  0,        "only return imfiles with a fault status set", false);
     psMetadataAddBool(processedimfileArgs, PS_LIST_TAIL, "-simple",  0,         "use the simple output format", false);
+
+    pxspaceAddArguments(processedimfileArgs);
 
     // -revertprocessedimfile
Index: trunk/ippTools/src/difftool.c
===================================================================
--- trunk/ippTools/src/difftool.c	(revision 25774)
+++ trunk/ippTools/src/difftool.c	(revision 25775)
@@ -692,8 +692,8 @@
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
 
-    PXOPT_LOOKUP_U64(magicked, config->args,        "-magicked", false, false);
-    PXOPT_LOOKUP_BOOL(destreaked, config->args,     "-destreaked", false);
-    PXOPT_LOOKUP_BOOL(not_destreaked, config->args, "-not_destreaked", false);
-
+
+    psString where2 = NULL;
+    pxmagicAddWhere(config, &where2, "diffSkyfile");
+    pxspaceAddWhere(config, &where2, template ? "rawTemplate" : "rawInput");
     psString query = pxDataGet("difftool_skyfile.sql");
     if (!query) {
@@ -706,24 +706,13 @@
         psStringAppend(&query, " WHERE %s", whereClause);
         psFree(whereClause);
-    } else if (!all) {
+    } else if (all) {
+        if (where2) {
+            psStringAppend(&query, " WHERE diffRun.diff_id is not null %s", where2);
+        }
+    } else {
         psError(PXTOOLS_ERR_DATA, true, "search parameters or -all are required");
+        return false;
     }
     psFree(where);
-
-    if (not_destreaked) {
-        if (destreaked) {
-            psError(PXTOOLS_ERR_DATA, true, "providing -not_destreaked and -destreaked makes no sense");
-            return false;
-        }
-        if (magicked) {
-            psError(PXTOOLS_ERR_DATA, true, "providing -not_destreaked and -magicked makes no sense");
-            return false;
-        }
-        psStringAppend(&query, " AND diffSkyfile.magicked = 0");
-    }
-    if (destreaked) {
-        psStringAppend(&query, " AND diffSkyfile.magicked != 0");
-    }
-
 
     // treat limit == 0 as "no limit"
Index: trunk/ippTools/src/difftoolConfig.c
===================================================================
--- trunk/ippTools/src/difftoolConfig.c	(revision 25774)
+++ trunk/ippTools/src/difftoolConfig.c	(revision 25775)
@@ -134,9 +134,8 @@
     psMetadataAddTime(diffskyfileArgs, PS_LIST_TAIL, "-dateobs_end", 0,      "search for exposures by time (<=)", NULL);
     psMetadataAddStr(diffskyfileArgs, PS_LIST_TAIL,  "-filter", 0,           "search for filter", NULL);
-    psMetadataAddS64(diffskyfileArgs, PS_LIST_TAIL,  "-magicked", 0,         "search by magicked value", 0);
-    psMetadataAddBool(diffskyfileArgs, PS_LIST_TAIL, "-destreaked",  0,      "search for destreaked images", false);
-    psMetadataAddBool(diffskyfileArgs, PS_LIST_TAIL, "-not_destreaked",  0,  "search for images that are not destreaked", false);
     psMetadataAddStr(diffskyfileArgs,  PS_LIST_TAIL, "-label",  PS_META_DUPLICATE_OK, "search by diffRun label (LIKE comparison)", NULL);
     psMetadataAddS16(diffskyfileArgs, PS_LIST_TAIL,  "-fault",  0,           "search by fault code", 0);
+    pxmagicAddArguments(diffskyfileArgs);
+    pxspaceAddArguments(diffskyfileArgs);
 
     psMetadataAddBool(diffskyfileArgs, PS_LIST_TAIL, "-all",  0,             "search without arguments", false);
Index: trunk/ippTools/src/regtool.c
===================================================================
--- trunk/ippTools/src/regtool.c	(revision 25774)
+++ trunk/ippTools/src/regtool.c	(revision 25775)
@@ -334,14 +334,24 @@
     PXOPT_COPY_TIME(config->args, where, "-dateobs_end",   "dateobs",  "<=");
     PXOPT_COPY_STR(config->args, where,  "-filter",        "filter", "==");
+    PXOPT_COPY_STR(config->args, where,  "-exp_type",      "exp_type", "==");
+    PXOPT_COPY_STR(config->args, where,  "-obs_mode",      "obs_mode", "==");
     PXOPT_COPY_S64(config->args, where,  "-magicked",      "magicked", "==");
-
-    PXOPT_LOOKUP_S64(magicked, config->args, "-magicked", false, false);
-    PXOPT_LOOKUP_BOOL(destreaked, config->args,     "-destreaked", false);
-    PXOPT_LOOKUP_BOOL(not_destreaked, config->args, "-not_destreaked", false);
 
     PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     PXOPT_LOOKUP_BOOL(faulted, config->args, "-faulted", false);
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
+    PXOPT_LOOKUP_BOOL(all, config->args, "-all", false);
     PXOPT_LOOKUP_BOOL(ordered_by_date, config->args, "-ordered_by_date", false);
+
+    // build where string for some parameters that don't fit PXOPT_COPY*
+    psString where2 = NULL;
+    if (!pxmagicAddWhere(config, &where2, "rawImfile")) {
+        psError(PXTOOLS_ERR_DATA, false, "pxSpaceAddWhere failed");
+        return false;
+    }
+    if (!pxspaceAddWhere(config, &where2, "rawImfile")) {
+        psError(PXTOOLS_ERR_DATA, false, "pxSpaceAddWhere failed");
+        return false;
+    }
 
     psString query = pxDataGet("regtool_processedimfile.sql");
@@ -356,6 +366,13 @@
         psStringAppend(&query, " AND %s", whereClause);
         psFree(whereClause);
+    } else if (!all && !where2) {
+        psError(PXTOOLS_ERR_DATA, false, "search parameters are required");
+        return false;
     }
     psFree(where);
+    if (where2) {
+        psStringAppend(&query, where2);
+        psFree(where2);
+    }
 
     if (faulted) {
@@ -366,20 +383,4 @@
         psStringAppend(&query, " %s", "AND rawImfile.fault = 0");
     }
-
-    if (not_destreaked) {
-        if (destreaked) {
-            psError(PXTOOLS_ERR_DATA, true, "providing -not_destreaked and -destreaked makes no sense");
-            return false;
-        }
-        if (magicked) {
-            psError(PXTOOLS_ERR_DATA, true, "providing -not_destreaked and -magicked makes no sense");
-            return false;
-        }
-        psStringAppend(&query, " AND rawImfile.magicked = 0");
-    }
-    if (destreaked) {
-        psStringAppend(&query, " AND rawImfile.magicked != 0");
-    }
-
 
     // add the ORDER BY statement if desired
Index: trunk/ippTools/src/regtoolConfig.c
===================================================================
--- trunk/ippTools/src/regtoolConfig.c	(revision 25774)
+++ trunk/ippTools/src/regtoolConfig.c	(revision 25775)
@@ -137,13 +137,15 @@
     ADD_OPT(Str,  processedimfileArgs, "-class_id",  "search by class ID",                    NULL);
     ADD_OPT(Str,  processedimfileArgs, "-filter",  "search by filter",                        NULL);
+    ADD_OPT(Str,  processedimfileArgs, "-obs_mode",  "search by obs_mod",                        NULL);
+    ADD_OPT(Str,  processedimfileArgs, "-exp_type",  "search by exposure type",                        NULL);
     ADD_OPT(Time, processedimfileArgs, "-dateobs_begin", "search for exposures by time (>=)", NULL);
     ADD_OPT(Time, processedimfileArgs, "-dateobs_end", "search for exposures by time (<)", NULL);
-    ADD_OPT(S64,  processedimfileArgs, "-magicked",    "search by magicked value",            0);
-    ADD_OPT(Bool, processedimfileArgs, "-destreaked",   "only return imfiles that have been destreaked", false);
-    ADD_OPT(Bool, processedimfileArgs, "-not_destreaked", "only return imfiles that have not been destreaked", false);
     ADD_OPT(U64,  processedimfileArgs, "-limit",     "limit result set to N items",           0);
     ADD_OPT(Bool, processedimfileArgs, "-faulted",   "only return imfiles with a fault status set", false);
+    ADD_OPT(Bool, processedimfileArgs, "-all",   "list without search arguments", false);
     ADD_OPT(Bool, processedimfileArgs, "-simple",    "use the simple output format",          false);
     ADD_OPT(Bool, processedimfileArgs, "-ordered_by_date", "force output to be in DATE order", false);
+    pxspaceAddArguments(processedimfileArgs);
+    pxmagicAddArguments(processedimfileArgs);
 
     // -revertprocessedimfile
Index: trunk/ippTools/src/warptool.c
===================================================================
--- trunk/ippTools/src/warptool.c	(revision 25774)
+++ trunk/ippTools/src/warptool.c	(revision 25775)
@@ -1204,8 +1204,4 @@
     pxAddLabelSearchArgs (config, where, "-label",   "warpRun.label", "LIKE");
 
-    PXOPT_LOOKUP_U64(magicked, config->args, "-magicked", false, false);
-    PXOPT_LOOKUP_BOOL(destreaked, config->args,     "-destreaked", false);
-    PXOPT_LOOKUP_BOOL(not_destreaked, config->args, "-not_destreaked", false);
-
     PXOPT_LOOKUP_BOOL(all, config->args, "-all", false);
 
@@ -1220,9 +1216,21 @@
     }
 
+    // generate where strings for arguments that require extra processing
+    // beyond PXOPT_COPY*
+    psString where2 = NULL;
+    if (!pxmagicAddWhere(config, &where2, "warpSkyfile")) {
+        psError(PXTOOLS_ERR_DATA, false, "pxMagicAddWhere failed");
+        return false;
+    }
+    if (!pxspaceAddWhere(config, &where2, "rawExp")) {
+        psError(PXTOOLS_ERR_DATA, false, "pxSpaceAddWhere failed");
+        return false;
+    }
+
     if (psListLength(where->list)) {
         psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
         psStringAppend(&query, " AND %s", whereClause);
         psFree(whereClause);
-    } else if (!all) {
+    } else if (!all && !where2) {
         psError(PXTOOLS_ERR_DATA, true, "search parameters or -all are required");
         return false;
@@ -1230,17 +1238,6 @@
     psFree(where);
 
-    if (not_destreaked) {
-        if (destreaked) {
-            psError(PXTOOLS_ERR_DATA, true, "providing -not_destreaked and -destreaked makes no sense");
-            return false;
-        }
-        if (magicked) {
-            psError(PXTOOLS_ERR_DATA, true, "providing -not_destreaked and -magicked makes no sense");
-            return false;
-        }
-        psStringAppend(&query, " AND warpSkyfile.magicked = 0");
-    }
-    if (destreaked) {
-        psStringAppend(&query, " AND warpSkyfile.magicked != 0");
+    if (where2) {
+        psStringAppend(&query, where2);
     }
 
Index: trunk/ippTools/src/warptoolConfig.c
===================================================================
--- trunk/ippTools/src/warptoolConfig.c	(revision 25774)
+++ trunk/ippTools/src/warptoolConfig.c	(revision 25775)
@@ -218,9 +218,10 @@
     psMetadataAddTime(warpedArgs, PS_LIST_TAIL, "-dateobs_end", 0,      "search for exposures by time (<=)", NULL);
     psMetadataAddStr(warpedArgs, PS_LIST_TAIL,  "-filter", 0,           "search for exposures by filter", NULL);
-    psMetadataAddBool(warpedArgs, PS_LIST_TAIL, "-destreaked",  0,      "search for destreaked images", false);
-    psMetadataAddBool(warpedArgs, PS_LIST_TAIL, "-not_destreaked",  0,  "search for images that have not been destreaked", false);
-    psMetadataAddS64(warpedArgs, PS_LIST_TAIL,  "-magicked", 0,         "search by magicked value", 0);
     psMetadataAddS16(warpedArgs, PS_LIST_TAIL,  "-fault",  0,           "search by fault code", 0);
     psMetadataAddStr(warpedArgs, PS_LIST_TAIL,  "-label",  PS_META_DUPLICATE_OK, "search by warpRun label", NULL);
+    // add magic related arguments
+    pxmagicAddArguments(warpedArgs);
+    // add arguments for spatial search
+    pxspaceAddArguments(warpedArgs);
 
     psMetadataAddBool(warpedArgs, PS_LIST_TAIL, "-all",  0,             "search without arguments", false);
