Index: trunk/ippTools/src/dettoolConfig.c
===================================================================
--- trunk/ippTools/src/dettoolConfig.c	(revision 8533)
+++ trunk/ippTools/src/dettoolConfig.c	(revision 8534)
@@ -447,4 +447,5 @@
         "include this exposure (multiple OK, required)", NULL);
 
+
 #define PXTOOL_MODE(option, modeval, argset) \
 { \
@@ -459,6 +460,11 @@
         config->args = psMemIncrRefCounter(argset); \
     } \
+    if (!psMetadataAddMetadata(argSets, PS_LIST_TAIL, option, 0, NULL, argset)) {;\
+        psError(PS_ERR_UNKNOWN, false, "failed to add argset for %s", option); \
+    } \
+    psFree(argset); \
 }
 
+    psMetadata *argSets = psMetadataAlloc();
     // find which mode we're running under
     PXTOOL_MODE("-pending",         DETTOOL_MODE_PENDING,       pendingArgs);
@@ -509,183 +515,23 @@
         printf("\nPan-STARRS Detrend Tool\n");
         printf("Usage: %s <mode> [<options>]\n\n", argv[0]);
-        printf(" <mode> : [-pending|-definebyexp|-definebyquery|-runs|-selectrun|-select|-raw|-addprocessed|-tostack|-processed|-addstacked|-tonormalize|-addnormstat|-normstat|-stacked|-stackedframe|-addnormalizedimfile|-toresid|-normalized|-toresidexp|-normalizedframe|-addresidimfile|-residimfile|-addresidexp|-residexp|-residdetrun|-updateresidexp|-adddetrunsummary|-updatedetrun|-declaremasterframe|-masterframe|-master|-rerun]\n\n");
-        fprintf (stdout, "-pending ");
-        psArgumentHelp(pendingArgs);
-        psFree(pendingArgs);
-
-        fprintf (stdout, "-definebyexp ");
-        psArgumentHelp(definebyexpArgs);
-        psFree(definebyexpArgs);
-
-        fprintf (stdout, "-definebyquery ");
-        psArgumentHelp(definebyqueryArgs);
-        psFree(definebyqueryArgs);
-
-        fprintf (stdout, "-runs ");
-        psArgumentHelp(runsArgs);
-        psFree(runsArgs);
-#if 0
-        fprintf (stdout, "-selectrun ");
-        psArgumentHelp(selectrunArgs);
-        psFree(selectrunArgs);
-        fprintf (stdout, "-select ");
-        psArgumentHelp(selectArgs);
-        psFree(selectArgs);
-#endif
-        fprintf (stdout, "-input ");
-        psArgumentHelp(inputArgs);
-        psFree(inputArgs);
-
-        fprintf (stdout, "-raw ");
-        psArgumentHelp(rawArgs);
-        psFree(rawArgs);
-
-        fprintf (stdout, "-addprocessed ");
-        psArgumentHelp(addprocArgs);
-        psFree(addprocArgs);
-
-        fprintf (stdout, "-tostack ");
-        psArgumentHelp(tostackArgs);
-        psFree(tostackArgs);
-
-        fprintf (stdout, "-processed ");
-        psArgumentHelp(procArgs);
-        psFree(procArgs);
-
-        fprintf (stdout, "-addstacked ");
-        psArgumentHelp(addstacArgs);
-        psFree(addstacArgs);
-
-        fprintf (stdout, "-tonormalize ");
-        psArgumentHelp(tonormalizeArgs);
-        psFree(tonormalizeArgs);
-
-        fprintf (stdout, "-addnormstat ");
-        psArgumentHelp(addnormstatArgs);
-        psFree(addnormstatArgs);
-
-        fprintf (stdout, "-normstat ");
-        psArgumentHelp(normstatArgs);
-        psFree(normstatArgs);
-
-        fprintf (stdout, "-stacked ");
-        psArgumentHelp(stacArgs);
-        psFree(stacArgs);
-
-#if 0
-        fprintf (stdout, "-stackedframe ");
-        psArgumentHelp(stacframeArgs);
-        psFree(stacframeArgs);
-#endif
-
-        fprintf (stdout, "-addnormalizedimfile ");
-        psArgumentHelp(addnormalizedimfileArgs);
-        psFree(addnormalizedimfileArgs);
-
-        fprintf (stdout, "-toresid");
-        psArgumentHelp(toresidArgs);
-        psFree(toresidArgs);
-
-        fprintf (stdout, "-normalized ");
-        psArgumentHelp(normalizedArgs);
-        psFree(normalizedArgs);
-
-        fprintf (stdout, "-toresidexp");
-        psArgumentHelp(toresidexpArgs);
-        psFree(toresidexpArgs);
-
-#if 0
-        fprintf (stdout, "-normalizedframe ");
-        psArgumentHelp(normalizedframeArgs);
-        psFree(normalizedframeArgs);
-#endif
-
-        fprintf (stdout, "-addresid ");
-        psArgumentHelp(addresidimfileArgs);
-        psFree(addresidimfileArgs);
-
-        fprintf (stdout, "-residimfile ");
-        psArgumentHelp(residimfileArgs);
-        psFree(residimfileArgs);
-
-        fprintf (stdout, "-addresidexp ");
-        psArgumentHelp(addresidexpArgs);
-        psFree(addresidexpArgs);
-
-        fprintf (stdout, "-residexp ");
-        psArgumentHelp(residexpArgs);
-        psFree(residexpArgs);
-
-        fprintf (stdout, "-residdetrun ");
-        psArgumentHelp(residdetrunArgs);
-        psFree(residdetrunArgs);
-
-        fprintf (stdout, "-updateresidexp ");
-        psArgumentHelp(updateresidexpArgs);
-        psFree(updateresidexpArgs);
-
-        fprintf (stdout, "-adddetrunsummary ");
-        psArgumentHelp(adddetrunsummaryArgs);
-        psFree(adddetrunsummaryArgs);
-
-        fprintf (stdout, "-updatedetrun ");
-        psArgumentHelp(updatedetrunArgs);
-        psFree(updatedetrunArgs);
-
-#if 0
-        fprintf (stdout, "-declaremasterframe ");
-        psArgumentHelp(declaremasterframeArgs);
-        psFree(declaremasterframeArgs);
-
-        fprintf (stdout, "-masterframe ");
-        psArgumentHelp(masterframeArgs);
-        psFree(masterframeArgs);
-
-        fprintf (stdout, "-master ");
-        psArgumentHelp(masterArgs);
-        psFree(masterArgs);
-#endif
-
-        fprintf (stdout, "-rerun ");
-        psArgumentHelp(rerunArgs);
-        psFree(rerunArgs);
-
+        printf(" <mode> :\n\n"); 
+
+        psMetadataIterator *iter = psMetadataIteratorAlloc(argSets, 0, NULL);
+        psMetadataItem *item = NULL;
+        while ((item = psMetadataGetAndIncrement(iter))) {
+            if (!item->type == PS_DATA_METADATA) {
+                psAbort(argv[0], "all options must be specified as a metadata");
+            }
+
+            fprintf(stdout, "%s ", item->name);
+            psArgumentHelp(item->data.md);
+        }
+        psFree(iter);
+
+        psFree(argSets);
         goto FAIL;
     }
 
-    psFree(pendingArgs);
-    psFree(definebyexpArgs);
-    psFree(definebyqueryArgs);
-    psFree(runsArgs);
-//    psFree(selectrunArgs);
-//    psFree(selectArgs);
-    psFree(inputArgs);
-    psFree(rawArgs);
-    psFree(addprocArgs);
-    psFree(tostackArgs);
-    psFree(procArgs);
-    psFree(addstacArgs);
-    psFree(tonormalizeArgs);
-    psFree(addnormstatArgs);
-    psFree(normstatArgs);
-    psFree(stacArgs);
-//    psFree(stacframeArgs);
-    psFree(addnormalizedimfileArgs);
-    psFree(toresidArgs);
-    psFree(normalizedArgs);
-    psFree(toresidexpArgs);
-//    psFree(normalizedframeArgs);
-    psFree(addresidimfileArgs);
-    psFree(residimfileArgs);
-    psFree(addresidexpArgs);
-    psFree(residexpArgs);
-    psFree(residdetrunArgs);
-    psFree(updateresidexpArgs);
-    psFree(adddetrunsummaryArgs);
-    psFree(updatedetrunArgs);
-//    psFree(declaremasterframeArgs);
-//    psFree(masterframeArgs);
-//    psFree(masterArgs);
-    psFree(rerunArgs);
+    psFree(argSets);
 
     // setup search criterion
