Index: /trunk/gsdl/src/colservr/browsefilter.cpp
===================================================================
--- /trunk/gsdl/src/colservr/browsefilter.cpp	(revision 2211)
+++ /trunk/gsdl/src/colservr/browsefilter.cpp	(revision 2212)
@@ -70,5 +70,5 @@
 
   // get the filename for the database and make sure it exists
-  gdbm_filename = filename_cat(collectdir,"index","text",collection);
+  gdbm_filename = filename_cat(gdbmhome, "collect", collection, "index", "text", collection);
 
   if (littleEndian()) gdbm_filename += ".ldb";
Index: /trunk/gsdl/src/colservr/filter.cpp
===================================================================
--- /trunk/gsdl/src/colservr/filter.cpp	(revision 2211)
+++ /trunk/gsdl/src/colservr/filter.cpp	(revision 2212)
@@ -46,4 +46,5 @@
     else if (key == "collectdir") collectdir = value;
     else if (key == "gsdlhome") gsdlhome = value;
+    else if (key == "gdbmhome") gdbmhome = value;
     else if ((key == "filteroptdefault") && (cfgline.size() == 2)) {
       // see if this filter has an option with this name
@@ -69,4 +70,6 @@
   }
 
+  if (gdbmhome.empty()) gdbmhome = gsdlhome;
+  
   // get the collection directory name
   if (collectdir.empty()) {
Index: /trunk/gsdl/src/colservr/filter.h
===================================================================
--- /trunk/gsdl/src/colservr/filter.h	(revision 2211)
+++ /trunk/gsdl/src/colservr/filter.h	(revision 2212)
@@ -36,4 +36,5 @@
 protected:
   text_t gsdlhome;
+  text_t gdbmhome;
   text_t collection;
   text_t collectdir;
Index: /trunk/gsdl/src/colservr/mggdbmsource.cpp
===================================================================
--- /trunk/gsdl/src/colservr/mggdbmsource.cpp	(revision 2211)
+++ /trunk/gsdl/src/colservr/mggdbmsource.cpp	(revision 2212)
@@ -78,10 +78,9 @@
   // get the collection directory name
   if (collectdir.empty()) {
-    collectdir = filename_cat (gdbmhome, "collect", collection);
+    collectdir = filename_cat (gsdlhome, "collect", collection);
   }
   
   // get the filename for the database and make sure it exists
-  gdbm_filename = filename_cat(collectdir,"index","text",collection);
-
+  gdbm_filename = filename_cat(gdbmhome, "collect", collection, "index", "text", collection);
   if (littleEndian()) gdbm_filename += ".ldb";
   else gdbm_filename += ".bdb";
Index: /trunk/gsdl/src/colservr/queryfilter.cpp
===================================================================
--- /trunk/gsdl/src/colservr/queryfilter.cpp	(revision 2211)
+++ /trunk/gsdl/src/colservr/queryfilter.cpp	(revision 2212)
@@ -339,5 +339,5 @@
 
   // get the filename for the database and make sure it exists
-  gdbm_filename = filename_cat(collectdir,"index","text",collection);
+  gdbm_filename = filename_cat(gdbmhome, "collect", collection, "index", "text", collection);
 
   if (littleEndian()) gdbm_filename += ".ldb";
Index: /trunk/gsdl/src/recpt/action.cpp
===================================================================
--- /trunk/gsdl/src/recpt/action.cpp	(revision 2211)
+++ /trunk/gsdl/src/recpt/action.cpp	(revision 2212)
@@ -42,5 +42,9 @@
 // configure should be called once for each configuration line
 void action::configure (const text_t &key, const text_tarray &cfgline) {
-  if (key == "gsdlhome") {gsdlhome = cfgline[0];}
+  if (key == "gsdlhome") {
+    gsdlhome = cfgline[0];
+    if (gdbmhome.empty()) gdbmhome = cfgline[0];
+  }
+  if (key == "gdbmhome") {gdbmhome = cfgline[0];}
 }
 
Index: /trunk/gsdl/src/recpt/action.h
===================================================================
--- /trunk/gsdl/src/recpt/action.h	(revision 2211)
+++ /trunk/gsdl/src/recpt/action.h	(revision 2212)
@@ -48,4 +48,5 @@
   cgiargsinfoclass argsinfo;
   text_t gsdlhome;
+  text_t gdbmhome;
 
 public:
Index: /trunk/gsdl/src/recpt/authenaction.cpp
===================================================================
--- /trunk/gsdl/src/recpt/authenaction.cpp	(revision 2211)
+++ /trunk/gsdl/src/recpt/authenaction.cpp	(revision 2212)
@@ -131,10 +131,4 @@
     else if (key == "keyfile") keyfile = cfgline[0];
     else if (key == "keydecay") keydecay = cfgline[0].getint();
-    else if (key == "gsdlhome") {
-      if (usersfile.empty())
-	usersfile = filename_cat (cfgline[0], "etc", "users.db");
-      if (keyfile.empty())
-	keyfile = filename_cat (cfgline[0], "etc", "key.db");
-    }
   }
 
@@ -143,4 +137,13 @@
 
 bool authenaction::init (ostream &logout) {
+
+  if (gdbmhome.empty()) {
+    logout << "ERROR (authenaction::init) gdbmhome is not set\n";
+    return false;
+  }
+
+  if (usersfile.empty()) usersfile = filename_cat (gdbmhome, "etc", "users.db");
+  if (keyfile.empty()) keyfile = filename_cat (gdbmhome, "etc", "key.db");
+
   return action::init (logout);
 }
Index: /trunk/gsdl/src/recpt/nullproto.cpp
===================================================================
--- /trunk/gsdl/src/recpt/nullproto.cpp	(revision 2211)
+++ /trunk/gsdl/src/recpt/nullproto.cpp	(revision 2212)
@@ -72,5 +72,5 @@
   // the protocol should not configure the collection set; it should be
   // done direct to the collection server set
-  if (key == "gsdlhome") {
+  if (key == "gsdlhome" || key == "gdbmhome") {
     cset->configure(key, cfgline);
   }
Index: /trunk/gsdl/src/recpt/queryaction.cpp
===================================================================
--- /trunk/gsdl/src/recpt/queryaction.cpp	(revision 2211)
+++ /trunk/gsdl/src/recpt/queryaction.cpp	(revision 2212)
@@ -735,5 +735,5 @@
     text_t userid = args["z"];
     text_tarray entries;
-    if (get_history_info (userid, entries, gsdlhome, logout)) {
+    if (get_history_info (userid, entries, gdbmhome, logout)) {
       int count = 1;
       text_tarray::iterator here = entries.begin();
@@ -1397,5 +1397,5 @@
   int hd = args.getintarg("hd");
   if (hd > 0) display=true;
-  if (set_history_info(userid, query, gsdlhome, display)) return true;
+  if (set_history_info(userid, query, gdbmhome, display)) return true;
   else return false;
 
Index: /trunk/gsdl/src/recpt/receptionist.cpp
===================================================================
--- /trunk/gsdl/src/recpt/receptionist.cpp	(revision 2211)
+++ /trunk/gsdl/src/recpt/receptionist.cpp	(revision 2212)
@@ -206,4 +206,5 @@
     cgiarginfo *info = NULL;
     if (key == "gsdlhome") configinfo.gsdlhome = cfgline[0];
+    else if (key == "gdbmhome") configinfo.gdbmhome = cfgline[0];
     else if (key == "collection") {
       configinfo.collection = cfgline[0];
@@ -660,6 +661,5 @@
   }
 
-  text_t logfile = filename_cat (configinfo.gsdlhome, "etc");
-  logfile = filename_cat (logfile, "usage.txt");
+  text_t logfile = filename_cat (configinfo.gdbmhome, "etc", "usage.txt");
 
   text_t logstr = script_name;
Index: /trunk/gsdl/src/recpt/statusaction.cpp
===================================================================
--- /trunk/gsdl/src/recpt/statusaction.cpp	(revision 2211)
+++ /trunk/gsdl/src/recpt/statusaction.cpp	(revision 2212)
@@ -906,5 +906,5 @@
 				   ostream &textout, ostream &/*logout*/) {
 
-  text_t maincfgfile = filename_cat (gsdlhome, "etc", "main.cfg");
+  text_t maincfgfile = filename_cat (gdbmhome, "etc", "main.cfg");
 
   textout << outconvert << disp << "_status:infoheader_(main.cfg)\n"
Index: /trunk/gsdl/src/recpt/usersaction.cpp
===================================================================
--- /trunk/gsdl/src/recpt/usersaction.cpp	(revision 2211)
+++ /trunk/gsdl/src/recpt/usersaction.cpp	(revision 2212)
@@ -148,11 +148,19 @@
   if (cfgline.size() == 1) {
     if (key == "usersfile") usersfile = cfgline[0];
-    else if (key == "gsdlhome") {
-      if (usersfile.empty())
-	usersfile = filename_cat (cfgline[0], "etc", "users.db");
-    }
   }
 
   action::configure (key, cfgline);
+}
+
+bool usersaction::init (ostream &logout) {
+
+  if (gdbmhome.empty()) {
+    logout << "ERROR (usersaction::init) gdbmhome is not set\n";
+    return false;
+  }
+
+  if (usersfile.empty()) usersfile = filename_cat (gdbmhome, "etc", "users.db");
+
+  return action::init (logout);
 }
 
Index: /trunk/gsdl/src/recpt/usersaction.h
===================================================================
--- /trunk/gsdl/src/recpt/usersaction.h	(revision 2211)
+++ /trunk/gsdl/src/recpt/usersaction.h	(revision 2212)
@@ -42,4 +42,6 @@
 
   void configure (const text_t &key, const text_tarray &cfgline);
+
+  bool init (ostream &logout);
   
   text_t get_action_name () {return "um";}
Index: /trunk/gsdl/src/w32server/cgiwrapper.cpp
===================================================================
--- /trunk/gsdl/src/w32server/cgiwrapper.cpp	(revision 2211)
+++ /trunk/gsdl/src/w32server/cgiwrapper.cpp	(revision 2212)
@@ -228,5 +228,5 @@
 }
 
-static void page_errorparseargs (const text_t &gsdlhome) {
+static void page_errorparseargs (const text_t &/*gsdlhome*/) {
 
   text_t message = "Error\n\n"
@@ -238,5 +238,5 @@
 }
 
-static void page_errorcgipage (const text_t &gsdlhome) {
+static void page_errorcgipage (const text_t &/*gsdlhome*/) {
 
   text_t message = "Error\n\n"
@@ -351,5 +351,5 @@
   // required to create a collection specific receptionist
   text_t collection = "";
-  text_tset gsdlhomes;
+  text_tset gdbmhomes;
   text_tset collections;
 
@@ -371,5 +371,5 @@
     // collection specific receptionist - one collection, one gsdlhome
     collections.insert (collection);
-    gsdlhomes.insert (gsdl_gsdlhome);
+    gdbmhomes.insert (gsdl_gdbmhome);
     collectioninfo_t tmp;
     tmp.gsdl_gsdlhome = gsdl_gsdlhome;
@@ -387,5 +387,5 @@
     colinfo_tmap::const_iterator end_info = gsdl_collectinfo.end();
     while (this_info != end_info) {
-      if (gsdlhomes.find ((*this_info).second.gsdl_gsdlhome) == gsdlhomes.end()) {
+      if (gdbmhomes.find ((*this_info).second.gsdl_gdbmhome) == gdbmhomes.end()) {
 	these_collections.erase (these_collections.begin(), these_collections.end());
 	read_dir (filename_cat ((*this_info).second.gsdl_gsdlhome, "collect"), these_collections);
@@ -411,14 +411,14 @@
 	  colhere ++;
 	}
-	gsdlhomes.insert ((*this_info).second.gsdl_gsdlhome);
+	gdbmhomes.insert ((*this_info).second.gsdl_gdbmhome);
       }
       this_info ++;
     }
   
-    // then if necessary the main gsdlhome (this should only happen if the 
-    // gsdl.ini is a little screwed up and no volume gsdlhomes occurred
-    if (gsdlhomes.find (gsdl_gsdlhome) == gsdlhomes.end()) {
+    // then if necessary the main gdbmhome (this should only happen if the 
+    // gsdl.ini is a little screwed up and no volume gdbmhomes occurred)
+    if (gdbmhomes.find (gsdl_gdbmhome) == gdbmhomes.end()) {
       these_collections.erase (these_collections.begin(), these_collections.end());
-      read_dir (filename_cat (gsdl_gsdlhome, "collect"), these_collections);
+      read_dir (filename_cat (gsdl_gdbmhome, "collect"), these_collections);
       colhere = these_collections.begin();
       colend = these_collections.end();
@@ -431,5 +431,5 @@
 	colhere ++;
       }
-      gsdlhomes.insert (gsdl_gsdlhome);
+      gdbmhomes.insert (gsdl_gdbmhome);
     }
   }
@@ -525,4 +525,5 @@
   // set defaults
   recpt.configure ("gsdlhome", gsdl_gsdlhome);
+  recpt.configure ("gdbmhome", gsdl_gdbmhome);
   recpt.configure ("collection", collection);
 
@@ -543,11 +544,11 @@
   }
 
-  // read in config files of each gsdlhome (in no particular order)
+  // read in config files of each gdbmhome (in no particular order)
   // those read in last will override those read earlier
   // collections being used together in this way should be 
   // careful not to have main.cfg files that might 
   // screw with each other.
-  text_tset::const_iterator thome = gsdlhomes.begin();
-  text_tset::const_iterator ehome = gsdlhomes.end();
+  text_tset::const_iterator thome = gdbmhomes.begin();
+  text_tset::const_iterator ehome = gdbmhomes.end();
   while (thome != ehome) {
     if (!main_cfg_read (recpt, *thome, collection)) {
