Index: /main/trunk/greenstone3/src/java/org/greenstone/gsdl3/collection/Collection.java
===================================================================
--- /main/trunk/greenstone3/src/java/org/greenstone/gsdl3/collection/Collection.java	(revision 21311)
+++ /main/trunk/greenstone3/src/java/org/greenstone/gsdl3/collection/Collection.java	(revision 21312)
@@ -61,5 +61,5 @@
      *  the OAIPMH serviceRack 
      */
-    protected Element service_rack_list = null;
+    //protected Element service_rack_list = null;
     
     protected XMLTransformer transformer = null;
@@ -108,10 +108,7 @@
 	findAndLoadInfo(coll_config_xml, build_config_xml);
 	
-	// now do the services	
-	Element service_list = (Element)GSXML.getChildByTagName(build_config_xml, GSXML.SERVICE_CLASS_ELEM+GSXML.LIST_MODIFIER);
-	configureServiceRack(service_list, coll_config_xml);
-
-	this.service_rack_list = service_list;
-  
+	// now do the services
+	configureServiceRacks(coll_config_xml, build_config_xml);
+
 	return true;
 	
@@ -133,12 +130,5 @@
      */
     public boolean hasOAI() {
-      if (service_rack_list == null) return false;  
-      Element oai_service_rack = GSXML.getNamedElement(service_rack_list, GSXML.SERVICE_CLASS_ELEM,
-                            OAIXML.NAME, OAIXML.OAIPMH);
-      if (oai_service_rack == null) {
-        logger.info("No oai for collection: " + this.cluster_name);
-        return false;
-      }
-      return true;//oai_service_rack == null;
+      return has_oai;
     }
     /** 
@@ -179,5 +169,5 @@
 	}
   
-  lastmodified = build_config_file.lastModified();
+	lastmodified = build_config_file.lastModified();
   
 	return build_config_elem;
@@ -244,5 +234,29 @@
     }
 
-    protected boolean resolveMacros(Element display_list) {
+  protected boolean configureServiceRacks(Element coll_config_xml, 
+					  Element build_config_xml){
+    clearServices();
+    Element service_list = (Element)GSXML.getChildByTagName(build_config_xml, GSXML.SERVICE_CLASS_ELEM+GSXML.LIST_MODIFIER);
+    configureServiceRack(service_list, coll_config_xml);
+    
+    // Check for oai
+    Element oai_service_rack = GSXML.getNamedElement(service_list, GSXML.SERVICE_CLASS_ELEM, OAIXML.NAME, OAIXML.OAIPMH);
+    if (oai_service_rack == null) {
+	  has_oai = false;
+	  logger.info("No oai for collection: " + this.cluster_name);
+	  
+    } else {
+      has_oai = true;
+    }
+    
+    // collection Config may also contain manually added service racks
+    service_list = (Element)GSXML.getChildByTagName(coll_config_xml, GSXML.SERVICE_CLASS_ELEM+GSXML.LIST_MODIFIER);
+    if (service_list != null) {
+      configureServiceRack(service_list, coll_config_xml);
+    }
+    return true;
+  }
+  
+  protected boolean resolveMacros(Element display_list) {
 	if (display_list==null) return false;
 	NodeList displaynodes = display_list.getElementsByTagName(GSXML.DISPLAY_TEXT_ELEM);
@@ -269,12 +283,10 @@
 	Element build_config_elem = loadBuildConfigFile();
 	if (coll_config_elem == null||build_config_elem == null) {
-	    // wont be able to do any of teh requests
+	    // wont be able to do any of the requests
 	    return false;
 	}    
 	
 	if (subset.equals(GSXML.SERVICE_ELEM+GSXML.LIST_MODIFIER)) {
-	    Element service_rack_list = (Element)GSXML.getChildByTagName(build_config_elem, GSXML.SERVICE_CLASS_ELEM+GSXML.LIST_MODIFIER);
-	    
-	    return configureServiceRack(service_rack_list, coll_config_elem);
+	  return configureServiceRacks(coll_config_elem, build_config_elem);
 	} 
 
Index: /main/trunk/greenstone3/src/java/org/greenstone/gsdl3/collection/ServiceCluster.java
===================================================================
--- /main/trunk/greenstone3/src/java/org/greenstone/gsdl3/collection/ServiceCluster.java	(revision 21311)
+++ /main/trunk/greenstone3/src/java/org/greenstone/gsdl3/collection/ServiceCluster.java	(revision 21312)
@@ -205,4 +205,6 @@
 	
 	// do the service racks
+	// empty the service map in case this is a reconfigure
+	clearServices();
 	Element service_rack_list = (Element)GSXML.getChildByTagName(service_cluster_info, GSXML.SERVICE_CLASS_ELEM+GSXML.LIST_MODIFIER);
 	if (service_rack_list == null) {
@@ -274,5 +276,10 @@
 	return true;
     }
-    
+
+    
+  protected void clearServices() {
+    service_map.clear();
+    this.service_list = this.doc.createElement(GSXML.SERVICE_ELEM+GSXML.LIST_MODIFIER);
+  }
     /** creates and configures all the services - extra_info is some more xml 
 that is passed to teh service  - eg used for coll config files for Collection
@@ -280,8 +287,4 @@
     protected boolean configureServiceRack(Element service_rack_list, 
 					   Element extra_info) {
-
-	// empty the service map in case this is a reconfigure
-	service_map.clear();
-	this.service_list = this.doc.createElement(GSXML.SERVICE_ELEM+GSXML.LIST_MODIFIER);
 
 	// create all the services
@@ -607,5 +610,5 @@
 	if (subset.equals(GSXML.SERVICE_ELEM+GSXML.LIST_MODIFIER)) {
 	    Element service_rack_list = (Element)GSXML.getChildByTagName(cluster_config_elem, GSXML.SERVICE_CLASS_ELEM+GSXML.LIST_MODIFIER);
-	    
+	    clearServices();
 	    return configureServiceRack(service_rack_list, null);
 	} else if (subset.equals(GSXML.METADATA_ELEM+GSXML.LIST_MODIFIER)) {
