Index: /trunk/ippdb/src/ippdb.c
===================================================================
--- /trunk/ippdb/src/ippdb.c	(revision 15765)
+++ /trunk/ippdb/src/ippdb.c	(revision 15766)
@@ -3559,5 +3559,5 @@
 static void rawExpRowFree(rawExpRow *object);
 
-rawExpRow *rawExpRowAlloc(psS64 exp_id, const char *exp_name, const char *camera, const char *telescope, psTime* dateobs, const char *exp_tag, const char *exp_type, const char *filelevel, const char *workdir, const char *reduction, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF32 sat_pixel_frac, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, psF64 user_1, psF64 user_2, psF64 user_3, psF64 user_4, psF64 user_5, const char *object, psF32 solang, psS16 fault)
+rawExpRow *rawExpRowAlloc(psS64 exp_id, const char *exp_name, const char *camera, const char *telescope, psTime* dateobs, const char *exp_tag, const char *exp_type, const char *filelevel, const char *workdir, const char *reduction, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF32 sat_pixel_frac, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, psF32 M1_x, psF32 M1_y, psF32 M1_z, psF32 M1_tip, psF32 M1_tilt, psF32 M2_x, psF32 M2_y, psF32 M2_z, psF32 M2_tip, psF32 M2_tilt, psF32 env_temperature, psF32 env_humidity, psF32 env_wind_speed, psF32 env_wind_dir, psF32 pon_time, psF64 user_1, psF64 user_2, psF64 user_3, psF64 user_4, psF64 user_5, const char *object, psF32 solang, psS16 fault)
 {
     rawExpRow       *_object;
@@ -3589,4 +3589,19 @@
     _object->ccd_temp = ccd_temp;
     _object->posang = posang;
+    _object->M1_x = M1_x;
+    _object->M1_y = M1_y;
+    _object->M1_z = M1_z;
+    _object->M1_tip = M1_tip;
+    _object->M1_tilt = M1_tilt;
+    _object->M2_x = M2_x;
+    _object->M2_y = M2_y;
+    _object->M2_z = M2_z;
+    _object->M2_tip = M2_tip;
+    _object->M2_tilt = M2_tilt;
+    _object->env_temperature = env_temperature;
+    _object->env_humidity = env_humidity;
+    _object->env_wind_speed = env_wind_speed;
+    _object->env_wind_dir = env_wind_dir;
+    _object->pon_time = pon_time;
     _object->user_1 = user_1;
     _object->user_2 = user_2;
@@ -3734,4 +3749,79 @@
         return false;
     }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_x", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_x");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_y", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_y");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_z", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_z");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_tip", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_tip");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_tilt", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_tilt");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_x", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_x");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_y", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_y");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_z", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_z");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_tip", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_tip");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_tilt", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_tilt");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_temperature", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_temperature");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_humidity", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_humidity");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_wind_speed", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_wind_speed");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_wind_dir", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_wind_dir");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "pon_time", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item pon_time");
+        psFree(md);
+        return false;
+    }
     if (!psMetadataAdd(md, PS_LIST_TAIL, "user_1", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item user_1");
@@ -3787,5 +3877,5 @@
 }
 
-bool rawExpInsert(psDB * dbh, psS64 exp_id, const char *exp_name, const char *camera, const char *telescope, psTime* dateobs, const char *exp_tag, const char *exp_type, const char *filelevel, const char *workdir, const char *reduction, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF32 sat_pixel_frac, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, psF64 user_1, psF64 user_2, psF64 user_3, psF64 user_4, psF64 user_5, const char *object, psF32 solang, psS16 fault)
+bool rawExpInsert(psDB * dbh, psS64 exp_id, const char *exp_name, const char *camera, const char *telescope, psTime* dateobs, const char *exp_tag, const char *exp_type, const char *filelevel, const char *workdir, const char *reduction, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF32 sat_pixel_frac, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, psF32 M1_x, psF32 M1_y, psF32 M1_z, psF32 M1_tip, psF32 M1_tilt, psF32 M2_x, psF32 M2_y, psF32 M2_z, psF32 M2_tip, psF32 M2_tilt, psF32 env_temperature, psF32 env_humidity, psF32 env_wind_speed, psF32 env_wind_dir, psF32 pon_time, psF64 user_1, psF64 user_2, psF64 user_3, psF64 user_4, psF64 user_5, const char *object, psF32 solang, psS16 fault)
 {
     psMetadata *md = psMetadataAlloc();
@@ -3902,4 +3992,79 @@
     if (!psMetadataAdd(md, PS_LIST_TAIL, "posang", PS_DATA_F64, NULL, posang)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_x", PS_DATA_F32, NULL, M1_x)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_x");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_y", PS_DATA_F32, NULL, M1_y)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_y");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_z", PS_DATA_F32, NULL, M1_z)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_z");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_tip", PS_DATA_F32, NULL, M1_tip)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_tip");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_tilt", PS_DATA_F32, NULL, M1_tilt)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_tilt");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_x", PS_DATA_F32, NULL, M2_x)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_x");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_y", PS_DATA_F32, NULL, M2_y)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_y");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_z", PS_DATA_F32, NULL, M2_z)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_z");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_tip", PS_DATA_F32, NULL, M2_tip)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_tip");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_tilt", PS_DATA_F32, NULL, M2_tilt)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_tilt");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_temperature", PS_DATA_F32, NULL, env_temperature)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_temperature");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_humidity", PS_DATA_F32, NULL, env_humidity)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_humidity");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_wind_speed", PS_DATA_F32, NULL, env_wind_speed)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_wind_speed");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_wind_dir", PS_DATA_F32, NULL, env_wind_dir)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_wind_dir");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "pon_time", PS_DATA_F32, NULL, pon_time)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item pon_time");
         psFree(md);
         return false;
@@ -3968,5 +4133,5 @@
 bool rawExpInsertObject(psDB *dbh, rawExpRow *object)
 {
-    return rawExpInsert(dbh, object->exp_id, object->exp_name, object->camera, object->telescope, object->dateobs, object->exp_tag, object->exp_type, object->filelevel, object->workdir, object->reduction, object->filter, object->airmass, object->ra, object->decl, object->exp_time, object->sat_pixel_frac, object->bg, object->bg_stdev, object->bg_mean_stdev, object->alt, object->az, object->ccd_temp, object->posang, object->user_1, object->user_2, object->user_3, object->user_4, object->user_5, object->object, object->solang, object->fault);
+    return rawExpInsert(dbh, object->exp_id, object->exp_name, object->camera, object->telescope, object->dateobs, object->exp_tag, object->exp_type, object->filelevel, object->workdir, object->reduction, object->filter, object->airmass, object->ra, object->decl, object->exp_time, object->sat_pixel_frac, object->bg, object->bg_stdev, object->bg_mean_stdev, object->alt, object->az, object->ccd_temp, object->posang, object->M1_x, object->M1_y, object->M1_z, object->M1_tip, object->M1_tilt, object->M2_x, object->M2_y, object->M2_z, object->M2_tip, object->M2_tilt, object->env_temperature, object->env_humidity, object->env_wind_speed, object->env_wind_dir, object->pon_time, object->user_1, object->user_2, object->user_3, object->user_4, object->user_5, object->object, object->solang, object->fault);
 }
 
@@ -4156,4 +4321,79 @@
         return false;
     }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_x", PS_DATA_F32, NULL, object->M1_x)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_x");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_y", PS_DATA_F32, NULL, object->M1_y)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_y");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_z", PS_DATA_F32, NULL, object->M1_z)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_z");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_tip", PS_DATA_F32, NULL, object->M1_tip)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_tip");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_tilt", PS_DATA_F32, NULL, object->M1_tilt)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_tilt");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_x", PS_DATA_F32, NULL, object->M2_x)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_x");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_y", PS_DATA_F32, NULL, object->M2_y)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_y");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_z", PS_DATA_F32, NULL, object->M2_z)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_z");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_tip", PS_DATA_F32, NULL, object->M2_tip)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_tip");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_tilt", PS_DATA_F32, NULL, object->M2_tilt)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_tilt");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_temperature", PS_DATA_F32, NULL, object->env_temperature)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_temperature");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_humidity", PS_DATA_F32, NULL, object->env_humidity)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_humidity");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_wind_speed", PS_DATA_F32, NULL, object->env_wind_speed)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_wind_speed");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_wind_dir", PS_DATA_F32, NULL, object->env_wind_dir)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_wind_dir");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "pon_time", PS_DATA_F32, NULL, object->pon_time)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item pon_time");
+        psFree(md);
+        return false;
+    }
     if (!psMetadataAdd(md, PS_LIST_TAIL, "user_1", PS_DATA_F64, NULL, object->user_1)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item user_1");
@@ -4320,4 +4560,79 @@
         return false;
     }
+    psF32 M1_x = psMetadataLookupF32(&status, md, "M1_x");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item M1_x");
+        return false;
+    }
+    psF32 M1_y = psMetadataLookupF32(&status, md, "M1_y");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item M1_y");
+        return false;
+    }
+    psF32 M1_z = psMetadataLookupF32(&status, md, "M1_z");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item M1_z");
+        return false;
+    }
+    psF32 M1_tip = psMetadataLookupF32(&status, md, "M1_tip");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item M1_tip");
+        return false;
+    }
+    psF32 M1_tilt = psMetadataLookupF32(&status, md, "M1_tilt");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item M1_tilt");
+        return false;
+    }
+    psF32 M2_x = psMetadataLookupF32(&status, md, "M2_x");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item M2_x");
+        return false;
+    }
+    psF32 M2_y = psMetadataLookupF32(&status, md, "M2_y");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item M2_y");
+        return false;
+    }
+    psF32 M2_z = psMetadataLookupF32(&status, md, "M2_z");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item M2_z");
+        return false;
+    }
+    psF32 M2_tip = psMetadataLookupF32(&status, md, "M2_tip");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item M2_tip");
+        return false;
+    }
+    psF32 M2_tilt = psMetadataLookupF32(&status, md, "M2_tilt");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item M2_tilt");
+        return false;
+    }
+    psF32 env_temperature = psMetadataLookupF32(&status, md, "env_temperature");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item env_temperature");
+        return false;
+    }
+    psF32 env_humidity = psMetadataLookupF32(&status, md, "env_humidity");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item env_humidity");
+        return false;
+    }
+    psF32 env_wind_speed = psMetadataLookupF32(&status, md, "env_wind_speed");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item env_wind_speed");
+        return false;
+    }
+    psF32 env_wind_dir = psMetadataLookupF32(&status, md, "env_wind_dir");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item env_wind_dir");
+        return false;
+    }
+    psF32 pon_time = psMetadataLookupF32(&status, md, "pon_time");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item pon_time");
+        return false;
+    }
     psF64 user_1 = psMetadataLookupF64(&status, md, "user_1");
     if (!status) {
@@ -4361,5 +4676,5 @@
     }
 
-    return rawExpRowAlloc(exp_id, exp_name, camera, telescope, dateobs, exp_tag, exp_type, filelevel, workdir, reduction, filter, airmass, ra, decl, exp_time, sat_pixel_frac, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, user_1, user_2, user_3, user_4, user_5, object, solang, fault);
+    return rawExpRowAlloc(exp_id, exp_name, camera, telescope, dateobs, exp_tag, exp_type, filelevel, workdir, reduction, filter, airmass, ra, decl, exp_time, sat_pixel_frac, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, M1_x, M1_y, M1_z, M1_tip, M1_tilt, M2_x, M2_y, M2_z, M2_tip, M2_tilt, env_temperature, env_humidity, env_wind_speed, env_wind_dir, pon_time, user_1, user_2, user_3, user_4, user_5, object, solang, fault);
 }
 psArray *rawExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
@@ -4473,5 +4788,5 @@
 static void rawImfileRowFree(rawImfileRow *object);
 
-rawImfileRow *rawImfileRowAlloc(psS64 exp_id, const char *exp_name, const char *camera, const char *telescope, psTime* dateobs, const char *tmp_class_id, const char *class_id, const char *uri, const char *exp_type, const char *filelevel, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF32 sat_pixel_frac, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, psF64 user_1, psF64 user_2, psF64 user_3, psF64 user_4, psF64 user_5, const char *object, psS16 fault)
+rawImfileRow *rawImfileRowAlloc(psS64 exp_id, const char *exp_name, const char *camera, const char *telescope, psTime* dateobs, const char *tmp_class_id, const char *class_id, const char *uri, const char *exp_type, const char *filelevel, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF32 sat_pixel_frac, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, psF32 M1_x, psF32 M1_y, psF32 M1_z, psF32 M1_tip, psF32 M1_tilt, psF32 M2_x, psF32 M2_y, psF32 M2_z, psF32 M2_tip, psF32 M2_tilt, psF32 env_temperature, psF32 env_humidity, psF32 env_wind_speed, psF32 env_wind_dir, psF32 pon_time, psF64 user_1, psF64 user_2, psF64 user_3, psF64 user_4, psF64 user_5, const char *object, psS16 fault)
 {
     rawImfileRow    *_object;
@@ -4503,4 +4818,19 @@
     _object->ccd_temp = ccd_temp;
     _object->posang = posang;
+    _object->M1_x = M1_x;
+    _object->M1_y = M1_y;
+    _object->M1_z = M1_z;
+    _object->M1_tip = M1_tip;
+    _object->M1_tilt = M1_tilt;
+    _object->M2_x = M2_x;
+    _object->M2_y = M2_y;
+    _object->M2_z = M2_z;
+    _object->M2_tip = M2_tip;
+    _object->M2_tilt = M2_tilt;
+    _object->env_temperature = env_temperature;
+    _object->env_humidity = env_humidity;
+    _object->env_wind_speed = env_wind_speed;
+    _object->env_wind_dir = env_wind_dir;
+    _object->pon_time = pon_time;
     _object->user_1 = user_1;
     _object->user_2 = user_2;
@@ -4647,4 +4977,79 @@
         return false;
     }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_x", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_x");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_y", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_y");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_z", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_z");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_tip", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_tip");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_tilt", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_tilt");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_x", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_x");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_y", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_y");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_z", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_z");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_tip", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_tip");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_tilt", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_tilt");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_temperature", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_temperature");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_humidity", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_humidity");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_wind_speed", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_wind_speed");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_wind_dir", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_wind_dir");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "pon_time", PS_DATA_F32, NULL, 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item pon_time");
+        psFree(md);
+        return false;
+    }
     if (!psMetadataAdd(md, PS_LIST_TAIL, "user_1", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item user_1");
@@ -4695,5 +5100,5 @@
 }
 
-bool rawImfileInsert(psDB * dbh, psS64 exp_id, const char *exp_name, const char *camera, const char *telescope, psTime* dateobs, const char *tmp_class_id, const char *class_id, const char *uri, const char *exp_type, const char *filelevel, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF32 sat_pixel_frac, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, psF64 user_1, psF64 user_2, psF64 user_3, psF64 user_4, psF64 user_5, const char *object, psS16 fault)
+bool rawImfileInsert(psDB * dbh, psS64 exp_id, const char *exp_name, const char *camera, const char *telescope, psTime* dateobs, const char *tmp_class_id, const char *class_id, const char *uri, const char *exp_type, const char *filelevel, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF32 sat_pixel_frac, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, psF32 M1_x, psF32 M1_y, psF32 M1_z, psF32 M1_tip, psF32 M1_tilt, psF32 M2_x, psF32 M2_y, psF32 M2_z, psF32 M2_tip, psF32 M2_tilt, psF32 env_temperature, psF32 env_humidity, psF32 env_wind_speed, psF32 env_wind_dir, psF32 pon_time, psF64 user_1, psF64 user_2, psF64 user_3, psF64 user_4, psF64 user_5, const char *object, psS16 fault)
 {
     psMetadata *md = psMetadataAlloc();
@@ -4810,4 +5215,79 @@
     if (!psMetadataAdd(md, PS_LIST_TAIL, "posang", PS_DATA_F64, NULL, posang)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_x", PS_DATA_F32, NULL, M1_x)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_x");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_y", PS_DATA_F32, NULL, M1_y)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_y");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_z", PS_DATA_F32, NULL, M1_z)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_z");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_tip", PS_DATA_F32, NULL, M1_tip)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_tip");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_tilt", PS_DATA_F32, NULL, M1_tilt)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_tilt");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_x", PS_DATA_F32, NULL, M2_x)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_x");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_y", PS_DATA_F32, NULL, M2_y)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_y");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_z", PS_DATA_F32, NULL, M2_z)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_z");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_tip", PS_DATA_F32, NULL, M2_tip)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_tip");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_tilt", PS_DATA_F32, NULL, M2_tilt)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_tilt");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_temperature", PS_DATA_F32, NULL, env_temperature)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_temperature");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_humidity", PS_DATA_F32, NULL, env_humidity)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_humidity");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_wind_speed", PS_DATA_F32, NULL, env_wind_speed)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_wind_speed");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_wind_dir", PS_DATA_F32, NULL, env_wind_dir)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_wind_dir");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "pon_time", PS_DATA_F32, NULL, pon_time)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item pon_time");
         psFree(md);
         return false;
@@ -4871,5 +5351,5 @@
 bool rawImfileInsertObject(psDB *dbh, rawImfileRow *object)
 {
-    return rawImfileInsert(dbh, object->exp_id, object->exp_name, object->camera, object->telescope, object->dateobs, object->tmp_class_id, object->class_id, object->uri, object->exp_type, object->filelevel, object->filter, object->airmass, object->ra, object->decl, object->exp_time, object->sat_pixel_frac, object->bg, object->bg_stdev, object->bg_mean_stdev, object->alt, object->az, object->ccd_temp, object->posang, object->user_1, object->user_2, object->user_3, object->user_4, object->user_5, object->object, object->fault);
+    return rawImfileInsert(dbh, object->exp_id, object->exp_name, object->camera, object->telescope, object->dateobs, object->tmp_class_id, object->class_id, object->uri, object->exp_type, object->filelevel, object->filter, object->airmass, object->ra, object->decl, object->exp_time, object->sat_pixel_frac, object->bg, object->bg_stdev, object->bg_mean_stdev, object->alt, object->az, object->ccd_temp, object->posang, object->M1_x, object->M1_y, object->M1_z, object->M1_tip, object->M1_tilt, object->M2_x, object->M2_y, object->M2_z, object->M2_tip, object->M2_tilt, object->env_temperature, object->env_humidity, object->env_wind_speed, object->env_wind_dir, object->pon_time, object->user_1, object->user_2, object->user_3, object->user_4, object->user_5, object->object, object->fault);
 }
 
@@ -5059,4 +5539,79 @@
         return false;
     }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_x", PS_DATA_F32, NULL, object->M1_x)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_x");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_y", PS_DATA_F32, NULL, object->M1_y)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_y");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_z", PS_DATA_F32, NULL, object->M1_z)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_z");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_tip", PS_DATA_F32, NULL, object->M1_tip)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_tip");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M1_tilt", PS_DATA_F32, NULL, object->M1_tilt)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M1_tilt");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_x", PS_DATA_F32, NULL, object->M2_x)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_x");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_y", PS_DATA_F32, NULL, object->M2_y)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_y");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_z", PS_DATA_F32, NULL, object->M2_z)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_z");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_tip", PS_DATA_F32, NULL, object->M2_tip)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_tip");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "M2_tilt", PS_DATA_F32, NULL, object->M2_tilt)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item M2_tilt");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_temperature", PS_DATA_F32, NULL, object->env_temperature)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_temperature");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_humidity", PS_DATA_F32, NULL, object->env_humidity)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_humidity");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_wind_speed", PS_DATA_F32, NULL, object->env_wind_speed)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_wind_speed");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "env_wind_dir", PS_DATA_F32, NULL, object->env_wind_dir)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item env_wind_dir");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "pon_time", PS_DATA_F32, NULL, object->pon_time)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item pon_time");
+        psFree(md);
+        return false;
+    }
     if (!psMetadataAdd(md, PS_LIST_TAIL, "user_1", PS_DATA_F64, NULL, object->user_1)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item user_1");
@@ -5218,4 +5773,79 @@
         return false;
     }
+    psF32 M1_x = psMetadataLookupF32(&status, md, "M1_x");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item M1_x");
+        return false;
+    }
+    psF32 M1_y = psMetadataLookupF32(&status, md, "M1_y");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item M1_y");
+        return false;
+    }
+    psF32 M1_z = psMetadataLookupF32(&status, md, "M1_z");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item M1_z");
+        return false;
+    }
+    psF32 M1_tip = psMetadataLookupF32(&status, md, "M1_tip");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item M1_tip");
+        return false;
+    }
+    psF32 M1_tilt = psMetadataLookupF32(&status, md, "M1_tilt");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item M1_tilt");
+        return false;
+    }
+    psF32 M2_x = psMetadataLookupF32(&status, md, "M2_x");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item M2_x");
+        return false;
+    }
+    psF32 M2_y = psMetadataLookupF32(&status, md, "M2_y");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item M2_y");
+        return false;
+    }
+    psF32 M2_z = psMetadataLookupF32(&status, md, "M2_z");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item M2_z");
+        return false;
+    }
+    psF32 M2_tip = psMetadataLookupF32(&status, md, "M2_tip");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item M2_tip");
+        return false;
+    }
+    psF32 M2_tilt = psMetadataLookupF32(&status, md, "M2_tilt");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item M2_tilt");
+        return false;
+    }
+    psF32 env_temperature = psMetadataLookupF32(&status, md, "env_temperature");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item env_temperature");
+        return false;
+    }
+    psF32 env_humidity = psMetadataLookupF32(&status, md, "env_humidity");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item env_humidity");
+        return false;
+    }
+    psF32 env_wind_speed = psMetadataLookupF32(&status, md, "env_wind_speed");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item env_wind_speed");
+        return false;
+    }
+    psF32 env_wind_dir = psMetadataLookupF32(&status, md, "env_wind_dir");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item env_wind_dir");
+        return false;
+    }
+    psF32 pon_time = psMetadataLookupF32(&status, md, "pon_time");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item pon_time");
+        return false;
+    }
     psF64 user_1 = psMetadataLookupF64(&status, md, "user_1");
     if (!status) {
@@ -5254,5 +5884,5 @@
     }
 
-    return rawImfileRowAlloc(exp_id, exp_name, camera, telescope, dateobs, tmp_class_id, class_id, uri, exp_type, filelevel, filter, airmass, ra, decl, exp_time, sat_pixel_frac, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, user_1, user_2, user_3, user_4, user_5, object, fault);
+    return rawImfileRowAlloc(exp_id, exp_name, camera, telescope, dateobs, tmp_class_id, class_id, uri, exp_type, filelevel, filter, airmass, ra, decl, exp_time, sat_pixel_frac, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, M1_x, M1_y, M1_z, M1_tip, M1_tilt, M2_x, M2_y, M2_z, M2_tip, M2_tilt, env_temperature, env_humidity, env_wind_speed, env_wind_dir, pon_time, user_1, user_2, user_3, user_4, user_5, object, fault);
 }
 psArray *rawImfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
@@ -22704,5 +23334,5 @@
 static void flatcorrRunRowFree(flatcorrRunRow *object);
 
-flatcorrRunRow *flatcorrRunRowAlloc(psS64 corr_id, const char *dvodb, const char *state, const char *workdir, const char *label)
+flatcorrRunRow *flatcorrRunRowAlloc(psS64 corr_id, const char *dvodb, const char *state, const char *workdir, const char *label, const char *stats)
 {
     flatcorrRunRow  *_object;
@@ -22716,4 +23346,5 @@
     _object->workdir = psStringCopy(workdir);
     _object->label = psStringCopy(label);
+    _object->stats = psStringCopy(stats);
 
     return _object;
@@ -22726,4 +23357,5 @@
     psFree(object->workdir);
     psFree(object->label);
+    psFree(object->stats);
 }
 
@@ -22756,4 +23388,9 @@
         return false;
     }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "stats", PS_DATA_STRING, NULL, "255")) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item stats");
+        psFree(md);
+        return false;
+    }
 
     bool status = psDBCreateTable(dbh, FLATCORRRUN_TABLE_NAME, md);
@@ -22769,5 +23406,5 @@
 }
 
-bool flatcorrRunInsert(psDB * dbh, psS64 corr_id, const char *dvodb, const char *state, const char *workdir, const char *label)
+bool flatcorrRunInsert(psDB * dbh, psS64 corr_id, const char *dvodb, const char *state, const char *workdir, const char *label, const char *stats)
 {
     psMetadata *md = psMetadataAlloc();
@@ -22794,4 +23431,9 @@
     if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, label)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item label");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "stats", PS_DATA_STRING, NULL, stats)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item stats");
         psFree(md);
         return false;
@@ -22820,5 +23462,5 @@
 bool flatcorrRunInsertObject(psDB *dbh, flatcorrRunRow *object)
 {
-    return flatcorrRunInsert(dbh, object->corr_id, object->dvodb, object->state, object->workdir, object->label);
+    return flatcorrRunInsert(dbh, object->corr_id, object->dvodb, object->state, object->workdir, object->label, object->stats);
 }
 
@@ -22918,4 +23560,9 @@
         return false;
     }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "stats", PS_DATA_STRING, NULL, object->stats)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item stats");
+        psFree(md);
+        return false;
+    }
 
 
@@ -22952,6 +23599,11 @@
         return false;
     }
-
-    return flatcorrRunRowAlloc(corr_id, dvodb, state, workdir, label);
+    char* stats = psMetadataLookupPtr(&status, md, "stats");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item stats");
+        return false;
+    }
+
+    return flatcorrRunRowAlloc(corr_id, dvodb, state, workdir, label, stats);
 }
 psArray *flatcorrRunSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
Index: /trunk/ippdb/src/ippdb.h
===================================================================
--- /trunk/ippdb/src/ippdb.h	(revision 15765)
+++ /trunk/ippdb/src/ippdb.h	(revision 15766)
@@ -2023,4 +2023,19 @@
     psF32           ccd_temp;
     psF64           posang;
+    psF32           M1_x;
+    psF32           M1_y;
+    psF32           M1_z;
+    psF32           M1_tip;
+    psF32           M1_tilt;
+    psF32           M2_x;
+    psF32           M2_y;
+    psF32           M2_z;
+    psF32           M2_tip;
+    psF32           M2_tilt;
+    psF32           env_temperature;
+    psF32           env_humidity;
+    psF32           env_wind_speed;
+    psF32           env_wind_dir;
+    psF32           pon_time;
     psF64           user_1;
     psF64           user_2;
@@ -2062,4 +2077,19 @@
     psF32           ccd_temp,
     psF64           posang,
+    psF32           M1_x,
+    psF32           M1_y,
+    psF32           M1_z,
+    psF32           M1_tip,
+    psF32           M1_tilt,
+    psF32           M2_x,
+    psF32           M2_y,
+    psF32           M2_z,
+    psF32           M2_tip,
+    psF32           M2_tilt,
+    psF32           env_temperature,
+    psF32           env_humidity,
+    psF32           env_wind_speed,
+    psF32           env_wind_dir,
+    psF32           pon_time,
     psF64           user_1,
     psF64           user_2,
@@ -2122,4 +2152,19 @@
     psF32           ccd_temp,
     psF64           posang,
+    psF32           M1_x,
+    psF32           M1_y,
+    psF32           M1_z,
+    psF32           M1_tip,
+    psF32           M1_tilt,
+    psF32           M2_x,
+    psF32           M2_y,
+    psF32           M2_z,
+    psF32           M2_tip,
+    psF32           M2_tilt,
+    psF32           env_temperature,
+    psF32           env_humidity,
+    psF32           env_wind_speed,
+    psF32           env_wind_dir,
+    psF32           pon_time,
     psF64           user_1,
     psF64           user_2,
@@ -2308,4 +2353,19 @@
     psF32           ccd_temp;
     psF64           posang;
+    psF32           M1_x;
+    psF32           M1_y;
+    psF32           M1_z;
+    psF32           M1_tip;
+    psF32           M1_tilt;
+    psF32           M2_x;
+    psF32           M2_y;
+    psF32           M2_z;
+    psF32           M2_tip;
+    psF32           M2_tilt;
+    psF32           env_temperature;
+    psF32           env_humidity;
+    psF32           env_wind_speed;
+    psF32           env_wind_dir;
+    psF32           pon_time;
     psF64           user_1;
     psF64           user_2;
@@ -2346,4 +2406,19 @@
     psF32           ccd_temp,
     psF64           posang,
+    psF32           M1_x,
+    psF32           M1_y,
+    psF32           M1_z,
+    psF32           M1_tip,
+    psF32           M1_tilt,
+    psF32           M2_x,
+    psF32           M2_y,
+    psF32           M2_z,
+    psF32           M2_tip,
+    psF32           M2_tilt,
+    psF32           env_temperature,
+    psF32           env_humidity,
+    psF32           env_wind_speed,
+    psF32           env_wind_dir,
+    psF32           pon_time,
     psF64           user_1,
     psF64           user_2,
@@ -2405,4 +2480,19 @@
     psF32           ccd_temp,
     psF64           posang,
+    psF32           M1_x,
+    psF32           M1_y,
+    psF32           M1_z,
+    psF32           M1_tip,
+    psF32           M1_tilt,
+    psF32           M2_x,
+    psF32           M2_y,
+    psF32           M2_z,
+    psF32           M2_tip,
+    psF32           M2_tilt,
+    psF32           env_temperature,
+    psF32           env_humidity,
+    psF32           env_wind_speed,
+    psF32           env_wind_dir,
+    psF32           pon_time,
     psF64           user_1,
     psF64           user_2,
@@ -11116,4 +11206,5 @@
     char            *workdir;
     char            *label;
+    char            *stats;
 } flatcorrRunRow;
 
@@ -11128,5 +11219,6 @@
     const char      *state,
     const char      *workdir,
-    const char      *label
+    const char      *label,
+    const char      *stats
 );
 
@@ -11162,5 +11254,6 @@
     const char      *state,
     const char      *workdir,
-    const char      *label
+    const char      *label,
+    const char      *stats
 );
 
Index: /trunk/ippdb/tests/alloc.c
===================================================================
--- /trunk/ippdb/tests/alloc.c	(revision 15765)
+++ /trunk/ippdb/tests/alloc.c	(revision 15766)
@@ -315,5 +315,5 @@
         rawExpRow       *object;
 
-        object = rawExpRowAlloc(-64, "a string", "a string", "a string", "0001-01-01T00:00:00Z", "a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 64.64, "a string", 32.32, -16    );
+        object = rawExpRowAlloc(-64, "a string", "a string", "a string", "0001-01-01T00:00:00Z", "a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, "a string", 32.32, -16    );
 
         if (!object) {
@@ -412,4 +412,64 @@
             exit(EXIT_FAILURE);
         }
+        if (!object->M1_x == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M1_y == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M1_z == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M1_tip == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M1_tilt == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M2_x == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M2_y == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M2_z == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M2_tip == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M2_tilt == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->env_temperature == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->env_humidity == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->env_wind_speed == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->env_wind_dir == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->pon_time == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
         if (!object->user_1 == 64.64) {
             psFree(object);
@@ -451,5 +511,5 @@
         rawImfileRow    *object;
 
-        object = rawImfileRowAlloc(-64, "a string", "a string", "a string", "0001-01-01T00:00:00Z", "a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 64.64, "a string", -16    );
+        object = rawImfileRowAlloc(-64, "a string", "a string", "a string", "0001-01-01T00:00:00Z", "a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, "a string", -16    );
 
         if (!object) {
@@ -548,4 +608,64 @@
             exit(EXIT_FAILURE);
         }
+        if (!object->M1_x == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M1_y == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M1_z == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M1_tip == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M1_tilt == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M2_x == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M2_y == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M2_z == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M2_tip == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M2_tilt == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->env_temperature == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->env_humidity == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->env_wind_speed == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->env_wind_dir == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->pon_time == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
         if (!object->user_1 == 64.64) {
             psFree(object);
@@ -2489,5 +2609,5 @@
         flatcorrRunRow  *object;
 
-        object = flatcorrRunRowAlloc(-64, "a string", "a string", "a string", "a string"    );
+        object = flatcorrRunRowAlloc(-64, "a string", "a string", "a string", "a string", "a string"    );
 
         if (!object) {
@@ -2512,4 +2632,8 @@
         }
         if (strncmp(object->label, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(object->stats, "a string", MAX_STRING_LENGTH)) {
             psFree(object);
             exit(EXIT_FAILURE);
Index: /trunk/ippdb/tests/insert.c
===================================================================
--- /trunk/ippdb/tests/insert.c	(revision 15765)
+++ /trunk/ippdb/tests/insert.c	(revision 15766)
@@ -148,20 +148,20 @@
         }
 
-        if (!rawExpInsert(dbh, -64, "a string", "a string", "a string", "0001-01-01T00:00:00Z", "a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 64.64, "a string", 32.32, -16)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!rawImfileInsert(dbh, -64, "a string", "a string", "a string", "0001-01-01T00:00:00Z", "a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 64.64, "a string", -16)) {
+        if (!rawExpInsert(dbh, -64, "a string", "a string", "a string", "0001-01-01T00:00:00Z", "a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, "a string", 32.32, -16)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!rawImfileInsert(dbh, -64, "a string", "a string", "a string", "0001-01-01T00:00:00Z", "a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, "a string", -16)) {
             exit(EXIT_FAILURE);
         }
@@ -763,5 +763,5 @@
         }
 
-        if (!flatcorrRunInsert(dbh, -64, "a string", "a string", "a string", "a string")) {
+        if (!flatcorrRunInsert(dbh, -64, "a string", "a string", "a string", "a string", "a string")) {
             exit(EXIT_FAILURE);
         }
Index: /trunk/ippdb/tests/insertobject.c
===================================================================
--- /trunk/ippdb/tests/insertobject.c	(revision 15765)
+++ /trunk/ippdb/tests/insertobject.c	(revision 15766)
@@ -212,5 +212,5 @@
         }
 
-        object = rawExpRowAlloc(-64, "a string", "a string", "a string", "0001-01-01T00:00:00Z", "a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 64.64, "a string", 32.32, -16);
+        object = rawExpRowAlloc(-64, "a string", "a string", "a string", "0001-01-01T00:00:00Z", "a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, "a string", 32.32, -16);
         if (!object) {
             exit(EXIT_FAILURE);
@@ -234,5 +234,5 @@
         }
 
-        object = rawImfileRowAlloc(-64, "a string", "a string", "a string", "0001-01-01T00:00:00Z", "a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 64.64, "a string", -16);
+        object = rawImfileRowAlloc(-64, "a string", "a string", "a string", "0001-01-01T00:00:00Z", "a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, "a string", -16);
         if (!object) {
             exit(EXIT_FAILURE);
@@ -1114,5 +1114,5 @@
         }
 
-        object = flatcorrRunRowAlloc(-64, "a string", "a string", "a string", "a string");
+        object = flatcorrRunRowAlloc(-64, "a string", "a string", "a string", "a string", "a string");
         if (!object) {
             exit(EXIT_FAILURE);
Index: /trunk/ippdb/tests/metadatafromobject.c
===================================================================
--- /trunk/ippdb/tests/metadatafromobject.c	(revision 15765)
+++ /trunk/ippdb/tests/metadatafromobject.c	(revision 15766)
@@ -387,5 +387,5 @@
         bool            status;
 
-        object = rawExpRowAlloc(-64, "a string", "a string", "a string", "0001-01-01T00:00:00Z", "a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 64.64, "a string", 32.32, -16);
+        object = rawExpRowAlloc(-64, "a string", "a string", "a string", "0001-01-01T00:00:00Z", "a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, "a string", 32.32, -16);
         if (!object) {
             exit(EXIT_FAILURE);
@@ -489,4 +489,64 @@
             exit(EXIT_FAILURE);
         }
+        if (!psMetadataLookupF32(&status, md, "M1_x") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "M1_y") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "M1_z") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "M1_tip") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "M1_tilt") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "M2_x") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "M2_y") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "M2_z") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "M2_tip") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "M2_tilt") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "env_temperature") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "env_humidity") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "env_wind_speed") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "env_wind_dir") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "pon_time") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
         if (!psMetadataLookupF64(&status, md, "user_1") == 64.64) {
             psFree(md);
@@ -529,5 +589,5 @@
         bool            status;
 
-        object = rawImfileRowAlloc(-64, "a string", "a string", "a string", "0001-01-01T00:00:00Z", "a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 64.64, "a string", -16);
+        object = rawImfileRowAlloc(-64, "a string", "a string", "a string", "0001-01-01T00:00:00Z", "a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, "a string", -16);
         if (!object) {
             exit(EXIT_FAILURE);
@@ -631,4 +691,64 @@
             exit(EXIT_FAILURE);
         }
+        if (!psMetadataLookupF32(&status, md, "M1_x") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "M1_y") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "M1_z") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "M1_tip") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "M1_tilt") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "M2_x") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "M2_y") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "M2_z") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "M2_tip") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "M2_tilt") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "env_temperature") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "env_humidity") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "env_wind_speed") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "env_wind_dir") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupF32(&status, md, "pon_time") == 32.32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
         if (!psMetadataLookupF64(&status, md, "user_1") == 64.64) {
             psFree(md);
@@ -2810,5 +2930,5 @@
         bool            status;
 
-        object = flatcorrRunRowAlloc(-64, "a string", "a string", "a string", "a string");
+        object = flatcorrRunRowAlloc(-64, "a string", "a string", "a string", "a string", "a string");
         if (!object) {
             exit(EXIT_FAILURE);
@@ -2838,4 +2958,8 @@
         }
         if (strncmp(psMetadataLookupPtr(&status, md, "label"), "a string", MAX_STRING_LENGTH)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(psMetadataLookupPtr(&status, md, "stats"), "a string", MAX_STRING_LENGTH)) {
             psFree(md);
             exit(EXIT_FAILURE);
Index: /trunk/ippdb/tests/objectfrommetadata.c
===================================================================
--- /trunk/ippdb/tests/objectfrommetadata.c	(revision 15765)
+++ /trunk/ippdb/tests/objectfrommetadata.c	(revision 15766)
@@ -635,4 +635,64 @@
             exit(EXIT_FAILURE);
         }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "M1_x", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "M1_y", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "M1_z", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "M1_tip", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "M1_tilt", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "M2_x", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "M2_y", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "M2_z", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "M2_tip", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "M2_tilt", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "env_temperature", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "env_humidity", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "env_wind_speed", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "env_wind_dir", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "pon_time", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
         if (!psMetadataAddF64(md, PS_LIST_TAIL, "user_1", 0, NULL, 64.64)) {
             psFree(md);
@@ -765,4 +825,64 @@
             exit(EXIT_FAILURE);
         }
+        if (!object->M1_x == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M1_y == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M1_z == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M1_tip == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M1_tilt == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M2_x == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M2_y == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M2_z == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M2_tip == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M2_tilt == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->env_temperature == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->env_humidity == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->env_wind_speed == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->env_wind_dir == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->pon_time == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
         if (!object->user_1 == 64.64) {
             psFree(object);
@@ -895,4 +1015,64 @@
             exit(EXIT_FAILURE);
         }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "M1_x", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "M1_y", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "M1_z", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "M1_tip", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "M1_tilt", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "M2_x", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "M2_y", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "M2_z", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "M2_tip", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "M2_tilt", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "env_temperature", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "env_humidity", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "env_wind_speed", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "env_wind_dir", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF32(md, PS_LIST_TAIL, "pon_time", 0, NULL, 32.32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
         if (!psMetadataAddF64(md, PS_LIST_TAIL, "user_1", 0, NULL, 64.64)) {
             psFree(md);
@@ -1021,4 +1201,64 @@
             exit(EXIT_FAILURE);
         }
+        if (!object->M1_x == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M1_y == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M1_z == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M1_tip == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M1_tilt == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M2_x == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M2_y == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M2_z == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M2_tip == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->M2_tilt == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->env_temperature == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->env_humidity == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->env_wind_speed == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->env_wind_dir == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->pon_time == 32.32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
         if (!object->user_1 == 64.64) {
             psFree(object);
@@ -4426,4 +4666,8 @@
             exit(EXIT_FAILURE);
         }
+        if (!psMetadataAddStr(md, PS_LIST_TAIL, "stats", 0, NULL, "a string")) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
 
         object = flatcorrRunObjectFromMetadata(md);
@@ -4451,4 +4695,8 @@
         }
         if (strncmp(object->label, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(object->stats, "a string", MAX_STRING_LENGTH)) {
             psFree(object);
             exit(EXIT_FAILURE);
