Improve ModelElement encapsulation
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/AbstractObjectDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/AbstractObjectDescriptor.java
index d1ffe66..80f8e42 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/AbstractObjectDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/AbstractObjectDescriptor.java
@@ -18,7 +18,7 @@
 
 package org.apache.yoko.rmi.impl;
 
-public class AbstractObjectDescriptor extends ValueDescriptor {
+class AbstractObjectDescriptor extends ValueDescriptor {
     protected AbstractObjectDescriptor(Class type, TypeRepository repository) {
         super(type, repository);
     }
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/AnyDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/AnyDescriptor.java
index 11c22c9..39d2c3a 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/AnyDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/AnyDescriptor.java
@@ -18,7 +18,7 @@
 
 package org.apache.yoko.rmi.impl;
 
-public class AnyDescriptor extends TypeDescriptor {
+class AnyDescriptor extends TypeDescriptor {
     AnyDescriptor(Class type, TypeRepository rep) {
         super(type, rep);
     }
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ArrayDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ArrayDescriptor.java
index b3ee101..0eccedb 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ArrayDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ArrayDescriptor.java
@@ -21,18 +21,15 @@
 import java.io.Serializable;
 import java.lang.reflect.Array;
 import java.util.Map;
-import java.util.Vector;
 import java.util.logging.Logger;
 
-import javax.rmi.CORBA.Util;
-
 import org.omg.CORBA.MARSHAL;
 import org.omg.CORBA.ORB;
 import org.omg.CORBA.TypeCode;
 import org.omg.CORBA.ValueMember;
 import org.omg.CORBA.portable.InputStream;
 
-public abstract class ArrayDescriptor extends ValueDescriptor {
+abstract class ArrayDescriptor extends ValueDescriptor {
     protected int order;
 
     protected Class basicType;
@@ -50,8 +47,7 @@
         if (elementType.isPrimitive() || elementType == Object.class) {
             _repid = "RMI:" + getJavaClass().getName() + ":0000000000000000";
         } else {
-            TypeDescriptor desc = getTypeRepository()
-                    .getDescriptor(elementType);
+            TypeDescriptor desc = repo.getDescriptor(elementType);
             String elemRep = desc.getRepositoryID();
             String hash = elemRep.substring(elemRep.indexOf(':', 4));
             _repid = "RMI:" + getJavaClass().getName() + hash;
@@ -72,8 +68,7 @@
             // use the descriptor type past the array type marker
             _elementRepid = "RMI:" + getJavaClass().getName().substring(1) + ":0000000000000000";
         } else {
-            TypeDescriptor desc = getTypeRepository()
-                    .getDescriptor(elementType);
+            TypeDescriptor desc = repo.getDescriptor(elementType);
             _elementRepid = desc.getRepositoryID();
         }
 
@@ -98,7 +93,7 @@
     public String getIDLName() {
         StringBuffer sb = new StringBuffer("org_omg_boxedRMI_");
 
-        TypeDescriptor desc = getTypeRepository().getDescriptor(basicType);
+        TypeDescriptor desc = repo.getDescriptor(basicType);
         
         // The logic that looks for the last "_" fails when this is a 
         // long_long primitive type.  The primitive types have a "" package 
@@ -209,8 +204,7 @@
 
             _value_members = new org.omg.CORBA.ValueMember[1];
 
-            TypeDescriptor elemDesc = getTypeRepository().getDescriptor(
-                    elementType);
+            TypeDescriptor elemDesc = repo.getDescriptor(elementType);
 
             String elemRepID = elemDesc.getRepositoryID();
 
@@ -228,7 +222,7 @@
     }
 
     void addDependencies(java.util.Set classes) {
-        getTypeRepository().getDescriptor(basicType).addDependencies(classes);
+        repo.getDescriptor(basicType).addDependencies(classes);
     }
 
 }
@@ -316,7 +310,7 @@
 
     void printFields(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
         Object[] arr = (Object[]) val;
-        TypeDescriptor desc = getTypeRepository().getDescriptor(elementType);
+        TypeDescriptor desc = repo.getDescriptor(elementType);
         pw.print("length=" + arr.length + "; ");
         for (int i = 0; i < arr.length; i++) {
             if (i != 0) {
@@ -397,7 +391,7 @@
 
     void printFields(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
         Object[] arr = (Object[]) val;
-        TypeDescriptor desc = getTypeRepository().getDescriptor(elementType);
+        TypeDescriptor desc = repo.getDescriptor(elementType);
         pw.print("length=" + arr.length + "; ");
         for (int i = 0; i < arr.length; i++) {
             if (i != 0) {
@@ -469,7 +463,7 @@
 
     void printFields(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
         Object[] arr = (Object[]) val;
-        TypeDescriptor desc = getTypeRepository().getDescriptor(elementType);
+        TypeDescriptor desc = repo.getDescriptor(elementType);
         pw.print("length=" + arr.length + "; ");
         for (int i = 0; i < arr.length; i++) {
             if (i != 0) {
@@ -550,7 +544,7 @@
 
     void printFields(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
         Object[] arr = (Object[]) val;
-        TypeDescriptor desc = getTypeRepository().getDescriptor(elementType);
+        TypeDescriptor desc = repo.getDescriptor(elementType);
         pw.print("length=" + arr.length + "; ");
         for (int i = 0; i < arr.length; i++) {
             if (i != 0) {
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ClassDescDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ClassDescDescriptor.java
index eff9cb1..1a93939 100644
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ClassDescDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ClassDescDescriptor.java
@@ -13,7 +13,7 @@
 import org.apache.yoko.util.cmsf.RepIds;
 import org.omg.CORBA.MARSHAL;
 
-public class ClassDescDescriptor extends ClassBaseDescriptor {
+class ClassDescDescriptor extends ClassBaseDescriptor {
     private static final Logger logger = Logger.getLogger(ClassDescDescriptor.class.getName());
 
     private Field repid_field;
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ClassDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ClassDescriptor.java
index fab9919..d296aed 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ClassDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ClassDescriptor.java
@@ -31,7 +31,7 @@
 
 import org.omg.CORBA.MARSHAL;
 
-public class ClassDescriptor extends ClassBaseDescriptor {
+class ClassDescriptor extends ClassBaseDescriptor {
     private static final Logger logger = Logger.getLogger(ClassDescriptor.class.getName());
 
     private Field repid_field;
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/DateValueDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/DateValueDescriptor.java
index bb718d1..bfc500c 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/DateValueDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/DateValueDescriptor.java
@@ -27,12 +27,11 @@
  * Window>Preferences>Java>Templates. To enable and disable the creation of type
  * comments go to Window>Preferences>Java>Code Generation.
  */
-public class DateValueDescriptor extends ValueDescriptor {
+class DateValueDescriptor extends ValueDescriptor {
 
     /**
      * Constructor for DateValueDescriptor.
-     * 
-     * @param type
+     *
      * @param repository
      */
     public DateValueDescriptor(TypeRepository repository) {
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/EnumDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/EnumDescriptor.java
index c1827b7..5c35933 100644
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/EnumDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/EnumDescriptor.java
@@ -18,7 +18,7 @@
 
 package org.apache.yoko.rmi.impl;
 
-public class EnumDescriptor extends ValueDescriptor {
+class EnumDescriptor extends ValueDescriptor {
     public EnumDescriptor(Class<?> type, TypeRepository repo) {
         super(type, repo);
     }
@@ -38,7 +38,7 @@
         super.init();
         FieldDescriptor[] newFields = new FieldDescriptor[1];
         for (FieldDescriptor field: _fields) {
-            if (!!!field.getJavaName().equals("name")) continue;
+            if (!!!field.java_name.equals("name")) continue;
             newFields[0] = field;
             break;
         }
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/EnumSubclassDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/EnumSubclassDescriptor.java
index 0aeed60..4f5a67f 100644
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/EnumSubclassDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/EnumSubclassDescriptor.java
@@ -25,7 +25,7 @@
 import org.omg.CORBA.portable.IndirectionException;
 import org.omg.CORBA.portable.InputStream;
 
-public class EnumSubclassDescriptor extends ValueDescriptor {
+class EnumSubclassDescriptor extends ValueDescriptor {
     @SuppressWarnings("rawtypes")
     private final Class enumType;
 
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ExceptionDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ExceptionDescriptor.java
index 0e2cd61..89fd716 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ExceptionDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ExceptionDescriptor.java
@@ -18,7 +18,7 @@
 
 package org.apache.yoko.rmi.impl;
 
-public class ExceptionDescriptor extends ValueDescriptor {
+class ExceptionDescriptor extends ValueDescriptor {
     ExceptionDescriptor(Class type, TypeRepository repository) {
         super(type, repository);
     }
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDEnumDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDEnumDescriptor.java
index b55e906..c90be24 100644
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDEnumDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDEnumDescriptor.java
@@ -21,7 +21,7 @@
 import org.omg.CORBA.TypeCode;
 import org.omg.CORBA.ValueDefPackage.FullValueDescription;
 
-public class FVDEnumDescriptor extends EnumDescriptor {
+class FVDEnumDescriptor extends EnumDescriptor {
     private final FullValueDescription fvd;
     private final String repid;
 
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDEnumSubclassDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDEnumSubclassDescriptor.java
index d898dcd..7a06399 100644
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDEnumSubclassDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDEnumSubclassDescriptor.java
@@ -23,7 +23,7 @@
 
 import java.util.Objects;
 
-public class FVDEnumSubclassDescriptor extends EnumSubclassDescriptor {
+class FVDEnumSubclassDescriptor extends EnumSubclassDescriptor {
     private final FullValueDescription fvd;
     private final String repid;
 
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDValueDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDValueDescriptor.java
index 5c20871..bdd4964 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDValueDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDValueDescriptor.java
@@ -24,7 +24,7 @@
 /**
  * @author krab
  */
-public class FVDValueDescriptor extends ValueDescriptor {
+class FVDValueDescriptor extends ValueDescriptor {
     FullValueDescription fvd;
 
     String repid;
@@ -65,7 +65,7 @@
         FieldDescriptor result = null;
 
         for (Class c = getJavaClass(); c != null; c = c.getSuperclass()) {
-            TypeDescriptor td = getTypeRepository().getDescriptor(c);
+            TypeDescriptor td = repo.getDescriptor(c);
             if (td instanceof ValueDescriptor) {
                 ValueDescriptor vd = (ValueDescriptor) td;
                 FieldDescriptor[] fds = vd._fields;
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FieldDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FieldDescriptor.java
index 87f37da..00c2b1d 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FieldDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FieldDescriptor.java
@@ -28,8 +28,7 @@
 
 import org.omg.CORBA.ValueMember;
 
-public abstract class FieldDescriptor extends ModelElement implements
-Comparable {
+abstract class FieldDescriptor extends ModelElement implements Comparable {
     static Logger logger = Logger.getLogger(FieldDescriptor.class.getName());
 
     org.apache.yoko.rmi.util.corba.Field field;
@@ -45,9 +44,9 @@
     boolean isPublic;
 
     protected FieldDescriptor(Class owner, Class type, String name,
-            java.lang.reflect.Field f) {
+            java.lang.reflect.Field f, TypeRepository repo) {
+        super(repo, name);
         this.type = type;
-        setJavaName(name);
         setIDLName(name);
         declaringClass = owner;
 
@@ -97,7 +96,7 @@
         //
         // fields of the same kind are ordered lexicographically
         //	
-        return getJavaName().compareTo(desc.getJavaName());
+        return java_name.compareTo(desc.java_name);
     }
 
     public boolean isPrimitive() {
@@ -118,11 +117,11 @@
 
     abstract void copyState(Object orig, Object copy, CopyState state);
 
-    static FieldDescriptor get(java.lang.reflect.Field f) {
-        return get(f.getDeclaringClass(), f.getType(), f.getName(), f);
+    static FieldDescriptor get(java.lang.reflect.Field f, TypeRepository repository) {
+        return get(f.getDeclaringClass(), f.getType(), f.getName(), f, repository);
     }
 
-    static FieldDescriptor get(Class declaringClass, ObjectStreamField field) {
+    static FieldDescriptor get(Class declaringClass, ObjectStreamField field, TypeRepository repository) {
         Field f = null;
         try {
             f = declaringClass.getDeclaredField(field.getName());
@@ -131,71 +130,70 @@
                     + "\" for class \"" + declaringClass.getName() + "\""
                     + "\n" + ex, ex);
         }
-        return get(declaringClass, field.getType(), field.getName(), f);
+        return get(declaringClass, field.getType(), field.getName(), f, repository);
     }
 
     static FieldDescriptor get(Class owner, Class type, String name,
-            java.lang.reflect.Field f) {
+            java.lang.reflect.Field f, TypeRepository repository) {
 
         if (type.isPrimitive()) {
             if (type == Boolean.TYPE) {
-                return new BooleanFieldDescriptor(owner, type, name, f);
+                return new BooleanFieldDescriptor(owner, type, name, f, repository);
             } else if (type == Byte.TYPE) {
-                return new ByteFieldDescriptor(owner, type, name, f);
+                return new ByteFieldDescriptor(owner, type, name, f, repository);
             } else if (type == Short.TYPE) {
-                return new ShortFieldDescriptor(owner, type, name, f);
+                return new ShortFieldDescriptor(owner, type, name, f, repository);
             } else if (type == Character.TYPE) {
-                return new CharFieldDescriptor(owner, type, name, f);
+                return new CharFieldDescriptor(owner, type, name, f, repository);
             } else if (type == Integer.TYPE) {
-                return new IntFieldDescriptor(owner, type, name, f);
+                return new IntFieldDescriptor(owner, type, name, f, repository);
             } else if (type == Long.TYPE) {
-                return new LongFieldDescriptor(owner, type, name, f);
+                return new LongFieldDescriptor(owner, type, name, f, repository);
             } else if (type == Float.TYPE) {
-                return new FloatFieldDescriptor(owner, type, name, f);
+                return new FloatFieldDescriptor(owner, type, name, f, repository);
             } else if (type == Double.TYPE) {
-                return new DoubleFieldDescriptor(owner, type, name, f);
+                return new DoubleFieldDescriptor(owner, type, name, f, repository);
             } else {
                 throw new RuntimeException("unknown field type " + type);
             }
 
         } else {
             if(org.omg.CORBA.Object.class.isAssignableFrom(type)) {
-                return new CorbaObjectFieldDescriptor(owner, type, name, f);
+                return new CorbaObjectFieldDescriptor(owner, type, name, f, repository);
             }
             if (java.lang.Object.class.equals(type)
                     || java.io.Externalizable.class.equals(type)
                     || java.io.Serializable.class.equals(type)) {
-                return new AnyFieldDescriptor(owner, type, name, f);
+                return new AnyFieldDescriptor(owner, type, name, f,repository);
 
             } else if (java.rmi.Remote.class.isAssignableFrom(type) 
                     || java.rmi.Remote.class.equals(type))
             {
-                return new RemoteFieldDescriptor(owner, type, name, f);
+                return new RemoteFieldDescriptor(owner, type, name, f, repository);
 
             } else if (String.class.equals(type)) {
-                return new StringFieldDescriptor(owner, type, name, f);
+                return new StringFieldDescriptor(owner, type, name, f, repository);
 
             } else if (java.io.Serializable.class.isAssignableFrom(type)) {
-                return new ValueFieldDescriptor(owner, type, name, f);
+                return new ValueFieldDescriptor(owner, type, name, f, repository);
             } else if (type.isInterface() && type.getMethods().length > 0) {
                 // interface classes that define methods 
-                return new ValueFieldDescriptor(owner, type, name, f);
+                return new ValueFieldDescriptor(owner, type, name, f, repository);
             } else {
-                return new ObjectFieldDescriptor(owner, type, name, f);
+                return new ObjectFieldDescriptor(owner, type, name, f, repository);
             }
         }
     }
 
     void print(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
-        pw.print(getJavaName());
+        pw.print(java_name);
         pw.print("=");
         try {
             Object obj = field.get(val);
             if (obj == null) {
                 pw.print("null");
             } else {
-                TypeDescriptor desc = getTypeRepository().getDescriptor(
-                        obj.getClass());
+                TypeDescriptor desc = repo.getDescriptor(obj.getClass());
                 desc.print(pw, recurse, obj);
             }
         } catch (IllegalAccessException ex) {
@@ -212,8 +210,8 @@
     Class interfaceType;
 
     RemoteFieldDescriptor(Class owner, Class type, String name,
-            java.lang.reflect.Field f) {
-        super(owner, type, name, f);
+            java.lang.reflect.Field f, TypeRepository repository) {
+        super(owner, type, name, f, repository);
 
         if (type.isInterface()) {
             interfaceType = type;
@@ -289,14 +287,14 @@
     void readFieldIntoMap(ObjectReader reader, Map map) throws IOException {
         java.rmi.Remote value = (java.rmi.Remote) reader
                 .readRemoteObject(interfaceType);
-        map.put(getJavaName(), value);
+        map.put(java_name, value);
     }
 
     /**
      * @see org.apache.yoko.rmi.impl.FieldDescriptor#writeField(ObjectWriter, Map)
      */
     void writeFieldFromMap(ObjectWriter writer, Map map) throws IOException {
-        java.rmi.Remote value = (java.rmi.Remote) map.get(getJavaName());
+        java.rmi.Remote value = (java.rmi.Remote) map.get(java_name);
         writer.writeRemoteObject(value);
     }
 
@@ -309,8 +307,8 @@
     boolean narrowValue;
 
     AnyFieldDescriptor(Class owner, Class type, String name,
-            java.lang.reflect.Field f) {
-        super(owner, type, name, f);
+            java.lang.reflect.Field f, TypeRepository repository) {
+        super(owner, type, name, f, repository);
         narrowValue = java.rmi.Remote.class.isAssignableFrom(type);
     }
 
@@ -369,14 +367,14 @@
      */
     void readFieldIntoMap(ObjectReader reader, Map map) throws IOException {
         org.omg.CORBA.Any value = (org.omg.CORBA.Any) reader.readAny();
-        map.put(getJavaName(), value);
+        map.put(java_name, value);
     }
 
     /**
      * @see org.apache.yoko.rmi.impl.FieldDescriptor#writeField(ObjectWriter, Map)
      */
     void writeFieldFromMap(ObjectWriter writer, Map map) throws IOException {
-        org.omg.CORBA.Any value = (org.omg.CORBA.Any) map.get(getJavaName());
+        org.omg.CORBA.Any value = (org.omg.CORBA.Any) map.get(java_name);
         writer.writeAny(value);
     }
 
@@ -384,8 +382,8 @@
 
 class ValueFieldDescriptor extends FieldDescriptor {
     ValueFieldDescriptor(Class owner, Class type, String name,
-            java.lang.reflect.Field f) {
-        super(owner, type, name, f);
+            java.lang.reflect.Field f, TypeRepository repository) {
+        super(owner, type, name, f, repository);
     }
 
     public void read(ObjectReader reader, Object obj)
@@ -431,7 +429,7 @@
     void readFieldIntoMap(ObjectReader reader, Map map) throws IOException {
         java.io.Serializable value = (java.io.Serializable) reader
                 .readValueObject();
-        map.put(getJavaName(), value);
+        map.put(java_name, value);
     }
 
     /**
@@ -439,7 +437,7 @@
      */
     void writeFieldFromMap(ObjectWriter writer, Map map) throws IOException {
         java.io.Serializable value = (java.io.Serializable) map
-                .get(getJavaName());
+                .get(java_name);
         writer.writeValueObject(value);
     }
 
@@ -447,8 +445,8 @@
 
 class StringFieldDescriptor extends FieldDescriptor {
     StringFieldDescriptor(Class owner, Class type, String name,
-            java.lang.reflect.Field f) {
-        super(owner, type, name, f);
+            java.lang.reflect.Field f, TypeRepository repository) {
+        super(owner, type, name, f, repository);
     }
 
     public void read(ObjectReader reader, Object obj)
@@ -483,14 +481,14 @@
      */
     void readFieldIntoMap(ObjectReader reader, Map map) throws IOException {
         String value = (String) reader.readValueObject();
-        map.put(getJavaName(), value);
+        map.put(java_name, value);
     }
 
     /**
      * @see org.apache.yoko.rmi.impl.FieldDescriptor#writeField(ObjectWriter, Map)
      */
     void writeFieldFromMap(ObjectWriter writer, Map map) throws IOException {
-        String value = (String) map.get(getJavaName());
+        String value = (String) map.get(java_name);
         writer.writeValueObject(value);
     }
 
@@ -498,8 +496,8 @@
 
 class ObjectFieldDescriptor extends FieldDescriptor {
     ObjectFieldDescriptor(Class owner, Class type, String name,
-            java.lang.reflect.Field f) {
-        super(owner, type, name, f);
+            java.lang.reflect.Field f, TypeRepository repository) {
+        super(owner, type, name, f, repository);
     }
 
     public void read(ObjectReader reader, Object obj)
@@ -545,14 +543,14 @@
      */
     void readFieldIntoMap(ObjectReader reader, Map map) throws IOException {
         Object value = (Object) reader.readAbstractObject();
-        map.put(getJavaName(), value);
+        map.put(java_name, value);
     }
 
     /**
      * @see org.apache.yoko.rmi.impl.FieldDescriptor#writeField(ObjectWriter, Map)
      */
     void writeFieldFromMap(ObjectWriter writer, Map map) throws IOException {
-        Object value = (Object) map.get(getJavaName());
+        Object value = (Object) map.get(java_name);
         writer.writeObject(value);
     }
 
@@ -560,8 +558,8 @@
 
 class BooleanFieldDescriptor extends FieldDescriptor {
     BooleanFieldDescriptor(Class owner, Class type, String name,
-            java.lang.reflect.Field f) {
-        super(owner, type, name, f);
+            java.lang.reflect.Field f, TypeRepository repository) {
+        super(owner, type, name, f, repository);
     }
 
     public void read(ObjectReader reader, Object obj)
@@ -601,7 +599,7 @@
 
     void print(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
         try {
-            pw.print(getJavaName());
+            pw.print(java_name);
             pw.print("=");
             pw.print(field.getBoolean(val));
         } catch (IllegalAccessException ex) {
@@ -613,14 +611,14 @@
      */
     void readFieldIntoMap(ObjectReader reader, Map map) throws IOException {
         Boolean value = new Boolean(reader.readBoolean());
-        map.put(getJavaName(), value);
+        map.put(java_name, value);
     }
 
     /**
      * @see org.apache.yoko.rmi.impl.FieldDescriptor#writeField(ObjectWriter, Map)
      */
     void writeFieldFromMap(ObjectWriter writer, Map map) throws IOException {
-        Boolean value = (Boolean) map.get(getJavaName());
+        Boolean value = (Boolean) map.get(java_name);
         if (value == null) {
             writer.writeBoolean(false);
         } else {
@@ -632,8 +630,8 @@
 
 class ByteFieldDescriptor extends FieldDescriptor {
     ByteFieldDescriptor(Class owner, Class type, String name,
-            java.lang.reflect.Field f) {
-        super(owner, type, name, f);
+            java.lang.reflect.Field f, TypeRepository repository) {
+        super(owner, type, name, f, repository);
     }
 
     public void read(ObjectReader reader, Object obj)
@@ -673,7 +671,7 @@
 
     void print(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
         try {
-            pw.print(getJavaName());
+            pw.print(java_name);
             pw.print("=");
             pw.print(field.getByte(val));
         } catch (IllegalAccessException ex) {
@@ -685,14 +683,14 @@
      */
     void readFieldIntoMap(ObjectReader reader, Map map) throws IOException {
         Byte value = new Byte(reader.readByte());
-        map.put(getJavaName(), value);
+        map.put(java_name, value);
     }
 
     /**
      * @see org.apache.yoko.rmi.impl.FieldDescriptor#writeField(ObjectWriter, Map)
      */
     void writeFieldFromMap(ObjectWriter writer, Map map) throws IOException {
-        Byte value = (Byte) map.get(getJavaName());
+        Byte value = (Byte) map.get(java_name);
         if (value == null) {
             writer.writeByte(0);
         } else {
@@ -704,8 +702,8 @@
 
 class ShortFieldDescriptor extends FieldDescriptor {
     ShortFieldDescriptor(Class owner, Class type, String name,
-            java.lang.reflect.Field f) {
-        super(owner, type, name, f);
+            java.lang.reflect.Field f, TypeRepository repository) {
+        super(owner, type, name, f, repository);
     }
 
     public void read(ObjectReader reader, Object obj)
@@ -745,7 +743,7 @@
 
     void print(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
         try {
-            pw.print(getJavaName());
+            pw.print(java_name);
             pw.print("=");
             pw.print(field.getShort(val));
         } catch (IllegalAccessException ex) {
@@ -757,14 +755,14 @@
      */
     void readFieldIntoMap(ObjectReader reader, Map map) throws IOException {
         Short value = new Short(reader.readShort());
-        map.put(getJavaName(), value);
+        map.put(java_name, value);
     }
 
     /**
      * @see org.apache.yoko.rmi.impl.FieldDescriptor#writeField(ObjectWriter, Map)
      */
     void writeFieldFromMap(ObjectWriter writer, Map map) throws IOException {
-        Short value = (Short) map.get(getJavaName());
+        Short value = (Short) map.get(java_name);
         if (value == null) {
             writer.writeShort(0);
         } else {
@@ -776,8 +774,8 @@
 
 class CharFieldDescriptor extends FieldDescriptor {
     CharFieldDescriptor(Class owner, Class type, String name,
-            java.lang.reflect.Field f) {
-        super(owner, type, name, f);
+            java.lang.reflect.Field f, TypeRepository repository) {
+        super(owner, type, name, f, repository);
     }
 
     public void read(ObjectReader reader, Object obj)
@@ -817,7 +815,7 @@
 
     void print(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
         try {
-            pw.print(getJavaName());
+            pw.print(java_name);
             pw.print("=");
             char ch = field.getChar(val);
             pw.print(ch);
@@ -833,14 +831,14 @@
      */
     void readFieldIntoMap(ObjectReader reader, Map map) throws IOException {
         Character value = new Character(reader.readChar());
-        map.put(getJavaName(), value);
+        map.put(java_name, value);
     }
 
     /**
      * @see org.apache.yoko.rmi.impl.FieldDescriptor#writeField(ObjectWriter, Map)
      */
     void writeFieldFromMap(ObjectWriter writer, Map map) throws IOException {
-        Character value = (Character) map.get(getJavaName());
+        Character value = (Character) map.get(java_name);
         if (value == null) {
             writer.writeChar(0);
         } else {
@@ -852,8 +850,8 @@
 
 class IntFieldDescriptor extends FieldDescriptor {
     IntFieldDescriptor(Class owner, Class type, String name,
-            java.lang.reflect.Field f) {
-        super(owner, type, name, f);
+            java.lang.reflect.Field f, TypeRepository repository) {
+        super(owner, type, name, f, repository);
     }
 
     public void read(ObjectReader reader, Object obj)
@@ -894,7 +892,7 @@
 
     void print(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
         try {
-            pw.print(getJavaName());
+            pw.print(java_name);
             pw.print("=");
             pw.print(field.getInt(val));
         } catch (IllegalAccessException ex) {
@@ -906,14 +904,14 @@
      */
     void readFieldIntoMap(ObjectReader reader, Map map) throws IOException {
         Integer value = new Integer(reader.readInt());
-        map.put(getJavaName(), value);
+        map.put(java_name, value);
     }
 
     /**
      * @see org.apache.yoko.rmi.impl.FieldDescriptor#writeField(ObjectWriter, Map)
      */
     void writeFieldFromMap(ObjectWriter writer, Map map) throws IOException {
-        Integer value = (Integer) map.get(getJavaName());
+        Integer value = (Integer) map.get(java_name);
         if (value == null) {
             writer.writeInt(0);
         } else {
@@ -925,8 +923,8 @@
 
 class LongFieldDescriptor extends FieldDescriptor {
     LongFieldDescriptor(Class owner, Class type, String name,
-            java.lang.reflect.Field f) {
-        super(owner, type, name, f);
+            java.lang.reflect.Field f, TypeRepository repository) {
+        super(owner, type, name, f, repository);
     }
 
     public void read(ObjectReader reader, Object obj)
@@ -967,7 +965,7 @@
 
     void print(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
         try {
-            pw.print(getJavaName());
+            pw.print(java_name);
             pw.print("=");
             pw.print(field.getLong(val));
         } catch (IllegalAccessException ex) {
@@ -979,14 +977,14 @@
      */
     void readFieldIntoMap(ObjectReader reader, Map map) throws IOException {
         Long value = new Long(reader.readLong());
-        map.put(getJavaName(), value);
+        map.put(java_name, value);
     }
 
     /**
      * @see org.apache.yoko.rmi.impl.FieldDescriptor#writeField(ObjectWriter, Map)
      */
     void writeFieldFromMap(ObjectWriter writer, Map map) throws IOException {
-        Long value = (Long) map.get(getJavaName());
+        Long value = (Long) map.get(java_name);
         if (value == null) {
             writer.writeLong(0);
         } else {
@@ -998,8 +996,8 @@
 
 class FloatFieldDescriptor extends FieldDescriptor {
     FloatFieldDescriptor(Class owner, Class type, String name,
-            java.lang.reflect.Field f) {
-        super(owner, type, name, f);
+            java.lang.reflect.Field f, TypeRepository repository) {
+        super(owner, type, name, f, repository);
     }
 
     public void read(ObjectReader reader, Object obj)
@@ -1039,7 +1037,7 @@
 
     void print(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
         try {
-            pw.print(getJavaName());
+            pw.print(java_name);
             pw.print("=");
             pw.print(field.getFloat(val));
         } catch (IllegalAccessException ex) {
@@ -1051,14 +1049,14 @@
      */
     void readFieldIntoMap(ObjectReader reader, Map map) throws IOException {
         Float value = new Float(reader.readFloat());
-        map.put(getJavaName(), value);
+        map.put(java_name, value);
     }
 
     /**
      * @see org.apache.yoko.rmi.impl.FieldDescriptor#writeField(ObjectWriter, Map)
      */
     void writeFieldFromMap(ObjectWriter writer, Map map) throws IOException {
-        Float value = (Float) map.get(getJavaName());
+        Float value = (Float) map.get(java_name);
         if (value == null) {
             writer.writeFloat(0.0F);
         } else {
@@ -1070,8 +1068,8 @@
 
 class DoubleFieldDescriptor extends FieldDescriptor {
     DoubleFieldDescriptor(Class owner, Class type, String name,
-            java.lang.reflect.Field f) {
-        super(owner, type, name, f);
+            java.lang.reflect.Field f, TypeRepository repository) {
+        super(owner, type, name, f, repository);
     }
 
     public void read(ObjectReader reader, Object obj)
@@ -1111,7 +1109,7 @@
 
     void print(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
         try {
-            pw.print(getJavaName());
+            pw.print(java_name);
             pw.print("=");
             pw.print(field.getDouble(val));
         } catch (IllegalAccessException ex) {
@@ -1123,14 +1121,14 @@
      */
     void readFieldIntoMap(ObjectReader reader, Map map) throws IOException {
         Double value = new Double(reader.readDouble());
-        map.put(getJavaName(), value);
+        map.put(java_name, value);
     }
 
     /**
      * @see org.apache.yoko.rmi.impl.FieldDescriptor#writeField(ObjectWriter, Map)
      */
     void writeFieldFromMap(ObjectWriter writer, Map map) throws IOException {
-        Double value = (Double) map.get(getJavaName());
+        Double value = (Double) map.get(java_name);
         if (value == null) {
             writer.writeDouble(0.0D);
         } else {
@@ -1142,8 +1140,8 @@
 
 class CorbaObjectFieldDescriptor extends FieldDescriptor {
 
-    protected CorbaObjectFieldDescriptor(Class owner, Class type, String name, Field f) {
-        super(owner, type, name, f);
+    protected CorbaObjectFieldDescriptor(Class owner, Class type, String name, Field f,TypeRepository repository) {
+        super(owner, type, name, f, repository);
     }
 
     void copyState(final Object orig, final Object copy, CopyState state) {
@@ -1175,7 +1173,7 @@
 
     void readFieldIntoMap(ObjectReader reader, Map map) throws IOException {
         Object value = reader.readCorbaObject(null);
-        map.put(getJavaName(), value);
+        map.put(java_name, value);
 
     }
 
@@ -1189,7 +1187,7 @@
     }
 
     void writeFieldFromMap(ObjectWriter writer, Map map) throws IOException {
-        org.omg.CORBA.Object value = (org.omg.CORBA.Object) map.get(getJavaName());
+        org.omg.CORBA.Object value = (org.omg.CORBA.Object) map.get(java_name);
         writer.writeCorbaObject(value);
 
     }
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/IDLEntityDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/IDLEntityDescriptor.java
index 442f724..d7228d6 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/IDLEntityDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/IDLEntityDescriptor.java
@@ -23,7 +23,7 @@
 
 import org.omg.CORBA.MARSHAL;
 
-public class IDLEntityDescriptor extends ValueDescriptor {
+class IDLEntityDescriptor extends ValueDescriptor {
     Method _read_method;
 
     Method _write_method;
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/MethodDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/MethodDescriptor.java
index dbde88c..749bfe9 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/MethodDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/MethodDescriptor.java
@@ -69,9 +69,8 @@
     }
 
     MethodDescriptor(java.lang.reflect.Method method, TypeRepository repository) {
+        super(repository, method.getName());
         reflected_method = method;
-        setTypeRepository(repository);
-        setJavaName(method.getName());
     }
 
     /** The number of arguments */
@@ -121,7 +120,7 @@
             }
 
         } else if (copyWithinState) {
-            CopyState state = new CopyState(getTypeRepository());
+            CopyState state = new CopyState(repo);
             for (int i = 0; i < args.length; i++) {
                 if (parameter_types[i].copyWithinState()) {
                     try {
@@ -167,7 +166,7 @@
             }
 
         } else if (copyWithinState) {
-            CopyState state = new CopyState(getTypeRepository());
+            CopyState state = new CopyState(repo);
             try {
                 return state.copy(result);
             } catch (CopyRecursionException e) {
@@ -330,8 +329,7 @@
 
         for (int i = 0; i < param_types.length; i++) {
             try {
-                parameter_types[i] = getTypeRepository().getDescriptor(
-                        param_types[i]);
+                parameter_types[i] = repo.getDescriptor(param_types[i]);
                 copyWithinState |= parameter_types[i].copyWithinState();
 
             } catch (RuntimeException ex) {
@@ -340,13 +338,12 @@
         }
 
         Class result_type = reflected_method.getReturnType();
-        return_type = getTypeRepository().getDescriptor(result_type);
+        return_type = repo.getDescriptor(result_type);
 
         Class[] exc_types = reflected_method.getExceptionTypes();
         exception_types = new ExceptionDescriptor[exc_types.length];
         for (int i = 0; i < exc_types.length; i++) {
-            exception_types[i] = (ExceptionDescriptor) getTypeRepository()
-                    .getDescriptor(exc_types[i]);
+            exception_types[i] = (ExceptionDescriptor) repo.getDescriptor(exc_types[i]);
         }
 
         parameter_count = param_types.length;
@@ -361,7 +358,7 @@
         } else if (isGetterMethod()) {
             idl_name = "_get_" + transformIdentifier(attributeName());
         } else {
-            idl_name = transformIdentifier(getJavaName());
+            idl_name = transformIdentifier(java_name);
         }
 
         if (isCaseSensitive) {
@@ -376,7 +373,7 @@
     }
 
     private String attributeName() {
-        String methodName = getJavaName();
+        String methodName = java_name;
         StringBuffer buf = new StringBuffer();
 
         int pfxLen;
@@ -542,7 +539,7 @@
         writeJavaType(pw, reflected_method.getReturnType());
 
         pw.print(' ');
-        pw.print(getJavaName());
+        pw.print(java_name);
 
         pw.print(" (");
         Class[] args = reflected_method.getParameterTypes();
@@ -597,7 +594,7 @@
 
         Class[] args = reflected_method.getParameterTypes();
         for (int i = 0; i < args.length; i++) {
-            TypeDescriptor desc = getTypeRepository().getDescriptor(args[i]);
+            TypeDescriptor desc = repo.getDescriptor(args[i]);
             pw.print("\t\t\t");
             desc.writeMarshalValue(pw, "out", "arg" + i);
             pw.println(";");
@@ -613,7 +610,7 @@
             writeJavaType(pw, rtype);
             pw.print(")");
 
-            TypeDescriptor desc = getTypeRepository().getDescriptor(rtype);
+            TypeDescriptor desc = repo.getDescriptor(rtype);
             desc.writeUnmarshalValue(pw, "in");
             pw.println(";");
         }
@@ -631,8 +628,7 @@
                 continue;
             }
 
-            ExceptionDescriptor exd = (ExceptionDescriptor) getTypeRepository()
-                    .getDescriptor(ex[i]);
+            ExceptionDescriptor exd = (ExceptionDescriptor) repo.getDescriptor(ex[i]);
 
             pw.println("\t\t\tif (exname.equals(\""
                     + exd.getExceptionRepositoryID() + "\"))");
@@ -676,7 +672,7 @@
         // copy arguments
         Class[] args = reflected_method.getParameterTypes();
         if (args.length == 1) {
-            if (getTypeRepository().getDescriptor(args[0]).copyInStub()) {
+            if (repo.getDescriptor(args[0]).copyInStub()) {
                 pw.print("\t\t\t\targ0 = (");
                 writeJavaType(pw, args[0]);
                 pw.println(")" + UTIL + ".copyObject(arg0, _orb());");
@@ -686,7 +682,7 @@
             int copyCount = 0;
 
             for (int i = 0; i < args.length; i++) {
-                TypeDescriptor td = getTypeRepository().getDescriptor(args[i]);
+                TypeDescriptor td = repo.getDescriptor(args[i]);
                 copy[i] = td.copyInStub();
                 if (copy[i]) {
                     copyCount += 1;
@@ -727,7 +723,7 @@
         pw.print("((");
         writeJavaType(pw, thisClass);
         pw.print(")so.servant).");
-        pw.print(getJavaName());
+        pw.print(java_name);
         pw.print("(");
 
         for (int i = 0; i < args.length; i++) {
@@ -741,7 +737,7 @@
 
         pw.print("\t\t\t\treturn ");
         if (out != Void.TYPE) {
-            TypeDescriptor td = getTypeRepository().getDescriptor(out);
+            TypeDescriptor td = repo.getDescriptor(out);
             if (td.copyInStub()) {
                 pw.print('(');
                 writeJavaType(pw, out);
@@ -761,22 +757,21 @@
     }
 
     void addDependencies(java.util.Set classes) {
-        TypeRepository rep = getTypeRepository();
 
         TypeDescriptor desc = null;
 
-        desc = rep.getDescriptor(reflected_method.getReturnType());
+        desc = repo.getDescriptor(reflected_method.getReturnType());
         desc.addDependencies(classes);
 
         Class[] param = reflected_method.getParameterTypes();
         for (int i = 0; i < param.length; i++) {
-            desc = rep.getDescriptor(param[i]);
+            desc = repo.getDescriptor(param[i]);
             desc.addDependencies(classes);
         }
 
         Class[] ex = reflected_method.getExceptionTypes();
         for (int i = 0; i < ex.length; i++) {
-            desc = rep.getDescriptor(ex[i]);
+            desc = repo.getDescriptor(ex[i]);
             desc.addDependencies(classes);
         }
     }
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ModelElement.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ModelElement.java
index 703d6b5..24a3c59 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ModelElement.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ModelElement.java
@@ -18,11 +18,15 @@
 
 package org.apache.yoko.rmi.impl;
 
-public class ModelElement {
-    protected String idl_name;        // fully resolved package name
-    protected String type_name = "";       // the simple type name (minus package, if any)
-    protected String package_name = "";    // the package name qualifier (if any)
-    protected String java_name;       // the java name of the type 
+abstract class ModelElement {
+    protected final TypeRepository repo;
+    protected final String java_name;       // the java name of the type
+    private String idl_name;        // fully resolved package name
+
+    protected ModelElement(TypeRepository repo, String java_name) {
+        this.repo = repo;
+        this.java_name = java_name;
+    }
 
     protected void setIDLName(String name) {
         idl_name = name;
@@ -31,38 +35,4 @@
     public String getIDLName() {
         return idl_name;
     }
-
-    protected void setTypeName(String name) {
-        type_name = name;
-    }
-    
-    public String getTypeName() {
-        return type_name;
-    }
-
-    protected void setPackageName(String name) {
-        package_name = name;
-    }
-    
-    public String getPackageName() {
-        return package_name;
-    }
-
-    protected void setJavaName(String name) {
-        java_name = name;
-    }
-
-    public String getJavaName() {
-        return java_name;
-    }
-
-    protected TypeRepository repository;
-
-    protected void setTypeRepository(TypeRepository repository) {
-        this.repository = repository;
-    }
-
-    public TypeRepository getTypeRepository() {
-        return repository;
-    }
 }
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIStubDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIStubDescriptor.java
index 09332cd..20fb38c 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIStubDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIStubDescriptor.java
@@ -18,7 +18,7 @@
 
 package org.apache.yoko.rmi.impl;
 
-public class RMIStubDescriptor extends ValueDescriptor {
+class RMIStubDescriptor extends ValueDescriptor {
     RMIStubDescriptor(Class type, TypeRepository repository) {
         super(type, repository);
     }
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteClassDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteClassDescriptor.java
index 4d86d50..1116043 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteClassDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteClassDescriptor.java
@@ -18,7 +18,7 @@
 
 package org.apache.yoko.rmi.impl;
 
-public class RemoteClassDescriptor extends RemoteDescriptor {
+class RemoteClassDescriptor extends RemoteDescriptor {
 
     public String getRepositoryID() {
         return "IDL:" + getJavaClass().getName().replace('.', '/') + ":1.0";
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteDescriptor.java
index fd44426..8aafb16 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteDescriptor.java
@@ -34,7 +34,7 @@
 
 import javax.rmi.PortableRemoteObject;
 
-public abstract class RemoteDescriptor extends TypeDescriptor {
+abstract class RemoteDescriptor extends TypeDescriptor {
     private java.util.Map method_map;
 
     private java.util.Map refl_method_map;
@@ -61,8 +61,7 @@
             }
             Class most_specific_interface = remotes[0];
 
-            result = (RemoteInterfaceDescriptor) repository
-                    .getDescriptor(most_specific_interface);
+            result = (RemoteInterfaceDescriptor)repo.getDescriptor(most_specific_interface);
         }
 
         setRemoteInterface(result);
@@ -84,7 +83,7 @@
             int len = ifaces.length;
             String[] ids = new String[len];
             for (int i = 0; i < len; i++) {
-                TypeDescriptor desc = repository.getDescriptor(ifaces[i]);
+                TypeDescriptor desc = repo.getDescriptor(ifaces[i]);
                 ids[i] = desc.getRepositoryID();
             }
 
@@ -180,8 +179,7 @@
             if (!REMOTE_CLASS.equals(iface) && !OBJECT_CLASS.equals(iface)
                     && REMOTE_CLASS.isAssignableFrom(iface)
                     && iface.isInterface()) {
-                RemoteDescriptor superHelper = (RemoteDescriptor) repository
-                        .getDescriptor(iface);
+                RemoteDescriptor superHelper = (RemoteDescriptor)repo.getDescriptor(iface);
 
                 super_descriptors.add(superHelper);
 
@@ -217,9 +215,9 @@
         }
 
         for (int i = 0; i < methods.length; i++) {
-            MethodDescriptor op = new MethodDescriptor(methods[i], repository);
+            MethodDescriptor op = new MethodDescriptor(methods[i], repo);
 
-            String mname = op.getJavaName();
+            String mname = op.java_name;
 
             // is there another method that differs only in case?
             Set same_case_names = (Set) lower_case_names.get(mname.toLowerCase());
@@ -242,7 +240,7 @@
         method_map = new java.util.HashMap();
         for (int i = 0; i < method_list.size(); i++) {
             MethodDescriptor desc = (MethodDescriptor) method_list.get(i);
-            logger.finer("Adding method " + desc.getJavaName() + " to method map under " + desc.getIDLName()); 
+            logger.finer("Adding method " + desc.java_name + " to method map under " + desc.getIDLName());
             method_map.put(desc.getIDLName(), desc);
         }
 
@@ -545,14 +543,13 @@
         classes.add(c);
 
         if (c.getSuperclass() != null) {
-            TypeDescriptor desc = getTypeRepository().getDescriptor(
-                    c.getSuperclass());
+            TypeDescriptor desc = repo.getDescriptor(c.getSuperclass());
             desc.addDependencies(classes);
         }
 
         Class[] ifaces = c.getInterfaces();
         for (int i = 0; i < ifaces.length; i++) {
-            TypeDescriptor desc = getTypeRepository().getDescriptor(ifaces[i]);
+            TypeDescriptor desc = repo.getDescriptor(ifaces[i]);
             desc.addDependencies(classes);
         }
 
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteInterfaceDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteInterfaceDescriptor.java
index 072fcee..c053fd5 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteInterfaceDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteInterfaceDescriptor.java
@@ -18,7 +18,7 @@
 
 package org.apache.yoko.rmi.impl;
 
-public class RemoteInterfaceDescriptor extends RemoteDescriptor {
+class RemoteInterfaceDescriptor extends RemoteDescriptor {
     RemoteInterfaceDescriptor(Class type, TypeRepository repository) {
         super(type, repository);
     }
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/SimpleDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/SimpleDescriptor.java
index ada58a7..eddf015 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/SimpleDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/SimpleDescriptor.java
@@ -18,11 +18,10 @@
 
 package org.apache.yoko.rmi.impl;
 
-public abstract class SimpleDescriptor extends TypeDescriptor {
+abstract class SimpleDescriptor extends TypeDescriptor {
     SimpleDescriptor(Class type, TypeRepository repository, String idl_name,
             org.omg.CORBA.TCKind tc) {
         super(type, repository);
-        setJavaName(type.getName());
         setIDLName(idl_name);
         // the simple type name is the same as the IDL name.  The 
         // package name is null 
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/StringDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/StringDescriptor.java
index 2ee1f00..26a2dce 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/StringDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/StringDescriptor.java
@@ -18,7 +18,7 @@
 
 package org.apache.yoko.rmi.impl;
 
-public class StringDescriptor extends ValueDescriptor {
+class StringDescriptor extends ValueDescriptor {
     public String getIDLName() {
         return "CORBA_WStringValue";
     }
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/TypeDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/TypeDescriptor.java
index 78303c9..5c01684 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/TypeDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/TypeDescriptor.java
@@ -27,7 +27,7 @@
 
 import org.omg.CORBA.portable.InputStream;
 
-public abstract class TypeDescriptor extends ModelElement {
+abstract class TypeDescriptor extends ModelElement {
     static Logger logger = Logger.getLogger(TypeDescriptor.class.getName());
 
     protected final Class _java_class;
@@ -38,6 +38,22 @@
 
     private FullKey _key;
 
+    private String package_name = "";    // the package name qualifier (if any)
+    protected void setPackageName(String name) {
+        package_name = name;
+    }
+    public String getPackageName() {
+        return package_name;
+    }
+
+    private String type_name = "";       // the simple type name (minus package, if any)
+    protected void setTypeName(String name) {
+        type_name = name;
+    }
+    public String getTypeName() {
+        return type_name;
+    }
+
     public Class getJavaClass() {
         return _java_class;
     }
@@ -106,9 +122,9 @@
     }
 
     protected TypeDescriptor(Class type, TypeRepository repository) {
+        super(repository, type.getName());
         _java_class = type;
-        String typeName = type.getName(); 
-        setTypeRepository(repository);
+        String typeName = type.getName();
         setIDLName(typeName.replace('.', '_'));
         // break up the simple type and package
         int idx = typeName.lastIndexOf('.');
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ValueDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ValueDescriptor.java
index ecedcbb..a5dde95 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ValueDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ValueDescriptor.java
@@ -70,7 +70,7 @@
 
 import sun.reflect.ReflectionFactory;
 
-public class ValueDescriptor extends TypeDescriptor {
+class ValueDescriptor extends TypeDescriptor {
     static final Logger logger = Logger.getLogger(ValueDescriptor.class.getName());
 
     private boolean _is_externalizable;
@@ -182,7 +182,7 @@
         _is_immutable_value = _immutable_value_classes.contains(type);
 
         if ((superClass != null) && (superClass != Object.class)) {
-            TypeDescriptor superDesc = getTypeRepository().getDescriptor(superClass);
+            TypeDescriptor superDesc = repo.getDescriptor(superClass);
 
             if (superDesc instanceof ValueDescriptor) {
                 _super_descriptor = (ValueDescriptor) superDesc;
@@ -320,7 +320,7 @@
                             _constructor = ReflectionFactory.getReflectionFactory().newConstructorForSerialization(type, init_cons);
 
                             if (_constructor == null) {
-                                logger.warning("Unable to get constructor for serialization for class " + getJavaName());
+                                logger.warning("Unable to get constructor for serialization for class " + java_name);
                             } else {
                                 _constructor.setAccessible(true);
                             }
@@ -353,8 +353,7 @@
                             }
 
                             f.setAccessible(true);
-                            FieldDescriptor fd = FieldDescriptor.get(f);
-                            fd.setTypeRepository(getTypeRepository());
+                            FieldDescriptor fd = FieldDescriptor.get(f, repo);
                             flist.add(fd);
                         }
 
@@ -380,16 +379,14 @@
                             rf.setAccessible(true);
 
                             if (rf.getType() == f.getType()) {
-                                fd = FieldDescriptor.get(rf);
+                                fd = FieldDescriptor.get(rf,repo);
                             }
                         } catch (SecurityException | NoSuchFieldException ex) {
                         }
 
                         if (fd == null) {
-                            fd = FieldDescriptor.get(type, f);
+                            fd = FieldDescriptor.get(type, f, repo);
                         }
-
-                        fd.setTypeRepository(getTypeRepository());
                         _fields[i] = fd;
                     }
 
@@ -519,7 +516,7 @@
         }
 
         for (int i = 0; i < fields.length; i++) {
-            logger.finer("writing field " + _fields[i].getJavaName());
+            logger.finer("writing field " + _fields[i].java_name);
 
             fields[i].write(writer, val);
         }
@@ -661,7 +658,7 @@
 
         for (FieldDescriptor _field : _fields) {
 
-            logger.fine("reading field " + _field.getJavaName() + " of type " + _field.getType().getName() + " using " + _field.getClass().getName());
+            logger.fine("reading field " + _field.java_name + " of type " + _field.getType().getName() + " using " + _field.getClass().getName());
 
             try {
                 _field.read(reader, value);
@@ -669,7 +666,7 @@
                 if (ex.getMessage() != null)
                     throw ex;
 
-                String msg = String.format("%s, while reading %s.%s", ex, getJavaName(), _field.getJavaName());
+                String msg = String.format("%s, while reading %s.%s", ex, java_name, _field.java_name);
                 throw (MARSHAL) new MARSHAL(msg, ex.minor, ex.completed).initCause(ex);
             }
         }
@@ -686,7 +683,7 @@
 
         for (FieldDescriptor _field : _fields) {
 
-            logger.finer("reading field " + _field.getJavaName());
+            logger.finer("reading field " + _field.java_name);
 
             _field.readFieldIntoMap(reader, map);
         }
@@ -703,7 +700,7 @@
 
         for (FieldDescriptor _field : _fields) {
 
-            logger.finer("writing field " + _field.getJavaName());
+            logger.finer("writing field " + _field.java_name);
 
             _field.writeFieldFromMap(writer, fieldMap);
         }
@@ -786,7 +783,7 @@
 
             Class superType = type.getSuperclass();
             if (superType != null) {
-                TypeDescriptor desc = getTypeRepository().getDescriptor(superType);
+                TypeDescriptor desc = repo.getDescriptor(superType);
                 out.writeLong(desc.getHashCode());
             }
 
@@ -802,7 +799,7 @@
                 Arrays.sort(fds, compareByName);
 
             for (FieldDescriptor f : fds) {
-                out.writeUTF(f.getJavaName());
+                out.writeUTF(f.java_name);
                 out.writeUTF(makeSignature(f.getType()));
             }
 
@@ -831,8 +828,8 @@
 
     private static final Comparator compareByName = new Comparator() {
         public int compare(Object f1, Object f2) {
-            String n1 = ((FieldDescriptor) f1).getJavaName();
-            String n2 = ((FieldDescriptor) f2).getJavaName();
+            String n1 = ((FieldDescriptor) f1).java_name;
+            String n2 = ((FieldDescriptor) f2).java_name;
             return n1.compareTo(n2);
         }
     };
@@ -849,7 +846,7 @@
         if (_value_members == null) {
             _value_members = new ValueMember[_fields.length];
             for (int i = 0; i < _fields.length; i++) {
-                _value_members[i] = _fields[i].getValueMember(getTypeRepository());
+                _value_members[i] = _fields[i].getValueMember(repo);
             }
         }
 
@@ -867,7 +864,7 @@
 
         Class javaClass = getJavaClass();
         if (javaClass.isArray()) {
-            TypeDescriptor desc = getTypeRepository().getDescriptor(javaClass.getComponentType());
+            TypeDescriptor desc = repo.getDescriptor(javaClass.getComponentType());
             _type_code = desc.getTypeCode();
             _type_code = orb.create_sequence_tc(0, _type_code);
             _type_code = orb.create_value_box_tc(getRepositoryID(), "Sequence", _type_code);
@@ -926,12 +923,12 @@
             fields = new FieldDescriptor[members.length];
             for (int i = 0; i < members.length; i++) {
                 Class type = getClassFromTypeCode(members[i].type);
-                fields[i] = FieldDescriptor.get(myClass, type, members[i].name, null);
+                fields[i] = FieldDescriptor.get(myClass, type, members[i].name, null, repo);
             }
 
             if (!"".equals(desc.base_value)) {
                 Class clz = ValueHandlerImpl.getClassFromRepositoryID(desc.base_value);
-                TypeDescriptor tdesc = getTypeRepository().getDescriptor(clz);
+                TypeDescriptor tdesc = repo.getDescriptor(clz);
 
                 if ((tdesc instanceof ValueDescriptor)) {
                     super_descriptor = ((ValueDescriptor) tdesc).getObjectDeserializer(desc.base_value, runtime);
@@ -979,7 +976,7 @@
         if (oorig == orig) {
             wdesc = this;
         } else {
-            wdesc = (ValueDescriptor) getTypeRepository().getDescriptor(oorig.getClass());
+            wdesc = (ValueDescriptor) repo.getDescriptor(oorig.getClass());
 
             logger.finer("writeReplace -> " + getJavaClass().getName());
         }
@@ -1062,13 +1059,13 @@
         classes.add(c);
 
         if (c.getSuperclass() != null) {
-            TypeDescriptor desc = getTypeRepository().getDescriptor(c.getSuperclass());
+            TypeDescriptor desc = repo.getDescriptor(c.getSuperclass());
             desc.addDependencies(classes);
         }
 
         Class[] ifaces = c.getInterfaces();
         for (Class iface : ifaces) {
-            TypeDescriptor desc = getTypeRepository().getDescriptor(iface);
+            TypeDescriptor desc = repo.getDescriptor(iface);
             desc.addDependencies(classes);
         }
 
@@ -1077,7 +1074,7 @@
                 if (_field.isPrimitive())
                     continue;
 
-                TypeDescriptor desc = getTypeRepository().getDescriptor(_field.type);
+                TypeDescriptor desc = repo.getDescriptor(_field.type);
                 desc.addDependencies(classes);
             }
         }