Index: /trunk/ippTools/src/dettool.c
===================================================================
--- /trunk/ippTools/src/dettool.c	(revision 7422)
+++ /trunk/ippTools/src/dettool.c	(revision 7423)
@@ -17,6 +17,4 @@
 static bool addstacMode(pxConfig *config);
 static bool stacMode(pxConfig *config);
-static psArray *validDetInputClassIds(pxConfig *config, const char *det_id);
-static psArray *searchInputImfiles(pxConfig *config, const char *det_id);
 static bool stacframeMode(pxConfig *config);
 static bool addnormalizedMode(pxConfig *config);
@@ -30,5 +28,8 @@
 static bool masterframeMode(pxConfig *config);
 static bool masterMode(pxConfig *config);
-
+static bool rerunMode(pxConfig *config);
+
+static psArray *validDetInputClassIds(pxConfig *config, const char *det_id);
+static psArray *searchInputImfiles(pxConfig *config, const char *det_id);
 static detInputExpRow *rawDetrenTodetInputExpRow(rawDetrendExpRow *rawExp, psS32 det_id, psS32 iteration);
 static psArray *searchRawImfiles(pxConfig *config, psMetadata *where);
@@ -65,4 +66,5 @@
         MODECASE(DETTOOL_MODE_MASTERFRAME, masterframeMode);
         MODECASE(DETTOOL_MODE_MASTER, masterMode);
+        MODECASE(DETTOOL_MODE_RERUN, rerunMode);
         default:
             psAbort(argv[0], "invalid option (this should not happen)");
@@ -1772,2 +1774,22 @@
     return true;
 }
+
+
+static bool rerunMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+ 
+    // det_id is required
+    bool status = false;
+    psString det_id = psMetadataLookupStr(&status, config->args, "-det_id");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -det_id");
+        return false;
+    }
+    if (!det_id) {
+        psError(PS_ERR_UNKNOWN, true, "-det_id is required");
+        return false;
+    }
+
+    return true;
+}
Index: /trunk/ippTools/src/dettool.h
===================================================================
--- /trunk/ippTools/src/dettool.h	(revision 7422)
+++ /trunk/ippTools/src/dettool.h	(revision 7423)
@@ -24,5 +24,6 @@
     DETTOOL_MODE_DECLAREMASTERFRAME,
     DETTOOL_MODE_MASTERFRAME,
-    DETTOOL_MODE_MASTER
+    DETTOOL_MODE_MASTER,
+    DETTOOL_MODE_RERUN
 } dettoolMode;
 
Index: /trunk/ippTools/src/dettoolConfig.c
===================================================================
--- /trunk/ippTools/src/dettoolConfig.c	(revision 7422)
+++ /trunk/ippTools/src/dettoolConfig.c	(revision 7423)
@@ -243,4 +243,11 @@
     psMetadataAddS32(masterArgs, PS_LIST_TAIL, "-iteration",  0,
         "search for detrend master for detrend ID", 0);
+ 
+    // -rerun
+    psMetadata *rerunArgs = psMetadataAlloc();
+    psMetadataAddStr(rerunArgs, PS_LIST_TAIL, "-det_id",  0,
+        "search for detrend master for detrend ID (required)", NULL);
+    psMetadataAddStr(rerunArgs, PS_LIST_TAIL, "-exp_id",  PS_META_DUPLICATE_OK,
+        "include this exposure (multiple OK, required)", NULL);
 
 #define PXTOOL_MODE(option, modeval, argset) \
@@ -283,4 +290,5 @@
     PXTOOL_MODE("-masterframe",     DETTOOL_MODE_MASTERFRAME,  masterframeArgs);
     PXTOOL_MODE("-master",          DETTOOL_MODE_MASTER,        masterArgs);
+    PXTOOL_MODE("-rerun",           DETTOOL_MODE_RERUN,         rerunArgs);
 
 bool argErr = false;
@@ -296,5 +304,5 @@
         printf("\nPan-STARRS Detrend Tool\n");
         printf("Usage: %s <mode> [<options>]\n\n", argv[0]);
-        printf(" <mode> : [-define|-raw|-addprocessed|-processed|-addstacked|-stacked|-stackedframe|-addnormalized|-normalized|-normalizedframe|-addresid|-resid|-addresidexp|-residexp|-declaremasterframe|-masterframe|-master]\n\n");
+        printf(" <mode> : [-define|-raw|-addprocessed|-processed|-addstacked|-stacked|-stackedframe|-addnormalized|-normalized|-normalizedframe|-addresid|-resid|-addresidexp|-residexp|-declaremasterframe|-masterframe|-master|-rerun]\n\n");
         fprintf (stdout, "-define ");
         psArgumentHelp(defineArgs);
@@ -354,4 +362,7 @@
         psArgumentHelp(masterArgs);
         psFree(masterArgs);
+        fprintf (stdout, "-rerun ");
+        psArgumentHelp(rerunArgs);
+        psFree(rerunArgs);
 
         exit(EXIT_FAILURE);
@@ -375,4 +386,5 @@
     psFree(masterframeArgs);
     psFree(masterArgs);
+    psFree(rerunArgs);
 
     // setup search criterion
@@ -395,4 +407,10 @@
 
     addWhereStr(det_id);
+    if ((n = psMetadataLookupS32(&status, config->args, "-iteration"))) {
+        if (!psMetadataAddS32(config->where, PS_LIST_TAIL, "iteration", 0, "==", n)) {
+            psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
+            exit(EXIT_FAILURE);
+        }
+    }
     addWhereStr(det_type);
     addWhereStr(exp_id);
