Index: trunk/glueforge/templates/psdb/alloc.tt
===================================================================
--- trunk/glueforge/templates/psdb/alloc.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/alloc.tt	(revision 5907)
@@ -1,9 +1,9 @@
 [% USE format -%]
 [% indented = format('%-15s %s') -%]
-static void [% object_name %]Free([% object_name %] *object);
+static void [% table.object_name %]Free([% table.object_name %] *object);
 
-[% object_name %] *[% object_name %]Alloc(
+[% table.object_name %] *[% table.object_name %]Alloc(
 [%- SET i = 0 -%]
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF i == 0 %][% i = 1 %][% ELSE %], [% END -%]
 [% IF item.type == "STR" -%]
@@ -15,10 +15,10 @@
 )
 {
-    [% indented(object_name, "*object") %];
+    [% indented(table.object_name, "*object") %];
 
-    object = psAlloc(sizeof([% object_name %]));
-    psMemSetDeallocator(object, (psFreeFcn)[% object_name %]Free);
+    object = psAlloc(sizeof([% table.object_name %]));
+    psMemSetDeallocator(object, (psFreeFunc)[% table.object_name %]Free);
 
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF item.type == "STR" -%]
     object->[% item.name %] = psStringCopy([% item.name %]);
@@ -31,7 +31,7 @@
 }
 
-static void [% object_name %]Free([% object_name %] *object)
+static void [% table.object_name %]Free([% table.object_name %] *object)
 {
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF item.type == "STR" -%]
     psFree(object->[% item.name %]);
Index: trunk/glueforge/templates/psdb/alloc_at.tt
===================================================================
--- trunk/glueforge/templates/psdb/alloc_at.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/alloc_at.tt	(revision 5907)
@@ -1,4 +1,4 @@
-AT_SETUP([[% object_name %]Alloc()])
-AT_KEYWORDS([[% object_name %]Alloc])
+AT_SETUP([[% table.object_name %]Alloc()])
+AT_KEYWORDS([[% table.object_name %]Alloc])
 
 AT_CHECK([alloc])
Index: trunk/glueforge/templates/psdb/alloc_c.tt
===================================================================
--- trunk/glueforge/templates/psdb/alloc_c.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/alloc_c.tt	(revision 5907)
@@ -9,9 +9,9 @@
 int main ()
 {
-    [% indented(object_name, "*object") %];
+    [% indented(table.object_name, "*object") %];
 
-    object = [% object_name %]Alloc(
+    object = [% table.object_name %]Alloc(
 [%- SET i = 0 -%]
-[%- FOREACH item = columns -%]
+[%- FOREACH item = table.columns -%]
     [%- IF i == 0 -%][%- i = 1 -%][%- ELSE -%], [% END -%] [%- item.test -%]
 [%- END -%]
@@ -22,5 +22,5 @@
     }
 
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF item.type == "S32" or item.type == "F32" or item.type == "F64" or item.type == "BOOL" -%]
     if (!object->[% item.name %] == [% item.test %]) {
Index: trunk/glueforge/templates/psdb/alloc_h.tt
===================================================================
--- trunk/glueforge/templates/psdb/alloc_h.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/alloc_h.tt	(revision 5907)
@@ -1,12 +1,12 @@
 [% USE format -%]
 [% indented = format('%-15s %s') -%]
-/** Creates a new [% object_name %] object
+/** Creates a new [% table.object_name %] object
  *
- *  @return A new [% object_name %] object or NULL on failure.
+ *  @return A new [% table.object_name %] object or NULL on failure.
  */
 
-[% object_name %] *[% object_name %]Alloc(
+[% table.object_name %] *[% table.object_name %]Alloc(
 [%- SET i = 0 -%]
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF i == 0 %][% i = 1 %][% ELSE %],[% END %]
 [% IF item.type == "STR" -%]
Index: trunk/glueforge/templates/psdb/cleanup.tt
===================================================================
--- trunk/glueforge/templates/psdb/cleanup.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/cleanup.tt	(revision 5907)
@@ -1,3 +1,3 @@
-void [% namespace %]Cleanup(psDB *dbh)
+void [% table.namespace %]Cleanup(psDB *dbh)
 {
     psDBCleanup(dbh);
Index: trunk/glueforge/templates/psdb/cleanup_at.tt
===================================================================
--- trunk/glueforge/templates/psdb/cleanup_at.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/cleanup_at.tt	(revision 5907)
@@ -1,4 +1,4 @@
-AT_SETUP([[% namespace %]Cleanup()])
-AT_KEYWORDS([[% namespace %]Cleanup])
+AT_SETUP([[% table.namespace %]Cleanup()])
+AT_KEYWORDS([[% table.namespace %]Cleanup])
 
 AT_CHECK([cleanup])
Index: trunk/glueforge/templates/psdb/cleanup_c.tt
===================================================================
--- trunk/glueforge/templates/psdb/cleanup_c.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/cleanup_c.tt	(revision 5907)
@@ -12,5 +12,5 @@
     }
 
-    [% namespace %]Cleanup(dbh);
+    [% table.namespace %]Cleanup(dbh);
 
     exit(EXIT_SUCCESS);
Index: trunk/glueforge/templates/psdb/cleanup_h.tt
===================================================================
--- trunk/glueforge/templates/psdb/cleanup_h.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/cleanup_h.tt	(revision 5907)
@@ -2,5 +2,5 @@
  */
 
-void [% namespace %]Cleanup(
+void [% table.namespace %]Cleanup(
     psDB            *dbh                ///< Database handle
 );
Index: trunk/glueforge/templates/psdb/code.tt
===================================================================
--- trunk/glueforge/templates/psdb/code.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/code.tt	(revision 5907)
@@ -1,8 +1,11 @@
-#include "[% namespace %]db.h"
+#include "[% pkg_name %].h"
 
-#define [% namespace FILTER upper %]_TABLE_NAME "[% table_name %]"
-#define [% namespace FILTER upper %]_INDEX_NAME "position"
+[% FOREACH table = tables -%]
+#define [% table.namespace FILTER upper %]_TABLE_NAME "[% table.name %]"
+#define [% table.namespace FILTER upper %]_INDEX_NAME "position"
+[% END -%]
 #define MAX_STRING_LENGTH 1024
 
+[% FOREACH table = tables -%]
 [% INCLUDE alloc.tt %]
 [% INCLUDE init.tt %]
@@ -19,2 +22,3 @@
 [% INCLUDE metadatafromobject.tt %]
 [% INCLUDE objectfrommetadata.tt -%]
+[% END -%]
Index: trunk/glueforge/templates/psdb/createtable.tt
===================================================================
--- trunk/glueforge/templates/psdb/createtable.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/createtable.tt	(revision 5907)
@@ -1,3 +1,3 @@
-bool [% namespace %]CreateTable(psDB *dbh)
+bool [% table.namespace %]CreateTable(psDB *dbh)
 {
     psMetadata          *md;
@@ -5,6 +5,6 @@
 
     md = psMetadataAlloc();
-    psMetadataAdd(md, PS_LIST_TAIL, [% namespace FILTER upper %]_INDEX_NAME, PS_META_S32, "AUTO_INCREMENT", 0.0);
-[% FOREACH item = columns -%]
+    psMetadataAdd(md, PS_LIST_TAIL, [% table.namespace FILTER upper %]_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0);
+[% FOREACH item = table.columns -%]
 [% IF item.comment;
     SET item.comment = "\"$item.comment\"";
@@ -14,7 +14,7 @@
 -%]
 [% IF item.type == "S32" or item.type == "F32" or item.type == "F64" -%]
-    if (!psMetadataAdd[% item.type %](md, PS_LIST_TAIL, "[% item.name %]", [% item.comment %], [% item.value %])) {
+    if (!psMetadataAdd[% item.type %](md, PS_LIST_TAIL, "[% item.name %]", 0, [% item.comment %], [% item.value %])) {
 [% ELSIF item.type == "STR" -%]
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "[% item.name %]", [% item.comment %], "[% item.value %]")) {
+    if (!psMetadataAddStr(md, PS_LIST_TAIL, "[% item.name %]", 0, [% item.comment %], "[% item.value %]")) {
 [% ELSIF item.type == "BOOL" -%]
 [% IF item.value == 1;
@@ -24,5 +24,5 @@
 END;
 -%]
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "[% item.name %]", PS_META_BOOL, [% item.comment %], [% item.value %])) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "[% item.name %]", PS_DATA_BOOL, [% item.comment %], [% item.value %])) {
 [% END -%]
         psError(PS_ERR_UNKNOWN, false, "failed to add item [% item.name %]");
@@ -32,5 +32,5 @@
 [% END -%]
 
-    status = psDBCreateTable(dbh, [% namespace FILTER upper %]_TABLE_NAME, md);
+    status = psDBCreateTable(dbh, [% table.namespace FILTER upper %]_TABLE_NAME, md);
 
     psFree(md);
Index: trunk/glueforge/templates/psdb/createtable_at.tt
===================================================================
--- trunk/glueforge/templates/psdb/createtable_at.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/createtable_at.tt	(revision 5907)
@@ -1,4 +1,4 @@
-AT_SETUP([[% namespace %]CreateTable()])
-AT_KEYWORDS([[% namespace %]CreateTable])
+AT_SETUP([[% table.namespace %]CreateTable()])
+AT_KEYWORDS([[% table.namespace %]CreateTable])
 
 # make sure the table is not there.
Index: trunk/glueforge/templates/psdb/createtable_c.tt
===================================================================
--- trunk/glueforge/templates/psdb/createtable_c.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/createtable_c.tt	(revision 5907)
@@ -12,5 +12,5 @@
     }
 
-    if(![% namespace %]CreateTable(dbh)) {
+    if(![% table.namespace %]CreateTable(dbh)) {
         exit(EXIT_FAILURE);
     }
Index: trunk/glueforge/templates/psdb/createtable_h.tt
===================================================================
--- trunk/glueforge/templates/psdb/createtable_h.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/createtable_h.tt	(revision 5907)
@@ -1,8 +1,8 @@
-/** Creates a new [% table_name %] table
+/** Creates a new [% table.name %] table
  *
  * @return true on success
  */
 
-bool [% namespace %]CreateTable(
+bool [% table.namespace %]CreateTable(
     psDB            *dbh                ///< Database handle
 );
Index: trunk/glueforge/templates/psdb/dbcleanup_c.tt
===================================================================
--- trunk/glueforge/templates/psdb/dbcleanup_c.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/dbcleanup_c.tt	(revision 5907)
@@ -11,5 +11,5 @@
     }
 
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS [% table_name %]");
+    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS [% table.name %]");
 
     psDBCleanup(dbh);
Index: trunk/glueforge/templates/psdb/dbsetup_c.tt
===================================================================
--- trunk/glueforge/templates/psdb/dbsetup_c.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/dbsetup_c.tt	(revision 5907)
@@ -13,6 +13,6 @@
 
     // remove the table if it already exists
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS [% table_name %]");
-    [% namespace %]CreateTable(dbh);
+    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS [% table.name %]");
+    [% table.namespace %]CreateTable(dbh);
 
     psDBCleanup(dbh);
Index: trunk/glueforge/templates/psdb/droptable.tt
===================================================================
--- trunk/glueforge/templates/psdb/droptable.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/droptable.tt	(revision 5907)
@@ -1,4 +1,4 @@
-bool [% namespace %]DropTable(psDB *dbh)
+bool [% table.namespace %]DropTable(psDB *dbh)
 {
-    return psDBDropTable(dbh, [% namespace FILTER upper %]_TABLE_NAME);
+    return psDBDropTable(dbh, [% table.namespace FILTER upper %]_TABLE_NAME);
 }
Index: trunk/glueforge/templates/psdb/droptable_at.tt
===================================================================
--- trunk/glueforge/templates/psdb/droptable_at.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/droptable_at.tt	(revision 5907)
@@ -1,4 +1,4 @@
-AT_SETUP([[% namespace %]DropTable()])
-AT_KEYWORDS([[% namespace %]DropTable])
+AT_SETUP([[% table.namespace %]DropTable()])
+AT_KEYWORDS([[% table.namespace %]DropTable])
 
 # make sure the table is not there.
Index: trunk/glueforge/templates/psdb/droptable_c.tt
===================================================================
--- trunk/glueforge/templates/psdb/droptable_c.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/droptable_c.tt	(revision 5907)
@@ -12,5 +12,5 @@
     }
 
-    if (![% namespace %]DropTable(dbh)) {
+    if (![% table.namespace %]DropTable(dbh)) {
         exit(EXIT_FAILURE);
     }
Index: trunk/glueforge/templates/psdb/droptable_h.tt
===================================================================
--- trunk/glueforge/templates/psdb/droptable_h.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/droptable_h.tt	(revision 5907)
@@ -1,8 +1,8 @@
-/** Deletes a [% table_name %] table
+/** Deletes a [% table.name %] table
  *
  * @return true on success
  */
 
-bool [% namespace %]DropTable(
+bool [% table.namespace %]DropTable(
     psDB            *dbh                ///< Database handle
 );
Index: trunk/glueforge/templates/psdb/header.tt
===================================================================
--- trunk/glueforge/templates/psdb/header.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/header.tt	(revision 5907)
@@ -1,4 +1,4 @@
-#ifndef [% namespace FILTER upper %]_DB_H
-#define [% namespace FILTER upper %]_DB_H 1
+#ifndef [% pkg_name FILTER upper %]_H
+#define [% pkg_name FILTER upper %]_H 1
 
 #include <pslib.h>
@@ -11,4 +11,5 @@
 /// @{
 
+[% FOREACH table = tables -%]
 [% INCLUDE object_h.tt %]
 [% INCLUDE alloc_h.tt %]
@@ -26,4 +27,5 @@
 [% INCLUDE metadatafromobject_h.tt %]
 [% INCLUDE objectfrommetadata_h.tt -%]
+[% END -%]
 
 /// @}
@@ -33,3 +35,3 @@
 #endif
 
-#endif // [% namespace FILTER upper %]_DB_H
+#endif // [% table.namespace FILTER upper %]_DB_H
Index: trunk/glueforge/templates/psdb/init.tt
===================================================================
--- trunk/glueforge/templates/psdb/init.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/init.tt	(revision 5907)
@@ -1,3 +1,3 @@
-psDB *[% namespace %]Init(const char *host, const char *user, const char *passwd, const char *dbname)
+psDB *[% table.namespace %]Init(const char *host, const char *user, const char *passwd, const char *dbname)
 {
     return psDBInit(host, user, passwd, dbname);
Index: trunk/glueforge/templates/psdb/init_at.tt
===================================================================
--- trunk/glueforge/templates/psdb/init_at.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/init_at.tt	(revision 5907)
@@ -1,4 +1,4 @@
-AT_SETUP([[% namespace %]Init()])
-AT_KEYWORDS([[% namespace %]Init])
+AT_SETUP([[% table.namespace %]Init()])
+AT_KEYWORDS([[% table.namespace %]Init])
 
 AT_CHECK([init])
Index: trunk/glueforge/templates/psdb/init_c.tt
===================================================================
--- trunk/glueforge/templates/psdb/init_c.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/init_c.tt	(revision 5907)
@@ -7,5 +7,5 @@
     psDB            *dbh;
 
-    dbh = [% namespace %]Init("localhost", "test", NULL, "test");
+    dbh = [% table.namespace %]Init("localhost", "test", NULL, "test");
     if (!dbh) {
         exit(EXIT_FAILURE);
Index: trunk/glueforge/templates/psdb/init_h.tt
===================================================================
--- trunk/glueforge/templates/psdb/init_h.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/init_h.tt	(revision 5907)
@@ -5,8 +5,8 @@
  */
 
-psDB *[% namespace %]Init(
+psDB *[% table.namespace %]Init(
     const char      *host,              ///< Database server hostname
     const char      *user,              ///< Database username
     const char      *passwd,            ///< Database password
-    const char      *dbname             ///< Database namespace
+    const char      *dbname             ///< Database table.namespace
 );
Index: trunk/glueforge/templates/psdb/insert.tt
===================================================================
--- trunk/glueforge/templates/psdb/insert.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/insert.tt	(revision 5907)
@@ -1,5 +1,5 @@
-bool [% namespace %]Insert(psDB * dbh,
+bool [% table.namespace %]Insert(psDB * dbh,
 [%- SET i = 0 -%]
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF i == 0 %][% i = 1 %] [% ELSE %], [% END -%]
 [% IF item.type == "STR" -%]
@@ -15,11 +15,11 @@
 
     md = psMetadataAlloc();
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF item.type == "S32" or item.type == "F32" or item.type == "F64" -%]
-    if (!psMetadataAdd[% item.type %](md, PS_LIST_TAIL, "[% item.name %]", NULL, [% item.name %])) {
+    if (!psMetadataAdd[% item.type %](md, PS_LIST_TAIL, "[% item.name %]", 0, NULL, [% item.name %])) {
 [% ELSIF item.type == "STR" -%]
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "[% item.name %]", NULL, psStringCopy([% item.name %]))) {
+    if (!psMetadataAddStr(md, PS_LIST_TAIL, "[% item.name %]", 0, NULL, psStringCopy([% item.name %]))) {
 [% ELSIF item.type == "BOOL" -%]
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "[% item.name %]", PS_META_BOOL, NULL, [% item.name %])) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "[% item.name %]", PS_DATA_BOOL, NULL, [% item.name %])) {
 [% END -%]
         psError(PS_ERR_UNKNOWN, false, "failed to add item [% item.name %]");
@@ -29,5 +29,5 @@
 [% END -%]
 
-    status = psDBInsertOneRow(dbh, [% namespace FILTER upper %]_TABLE_NAME, md);
+    status = psDBInsertOneRow(dbh, [% table.namespace FILTER upper %]_TABLE_NAME, md);
     psFree(md);
 
Index: trunk/glueforge/templates/psdb/insert_at.tt
===================================================================
--- trunk/glueforge/templates/psdb/insert_at.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/insert_at.tt	(revision 5907)
@@ -1,4 +1,4 @@
-AT_SETUP([[% namespace %]Insert()])
-AT_KEYWORDS([[% namespace %]Insert])
+AT_SETUP([[% table.namespace %]Insert()])
+AT_KEYWORDS([[% table.namespace %]Insert])
 
 AT_CHECK([dbsetup])
Index: trunk/glueforge/templates/psdb/insert_c.tt
===================================================================
--- trunk/glueforge/templates/psdb/insert_c.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/insert_c.tt	(revision 5907)
@@ -14,7 +14,7 @@
     }
 
-    if (![% namespace %]Insert(dbh, 
+    if (![% table.namespace %]Insert(dbh, 
 [%- SET i = 0 -%]
-[%- FOREACH item = columns -%]
+[%- FOREACH item = table.columns -%]
 [%- IF i == 0 -%][%- i = 1 -%][%- ELSE -%], [% END -%] [%- item.test -%]
 [%- END -%]
Index: trunk/glueforge/templates/psdb/insert_h.tt
===================================================================
--- trunk/glueforge/templates/psdb/insert_h.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/insert_h.tt	(revision 5907)
@@ -8,8 +8,8 @@
  */
 
-bool [% namespace %]Insert(
+bool [% table.namespace %]Insert(
     psDB            *dbh,               ///< Database handle
 [%- SET i = 0 -%]
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF i == 0 %][% i = 1 %][% ELSE %],[% END %]
 [% IF item.type == "STR" -%]
Index: trunk/glueforge/templates/psdb/insertfits.tt
===================================================================
--- trunk/glueforge/templates/psdb/insertfits.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/insertfits.tt	(revision 5907)
@@ -1,9 +1,9 @@
-bool [% namespace %]InsertFits(psDB *dbh, const psFits *fits)
+bool [% table.namespace %]InsertFits(psDB *dbh, const psFits *fits)
 {
     psArray         *rowSet;
 
-    // move to (the first?) extension named  [% namespace FILTER upper %]_TABLE_NAME
-    if (!psFitsMoveExtName(fits, [% namespace FILTER upper %]_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", [% namespace FILTER upper %]_TABLE_NAME);
+    // move to (the first?) extension named  [% table.namespace FILTER upper %]_TABLE_NAME
+    if (!psFitsMoveExtName(fits, [% table.namespace FILTER upper %]_TABLE_NAME)) {
+        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", [% table.namespace FILTER upper %]_TABLE_NAME);
         return false;
     }
@@ -23,5 +23,5 @@
     }
 
-    if (!psDBInsertRows(dbh, [% namespace FILTER upper %]_TABLE_NAME, rowSet)) {
+    if (!psDBInsertRows(dbh, [% table.namespace FILTER upper %]_TABLE_NAME, rowSet)) {
         psError(PS_ERR_UNKNOWN, false, "databse insert failed");
         psFree(rowSet);
Index: trunk/glueforge/templates/psdb/insertfits_at.tt
===================================================================
--- trunk/glueforge/templates/psdb/insertfits_at.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/insertfits_at.tt	(revision 5907)
@@ -1,4 +1,4 @@
-AT_SETUP([[% namespace %]InsertFits()])
-AT_KEYWORDS([[% namespace %]InsertFits])
+AT_SETUP([[% table.namespace %]InsertFits()])
+AT_KEYWORDS([[% table.namespace %]InsertFits])
 
 AT_CHECK([dbsetup])
Index: trunk/glueforge/templates/psdb/insertfits_c.tt
===================================================================
--- trunk/glueforge/templates/psdb/insertfits_c.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/insertfits_c.tt	(revision 5907)
@@ -19,5 +19,5 @@
     }
 
-    if (![% namespace %]InsertFits(dbh, fits)) {
+    if (![% table.namespace %]InsertFits(dbh, fits)) {
         exit(EXIT_FAILURE);
     }
Index: trunk/glueforge/templates/psdb/insertfits_h.tt
===================================================================
--- trunk/glueforge/templates/psdb/insertfits_h.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/insertfits_h.tt	(revision 5907)
@@ -1,3 +1,3 @@
-/** Insert data from a binary FITS table [% object_name %] into the database
+/** Insert data from a binary FITS table [% table.object_name %] into the database
  *
  * This function expects a psFits object with a FITS table as the first
@@ -9,5 +9,5 @@
  */
 
-bool [% namespace %]InsertFits(
+bool [% table.namespace %]InsertFits(
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
Index: trunk/glueforge/templates/psdb/insertobject.tt
===================================================================
--- trunk/glueforge/templates/psdb/insertobject.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/insertobject.tt	(revision 5907)
@@ -1,7 +1,7 @@
-bool [% namespace %]InsertObject(psDB *dbh, [% object_name %] *object)
+bool [% table.namespace %]InsertObject(psDB *dbh, [% table.object_name %] *object)
 {
-    return [% namespace %]Insert(dbh,
+    return [% table.namespace %]Insert(dbh,
 [%- SET i = 0 -%]
-[%- FOREACH item = columns -%]
+[%- FOREACH item = table.columns -%]
 [%- IF i == 0 -%][%- i = 1 -%] [% ELSE %], [% END -%]
 object->[% item.name -%]
Index: trunk/glueforge/templates/psdb/insertobject_at.tt
===================================================================
--- trunk/glueforge/templates/psdb/insertobject_at.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/insertobject_at.tt	(revision 5907)
@@ -1,4 +1,4 @@
-AT_SETUP([[% namespace %]InsertObject()])
-AT_KEYWORDS([[% namespace %]InsertObject])
+AT_SETUP([[% table.namespace %]InsertObject()])
+AT_KEYWORDS([[% table.namespace %]InsertObject])
 
 AT_CHECK([dbsetup])
Index: trunk/glueforge/templates/psdb/insertobject_c.tt
===================================================================
--- trunk/glueforge/templates/psdb/insertobject_c.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/insertobject_c.tt	(revision 5907)
@@ -8,5 +8,5 @@
 {
     psDB            *dbh;
-    [% indented(object_name, "*object") %];
+    [% indented(table.object_name, "*object") %];
 
     dbh = psDBInit("localhost", "test", NULL, "test");
@@ -15,7 +15,7 @@
     }
 
-    object = [% object_name %]Alloc(
+    object = [% table.object_name %]Alloc(
 [%- SET i = 0 -%]
-[%- FOREACH item = columns -%]
+[%- FOREACH item = table.columns -%]
     [%- IF i == 0 -%][%- i = 1 -%][%- ELSE -%], [% END -%] [%- item.test -%]
 [%- END -%]
@@ -25,5 +25,5 @@
     }
 
-    if (![% namespace %]InsertObject(dbh, object)) {
+    if (![% table.namespace %]InsertObject(dbh, object)) {
         exit(EXIT_FAILURE);
     }
Index: trunk/glueforge/templates/psdb/insertobject_h.tt
===================================================================
--- trunk/glueforge/templates/psdb/insertobject_h.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/insertobject_h.tt	(revision 5907)
@@ -1,5 +1,5 @@
 [% USE format -%]
 [% indented = format('%-15s %-20s') -%]
-/** Insert a single [% object_name %] object into a table
+/** Insert a single [% table.object_name %] object into a table
  *
  * This function constructs and inserts a single row based on it's parameters.
@@ -8,6 +8,6 @@
  */
 
-bool [% namespace %]InsertObject(
+bool [% table.namespace %]InsertObject(
     psDB            *dbh,               ///< Database handle
-    [% indented(object_name, "*object") %]///< [% object_name %] object
+    [% indented(table.object_name, "*object") %]///< [% table.object_name %] object
 );
Index: trunk/glueforge/templates/psdb/makefile.tt
===================================================================
--- trunk/glueforge/templates/psdb/makefile.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/makefile.tt	(revision 5907)
@@ -6,10 +6,10 @@
 
 
-objects=[% namespace %]db.o
+objects=[% table.namespace %]db.o
 
-all: lib[% namespace %]db.so
+all: lib[% table.namespace %]db.so
 
-lib[% namespace %]db.so: $(objects)
-	$(CC) $(CFLAGS) -shared -o lib[% namespace %]db.so $(objects) $(LIBS)
+lib[% table.namespace %]db.so: $(objects)
+	$(CC) $(CFLAGS) -shared -o lib[% table.namespace %]db.so $(objects) $(LIBS)
 
 $(objects): %.o : %.c
Index: trunk/glueforge/templates/psdb/metadatafromobject.tt
===================================================================
--- trunk/glueforge/templates/psdb/metadatafromobject.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/metadatafromobject.tt	(revision 5907)
@@ -1,14 +1,14 @@
-psMetadata *[% namespace %]MetadataFromObject(const [% object_name %] *object)
+psMetadata *[% table.namespace %]MetadataFromObject(const [% table.object_name %] *object)
 {
     psMetadata      *md;
 
     md = psMetadataAlloc();
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF item.type == "S32" or item.type == "F32" or item.type == "F64" -%]
-    if (!psMetadataAdd[% item.type %](md, PS_LIST_TAIL, "[% item.name %]", NULL, object->[% item.name %])) {
+    if (!psMetadataAdd[% item.type %](md, PS_LIST_TAIL, "[% item.name %]", 0, NULL, object->[% item.name %])) {
 [% ELSIF item.type == "STR" -%]
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "[% item.name %]", NULL, psStringCopy(object->[% item.name %]))) {
+    if (!psMetadataAddStr(md, PS_LIST_TAIL, "[% item.name %]", 0, NULL, psStringCopy(object->[% item.name %]))) {
 [% ELSIF item.type == "BOOL" -%]
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "[% item.name %]", PS_META_BOOL, NULL, object->[% item.name %])) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "[% item.name %]", PS_DATA_BOOL, NULL, object->[% item.name %])) {
 [% END -%]
         psError(PS_ERR_UNKNOWN, false, "failed to add item [% item.name %]");
Index: trunk/glueforge/templates/psdb/metadatafromobject_at.tt
===================================================================
--- trunk/glueforge/templates/psdb/metadatafromobject_at.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/metadatafromobject_at.tt	(revision 5907)
@@ -1,4 +1,4 @@
-AT_SETUP([[% namespace %]MetadataFromObject()])
-AT_KEYWORDS([[% namespace %]MetadataFromObject])
+AT_SETUP([[% table.namespace %]MetadataFromObject()])
+AT_KEYWORDS([[% table.namespace %]MetadataFromObject])
 
 AT_CHECK([metadatafromobject])
Index: trunk/glueforge/templates/psdb/metadatafromobject_c.tt
===================================================================
--- trunk/glueforge/templates/psdb/metadatafromobject_c.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/metadatafromobject_c.tt	(revision 5907)
@@ -11,10 +11,10 @@
 {
     psMetadata      *md;
-    [% indented(object_name, "*object") %];
+    [% indented(table.object_name, "*object") %];
     bool            status;
 
-    object = [% object_name %]Alloc(
+    object = [% table.object_name %]Alloc(
 [%- SET i = 0 -%]
-[%- FOREACH item = columns -%]
+[%- FOREACH item = table.columns -%]
     [%- IF i == 0 -%][%- i = 1 -%][%- ELSE -%], [% END -%] [%- item.test -%]
 [%- END -%]
@@ -24,5 +24,5 @@
     }
 
-    md = [% namespace %]MetadataFromObject(object);
+    md = [% table.namespace %]MetadataFromObject(object);
     if (!md) {
         exit(EXIT_FAILURE);
@@ -31,5 +31,5 @@
     psFree(object);
 
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF item.type == "S32" or item.type == "F32" or item.type == "F64" -%]
     if (!psMetadataLookup[% item.type %](&status, md, "[% item.name %]") == [% item.test %]) {
Index: trunk/glueforge/templates/psdb/metadatafromobject_h.tt
===================================================================
--- trunk/glueforge/templates/psdb/metadatafromobject_h.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/metadatafromobject_h.tt	(revision 5907)
@@ -1,10 +1,10 @@
 [% USE format -%]
 [% indented = format('%-15s %-20s') -%]
-/** Convert a [% object_name %] into an equivalent psMetadata
+/** Convert a [% table.object_name %] into an equivalent psMetadata
  *
  * @return A psMetadata pointer or NULL on error
  */
 
-psMetadata *[% namespace %]MetadataFromObject(
-    [% indented("const $object_name", "*object") %]///< fooRow to convert into a psMetadata
+psMetadata *[% table.namespace %]MetadataFromObject(
+    [% indented("const $table.object_name", "*object") %]///< fooRow to convert into a psMetadata
 );
Index: trunk/glueforge/templates/psdb/object_h.tt
===================================================================
--- trunk/glueforge/templates/psdb/object_h.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/object_h.tt	(revision 5907)
@@ -1,12 +1,12 @@
 [% USE format -%]
 [% indented = format('%-15s %s') -%]
-/** [% object_name %] data structure
+/** [% table.object_name %] data structure
  *
- * Structure for representing a single row of [% table_name %] table data.
+ * Structure for representing a single row of [% table.name %] table data.
  */
 
 typedef struct {
 [% SET i = 0 -%]
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF item.type == "STR" -%]
     [% indented("char", "*$item.name") %];
@@ -15,3 +15,3 @@
 [% END -%]
 [% END -%]
-} [% object_name %];
+} [% table.object_name %];
Index: trunk/glueforge/templates/psdb/objectfrommetadata.tt
===================================================================
--- trunk/glueforge/templates/psdb/objectfrommetadata.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/objectfrommetadata.tt	(revision 5907)
@@ -1,8 +1,8 @@
 [% USE format -%]
 [% indented = format('%-15s %s') -%]
-[% object_name %] *[% namespace %]ObjectFromMetadata(psMetadata *md)
+[% table.object_name %] *[% table.namespace %]ObjectFromMetadata(psMetadata *md)
 {
     bool            status;
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF item.type == "STR" -%]
     [% indented("char", "*$item.name") %];
@@ -12,5 +12,5 @@
 [% END -%]
 
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF item.type == "S32" or item.type == "F32" or item.type == "F64" -%]
     [% item.name %] = psMetadataLookup[% item.type %](&status, md, "[% item.name %]");
@@ -26,7 +26,7 @@
 [% END -%]
 
-    return [% object_name %]Alloc(
+    return [% table.object_name %]Alloc(
 [%- SET i = 0 -%]
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF i == 0 -%][%- i = 1 -%][% ELSE %], [% END -%]
 [% item.name %]
Index: trunk/glueforge/templates/psdb/objectfrommetadata_at.tt
===================================================================
--- trunk/glueforge/templates/psdb/objectfrommetadata_at.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/objectfrommetadata_at.tt	(revision 5907)
@@ -1,4 +1,4 @@
-AT_SETUP([[% namespace %]ObjectFromMetadata()])
-AT_KEYWORDS([[% namespace %]ObjectFromMetadata])
+AT_SETUP([[% table.namespace %]ObjectFromMetadata()])
+AT_KEYWORDS([[% table.namespace %]ObjectFromMetadata])
 
 AT_CHECK([objectfrommetadata])
Index: trunk/glueforge/templates/psdb/objectfrommetadata_c.tt
===================================================================
--- trunk/glueforge/templates/psdb/objectfrommetadata_c.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/objectfrommetadata_c.tt	(revision 5907)
@@ -11,8 +11,8 @@
 {
     psMetadata      *md;
-    [% indented(object_name, "*object") %];
+    [% indented(table.object_name, "*object") %];
 
     md = psMetadataAlloc();
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF item.type == "S32" or item.type == "F32" or item.type == "F64" -%]
     if (!psMetadataAdd[% item.type %](md, PS_LIST_TAIL, "[% item.name %]", NULL, [% item.test %])) {
@@ -20,5 +20,5 @@
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "[% item.name %]", NULL, [% item.test %])) {
 [% ELSIF item.type == "BOOL" -%]
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "[% item.name %]", PS_META_BOOL, NULL, [% item.test %])) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "[% item.name %]", PS_DATA_BOOL, NULL, [% item.test %])) {
 [% END -%]
         psFree(md);
@@ -27,5 +27,5 @@
 [% END -%]
 
-    object = [% namespace %]ObjectFromMetadata(md);
+    object = [% table.namespace %]ObjectFromMetadata(md);
     if (!object) {
         psFree(md);
@@ -35,5 +35,5 @@
     psFree(md);
 
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF item.type == "S32" or item.type == "F32" or item.type == "F64" or item.type == "BOOL" -%]
     if (!object->[% item.name %] == [% item.test %]) {
Index: trunk/glueforge/templates/psdb/objectfrommetadata_h.tt
===================================================================
--- trunk/glueforge/templates/psdb/objectfrommetadata_h.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/objectfrommetadata_h.tt	(revision 5907)
@@ -1,8 +1,8 @@
 /** Convert a psMetadata into an equivalent fooRow
  *
- * @return A [% object_name %] pointer or NULL on error
+ * @return A [% table.object_name %] pointer or NULL on error
  */
 
-[% object_name %] *[% namespace %]ObjectFromMetadata(
+[% table.object_name %] *[% table.namespace %]ObjectFromMetadata(
     psMetadata      *md                 ///< psMetadata to convert into a fooRow
 );
Index: trunk/glueforge/templates/psdb/pop.tt
===================================================================
--- trunk/glueforge/templates/psdb/pop.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/pop.tt	(revision 5907)
@@ -1,7 +1,7 @@
 [% USE format -%]
 [% indented = format('%-15s %s') -%]
-bool [% namespace %]Pop(psDB *dbh, 
+bool [% table.namespace %]Pop(psDB *dbh, 
 [%- SET i = 0 -%]
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF i == 0 %][% i = 1 %][% ELSE %], [% END -%]
 [% IF item.type == "STR" -%]
@@ -19,5 +19,5 @@
     int             rowID;
 
-    rowSet = psDBSelectRows(dbh, [% namespace FILTER upper %]_TABLE_NAME, NULL, 1);
+    rowSet = psDBSelectRows(dbh, [% table.namespace FILTER upper %]_TABLE_NAME, NULL, 1);
     row = psArrayGet(rowSet, 0);
     // FIXME: psArrayGet should increment the ref count
@@ -29,7 +29,7 @@
     psFree(rowSet);
 
-    rowID = psMetadataLookupS32(&status, row, [% namespace FILTER upper %]_INDEX_NAME);
+    rowID = psMetadataLookupS32(&status, row, [% table.namespace FILTER upper %]_INDEX_NAME);
     if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", [% namespace FILTER upper %]_INDEX_NAME);
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", [% table.namespace FILTER upper %]_INDEX_NAME);
         psFree(row);
         return NULL;
@@ -37,7 +37,7 @@
 
     popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, [% namespace FILTER upper %]_INDEX_NAME, NULL, rowID);
+    psMetadataAddS32(popped, PS_LIST_TAIL, [% table.namespace FILTER upper %]_INDEX_NAME, 0, NULL, rowID);
 
-    deleted = psDBDeleteRows(dbh, [% namespace FILTER upper %]_TABLE_NAME, popped);
+    deleted = psDBDeleteRows(dbh, [% table.namespace FILTER upper %]_TABLE_NAME, popped, 0);
     if (deleted != 1) {
         psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
@@ -49,5 +49,5 @@
     psFree(popped);
 
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF item.type == "S32" or item.type == "F32" or item.type == "F64" -%]
     *[% item.name %] = psMetadataLookup[% item.type %](&status, row, "[% item.name %]");
Index: trunk/glueforge/templates/psdb/pop_at.tt
===================================================================
--- trunk/glueforge/templates/psdb/pop_at.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/pop_at.tt	(revision 5907)
@@ -1,4 +1,4 @@
-AT_SETUP([[% namespace %]Pop()])
-AT_KEYWORDS([[% namespace %]Pop])
+AT_SETUP([[% table.namespace %]Pop()])
+AT_KEYWORDS([[% table.namespace %]Pop])
 
 AT_CHECK([dbsetup])
Index: trunk/glueforge/templates/psdb/pop_c.tt
===================================================================
--- trunk/glueforge/templates/psdb/pop_c.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/pop_c.tt	(revision 5907)
@@ -8,5 +8,5 @@
 {
     psDB            *dbh;
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF item.type == "STR" -%]
     [% indented("char", "$item.name[256]") %];
@@ -21,7 +21,7 @@
     }
 
-    if (![% namespace %]Pop(dbh, 
+    if (![% table.namespace %]Pop(dbh, 
 [%- SET i = 0 -%]
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF i == 0 %][% i = 1 %][% ELSE %], [% END -%]
 [% IF item.type == "STR" -%]
Index: trunk/glueforge/templates/psdb/pop_h.tt
===================================================================
--- trunk/glueforge/templates/psdb/pop_h.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/pop_h.tt	(revision 5907)
@@ -6,8 +6,8 @@
  */
 
-bool [% namespace %]Pop(
+bool [% table.namespace %]Pop(
     psDB            *dbh,               ///< Database handle
 [%- SET i = 0 -%]
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF i == 0 %][% i = 1 %][% ELSE %],[% END %]
 [% IF item.type == "STR" -%]
Index: trunk/glueforge/templates/psdb/popfits.tt
===================================================================
--- trunk/glueforge/templates/psdb/popfits.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/popfits.tt	(revision 5907)
@@ -1,3 +1,3 @@
-bool [% namespace %]PopFits(psDB *dbh, psFits *fits, unsigned long long limit)
+bool [% table.namespace %]PopFits(psDB *dbh, psFits *fits, unsigned long long limit)
 {
     char            query[MAX_STRING_LENGTH];
@@ -11,5 +11,5 @@
     if (snprintf(query, MAX_STRING_LENGTH,
                 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                [% namespace FILTER upper %]_TABLE_NAME, [% namespace FILTER upper %]_INDEX_NAME, limit) < 0) {
+                [% table.namespace FILTER upper %]_TABLE_NAME, [% table.namespace FILTER upper %]_INDEX_NAME, limit) < 0) {
         psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %s bytes", MAX_STRING_LENGTH);
         return false;
Index: trunk/glueforge/templates/psdb/popfits_at.tt
===================================================================
--- trunk/glueforge/templates/psdb/popfits_at.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/popfits_at.tt	(revision 5907)
@@ -1,4 +1,4 @@
-AT_SETUP([[% namespace %]PopFits()])
-AT_KEYWORDS([[% namespace %]PopFits])
+AT_SETUP([[% table.namespace %]PopFits()])
+AT_KEYWORDS([[% table.namespace %]PopFits])
 
 AT_CHECK([dbsetup])
Index: trunk/glueforge/templates/psdb/popfits_c.tt
===================================================================
--- trunk/glueforge/templates/psdb/popfits_c.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/popfits_c.tt	(revision 5907)
@@ -19,5 +19,5 @@
     }
 
-    if (![% namespace %]PopFits(dbh, fits, 1)) {
+    if (![% table.namespace %]PopFits(dbh, fits, 1)) {
         exit(EXIT_FAILURE);
     }
Index: trunk/glueforge/templates/psdb/popfits_h.tt
===================================================================
--- trunk/glueforge/templates/psdb/popfits_h.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/popfits_h.tt	(revision 5907)
@@ -7,5 +7,5 @@
  */
 
-bool [% namespace %]PopFits(
+bool [% table.namespace %]PopFits(
     psDB            *dbh,               ///< Database handle
     psFits          *fits,              ///< psFits object
Index: trunk/glueforge/templates/psdb/popobject.tt
===================================================================
--- trunk/glueforge/templates/psdb/popobject.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/popobject.tt	(revision 5907)
@@ -1,7 +1,7 @@
 [% USE format -%]
 [% indented = format('%-15s %s') -%]
-[% object_name %] *[% namespace %]PopObject(psDB *dbh)
+[% table.object_name %] *[% table.namespace %]PopObject(psDB *dbh)
 {
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF item.type == "STR" -%]
     [% indented("char", "$item.name[256]") %];
@@ -11,7 +11,7 @@
 [% END -%]
 
-    if (![% namespace %]Pop(dbh, 
+    if (![% table.namespace %]Pop(dbh, 
 [%- SET i = 0 -%]
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF i == 0 %][% i = 1 %][% ELSE %], [% END -%]
 [% IF item.type == "STR" -%]
@@ -25,7 +25,7 @@
     }
 
-    return [% object_name %]Alloc(
+    return [% table.object_name %]Alloc(
 [%- SET i = 0 -%]
-[% FOREACH item = columns -%]
+[% FOREACH item = table.columns -%]
 [% IF i == 0 -%][%- i = 1 -%][% ELSE %], [% END -%]
 [% item.name %]
Index: trunk/glueforge/templates/psdb/popobject_at.tt
===================================================================
--- trunk/glueforge/templates/psdb/popobject_at.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/popobject_at.tt	(revision 5907)
@@ -1,4 +1,4 @@
-AT_SETUP([[% namespace %]PopObject()])
-AT_KEYWORDS([[% namespace %]PopObject])
+AT_SETUP([[% table.namespace %]PopObject()])
+AT_KEYWORDS([[% table.namespace %]PopObject])
 
 AT_CHECK([dbsetup])
Index: trunk/glueforge/templates/psdb/popobject_c.tt
===================================================================
--- trunk/glueforge/templates/psdb/popobject_c.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/popobject_c.tt	(revision 5907)
@@ -8,5 +8,5 @@
 {
     psDB            *dbh;
-    [% indented(object_name, "*object") %];
+    [% indented(table.object_name, "*object") %];
 
     dbh = psDBInit("localhost", "test", NULL, "test");
@@ -15,5 +15,5 @@
     }
 
-    object = [% namespace %]PopObject(dbh);
+    object = [% table.namespace %]PopObject(dbh);
     if (!object) {
         exit(EXIT_FAILURE);
Index: trunk/glueforge/templates/psdb/popobject_h.tt
===================================================================
--- trunk/glueforge/templates/psdb/popobject_h.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/popobject_h.tt	(revision 5907)
@@ -1,8 +1,8 @@
 /** Removes the last row from the database and returns it
  *
- * @return A new [% object_name %] on success or NULL on failure.
+ * @return A new [% table.object_name %] on success or NULL on failure.
  */
 
-[% object_name %] *[% namespace %]PopObject(
+[% table.object_name %] *[% table.namespace %]PopObject(
     psDB            *dbh                ///< Database handle
 );
Index: trunk/glueforge/templates/psdb/selectrowsfits.tt
===================================================================
--- trunk/glueforge/templates/psdb/selectrowsfits.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/selectrowsfits.tt	(revision 5907)
@@ -1,8 +1,8 @@
-bool [% namespace %]SelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
+bool [% table.namespace %]SelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
     psU64           i;
 
-    rowSet = psDBSelectRows(dbh, [% namespace FILTER upper %]_TABLE_NAME, where, limit);
+    rowSet = psDBSelectRows(dbh, [% table.namespace FILTER upper %]_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
@@ -11,6 +11,6 @@
     // strip index column
     for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, [% namespace FILTER upper %]_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", [% namespace FILTER upper %]_INDEX_NAME);
+        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, [% table.namespace FILTER upper %]_INDEX_NAME)) {
+            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", [% table.namespace FILTER upper %]_INDEX_NAME);
             psFree(rowSet);
             return false;
@@ -26,5 +26,5 @@
 
     // FIXME: needs to be after a new ext is written?
-    if (!psFitsSetExtName(fits, [% namespace FILTER upper %]_TABLE_NAME)) {
+    if (!psFitsSetExtName(fits, [% table.namespace FILTER upper %]_TABLE_NAME)) {
         psError(PS_ERR_UNKNOWN, false, "failed to set FITS HDU extension name");
         psFree(rowSet);
Index: trunk/glueforge/templates/psdb/selectrowsfits_at.tt
===================================================================
--- trunk/glueforge/templates/psdb/selectrowsfits_at.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/selectrowsfits_at.tt	(revision 5907)
@@ -1,4 +1,4 @@
-AT_SETUP([[% namespace %]SelectRowsFits()])
-AT_KEYWORDS([[% namespace %]SelectRowsFits])
+AT_SETUP([[% table.namespace %]SelectRowsFits()])
+AT_KEYWORDS([[% table.namespace %]SelectRowsFits])
 
 AT_CHECK([dbsetup])
Index: trunk/glueforge/templates/psdb/selectrowsfits_c.tt
===================================================================
--- trunk/glueforge/templates/psdb/selectrowsfits_c.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/selectrowsfits_c.tt	(revision 5907)
@@ -19,5 +19,5 @@
     }
 
-    if (![% namespace %]SelectRowsFits(dbh, fits, NULL, 1)) {
+    if (![% table.namespace %]SelectRowsFits(dbh, fits, NULL, 1)) {
         exit(EXIT_FAILURE);
     }
Index: trunk/glueforge/templates/psdb/selectrowsfits_h.tt
===================================================================
--- trunk/glueforge/templates/psdb/selectrowsfits_h.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/selectrowsfits_h.tt	(revision 5907)
@@ -9,5 +9,5 @@
  */
 
-bool [% namespace %]SelectRowsFits(
+bool [% table.namespace %]SelectRowsFits(
     psDB            *dbh,               ///< Database handle
     psFits          *fits,              ///< psFits object
Index: trunk/glueforge/templates/psdb/top_makefile_am.tt
===================================================================
--- trunk/glueforge/templates/psdb/top_makefile_am.tt	(revision 5902)
+++ trunk/glueforge/templates/psdb/top_makefile_am.tt	(revision 5907)
@@ -8,8 +8,16 @@
 man_MANS = \
     $(top_builddir)/docs/man/man3/[% pkg_name %].3 \
-    $(top_builddir)/docs/man/man3/[% object_name %].3
+[%- FOREACH table = tables %]
+[% IF NOT loop.last -%]
+    $(top_builddir)/docs/man/man3/[% table.object_name %].3 \
+[% ELSE -%]
+    $(top_builddir)/docs/man/man3/[% table.object_name %].3 
+[% END -%]
+[% END %]
 
-docs/man/man3/[% pkg_name %].3 docs/man/man3/[% object_name %].3:
+[%- FOREACH table = tables -%]
+docs/man/man3/[% pkg_name %].3 docs/man/man3/[% table.object_name %].3:
 	$(DOXYGEN)
+[%- END %]
 
 clean-local:
