Index: /trunk/ippTools/src/pztool.c
===================================================================
--- /trunk/ippTools/src/pztool.c	(revision 7968)
+++ /trunk/ippTools/src/pztool.c	(revision 7969)
@@ -126,5 +126,11 @@
     }
 
-    // XXX start transaction
+    // start a transaction so we don't end up with entries in newImfile that
+    // haven't been removed from pzPendingImfile
+    if (!psDBTransaction(config->dbh)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        psFree(pending);
+        return false;
+    }
 
     for (long i = 0; i < pending->n; i++) {
@@ -140,15 +146,24 @@
         if (!newImfileInsertObject(config->dbh, newImfile)) {
             psError(PS_ERR_UNKNOWN, false, "dbh access failed");
+            psFree(newImfile);
             return false;
         }
+
+        psFree(newImfile);
     }
 
     if (pzPendingImfileDeleteRowObjects(config->dbh, pending, MAX_ROWS)
         < 0) {
-            psError(PS_ERR_UNKNOWN, false, "dbh access failed");
-            return false;
-    }
-
-    // XXX commit transaction
+        psError(PS_ERR_UNKNOWN, false, "dbh access failed");
+        psFree(pending);
+        return false;
+    }
+    psFree(pending);
+
+    // point of no return 
+    if (!psDBCommit(config->dbh)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        return false;
+    }
 
     // check for completed exps
