Index: /main/trunk/greenstone2/runtime-src/src/recpt/configaction.cpp
===================================================================
--- /main/trunk/greenstone2/runtime-src/src/recpt/configaction.cpp	(revision 22821)
+++ /main/trunk/greenstone2/runtime-src/src/recpt/configaction.cpp	(revision 22822)
@@ -93,10 +93,6 @@
     textout << "configured release-collection\n";
 
-  } else if ((args["cmd"] == "restart")) {
-	if(!args["c"].empty()) {
-		remove_colservr(args["c"], logout);
-		textout << "configured release-collection for reconfigure-restart\n";
-	}
-    textout << "reconfigure-restart\n";
+  } else if ((args["cmd"] == "restart")) {	
+    textout << "configured for restart\n";
 #ifdef GSDL_LOCAL_LIBRARY
     HWND gw = FindWindow("Greenstone Digital Library Software",
Index: /main/trunk/greenstone2/runtime-src/src/w32server/cgiwrapper.cpp
===================================================================
--- /main/trunk/greenstone2/runtime-src/src/w32server/cgiwrapper.cpp	(revision 22821)
+++ /main/trunk/greenstone2/runtime-src/src/w32server/cgiwrapper.cpp	(revision 22822)
@@ -368,9 +368,57 @@
 keydbclass *kdb = NULL;
 
+
+// When (1) the "collecthome" collect dir is not the standard greenstone collect dir,
+// or when (2) this collecthome is specified in a section other than [gsdl] in the (lls/gli)site.cfg file,
+// this method gets called to load in that collect dir's collections into the server during gsdl_init
+static void load_collections_from_collectdir(
+	colinfo_tmap &translated_colinfo,
+	text_tset::const_iterator &colhere, 
+	text_tset::const_iterator &colend, 
+	text_tset &these_collections,
+	text_tset &dbhomes, 
+	text_tset &clhomes, 
+	text_tset &collections,
+	const text_t &my_gsdl_home, 
+	const text_t &my_gsdl_collecthome, 
+	const text_t &my_gsdl_dbhome) 
+{	
+	these_collections.erase (these_collections.begin(), these_collections.end());
+	read_dir (my_gsdl_collecthome, these_collections);
+	colhere = these_collections.begin();
+	colend = these_collections.end();
+	while (colhere != colend) {		 
+	  if ((collections.find (*colhere)) == collections.end()) {
+		// make sure the build.cfg file is at gsdlhome (as it's possible that
+		// the collection appears at this gsdlhome only because it's gdbm
+		// file is installed here -- it's real gdbm will therefore be 
+		// somewhere else).
+		text_t build_cfg = filename_cat (my_gsdl_collecthome,
+						 *colhere, "index", "build.cfg");
+						 
+		if (file_exists (build_cfg)) {
+		  collections.insert (*colhere);
+
+		  // since gsdl_collectinfo keys will be stuff like collection#1
+		  // for a multiple volume collection we want to translate it
+		  // so that the keys are the actual collection names
+		  collectioninfo_t tmp;
+		  tmp.gsdl_gsdlhome = my_gsdl_home;
+		  tmp.gsdl_collecthome = my_gsdl_collecthome;
+		  tmp.gsdl_dbhome = my_gsdl_dbhome;			
+		  translated_colinfo[*colhere] = tmp;
+		}
+	  }
+	  ++colhere;
+	}
+	dbhomes.insert (gsdl_dbhome);
+	clhomes.insert (gsdl_collecthome);
+}
+
+
 // returns 1 if successful, 0 if unsuccessful (note that as well as being
 // called when the server first starts up this function is called when the
 // "restart library" button is pressed)
-int gsdl_init (bool atStartup) {
-
+int gsdl_init (bool atStartup) {		 
   if (atStartup) {
 #if defined (GSDL_USE_IOS_H)
@@ -410,5 +458,5 @@
   // on there not being more than one collection with the same 
   // name)
-  if (!collection.empty()) {
+  if (!collection.empty()) {  
     // collection specific receptionist - one collection, one gsdlhome
     collections.insert (collection);
@@ -422,39 +470,31 @@
 
   } else {
-
-    text_tset::const_iterator colhere;
+	text_tset::const_iterator colhere;
     text_tset::const_iterator colend;
     text_tset these_collections;
-
-    // first volume gsdlhome's
+  
+    // First volume gsdlhome's - part 1
+	// if non-standard collecthome under [gsdl] section of site config file (llssite or glisite),
+	// then need to read in all the collections from this collecthome
+	if(gsdl_collecthome != filename_cat(gsdl_gsdlhome,"collect")) { 		
+		load_collections_from_collectdir(translated_collectinfo,
+				colhere, colend, these_collections,
+				dbhomes, clhomes, collections,
+				gsdl_gsdlhome, gsdl_collecthome, gsdl_dbhome);		
+	}
+	
+	// first volume gsdlhome's - part 2
+	// read in all the collections from sections other than [gsdl] in the site config file (llssite/glisite)
     colinfo_tmap::const_iterator this_info = gsdl_collectinfo.begin();
     colinfo_tmap::const_iterator end_info = gsdl_collectinfo.end();
     while (this_info != end_info) {
+	
       if (dbhomes.find ((*this_info).second.gsdl_dbhome) == dbhomes.end()) {
-	these_collections.erase (these_collections.begin(), these_collections.end());
-	read_dir ((*this_info).second.gsdl_collecthome, these_collections);
-	colhere = these_collections.begin();
-	colend = these_collections.end();
-	while (colhere != colend) {
-	  if ((collections.find (*colhere)) == collections.end()) {
-	    // make sure the build.cfg file is at gsdlhome (as it's possible that
-	    // the collection appears at this gsdlhome only because it's gdbm
-	    // file is installed here -- it's real gdbm will therefore be 
-	    // somewhere else).
-	    text_t build_cfg = filename_cat ((*this_info).second.gsdl_collecthome,
-					     *colhere, "index", "build.cfg");
-	    if (file_exists (build_cfg)) {
-	      collections.insert (*colhere);
-
-	      // since gsdl_collectinfo keys will be stuff like collection#1
-	      // for a multiple volume collection we want to translate it
-	      // so that the keys are the actual collection names
-	      translated_collectinfo[*colhere] = (*this_info).second;
-	    }
-	  }
-	  ++colhere;
-	}
-	dbhomes.insert ((*this_info).second.gsdl_dbhome);
-	clhomes.insert ((*this_info).second.gsdl_collecthome);
+			load_collections_from_collectdir(translated_collectinfo,
+					colhere, colend, these_collections,
+					dbhomes, clhomes, collections,
+					(*this_info).second.gsdl_gsdlhome, 
+					(*this_info).second.gsdl_collecthome, 
+					(*this_info).second.gsdl_dbhome);	 
       }
       ++this_info;
@@ -464,4 +504,5 @@
     // gsdl.ini is a little screwed up and no volume dbhomes occurred)
     if (dbhomes.find (gsdl_dbhome) == dbhomes.end()) {
+		  
       these_collections.erase (these_collections.begin(), these_collections.end());
       read_dir (filename_cat (gsdl_dbhome, "collect"), these_collections);
@@ -469,5 +510,5 @@
       colend = these_collections.end();
       while (colhere != colend) {
-	
+		  
 	//text_t build_cfg = filename_cat (gsdl_dbhome,"collect",
 	//			 *colhere, "index", "build.cfg");
