Index: trunk/pstamp/src/pstamprequest.c
===================================================================
--- trunk/pstamp/src/pstamprequest.c	(revision 18743)
+++ trunk/pstamp/src/pstamprequest.c	(revision 20111)
@@ -17,5 +17,5 @@
     "PROJECT",
     "JOB_TYPE",
-    "REQ_TYPE", // byid,  byexp,         bycoord
+    "REQ_TYPE", // byid,  byexp, bydiff, bycoord
     "ID",       // db id, exposure name, n/a
     "CLASS_ID",
@@ -178,4 +178,7 @@
 }
 
+#define PRINT_MULTIPLE_STYLE_ERROR   \
+    fprintf(stderr, "one of -bycoord -byid -byexp -bydiff may be specified\n")
+
 static psrOptions *parseArguments(int argc, char *argv[], int *pExitStatus)
 {
@@ -271,5 +274,5 @@
     if ((argnum = psArgumentGet(argc, argv, "-byid"))) {
         if (gotStyle) {
-            fprintf(stderr, "only one of -bycoord -byid -byexp may be specified\n");
+            PRINT_MULTIPLE_STYLE_ERROR;
             usage(PS_EXIT_DATA_ERROR);
         }
@@ -282,5 +285,5 @@
     if ((argnum = psArgumentGet(argc, argv, "-byexp"))) {
         if (gotStyle) {
-            fprintf(stderr, "only one of -bycoord -byid -byexp may be specified\n");
+            PRINT_MULTIPLE_STYLE_ERROR;
             usage(PS_EXIT_DATA_ERROR);
         }
@@ -290,8 +293,22 @@
         doByExp(argnum, &argc, argv, options);
     } 
+
+    if ((argnum = psArgumentGet(argc, argv, "-bydiff"))) {
+        if (gotStyle) {
+            PRINT_MULTIPLE_STYLE_ERROR;
+            usage(PS_EXIT_DATA_ERROR);
+        }
+        gotStyle = true;
+        psMetadataAddStr(md, PS_LIST_TAIL, "REQ_TYPE", PS_META_REPLACE, "", 1+argv[argnum]);
+        psArgumentRemove(argnum, &argc, argv);
+        // It looks like byExp and byId are identical, so reuse them
+        doByExp(argnum, &argc, argv, options);
+    } 
+
     if (!gotStyle) {
-        fprintf(stderr, "one of -bycoord -byid -byexp must be specified\n");
-        usage(PS_EXIT_DATA_ERROR);
-    }
+        fprintf(stderr, "one of -bycoord -byid -byexp -bydiff must be specified\n");
+        usage(PS_EXIT_DATA_ERROR);
+    }
+
     if ((argnum = psArgumentGet(argc, argv, "-mjd_min"))) {
         psArgumentRemove(argnum, &argc, argv);
