Index: /trunk/ippTools/src/regtool.c
===================================================================
--- /trunk/ippTools/src/regtool.c	(revision 8036)
+++ /trunk/ippTools/src/regtool.c	(revision 8037)
@@ -13,4 +13,5 @@
 static p1PendingExpRow *newToP1PendingExp(newExpRow *newExp);
 static p2PendingExpRow *newToP2PendingExp(newExpRow *newExp);
+static p2PendingImfileRow *newImfileToP2PendingImfile(newImfileRow *newImfile);
 
 # define MODECASE(caseName, func) \
@@ -88,5 +89,5 @@
     // insert 'new' rawScience & detrendframes
     if (psArrayLength(new) > 0) {
-        for (long i = 0; i < new->n; i++) {
+        for (long i = 0; i < psArrayLength(new); i++) {
             newFrame *newFrame = new->data[i];
             if (detrend) {
@@ -105,22 +106,52 @@
                 }
                 psFree(frame);
-            } else {
-                // it's a science frame
-                rawScienceFrame *frame = newToRawScienceFrame(newFrame); 
-                if (!frame) {
-                    psError(PS_ERR_UNKNOWN, false, "failed to convert new frame into a science frame");
+                continue;
+            } 
+
+            // else
+            // it's a science frame
+            // insert into into rawScienceExp
+            rawScienceFrame *frame = newToRawScienceFrame(newFrame); 
+            if (!frame) {
+                psError(PS_ERR_UNKNOWN, false, "failed to convert new frame into a science frame");
+                psFree(new);
+                return false;
+            }
+            if (!rawScienceFrameInsert(config, frame)) {
+                psError(PS_ERR_UNKNOWN, false, "failed to insert frame into the database");
+                psFree(frame);
+                psFree(new);
+                return false;
+            }
+            psFree(frame);
+
+            // insert into into p2PendingExp
+            p2PendingExpRow *exp = newToP2PendingExp(newFrame->exposure);
+            if (!exp) {
+                psError(PS_ERR_UNKNOWN, false, "failed to convert newExp into a p2PendingExp");
+                psFree(new);
+                return false;
+            }
+            if (!p2PendingExpInsertObject(config->dbh, exp)) {
+                psError(PS_ERR_UNKNOWN, false, "failed to insert p2PendingExp into the database");
+                psFree(exp);
+                psFree(new);
+                return false;
+            }
+            psFree(exp);
+
+            // insert into into p2PendingImfiles
+            for (long i = 0; i < psArrayLength(newFrame->images); i++) {
+                p2PendingImfileRow *imfile = newImfileToP2PendingImfile(newFrame->images->data[i]);
+                if (!p2PendingImfileInsertObject(config->dbh, imfile)) {
+                psError(PS_ERR_UNKNOWN, false, "failed to insert p2PendingImfile into the database");
+                    psFree(imfile);
                     psFree(new);
                     return false;
                 }
-                if (!rawScienceFrameInsert(config, frame)) {
-                    psError(PS_ERR_UNKNOWN, false, "failed to insert frame into the database");
-                    psFree(frame);
-                    psFree(new);
-                    return false;
-                }
-                psFree(frame);
             }
         }
     }
+
     psFree(new);
 
@@ -224,2 +255,15 @@
     );
 }
+
+static p2PendingImfileRow *newImfileToP2PendingImfile(newImfileRow *newImfile)
+{
+    return p2PendingImfileRowAlloc(
+        newImfile->exp_id,
+        newImfile->class_id,
+        newImfile->uri,
+        "my stats",
+        "my recipe",
+        0xff, // XXX calc version number
+        0xff // XXX calc version number
+    );
+}
