Index: trunk/Ohana/src/dvopsps/include/dvopsps.h
===================================================================
--- trunk/Ohana/src/dvopsps/include/dvopsps.h	(revision 39018)
+++ trunk/Ohana/src/dvopsps/include/dvopsps.h	(revision 39019)
@@ -82,4 +82,7 @@
 MYSQL *mysql_dvopsps_connect              PROTO((MYSQL *mysqlBase));
 
+int    create_manifest_mysql              PROTO((char *basename, MYSQL *mysql));
+int    insert_manifest_mysql              PROTO((char *basename, MYSQL *mysql, int regionID, char *regionName));
+
 int    insert_detections_dvopsps          PROTO((void));
 int    insert_detections_dvopsps_parallel PROTO((SkyTable *sky));
Index: trunk/Ohana/src/dvopsps/src/insert_objects_dvopsps.c
===================================================================
--- trunk/Ohana/src/dvopsps/src/insert_objects_dvopsps.c	(revision 39018)
+++ trunk/Ohana/src/dvopsps/src/insert_objects_dvopsps.c	(revision 39019)
@@ -22,12 +22,6 @@
   myAssert (skylist, "ooops!");
 
-  // pass the skylist to the parallel version, and only launch on relevant hosts 
-  if (PARALLEL && !HOST_ID) {
-    int status = insert_objects_dvopsps_parallel (skylist);
-    return status;
-  }
-
 # if (USE_MYSQL)
-  // NOTE: mysql connection happens here since each dvopsps_client makes its own connection
+  // NOTE: mysql connection happens here so the master can create the manifest table before launching the dvopsps_clients
   MYSQL  mysqlBase;
   MYSQL *mysqlReal = mysql_dvopsps_connect (&mysqlBase);
@@ -39,4 +33,12 @@
   MYSQL *mysqlReal = NULL;
 # endif
+
+  create_manifest_mysql ("objects", mysqlReal);
+
+  // pass the skylist to the parallel version, and only launch on relevant hosts 
+  if (PARALLEL && !HOST_ID) {
+    int status = insert_objects_dvopsps_parallel (skylist);
+    return status;
+  }
 
   // select measurements for each populated catalog
Index: trunk/Ohana/src/dvopsps/src/insert_objects_dvopsps_catalog.c
===================================================================
--- trunk/Ohana/src/dvopsps/src/insert_objects_dvopsps_catalog.c	(revision 39018)
+++ trunk/Ohana/src/dvopsps/src/insert_objects_dvopsps_catalog.c	(revision 39019)
@@ -63,4 +63,6 @@
   free (cleanname);
 
+  insert_manifest_mysql ("objects", mysql, catalog->catID, basename);
+
   MARKTIME("-- inserted "OFF_T_FMT" objects in %f sec, skipped %d without IDs\n", found, dtime, missingID);
   return (TRUE);
@@ -74,5 +76,5 @@
   // MYSQL_RES *result;
 
-  PrintIOBuffer (&buffer, "DROP TABLE %s_cpt\n", basename);
+  PrintIOBuffer (&buffer, "DROP TABLE IF EXISTS %s_cpt\n", basename);
   status = mysql_query(mysql, buffer.buffer); 
   if (status) {
@@ -140,5 +142,5 @@
   bzero (buffer.buffer, buffer.Nalloc);
 
-  PrintIOBuffer (&buffer, "DROP TABLE %s_cps\n", basename);
+  PrintIOBuffer (&buffer, "DROP TABLE IF EXISTS %s_cps\n", basename);
   status = mysql_query(mysql, buffer.buffer); 
   if (status) {
@@ -386,2 +388,52 @@
   return TRUE;
 }
+
+int create_manifest_mysql (char *basename, MYSQL *mysql) {
+
+  int status;
+  IOBuffer buffer;
+  InitIOBuffer (&buffer, 1024);
+
+  // drop an old manifest table
+  PrintIOBuffer (&buffer, "DROP TABLE IF EXISTS dvopsps_insert_%s\n", basename);
+  status = mysql_query(mysql, buffer.buffer);
+  if (status) {
+    fprintf (stderr, "failed to drop dvopsps_insert_%s table:\n", basename);
+    fprintf (stderr, "%s\n", mysql_error(mysql));
+  }
+  buffer.Nbuffer = 0;
+  bzero (buffer.buffer, buffer.Nalloc);
+  
+  // create the manifest table
+  PrintIOBuffer (&buffer, "CREATE TABLE dvopsps_insert_%s ( REGION_ID INT, REGION_NAME CHAR(18) )\n", basename);
+  status = mysql_query(mysql, buffer.buffer);
+  if (status) {
+    fprintf (stderr, "failed to create dvopsps_insert_%s table:\n", basename);
+    fprintf (stderr, "%s\n", mysql_error(mysql));
+  }
+  buffer.Nbuffer = 0;
+  bzero (buffer.buffer, buffer.Nalloc);
+
+  FreeIOBuffer (&buffer);
+  return TRUE;
+}
+
+int insert_manifest_mysql (char *basename, MYSQL *mysql, int regionID, char *regionName) {
+
+  int status;
+  IOBuffer buffer;
+  InitIOBuffer (&buffer, 1024);
+
+  // drop an old manifest table
+  PrintIOBuffer (&buffer, "INSERT INTO dvopsps_insert_%s ( REGION_ID, REGION_NAME ) VALUES (%d, '%s')\n", basename, regionID, regionName);
+  status = mysql_query(mysql, buffer.buffer);
+  if (status) {
+    fprintf (stderr, "failed to insert into dvopsps_insert_%s table:\n", basename);
+    fprintf (stderr, "%s\n", mysql_error(mysql));
+  }
+  buffer.Nbuffer = 0;
+  bzero (buffer.buffer, buffer.Nalloc);
+  
+  FreeIOBuffer (&buffer);
+  return TRUE;
+}
