Index: /trunk/gsdl/src/recpt/action.cpp
===================================================================
--- /trunk/gsdl/src/recpt/action.cpp	(revision 7431)
+++ /trunk/gsdl/src/recpt/action.cpp	(revision 7432)
@@ -79,5 +79,5 @@
 				     cgiargsclass &/*args*/,
 				     outconvertclass &/*outconvert*/,
-				     const text_tarray &/*saveconf*/,
+				     const text_t &/*saveconf*/,
 				     ostream &/*logout*/) {
   return true;
Index: /trunk/gsdl/src/recpt/action.h
===================================================================
--- /trunk/gsdl/src/recpt/action.h	(revision 7431)
+++ /trunk/gsdl/src/recpt/action.h	(revision 7432)
@@ -81,5 +81,5 @@
 				       cgiargsclass &args,
 				       outconvertclass &outconvert,
-				       const text_tarray &saveconf,
+				       const text_t &saveconf,
 				       ostream &logout);
 
Index: /trunk/gsdl/src/recpt/authenaction.cpp
===================================================================
--- /trunk/gsdl/src/recpt/authenaction.cpp	(revision 7431)
+++ /trunk/gsdl/src/recpt/authenaction.cpp	(revision 7432)
@@ -162,5 +162,5 @@
 					   cgiargsclass &args,
 					   outconvertclass &outconvert,
-					   const text_tarray &saveconf,
+					   const text_t &saveconf,
 					   ostream &logout) {
 
@@ -310,12 +310,9 @@
 
   // get a list of saved configuration arguments (if possible)
+  text_t saveconf;
   text_tset saveconfset;
   if (recpt != NULL) {
-    text_tarray::const_iterator thisSaveConf = recpt->get_configinfo().saveconf.begin();
-    text_tarray::const_iterator endSaveConf = recpt->get_configinfo().saveconf.end();
-    while (thisSaveConf != endSaveConf) {
-      saveconfset.insert(*thisSaveConf);
-      ++thisSaveConf;
-    }
+    saveconf = recpt->get_configinfo().saveconf;
+    splitchar (saveconf.begin(), saveconf.end(), '-', saveconfset);
   }
   
Index: /trunk/gsdl/src/recpt/authenaction.h
===================================================================
--- /trunk/gsdl/src/recpt/authenaction.h	(revision 7431)
+++ /trunk/gsdl/src/recpt/authenaction.h	(revision 7432)
@@ -65,5 +65,5 @@
 			       cgiargsclass &args,
 			       outconvertclass &outconvert,
-			       const text_tarray &saveconf,
+			       const text_t &saveconf,
 			       ostream &logout);
 
Index: /trunk/gsdl/src/recpt/browsetools.cpp
===================================================================
--- /trunk/gsdl/src/recpt/browsetools.cpp	(revision 7431)
+++ /trunk/gsdl/src/recpt/browsetools.cpp	(revision 7432)
@@ -126,5 +126,5 @@
   parse_formatstring (formatinfo.DocumentHeading, formatlistptr, metadata, getParents);
 
-  if (!get_info (args["d"], args["c"], metadata, getParents, collectproto, response, logout))
+  if (!get_info (args["d"], args["c"], args["l"], metadata, getParents, collectproto, response, logout))
     return;
 
@@ -159,5 +159,5 @@
   parse_formatstring (formatinfo.RelatedDocuments, formatlistptr, metadata, getParents);
 
-  if (!get_info (args["d"], args["c"], metadata, getParents, collectproto, response, logout))
+  if (!get_info (args["d"], args["c"], args["l"], metadata, getParents, collectproto, response, logout))
     return;
   
@@ -223,5 +223,5 @@
 
     FilterResponse_t tmp;
-    get_children (section.OID, args["c"], metadata, getParents, collectproto, tmp, logout);
+    get_children (section.OID, args["c"], args["l"], metadata, getParents, collectproto, tmp, logout);
     ResultDocInfo_tarray::iterator thisdoc = tmp.docInfo.begin();
     ResultDocInfo_tarray::iterator lastdoc = tmp.docInfo.end();
@@ -286,5 +286,5 @@
   metadata.insert (classifytype);
 
-  if (!get_info (tOID, args["c"], metadata, getParents, collectproto, response, logout))
+  if (!get_info (tOID, args["c"], args["l"], metadata, getParents, collectproto, response, logout))
     return;
   classifytype = response.docInfo[0].metadata[classifytype].values[0];
@@ -328,5 +328,5 @@
 
   // protocol call
-  if (!get_info (OID, args["c"], metadata, getParents, collectproto, response, logout))
+  if (!get_info (OID, args["c"], args["l"], metadata, getParents, collectproto, response, logout))
     return;
 
@@ -474,5 +474,5 @@
     get_top (args["cl"], classification);    
 
-  bool haschildren = has_children (OID, args["c"], collectproto, logout);
+  bool haschildren = has_children (OID, args["c"], args["l"], collectproto, logout);
 
   if ((!args["d"].empty()) && fulltoc)
@@ -486,5 +486,5 @@
     metadata.insert ("childtype");
     
-    if (!get_info (parents, args["c"], metadata, getParents, collectproto, response, logout))
+    if (!get_info (parents, args["c"], args["l"], metadata, getParents, collectproto, response, logout))
       return;
     
@@ -494,5 +494,5 @@
 			browsermap, formatinfo, formatlistmap);
 
-    if (!get_info (parents, args["c"], metadata, getParents, collectproto, response, logout))
+    if (!get_info (parents, args["c"], args["l"], metadata, getParents, collectproto, response, logout))
       return;
     
@@ -541,8 +541,8 @@
 
   if (haschildren) 
-    get_children (OID, args["c"], metadata, getParents,
+    get_children (OID, args["c"], args["l"], metadata, getParents,
 		  collectproto, response, logout);
   else if (!is_top(OID)) {
-    get_children (OID + ".pr", args["c"], metadata, getParents, 
+    get_children (OID + ".pr", args["c"], args["l"], metadata, getParents, 
 		  collectproto, response, logout);
     haschildren = true;
@@ -576,5 +576,5 @@
 	if (OID.empty()) OID = args["cl"];
 
-	bool haschildren = has_children (OID, args["c"], collectproto, logout);
+	bool haschildren = has_children (OID, args["c"], args["l"], collectproto, logout);
 
 	// get parents list
@@ -597,5 +597,5 @@
 		metadata.insert ("thistype");
 
-		get_info ( topOID, args["c"], metadata, getParents, collectproto, response, logout);
+		get_info ( topOID, args["c"], args["l"], metadata, getParents, collectproto, response, logout);
 		if (!response.docInfo[0].metadata["thistype"].values.empty()) 
 			classifytype = response.docInfo[0].metadata["thistype"].values[0];
@@ -617,5 +617,5 @@
 		metadata.insert ("haschildren");
 
-		get_info (topOID, args["c"], metadata, getParents, collectproto, response, logout);
+		get_info (topOID, args["c"], args["l"], metadata, getParents, collectproto, response, logout);
 
 		// ouput top OID section
@@ -656,5 +656,5 @@
 
 		OID = parents[tabcount];
-		get_info (OID, args["c"], metadata, getParents, collectproto, response, logout);
+		get_info (OID, args["c"], args["l"], metadata, getParents, collectproto, response, logout);
 		get_top (OID, classification);
 
@@ -683,8 +683,8 @@
 
 		if (haschildren) 
-			get_children (OID, args["c"], metadata, getParents,
+			get_children (OID, args["c"], args["l"], metadata, getParents,
 				collectproto, response, logout);
 		else if (!is_top(OID)) {
-			get_children (OID + ".pr", args["c"], metadata, getParents, 
+			get_children (OID + ".pr", args["c"], args["l"], metadata, getParents, 
 			collectproto, response, logout);
 			haschildren = true;
@@ -713,5 +713,5 @@
 		if (tabcount) pOID = parents[tabcount-1];
 		else pOID = OID;
-		get_info (pOID, args["c"], metadata, getParents, collectproto, response, logout);
+		get_info (pOID, args["c"], args["l"], metadata, getParents, collectproto, response, logout);
 
 		// get classifytype of this level
@@ -738,5 +738,5 @@
 		use_table = is_table_content (formatlistptr);
 
-		get_children (OID, args["c"], metadata, getParents, collectproto, response, logout);
+		get_children (OID, args["c"], args["l"], metadata, getParents, collectproto, response, logout);
 
 		ResultDocInfo_tarray::iterator thissibling = response.docInfo.begin();
Index: /trunk/gsdl/src/recpt/cgiutils.cpp
===================================================================
--- /trunk/gsdl/src/recpt/cgiutils.cpp	(revision 7431)
+++ /trunk/gsdl/src/recpt/cgiutils.cpp	(revision 7432)
@@ -117,6 +117,6 @@
   args.clear();
   
-  text_t::iterator here = argstr.begin();
-  text_t::iterator end = argstr.end();
+  text_t::const_iterator here = argstr.begin();
+  text_t::const_iterator end = argstr.end();
   text_t key, value;
   
@@ -544,7 +544,7 @@
     char *n = name.getcstr();
     char *v = getenv(n);
-    delete n;
+    delete []n;
     if (v != NULL) return v;
-    return "";
+    return g_EmptyText;
 
   } else return fcgienv[name];
Index: /trunk/gsdl/src/recpt/documentaction.cpp
===================================================================
--- /trunk/gsdl/src/recpt/documentaction.cpp	(revision 7431)
+++ /trunk/gsdl/src/recpt/documentaction.cpp	(revision 7432)
@@ -297,5 +297,5 @@
       // get metadata for parent document
       get_top (args["d"], top);
-      if (get_info (top, args["c"], metadata, false, collectproto, filt_response, logout)) {
+      if (get_info (top, args["c"], args["l"], metadata, false, collectproto, filt_response, logout)) {
 	text_t url = filt_response.docInfo[0].metadata["URL"].values[0];
 	
@@ -571,5 +571,5 @@
 	metadata.insert ("mdtype"); // in case there is a datelist
 	bool getParents = false;
-	get_children ("", collection, metadata, getParents, collectproto, response, logout);
+	get_children ("", collection, args["l"], metadata, getParents, collectproto, response, logout);
 	
 	bool has_search_button = true;
@@ -608,5 +608,5 @@
   recptproto *collectproto = protos->getrecptproto (args["c"], logout);
 
-  if (get_info (inlink, args["c"], metadata, false, collectproto, response, logout)) {
+  if (get_info (inlink, args["c"], args["l"], metadata, false, collectproto, response, logout)) {
     if (!response.docInfo[0].metadata["section"].values[0].empty()) {
       outlink = "_httpdocument_&d=" + response.docInfo[0].metadata["section"].values[0];
@@ -631,5 +631,5 @@
       collectproto = protos->getrecptproto (*col_here, logout);
       
-      if (get_info (inlink, *col_here, metadata, false, collectproto, response, logout)) {
+      if (get_info (inlink, *col_here, args["l"], metadata, false, collectproto, response, logout)) {
 	if (!response.docInfo[0].metadata["section"].values[0].empty()) {
 	  outlink = "_httpdocument_&c=" + *col_here + "&d=" +
@@ -786,5 +786,5 @@
        //related documents in a vertical list. This is the default format.
 
-       if (get_info (arg_d, collection, metadata, options, false, collectproto, response, logout)) 
+       if (get_info (arg_d, collection, args["l"], metadata, options, false, collectproto, response, logout)) 
 	 relation += get_related_docs(collection, collectproto, response.docInfo[0], logout);
        
@@ -796,5 +796,5 @@
   
     // get metadata for this document and it's parents
-    if (get_info (arg_d, collection, metadata, options, 
+    if (get_info (arg_d, collection, args["l"], metadata, options, 
 		  true, collectproto, response, logout)) {
 
@@ -856,5 +856,5 @@
       metadata.insert ("parameters");
 
-      if (get_info (classtop, collection, metadata, false, collectproto, response, logout)) {
+      if (get_info (classtop, collection, args["l"], metadata, false, collectproto, response, logout)) {
 	  
 	text_t &title = response.docInfo[0].metadata["Title"].values[0];
@@ -1127,5 +1127,5 @@
   }
     
-  if (get_info (OID, collection, metadata, getParents, collectproto, inforesponse, logout)) {
+  if (get_info (OID, collection, args["l"], metadata, getParents, collectproto, inforesponse, logout)) {
     int hastxt = inforesponse.docInfo[0].metadata["hastxt"].values[0].getint();
     int haschildren = inforesponse.docInfo[0].metadata["haschildren"].values[0].getint();
@@ -1152,5 +1152,5 @@
       if (args["d"].empty()) is_classify = true;
 
-      get_contents (exOID, is_classify, metadata, collection, 
+      get_contents (exOID, is_classify, metadata, collection, args["l"], 
 		    collectproto, inforesponse, logout);
 	
@@ -1218,5 +1218,5 @@
   // get info on current section
   metadata.insert("haschildren");
-  if (!get_info(arg_d, args["c"], metadata, false, collectproto, response, logout)) {
+  if (!get_info(arg_d, args["c"], args["l"], metadata, false, collectproto, response, logout)) {
     logout << "error 1 in documentaction::set_arrow_macros\n";
     return;
@@ -1229,5 +1229,5 @@
   text_t thisoid = arg_d;
   while (parentcount > 0) {
-    get_children (get_parent(thisoid), args["c"], metadata, false, 
+    get_children (get_parent(thisoid), args["c"], args["l"], metadata, false, 
 		  collectproto, response, logout);
     ResultDocInfo_tarray::iterator this_sibling = response.docInfo.begin();
@@ -1242,5 +1242,5 @@
 	  // down to the last descendant
 	  while (section_has_children) {
-	    get_children (previous_sibling, args["c"], metadata, false, 
+	    get_children (previous_sibling, args["c"], args["l"], metadata, false, 
 			  collectproto, presponse, logout);
 	    if (!presponse.docInfo.empty()) {
Index: /trunk/gsdl/src/recpt/formattools.cpp
===================================================================
--- /trunk/gsdl/src/recpt/formattools.cpp	(revision 7431)
+++ /trunk/gsdl/src/recpt/formattools.cpp	(revision 7432)
@@ -405,5 +405,5 @@
 
   //get the information associated with the metadata for current doc
-  if (get_info (docinfo.OID, collection, metadata, 
+  if (get_info (docinfo.OID, collection, "", metadata, 
 		false, collectproto, response, logout)) {
     
@@ -437,5 +437,5 @@
 	   
 	//get the information associated with the metadata for related doc
-	if (get_info (document_OID, document_collection, metadata,
+	if (get_info (document_OID, document_collection, "", metadata,
 		      false, collectproto, response, logout)) {
 	  
@@ -1296,5 +1296,5 @@
 	  
 	 // retrieve metadata
-	 get_info(docinfo.OID, collection, request.fields, request.getParents,
+	 get_info(docinfo.OID, collection, "", request.fields, request.getParents,
 		  collectproto, response, logout);
 	 
Index: /trunk/gsdl/src/recpt/gsdl_modules_cfg.h
===================================================================
--- /trunk/gsdl/src/recpt/gsdl_modules_cfg.h	(revision 7431)
+++ /trunk/gsdl/src/recpt/gsdl_modules_cfg.h	(revision 7432)
@@ -52,13 +52,7 @@
 #define GSDL_USE_AUTHEN_ACTION
 #define GSDL_USE_BROWSE_ACTION
-#undef  GSDL_USE_CL_DISPLAY_ACTION
 #define GSDL_USE_COLLECTOR_ACTION
-#undef  GSDL_USE_COURSES_ACTION
-#undef  GSDL_USE_DIR_BROWSE_ACTION
-#undef  GSDL_USE_EXPORT_ACTION
 #define GSDL_USE_EXTLINK_ACTION
-#undef  GSDL_USE_GENERATOR_ACTION
-#undef  GSDL_USE_INDEX_BROWSE_ACTION
-#define GSDL_USE_LANG_ACTION
+#undef  GSDL_USE_LANG_ACTION
 #define GSDL_USE_PHIND_ACTION
 #define GSDL_USE_PING_ACTION
@@ -66,4 +60,12 @@
 #define GSDL_USE_TIP_ACTION
 #define GSDL_USE_USERS_ACTION
+
+#undef  GSDL_USE_CL_DISPLAY_ACTION
+#undef  GSDL_USE_COURSES_ACTION
+#undef  GSDL_USE_DIR_BROWSE_ACTION
+#undef  GSDL_USE_EXPORT_ACTION
+#undef  GSDL_USE_GENERATOR_ACTION
+#undef  GSDL_USE_INDEX_BROWSE_ACTION
+
 
 //BROWSER MODULES
Index: /trunk/gsdl/src/recpt/historydb.cpp
===================================================================
--- /trunk/gsdl/src/recpt/historydb.cpp	(revision 7431)
+++ /trunk/gsdl/src/recpt/historydb.cpp	(revision 7432)
@@ -252,5 +252,5 @@
     FilterResponse_t response;
     
-    get_info("collection", collect, metadata, false, collectproto, response, logout);
+    get_info("collection", collect, args["l"], metadata, false, collectproto, response, logout);
     text_t index = response.docInfo[0].metadata[argsinfo["h"]].values[0];
     if (!index.empty()) {
Index: /trunk/gsdl/src/recpt/hlistbrowserclass.cpp
===================================================================
--- /trunk/gsdl/src/recpt/hlistbrowserclass.cpp	(revision 7431)
+++ /trunk/gsdl/src/recpt/hlistbrowserclass.cpp	(revision 7432)
@@ -75,5 +75,5 @@
     OIDs.push_back (OID + ".fc");
 
-    get_info (OIDs, args["c"], metadata, false, collectproto, response, logout);
+    get_info (OIDs, args["c"], args["l"], metadata, false, collectproto, response, logout);
 
     OID = response.docInfo[1].OID;
@@ -99,5 +99,5 @@
   FilterResponse_t response;
   text_t &arg_cl = args["cl"];
-  get_children (section.OID + ".pr", args["c"], metadata, getParents, 
+  get_children (section.OID + ".pr", args["c"], args["l"], metadata, getParents, 
 		collectproto, response, logout);
 
Index: /trunk/gsdl/src/recpt/hlistbrowserclass.h
===================================================================
--- /trunk/gsdl/src/recpt/hlistbrowserclass.h	(revision 7431)
+++ /trunk/gsdl/src/recpt/hlistbrowserclass.h	(revision 7432)
@@ -29,4 +29,5 @@
 
 #include "browserclass.h"
+#include "receptionist.h"
 
 class hlistbrowserclass : public browserclass {
@@ -36,4 +37,6 @@
   hlistbrowserclass ();
   virtual ~hlistbrowserclass ();
+
+  void set_receptionist(receptionist *therecpt) {recpt=therecpt;}
 
   // returns the name that specifies the browserclass type
@@ -61,4 +64,6 @@
 				    outconvertclass &outconvert, ostream &textout, ostream &logout);
 
+protected:
+  receptionist *recpt;
 };
 
Index: /trunk/gsdl/src/recpt/librarymain.cpp
===================================================================
--- /trunk/gsdl/src/recpt/librarymain.cpp	(revision 7431)
+++ /trunk/gsdl/src/recpt/librarymain.cpp	(revision 7432)
@@ -24,6 +24,8 @@
  *********************************************************************/
 
+#include "gsdl_modules_cfg.h"
 #include "receptionist.h"
 #include "cgiwrapper.h"
+#include "recptconfig.h"
 #include "fileutil.h"
 #include "nullproto.h"
@@ -53,9 +55,38 @@
 #include "usersaction.h"
 #include "extlinkaction.h"
+
+#ifdef GSDL_USE_EXPORT_ACTION
+#include "exportaction.h"
+#endif
+
+#ifdef GSDL_USE_CL_DISPLAY_ACTION
+#include "cldisplayaction.h"
+#endif
+
+#ifdef GSDL_USE_COURSES_ACTION
+#include "coursesaction.h"
+#endif
+
+#ifdef GSDL_USE_COMPOSITION_ACTION
+#include "compositionaction.h"
+#endif
+
+#ifdef GSDL_USE_INDEX_BROWSE_ACTION
+#include "indexbrowseaction.h"
+#endif
+
+#ifdef GSDL_USE_DIR_BROWSE_ACTION
+#include "dirbrowseaction.h"
+#endif
+
+#ifdef GSDL_USE_GENERATOR_ACTION
+#include "generatoraction.h"
+#endif
+
 #include "tipaction.h"
 #include "collectoraction.h"
 #include "browseaction.h"
 #include "phindaction.h"
-#if defined(USE_LANGACTION)
+#if defined(GSDL_USE_LANG_ACTION)
 #include "langaction.h"
 #endif
@@ -69,4 +100,14 @@
 #include "htmlbrowserclass.h"
 #include "phindbrowserclass.h"
+
+#ifdef GSDL_USE_CLASSIFIER_BROWSER
+//classifier browsers
+
+#include "treeclassifierbrowserclass.h"
+#ifdef GSDL_USE_TREE_EX_CLASSIFIER_BROWSER
+#include "treeexclassifierbrowserclass.h"
+#endif
+
+#endif //GSDL_USE_CLASSIFIER_BROWSER
 
 int main () {
@@ -113,80 +154,128 @@
 #endif
 
+#ifdef GSDL_USE_TIP_ACTION
   // the list of actions. Note: these actions will become invalid
-  // at the end of this function.
-  tipaction atipaction;
-  recpt.add_action (&atipaction);
-
-  statusaction astatusaction;
-  astatusaction.set_receptionist (&recpt);
-  recpt.add_action (&astatusaction);
-
-  pageaction apageaction;
-  apageaction.set_receptionist (&recpt);
-  recpt.add_action (&apageaction);
-
-  pingaction apingaction;
-  recpt.add_action (&apingaction);
-
-  queryaction aqueryaction;
-  aqueryaction.set_receptionist (&recpt);
-  recpt.add_action (&aqueryaction);
-
-  documentaction adocumentaction;
-  adocumentaction.set_receptionist (&recpt);
-  recpt.add_action (&adocumentaction);
-
-  usersaction ausersaction;
-  recpt.add_action (&ausersaction);
-
-  extlinkaction anextlinkaction;
-  recpt.add_action (&anextlinkaction);
-
-  authenaction aauthenaction;
-  aauthenaction.set_receptionist(&recpt);
-  recpt.add_action (&aauthenaction);
-
-  collectoraction acollectoraction;
-  acollectoraction.set_receptionist (&recpt);
-  recpt.add_action(&acollectoraction);
-
-  browseaction abrowseaction;
-  abrowseaction.set_receptionist (&recpt);
-  recpt.add_action(&abrowseaction);
-
-  phindaction aphindaction;
-  recpt.add_action(&aphindaction);
-
-#if defined(USE_LANGACTION)
-  langaction alangaction;
-  alangaction.set_receptionist(&recpt);
-  recpt.add_action(&alangaction);
+  // at the end of this function. We will clean them.
+  recpt.add_action (new tipaction());
+#endif
+
+#ifdef GSDL_USE_STATUS_ACTION
+  statusaction *astatusaction = new statusaction();
+  astatusaction->set_receptionist (&recpt);
+  recpt.add_action (astatusaction);
+#endif
+
+  pageaction *apageaction = new pageaction();
+  apageaction->set_receptionist (&recpt);
+  recpt.add_action (apageaction);
+
+#ifdef GSDL_USE_PING_ACTION
+  recpt.add_action (new pingaction());
+#endif
+
+  queryaction *aqueryaction = new queryaction();
+  aqueryaction->set_receptionist (&recpt);
+  recpt.add_action (aqueryaction);
+		
+  documentaction *adocumentaction = new documentaction();
+  adocumentaction->set_receptionist (&recpt);
+  recpt.add_action (adocumentaction);
+
+#ifdef GSDL_USE_USERS_ACTION
+  recpt.add_action (new usersaction());
+#endif
+
+#ifdef GSDL_USE_EXTLINK_ACTION
+  recpt.add_action (new extlinkaction());
+#endif
+		
+#ifdef GSDL_USE_AUTHEN_ACTION
+  authenaction *aauthenaction = new authenaction();
+  aauthenaction->set_receptionist(&recpt);
+  recpt.add_action (aauthenaction);
+#endif
+
+#ifdef GSDL_USE_COLLECTOR_ACTION
+  collectoraction *acollectoraction = new collectoraction();
+  acollectoraction->set_receptionist (&recpt);
+  recpt.add_action(acollectoraction);
+#endif
+
+#ifdef GSDL_USE_BROWSE_ACTION
+  browseaction *abrowseaction = new browseaction();
+  abrowseaction->set_receptionist (&recpt);
+  recpt.add_action(abrowseaction);
+#endif
+
+#ifdef GSDL_USE_PHIND_ACTION
+  recpt.add_action(new phindaction());
+#endif
+
+#ifdef GSDL_USE_LANG_ACTION
+  langaction *alangaction = new langaction();
+  alangaction->set_receptionist(&recpt);
+  recpt.add_action(alangaction);
 #endif
 
   // list of browsers
   vlistbrowserclass avlistbrowserclass;
+  avlistbrowserclass.set_receptionist(&recpt);
   recpt.add_browser (&avlistbrowserclass);
   recpt.setdefaultbrowser ("VList");
 
   hlistbrowserclass ahlistbrowserclass;
+  ahlistbrowserclass.set_receptionist(&recpt);
   recpt.add_browser (&ahlistbrowserclass);
 
+#ifdef GSDL_USE_DATELIST_BROWSER
   datelistbrowserclass adatelistbrowserclass;
   recpt.add_browser (&adatelistbrowserclass);
+#endif
 
   invbrowserclass ainvbrowserclass;
   recpt.add_browser (&ainvbrowserclass);
 
+#ifdef GSDL_USE_PAGED_BROWSER
   pagedbrowserclass apagedbrowserclass;
   recpt.add_browser (&apagedbrowserclass);
-
+#endif
+
+#ifdef GSDL_USE_HTML_BROWSER
   htmlbrowserclass ahtmlbrowserclass;
   recpt.add_browser (&ahtmlbrowserclass);
-
+#endif
+
+#ifdef GSDL_USE_PHIND_BROWSER
   phindbrowserclass aphindbrowserclass;
   recpt.add_browser (&aphindbrowserclass);
+#endif
+
+#ifdef GSDL_USE_CLASSIFIER_BROWSER
+  //list of classifier browsers
+  CTreeClassifierBrowserClass *pTreeClassifierBrowser = new CTreeClassifierBrowserClass();
+  if (pTreeClassifierBrowser != NULL) {
+    recpt.GetClassifierBrowsers().AddBrowser(pTreeClassifierBrowser);
+    recpt.GetClassifierBrowsers().SetDefaultBrowser(pTreeClassifierBrowser->GetBrowserName());
+  }
+#ifdef GSDL_USE_TREE_EX_CLASSIFIER_BROWSER
+  CTreeExClassifierBrowserClass *pTreeExClassifierBrowser = new CTreeExClassifierBrowserClass();
+  if (pTreeExClassifierBrowser != NULL) {
+    recpt.GetClassifierBrowsers().AddBrowser(pTreeExClassifierBrowser);
+  }
+#endif //GSDL_USE_TREE_EX_CLASSIFIER_BROWSER
+#endif //GSDL_USE_CLASSIFIER_BROWSER
 
   cgiwrapper (recpt, "");
   delete cservers;
+
+  // clean up the actions
+  actionmapclass::iterator thisAction = recpt.get_actionmap_ptr()->begin();
+  actionmapclass::iterator endAction = recpt.get_actionmap_ptr()->begin();
+  while (thisAction != endAction) {
+    delete thisAction->second.a; thisAction->second.a = NULL;
+    ++thisAction;
+  }
+  thisAction = recpt.get_actionmap_ptr()->begin();
+  recpt.get_actionmap_ptr()->erase(thisAction, endAction);
   return 0;
 }
Index: /trunk/gsdl/src/recpt/pageaction.cpp
===================================================================
--- /trunk/gsdl/src/recpt/pageaction.cpp	(revision 7431)
+++ /trunk/gsdl/src/recpt/pageaction.cpp	(revision 7432)
@@ -220,5 +220,5 @@
 	      text_t collectionname = *collist_here;
 	      
-	      if (get_info ("collection", *collist_here, metadata, false, 
+	      if (get_info ("collection", *collist_here, "", metadata, false, 
 			    (*rprotolist_here).p, response, logout)) {
 		if (!lang.empty() && !response.docInfo[0].metadata["collectionname:"+lang].values[0].empty()) {
@@ -349,5 +349,5 @@
 	      text_t alt = collectionname;
 
-	      if (get_info ("collection", *collist_here, metadata, false, 
+	      if (get_info ("collection", *collist_here, "", metadata, false, 
 			    (*rprotolist_here).p, response, logout)) {
 		// get the "collectionname"
@@ -501,5 +501,5 @@
 	      text_t collectionname = *collist_here;
 
-	      if (get_info ("collection", *collist_here, metadata, false, 
+	      if (get_info ("collection", *collist_here, "", metadata, false, 
 			    (*rprotolist_here).p, response, logout)) {
 		if (!response.docInfo[0].metadata["collectionname"].values[0].empty()) {
@@ -760,8 +760,8 @@
     cinfo = recpt->get_collectinfo_ptr (collectproto, arg_c, logout);
     
-    disp.setmacro ("numdocs", "Global", cinfo->numDocs);
+    disp.setmacro ("numdocs", displayclass::defaultpackage, cinfo->numDocs);
     unsigned long current_time = time(NULL);
     unsigned long builddate = (current_time - cinfo->buildDate) / 86400;
-    disp.setmacro ("builddate", "Global", builddate);
+    disp.setmacro ("builddate", displayclass::defaultpackage, builddate);
     
     text_t numbytes;
@@ -773,5 +773,5 @@
       numbytes = (text_t)cinfo->numBytes + " bytes";
     }
-    disp.setmacro("numbytes", "Global", numbytes);
+    disp.setmacro("numbytes", displayclass::defaultpackage, numbytes);
   }
 
@@ -780,5 +780,5 @@
   if (arg_p == "about") {
     if (cinfo == NULL) {
-      disp.setmacro("cvariable", "Global", arg_c);
+      disp.setmacro("cvariable", displayclass::defaultpackage, arg_c);
       disp.setmacro("content", arg_p, "<p>_textbadcollection_<p>");
       return;
@@ -795,7 +795,7 @@
       check = cinfo->format.find("Usability");
       if(check != cinfo->format.end()){
-	disp.setmacro("usability","Global","_imageusab_");
-	disp.setmacro("usabinterface","Global",("_usab"+(*check).second+"_"));
-	disp.setmacro("usabilityscript", "Global", "_usabshowscript_");
+	disp.setmacro("usability", displayclass::defaultpackage, "_imageusab_");
+	disp.setmacro("usabinterface", displayclass::defaultpackage, ("_usab"+(*check).second+"_"));
+	disp.setmacro("usabilityscript", displayclass::defaultpackage, "_usabshowscript_");
       }
     }
@@ -821,5 +821,5 @@
   
     if (cinfo == NULL) {
-      disp.setmacro("cvariable", "Global", arg_c);
+      disp.setmacro("cvariable", displayclass::defaultpackage, arg_c);
       disp.setmacro("content", arg_p, "<p>_textbadcollection_<p>");
       return;
@@ -894,5 +894,5 @@
     //****************
     bool getParents = false;
-    get_children ("", args["c"], metadata, getParents, collectproto, response, logout);
+    get_children ("", args["c"], args["l"], metadata, getParents, collectproto, response, logout);
 
     int numbrowseoptions = response.docInfo.size();
Index: /trunk/gsdl/src/recpt/pagedbrowserclass.cpp
===================================================================
--- /trunk/gsdl/src/recpt/pagedbrowserclass.cpp	(revision 7431)
+++ /trunk/gsdl/src/recpt/pagedbrowserclass.cpp	(revision 7432)
@@ -69,5 +69,5 @@
     get_top (arg_d, top);
     metadata.insert ("Title");
-    get_children (top, args["c"], metadata, getParents, collectproto, response, logout);
+    get_children (top, args["c"], args["l"], metadata, getParents, collectproto, response, logout);
     ResultDocInfo_tarray::iterator dochere = response.docInfo.begin();
     ResultDocInfo_tarray::iterator docend = response.docInfo.end();
@@ -82,5 +82,5 @@
   } else if (!arg_d.empty() && is_top(arg_d)) { // if top level doc, check if not invisible
     metadata.insert("thistype");
-    if (get_info(arg_d, args["c"], metadata, getParents, collectproto, response, logout)) {
+    if (get_info(arg_d, args["c"], args["l"], metadata, getParents, collectproto, response, logout)) {
       text_t type = response.docInfo[0].metadata["thistype"].values[0];
       if (type=="Invisible") { // display first child
Index: /trunk/gsdl/src/recpt/querytools.cpp
===================================================================
--- /trunk/gsdl/src/recpt/querytools.cpp	(revision 7431)
+++ /trunk/gsdl/src/recpt/querytools.cpp	(revision 7432)
@@ -544,5 +544,5 @@
 
 
-void format_field_info(text_t & querystring, text_t &tag) {
+void format_field_info(text_t & querystring, const text_t &tag) {
 
   if (tag == "ZZ" || tag == "") {
Index: /trunk/gsdl/src/recpt/vlistbrowserclass.h
===================================================================
--- /trunk/gsdl/src/recpt/vlistbrowserclass.h	(revision 7431)
+++ /trunk/gsdl/src/recpt/vlistbrowserclass.h	(revision 7432)
@@ -29,4 +29,5 @@
 
 #include "browserclass.h"
+#include "receptionist.h"
 
 class vlistbrowserclass : public browserclass {
@@ -36,4 +37,6 @@
   vlistbrowserclass ();
   virtual ~vlistbrowserclass ();
+
+  void set_receptionist(receptionist *therecpt) {recpt=therecpt;}
 
   text_t get_browser_name ();
@@ -61,4 +64,6 @@
   virtual void get_link_icon (ResultDocInfo_t &section, cgiargsclass &args,
 			      const text_t &collink, text_t &link, text_t &icon);
+
+  receptionist *recpt;
 };
 
