Index: trunk/ippTools/share/difftool_todiffskyfile.sql
===================================================================
--- trunk/ippTools/share/difftool_todiffskyfile.sql	(revision 27017)
+++ trunk/ippTools/share/difftool_todiffskyfile.sql	(revision 27020)
@@ -11,5 +11,6 @@
     diffRun.state,
     diffRun.reduction,
-    diffRun.bothways
+    diffRun.bothways,
+    diffRun.diff_mode
 FROM diffRun
 JOIN diffInputSkyfile USING(diff_id)
Index: trunk/ippTools/src/difftool.c
===================================================================
--- trunk/ippTools/src/difftool.c	(revision 27017)
+++ trunk/ippTools/src/difftool.c	(revision 27020)
@@ -136,5 +136,6 @@
     PXOPT_LOOKUP_STR(data_group, config->args, "-set_data_group", false, false);
     PXOPT_LOOKUP_STR(dist_group, config->args, "-set_dist_group", false, false);
-    PXOPT_LOOKUP_STR(reduction, config->args, "-rset_eduction", false, false);
+    PXOPT_LOOKUP_STR(reduction, config->args, "-set_reduction", false, false);
+    PXOPT_LOOKUP_S16(diff_mode, config->args, "-set_diff_mode", false, false);
     PXOPT_LOOKUP_STR(note, config->args, "-set_note", false, false);
 
@@ -157,4 +158,5 @@
             exposure,
             false,
+	    diff_mode,
             note
     );
@@ -990,5 +992,19 @@
         return false;
     }
-
+    psS16 diff_mode = 0;
+    if ((input_warp_id != PS_MAX_S64) && (template_warp_id != PS_MAX_S64)) {
+      diff_mode = 1;
+    }
+    else if ((input_warp_id != PS_MAX_S64) && (template_stack_id != PS_MAX_S64)) {
+      diff_mode = 2;
+    }
+    else if ((input_stack_id != PS_MAX_S64) && (template_warp_id != PS_MAX_S64)) {
+      diff_mode = 3;
+    }
+    else if ((input_stack_id != PS_MAX_S64) && (template_stack_id != PS_MAX_S64)) {
+      diff_mode = 4;
+    }
+    
+    
     // default
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
@@ -1009,4 +1025,5 @@
             false,
             0,       // magicked
+	    diff_mode, // diff_mode
             note
     );
@@ -1114,5 +1131,5 @@
 
     psArray *list = psArrayAllocEmpty(16); // List of runs, to print
-
+    // Populated Run will generate the diff_mode value
     if (!populatedrun(list, workdir, skycell_id, tess_id, label, data_group ? data_group : label, dist_group, reduction, note,
                       input_warp_id ? input_warp_id : PS_MAX_S64,
@@ -1419,4 +1436,5 @@
                 true,                   // exposure
                 0,       // magicked
+		2,       // diff_mode for warp-stack difference
                 note
         );
@@ -1760,6 +1778,19 @@
         }
 
-        diffRunRow *run = diffRunRowAlloc(0, "reg", workdir, label, data_group ? data_group : label, dist_group, reduction, NULL, registered,
-                                          tess_id, true, true, false, note); // Run to insert
+        diffRunRow *run = diffRunRowAlloc(0,
+					  "reg",
+					  workdir,
+					  label,
+					  data_group ? data_group : label,
+					  dist_group,
+					  reduction,
+					  NULL,  // dvodb
+					  registered,
+                                          tess_id,
+					  true,  // bothways
+					  true,  // exposure
+					  false, // magicked
+					  1,     // diff_mode for warp-warp diff
+					  note); // Run to insert
         if (!diffRunInsertObject(config->dbh, run)) {
             psError(PS_ERR_UNKNOWN, false, "database error");
@@ -2042,4 +2073,5 @@
                                       false,                 // exposure
                                       0,       // magicked
+				      4,       // diff_mode
                                       note
                                       );
Index: trunk/ippTools/src/difftoolConfig.c
===================================================================
--- trunk/ippTools/src/difftoolConfig.c	(revision 27017)
+++ trunk/ippTools/src/difftoolConfig.c	(revision 27020)
@@ -56,4 +56,5 @@
     psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-set_data_group",  0,     "define data group", NULL);
     psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-set_dist_group",  0,     "define dist group", NULL);
+    psMetadataAddS16(definerunArgs, PS_LIST_TAIL, "-set_diff_mode", 0,       "specify type of difference (WW=1,WS=2,SW=3,SS=4)", 0);
     psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-set_note",  0,           "define note", NULL);
     psMetadataAddBool(definerunArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
@@ -68,4 +69,5 @@
     psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-set_data_group", 0,   "define new data_group", NULL);
     psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-set_dist_group", 0,   "define new dist_group", NULL);
+    psMetadataAddS16(updaterunArgs, PS_LIST_TAIL, "-set_diff_mode", 0,       "specify type of difference (WW=1,WS=2,SW=3,SS=4)", 0);
     psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-set_note", 0,         "define new note", NULL);
 
