Refactored to use modern Java syntax and idiom
diff --git a/yoko-core/src/main/java/org/apache/yoko/orb/OB/Client.java b/yoko-core/src/main/java/org/apache/yoko/orb/OB/Client.java
index 5cc1af9..3cab63b 100644
--- a/yoko-core/src/main/java/org/apache/yoko/orb/OB/Client.java
+++ b/yoko-core/src/main/java/org/apache/yoko/orb/OB/Client.java
@@ -119,7 +119,7 @@
     //
     // Checks whether this client is equal to another client
     //
-    public abstract boolean equal(Client clt);
+    public abstract boolean matches(Client clt);
 
     //
     // Force connection establishment
diff --git a/yoko-core/src/main/java/org/apache/yoko/orb/OB/ClientManager.java b/yoko-core/src/main/java/org/apache/yoko/orb/OB/ClientManager.java
index 20e6405..644ba01 100644
--- a/yoko-core/src/main/java/org/apache/yoko/orb/OB/ClientManager.java
+++ b/yoko-core/src/main/java/org/apache/yoko/orb/OB/ClientManager.java
@@ -16,16 +16,14 @@
  */
 
 package org.apache.yoko.orb.OB;
- 
-import java.util.logging.Level;
+
+import java.util.Arrays;
+import java.util.Vector;
 import java.util.logging.Logger;
 
-import org.apache.yoko.orb.OB.CONNECTION_REUSE_POLICY_ID;
-import org.apache.yoko.orb.OB.ConnectionReusePolicy;
-import org.apache.yoko.orb.OB.ConnectionReusePolicyHelper;
-import org.apache.yoko.orb.OB.PROTOCOL_POLICY_ID;
-import org.apache.yoko.orb.OB.ProtocolPolicy;
-import org.apache.yoko.orb.OB.ProtocolPolicyHelper;
+import org.apache.yoko.orb.OCI.ConnectorInfo;
+import org.omg.CORBA.Policy;
+import org.omg.IOP.IOR;
 import org.omg.PortableServer.POAManagerPackage.State;
 
 public final class ClientManager {
@@ -40,12 +38,12 @@
     //
     // All clients
     //
-    private java.util.Vector allClients_ = new java.util.Vector();
+    private Vector<Client> allClients_ = new Vector<>();
 
     //
     // All reusable clients
     //
-    private java.util.Vector reusableClients_ = new java.util.Vector();
+    private Vector<Client> reusableClients_ = new Vector<>();
 
     //
     // The concurrency model with which new Clients are created
@@ -84,11 +82,7 @@
         //
         // Destroy all clients
         //
-        java.util.Enumeration e = allClients_.elements();
-        while (e.hasMoreElements()) {
-            Client client = (Client) e.nextElement();
-            client.destroy(false);
-        }
+        for (Client c : allClients_) c.destroy(false);
 
         //
         // Reset internal data
@@ -114,8 +108,7 @@
     //
     // Get a list of ClientProfilePairs for an IOR and a list of policies
     //
-    public synchronized java.util.Vector getClientProfilePairs(
-            org.omg.IOP.IOR ior, org.omg.CORBA.Policy[] policies) {
+    public synchronized Vector<ClientProfilePair> getClientProfilePairs(IOR ior, Policy[] policies) {
         Assert._OB_assert(ior.type_id != null);
 
         //
@@ -135,18 +128,15 @@
                     org.apache.yoko.orb.OB.MinorCodes.MinorORBDestroyed,
                     org.omg.CORBA.CompletionStatus.COMPLETED_NO);
         }
-            
+
 
         //
         // Find out whether private clients are requested
         //
         boolean privateClients = false;
-        for (int i = 0; i < policies.length; i++) {
-            if (policies[i].policy_type() == CONNECTION_REUSE_POLICY_ID.value) {
-                ConnectionReusePolicy p = ConnectionReusePolicyHelper.narrow(policies[i]);
-                if (p.value() == false) {
-                    privateClients = true;
-                }
+        for (Policy pol : policies) {
+            if (pol.policy_type() == CONNECTION_REUSE_POLICY_ID.value) {
+                privateClients = !!!(ConnectionReusePolicyHelper.narrow(pol).value());
                 break;
             }
         }
@@ -155,9 +145,9 @@
         // Get the protocol policy, if any
         //
         ProtocolPolicy protocolPolicy = null;
-        for (int i = 0; i < policies.length; i++) {
-            if (policies[i].policy_type() == PROTOCOL_POLICY_ID.value) {
-                protocolPolicy = ProtocolPolicyHelper.narrow(policies[i]);
+        for (Policy pol : policies) {
+            if (pol.policy_type() == PROTOCOL_POLICY_ID.value) {
+                protocolPolicy = ProtocolPolicyHelper.narrow(pol);
                 break;
             }
         }
@@ -166,44 +156,39 @@
         // check whether the BiDir policy is enabled
         //
         boolean enableBidir = false;
-        for (int i = 0; i < policies.length; i++) {
-            if (policies[i].policy_type() == org.omg.BiDirPolicy.BIDIRECTIONAL_POLICY_TYPE.value) {
+        for (Policy pol : policies) {
+            if (pol.policy_type() == org.omg.BiDirPolicy.BIDIRECTIONAL_POLICY_TYPE.value) {
                 org.omg.BiDirPolicy.BidirectionalPolicy p = org.omg.BiDirPolicy.BidirectionalPolicyHelper
-                        .narrow(policies[i]);
+                        .narrow(pol);
                 if (p.value() == org.omg.BiDirPolicy.BOTH.value) {
                     enableBidir = true;
                 }
             }
         }
 
-        java.util.Vector pairs = new java.util.Vector();
+        Vector<ClientProfilePair> pairs = new Vector<>();
 
         //
         // First try to create CollocatedClients
         //
         org.apache.yoko.orb.OBPortableServer.POAManagerFactory pmFactory = orbInstance_.getPOAManagerFactory();
-        org.omg.PortableServer.POAManager[] managers = pmFactory.list();
-
-        for (int i = 0; i < managers.length; i++) {
+        for (org.omg.PortableServer.POAManager mgr : pmFactory.list()) {
             try {
-                org.apache.yoko.orb.OCI.Acceptor[] acceptors = ((org.apache.yoko.orb.OBPortableServer.POAManager) managers[i])
-                        .get_acceptors();
-
                 boolean local = false;
-                for (int j = 0; j < acceptors.length && !local; j++) {
-                    org.apache.yoko.orb.OCI.ProfileInfo[] localProfileInfos = acceptors[j].get_local_profiles(ior);
+                for (org.apache.yoko.orb.OCI.Acceptor acceptor : ((org.apache.yoko.orb.OBPortableServer.POAManager)mgr).get_acceptors()) {
+                    org.apache.yoko.orb.OCI.ProfileInfo[] localProfileInfos = acceptor.get_local_profiles(ior);
                     if (localProfileInfos.length > 0) {
                         local = true;
                     }
                 }
 
-                // we can get into hang situations if we return a collocated server for an 
-                // inactive POA.  This can happen with the RootPOA, which is generally not activated. 
-                if (local && managers[i].get_state() == State.ACTIVE) {
+                // we can get into hang situations if we return a collocated server for an
+                // inactive POA.  This can happen with the RootPOA, which is generally not activated.
+                if (local && mgr.get_state() == State.ACTIVE) {
                     //
                     // Retrieve the CollocatedServer from the POAManager
                     //
-                    org.apache.yoko.orb.OBPortableServer.POAManager_impl manager = (org.apache.yoko.orb.OBPortableServer.POAManager_impl) managers[i];
+                    org.apache.yoko.orb.OBPortableServer.POAManager_impl manager = (org.apache.yoko.orb.OBPortableServer.POAManager_impl) mgr;
                     CollocatedServer collocatedServer = manager._OB_getCollocatedServer();
 
                     //
@@ -215,11 +200,10 @@
                     Client client = new CollocatedClient(collocatedServer, concModel_, conv);
                     allClients_.addElement(client);
 
-                    org.apache.yoko.orb.OCI.ProfileInfo[] profileInfos = client.getUsableProfiles(ior, policies);
-                    for (int j = 0; j < profileInfos.length; j++) {
+                    for (org.apache.yoko.orb.OCI.ProfileInfo profileInfo : client.getUsableProfiles(ior, policies)) {
                         ClientProfilePair pair = new ClientProfilePair();
                         pair.client = client;
-                        pair.profile = profileInfos[j];
+                        pair.profile = profileInfo;
                         pairs.addElement(pair);
                     }
 
@@ -227,8 +211,7 @@
                     // TODO: Introduce reusable CollocatedClients?
                     //
                 }
-            } catch (org.omg.PortableServer.POAManagerPackage.AdapterInactive ex) {
-                // Ignore
+            } catch (org.omg.PortableServer.POAManagerPackage.AdapterInactive ignored) {
             }
         }
 
@@ -237,8 +220,7 @@
         // clients which are usable for the given IOR and policies
         //
         if (!privateClients) {
-            for (int i = 0; i < reusableClients_.size(); i++) {
-                Client reusableClient = (Client) reusableClients_.elementAt(i);
+            for (Client reusableClient : reusableClients_) {
 
                 //
                 // Skip any client whose protocol is not present in the
@@ -246,19 +228,15 @@
                 //
                 if (protocolPolicy != null) {
                     org.apache.yoko.orb.OCI.ConnectorInfo info = reusableClient.connectorInfo();
-                    if (info != null) {
-                        if (!protocolPolicy.contains(info.id())) {
-                            continue;
-                        }
+                    if (info != null && !protocolPolicy.contains(info.id())) {
+                        continue;
                     }
                 }
 
-                org.apache.yoko.orb.OCI.ProfileInfo[] profileInfos = reusableClient
-                        .getUsableProfiles(ior, policies);
-                for (int j = 0; j < profileInfos.length; j++) {
+                for (org.apache.yoko.orb.OCI.ProfileInfo profileInfo : reusableClient.getUsableProfiles(ior, policies)) {
                     ClientProfilePair pair = new ClientProfilePair();
                     pair.client = reusableClient;
-                    pair.profile = profileInfos[j];
+                    pair.profile = profileInfo;
                     pairs.addElement(pair);
                 }
             }
@@ -267,30 +245,22 @@
         //
         // Finally, create new GIOPClients for all connectors we can get
         //
-        org.apache.yoko.orb.OCI.ConFactoryRegistry conFactoryRegistry = orbInstance_
-                .getConFactoryRegistry();
-        org.apache.yoko.orb.OCI.ConFactory[] factories = conFactoryRegistry
-                .get_factories();
-        for (int i = 0; i < factories.length; i++) {
-            org.apache.yoko.orb.OCI.Connector[] connectors = factories[i]
-                    .create_connectors(ior, policies);
-            for (int j = 0; j < connectors.length; j++) {
+        org.apache.yoko.orb.OCI.ConFactoryRegistry conFactoryRegistry = orbInstance_.getConFactoryRegistry();
+        for (org.apache.yoko.orb.OCI.ConFactory factory : conFactoryRegistry.get_factories()) {
+            for (org.apache.yoko.orb.OCI.Connector connector : factory.create_connectors(ior, policies)) {
                 //
                 // Skip any connector whose protocol is not present in the
                 // protocol list
                 //
-                if (protocolPolicy != null)
-                {
-                    if (!protocolPolicy.contains(connectors[j].id())) {
-                        continue;
-                    }
+                if (protocolPolicy != null && !protocolPolicy.contains(connector.id())) {
+                    continue;
                 }
 
                 //
                 // Get all usable profiles
                 //
-                org.apache.yoko.orb.OCI.ProfileInfo[] profileInfos = connectors[j].get_usable_profiles(ior, policies);
-                Assert._OB_assert(profileInfos.length >= 1);
+                org.apache.yoko.orb.OCI.ProfileInfo[] profileInfos = connector.get_usable_profiles(ior, policies);
+                Assert._OB_assert(profileInfos.length != 0);
 
                 //
                 // Create a new GIOPClient for each usable profile, and set
@@ -298,25 +268,23 @@
                 // clients that are equivalent to other clients we already
                 // have.
                 //
-                for (int k = 0; k < profileInfos.length; k++) {
-                    CodeConverters conv = CodeSetUtil.getCodeConverters(
-                            orbInstance_, profileInfos[k]);
+                for (org.apache.yoko.orb.OCI.ProfileInfo profileInfo: profileInfos) {
+                    CodeConverters conv = CodeSetUtil.getCodeConverters(orbInstance_, profileInfo);
 
-                    Client client = new GIOPClient(orbInstance_, connectors[j],
-                            concModel_, conv, enableBidir);
+                    Client newClient = new GIOPClient(orbInstance_, connector, concModel_, conv, enableBidir);
 
                     if (!pairs.isEmpty()) {
-                        int l;
+                        boolean matched = false;
 
-                        for (l = 0; l < pairs.size(); l++) {
-                            ClientProfilePair pair = (ClientProfilePair) pairs.elementAt(l);
-                            if (pair.client.equal(client)) {
+                        for (ClientProfilePair pair : pairs) {
+                            if (pair.client.matches(newClient)) {
+                                matched = true;
                                 break;
                             }
                         }
 
-                        if (l != pairs.size()) {
-                            client.destroy(false);
+                        if (matched) {
+                            newClient.destroy(false);
                             continue;
                         }
                     }
@@ -324,17 +292,15 @@
                     //
                     // Add the new client to the list of all clients
                     //
-                    allClients_.addElement(client);
+                    allClients_.addElement(newClient);
 
                     //
                     // Add client/profile pairs
                     //
-                    org.apache.yoko.orb.OCI.ProfileInfo[] clientProfileInfos = client
-                            .getUsableProfiles(ior, policies);
-                    for (int l = 0; l < clientProfileInfos.length; l++) {
+                    for (org.apache.yoko.orb.OCI.ProfileInfo clientProfileInfo : newClient.getUsableProfiles(ior, policies)) {
                         ClientProfilePair pair = new ClientProfilePair();
-                        pair.client = client;
-                        pair.profile = clientProfileInfos[l];
+                        pair.client = newClient;
+                        pair.profile = clientProfileInfo;
                         pairs.addElement(pair);
                     }
 
@@ -343,7 +309,7 @@
                     // client to the list of existing reusable clients
                     //
                     if (!privateClients) {
-                        reusableClients_.addElement(client);
+                        reusableClients_.addElement(newClient);
                     }
                 }
             }
@@ -359,15 +325,13 @@
         if (!pairs.isEmpty() && protocolPolicy != null) {
             String[] protocols = protocolPolicy.value();
 
-            java.util.Vector newPairs = new java.util.Vector();
+            Vector<ClientProfilePair> newPairs = new Vector<>();
 
             //
             // First, add any pairs whose clients do not have ConnectorInfo
             //
-            for (int i = 0; i < pairs.size(); i++) {
-                ClientProfilePair pair = (ClientProfilePair) pairs.elementAt(i);
-                org.apache.yoko.orb.OCI.ConnectorInfo info = pair.client.connectorInfo();
-                if (info == null) {
+            for (ClientProfilePair pair : pairs) {
+                if (pair.client.connectorInfo() == null) {
                     newPairs.addElement(pair);
                 }
             }
@@ -375,14 +339,11 @@
             //
             // Next, add the pairs in the order specified by the policy
             //
-            for (int i = 0; i < protocols.length; i++) {
-                for (int j = 0; j < pairs.size(); j++) {
-                    ClientProfilePair pair = (ClientProfilePair) pairs.elementAt(j);
-                    org.apache.yoko.orb.OCI.ConnectorInfo info = pair.client.connectorInfo();
-                    if (info != null) {
-                        if (protocols[i].equals(info.id())) {
-                            newPairs.addElement(pair);
-                        }
+            for (String protocol : protocols) {
+                for (ClientProfilePair pair : pairs) {
+                    ConnectorInfo info = pair.client.connectorInfo();
+                    if (info != null && protocol.equals(info.id())) {
+                        newPairs.addElement(pair);
                     }
                 }
             }
@@ -405,8 +366,7 @@
         //
         // Increment the usage count on all clients
         //
-        for (int i = 0; i < pairs.size(); i++) {
-            ClientProfilePair pair = (ClientProfilePair) pairs.elementAt(i);
+        for (ClientProfilePair pair : pairs) {
             pair.client.incUsage();
         }
         return pairs;
@@ -437,37 +397,21 @@
         boolean inUse = client.decUsage();
 
         if (!inUse) {
-            int i;
+            reusableClients_.remove(client);
 
-            for (i = 0; i < reusableClients_.size(); i++) {
-                Client c = (Client) reusableClients_.elementAt(i);
-                if (c == client) {
-                    reusableClients_.removeElementAt(i);
-                    break;
-                }
+            if (allClients_.remove(client)) {
+                client.destroy(terminate);
+            } else {
+                Assert._OB_assert("Release called on unknown client");
             }
-
-            for (i = 0; i < allClients_.size(); i++) {
-                Client c = (Client) allClients_.elementAt(i);
-                if (c == client) {
-                    client.destroy(terminate);
-                    allClients_.removeElementAt(i);
-                    return;
-                }
-            }
-
-            Assert._OB_assert("Release called on unknown client");
         }
     }
 
     public boolean equivalent(org.omg.IOP.IOR ior1, org.omg.IOP.IOR ior2) {
-        org.apache.yoko.orb.OCI.ConFactoryRegistry conFactoryRegistry = orbInstance_
-                .getConFactoryRegistry();
+        org.apache.yoko.orb.OCI.ConFactoryRegistry conFactoryRegistry = orbInstance_.getConFactoryRegistry();
 
-        org.apache.yoko.orb.OCI.ConFactory[] factories = conFactoryRegistry
-                .get_factories();
-        for (int i = 0; i < factories.length; i++) {
-            if (!factories[i].equivalent(ior1, ior2)) {
+        for (org.apache.yoko.orb.OCI.ConFactory factory : conFactoryRegistry.get_factories()) {
+            if (!!!factory.equivalent(ior1, ior2)) {
                 return false;
             }
         }
@@ -475,14 +419,6 @@
     }
 
     public int hash(org.omg.IOP.IOR ior, int maximum) {
-        org.apache.yoko.orb.OCI.ConFactoryRegistry conFactoryRegistry = orbInstance_
-                .getConFactoryRegistry();
-
-        org.apache.yoko.orb.OCI.ConFactory[] factories = conFactoryRegistry.get_factories();
-        int hash = 0;
-        for (int i = 0; i < factories.length; i++) {
-            hash ^= factories[i].hash(ior, maximum);
-        }
-        return hash % (maximum + 1);
+        return Arrays.hashCode(orbInstance_.getConFactoryRegistry().get_factories());
     }
 }
diff --git a/yoko-core/src/main/java/org/apache/yoko/orb/OB/CollocatedClient.java b/yoko-core/src/main/java/org/apache/yoko/orb/OB/CollocatedClient.java
index 8abd5fa..d3f26d4 100644
--- a/yoko-core/src/main/java/org/apache/yoko/orb/OB/CollocatedClient.java
+++ b/yoko-core/src/main/java/org/apache/yoko/orb/OB/CollocatedClient.java
@@ -88,18 +88,10 @@
     //
     // Checks whether this client is equal to another client
     //
-    public boolean equal(Client cl) {
-        CollocatedClient client = null;
-        try {
-            client = (CollocatedClient) cl;
-        } catch (ClassCastException ex) {
-            return false;
-        }
-
-        if (server_ != client.server_)
-            return false;
-
-        return true;
+    public boolean matches(Client other) {
+        if (!!!(other instanceof CollocatedClient)) return false;
+        CollocatedClient that = (CollocatedClient) other;
+        return (this.server_ == that.server_);
     }
 
     //
diff --git a/yoko-core/src/main/java/org/apache/yoko/orb/OB/DowncallStub.java b/yoko-core/src/main/java/org/apache/yoko/orb/OB/DowncallStub.java
index 9f720af..ad989ce 100644
--- a/yoko-core/src/main/java/org/apache/yoko/orb/OB/DowncallStub.java
+++ b/yoko-core/src/main/java/org/apache/yoko/orb/OB/DowncallStub.java
@@ -19,11 +19,50 @@
  
 import static org.apache.yoko.orb.OCI.GiopVersion.GIOP1_2;
 
+import java.util.Vector;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.apache.yoko.orb.OB.RETRY_ALWAYS;
-import org.apache.yoko.orb.OCI.GiopVersion;
+import org.omg.CORBA.BAD_INV_ORDER;
+import org.omg.CORBA.BooleanHolder;
+import org.omg.CORBA.COMM_FAILURE;
+import org.omg.CORBA.CompletionStatus;
+import org.omg.CORBA.ExceptionList;
+import org.omg.CORBA.NO_RESPONSE;
+import org.omg.CORBA.NVList;
+import org.omg.CORBA.NamedValue;
+import org.omg.CORBA.OBJECT_NOT_EXIST;
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.Policy;
+import org.omg.CORBA.SystemException;
+import org.omg.CORBA.TRANSIENT;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.UserException;
+import org.omg.CORBA.portable.ApplicationException;
+import org.omg.CORBA.portable.OutputStream;
+import org.omg.CORBA.portable.RemarshalException;
+import org.omg.GIOP.MessageHeader_1_1;
+import org.omg.GIOP.MessageHeader_1_2Helper;
+import org.omg.GIOP.MsgType_1_1;
+import org.omg.GIOP.RequestHeader_1_2;
+import org.omg.GIOP.RequestHeader_1_2Helper;
+import org.omg.IOP.INVOCATION_POLICIES;
+import org.omg.IOP.IOR;
+import org.omg.IOP.ServiceContext;
+import org.omg.IOP.ServiceContextListHolder;
+import org.omg.MessageRouting.MessageBody;
+import org.omg.MessageRouting.PersistentRequest;
+import org.omg.MessageRouting.PersistentRequestRouter;
+import org.omg.MessageRouting.ReplyDestination;
+import org.omg.MessageRouting.ReplyDisposition;
+import org.omg.MessageRouting.RequestInfo;
+import org.omg.MessageRouting.RequestMessage;
+import org.omg.MessageRouting.Router;
+import org.omg.MessageRouting.RouterListHolder;
+import org.omg.Messaging.PolicyValue;
+import org.omg.Messaging.PolicyValueSeqHelper;
+import org.omg.Messaging.PolicyValueSeqHolder;
+import org.omg.Messaging.ReplyHandler;
 
 //
 // DowncallStub is equivalent to the C++ class OB::MarshalStubImpl
@@ -38,9 +77,9 @@
     //
     // The IOR and the original IOR
     //
-    private org.omg.IOP.IOR IOR_;
+    private IOR IOR_;
 
-    private org.omg.IOP.IOR origIOR_;
+    private IOR origIOR_;
 
     //
     // The list of policies
@@ -50,7 +89,7 @@
     //
     // All client/profile pairs
     //
-    private java.util.Vector clientProfilePairs_;
+    private Vector<ClientProfilePair> clientProfilePairs_;
 
     //
     // We need a class to carry the DowncallStub and Downcall across
@@ -66,8 +105,7 @@
     // Private and protected member implementations
     // ------------------------------------------------------------------
 
-    private synchronized Client getClientProfilePair(
-            org.apache.yoko.orb.OCI.ProfileInfoHolder profileInfo)
+    private synchronized Client getClientProfilePair(org.apache.yoko.orb.OCI.ProfileInfoHolder profileInfo)
             throws FailureException {
         //
         // Lazy initialization of the client/profile pairs
@@ -90,10 +128,7 @@
                 logger.fine("retry: no profiles available");
             }
 
-            throw new FailureException(new org.omg.CORBA.TRANSIENT(org.apache.yoko.orb.OB.MinorCodes
-                    .describeTransient(org.apache.yoko.orb.OB.MinorCodes.MinorNoUsableProfileInIOR),
-                    org.apache.yoko.orb.OB.MinorCodes.MinorNoUsableProfileInIOR,
-                    org.omg.CORBA.CompletionStatus.COMPLETED_NO));
+            throw new FailureException(new TRANSIENT(org.apache.yoko.orb.OB.MinorCodes.describeTransient(org.apache.yoko.orb.OB.MinorCodes.MinorNoUsableProfileInIOR), org.apache.yoko.orb.OB.MinorCodes.MinorNoUsableProfileInIOR, CompletionStatus.COMPLETED_NO));
         }
 
         ClientProfilePair clientProfilePair = (ClientProfilePair) clientProfilePairs_.elementAt(0);
@@ -108,9 +143,7 @@
         ClientManager clientManager = orbInstance_.getClientManager();
 
         if (clientManager != null && clientProfilePairs_ != null) {
-            for (int i = 0; i < clientProfilePairs_.size(); i++) {
-                ClientProfilePair pair = (ClientProfilePair) clientProfilePairs_
-                        .elementAt(i);
+            for (ClientProfilePair pair: clientProfilePairs_) {
                 clientManager.releaseClient(pair.client, terminate);
             }
         }
@@ -128,8 +161,7 @@
     // Public member implementations
     // ------------------------------------------------------------------
 
-    public DowncallStub(ORBInstance orbInstance, org.omg.IOP.IOR ior,
-            org.omg.IOP.IOR origIOR, RefCountPolicyList policies) {
+    public DowncallStub(ORBInstance orbInstance, IOR ior, IOR origIOR, RefCountPolicyList policies) {
         clientProfilePairs_ = null;
 
         //
@@ -163,8 +195,7 @@
 
         PIManager piManager = orbInstance_.getPIManager();
         if (piManager.haveClientInterceptors()) {
-            return new PIDowncall(orbInstance_, client, profile.value,
-                    policies_, op, resp, IOR_, origIOR_, piManager);
+            return new PIDowncall(orbInstance_, client, profile.value, policies_, op, resp, IOR_, origIOR_, piManager);
         } else {
             return new Downcall(orbInstance_, client, profile.value, policies_, op, resp);
         }
@@ -181,47 +212,35 @@
         return new Downcall(orbInstance_, client, profile.value, policies_, "_locate", true);
     }
 
-    public Downcall createPIArgsDowncall(String op, boolean resp,
-            ParameterDesc[] argDesc, ParameterDesc retDesc,
-            org.omg.CORBA.TypeCode[] exceptionTC) throws FailureException {
+    public Downcall createPIArgsDowncall(String op, boolean resp, ParameterDesc[] argDesc, ParameterDesc retDesc, TypeCode[] exceptionTC) throws FailureException {
         org.apache.yoko.orb.OCI.ProfileInfoHolder profile = new org.apache.yoko.orb.OCI.ProfileInfoHolder();
         Client client = getClientProfilePair(profile);
         Assert._OB_assert(client != null);
 
         if (!policies_.interceptor)
-            return new Downcall(orbInstance_, client, profile.value, policies_,
-                    op, resp);
+            return new Downcall(orbInstance_, client, profile.value, policies_, op, resp);
 
         PIManager piManager = orbInstance_.getPIManager();
         if (piManager.haveClientInterceptors()) {
-            return new PIArgsDowncall(orbInstance_, client, profile.value,
-                    policies_, op, resp, IOR_, origIOR_, piManager, argDesc,
-                    retDesc, exceptionTC);
+            return new PIArgsDowncall(orbInstance_, client, profile.value, policies_, op, resp, IOR_, origIOR_, piManager, argDesc, retDesc, exceptionTC);
         } else {
-            return new Downcall(orbInstance_, client, profile.value, policies_,
-                    op, resp);
+            return new Downcall(orbInstance_, client, profile.value, policies_, op, resp);
         }
     }
 
-    public Downcall createPIDIIDowncall(String op, boolean resp,
-            org.omg.CORBA.NVList args, org.omg.CORBA.NamedValue result,
-            org.omg.CORBA.ExceptionList exceptions) throws FailureException {
+    public Downcall createPIDIIDowncall(String op, boolean resp, NVList args, NamedValue result, ExceptionList exceptions) throws FailureException {
         org.apache.yoko.orb.OCI.ProfileInfoHolder profile = new org.apache.yoko.orb.OCI.ProfileInfoHolder();
         Client client = getClientProfilePair(profile);
         Assert._OB_assert(client != null);
 
         if (!policies_.interceptor)
-            return new Downcall(orbInstance_, client, profile.value, policies_,
-                    op, resp);
+            return new Downcall(orbInstance_, client, profile.value, policies_, op, resp);
 
         PIManager piManager = orbInstance_.getPIManager();
         if (piManager.haveClientInterceptors()) {
-            return new PIDIIDowncall(orbInstance_, client, profile.value,
-                    policies_, op, resp, IOR_, origIOR_, piManager, args,
-                    result, exceptions);
+            return new PIDIIDowncall(orbInstance_, client, profile.value, policies_, op, resp, IOR_, origIOR_, piManager, args, result, exceptions);
         } else {
-            return new Downcall(orbInstance_, client, profile.value, policies_,
-                    op, resp);
+            return new Downcall(orbInstance_, client, profile.value, policies_, op, resp);
         }
     }
 
@@ -229,18 +248,15 @@
     // Marshalling interception points
     //
 
-    public org.apache.yoko.orb.CORBA.OutputStream preMarshal(Downcall down)
-            throws LocationForward, FailureException {
+    public org.apache.yoko.orb.CORBA.OutputStream preMarshal(Downcall down) throws LocationForward, FailureException {
         return down.preMarshal();
     }
 
-    public void marshalEx(Downcall down, org.omg.CORBA.SystemException ex)
-            throws LocationForward, FailureException {
+    public void marshalEx(Downcall down, SystemException ex) throws LocationForward, FailureException {
         down.marshalEx(ex);
     }
 
-    public void postMarshal(Downcall down) throws LocationForward,
-            FailureException {
+    public void postMarshal(Downcall down) throws LocationForward, FailureException {
         down.postMarshal();
     }
 
@@ -260,13 +276,11 @@
         down.oneway();
     }
 
-    public void deferred(Downcall down) throws LocationForward,
-            FailureException {
+    public void deferred(Downcall down) throws LocationForward, FailureException {
         down.deferred();
     }
 
-    public void response(Downcall down) throws LocationForward,
-            FailureException {
+    public void response(Downcall down) throws LocationForward, FailureException {
         down.response();
     }
 
@@ -278,26 +292,21 @@
     // Unmarshalling interception points
     //
 
-    public org.apache.yoko.orb.CORBA.InputStream preUnmarshal(Downcall down)
-            throws LocationForward, FailureException {
+    public org.apache.yoko.orb.CORBA.InputStream preUnmarshal(Downcall down) throws LocationForward, FailureException {
         return down.preUnmarshal();
     }
 
-    public org.apache.yoko.orb.CORBA.InputStream preUnmarshal(Downcall down,
-            org.omg.CORBA.BooleanHolder uex) throws LocationForward,
-            FailureException {
+    public org.apache.yoko.orb.CORBA.InputStream preUnmarshal(Downcall down, BooleanHolder uex) throws LocationForward, FailureException {
         org.apache.yoko.orb.CORBA.InputStream in = down.preUnmarshal();
         uex.value = down.userException();
         return in;
     }
 
-    public void unmarshalEx(Downcall down, org.omg.CORBA.SystemException ex)
-            throws LocationForward, FailureException {
+    public void unmarshalEx(Downcall down, SystemException ex) throws LocationForward, FailureException {
         down.unmarshalEx(ex);
     }
 
-    public void postUnmarshal(Downcall down) throws LocationForward,
-            FailureException {
+    public void postUnmarshal(Downcall down) throws LocationForward, FailureException {
         down.postUnmarshal();
     }
 
@@ -309,20 +318,18 @@
         return down.unmarshalExceptionId();
     }
 
-    public void setUserException(Downcall down, org.omg.CORBA.UserException ex,
-            String exId) {
+    public void setUserException(Downcall down, UserException ex, String exId) {
         down.setUserException(ex, exId);
     }
 
-    public void setUserException(Downcall down, org.omg.CORBA.UserException ex) {
+    public void setUserException(Downcall down, UserException ex) {
         down.setUserException(ex);
     }
 
     //
     // Handle a FailureException
     //
-    public synchronized void handleFailureException(Downcall down,
-            FailureException ex) throws FailureException {
+    public synchronized void handleFailureException(Downcall down, FailureException ex) throws FailureException {
         //
         // Only called if there is really a failure
         //
@@ -335,24 +342,21 @@
         Client client = down.client();
         org.apache.yoko.orb.OCI.ProfileInfo profile = down.profileInfo();
 
-        for (int i = 0; i < clientProfilePairs_.size(); i++) {
-            ClientProfilePair pair = (ClientProfilePair) clientProfilePairs_
-                    .elementAt(i);
-            if (pair.client == client && pair.profile == profile) {
-                ClientManager clientManager = orbInstance_.getClientManager();
-
-                //
-                // Make sure the ORB has not been destroyed
-                //
-                if (clientManager == null)
-                    throw new org.omg.CORBA.BAD_INV_ORDER(
-                            MinorCodes
-                                    .describeBadInvOrder(org.apache.yoko.orb.OB.MinorCodes.MinorShutdownCalled),
+        final ClientManager clientManager = orbInstance_.getClientManager();
+        //
+        // Make sure the ORB has not been destroyed
+        //
+        if (clientManager == null)
+            throw new BAD_INV_ORDER(
+                    MinorCodes.describeBadInvOrder(
+                            org.apache.yoko.orb.OB.MinorCodes.MinorShutdownCalled),
                             org.apache.yoko.orb.OB.MinorCodes.MinorShutdownCalled,
-                            org.omg.CORBA.CompletionStatus.COMPLETED_NO);
+                            CompletionStatus.COMPLETED_NO);
 
+        for (ClientProfilePair pair : clientProfilePairs_) {
+            if (pair.client == client && pair.profile == profile) {
                 clientManager.releaseClient(pair.client, false);
-                clientProfilePairs_.removeElementAt(i);
+                clientProfilePairs_.remove(pair);
                 break;
             }
         }
@@ -362,10 +366,8 @@
         //
         try {
             throw ex.exception;
-        } catch (org.omg.CORBA.COMM_FAILURE e) {
-        } catch (org.omg.CORBA.TRANSIENT e) {
-        } catch (org.omg.CORBA.NO_RESPONSE e) {
-        } catch (org.omg.CORBA.SystemException e) {
+        } catch (COMM_FAILURE|TRANSIENT|NO_RESPONSE forceRetry) {
+        } catch (SystemException systemException) {
             throw ex; // Not "throw e;"!
         }
 
@@ -373,8 +375,7 @@
         // We can't retry if RETRY_STRICT or RETRY_NEVER is set and the
         // completion status is not COMPLETED_NO
         //
-        if (policies_.retry.mode != RETRY_ALWAYS.value
-                && ex.exception.completed != org.omg.CORBA.CompletionStatus.COMPLETED_NO) {
+        if (policies_.retry.mode != RETRY_ALWAYS.value && ex.exception.completed != CompletionStatus.COMPLETED_NO) {
             throw ex;
         }
 
@@ -389,7 +390,6 @@
         //
         // OK, let's continue with the next profile
         //
-        CoreTraceLevels coreTraceLevels = orbInstance_.getCoreTraceLevels();
         logger.log(Level.FINE, "trying next profile", ex.exception);
     }
 
@@ -422,7 +422,7 @@
                         logger.fine("Twoway invocations not supported, returning true"); 
                         return true;
                     }
-                } catch (org.omg.CORBA.SystemException ex) {
+                } catch (SystemException ex) {
                     logger.log(Level.FINE, "Exception occurred during locate request", ex); 
                     throw new FailureException(ex);
                 }
@@ -434,7 +434,7 @@
                 postUnmarshal(down);
                 logger.fine("Object located"); 
                 return true;
-            } catch (org.omg.CORBA.OBJECT_NOT_EXIST ex) {
+            } catch (OBJECT_NOT_EXIST ex) {
                 logger.log(Level.FINE, "Object does not exist", ex); 
                 return false;
             } catch (FailureException ex) {
@@ -472,8 +472,7 @@
     // Prepare a request from a portable stub
     //
     public org.apache.yoko.orb.CORBA.OutputStream setupRequest(
-            org.omg.CORBA.Object self, String operation,
-            boolean responseExpected) throws LocationForward, FailureException {
+            org.omg.CORBA.Object self, String operation, boolean responseExpected) throws LocationForward, FailureException {
         while (true) {
             org.apache.yoko.orb.OB.Downcall downcall = createDowncall(
                     operation, responseExpected);
@@ -502,8 +501,7 @@
     //
     // public org.apache.yoko.orb.CORBA.OutputStream
     public org.apache.yoko.orb.OB.CodeConverters setupPollingRequest(
-            org.omg.IOP.ServiceContextListHolder sclHolder,
-            org.apache.yoko.orb.CORBA.OutputStreamHolder out)
+            ServiceContextListHolder sclHolder, org.apache.yoko.orb.CORBA.OutputStreamHolder out)
             throws FailureException {
         //
         // Create buffer to contain out marshalable data
@@ -516,8 +514,7 @@
         org.apache.yoko.orb.OCI.ProfileInfoHolder info = new org.apache.yoko.orb.OCI.ProfileInfoHolder();
         Client client = getClientProfilePair(info);
 
-        out.value = new org.apache.yoko.orb.CORBA.OutputStream(buf, client
-                .codeConverters(), GIOP1_2);
+        out.value = new org.apache.yoko.orb.CORBA.OutputStream(buf, client.codeConverters(), GIOP1_2);
 
         sclHolder.value = client.getAMIRouterSCL();
 
@@ -557,28 +554,23 @@
         //
         Client client = getClientProfilePair(info);
 
-        out.value = new org.apache.yoko.orb.CORBA.OutputStream(buf, client
-                .codeConverters(), GIOP1_2);
-        org.omg.IOP.ServiceContext[] scl = client.getAMIRouterSCL();
+        out.value = new org.apache.yoko.orb.CORBA.OutputStream(buf, client.codeConverters(), GIOP1_2);
+        ServiceContext[] scl = client.getAMIRouterSCL();
 
-        GIOPOutgoingMessage outgoing = new GIOPOutgoingMessage(orbInstance_,
-                out.value, info.value);
+        GIOPOutgoingMessage outgoing = new GIOPOutgoingMessage(orbInstance_, out.value, info.value);
 
         //
         // Put the request header into the stream
         //
-        outgoing.writeRequestHeader(client.requestId(), operation,
-                responseExpected, scl);
+        outgoing.writeRequestHeader(client.requestId(), operation, responseExpected, scl);
 
         return outgoing;
     }
 
-    public void AMIRouterPostMarshal(GIOPOutgoingMessage outgoing,
-            org.apache.yoko.orb.CORBA.OutputStreamHolder out) {
+    public void AMIRouterPostMarshal(GIOPOutgoingMessage outgoing, org.apache.yoko.orb.CORBA.OutputStreamHolder out) {
         int pos = out.value._OB_pos();
         out.value._OB_pos(0);
-        outgoing.writeMessageHeader(org.omg.GIOP.MsgType_1_1.Request, false,
-                pos - 12);
+        outgoing.writeMessageHeader(MsgType_1_1.Request, false, pos - 12);
         out.value._OB_pos(pos);
 
         //
@@ -597,8 +589,8 @@
     public org.apache.yoko.orb.CORBA.InputStream invoke(
             org.omg.CORBA.Object self,
             org.apache.yoko.orb.CORBA.OutputStream out)
-            throws org.omg.CORBA.portable.ApplicationException,
-            org.omg.CORBA.portable.RemarshalException, LocationForward,
+            throws ApplicationException,
+            RemarshalException, LocationForward,
             FailureException {
         //
         // We should have an InvocationContext associated with the
@@ -612,7 +604,7 @@
         // If the DowncallStub has changed, then remarshal
         //
         if (ctx.downcallStub != this) {
-            throw new org.omg.CORBA.portable.RemarshalException();
+            throw new RemarshalException();
         }
 
         Downcall down = ctx.downcall;
@@ -643,7 +635,7 @@
                         // Extract the exception's repository ID
                         //
                         id = down.unmarshalExceptionId();
-                    } catch (org.omg.CORBA.SystemException ex) {
+                    } catch (SystemException ex) {
                         down.unmarshalEx(ex);
                     }
 
@@ -655,8 +647,7 @@
                     down.setUserException(id);
                     down.postUnmarshal();
 
-                    throw new org.omg.CORBA.portable.ApplicationException(id,
-                            in);
+                    throw new ApplicationException(id, in);
                 } else {
                     //
                     // We're using portable stubs, so we'll never
@@ -679,7 +670,7 @@
         //
         // If we reach this point, then we need to reinvoke
         //
-        throw new org.omg.CORBA.portable.RemarshalException();
+        throw new RemarshalException();
     }
 
     public org.omg.CORBA.Object getAMIPollTarget() {
@@ -688,15 +679,11 @@
         // generated stub, we will call this method to create the target
         // object for a polling request
         //
-        org.apache.yoko.orb.OB.ObjectFactory objectFactory = orbInstance_
-                .getObjectFactory();
+        org.apache.yoko.orb.OB.ObjectFactory objectFactory = orbInstance_.getObjectFactory();
         return objectFactory.createObject(IOR_);
     }
 
-    public org.omg.MessageRouting.PersistentRequest ami_poll_request(
-            org.omg.CORBA.portable.OutputStream out, String operation,
-            org.omg.IOP.ServiceContext[] scl)
-            throws org.omg.CORBA.portable.RemarshalException {
+    public PersistentRequest ami_poll_request(OutputStream out, String operation, ServiceContext[] scl) throws RemarshalException {
         //
         // setup the ORBInstance
         //
@@ -704,8 +691,7 @@
         Assert._OB_assert(out != null);
 
         //
-        // We should have an InvocationContext associated with the
-        // OutputStream
+        // We should have an InvocationContext associated with the OutputStream
         //
         org.apache.yoko.orb.CORBA.OutputStream o = (org.apache.yoko.orb.CORBA.OutputStream) out;
         InvocationContext ctx = (InvocationContext) o._OB_invocationContext();
@@ -715,19 +701,18 @@
         // If the DowncallStub has changed, then remarshal
         //
         if (ctx.downcallStub != this)
-            throw new org.omg.CORBA.portable.RemarshalException();
+            throw new RemarshalException();
 
         //
         // Obtain the ORB
         //
-        org.omg.CORBA.ORB orb = orbInstance_.getORB();
+        ORB orb = orbInstance_.getORB();
         Assert._OB_assert(orb != null);
 
         //
         // Obtain the PersistentRequestRouter
         //
-        org.omg.MessageRouting.PersistentRequestRouter router = org.apache.yoko.orb.OB.MessageRoutingUtil
-                .getPersistentRouterFromConfig(orbInstance_);
+        PersistentRequestRouter router = org.apache.yoko.orb.OB.MessageRoutingUtil.getPersistentRouterFromConfig(orbInstance_);
         org.apache.yoko.orb.OB.Assert._OB_assert(router != null);
 
         //
@@ -735,11 +720,10 @@
         //
         org.apache.yoko.orb.OCI.ProfileInfoHolder info = new org.apache.yoko.orb.OCI.ProfileInfoHolder();
         info.value = null;
-        Client client = null;
         try {
-            client = getClientProfilePair(info);
+            getClientProfilePair(info);
         } catch (org.apache.yoko.orb.OB.FailureException ex) {
-            throw new org.omg.CORBA.portable.RemarshalException();
+            throw new RemarshalException();
         }
 
         //
@@ -750,23 +734,21 @@
         //
         // Create the router to_visit list
         //
-        org.omg.MessageRouting.RouterListHolder to_visit = new org.omg.MessageRouting.RouterListHolder();
-        to_visit.value = new org.omg.MessageRouting.Router[0];
-        org.apache.yoko.orb.OB.MessageRoutingUtil.getRouterListFromComponents(
-                orbInstance_, info.value, to_visit);
+        RouterListHolder to_visit = new RouterListHolder();
+        to_visit.value = new Router[0];
+        org.apache.yoko.orb.OB.MessageRoutingUtil.getRouterListFromComponents(orbInstance_, info.value, to_visit);
 
         //
         // Obtain the target objects
         //
-        org.apache.yoko.orb.OB.ObjectFactory objectFactory = orbInstance_
-                .getObjectFactory();
+        org.apache.yoko.orb.OB.ObjectFactory objectFactory = orbInstance_.getObjectFactory();
         org.omg.CORBA.Object target = objectFactory.createObject(IOR_);
 
         //
         // Populate the RequestMessage payload
         //
-        org.omg.MessageRouting.RequestMessage payload = new org.omg.MessageRouting.RequestMessage();
-        // payload.service_contexts = new org.omg.IOP.ServiceContext[0];
+        RequestMessage payload = new RequestMessage();
+        // payload.service_contexts = new ServiceContext[0];
         //
         // XXX
         //
@@ -781,29 +763,25 @@
         payload.reserved[2] = 0;
         payload.operation = operation;
         payload.object_key = new byte[info.value.key.length];
-        System.arraycopy(info.value.key, 0, payload.object_key, 0,
-                info.value.key.length);
+        System.arraycopy(info.value.key, 0, payload.object_key, 0, info.value.key.length);
 
         o._OB_pos(0);
         org.apache.yoko.orb.OCI.Buffer buf = o._OB_buffer();
-        org.omg.MessageRouting.MessageBody messageBody = new org.omg.MessageRouting.MessageBody();
+        MessageBody messageBody = new MessageBody();
         messageBody.byte_order = false; // Java is always false
         messageBody.body = new byte[buf.rest_length()];
-        System.arraycopy(buf.data(), buf.pos(), messageBody.body, 0, buf
-                .rest_length());
+        System.arraycopy(buf.data(), buf.pos(), messageBody.body, 0, buf.rest_length());
         payload.body = messageBody;
 
         //
         // Empty QoS list
         //
-        org.omg.CORBA.Policy[] qosList = new org.omg.CORBA.Policy[0];
+        Policy[] qosList = new Policy[0];
 
         //
         // Create a new Persistent request
         //
-        org.omg.MessageRouting.PersistentRequest request = router
-                .create_persistent_request(index, to_visit.value, target,
-                        qosList, payload);
+        PersistentRequest request = router.create_persistent_request(index, to_visit.value, target, qosList, payload);
 
         //
         // Return the persistent request back to the stub
@@ -811,11 +789,7 @@
         return request;
     }
 
-    public boolean ami_callback_request(
-            org.omg.CORBA.portable.OutputStream out,
-            org.omg.Messaging.ReplyHandler reply,
-            org.apache.yoko.orb.OCI.ProfileInfo info)
-            throws org.omg.CORBA.portable.RemarshalException {
+    public boolean ami_callback_request(OutputStream out, ReplyHandler reply, org.apache.yoko.orb.OCI.ProfileInfo info) throws RemarshalException {
         //
         // We should have an InvocationContext associated with the
         // OutputStream
@@ -828,16 +802,14 @@
         // If the DowncallStub has changed, then remarshal
         //
         if (ctx.downcallStub != this)
-            throw new org.omg.CORBA.portable.RemarshalException();
+            throw new RemarshalException();
 
-        org.apache.yoko.orb.CORBA.InputStream tmpIn = (org.apache.yoko.orb.CORBA.InputStream) out
-                .create_input_stream();
+        org.apache.yoko.orb.CORBA.InputStream tmpIn = (org.apache.yoko.orb.CORBA.InputStream) out.create_input_stream();
 
         //
         // Unmarshal the message header
         //
-        org.omg.GIOP.MessageHeader_1_1 msgHeader = org.omg.GIOP.MessageHeader_1_2Helper
-                .read(tmpIn);
+        MessageHeader_1_1 msgHeader = MessageHeader_1_2Helper.read(tmpIn);
 
         //
         // Check the GIOP version
@@ -852,7 +824,7 @@
         //
         // Check the message type
         //
-        if (msgHeader.message_type != (byte) org.omg.GIOP.MsgType_1_1._Request) {
+        if (msgHeader.message_type != (byte) MsgType_1_1._Request) {
             //
             // Report error - throw exception
             //
@@ -862,35 +834,32 @@
         //
         // Create and populate a RequestInfo to send to the router
         //
-        org.omg.MessageRouting.RequestInfo requestInfo = new org.omg.MessageRouting.RequestInfo();
+        RequestInfo requestInfo = new RequestInfo();
 
         //
         // Unmarshal the request header
         // 
-        org.omg.GIOP.RequestHeader_1_2 requestHeader = org.omg.GIOP.RequestHeader_1_2Helper
-                .read(tmpIn);
+        RequestHeader_1_2 requestHeader = RequestHeader_1_2Helper.read(tmpIn);
 
         //
         // Create and populate a RequestInfo structure to send to the
         // Router
         //
-        org.omg.MessageRouting.RouterListHolder configRouterList = new org.omg.MessageRouting.RouterListHolder();
-        configRouterList.value = new org.omg.MessageRouting.Router[0];
+        RouterListHolder configRouterList = new RouterListHolder();
+        configRouterList.value = new Router[0];
 
         //
         // Populate the configRouterList
         //
-        org.apache.yoko.orb.OB.MessageRoutingUtil.getRouterListFromComponents(
-                orbInstance_, info, configRouterList);
+        org.apache.yoko.orb.OB.MessageRoutingUtil.getRouterListFromComponents(orbInstance_, info, configRouterList);
 
-        requestInfo.visited = new org.omg.MessageRouting.Router[0];
-        requestInfo.to_visit = new org.omg.MessageRouting.Router[0];
+        requestInfo.visited = new Router[0];
+        requestInfo.to_visit = new Router[0];
 
         //
         // Get the target for this request
         //
-        org.apache.yoko.orb.OB.ObjectFactory objectFactory = orbInstance_
-                .getObjectFactory();
+        org.apache.yoko.orb.OB.ObjectFactory objectFactory = orbInstance_.getObjectFactory();
         //
         // REVISIT: Should we be using IOR_ or origIOR_?
         //
@@ -904,24 +873,23 @@
         //
         // Get the reply destination for this request
         //
-        org.omg.MessageRouting.ReplyDestination replyDest = new org.omg.MessageRouting.ReplyDestination();
-        replyDest.handler_type = org.omg.MessageRouting.ReplyDisposition.TYPED;
+        ReplyDestination replyDest = new ReplyDestination();
+        replyDest.handler_type = ReplyDisposition.TYPED;
         replyDest.handler = reply;
         requestInfo.reply_destination = replyDest;
 
         //
         // Get the selected qos for this request
         //
-        org.omg.Messaging.PolicyValueSeqHolder invocPoliciesHolder = new org.omg.Messaging.PolicyValueSeqHolder();
-        invocPoliciesHolder.value = new org.omg.Messaging.PolicyValue[0];
-        org.apache.yoko.orb.OB.MessageRoutingUtil.getInvocationPolicyValues(
-                policies_, invocPoliciesHolder);
+        PolicyValueSeqHolder invocPoliciesHolder = new PolicyValueSeqHolder();
+        invocPoliciesHolder.value = new PolicyValue[0];
+        org.apache.yoko.orb.OB.MessageRoutingUtil.getInvocationPolicyValues(policies_, invocPoliciesHolder);
         requestInfo.selected_qos = invocPoliciesHolder.value;
 
         //
         // Create payload (RequestMessage) for this request
         //
-        org.omg.MessageRouting.RequestMessage requestMessage = new org.omg.MessageRouting.RequestMessage();
+        RequestMessage requestMessage = new RequestMessage();
         requestMessage.giop_version = new org.omg.GIOP.Version();
         requestMessage.giop_version.major = info.major;
         requestMessage.giop_version.minor = info.minor;
@@ -935,8 +903,8 @@
         // Add the invocation policies service context for this request.
         // Note that this can change from request to request
         //
-        org.omg.IOP.ServiceContext invocPoliciesSC = new org.omg.IOP.ServiceContext();
-        invocPoliciesSC.context_id = org.omg.IOP.INVOCATION_POLICIES.value;
+        ServiceContext invocPoliciesSC = new ServiceContext();
+        invocPoliciesSC.context_id = INVOCATION_POLICIES.value;
 
         //
         // Create an output stream an write the PolicyValueSeq
@@ -946,20 +914,17 @@
             org.apache.yoko.orb.CORBA.OutputStream scOut = new org.apache.yoko.orb.CORBA.OutputStream(
                     scBuf);
             scOut._OB_writeEndian();
-            org.omg.Messaging.PolicyValueSeqHelper.write(scOut,
-                    invocPoliciesHolder.value);
+            PolicyValueSeqHelper.write(scOut, invocPoliciesHolder.value);
             invocPoliciesSC.context_data = new byte[scOut._OB_pos()];
-            System.arraycopy(invocPoliciesSC.context_data, 0, scBuf.data(), 0,
-                    scBuf.length());
+            System.arraycopy(invocPoliciesSC.context_data, 0, scBuf.data(), 0, scBuf.length());
         }
 
         //
         // Add the service context to the list of current service contexts
         //
         int scLength = requestMessage.service_contexts.length;
-        org.omg.IOP.ServiceContext[] scList = new org.omg.IOP.ServiceContext[scLength + 1];
-        System.arraycopy(requestMessage.service_contexts, 0, scList, 0,
-                scLength);
+        ServiceContext[] scList = new ServiceContext[scLength + 1];
+        System.arraycopy(requestMessage.service_contexts, 0, scList, 0, scLength);
         scList[scLength] = invocPoliciesSC;
 
         //
@@ -990,7 +955,7 @@
         //
         // Get the body of the request message
         //
-        org.omg.MessageRouting.MessageBody messageBody = new org.omg.MessageRouting.MessageBody();
+        MessageBody messageBody = new MessageBody();
 
         //
         // Java is always big endian
@@ -1025,7 +990,7 @@
         int numRouters = configRouterList.value.length;
 
         for (int i = numRouters - 1; (delivered == false) && (i >= 0); --i) {
-            org.omg.MessageRouting.Router curRouter = configRouterList.value[i];
+            Router curRouter = configRouterList.value[i];
 
             //
             // We only add the routers that we have attempted to contact to
@@ -1033,7 +998,7 @@
             // the request, then the lower priority routers are not added
             //
             int curLength = requestInfo.to_visit.length;
-            org.omg.MessageRouting.Router[] toVisit = new org.omg.MessageRouting.Router[curLength + 1];
+            Router[] toVisit = new Router[curLength + 1];
             if (curLength > 0) {
                 System.arraycopy(requestInfo.to_visit, 0, toVisit, 1, curLength);
             }
@@ -1047,7 +1012,7 @@
                 // Success: stop processing
                 //
                 delivered = true;
-            } catch (org.omg.CORBA.SystemException ex) {
+            } catch (SystemException ex) {
                 logger.log(Level.FINE, "Failed to contact router: " + ex.getMessage(), ex); 
                 //
                 // Failure: try the next router in the list
diff --git a/yoko-core/src/main/java/org/apache/yoko/orb/OB/GIOPClient.java b/yoko-core/src/main/java/org/apache/yoko/orb/OB/GIOPClient.java
index 6f9d2ee..6756e8e 100644
--- a/yoko-core/src/main/java/org/apache/yoko/orb/OB/GIOPClient.java
+++ b/yoko-core/src/main/java/org/apache/yoko/orb/OB/GIOPClient.java
@@ -571,21 +571,11 @@
     //
     // Checks whether this client is equal to another client
     //
-    public boolean equal(Client cl) {
-        GIOPClient client = null;
-        try {
-            client = (GIOPClient) cl;
-        } catch (ClassCastException ex) {
-            return false;
-        }
+    public boolean matches(Client other) {
+        if (!!!(other instanceof GIOPClient)) return false;
+        GIOPClient that = (GIOPClient) other;
 
-        if (!connector_.equal(client.connector_))
-            return false;
-
-        if (!codeConverters().equals(client.codeConverters()))
-            return false;
-
-        return true;
+        return this.connector_.equal(that.connector_) && this.codeConverters().equals(that.codeConverters());
     }
 
     //