Index: /trunk/ippTools/share/Makefile.am
===================================================================
--- /trunk/ippTools/share/Makefile.am	(revision 25510)
+++ /trunk/ippTools/share/Makefile.am	(revision 25511)
@@ -111,5 +111,5 @@
      disttool_definebyquery_warp.sql \
      disttool_defineinterest.sql \
-     disttool_listinterest.sql \
+     disttool_listinterests.sql \
      disttool_pending_camera.sql \
      disttool_pending_chip.sql \
@@ -150,9 +150,9 @@
      flatcorr_dropcamera.sql \
      magictool_addmask.sql \
-     magictool_censor_raw.sql \
-     magictool_censor_chip.sql \
-     magictool_censor_camera.sql \
-     magictool_censor_warp.sql \
-     magictool_censor_diff.sql \
+     magictool_restore_camera.sql \
+     magictool_restore_chip.sql \
+     magictool_restore_diff.sql \
+     magictool_restore_raw.sql \
+     magictool_restore_warp.sql \
      magictool_create_tmp_warpcomplete.sql \
      magictool_definebyquery_insert.sql \
Index: unk/ippTools/share/disttool_listinterest.sql
===================================================================
--- /trunk/ippTools/share/disttool_listinterest.sql	(revision 25510)
+++ 	(revision )
@@ -1,13 +1,0 @@
-SELECT 
-    int_id,
-    rcInterest.state AS state,
-    dest_id,
-    name AS dest_name,
-    rcDestination.state as dest_state,
-    label,
-    filter,
-    stage,
-    distTarget.state as target_state
-FROM rcInterest 
-    JOIN distTarget USING(target_id)
-    JOIN rcDestination USING(dest_id)
Index: /trunk/ippTools/share/disttool_listinterests.sql
===================================================================
--- /trunk/ippTools/share/disttool_listinterests.sql	(revision 25511)
+++ /trunk/ippTools/share/disttool_listinterests.sql	(revision 25511)
@@ -0,0 +1,13 @@
+SELECT 
+    int_id,
+    rcInterest.state AS state,
+    dest_id,
+    name AS dest_name,
+    rcDestination.state as dest_state,
+    label,
+    filter,
+    stage,
+    distTarget.state as target_state
+FROM rcInterest 
+    JOIN distTarget USING(target_id)
+    JOIN rcDestination USING(dest_id)
Index: unk/ippTools/share/magictool_censor_camera.sql
===================================================================
--- /trunk/ippTools/share/magictool_censor_camera.sql	(revision 25510)
+++ 	(revision )
@@ -1,8 +1,0 @@
-UPDATE magicRun 
-    JOIN magicDSRun USING(magic_id)
-    JOIN magicDSFile USING(magic_ds_id)
-    JOIN camRun ON magic_ds_id = magicked
-SET camRun.magicked = 0,
-    magicDSRun.state = 'censored',
-    magicDSFile.fault = 42
-
Index: unk/ippTools/share/magictool_censor_chip.sql
===================================================================
--- /trunk/ippTools/share/magictool_censor_chip.sql	(revision 25510)
+++ 	(revision )
@@ -1,9 +1,0 @@
-UPDATE chipRun 
-    JOIN chipProcessedImfile USING(chip_id, exp_id) 
-    JOIN magicDSRun ON stage_id = chip_id AND stage = 'chip' AND re_place
-    JOIN magicDSFile USING(magic_ds_id) 
-    JOIN magicRun using(magic_id)
-SET chipProcessedImfile.magicked = 0, 
-    chipRun.magicked = 0, 
-    magicDSRun.state = 'censored', 
-    magicDSFile.fault = 42
Index: unk/ippTools/share/magictool_censor_diff.sql
===================================================================
--- /trunk/ippTools/share/magictool_censor_diff.sql	(revision 25510)
+++ 	(revision )
@@ -1,9 +1,0 @@
-UPDATE diffRun
-    JOIN diffSkyfile USING(diff_id)
-    JOIN magicRun USING(diff_id)
-    JOIN magicDSRun ON stage = 'diff' AND stage_id = diff_id AND re_place
-    JOIN magicDSFile USING(magic_ds_id)
-SET diffRun.magicked = 0,
-    diffSkyfile.magicked = 0,
-    magicDSRun.state = 'censored',
-    magicDSFile.fault = 42
Index: unk/ippTools/share/magictool_censor_raw.sql
===================================================================
--- /trunk/ippTools/share/magictool_censor_raw.sql	(revision 25510)
+++ 	(revision )
@@ -1,10 +1,0 @@
-UPDATE magicRun
-    JOIN magicDSRun USING(magic_id)
-    JOIN magicDSFile USING(magic_ds_id) 
-    JOIN rawImfile ON rawImfile.magicked = magic_ds_id
---    JOIN rawExp ON rawExp.magicked = magic_ds_id
-SET rawImfile.magicked = 0, 
---    rawExp.magicked = 0, 
---    magicDSRun.state = 'censored', 
-    magicDSFile.fault = 42
-
Index: unk/ippTools/share/magictool_censor_warp.sql
===================================================================
--- /trunk/ippTools/share/magictool_censor_warp.sql	(revision 25510)
+++ 	(revision )
@@ -1,9 +1,0 @@
-UPDATE magicRun 
-    JOIN magicDSRun USING(magic_id)
-    JOIN magicDSFile USING(magic_ds_id)
-    JOIN warpRun ON magic_ds_id = magicked
-    JOIN warpSkyfile using(warp_id)
-SET warpRun.magicked = 0,
-    warpSkyfile.magicked = 0,
-    magicDSRun.state = 'censored',
-    magicDSFile.fault = 42
Index: /trunk/ippTools/share/magictool_restore_camera.sql
===================================================================
--- /trunk/ippTools/share/magictool_restore_camera.sql	(revision 25511)
+++ /trunk/ippTools/share/magictool_restore_camera.sql	(revision 25511)
@@ -0,0 +1,6 @@
+UPDATE magicRun 
+    JOIN magicDSRun USING(magic_id)
+    JOIN camRun ON stage = 'camera' AND stage_id = camRun.cam_id
+SET camRun.magicked = 0,
+    magicDSRun.state = '@NEW_STATE@'
+WHERE re_place
Index: /trunk/ippTools/share/magictool_restore_chip.sql
===================================================================
--- /trunk/ippTools/share/magictool_restore_chip.sql	(revision 25511)
+++ /trunk/ippTools/share/magictool_restore_chip.sql	(revision 25511)
@@ -0,0 +1,8 @@
+UPDATE magicRun
+    JOIN magicDSRun USING(magic_id)
+    JOIN chipRun ON stage = 'chip' AND stage_id = chip_id
+    JOIN chipProcessedImfile USING(chip_id)
+SET chipProcessedImfile.magicked = 0, 
+    chipRun.magicked = 0, 
+    magicDSRun.state = '@NEW_STATE@'
+WHERE re_place
Index: /trunk/ippTools/share/magictool_restore_diff.sql
===================================================================
--- /trunk/ippTools/share/magictool_restore_diff.sql	(revision 25511)
+++ /trunk/ippTools/share/magictool_restore_diff.sql	(revision 25511)
@@ -0,0 +1,8 @@
+UPDATE magicRun 
+    JOIN magicDSRun USING(magic_id)
+    JOIN diffRun ON stage = 'diff' AND stage_id = diffRun.diff_id
+    JOIN diffSkyfile ON diffRun.diff_id = diffSkyfile.diff_id
+SET diffRun.magicked = 0,
+    diffSkyfile.magicked = 0,
+    magicDSRun.state = '@NEW_STATE@'
+WHERE re_place
Index: /trunk/ippTools/share/magictool_restore_raw.sql
===================================================================
--- /trunk/ippTools/share/magictool_restore_raw.sql	(revision 25511)
+++ /trunk/ippTools/share/magictool_restore_raw.sql	(revision 25511)
@@ -0,0 +1,8 @@
+UPDATE magicRun
+    JOIN magicDSRun USING(magic_id)
+    JOIN rawExp ON stage = 'raw' AND stage_id = rawExp.exp_id
+    JOIN rawImfile ON rawExp.exp_id = rawImfile.exp_id
+SET rawImfile.magicked = 0, 
+    rawExp.magicked = 0, 
+    magicDSRun.state = '@NEW_STATE@'
+WHERE re_place
Index: /trunk/ippTools/share/magictool_restore_warp.sql
===================================================================
--- /trunk/ippTools/share/magictool_restore_warp.sql	(revision 25511)
+++ /trunk/ippTools/share/magictool_restore_warp.sql	(revision 25511)
@@ -0,0 +1,8 @@
+UPDATE magicRun 
+    JOIN magicDSRun USING(magic_id)
+    JOIN warpRun ON stage = 'warp' AND stage_id = warp_id
+    JOIN warpSkyfile using(warp_id)
+SET warpRun.magicked = 0,
+    warpSkyfile.magicked = 0,
+    magicDSRun.state = '@NEW_STATE@'
+WHERE re_place
Index: /trunk/ippTools/src/Makefile.am
===================================================================
--- /trunk/ippTools/src/Makefile.am	(revision 25510)
+++ /trunk/ippTools/src/Makefile.am	(revision 25511)
@@ -24,8 +24,4 @@
 	pubtool
 
-
-bin_SCRIPTS = \
-	fakemagic
-
 pkginclude_HEADERS = \
 	pxadd.h \
@@ -36,4 +32,5 @@
 	pxdata.h \
 	pxfake.h \
+	pxmagic.h \
 	pxregister.h \
 	pxtag.h \
@@ -79,4 +76,5 @@
 	pxfake.c \
 	pxfault.c \
+	pxmagic.c \
 	pxregister.c \
 	pxtag.c \
Index: /trunk/ippTools/src/magictool.c
===================================================================
--- /trunk/ippTools/src/magictool.c	(revision 25510)
+++ /trunk/ippTools/src/magictool.c	(revision 25511)
@@ -1393,40 +1393,7 @@
 }
 
-static bool censorStage(pxConfig *config, psString stage, psString whereClause)
-{
-    psString queryFile = NULL;
-    psStringAppend(&queryFile, "magictool_censor_%s.sql", stage);
-    psString query = pxDataGet(queryFile);
-    if (!query) {
-        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement from %s", queryFile);
-        psFree(queryFile);
-        if (!psDBRollback(config->dbh)) {
-            psError(PS_ERR_UNKNOWN, false, "database error");
-        }
-        return false;
-    }
-    psFree(queryFile);
-
-    psStringAppend(&query, " WHERE %s",  whereClause);
-
-    if (!p_psDBRunQuery(config->dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database error");
-        psFree(query);
-        if (!psDBRollback(config->dbh)) {
-            psError(PS_ERR_UNKNOWN, false, "database error");
-        }
-        return false;
-    }
-    psFree(query);
-
-    return true;
-}
-
 static bool censorrunMode(pxConfig *config)
 {
     PS_ASSERT_PTR_NON_NULL(config, false);
-
-    psError(PS_ERR_PROGRAMMING, true, "-censorrun mode not ready yet");
-    return false;
 
     psMetadata *where = psMetadataAlloc();
@@ -1434,5 +1401,5 @@
     // at least one of these required
     PXOPT_COPY_S64(config->args, where, "-magic_id", "magic_id", "==");
-    PXOPT_COPY_S64(config->args, where, "-exp_id", "exp_id", "==");
+    PXOPT_COPY_S64(config->args, where, "-exp_id", "magicRun.exp_id", "==");
 
     if (!psListLength(where->list)) {
@@ -1470,22 +1437,22 @@
     // Now queue any destreaked files to be re-verted
 
-    // note: on failure censorStage issues the rollback
-    if (!censorStage(config, "raw", whereClause)) {
+    // note: on failure magicRestoreStage issues the rollback
+    if (!magicRestoreStage(config, "raw", whereClause, "goto_censored")) {
         psFree(whereClause);
         return false;
     }
-    if (!censorStage(config, "chip", whereClause)) {
+    if (!magicRestoreStage(config, "chip", whereClause, "goto_censored")) {
         psFree(whereClause);
         return false;
     }
-    if (!censorStage(config, "camera", whereClause)) {
+    if (!magicRestoreStage(config, "camera", whereClause, "goto_censored")) {
         psFree(whereClause);
         return false;
     }
-    if (!censorStage(config, "warp", whereClause)) {
+    if (!magicRestoreStage(config, "warp", whereClause, "goto_censored")) {
         psFree(whereClause);
         return false;
     }
-    if (!censorStage(config, "diff", whereClause)) {
+    if (!magicRestoreStage(config, "diff", whereClause, "goto_censored")) {
         psFree(whereClause);
         return false;
Index: /trunk/ippTools/src/pxmagic.c
===================================================================
--- /trunk/ippTools/src/pxmagic.c	(revision 25511)
+++ /trunk/ippTools/src/pxmagic.c	(revision 25511)
@@ -0,0 +1,67 @@
+/*
+ * pxmagic.c
+ *
+ * Copyright (C) 2009 IfA
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * program; see the file COPYING. If not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <ippdb.h>
+#include <string.h>
+
+#include "pxtools.h"
+#include "pxmagic.h"
+
+bool magicRestoreStage(pxConfig *config, psString stage, psString whereClause, psString newState)
+{
+    psString queryFile = NULL;
+    psStringAppend(&queryFile, "magictool_restore_%s.sql", stage);
+    psString query_temp = pxDataGet(queryFile);
+    if (!query_temp) {
+        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement from %s", queryFile);
+        psFree(queryFile);
+        if (!psDBRollback(config->dbh)) {
+            psError(PS_ERR_UNKNOWN, false, "database error");
+        }
+        return false;
+    }
+    psFree(queryFile);
+
+    // psStringSubstittute fails on strings created by pxDataGet()
+    psString query = psStringCopy(query_temp);
+    // change the @NEW_STATE@ in the sql file to our state
+    if (!psStringSubstitute(&query, newState, "@NEW_STATE@")) {
+        psError(PS_ERR_UNKNOWN, false, "failed to substitute state string");
+        return false;
+    }
+
+    psStringAppend(&query, " AND %s",  whereClause);
+
+    if (!p_psDBRunQuery(config->dbh, query)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        psFree(query);
+        if (!psDBRollback(config->dbh)) {
+            psError(PS_ERR_UNKNOWN, false, "database error");
+        }
+        return false;
+    }
+    psFree(query);
+
+    return true;
+}
Index: /trunk/ippTools/src/pxmagic.h
===================================================================
--- /trunk/ippTools/src/pxmagic.h	(revision 25511)
+++ /trunk/ippTools/src/pxmagic.h	(revision 25511)
@@ -0,0 +1,29 @@
+/*
+ * pxmagic.h
+ *
+ * Copyright (C) 2009  IfA
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * program; see the file COPYING. If not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef PXMAGIC_H
+#define PXMAGIC_H 1
+
+#include <pslib.h>
+
+#include "pxtools.h"
+
+extern bool magicRestoreStage(pxConfig *config, psString stage, psString whereClause, psString newState);
+
+#endif // PXMAGIC_H
Index: /trunk/ippTools/src/pxtools.h
===================================================================
--- /trunk/ippTools/src/pxtools.h	(revision 25510)
+++ /trunk/ippTools/src/pxtools.h	(revision 25511)
@@ -46,4 +46,5 @@
 #include "pxtag.h"
 #include "pxtree.h"
+#include "pxmagic.h"
 
 # define MAX_ROWS 10e9
