Index: trunk/ippTools/share/Makefile.am
===================================================================
--- trunk/ippTools/share/Makefile.am	(revision 15829)
+++ trunk/ippTools/share/Makefile.am	(revision 15830)
@@ -15,5 +15,5 @@
 	dettool_tocorrectimfile.sql \
 	dettool_tocorrectexp.sql \
-	dettool_find_completed_correct_runs.sql
+	dettool_stop_completed_correct_runs.sql \
 	dettool_find_completed_runs.sql \
 	dettool_normalizedstat.sql \
Index: trunk/ippTools/share/dettool_find_completed_correct_runs.sql
===================================================================
--- trunk/ippTools/share/dettool_find_completed_correct_runs.sql	(revision 15829)
+++ 	(revision )
@@ -1,23 +1,0 @@
-SELECT
-    det1.det_id,
-    imfile.class_id,
-    detRegisteredImfile.class_id
-FROM detRun AS det1
-INNER JOIN detRun as det2
-    ON det1.parent = det2.det_id 
-JOIN detNormalizedImfile as imfile
-    ON det2.det_id = imfile.det_id
-    AND det2.iteration = imfile.iteration
-LEFT JOIN detRegisteredImfile
-    ON det1.det_id = detRegisteredImfile.det_id
-    AND det1.iteration = detRegisteredImfile.iteration
-    AND imfile.class_id = detRegisteredImfile.class_id
-WHERE 
-    det1.state = 'run'
-    AND det1.mode = 'correction'
-    AND det2.state = 'stop'
-GROUP BY
-    det1.det_id
-HAVING
-    COUNT(imfile.class_id) = COUNT(detRegisteredImfile.class_id)
-    AND SUM(imfile.fault) = 0
Index: trunk/ippTools/share/dettool_stop_completed_correct_runs.sql
===================================================================
--- trunk/ippTools/share/dettool_stop_completed_correct_runs.sql	(revision 15830)
+++ trunk/ippTools/share/dettool_stop_completed_correct_runs.sql	(revision 15830)
@@ -0,0 +1,28 @@
+UPDATE detRun
+SET state = 'stop'
+WHERE det_id = (SELECT det_id FROM
+    (SELECT
+        det1.det_id,
+        imfile.class_id,
+        detRegisteredImfile.class_id as reg_class_id
+    FROM detRun AS det1
+    INNER JOIN detRun as det2
+        ON det1.parent = det2.det_id 
+    JOIN detNormalizedImfile as imfile
+        ON det2.det_id = imfile.det_id
+        AND det2.iteration = imfile.iteration
+    LEFT JOIN detRegisteredImfile
+        ON det1.det_id = detRegisteredImfile.det_id
+        AND det1.iteration = detRegisteredImfile.iteration
+        AND imfile.class_id = detRegisteredImfile.class_id
+    WHERE 
+        det1.state = 'run'
+        AND det1.mode = 'correction'
+        AND det2.state = 'stop'
+    GROUP BY
+        det1.det_id
+    HAVING
+        COUNT(imfile.class_id) = COUNT(reg_class_id)
+        AND SUM(imfile.fault) = 0
+    ) as Foo
+)
Index: trunk/ippTools/src/dettool.c
===================================================================
--- trunk/ippTools/src/dettool.c	(revision 15829)
+++ trunk/ippTools/src/dettool.c	(revision 15830)
@@ -91,5 +91,4 @@
 // register
 static bool register_detrendMode(pxConfig *config);
-static bool register_detrend_imfileMode(pxConfig *config);
 
 static detNormalizedStatImfileRow *detStackedToDetNormalizedStatImfile(pxConfig *config, detStackedImfileRow *stackedImfile);
@@ -135,4 +134,5 @@
         MODECASE(DETTOOL_MODE_TOCORRECTEXP,      tocorrectexpMode);
         MODECASE(DETTOOL_MODE_TOCORRECTIMFILE,   tocorrectimfileMode);
+        MODECASE(DETTOOL_MODE_ADDCORRECTIMFILE,  addcorrectimfileMode);
         // imfile
         MODECASE(DETTOOL_MODE_TOPROCESSEDIMFILE,toprocessedimfileMode);
@@ -6739,5 +6739,5 @@
 }
 
-static bool register_detrend_imfileMode(pxConfig *config)
+bool register_detrend_imfileMode(pxConfig *config)
 {
     PS_ASSERT_PTR_NON_NULL(config, false);
Index: trunk/ippTools/src/dettool.h
===================================================================
--- trunk/ippTools/src/dettool.h	(revision 15829)
+++ trunk/ippTools/src/dettool.h	(revision 15830)
@@ -32,4 +32,5 @@
     DETTOOL_MODE_TOCORRECTEXP,
     DETTOOL_MODE_TOCORRECTIMFILE,
+    DETTOOL_MODE_ADDCORRECTIMFILE,
     DETTOOL_MODE_RUNS,
     DETTOOL_MODE_CHILDLESSRUN,
@@ -81,7 +82,11 @@
 pxConfig *dettoolConfig(pxConfig *config, int argc, char **argv);
 
+// correct
 bool makecorrectionMode(pxConfig *config);
 bool tocorrectexpMode(pxConfig *config);
 bool tocorrectimfileMode(pxConfig *config);
+bool addcorrectimfileMode(pxConfig *config);
+// register
+bool register_detrend_imfileMode(pxConfig *config);
 
 #endif // DETTOOL_H
Index: trunk/ippTools/src/dettoolConfig.c
===================================================================
--- trunk/ippTools/src/dettoolConfig.c	(revision 15829)
+++ trunk/ippTools/src/dettoolConfig.c	(revision 15830)
@@ -293,4 +293,31 @@
             "use the simple output format", false);
 
+    // -addcorrectimfile
+    psMetadata *addcorrectimfileArgs = psMetadataAlloc();
+    psMetadataAddStr(addcorrectimfileArgs, PS_LIST_TAIL, "-det_id",  0,
+            "define detrend ID (required)", NULL);
+    psMetadataAddStr(addcorrectimfileArgs, PS_LIST_TAIL, "-class_id",  0,
+            "search for class ID (required)", NULL);
+    psMetadataAddStr(addcorrectimfileArgs, PS_LIST_TAIL, "-uri",  0,
+            "define resid file URI (required)", NULL);
+    psMetadataAddF64(addcorrectimfileArgs, PS_LIST_TAIL, "-bg",  0,
+            "define exposure background", NAN);
+    psMetadataAddF64(addcorrectimfileArgs, PS_LIST_TAIL, "-bg_stdev",  0,
+            "define exposure background stdev", NAN);
+    psMetadataAddF64(addcorrectimfileArgs, PS_LIST_TAIL, "-bg_mean_stdev",  0,
+            "define exposure background mean stdev", NAN);
+    psMetadataAddF64(addcorrectimfileArgs, PS_LIST_TAIL, "-user_1",  0,
+            "define user statistic (1)", NAN);
+    psMetadataAddF64(addcorrectimfileArgs, PS_LIST_TAIL, "-user_2",  0,
+            "define user statistic (2)", NAN);
+    psMetadataAddF64(addcorrectimfileArgs, PS_LIST_TAIL, "-user_3",  0,
+            "define user statistic (3)", NAN);
+    psMetadataAddF64(addcorrectimfileArgs, PS_LIST_TAIL, "-user_4",  0,
+            "define user statistic (4)", NAN);
+    psMetadataAddF64(addcorrectimfileArgs, PS_LIST_TAIL, "-user_5",  0,
+            "define user statistic (5)", NAN);
+    psMetadataAddStr(addcorrectimfileArgs, PS_LIST_TAIL, "-path_base",  0,
+            "define base output location", NULL);
+
     // -runs
     psMetadata *runsArgs = psMetadataAlloc();
@@ -1090,4 +1117,5 @@
     PXTOOL_ADD_MODE("-tocorrectexp",    "", DETTOOL_MODE_TOCORRECTEXP, tocorrectexpArgs);
     PXTOOL_ADD_MODE("-tocorrectimfile", "", DETTOOL_MODE_TOCORRECTIMFILE, tocorrectimfileArgs);
+    PXTOOL_ADD_MODE("-addcorrectimfile", "", DETTOOL_MODE_ADDCORRECTIMFILE, addcorrectimfileArgs);
     PXTOOL_ADD_MODE("-raw",             "", DETTOOL_MODE_RAW,           rawArgs);
     PXTOOL_ADD_MODE("-runs",            "", DETTOOL_MODE_RUNS,          runsArgs);
Index: trunk/ippTools/src/dettool_correction.c
===================================================================
--- trunk/ippTools/src/dettool_correction.c	(revision 15829)
+++ trunk/ippTools/src/dettool_correction.c	(revision 15830)
@@ -280,2 +280,28 @@
     return true;
 }
+
+bool addcorrectimfileMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    // insert the row into detRegisterImfile
+    if (!register_detrend_imfileMode(config)) {
+        return false;
+    }
+    
+    // automatically stop completed 'correct' detRuns
+    psString query = pxDataGet("dettool_stop_completed_correct_runs.sql");
+    if (!query) {
+        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
+        return false;
+    }
+
+    if (!p_psDBRunQuery(config->dbh, query)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        psFree(query);
+        return false;
+    }
+    psFree(query);
+
+    return true;
+}
