Index: /trunk/ippTools/share/Makefile.am
===================================================================
--- /trunk/ippTools/share/Makefile.am	(revision 37121)
+++ /trunk/ippTools/share/Makefile.am	(revision 37122)
@@ -485,4 +485,5 @@
 	releasetool_definerelstack_with_skycal.sql \
 	releasetool_deleterelexp.sql \
+	releasetool_deleterelstack.sql \
 	releasetool_listrelstack.sql \
 	releasetool_summary.sql \
Index: /trunk/ippTools/share/releasetool_deleterelstack.sql
===================================================================
--- /trunk/ippTools/share/releasetool_deleterelstack.sql	(revision 37122)
+++ /trunk/ippTools/share/releasetool_deleterelstack.sql	(revision 37122)
@@ -0,0 +1,3 @@
+DELETE FROM relStack USING relStack, ippRelease, stackRun
+WHERE relStack.rel_id = ippRelease.rel_id
+    AND relStack.stack_id = stackRun.stack_id
Index: /trunk/ippTools/src/releasetool.c
===================================================================
--- /trunk/ippTools/src/releasetool.c	(revision 37121)
+++ /trunk/ippTools/src/releasetool.c	(revision 37122)
@@ -48,4 +48,5 @@
 static bool updaterelstackMode(pxConfig *config);
 static bool listrelstackMode(pxConfig *config);
+static bool deleterelstackMode(pxConfig *config);
 static bool summaryMode(pxConfig *config);
 static bool definerelgroupMode(pxConfig *config);
@@ -87,4 +88,5 @@
         MODECASE(RELEASETOOL_MODE_UPDATERELSTACK,   updaterelstackMode);
         MODECASE(RELEASETOOL_MODE_LISTRELSTACK,     listrelstackMode);
+        MODECASE(RELEASETOOL_MODE_DELETERELSTACK,   deleterelstackMode);
         MODECASE(RELEASETOOL_MODE_SUMMARY,          summaryMode);
 
@@ -857,6 +859,6 @@
     PXOPT_COPY_STR(config->args, where, "-exp_name", "rawExp.exp_name", "==");
 
-    PXOPT_COPY_S32(config->args, where, "-rel_id",  "rel_id", "==");
-    PXOPT_COPY_STR(config->args, where, "-release_name", "release_name", "==");
+    PXOPT_COPY_S32(config->args, where, "-rel_id",  "relExp.rel_id", "==");
+    PXOPT_COPY_STR(config->args, where, "-release_name", "ippRelease.release_name", "==");
 
     psString query = pxDataGet("releasetool_deleterelexp.sql");
@@ -1088,4 +1090,57 @@
     return false;
 }
+static bool deleterelstackMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    PXOPT_LOOKUP_S64(relstack_id, config->args,   "-relstack_id", false, false);
+    // If relexp_id is supplied that is all that we need
+    if (!relstack_id) {
+        // Otherwise we need to identify the release ...
+        PXOPT_LOOKUP_STR(release_name, config->args, "-release_name", false, false);
+        PXOPT_LOOKUP_S32(rel_id, config->args,      "-rel_id", false, false);
+
+        if (!release_name && !rel_id) {
+            psError(PXTOOLS_ERR_CONFIG, true, "at least one of -relstack_id, -release_name, or -rel_id is required\n");
+            return false;
+        }
+        // ... and the Stack
+        PXOPT_LOOKUP_STR(label, config->args,       "-label", false, false);
+        PXOPT_LOOKUP_S64(stack_id, config->args,    "-stack_id", false, false);
+        if (!label && !stack_id) {
+            psError(PXTOOLS_ERR_CONFIG, true, "at least one of -label and  -stack_id is required\n");
+            return false;
+        }
+    }
+
+    psMetadata *where = psMetadataAlloc();
+
+    PXOPT_COPY_S32(config->args, where, "-relstack_id", "relStack.relstack_id", "==");
+    PXOPT_COPY_STR(config->args, where, "-label", "stackRun.label", "==");
+    PXOPT_COPY_S64(config->args, where, "-stack_id", "relStack.stack_id", "==");
+
+    PXOPT_COPY_S32(config->args, where, "-rel_id", "relStack.rel_id", "==");
+    PXOPT_COPY_STR(config->args, where, "-release_name", "ippRelease.release_name", "==");
+
+    psString query = pxDataGet("releasetool_deleterelstack.sql");
+
+    psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
+    psStringAppend(&query, "\n    AND %s", whereClause);
+    psFree(whereClause);
+
+    if (!p_psDBRunQuery(config->dbh, query)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        psFree(query);
+        return false;
+    }
+
+    psU64 affected = psDBAffectedRows(config->dbh);
+    psLogMsg("releasetool", PS_LOG_INFO, "Deleted %" PRIu64 " relStack rows", affected);
+
+
+    psFree(query);
+
+    return true;
+}
 
 static bool listrelstackMode(pxConfig *config)
Index: /trunk/ippTools/src/releasetool.h
===================================================================
--- /trunk/ippTools/src/releasetool.h	(revision 37121)
+++ /trunk/ippTools/src/releasetool.h	(revision 37122)
@@ -37,4 +37,5 @@
     RELEASETOOL_MODE_DEFINERELSTACK,
     RELEASETOOL_MODE_UPDATERELSTACK,
+    RELEASETOOL_MODE_DELETERELSTACK,
     RELEASETOOL_MODE_TOCALIBSTACK,
     RELEASETOOL_MODE_LISTRELSTACK,
Index: /trunk/ippTools/src/releasetoolConfig.c
===================================================================
--- /trunk/ippTools/src/releasetoolConfig.c	(revision 37121)
+++ /trunk/ippTools/src/releasetoolConfig.c	(revision 37122)
@@ -67,5 +67,5 @@
     psMetadataAddStr(definereleaseArgs, PS_LIST_TAIL, "-set_ubercal_file", 0,  "define ubercal file name", NULL);
 
-    // -uptdaterelease
+    // -updaterelease
     psMetadata *updatereleaseArgs = psMetadataAlloc();
 
@@ -259,4 +259,20 @@
     psMetadataAddBool(listrelstackArgs, PS_LIST_TAIL, "-simple",      0, "use the simple output format", false);
 
+    // -updaterelstack
+    psMetadata *updaterelstackArgs = psMetadataAlloc();
+
+    // -deleterelstack
+    psMetadata *deleterelstackArgs = psMetadataAlloc();
+    psMetadataAddS64(deleterelstackArgs, PS_LIST_TAIL,  "-relstack_id", 0,   "select by released exposure ID", 0);
+    psMetadataAddS64(deleterelstackArgs, PS_LIST_TAIL,  "-stack_id", 0,   "select by stack ID", 0);
+//    psMetadataAddS64(deleterelstackArgs, PS_LIST_TAIL,  "-skycal_id", 0,   "select by skycal ID", 0);
+    psMetadataAddStr(deleterelstackArgs,  PS_LIST_TAIL, "-release_name", 0, "select by release name (LIKE comparision)", NULL);
+    psMetadataAddS32(deleterelstackArgs, PS_LIST_TAIL,  "-rel_id", 0,   "select by release ID", 0);
+
+    psMetadataAddStr(deleterelstackArgs,  PS_LIST_TAIL, "-label",  0,      "select by stackRun.label", NULL);
+//    psMetadataAddStr(deleterelstackArgs,  PS_LIST_TAIL, "-data_group", 0,  "select by stackRun.data_group", NULL);
+//    psMetadataAddStr(deleterelstackArgs,  PS_LIST_TAIL, "-skycal_label",  0, "select by skycalRun.label", NULL);
+//    psMetadataAddStr(deleterelstackArgs,  PS_LIST_TAIL, "-skycal_data_group", 0,  "select by skycalRun.data_group", NULL);
+
     // -summary
     psMetadata *summaryArgs = psMetadataAlloc();
@@ -363,4 +379,7 @@
     PXOPT_ADD_MODE("-definerelstack",     "define a released stack",    RELEASETOOL_MODE_DEFINERELSTACK,  definerelstackArgs);
     PXOPT_ADD_MODE("-listrelstack",       "list released stacks",      RELEASETOOL_MODE_LISTRELSTACK,    listrelstackArgs);
+    PXOPT_ADD_MODE("-updaterelstack",     "update parameters of released stacks",      RELEASETOOL_MODE_LISTRELSTACK,    updaterelstackArgs);
+    PXOPT_ADD_MODE("-deleterelstack",     "update parameters of released stacks",      RELEASETOOL_MODE_DELETERELSTACK,  deleterelstackArgs);
+
     PXOPT_ADD_MODE("-summary",            "list stackSummaryes for released stacks", RELEASETOOL_MODE_SUMMARY,    summaryArgs);
 
