Index: trunk/java-client/org/nzdl/gsdl/SimpleClient.java
===================================================================
--- trunk/java-client/org/nzdl/gsdl/SimpleClient.java	(revision 2177)
+++ trunk/java-client/org/nzdl/gsdl/SimpleClient.java	(revision 2178)
@@ -111,6 +111,9 @@
    */ 
   protected SimpleClient() {
-    nzdl = NzdlIORs.findIOR(null, URLFromCommandLine,
-			    IORFileName, IORFromCommandLine);
+    nzdl = NzdlIORs.createNzdlService(null, 
+				      System.getProperties(), 
+				      URLFromCommandLine,
+				      IORFileName, 
+				      IORFromCommandLine);
     if (nzdl == null)
       throw new Error("URK! unable to find an IOR...");
@@ -123,6 +126,9 @@
   SimpleClient(String [] args) {
     parseArgs(args);
-    nzdl = NzdlIORs.findIOR(args, URLFromCommandLine, 
-			    IORFileName, IORFromCommandLine);
+    nzdl = NzdlIORs.createNzdlService(args, 
+				      System.getProperties(), 
+				      URLFromCommandLine, 
+				      IORFileName, 
+				      IORFromCommandLine);
     if (nzdl == null)
       throw new Error("URK! unable to find an IOR...");
Index: trunk/java-client/org/nzdl/gsdl/SimpleGraphicalClient/SimpleGraphicalClient.java
===================================================================
--- trunk/java-client/org/nzdl/gsdl/SimpleGraphicalClient/SimpleGraphicalClient.java	(revision 2177)
+++ trunk/java-client/org/nzdl/gsdl/SimpleGraphicalClient/SimpleGraphicalClient.java	(revision 2178)
@@ -95,6 +95,9 @@
    */
     void init(String [] args)  {
-	nzdl = NzdlIORs.findIOR(null, null,
-				IORFileName, IORFromCommandLine);
+	nzdl = NzdlIORs.createNzdlService(args, 
+					  System.getProperties(), 
+					  null,
+					  IORFileName, 
+					  IORFromCommandLine);
 	if (nzdl == null)
 	    throw new Error("URK! unable to find an IOR...");
Index: trunk/java-client/org/nzdl/gsdl/service/Makefile
===================================================================
--- trunk/java-client/org/nzdl/gsdl/service/Makefile	(revision 2177)
+++ trunk/java-client/org/nzdl/gsdl/service/Makefile	(revision 2178)
@@ -25,4 +25,5 @@
           NzdlLogWrapper.class \
           NzdlDocSaveWrapper.class \
+          NzdlMultiWayWrapper.class \
           NzdlCacheWrapper.class
 
Index: trunk/java-client/org/nzdl/gsdl/service/NzdlCollectionInfo.java
===================================================================
--- trunk/java-client/org/nzdl/gsdl/service/NzdlCollectionInfo.java	(revision 2177)
+++ trunk/java-client/org/nzdl/gsdl/service/NzdlCollectionInfo.java	(revision 2178)
@@ -69,5 +69,6 @@
    */
   public String getHTTPPrefix() {
-    return NzdlCorbaFactory.toString( m_Info.httpprefix) ;
+    //return m_Info.httpprefix.text.toString();
+     return NzdlCorbaFactory.toString( m_Info.httpprefix ) ;
   }
 
@@ -76,5 +77,12 @@
    */
   public String getHTTPDomain() {
-    return NzdlCorbaFactory.toString( m_Info.httpdomain) ;
+    return NzdlCorbaFactory.toString( m_Info.httpdomain ) ;
+  }
+
+  /**
+   * Returns reseptionist
+   */
+  public String getReceptionist() {
+    return NzdlCorbaFactory.toString( m_Info.receptionist ) ;
   }
 
Index: trunk/java-client/org/nzdl/gsdl/service/NzdlWrapper.java
===================================================================
--- trunk/java-client/org/nzdl/gsdl/service/NzdlWrapper.java	(revision 2177)
+++ trunk/java-client/org/nzdl/gsdl/service/NzdlWrapper.java	(revision 2178)
@@ -51,6 +51,4 @@
    */
   public NzdlWrapper(NzdlService service) {
-    if (service == null)
-      throw new Error("null service");
     this.service = service;
   }
Index: trunk/java-client/org/nzdl/gsdl/util/NzdlCorbaFactory.java
===================================================================
--- trunk/java-client/org/nzdl/gsdl/util/NzdlCorbaFactory.java	(revision 2177)
+++ trunk/java-client/org/nzdl/gsdl/util/NzdlCorbaFactory.java	(revision 2178)
@@ -59,4 +59,5 @@
     return text.toString();
   }
+
 
   public static corbaComErrorHolder createComErrorHolder() {
Index: trunk/java-client/org/nzdl/gsdl/util/NzdlIORs.java
===================================================================
--- trunk/java-client/org/nzdl/gsdl/util/NzdlIORs.java	(revision 2177)
+++ trunk/java-client/org/nzdl/gsdl/util/NzdlIORs.java	(revision 2178)
@@ -44,4 +44,5 @@
 import java.util.Set;
 import java.util.Vector;
+import java.util.Hashtable;
 
 // local libraries
@@ -56,4 +57,5 @@
 import org.nzdl.gsdl.service.NzdlLogWrapper;
 import org.nzdl.gsdl.service.NzdlDocSaveWrapper;
+import org.nzdl.gsdl.service.NzdlMultiWayWrapper;
 
 /**
@@ -108,4 +110,6 @@
   /** Are we saving documents ? */
   static public boolean saveDocs = true;
+  /** Are we trying for multiple servers ? */
+  static public boolean doMultiple = true;
 
   /**
@@ -194,4 +198,5 @@
    */
   public static NzdlService findIOR(String [] _args,
+				    Properties _props, 
 				    String _URL,
 				    String _filename,
@@ -235,4 +240,66 @@
     }
     return client;
+  }
+
+  /**
+   * Connect for as many servers as possible
+   * @param _args the command line arguments
+   * @param _URL a URL to look for an IOR in
+   * @param _filename a local filename to look for an IOR in
+   * @param _IOR a string to look for an IOR in
+   * @see org.omg.CORBA.ORB
+   */
+  public static Hashtable findIORs(String [] _args,
+				   Properties _props, 
+				   String _URL,
+				   String _filename,
+				   String _IOR)  {
+    // the object we're filling ...
+    Hashtable result = new Hashtable();
+
+    // read our prevously seed IORs ...
+    String IOR = null;
+    NzdlService client = null;
+      
+    // try a URL from the command line
+    if ( _URL != null) {
+      IOR = NzdlIORs.getIORfromURL(_URL);
+      client = attemptToInitialise(_args, null, IOR);
+      if (client != null)
+	result.put(IOR,client);
+    }
+    
+    // try an IOR from the command line
+    if (_IOR != null) {
+      IOR = NzdlIORs.registerIOR(_IOR);
+      client = attemptToInitialise(_args, null, IOR);
+      if (client != null)
+	result.put(IOR,client);
+    }
+    
+    // try an IOR from a file (the filename may have been 
+    // given from the commandline
+    
+    IOR = NzdlIORs.getIORfromFile(_filename);
+    client = attemptToInitialise(_args, null, IOR);
+    if (client != null)
+      result.put(IOR,client);
+
+    
+    // try the compiled-in URLs
+    for (int i=0;( i<urlsCompiledIn.length && client == null );i++) {
+      IOR = NzdlIORs.getIORfromURL(urlsCompiledIn[i]);
+      client = attemptToInitialise(_args, null,IOR);
+      if (client != null)
+	result.put(IOR,client);
+    }
+    
+    // the knownIORs is the last resort
+    IOR = NzdlIORs.getFirstValid();
+    client = attemptToInitialise(_args, null, IOR);
+    if (client != null)
+      result.put(IOR,client);
+    
+    return result;    
   }
 
@@ -328,5 +395,5 @@
     String ior = null;
     if (file == null || file.equals(""))
-      return "";
+      file = IORFileName;
     file = file.trim();
     try  {
@@ -395,10 +462,28 @@
       return null;
     }
+    return nzdl;
+  }
+  
+  static public NzdlService createNzdlService(String [] _args, 
+					      Properties _props, 
+					      String _URL,
+					      String _filename,
+					      String _IOR) {
+    if (_props == null)
+      _props = System.getProperties();
+
+    NzdlService nzdl = null;
+    
+    if (doMultiple)
+      nzdl = new NzdlMultiWayWrapper(_args,_props,_URL,_filename,_IOR);
+    else
+      nzdl = findIOR(_args,_props,_URL,_filename,_IOR);
+    
     if (saveDocs)
       nzdl = new NzdlDocSaveWrapper(nzdl);
-
+    
     if (logAfter)
       nzdl = new NzdlLogWrapper(nzdl, "log.file.after.cache", "AFTER: ");
-
+    
     if (caching)
       nzdl = new NzdlCacheWrapper(nzdl);
@@ -406,7 +491,8 @@
     if (logBefore)
       nzdl = new NzdlLogWrapper(nzdl, "log.file.before.cache", "BEFORE: ");
+    
     return nzdl;
   }
-  
+    
   /**
    * Write the System properties to a file called "System.properties" in
