Index: /trunk/ippTools/configure.ac
===================================================================
--- /trunk/ippTools/configure.ac	(revision 11196)
+++ /trunk/ippTools/configure.ac	(revision 11197)
@@ -16,5 +16,5 @@
 PKG_CHECK_MODULES([PSLIB], [pslib >= 0.12.99]) 
 PKG_CHECK_MODULES([PSMODULES], [psmodules >= 0.12.0]) 
-PKG_CHECK_MODULES([IPPDB], [ippdb >= 0.0.77]) 
+PKG_CHECK_MODULES([IPPDB], [ippdb >= 0.0.78]) 
 
 dnl check for PSDB support
Index: /trunk/ippTools/scripts/dettest.sh
===================================================================
--- /trunk/ippTools/scripts/dettest.sh	(revision 11196)
+++ /trunk/ippTools/scripts/dettest.sh	(revision 11197)
@@ -7,6 +7,5 @@
 ./p0test.sh -detrend || exit 1
 
-#dettool -definebyquery -det_type flat -exp_type fooflat -filter foo -airmass 10 -exp_time 30.0 -ccd_temp 100 -posang 360 -object iobject || exit 1
-det_id=`dettool -definebyquery -det_type flat -exp_type fooflat -filter foo -airmass 10 -exp_time 30.0 -object iobject -workdir file::///some/path -simple | cut -f1 -d" "` || exit 1
+det_id=`dettool -definebyquery -det_type flat -exp_type fooflat -filter foo -airmass_min 1 -airmass_max 10 -exp_time_min 10 -exp_time_max 30.0 -workdir file::///some/path -simple | cut -f1 -d" "` || exit 1
 
 dettool -raw || exit 1
Index: /trunk/ippTools/src/dettool.c
===================================================================
--- /trunk/ippTools/src/dettool.c	(revision 11196)
+++ /trunk/ippTools/src/dettool.c	(revision 11197)
@@ -255,4 +255,15 @@
         return false;
     }
+    psString camera = psMetadataLookupStr(&status, config->args, "-inst");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -inst");
+        return false;
+    }
+
+    psString telescope = psMetadataLookupStr(&status, config->args, "-telescope");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -telescope");
+        return false;
+    }
 
     psString exp_type = psMetadataLookupStr(&status, config->args, "-exp_type");
@@ -268,31 +279,49 @@
     }
 
-    psF32 airmass = psMetadataLookupF32(&status, config->args, "-airmass");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -airmass");
-        return false;
-    }
-
-    psF32 exp_time = psMetadataLookupF32(&status, config->args, "-exp_time");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_time");
-        return false;
-    }
-
-    psF32 ccd_temp = psMetadataLookupF32(&status, config->args, "-ccd_temp");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -ccd_temp");
-        return false;
-    }
-
-    psF64 posang = psMetadataLookupF32(&status, config->args, "-posang");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -posang");
-        return false;
-    }
-
-    psString object = psMetadataLookupStr(&status, config->args, "-object");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -object");
+    psF32 airmass_min = psMetadataLookupF32(&status, config->args, "-airmass_min");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -airmass_min");
+        return false;
+    }
+
+    psF32 airmass_max = psMetadataLookupF32(&status, config->args, "-airmass_max");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -airmass_max");
+        return false;
+    }
+
+    psF32 exp_time_min = psMetadataLookupF32(&status, config->args, "-exp_time_min");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_time_min");
+        return false;
+    }
+
+    psF32 exp_time_max = psMetadataLookupF32(&status, config->args, "-exp_time_max");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_time_max");
+        return false;
+    }
+
+    psF32 ccd_temp_min = psMetadataLookupF32(&status, config->args, "-ccd_temp_min");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -ccd_temp_min");
+        return false;
+    }
+
+    psF32 ccd_temp_max = psMetadataLookupF32(&status, config->args, "-ccd_temp_max");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -ccd_temp_max");
+        return false;
+    }
+
+    psF64 posang_min = psMetadataLookupF32(&status, config->args, "-posang_min");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -posang_min");
+        return false;
+    }
+
+    psF64 posang_max = psMetadataLookupF32(&status, config->args, "-posang_max");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -posang_max");
         return false;
     }
@@ -314,4 +343,42 @@
         } else {
             registered = NULL;
+        }
+    }
+
+    psTime *time_begin = NULL;
+    {
+        psString time_beginStr = psMetadataLookupStr(&status, config->args, "-time_begin");
+        if (!status) {
+            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -time_begin");
+            return false;
+        }
+        // pass through NULL as this is an optional field
+        if (time_beginStr) {
+            time_begin = psTimeFromISO(time_beginStr, PS_TIME_UTC);
+            if (!time_begin) {
+                psError(PS_ERR_UNKNOWN, false, "error in time format %s", time_beginStr);
+                return false;
+            }
+        } else {
+            time_begin = NULL;
+        }
+    }
+
+    psTime *time_end = NULL;
+    {
+        psString time_endStr = psMetadataLookupStr(&status, config->args, "-time_end");
+        if (!status) {
+            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -time_end");
+            return false;
+        }
+        // pass through NULL as this is an optional field
+        if (time_endStr) {
+            time_end = psTimeFromISO(time_endStr, PS_TIME_UTC);
+            if (!time_end) {
+                psError(PS_ERR_UNKNOWN, false, "error in time format %s", time_endStr);
+                return false;
+            }
+        } else {
+            time_end = NULL;
         }
     }
@@ -430,16 +497,28 @@
             mode,
             "run",
+            workdir,
+            camera,
+            telescope,
             exp_type,
-            workdir,
             filter,
-            airmass,
-            exp_time,
-            ccd_temp,
-            posang,
-            object,
+            airmass_min,
+            airmass_max,
+            exp_time_min,
+            exp_time_max,
+            ccd_temp_min,
+            ccd_temp_max,
+            posang_min,
+            posang_max,
             registered,
+            time_begin,
+            time_end,
             use_begin,
             use_end
         );
+    psFree(registered);
+    psFree(time_begin);
+    psFree(time_end);
+    psFree(use_begin);
+    psFree(use_end);
     long det_id = psDBLastInsertID(config->dbh);
 
@@ -589,4 +668,5 @@
             }
         }
+
         // map -inst -> camera
         psString camera = psMetadataLookupStr(&status, config->args, "-select_inst");
@@ -602,4 +682,5 @@
             }
         }
+
         psString telescope = psMetadataLookupStr(&status, config->args, "-select_telescope");
         if (!status) {
@@ -614,4 +695,5 @@
             }
         }
+
         psString filter = psMetadataLookupStr(&status, config->args, "-select_filter");
         if (!status) {
@@ -626,4 +708,5 @@
             }
         }
+
         psString uri = psMetadataLookupStr(&status, config->args, "-select_uri");
         if (!status) {
@@ -708,4 +791,16 @@
     }
 
+    psString camera = psMetadataLookupStr(&status, config->args, "-inst");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -inst");
+        return false;
+    }
+
+    psString telescope = psMetadataLookupStr(&status, config->args, "-telescope");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -telescope");
+        return false;
+    }
+
     psString exp_type = psMetadataLookupStr(&status, config->args, "-exp_type");
     if (!status) {
@@ -720,33 +815,52 @@
     }
 
-    psF32 airmass = psMetadataLookupF32(&status, config->args, "-airmass");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -airmass");
-        return false;
-    }
-
-    psF32 exp_time = psMetadataLookupF32(&status, config->args, "-exp_time");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_time");
-        return false;
-    }
-
-    psF32 ccd_temp = psMetadataLookupF32(&status, config->args, "-ccd_temp");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -ccd_temp");
-        return false;
-    }
-
-    psF64 posang = psMetadataLookupF32(&status, config->args, "-posang");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -posang");
-        return false;
-    }
-
-    psString object = psMetadataLookupStr(&status, config->args, "-object");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -object");
-        return false;
-    }
+    psF32 airmass_min = psMetadataLookupF32(&status, config->args, "-airmass_min");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -airmass_min");
+        return false;
+    }
+
+    psF32 airmass_max = psMetadataLookupF32(&status, config->args, "-airmass_max");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -airmass_max");
+        return false;
+    }
+
+    psF32 exp_time_min = psMetadataLookupF32(&status, config->args, "-exp_time_min");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_time_min");
+        return false;
+    }
+
+    psF32 exp_time_max = psMetadataLookupF32(&status, config->args, "-exp_time_max");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_time_max");
+        return false;
+    }
+
+    psF32 ccd_temp_min = psMetadataLookupF32(&status, config->args, "-ccd_temp_min");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -ccd_temp_min");
+        return false;
+    }
+
+    psF32 ccd_temp_max = psMetadataLookupF32(&status, config->args, "-ccd_temp_max");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -ccd_temp_max");
+        return false;
+    }
+
+    psF64 posang_min = psMetadataLookupF32(&status, config->args, "-posang_min");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -posang_min");
+        return false;
+    }
+
+    psF64 posang_max = psMetadataLookupF32(&status, config->args, "-posang_max");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -posang_max");
+        return false;
+    }
+
     psTime *registered = NULL;
     {
@@ -768,4 +882,42 @@
     }
 
+    psTime *time_begin = NULL;
+    {
+        psString time_beginStr = psMetadataLookupStr(&status, config->args, "-time_begin");
+        if (!status) {
+            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -time_begin");
+            return false;
+        }
+        // pass through NULL as this is an optional field
+        if (time_beginStr) {
+            time_begin = psTimeFromISO(time_beginStr, PS_TIME_UTC);
+            if (!time_begin) {
+                psError(PS_ERR_UNKNOWN, false, "error in time format %s", time_beginStr);
+                return false;
+            }
+        } else {
+            time_begin = NULL;
+        }
+    }
+
+    psTime *time_end = NULL;
+    {
+        psString time_endStr = psMetadataLookupStr(&status, config->args, "-time_end");
+        if (!status) {
+            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -time_end");
+            return false;
+        }
+        // pass through NULL as this is an optional field
+        if (time_endStr) {
+            time_end = psTimeFromISO(time_endStr, PS_TIME_UTC);
+            if (!time_end) {
+                psError(PS_ERR_UNKNOWN, false, "error in time format %s", time_endStr);
+                return false;
+            }
+        } else {
+            time_end = NULL;
+        }
+    }
+
     psTime *use_begin = NULL;
     {
@@ -874,22 +1026,32 @@
     // XXX det_id
     detRunInsert(config->dbh,
-            0,
-            0,
+            0,      // det_id
+            0,      // iteration
             det_type,
             mode,
-            "run",
+            "run",  // state
+            workdir,
+            camera,
+            telescope,
             exp_type,
-            workdir,
             filter,
-            airmass,
-            exp_time,
-            ccd_temp,
-            posang,
-            object,
+            airmass_min,
+            airmass_max,
+            exp_time_min,
+            exp_time_max,
+            ccd_temp_min,
+            ccd_temp_max,
+            posang_min,
+            posang_max,
             registered,
+            time_begin,
+            time_end,
             use_begin,
             use_end
         );
     psFree(registered);
+    psFree(time_begin);
+    psFree(time_end);
+    psFree(use_end);
     psFree(use_begin);
     psFree(use_end);
@@ -1042,4 +1204,24 @@
     }
 
+    psString camera = psMetadataLookupStr(&status, config->args, "-set_inst");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_inst");
+        return false;
+    }
+    if (camera) {
+        psFree(detRun->camera);
+        detRun->camera = psStringCopy(camera);
+    }
+
+    psString telescope = psMetadataLookupStr(&status, config->args, "-set_telescope");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_telescope");
+        return false;
+    }
+    if (telescope) {
+        psFree(detRun->telescope);
+        detRun->telescope = psStringCopy(telescope);
+    }
+
     psString exp_type = psMetadataLookupStr(&status, config->args, "-set_exp_type");
     if (!status) {
@@ -1062,48 +1244,74 @@
     }
 
-    psF32 airmass = psMetadataLookupF32(&status, config->args, "-set_airmass");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_airmass");
-        return false;
-    }
-    if (!isnan(airmass)) {
-        detRun->airmass = airmass;
-    }
-
-    psF32 exp_time = psMetadataLookupF32(&status, config->args, "-set_exp_time");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_exp_time");
-        return false;
-    }
-    if (!isnan(exp_time)) {
-        detRun->exp_time = exp_time;
-    }
-
-    psF32 ccd_temp = psMetadataLookupF32(&status, config->args, "-set_ccd_temp");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_ccd_temp");
-        return false;
-    }
-    if (!isnan(ccd_temp)) {
-        detRun->ccd_temp = ccd_temp;
-    }
-
-    psF64 posang = psMetadataLookupF32(&status, config->args, "-set_posang");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_posang");
-        return false;
-    }
-    if (!isnan(posang)) {
-        detRun->posang = posang;
-    }
-
-    psString object = psMetadataLookupStr(&status, config->args, "-set_object");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_object");
-        return false;
-    }
-    if (object) {
-        psFree(detRun->object);
-        detRun->object = psStringCopy(object);
+    psF32 airmass_min = psMetadataLookupF32(&status, config->args, "-set_airmass_min");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_airmass_min");
+        return false;
+    }
+    if (!isnan(airmass_min)) {
+        detRun->airmass_min = airmass_min;
+    }
+
+    psF32 airmass_max = psMetadataLookupF32(&status, config->args, "-set_airmass_max");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_airmass_max");
+        return false;
+    }
+    if (!isnan(airmass_max)) {
+        detRun->airmass_max = airmass_max;
+    }
+
+    psF32 exp_time_min = psMetadataLookupF32(&status, config->args, "-set_exp_time_min");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_exp_time_min");
+        return false;
+    }
+    if (!isnan(exp_time_min)) {
+        detRun->exp_time_min = exp_time_min;
+    }
+
+    psF32 exp_time_max = psMetadataLookupF32(&status, config->args, "-set_exp_time_max");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_exp_time_max");
+        return false;
+    }
+    if (!isnan(exp_time_max)) {
+        detRun->exp_time_max = exp_time_max;
+    }
+
+    psF32 ccd_temp_min = psMetadataLookupF32(&status, config->args, "-set_ccd_temp_min");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_ccd_temp_min");
+        return false;
+    }
+    if (!isnan(ccd_temp_min)) {
+        detRun->ccd_temp_min = ccd_temp_min;
+    }
+
+    psF32 ccd_temp_max = psMetadataLookupF32(&status, config->args, "-set_ccd_temp_max");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_ccd_temp_max");
+        return false;
+    }
+    if (!isnan(ccd_temp_max)) {
+        detRun->ccd_temp_max = ccd_temp_max;
+    }
+
+    psF64 posang_min = psMetadataLookupF32(&status, config->args, "-set_posang_min");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_posang_min");
+        return false;
+    }
+    if (!isnan(posang_min)) {
+        detRun->posang_min = posang_min;
+    }
+
+    psF64 posang_max = psMetadataLookupF32(&status, config->args, "-set_posang_max");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_posang_max");
+        return false;
+    }
+    if (!isnan(posang_max)) {
+        detRun->posang_max = posang_max;
     }
 
@@ -1121,4 +1329,36 @@
             detRun->registered = psMemIncrRefCounter(registered);
             psFree(registered);
+        }
+    }
+
+    psTime *time_begin = NULL;
+    {
+        psString time_beginStr = psMetadataLookupStr(&status, config->args, "-set_time_begin");
+        if (!status) {
+            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_time_begin");
+            return false;
+        }
+        // pass through NULL as this is an optional field
+        if (time_beginStr) {
+            psFree(detRun->time_begin);
+            time_begin = psTimeFromISO(time_beginStr, PS_TIME_UTC);
+            detRun->time_begin = psMemIncrRefCounter(time_begin);
+            psFree(time_begin);
+        }
+    }
+
+    psTime *time_end = NULL;
+    {
+        psString time_endStr = psMetadataLookupStr(&status, config->args, "-set_time_end");
+        if (!status) {
+            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_time_end");
+            return false;
+        }
+        // pass through NULL as this is an optional field
+        if (time_endStr) {
+            psFree(detRun->time_end);
+            time_end = psTimeFromISO(time_endStr, PS_TIME_UTC);
+            detRun->time_end = psMemIncrRefCounter(time_end);
+            psFree(time_end);
         }
     }
@@ -5767,4 +6007,16 @@
     }
 
+    psString camera = psMetadataLookupStr(&status, config->args, "-inst");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -inst");
+        return false;
+    }
+
+    psString telescope = psMetadataLookupStr(&status, config->args, "-telescope");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -telescope");
+        return false;
+    }
+
     psString exp_type = psMetadataLookupStr(&status, config->args, "-exp_type");
     if (!status) {
@@ -5779,31 +6031,49 @@
     }
 
-    psF32 airmass = psMetadataLookupF32(&status, config->args, "-airmass");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -airmass");
-        return false;
-    }
-
-    psF32 exp_time = psMetadataLookupF32(&status, config->args, "-exp_time");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_time");
-        return false;
-    }
-
-    psF32 ccd_temp = psMetadataLookupF32(&status, config->args, "-ccd_temp");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -ccd_temp");
-        return false;
-    }
-
-    psF64 posang = psMetadataLookupF32(&status, config->args, "-posang");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -posang");
-        return false;
-    }
-
-    psString object = psMetadataLookupStr(&status, config->args, "-object");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -object");
+    psF32 airmass_min = psMetadataLookupF32(&status, config->args, "-airmass_min");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -airmass_min");
+        return false;
+    }
+
+    psF32 airmass_max = psMetadataLookupF32(&status, config->args, "-airmass_max");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -airmass_max");
+        return false;
+    }
+
+    psF32 exp_time_min = psMetadataLookupF32(&status, config->args, "-exp_time_min");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_time_min");
+        return false;
+    }
+
+    psF32 exp_time_max = psMetadataLookupF32(&status, config->args, "-exp_time_max");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_time_max");
+        return false;
+    }
+
+    psF32 ccd_temp_min = psMetadataLookupF32(&status, config->args, "-ccd_temp_min");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -ccd_temp_min");
+        return false;
+    }
+
+    psF32 ccd_temp_max = psMetadataLookupF32(&status, config->args, "-ccd_temp_max");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -ccd_temp_max");
+        return false;
+    }
+
+    psF64 posang_min = psMetadataLookupF32(&status, config->args, "-posang_min");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -posang_min");
+        return false;
+    }
+
+    psF64 posang_max = psMetadataLookupF32(&status, config->args, "-posang_max");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -posang_max");
         return false;
     }
@@ -5824,4 +6094,34 @@
     }
 
+    psTime *time_begin = NULL;
+    {
+        psString time_beginStr = psMetadataLookupStr(&status, config->args, "-time_begin");
+        if (!status) {
+            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -time_begin");
+            return false;
+        }
+        // pass through NULL as this is an optional field
+        if (time_beginStr) {
+            time_begin = psTimeFromISO(time_beginStr, PS_TIME_UTC);
+        } else {
+            time_begin = NULL;
+        }
+    }
+
+    psTime *time_end = NULL;
+    {
+        psString time_endStr = psMetadataLookupStr(&status, config->args, "-time_end");
+        if (!status) {
+            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -time_end");
+            return false;
+        }
+        // pass through NULL as this is an optional field
+        if (time_endStr) {
+            time_end = psTimeFromISO(time_endStr, PS_TIME_UTC);
+        } else {
+            time_end = NULL;
+        }
+    }
+
     psTime *use_begin = NULL;
     {
@@ -5878,18 +6178,25 @@
 
     if (!detRunInsert(config->dbh,
-            0,
-            0,  // the iteration is fixed at 0
+            0,          // det_id
+            0,          // the iteration is fixed at 0
             det_type,
             mode,
-            "reg",
+            "reg",      // state
+            workdir,
+            camera,
+            telescope,
             exp_type,
-            workdir,
             filter,
-            airmass,
-            exp_time,
-            ccd_temp,
-            posang,
-            object,
+            airmass_min,
+            airmass_max,
+            exp_time_min,
+            exp_time_max,
+            ccd_temp_min,
+            ccd_temp_max,
+            posang_min,
+            posang_max,
             registered,
+            time_begin,
+            time_end,
             use_begin,
             use_end
Index: /trunk/ippTools/src/dettoolConfig.c
===================================================================
--- /trunk/ippTools/src/dettoolConfig.c	(revision 11196)
+++ /trunk/ippTools/src/dettoolConfig.c	(revision 11197)
@@ -72,22 +72,36 @@
     psMetadataAddStr(definebytagArgs, PS_LIST_TAIL, "-mode",  0,
             "define the mode of this detrend run", "master");
+    psMetadataAddStr(definebytagArgs, PS_LIST_TAIL, "-workdir",  0,
+            "define workdir (required)", NULL);
+    psMetadataAddStr(definebytagArgs, PS_LIST_TAIL, "-inst",  0,
+            "define camera", NULL);
+    psMetadataAddStr(definebytagArgs, PS_LIST_TAIL, "-telescope",  0,
+            "define telescope", NULL);
     psMetadataAddStr(definebytagArgs, PS_LIST_TAIL, "-exp_type",  0,
             "define exposure type", NULL);
-    psMetadataAddStr(definebytagArgs, PS_LIST_TAIL, "-workdir",  0,
-            "define workdir (required)", NULL);
     psMetadataAddStr(definebytagArgs, PS_LIST_TAIL, "-filter",  0,
             "define filter ", NULL);
-    psMetadataAddF32(definebytagArgs, PS_LIST_TAIL, "-airmass",  0,
-            "define airmass", NAN);
-    psMetadataAddF32(definebytagArgs, PS_LIST_TAIL, "-exp_time",  0,
-            "define exposure time", NAN);
-    psMetadataAddF64(definebytagArgs, PS_LIST_TAIL, "-ccd_temp",  0,
-            "define ccd tempature", NAN);
-    psMetadataAddF64(definebytagArgs, PS_LIST_TAIL, "-posang",  0,
-            "define rotator position angle", NAN);
-    psMetadataAddStr(definebytagArgs, PS_LIST_TAIL, "-object",  0,
-            "define exposure object", NULL);
+    psMetadataAddF32(definebytagArgs, PS_LIST_TAIL, "-airmass_min",  0,
+            "define min airmass", NAN);
+    psMetadataAddF32(definebytagArgs, PS_LIST_TAIL, "-airmass_max",  0,
+            "define max airmass", NAN);
+    psMetadataAddF32(definebytagArgs, PS_LIST_TAIL, "-exp_time_min",  0,
+            "define min exposure time", NAN);
+    psMetadataAddF32(definebytagArgs, PS_LIST_TAIL, "-exp_time_max",  0,
+            "define max exposure time", NAN);
+    psMetadataAddF64(definebytagArgs, PS_LIST_TAIL, "-ccd_temp_min",  0,
+            "define min ccd tempature", NAN);
+    psMetadataAddF64(definebytagArgs, PS_LIST_TAIL, "-ccd_temp_max",  0,
+            "define max ccd tempature", NAN);
+    psMetadataAddF64(definebytagArgs, PS_LIST_TAIL, "-posang_min",  0,
+            "define min rotator position angle", NAN);
+    psMetadataAddF64(definebytagArgs, PS_LIST_TAIL, "-posang_max",  0,
+            "define max rotator position angle", NAN);
     psMetadataAddStr(definebytagArgs, PS_LIST_TAIL, "-registered",  0,
             "time detrend run was registered", now);
+    psMetadataAddStr(definebytagArgs, PS_LIST_TAIL, "-time_begin",  0,
+            "detrend applyes to exposures taken during this peroid", NULL);
+    psMetadataAddStr(definebytagArgs, PS_LIST_TAIL, "-time_end",  0,
+            "detrend applyes to exposures taken during this peroid", NULL);
     psMetadataAddStr(definebytagArgs, PS_LIST_TAIL, "-use_begin",  0,
             "start of detrend run applicable peroid", NULL);
@@ -103,22 +117,36 @@
     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-mode",  0,
             "define the mode of this detrend run", "master");
+    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-workdir",  0,
+            "define workdir (required)", NULL);
+    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-inst",  0,
+            "define camera", NULL);
+    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-telescope",  0,
+            "define telescope", NULL);
     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-exp_type",  0,
             "define exposure type", NULL);
-    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-workdir",  0,
-            "define workdir (required)", NULL);
     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-filter",  0,
             "define filter ", NULL);
-    psMetadataAddF32(definebyqueryArgs, PS_LIST_TAIL, "-airmass",  0,
-            "define airmass", NAN);
-    psMetadataAddF32(definebyqueryArgs, PS_LIST_TAIL, "-exp_time",  0,
-            "define exposure time", NAN);
-    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-ccd_temp",  0,
-            "define ccd tempature", NAN);
-    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-posang",  0,
-            "define rotator position angle", NAN);
-    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-object",  0,
-            "define exposure object", NULL);
+    psMetadataAddF32(definebyqueryArgs, PS_LIST_TAIL, "-airmass_min",  0,
+            "define min airmass", NAN);
+    psMetadataAddF32(definebyqueryArgs, PS_LIST_TAIL, "-airmass_max",  0,
+            "define max airmass", NAN);
+    psMetadataAddF32(definebyqueryArgs, PS_LIST_TAIL, "-exp_time_min",  0,
+            "define min exposure time", NAN);
+    psMetadataAddF32(definebyqueryArgs, PS_LIST_TAIL, "-exp_time_max",  0,
+            "define max exposure time", NAN);
+    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-ccd_temp_min",  0,
+            "define min ccd tempature", NAN);
+    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-ccd_temp_max",  0,
+            "define max ccd tempature", NAN);
+    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-posang_min",  0,
+            "define min rotator position angle", NAN);
+    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-posang_max",  0,
+            "define max rotator position angle", NAN);
     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-registered",  0,
             "time detrend run was registered", now);
+    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-time_begin",  0,
+            "detrend applyes to exposures taken during this peroid", NULL);
+    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-time_end",  0,
+            "detrend applyes to exposures taken during this peroid", NULL);
     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-use_begin",  0,
             "start of detrend run applicable peroid", NULL);
@@ -158,16 +186,26 @@
     psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-set_filter",  0,
             "define filter ", NULL);
-    psMetadataAddF32(definebydetrunArgs, PS_LIST_TAIL, "-set_airmass",  0,
+    psMetadataAddF32(definebydetrunArgs, PS_LIST_TAIL, "-set_airmass_min",  0,
             "define airmass", NAN);
-    psMetadataAddF32(definebydetrunArgs, PS_LIST_TAIL, "-set_exp_time",  0,
+    psMetadataAddF32(definebydetrunArgs, PS_LIST_TAIL, "-set_airmass_max",  0,
+            "define airmass", NAN);
+    psMetadataAddF32(definebydetrunArgs, PS_LIST_TAIL, "-set_exp_time_min",  0,
             "define exposure time", NAN);
-    psMetadataAddF64(definebydetrunArgs, PS_LIST_TAIL, "-set_ccd_temp",  0,
+    psMetadataAddF32(definebydetrunArgs, PS_LIST_TAIL, "-set_exp_time_max",  0,
+            "define exposure time", NAN);
+    psMetadataAddF64(definebydetrunArgs, PS_LIST_TAIL, "-set_ccd_temp_min",  0,
             "define ccd tempature", NAN);
-    psMetadataAddF64(definebydetrunArgs, PS_LIST_TAIL, "-set_posang",  0,
+    psMetadataAddF64(definebydetrunArgs, PS_LIST_TAIL, "-set_ccd_temp_max",  0,
+            "define ccd tempature", NAN);
+    psMetadataAddF64(definebydetrunArgs, PS_LIST_TAIL, "-set_posang_min",  0,
             "define rotator position angle", NAN);
-    psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-set_object",  0,
-            "define exposure object", NULL);
+    psMetadataAddF64(definebydetrunArgs, PS_LIST_TAIL, "-set_posang_max",  0,
+            "define rotator position angle", NAN);
     psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-set_registered",  0,
             "time detrend run was registered", now);
+    psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-set_time_begin",  0,
+            "start of peroid to apply detrend too", NULL);
+    psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-set_time_end",  0,
+            "end of peroid to apply detrend too", NULL);
     psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-set_use_begin",  0,
             "start of detrend run applicable peroid", NULL);
@@ -655,22 +693,36 @@
     psMetadataAddStr(register_detrendArgs, PS_LIST_TAIL, "-mode",  0,
             "define the mode of this detrend run", "master");
+    psMetadataAddStr(register_detrendArgs, PS_LIST_TAIL, "-workdir",  0,
+            "define workdir (required)", NULL);
+    psMetadataAddStr(register_detrendArgs, PS_LIST_TAIL, "-inst",  0,
+            "define camera", NULL);
+    psMetadataAddStr(register_detrendArgs, PS_LIST_TAIL, "-telescope",  0,
+            "define telescope", NULL);
     psMetadataAddStr(register_detrendArgs, PS_LIST_TAIL, "-exp_type",  0,
             "define exposure type", NULL);
-    psMetadataAddStr(register_detrendArgs, PS_LIST_TAIL, "-workdir",  0,
-            "define workdir (required)", NULL);
     psMetadataAddStr(register_detrendArgs, PS_LIST_TAIL, "-filter",  0,
             "define filter ", NULL);
-    psMetadataAddF32(register_detrendArgs, PS_LIST_TAIL, "-airmass",  0,
-            "define airmass", NAN);
-    psMetadataAddF32(register_detrendArgs, PS_LIST_TAIL, "-exp_time",  0,
-            "define exposure time", NAN);
-    psMetadataAddF64(register_detrendArgs, PS_LIST_TAIL, "-ccd_temp",  0,
-            "define ccd tempature", NAN);
-    psMetadataAddF64(register_detrendArgs, PS_LIST_TAIL, "-posang",  0,
-            "define rotator position angle", NAN);
-    psMetadataAddStr(register_detrendArgs, PS_LIST_TAIL, "-object",  0,
-            "define exposure object", NULL);
+    psMetadataAddF32(register_detrendArgs, PS_LIST_TAIL, "-airmass_min",  0,
+            "define min airmass", NAN);
+    psMetadataAddF32(register_detrendArgs, PS_LIST_TAIL, "-airmass_max",  0,
+            "define max airmass", NAN);
+    psMetadataAddF32(register_detrendArgs, PS_LIST_TAIL, "-exp_time_min",  0,
+            "define min exposure time", NAN);
+    psMetadataAddF32(register_detrendArgs, PS_LIST_TAIL, "-exp_time_max",  0,
+            "define max exposure time", NAN);
+    psMetadataAddF64(register_detrendArgs, PS_LIST_TAIL, "-ccd_temp_min",  0,
+            "define min ccd tempature", NAN);
+    psMetadataAddF64(register_detrendArgs, PS_LIST_TAIL, "-ccd_temp_max",  0,
+            "define max ccd tempature", NAN);
+    psMetadataAddF64(register_detrendArgs, PS_LIST_TAIL, "-posang_min",  0,
+            "define min rotator position angle", NAN);
+    psMetadataAddF64(register_detrendArgs, PS_LIST_TAIL, "-posang_max",  0,
+            "define max rotator position angle", NAN);
     psMetadataAddStr(register_detrendArgs, PS_LIST_TAIL, "-registered",  0,
             "time detrend run was registered", now);
+    psMetadataAddStr(register_detrendArgs, PS_LIST_TAIL, "-time_begin",  0,
+            "detrend applyes to exposures taken during this peroid", NULL);
+    psMetadataAddStr(register_detrendArgs, PS_LIST_TAIL, "-time_end",  0,
+            "detrend applyes to exposures taken during this peroid", NULL);
     psMetadataAddStr(register_detrendArgs, PS_LIST_TAIL, "-use_begin",  0,
             "start of detrend run applicable peroid", NULL);
@@ -715,4 +767,6 @@
         if (config->mode) { \
             psError(PS_ERR_UNKNOWN, true, "only one mode selection is allowed"); \
+            psFree(argset); \
+            psFree(argSets); \
             goto FAIL; \
         } \
@@ -907,5 +961,5 @@
 
 FAIL:
-    psFree(config);
+//    psFree(config);
     pmConfigDone();
     psLibFinalize();
