[256931]  Provide common query language for the client
https://bugs.eclipse.org/bugs/show_bug.cgi?id=256931

diff --git a/plugins/org.eclipse.emf.cdo.common/.project b/plugins/org.eclipse.emf.cdo.common/.project
index aa3b610..b83c274 100644
--- a/plugins/org.eclipse.emf.cdo.common/.project
+++ b/plugins/org.eclipse.emf.cdo.common/.project
@@ -31,4 +31,11 @@
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
 	</natures>
+	<linkedResources>
+		<link>
+			<name>baseline</name>
+			<type>2</type>
+			<location>C:/develop/ws/cdo/.metadata/.baseline</location>
+		</link>
+	</linkedResources>
 </projectDescription>
diff --git a/plugins/org.eclipse.emf.cdo.common/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.emf.cdo.common/.settings/org.eclipse.jdt.core.prefs
index 142e640..a402f92 100644
--- a/plugins/org.eclipse.emf.cdo.common/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/org.eclipse.emf.cdo.common/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Fri Aug 01 21:17:00 CEST 2008
+#Mon Jan 05 17:52:21 CET 2009
 eclipse.preferences.version=1
 org.eclipse.jdt.core.codeComplete.argumentPrefixes=
 org.eclipse.jdt.core.codeComplete.argumentSuffixes=
@@ -8,6 +8,7 @@
 org.eclipse.jdt.core.codeComplete.localSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
 org.eclipse.jdt.core.compiler.compliance=1.5
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
diff --git a/plugins/org.eclipse.emf.cdo.common/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.common/META-INF/MANIFEST.MF
index 8afacfb..fb376dc 100644
--- a/plugins/org.eclipse.emf.cdo.common/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.cdo.common/META-INF/MANIFEST.MF
@@ -35,4 +35,6 @@
  org.eclipse.emf.cdo.internal.common.revision.cache.mem;version="2.0.0";x-friends:="org.eclipse.emf.cdo,org.eclipse.emf.cdo.server,org.eclipse.emf.cdo.tests",
  org.eclipse.emf.cdo.internal.common.revision.cache.two;version="2.0.0";x-friends:="org.eclipse.emf.cdo,org.eclipse.emf.cdo.server,org.eclipse.emf.cdo.tests",
  org.eclipse.emf.cdo.internal.common.revision.delta;version="2.0.0";x-friends:="org.eclipse.emf.cdo.tests,org.eclipse.emf.cdo,org.eclipse.emf.cdo.server",
- org.eclipse.emf.cdo.spi.common;version="2.0.0"
+ org.eclipse.emf.cdo.spi.common.id;version="2.0.0",
+ org.eclipse.emf.cdo.spi.common.model;version="2.0.0",
+ org.eclipse.emf.cdo.spi.common.revision;version="2.0.0"
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/CDODataInput.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/CDODataInput.java
index 2c25147..0d069b0 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/CDODataInput.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/CDODataInput.java
@@ -15,9 +15,10 @@
 import org.eclipse.emf.cdo.common.id.CDOIDAndVersion;
 import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
 import org.eclipse.emf.cdo.common.model.CDOClass;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.common.model.CDOClassifier;
 import org.eclipse.emf.cdo.common.model.CDOFeature;
 import org.eclipse.emf.cdo.common.model.CDOPackage;
+import org.eclipse.emf.cdo.common.model.CDOPackageManager;
 import org.eclipse.emf.cdo.common.model.CDOType;
 import org.eclipse.emf.cdo.common.revision.CDOList;
 import org.eclipse.emf.cdo.common.revision.CDORevision;
@@ -41,7 +42,7 @@
 
   public CDOType readCDOType() throws IOException;
 
-  public CDOClassRef readCDOClassRef() throws IOException;
+  public CDOClassifier readCDOClassifierRef(CDOPackageManager packageManager) throws IOException;
 
   public CDOClass readCDOClassRefAndResolve() throws IOException;
 
@@ -49,7 +50,7 @@
 
   public CDOPackage readCDOPackage() throws IOException;
 
-  public CDOClass readCDOClass(CDOPackage containingPackage) throws IOException;
+  public CDOClassifier readCDOClassifier(CDOPackage containingPackage) throws IOException;
 
   public CDOFeature readCDOFeature(CDOClass containingClass) throws IOException;
 
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/CDODataOutput.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/CDODataOutput.java
index bf9754b..233bae5 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/CDODataOutput.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/CDODataOutput.java
@@ -16,7 +16,7 @@
 import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
 import org.eclipse.emf.cdo.common.id.CDOIDProvider;
 import org.eclipse.emf.cdo.common.model.CDOClass;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.common.model.CDOClassifier;
 import org.eclipse.emf.cdo.common.model.CDOFeature;
 import org.eclipse.emf.cdo.common.model.CDOPackage;
 import org.eclipse.emf.cdo.common.model.CDOType;
@@ -44,13 +44,13 @@
 
   public void writeCDOType(CDOType cdoType) throws IOException;
 
-  public void writeCDOClassRef(CDOClassRef cdoClassRef) throws IOException;
+  public void writeCDOClassifierRef(CDOClassifier cdoClassifier) throws IOException;
 
   public void writeCDOClassRef(CDOClass cdoClass) throws IOException;
 
   public void writeCDOPackage(CDOPackage cdoPackage) throws IOException;
 
-  public void writeCDOClass(CDOClass cdoClass) throws IOException;
+  public void writeCDOClassifier(CDOClassifier cdoClassifier) throws IOException;
 
   public void writeCDOFeature(CDOFeature cdoFeature) throws IOException;
 
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDObjectFactory.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDObjectFactory.java
index e4cce4d..14b7a96 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDObjectFactory.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDObjectFactory.java
@@ -21,7 +21,7 @@
   /**
    * Returns a new instance of CDOIDObject. The implementor of this method may use (read from) the given data input to
    * determine which class to instantiate. The data input must not be used to fill the state of the new instance, this
-   * has to be done in the implementation of the {@link CDOID#read(ExtendedDataInput) read()} method of the new
+   * has to be done in the implementation of the {@link CDOID#read(ExtendedDataInput, boolean) read()} method of the new
    * instance.
    */
   public CDOIDObject createCDOIDObject(ExtendedDataInput in);
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDUtil.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDUtil.java
index 948edf9..ee143c8 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDUtil.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/id/CDOIDUtil.java
@@ -21,10 +21,10 @@
 import org.eclipse.emf.cdo.internal.common.id.CDOIDMetaRangeImpl;
 import org.eclipse.emf.cdo.internal.common.id.CDOIDTempMetaImpl;
 import org.eclipse.emf.cdo.internal.common.id.CDOIDTempObjectImpl;
-import org.eclipse.emf.cdo.spi.common.AbstractCDOID;
-import org.eclipse.emf.cdo.spi.common.AbstractCDOIDLong;
-import org.eclipse.emf.cdo.spi.common.CDOIDLibraryDescriptorImpl;
-import org.eclipse.emf.cdo.spi.common.CDOIDLongImpl;
+import org.eclipse.emf.cdo.spi.common.id.AbstractCDOID;
+import org.eclipse.emf.cdo.spi.common.id.AbstractCDOIDLong;
+import org.eclipse.emf.cdo.spi.common.id.CDOIDLibraryDescriptorImpl;
+import org.eclipse.emf.cdo.spi.common.id.CDOIDLongImpl;
 
 import org.eclipse.net4j.util.ImplementationError;
 import org.eclipse.net4j.util.ObjectUtil;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOAttribute.java
similarity index 80%
copy from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java
copy to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOAttribute.java
index 354c58a..3064ac3 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOAttribute.java
@@ -8,14 +8,14 @@
  * Contributors:
  *    Eike Stepper - initial API and implementation
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.common.model;
 
 /**
  * @author Eike Stepper
  * @noimplement This interface is not intended to be implemented by clients.
  * @since 2.0
  */
-public interface InternalCDONamedElement extends InternalCDOModelElement
+public interface CDOAttribute extends CDOFeature
 {
-  public void setName(String name);
+  public CDOType getType();
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOClass.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOClass.java
index f862173..2eff1bc 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOClass.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOClass.java
@@ -10,6 +10,7 @@
  **************************************************************************/
 package org.eclipse.emf.cdo.common.model;
 
+
 /**
  * @author Eike Stepper
  * @noimplement This interface is not intended to be implemented by clients.
@@ -58,5 +59,8 @@
    */
   public CDOFeature[] getAllFeatures();
 
-  public CDOClassRef createClassRef();
+  /**
+   * @since 2.0
+   */
+  public CDOClassifierRef createClassRef();
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOClassProxy.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOClassProxy.java
index dd8bc0e..2d29cb1 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOClassProxy.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOClassProxy.java
@@ -10,14 +10,16 @@
  **************************************************************************/
 package org.eclipse.emf.cdo.common.model;
 
+
 /**
  * @author Eike Stepper
+ * @since 2.0
  */
 public final class CDOClassProxy
 {
   private CDOPackageManager packageManager;
 
-  private CDOClassRef classRef;
+  private CDOClassifierRef classRef;
 
   private CDOClass cdoClass;
 
@@ -25,7 +27,7 @@
   {
   }
 
-  public CDOClassProxy(CDOClassRef classRef, CDOPackageManager packageManager)
+  public CDOClassProxy(CDOClassifierRef classRef, CDOPackageManager packageManager)
   {
     this.classRef = classRef;
     this.packageManager = packageManager;
@@ -82,7 +84,7 @@
     this.cdoClass = cdoClass;
   }
 
-  public CDOClassRef getClassRef()
+  public CDOClassifierRef getClassRef()
   {
     if (classRef == null)
     {
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOClassifier.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOClassifier.java
index cdc841f..21dc023 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOClassifier.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOClassifier.java
@@ -17,5 +17,17 @@
  */
 public interface CDOClassifier extends CDONamedElement
 {
+  public CDOPackage getContainingPackage();
+
   public int getClassifierID();
+
+  public Kind getClassifierKind();
+
+  /**
+   * @author Eike Stepper
+   */
+  public enum Kind
+  {
+    CLASS, TYPE, ENUM
+  }
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOClassifierRef.java
similarity index 75%
copy from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java
copy to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOClassifierRef.java
index 354c58a..e92d17a 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOClassifierRef.java
@@ -8,14 +8,19 @@
  * Contributors:
  *    Eike Stepper - initial API and implementation
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.common.model;
+
 
 /**
  * @author Eike Stepper
  * @noimplement This interface is not intended to be implemented by clients.
  * @since 2.0
  */
-public interface InternalCDONamedElement extends InternalCDOModelElement
+public interface CDOClassifierRef
 {
-  public void setName(String name);
+  public String getPackageURI();
+
+  public int getClassifierID();
+
+  public CDOClassifier resolve(CDOPackageManager packageManager);
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOEnum.java
similarity index 80%
copy from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java
copy to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOEnum.java
index 354c58a..a3cae17 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOEnum.java
@@ -8,14 +8,13 @@
  * Contributors:
  *    Eike Stepper - initial API and implementation
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.common.model;
 
 /**
  * @author Eike Stepper
  * @noimplement This interface is not intended to be implemented by clients.
  * @since 2.0
  */
-public interface InternalCDONamedElement extends InternalCDOModelElement
+public interface CDOEnum extends CDOType
 {
-  public void setName(String name);
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOEnumLiteral.java
similarity index 80%
copy from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java
copy to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOEnumLiteral.java
index 354c58a..8083be1 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOEnumLiteral.java
@@ -8,14 +8,13 @@
  * Contributors:
  *    Eike Stepper - initial API and implementation
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.common.model;
 
 /**
  * @author Eike Stepper
  * @noimplement This interface is not intended to be implemented by clients.
  * @since 2.0
  */
-public interface InternalCDONamedElement extends InternalCDOModelElement
+public interface CDOEnumLiteral extends CDONamedElement
 {
-  public void setName(String name);
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOFeature.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOFeature.java
index 54d320b..3115e36 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOFeature.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOFeature.java
@@ -16,18 +16,17 @@
  */
 public interface CDOFeature extends CDOTypedElement
 {
+  public CDOClass getContainingClass();
+
   public int getFeatureID();
 
-  public int getFeatureIndex();
-
-  public boolean isContainment();
-
   /**
    * @since 2.0
    */
   public Object getDefaultValue();
 
-  public CDOClass getContainingClass();
-
-  public CDOPackage getContainingPackage();
+  /**
+   * @since 2.0
+   */
+  public boolean isUnsettable();
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOModelElement.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOModelElement.java
index 385f222..6be1e4f 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOModelElement.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOModelElement.java
@@ -16,11 +16,6 @@
  */
 public interface CDOModelElement
 {
-  /**
-   * @since 2.0
-   */
-  public CDOPackage getContainingPackage();
-
   public CDOPackageManager getPackageManager();
 
   public Object getClientInfo();
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOModelUtil.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOModelUtil.java
index b8a5767..8706580 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOModelUtil.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOModelUtil.java
@@ -11,6 +11,7 @@
 package org.eclipse.emf.cdo.common.model;
 
 import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
+import org.eclipse.emf.cdo.common.model.CDOClassifier.Kind;
 import org.eclipse.emf.cdo.internal.common.model.CDOClassImpl;
 import org.eclipse.emf.cdo.internal.common.model.CDOClassRefImpl;
 import org.eclipse.emf.cdo.internal.common.model.CDOFeatureImpl;
@@ -19,6 +20,7 @@
 
 /**
  * @author Eike Stepper
+ * @since 2.0
  */
 public final class CDOModelUtil
 {
@@ -71,8 +73,25 @@
     return new CDOFeatureImpl(containingClass, featureID, name, referenceType, many, containment);
   }
 
-  public static CDOClassRef createClassRef(String packageURI, int classifierID)
+  public static CDOClassifierRef createClassRef(String packageURI, int classifierID)
   {
     return new CDOClassRefImpl(packageURI, classifierID);
   }
+
+  /**
+   * @since 2.0
+   */
+  public static CDOClassifier createClassifierRef(Kind kind, CDOPackageManager packageManager)
+  {
+    switch (kind)
+    {
+    case CLASS:
+      return new CDOClassRef(packageManager);
+    case TYPE:
+    case ENUM:
+
+    default:
+      throw new IllegalArgumentException("kind: " + kind);
+    }
+  }
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOOperation.java
similarity index 80%
rename from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java
rename to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOOperation.java
index 354c58a..5268076 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOOperation.java
@@ -8,14 +8,14 @@
  * Contributors:
  *    Eike Stepper - initial API and implementation
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.common.model;
 
 /**
  * @author Eike Stepper
  * @noimplement This interface is not intended to be implemented by clients.
  * @since 2.0
  */
-public interface InternalCDONamedElement extends InternalCDOModelElement
+public interface CDOOperation extends CDOTypedElement
 {
-  public void setName(String name);
+  public CDOClass getContainingClass();
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOPackage.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOPackage.java
index 6d77d01..828965d 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOPackage.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOPackage.java
@@ -18,27 +18,13 @@
  */
 public interface CDOPackage extends CDONamedElement, Comparable<CDOPackage>
 {
-  public CDOPackageManager getPackageManager();
-
   public String getPackageURI();
 
-  public int getClassCount();
-
-  public CDOClass[] getClasses();
-
-  public CDOClass[] getConcreteClasses();
-
-  public CDOClass lookupClass(int classifierID);
-
-  public String getEcore();
-
   public boolean isSystem();
 
   public boolean isDynamic();
 
-  public boolean isProxy();
-
-  public boolean isPersistent();
+  public String getEcore();
 
   public CDOIDMetaRange getMetaIDRange();
 
@@ -49,4 +35,27 @@
   public CDOPackage getTopLevelPackage();
 
   public CDOPackage[] getSubPackages(boolean recursive);
+
+  /**
+   * @since 2.0
+   */
+  public CDOClassifier lookupClassifier(int classifierID);
+
+  /**
+   * @since 2.0
+   */
+  public int getClassifierCount();
+
+  /**
+   * @since 2.0
+   */
+  public CDOClassifier[] getClassifiers();
+
+  public CDOClass lookupClass(int classifierID);
+
+  public int getClassCount();
+
+  public CDOClass[] getClasses();
+
+  public CDOClass[] getConcreteClasses();
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOParameter.java
similarity index 80%
copy from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java
copy to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOParameter.java
index 354c58a..9c2816d 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOParameter.java
@@ -8,14 +8,14 @@
  * Contributors:
  *    Eike Stepper - initial API and implementation
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.common.model;
 
 /**
  * @author Eike Stepper
  * @noimplement This interface is not intended to be implemented by clients.
  * @since 2.0
  */
-public interface InternalCDONamedElement extends InternalCDOModelElement
+public interface CDOParameter extends CDOTypedElement
 {
-  public void setName(String name);
+  public CDOOperation getContainingOperation();
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOReference.java
similarity index 80%
copy from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java
copy to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOReference.java
index 354c58a..a64e077 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOReference.java
@@ -8,14 +8,16 @@
  * Contributors:
  *    Eike Stepper - initial API and implementation
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.common.model;
 
 /**
  * @author Eike Stepper
  * @noimplement This interface is not intended to be implemented by clients.
  * @since 2.0
  */
-public interface InternalCDONamedElement extends InternalCDOModelElement
+public interface CDOReference extends CDOFeature
 {
-  public void setName(String name);
+  public CDOClass getType();
+
+  public boolean isContainment();
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOType.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOType.java
index d12d6ea..1219661 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOType.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOType.java
@@ -10,87 +10,10 @@
  **************************************************************************/
 package org.eclipse.emf.cdo.common.model;
 
-import org.eclipse.emf.cdo.common.CDODataInput;
-import org.eclipse.emf.cdo.common.CDODataOutput;
-import org.eclipse.emf.cdo.common.revision.CDOReferenceAdjuster;
-
-import java.io.IOException;
-
 /**
  * @author Eike Stepper
  * @noimplement This interface is not intended to be implemented by clients.
  */
-public interface CDOType
+public interface CDOType extends CDOClassifier
 {
-  public static final CDOType OBJECT = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.OBJECT;
-
-  public static final CDOType BOOLEAN = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.BOOLEAN;
-
-  public static final CDOType BOOLEAN_OBJECT = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.BOOLEAN_OBJECT;
-
-  public static final CDOType BYTE = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.BYTE;
-
-  public static final CDOType BYTE_OBJECT = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.BYTE_OBJECT;
-
-  public static final CDOType CHAR = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.CHAR;
-
-  public static final CDOType CHARACTER_OBJECT = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.CHARACTER_OBJECT;
-
-  public static final CDOType DATE = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.DATE;
-
-  public static final CDOType DOUBLE = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.DOUBLE;
-
-  public static final CDOType DOUBLE_OBJECT = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.DOUBLE_OBJECT;
-
-  public static final CDOType FLOAT = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.FLOAT;
-
-  public static final CDOType FLOAT_OBJECT = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.FLOAT_OBJECT;
-
-  public static final CDOType INT = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.INT;
-
-  public static final CDOType INTEGER_OBJECT = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.INTEGER_OBJECT;
-
-  public static final CDOType LONG = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.LONG;
-
-  public static final CDOType LONG_OBJECT = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.LONG_OBJECT;
-
-  public static final CDOType SHORT = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.SHORT;
-
-  public static final CDOType SHORT_OBJECT = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.SHORT_OBJECT;
-
-  public static final CDOType STRING = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.STRING;
-
-  public static final CDOType BYTE_ARRAY = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.BYTE_ARRAY;
-
-  /**
-   * @since 2.0
-   */
-  public static final CDOType FEATURE_MAP_ENTRY = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.FEATURE_MAP_ENTRY;
-
-  public static final CDOType CUSTOM = org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl.CUSTOM;
-
-  public String getName();
-
-  public int getTypeID();
-
-  public boolean canBeNull();
-
-  public Object getDefaultValue();
-
-  public Object copyValue(Object value);
-
-  /**
-   * @since 2.0
-   */
-  public Object adjustReferences(CDOReferenceAdjuster adjuster, Object value);
-
-  /**
-   * @since 2.0
-   */
-  public Object readValue(CDODataInput in) throws IOException;
-
-  /**
-   * @since 2.0
-   */
-  public void writeValue(CDODataOutput out, Object value) throws IOException;
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOTypedElement.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOTypedElement.java
index bbce203..8151d96 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOTypedElement.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOTypedElement.java
@@ -10,6 +10,7 @@
  **************************************************************************/
 package org.eclipse.emf.cdo.common.model;
 
+
 /**
  * @author Eike Stepper
  * @noimplement This interface is not intended to be implemented by clients.
@@ -17,11 +18,13 @@
  */
 public interface CDOTypedElement extends CDONamedElement
 {
-  public CDOType getType();
+  public CDOClassifier getType();
+
+  public int getLowerBound();
+
+  public int getUpperBound();
+
+  public boolean isRequired();
 
   public boolean isMany();
-
-  public boolean isReference();
-
-  public CDOClass getReferenceType();
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/core/CDOCorePackage.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/core/CDOCorePackage.java
index 3fe59cb..4cad2ef 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/core/CDOCorePackage.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/core/CDOCorePackage.java
@@ -11,10 +11,12 @@
 package org.eclipse.emf.cdo.common.model.core;
 
 import org.eclipse.emf.cdo.common.model.CDOPackage;
+import org.eclipse.emf.cdo.common.model.CDOType;
 
 /**
  * @author Eike Stepper
  * @noimplement This interface is not intended to be implemented by clients.
+ * @since 2.0
  */
 public interface CDOCorePackage extends CDOPackage
 {
@@ -23,4 +25,104 @@
   public static final String NAME = "cdocore";
 
   public CDOObjectClass getCDOObjectClass();
+
+  /**
+   * @since 2.0
+   */
+  public CDOType getCDOBooleanObject();
+
+  /**
+   * @since 2.0
+   */
+  public CDOType getCDOCharacterObject();
+
+  /**
+   * @since 2.0
+   */
+  public CDOType getCDODate();
+
+  /**
+   * @since 2.0
+   */
+  public CDOType getCDODoubleObject();
+
+  /**
+   * @since 2.0
+   */
+  public CDOType getCDOFloatObject();
+
+  /**
+   * @since 2.0
+   */
+  public CDOType getCDOIntegerObject();
+
+  /**
+   * @since 2.0
+   */
+  public CDOType getCDOBoolean();
+
+  /**
+   * @since 2.0
+   */
+  public CDOType getCDOByteObject();
+
+  /**
+   * @since 2.0
+   */
+  public CDOType getCDOByte();
+
+  /**
+   * @since 2.0
+   */
+  public CDOType getCDOByteArray();
+
+  /**
+   * @since 2.0
+   */
+  public CDOType getCDOChar();
+
+  /**
+   * @since 2.0
+   */
+  public CDOType getCDODouble();
+
+  /**
+   * @since 2.0
+   */
+  public CDOType getCDOFloat();
+
+  /**
+   * @since 2.0
+   */
+  public CDOType getCDOInt();
+
+  /**
+   * @since 2.0
+   */
+  public CDOType getCDOLongObject();
+
+  /**
+   * @since 2.0
+   */
+  public CDOType getCDOShortObject();
+
+  /**
+   * @since 2.0
+   */
+  public CDOType getCDOLong();
+
+  /**
+   * @since 2.0
+   */
+  public CDOType getCDOShort();
+
+  /**
+   * @since 2.0
+   */
+  public CDOType getCDOFeatureMapEntry();
+
+  /**
+   * @since 2.0
+   */
+  public CDOType getCDOString();
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/cache/CDORevisionCache.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/cache/CDORevisionCache.java
index 044568e..e025503 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/cache/CDORevisionCache.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/cache/CDORevisionCache.java
@@ -14,7 +14,7 @@
 import org.eclipse.emf.cdo.common.model.CDOClass;
 import org.eclipse.emf.cdo.common.model.CDOPackageManager;
 import org.eclipse.emf.cdo.common.revision.CDORevision;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.event.IEvent;
 import org.eclipse.net4j.util.event.INotifier;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/CDODataInputImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/CDODataInputImpl.java
index 9d8f000..0b96911 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/CDODataInputImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/CDODataInputImpl.java
@@ -19,13 +19,15 @@
 import org.eclipse.emf.cdo.common.id.CDOIDObjectFactory;
 import org.eclipse.emf.cdo.common.id.CDOID.Type;
 import org.eclipse.emf.cdo.common.model.CDOClass;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.common.model.CDOClassifier;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
 import org.eclipse.emf.cdo.common.model.CDOFeature;
 import org.eclipse.emf.cdo.common.model.CDOModelUtil;
 import org.eclipse.emf.cdo.common.model.CDOPackage;
 import org.eclipse.emf.cdo.common.model.CDOPackageManager;
 import org.eclipse.emf.cdo.common.model.CDOPackageURICompressor;
 import org.eclipse.emf.cdo.common.model.CDOType;
+import org.eclipse.emf.cdo.common.model.CDOClassifier.Kind;
 import org.eclipse.emf.cdo.common.revision.CDOList;
 import org.eclipse.emf.cdo.common.revision.CDOListFactory;
 import org.eclipse.emf.cdo.common.revision.CDORevision;
@@ -42,9 +44,9 @@
 import org.eclipse.emf.cdo.internal.common.id.CDOIDTempMetaImpl;
 import org.eclipse.emf.cdo.internal.common.id.CDOIDTempObjectImpl;
 import org.eclipse.emf.cdo.internal.common.model.CDOClassImpl;
-import org.eclipse.emf.cdo.internal.common.model.CDOClassRefImpl;
 import org.eclipse.emf.cdo.internal.common.model.CDOFeatureImpl;
 import org.eclipse.emf.cdo.internal.common.model.CDOPackageImpl;
+import org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl;
 import org.eclipse.emf.cdo.internal.common.revision.delta.CDOAddFeatureDeltaImpl;
 import org.eclipse.emf.cdo.internal.common.revision.delta.CDOClearFeatureDeltaImpl;
 import org.eclipse.emf.cdo.internal.common.revision.delta.CDOContainerFeatureDeltaImpl;
@@ -54,9 +56,9 @@
 import org.eclipse.emf.cdo.internal.common.revision.delta.CDORevisionDeltaImpl;
 import org.eclipse.emf.cdo.internal.common.revision.delta.CDOSetFeatureDeltaImpl;
 import org.eclipse.emf.cdo.internal.common.revision.delta.CDOUnsetFeatureDeltaImpl;
-import org.eclipse.emf.cdo.spi.common.AbstractCDOID;
-import org.eclipse.emf.cdo.spi.common.InternalCDOList;
-import org.eclipse.emf.cdo.spi.common.InternalCDOPackage;
+import org.eclipse.emf.cdo.spi.common.id.AbstractCDOID;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackage;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDOList;
 
 import org.eclipse.net4j.util.ImplementationError;
 import org.eclipse.net4j.util.concurrent.RWLockManager;
@@ -199,7 +201,7 @@
   public void readCDOPackage(CDOPackage cdoPackage) throws IOException
   {
     ((InternalCDOPackage)cdoPackage).setName(in.readString());
-    ((InternalCDOPackage)cdoPackage).read(this);
+    ((InternalCDOPackage)cdoPackage).read(this, null);
   }
 
   public CDOPackage readCDOPackage() throws IOException
@@ -207,14 +209,18 @@
     return new CDOPackageImpl(getPackageManager(), this);
   }
 
-  public CDOClassRef readCDOClassRef() throws IOException
+  public CDOClassifier readCDOClassifierRef(CDOPackageManager packageManager) throws IOException
   {
-    return new CDOClassRefImpl(this);
+    byte ordinal = in.readByte();
+    CDOClassifier.Kind kind = CDOClassifier.Kind.values()[ordinal];
+    CDOClassifier cdoClassifier = CDOModelUtil.createClassifierRef(kind, packageManager);
+    cdoClassifier.readRef(this);
+    return cdoClassifier;
   }
 
   public CDOClass readCDOClassRefAndResolve() throws IOException
   {
-    CDOClassRef classRef = readCDOClassRef();
+    CDOClassifierRef classRef = readCDOClassRef();
     CDOPackageManager packageManager = getPackageManager();
     CDOClass cdoClass = classRef.resolve(packageManager);
     if (cdoClass == null)
@@ -225,9 +231,21 @@
     return cdoClass;
   }
 
-  public CDOClass readCDOClass(CDOPackage containingPackage) throws IOException
+  public CDOClassifier readCDOClassifier(CDOPackage containingPackage) throws IOException
   {
-    return new CDOClassImpl(containingPackage, this);
+    int ordinal = readByte();
+    Kind kind = CDOClassifier.Kind.values()[ordinal];
+    switch (kind)
+    {
+    case CLASS:
+      return new CDOClassImpl(containingPackage, this);
+
+    case TYPE:
+      return new CDOTypeImpl(containingPackage, this);
+
+    default:
+      throw new IOException("Invalid kind: " + kind);
+    }
   }
 
   public CDOFeature readCDOFeature(CDOClass containingClass) throws IOException
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/CDODataOutputImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/CDODataOutputImpl.java
index ad5d5a8..7a079b0 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/CDODataOutputImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/CDODataOutputImpl.java
@@ -16,7 +16,7 @@
 import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
 import org.eclipse.emf.cdo.common.id.CDOID.Type;
 import org.eclipse.emf.cdo.common.model.CDOClass;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.common.model.CDOClassifier;
 import org.eclipse.emf.cdo.common.model.CDOFeature;
 import org.eclipse.emf.cdo.common.model.CDOPackage;
 import org.eclipse.emf.cdo.common.model.CDOPackageURICompressor;
@@ -28,15 +28,14 @@
 import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
 import org.eclipse.emf.cdo.internal.common.bundle.OM;
 import org.eclipse.emf.cdo.internal.common.id.CDOIDAndVersionImpl;
-import org.eclipse.emf.cdo.internal.common.model.CDOClassRefImpl;
 import org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl;
 import org.eclipse.emf.cdo.internal.common.revision.delta.CDOFeatureDeltaImpl;
 import org.eclipse.emf.cdo.internal.common.revision.delta.CDORevisionDeltaImpl;
-import org.eclipse.emf.cdo.spi.common.AbstractCDOID;
-import org.eclipse.emf.cdo.spi.common.InternalCDOClass;
-import org.eclipse.emf.cdo.spi.common.InternalCDOFeature;
-import org.eclipse.emf.cdo.spi.common.InternalCDOPackage;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.id.AbstractCDOID;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOClass;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOFeature;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackage;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.concurrent.RWLockManager;
 import org.eclipse.net4j.util.io.ExtendedDataOutput;
@@ -168,7 +167,7 @@
 
   public void writeCDOType(CDOType cdoType) throws IOException
   {
-    ((CDOTypeImpl)cdoType).write(this);
+    ((CDOTypeImpl)cdoType).write(this, null);
   }
 
   public void writeCDOPackageURI(String uri) throws IOException
@@ -176,29 +175,31 @@
     getPackageURICompressor().writePackageURI(this, uri);
   }
 
-  public void writeCDOClassRef(CDOClassRef cdoClassRef) throws IOException
+  public void writeCDOClassifierRef(CDOClassifier cdoClassifier) throws IOException
   {
-    ((CDOClassRefImpl)cdoClassRef).write(this);
+    writeByte(cdoClassifier.getClassifierKind().ordinal());
+    cdoClassifier.writeRef(this);
   }
 
   public void writeCDOClassRef(CDOClass cdoClass) throws IOException
   {
-    writeCDOClassRef(cdoClass.createClassRef());
+    writeCDOClassifierRef(cdoClass.createClassRef());
   }
 
   public void writeCDOPackage(CDOPackage cdoPackage) throws IOException
   {
-    ((InternalCDOPackage)cdoPackage).write(this);
+    ((InternalCDOPackage)cdoPackage).write(this, null);
   }
 
-  public void writeCDOClass(CDOClass cdoClass) throws IOException
+  public void writeCDOClassifier(CDOClassifier cdoClassifier) throws IOException
   {
-    ((InternalCDOClass)cdoClass).write(this);
+    writeByte(cdoClassifier.getClassifierKind().ordinal());
+    ((InternalCDOClass)cdoClassifier).write(this, null);
   }
 
   public void writeCDOFeature(CDOFeature cdoFeature) throws IOException
   {
-    ((InternalCDOFeature)cdoFeature).write(this);
+    ((InternalCDOFeature)cdoFeature).write(this, null);
   }
 
   public void writeCDOID(CDOID id) throws IOException
@@ -360,7 +361,7 @@
     if (value instanceof CDOClass)
     {
       writeBoolean(true);
-      writeCDOClassRef(((CDOClass)value).createClassRef());
+      writeCDOClassifierRef(((CDOClass)value).createClassRef());
     }
     else
     {
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDExternalImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDExternalImpl.java
index 7d6ac09..ec9c822 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDExternalImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDExternalImpl.java
@@ -11,7 +11,7 @@
 package org.eclipse.emf.cdo.internal.common.id;
 
 import org.eclipse.emf.cdo.common.id.CDOIDExternal;
-import org.eclipse.emf.cdo.spi.common.AbstractCDOID;
+import org.eclipse.emf.cdo.spi.common.id.AbstractCDOID;
 
 import org.eclipse.net4j.util.ObjectUtil;
 import org.eclipse.net4j.util.io.ExtendedDataInput;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDMetaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDMetaImpl.java
index 12f7e56..4073348 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDMetaImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDMetaImpl.java
@@ -11,7 +11,7 @@
 package org.eclipse.emf.cdo.internal.common.id;
 
 import org.eclipse.emf.cdo.common.id.CDOIDMeta;
-import org.eclipse.emf.cdo.spi.common.AbstractCDOIDLong;
+import org.eclipse.emf.cdo.spi.common.id.AbstractCDOIDLong;
 
 /**
  * @author Eike Stepper
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDNullImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDNullImpl.java
index 3f5d17a..61b76e2 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDNullImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDNullImpl.java
@@ -15,7 +15,7 @@
 import org.eclipse.emf.cdo.common.id.CDOIDMeta;
 import org.eclipse.emf.cdo.common.id.CDOIDObject;
 import org.eclipse.emf.cdo.common.id.CDOIDTemp;
-import org.eclipse.emf.cdo.spi.common.AbstractCDOID;
+import org.eclipse.emf.cdo.spi.common.id.AbstractCDOID;
 
 import org.eclipse.net4j.util.io.ExtendedDataInput;
 import org.eclipse.net4j.util.io.ExtendedDataOutput;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempMetaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempMetaImpl.java
index 63c7d27..475a6e1 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempMetaImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempMetaImpl.java
@@ -12,7 +12,7 @@
 package org.eclipse.emf.cdo.internal.common.id;
 
 import org.eclipse.emf.cdo.common.id.CDOIDTempMeta;
-import org.eclipse.emf.cdo.spi.common.AbstractCDOIDInteger;
+import org.eclipse.emf.cdo.spi.common.id.AbstractCDOIDInteger;
 
 /**
  * @author Eike Stepper
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempObjectImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempObjectImpl.java
index 09ba543..109dcfb 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempObjectImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/id/CDOIDTempObjectImpl.java
@@ -11,7 +11,7 @@
 package org.eclipse.emf.cdo.internal.common.id;
 
 import org.eclipse.emf.cdo.common.id.CDOIDTemp;
-import org.eclipse.emf.cdo.spi.common.AbstractCDOIDInteger;
+import org.eclipse.emf.cdo.spi.common.id.AbstractCDOIDInteger;
 
 /**
  * @author Eike Stepper
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOAttributeImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOAttributeImpl.java
new file mode 100644
index 0000000..0f4ea4e
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOAttributeImpl.java
@@ -0,0 +1,49 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2008 Eike Stepper, Germany.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ **************************************************************************/
+package org.eclipse.emf.cdo.internal.common.model;
+
+import org.eclipse.emf.cdo.common.model.CDOClassifier;
+import org.eclipse.emf.cdo.common.model.CDOType;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOAttribute;
+
+import org.eclipse.net4j.util.CheckUtil;
+
+import java.text.MessageFormat;
+
+/**
+ * @author Eike Stepper
+ */
+public class CDOAttributeImpl extends CDOFeatureImpl implements InternalCDOAttribute
+{
+  public CDOAttributeImpl()
+  {
+  }
+
+  @Override
+  public CDOType getType()
+  {
+    return (CDOType)super.getType();
+  }
+
+  @Override
+  public void setType(CDOClassifier type)
+  {
+    CheckUtil.checkArg(type instanceof CDOType, "type");
+    super.setType(type);
+  }
+
+  @Override
+  public String toString()
+  {
+    return MessageFormat.format("CDOAttribute[featureID={0}, name={1}, type={2}[{3}..{4}]]", getFeatureID(), getName(),
+        getType(), getLowerBound(), getUpperBound());
+  }
+}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassImpl.java
index 0d234af..9800988 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassImpl.java
@@ -14,16 +14,15 @@
 import org.eclipse.emf.cdo.common.CDODataOutput;
 import org.eclipse.emf.cdo.common.model.CDOClass;
 import org.eclipse.emf.cdo.common.model.CDOClassProxy;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
 import org.eclipse.emf.cdo.common.model.CDOFeature;
 import org.eclipse.emf.cdo.common.model.CDOModelUtil;
 import org.eclipse.emf.cdo.common.model.CDOPackage;
-import org.eclipse.emf.cdo.internal.common.bundle.OM;
-import org.eclipse.emf.cdo.spi.common.InternalCDOClass;
-import org.eclipse.emf.cdo.spi.common.InternalCDOFeature;
+import org.eclipse.emf.cdo.common.model.CDOPackageManager;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOClass;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOFeature;
 
 import org.eclipse.net4j.util.ObjectUtil;
-import org.eclipse.net4j.util.om.trace.ContextTracer;
 
 import java.io.IOException;
 import java.text.MessageFormat;
@@ -36,10 +35,6 @@
  */
 public class CDOClassImpl extends CDOClassifierImpl implements InternalCDOClass
 {
-  private static final ContextTracer MODEL_TRACER = new ContextTracer(OM.DEBUG_MODEL, CDOClassImpl.class);
-
-  private static final ContextTracer PROTOCOL_TRACER = new ContextTracer(OM.DEBUG_PROTOCOL, CDOClassImpl.class);
-
   private boolean isAbstract;
 
   private List<CDOClassProxy> superTypes = new ArrayList<CDOClassProxy>(0);
@@ -56,61 +51,9 @@
   {
   }
 
-  public CDOClassImpl(CDOPackage containingPackage, int classifierID, String name, boolean isAbstract)
+  public Kind getClassifierKind()
   {
-    super(containingPackage, classifierID, name);
-    this.isAbstract = isAbstract;
-    if (MODEL_TRACER.isEnabled())
-    {
-      MODEL_TRACER.format("Created {0}", this);
-    }
-  }
-
-  public CDOClassImpl(CDOPackage containingPackage, CDODataInput in) throws IOException
-  {
-    super(containingPackage, in);
-    isAbstract = in.readBoolean();
-    readSuperTypes(in);
-    readFeatures(in);
-
-    if (PROTOCOL_TRACER.isEnabled())
-    {
-      PROTOCOL_TRACER.format("Read class: ID={0}, name={1}, abstract={2}", getClassifierID(), getName(), isAbstract);
-    }
-  }
-
-  @Override
-  public void write(CDODataOutput out) throws IOException
-  {
-    if (PROTOCOL_TRACER.isEnabled())
-    {
-      PROTOCOL_TRACER.format("Writing class: ID={0}, name={1}, abstract={2}", getClassifierID(), getName(), isAbstract);
-    }
-
-    super.write(out);
-    out.writeBoolean(isAbstract);
-    writeSuperTypes(out);
-    writeFeatures(out);
-  }
-
-  public int getFeatureID(CDOFeature feature)
-  {
-    int index = feature.getFeatureIndex();
-    if (index != -1)
-    {
-      CDOFeature[] features = getAllFeatures();
-      while (index < features.length)
-      {
-        if (features[index] == feature)
-        {
-          return index;
-        }
-
-        ++index;
-      }
-    }
-
-    return -1;
+    return Kind.CLASS;
   }
 
   public boolean isAbstract()
@@ -123,26 +66,6 @@
     this.isAbstract = isAbstract;
   }
 
-  public boolean isResourceNode()
-  {
-    return false;
-  }
-
-  public boolean isResourceFolder()
-  {
-    return false;
-  }
-
-  public boolean isResource()
-  {
-    return false;
-  }
-
-  public boolean isRoot()
-  {
-    return false;
-  }
-
   public int getSuperTypeCount()
   {
     return superTypes.size();
@@ -217,7 +140,47 @@
     return null;
   }
 
-  public CDOClassRef createClassRef()
+  public int getFeatureID(CDOFeature feature)
+  {
+    int index = ((InternalCDOFeature)feature).getFeatureIndex();
+    if (index != -1)
+    {
+      CDOFeature[] features = getAllFeatures();
+      while (index < features.length)
+      {
+        if (features[index] == feature)
+        {
+          return index;
+        }
+
+        ++index;
+      }
+    }
+
+    return -1;
+  }
+
+  public boolean isResourceNode()
+  {
+    return false;
+  }
+
+  public boolean isResourceFolder()
+  {
+    return false;
+  }
+
+  public boolean isResource()
+  {
+    return false;
+  }
+
+  public boolean isRoot()
+  {
+    return false;
+  }
+
+  public CDOClassifierRef createClassRef()
   {
     return CDOModelUtil.createClassRef(getContainingPackage().getPackageURI(), getClassifierID());
   }
@@ -284,23 +247,13 @@
     return allFeatures;
   }
 
-  public void addSuperType(CDOClassRef classRef)
+  public void addSuperType(CDOClassifierRef classRef)
   {
-    if (MODEL_TRACER.isEnabled())
-    {
-      MODEL_TRACER.format("Adding super type: {0}", classRef);
-    }
-
     superTypes.add(new CDOClassProxy(classRef, getPackageManager()));
   }
 
   public void addFeature(CDOFeature cdoFeature)
   {
-    if (MODEL_TRACER.isEnabled())
-    {
-      MODEL_TRACER.format("Adding feature: {0}", cdoFeature);
-    }
-
     features.add(cdoFeature);
   }
 
@@ -310,9 +263,28 @@
   }
 
   @Override
+  public void read(CDODataInput in, boolean proxy) throws IOException
+  {
+    super.read(in, proxy);
+    isAbstract = in.readBoolean();
+    readSuperTypes(in);
+    readFeatures(in);
+  }
+
+  @Override
+  public void write(CDODataOutput out, boolean proxy) throws IOException
+  {
+    super.write(out, proxy);
+    out.writeBoolean(isAbstract);
+    writeSuperTypes(out);
+    writeFeatures(out);
+  }
+
+  @Override
   public String toString()
   {
-    return MessageFormat.format("CDOClass(ID={0}, name={1})", getClassifierID(), getName());
+    return MessageFormat.format("CDOClass[classifierID={0}, name={1}, abstract={2}]", getClassifierID(), getName(),
+        isAbstract);
   }
 
   private void setIndex(int featureID, int index)
@@ -328,19 +300,9 @@
   private void readSuperTypes(CDODataInput in) throws IOException
   {
     int size = in.readInt();
-    if (PROTOCOL_TRACER.isEnabled())
-    {
-      PROTOCOL_TRACER.format("Reading {0} super types", size);
-    }
-
     for (int i = 0; i < size; i++)
     {
-      CDOClassRef classRef = in.readCDOClassRef();
-      if (PROTOCOL_TRACER.isEnabled())
-      {
-        PROTOCOL_TRACER.format("Read super type: classRef={0}", classRef, getClassifierID());
-      }
-
+      CDOClassifierRef classRef = in.readCDOClassRef();
       superTypes.add(new CDOClassProxy(classRef, getPackageManager()));
     }
   }
@@ -348,11 +310,6 @@
   private void readFeatures(CDODataInput in) throws IOException
   {
     int size = in.readInt();
-    if (PROTOCOL_TRACER.isEnabled())
-    {
-      PROTOCOL_TRACER.format("Reading {0} features", size);
-    }
-
     for (int i = 0; i < size; i++)
     {
       CDOFeature cdoFeature = in.readCDOFeature(this);
@@ -363,32 +320,17 @@
   private void writeSuperTypes(CDODataOutput out) throws IOException
   {
     int size = superTypes.size();
-    if (PROTOCOL_TRACER.isEnabled())
-    {
-      PROTOCOL_TRACER.format("Writing {0} super types", size);
-    }
-
     out.writeInt(size);
     for (CDOClassProxy proxy : superTypes)
     {
-      CDOClassRef classRef = proxy.getClassRef();
-      if (PROTOCOL_TRACER.isEnabled())
-      {
-        PROTOCOL_TRACER.format("Writing super type: classRef={0}", classRef);
-      }
-
-      out.writeCDOClassRef(classRef);
+      CDOClassifierRef classRef = proxy.getClassRef();
+      out.writeCDOClassifierRef(classRef);
     }
   }
 
   private void writeFeatures(CDODataOutput out) throws IOException
   {
     int size = features.size();
-    if (PROTOCOL_TRACER.isEnabled())
-    {
-      PROTOCOL_TRACER.format("Writing {0} features", size);
-    }
-
     out.writeInt(size);
     for (CDOFeature cdoFeature : features)
     {
@@ -412,4 +354,164 @@
       result.add(object);
     }
   }
+
+  /**
+   * @author Eike Stepper
+   */
+  public static final class Ref extends CDOClassifierImpl.Ref implements CDOClass
+  {
+    public Ref(CDOPackageManager packageManager, String packageURI, int classifierID)
+    {
+      super(packageManager, packageURI, classifierID);
+    }
+
+    public Kind getClassifierKind()
+    {
+      return Kind.CLASS;
+    }
+
+    @Override
+    public CDOClass resolve()
+    {
+      return (CDOClass)super.resolve();
+    }
+
+    @Override
+    public String toString()
+    {
+      if (isResolved())
+      {
+        resolve().toString();
+      }
+
+      return MessageFormat.format("CDOClassRef[packageURI={0}, classifierID={1}]", getPackageURI(), getClassifierID());
+    }
+
+    public int compareTo(CDOClass o)
+    {
+      return resolve().compareTo(o);
+    }
+
+    public CDOClassifierRef createClassRef()
+    {
+      return resolve().createClassRef();
+    }
+
+    public CDOFeature[] getAllFeatures()
+    {
+      return resolve().getAllFeatures();
+    }
+
+    public CDOClass[] getAllSuperTypes()
+    {
+      return resolve().getAllSuperTypes();
+    }
+
+    @Override
+    public int getClassifierID()
+    {
+      return resolve().getClassifierID();
+    }
+
+    @Override
+    public Object getClientInfo()
+    {
+      return resolve().getClientInfo();
+    }
+
+    @Override
+    public CDOPackage getContainingPackage()
+    {
+      return resolve().getContainingPackage();
+    }
+
+    public int getFeatureCount()
+    {
+      return resolve().getFeatureCount();
+    }
+
+    public int getFeatureID(CDOFeature feature)
+    {
+      return resolve().getFeatureID(feature);
+    }
+
+    public CDOFeature[] getFeatures()
+    {
+      return resolve().getFeatures();
+    }
+
+    @Override
+    public String getName()
+    {
+      return resolve().getName();
+    }
+
+    @Override
+    public CDOPackageManager getPackageManager()
+    {
+      return resolve().getPackageManager();
+    }
+
+    @Override
+    public String getQualifiedName()
+    {
+      return resolve().getQualifiedName();
+    }
+
+    @Override
+    public Object getServerInfo()
+    {
+      return resolve().getServerInfo();
+    }
+
+    public CDOClass getSuperType(int index)
+    {
+      return resolve().getSuperType(index);
+    }
+
+    public int getSuperTypeCount()
+    {
+      return resolve().getSuperTypeCount();
+    }
+
+    public CDOClass[] getSuperTypes()
+    {
+      return resolve().getSuperTypes();
+    }
+
+    public boolean isAbstract()
+    {
+      return resolve().isAbstract();
+    }
+
+    public boolean isResource()
+    {
+      return resolve().isResource();
+    }
+
+    public boolean isResourceFolder()
+    {
+      return resolve().isResourceFolder();
+    }
+
+    public boolean isResourceNode()
+    {
+      return resolve().isResourceNode();
+    }
+
+    public boolean isRoot()
+    {
+      return resolve().isRoot();
+    }
+
+    public CDOFeature lookupFeature(int featureId)
+    {
+      return resolve().lookupFeature(featureId);
+    }
+
+    public CDOFeature lookupFeature(String name)
+    {
+      return resolve().lookupFeature(name);
+    }
+  }
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassRefImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassRefImpl.java
index 78548ec..ddd4f8e 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassRefImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassRefImpl.java
@@ -12,8 +12,8 @@
 
 import org.eclipse.emf.cdo.common.CDODataInput;
 import org.eclipse.emf.cdo.common.CDODataOutput;
-import org.eclipse.emf.cdo.common.model.CDOClass;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.common.model.CDOClassifier;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
 import org.eclipse.emf.cdo.common.model.CDOPackage;
 import org.eclipse.emf.cdo.common.model.CDOPackageManager;
 
@@ -21,11 +21,11 @@
 import java.text.MessageFormat;
 
 /**
- * TODO Optimize transfer of CDOClassRef instances
+ * TODO Optimize transfer of CDOClassifierRef instances
  * 
  * @author Eike Stepper
  */
-public final class CDOClassRefImpl implements CDOClassRef
+public final class CDOClassRefImpl implements CDOClassifierRef
 {
   private String packageURI;
 
@@ -63,7 +63,7 @@
     return classifierID;
   }
 
-  public CDOClass resolve(CDOPackageManager packageManager)
+  public CDOClassifier resolve(CDOPackageManager packageManager)
   {
     CDOPackage cdoPackage = packageManager.lookupPackage(packageURI);
     if (cdoPackage != null)
@@ -77,6 +77,6 @@
   @Override
   public String toString()
   {
-    return MessageFormat.format("CDOClassRef({0}, {1})", packageURI, classifierID);
+    return MessageFormat.format("CDOClassifierRef({0}, {1})", packageURI, classifierID);
   }
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassifierImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassifierImpl.java
index 5bf57d7..18cd83e 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassifierImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassifierImpl.java
@@ -13,7 +13,8 @@
 import org.eclipse.emf.cdo.common.CDODataInput;
 import org.eclipse.emf.cdo.common.CDODataOutput;
 import org.eclipse.emf.cdo.common.model.CDOPackage;
-import org.eclipse.emf.cdo.spi.common.InternalCDOClassifier;
+import org.eclipse.emf.cdo.common.model.CDOPackageManager;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOClassifier;
 
 import java.io.IOException;
 
@@ -22,29 +23,22 @@
  */
 public abstract class CDOClassifierImpl extends CDONamedElementImpl implements InternalCDOClassifier
 {
+  private CDOPackage containingPackage;
+
   private int classifierID;
 
   protected CDOClassifierImpl()
   {
   }
 
-  protected CDOClassifierImpl(CDOPackage containingPackage, int classifierID, String name)
+  public CDOPackage getContainingPackage()
   {
-    super(containingPackage, name);
-    this.classifierID = classifierID;
+    return containingPackage;
   }
 
-  protected CDOClassifierImpl(CDOPackage containingPackage, CDODataInput in) throws IOException
+  public void setContainingPackage(CDOPackage containingPackage)
   {
-    super(containingPackage, in);
-    classifierID = in.readInt();
-  }
-
-  @Override
-  public void write(CDODataOutput out) throws IOException
-  {
-    super.write(out);
-    out.writeInt(classifierID);
+    this.containingPackage = containingPackage;
   }
 
   public int getClassifierID()
@@ -57,8 +51,148 @@
     this.classifierID = classifierID;
   }
 
+  public CDOPackageManager getPackageManager()
+  {
+    return containingPackage.getPackageManager();
+  }
+
   public String getQualifiedName()
   {
     return getContainingPackage().getQualifiedName() + "." + getName();
   }
+
+  @Override
+  public void read(CDODataInput in, boolean proxy) throws IOException
+  {
+    super.read(in, proxy);
+    classifierID = in.readInt();
+  }
+
+  @Override
+  public void write(CDODataOutput out, boolean proxy) throws IOException
+  {
+    super.write(out, proxy);
+    out.writeInt(classifierID);
+  }
+
+  /**
+   * @author Eike Stepper
+   */
+  public static abstract class Ref implements InternalCDOClassifier
+  {
+    private transient CDOPackageManager packageManager;
+
+    private String packageURI;
+
+    private int classifierID;
+
+    private transient InternalCDOClassifier classifier;
+
+    public Ref(CDOPackageManager packageManager, String packageURI, int classifierID)
+    {
+      this.packageManager = packageManager;
+      this.packageURI = packageURI;
+      this.classifierID = classifierID;
+    }
+
+    public CDOPackageManager getPackageManager()
+    {
+      return packageManager;
+    }
+
+    public String getPackageURI()
+    {
+      return packageURI;
+    }
+
+    public int getClassifierID()
+    {
+      return classifierID;
+    }
+
+    public void setClassifierID(int classifierId)
+    {
+      classifier.setClassifierID(classifierId);
+    }
+
+    public synchronized boolean isResolved()
+    {
+      return classifier != null;
+    }
+
+    public synchronized InternalCDOClassifier resolve()
+    {
+      if (classifier == null)
+      {
+        CDOPackage cdoPackage = packageManager.lookupPackage(packageURI);
+        if (cdoPackage == null)
+        {
+          throw new IllegalStateException("Package not found: " + packageURI);
+        }
+
+        classifier = (InternalCDOClassifier)cdoPackage.lookupClassifier(classifierID);
+        if (classifier == null)
+        {
+          throw new IllegalStateException("Classifier not found in package" + packageURI + ": " + classifierID);
+        }
+      }
+
+      return classifier;
+    }
+
+    public CDOPackage getContainingPackage()
+    {
+      return resolve().getContainingPackage();
+    }
+
+    public void setContainingPackage(CDOPackage containingPackage)
+    {
+      classifier.setContainingPackage(containingPackage);
+    }
+
+    public String getName()
+    {
+      return resolve().getName();
+    }
+
+    public void setName(String name)
+    {
+      classifier.setName(name);
+    }
+
+    public String getQualifiedName()
+    {
+      return resolve().getQualifiedName();
+    }
+
+    public Object getClientInfo()
+    {
+      return resolve().getClientInfo();
+    }
+
+    public void setClientInfo(Object clientInfo)
+    {
+      classifier.setClientInfo(clientInfo);
+    }
+
+    public Object getServerInfo()
+    {
+      return resolve().getServerInfo();
+    }
+
+    public void setServerInfo(Object serverInfo)
+    {
+      classifier.setServerInfo(serverInfo);
+    }
+
+    public void read(CDODataInput in, boolean proxy) throws IOException
+    {
+      classifier.read(in, proxy);
+    }
+
+    public void write(CDODataOutput out, boolean proxy) throws IOException
+    {
+      classifier.write(out, proxy);
+    }
+  }
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassifierRef.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassifierRef.java
new file mode 100644
index 0000000..29696c2
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassifierRef.java
@@ -0,0 +1,74 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2008 Eike Stepper, Germany.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ **************************************************************************/
+package org.eclipse.emf.cdo.internal.common.model;
+
+import org.eclipse.emf.cdo.common.CDODataInput;
+import org.eclipse.emf.cdo.common.CDODataOutput;
+import org.eclipse.emf.cdo.common.model.CDOClassifier;
+import org.eclipse.emf.cdo.common.model.CDOPackage;
+import org.eclipse.emf.cdo.common.model.CDOPackageManager;
+
+import java.io.IOException;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class CDOClassifierRef implements CDOClassifier
+{
+  private CDOPackage containingPackage;
+
+  private int classifierID;
+
+  protected CDOClassifierRef()
+  {
+  }
+
+  public CDOPackage getContainingPackage()
+  {
+    return containingPackage;
+  }
+
+  public void setContainingPackage(CDOPackage containingPackage)
+  {
+    this.containingPackage = containingPackage;
+  }
+
+  public int getClassifierID()
+  {
+    return classifierID;
+  }
+
+  public void setClassifierID(int classifierID)
+  {
+    this.classifierID = classifierID;
+  }
+
+  public CDOPackageManager getPackageManager()
+  {
+    return containingPackage.getPackageManager();
+  }
+
+  @Override
+  public void read(CDODataInput in, boolean proxy) throws IOException
+  {
+    if (proxy)
+    {
+      classifierID = in.readInt();
+    }
+  }
+
+  @Override
+  public void write(CDODataOutput out, boolean proxy) throws IOException
+  {
+    super.write(out, proxy);
+    out.writeInt(classifierID);
+  }
+}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOEnumImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOEnumImpl.java
new file mode 100644
index 0000000..be795cf
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOEnumImpl.java
@@ -0,0 +1,71 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2008 Eike Stepper, Germany.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ **************************************************************************/
+package org.eclipse.emf.cdo.internal.common.model;
+
+import org.eclipse.emf.cdo.common.model.CDOEnum;
+import org.eclipse.emf.cdo.common.model.CDOPackageManager;
+
+import java.text.MessageFormat;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class CDOEnumImpl extends CDOTypeImpl implements CDOEnum
+{
+  protected CDOEnumImpl()
+  {
+  }
+
+  @Override
+  public Kind getClassifierKind()
+  {
+    return Kind.ENUM;
+  }
+
+  @Override
+  public String toString()
+  {
+    return MessageFormat.format("CDOEnum[classifierID={0}, name={1}]", getClassifierID(), getName());
+  }
+
+  /**
+   * @author Eike Stepper
+   */
+  public static final class Ref extends CDOClassifierImpl.Ref implements CDOEnum
+  {
+    public Ref(CDOPackageManager packageManager, String packageURI, int classifierID)
+    {
+      super(packageManager, packageURI, classifierID);
+    }
+
+    public Kind getClassifierKind()
+    {
+      return Kind.ENUM;
+    }
+
+    @Override
+    public CDOEnum resolve()
+    {
+      return (CDOEnum)super.resolve();
+    }
+
+    @Override
+    public String toString()
+    {
+      if (isResolved())
+      {
+        resolve().toString();
+      }
+
+      return MessageFormat.format("CDOEnumRef[packageURI={0}, classifierID={1}]", getPackageURI(), getClassifierID());
+    }
+  }
+}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOFeatureImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOFeatureImpl.java
index cccdbad..ef7187b 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOFeatureImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOFeatureImpl.java
@@ -13,132 +13,31 @@
 import org.eclipse.emf.cdo.common.CDODataInput;
 import org.eclipse.emf.cdo.common.CDODataOutput;
 import org.eclipse.emf.cdo.common.model.CDOClass;
-import org.eclipse.emf.cdo.common.model.CDOClassProxy;
-import org.eclipse.emf.cdo.common.model.CDOType;
-import org.eclipse.emf.cdo.internal.common.bundle.OM;
-import org.eclipse.emf.cdo.spi.common.InternalCDOClass;
-import org.eclipse.emf.cdo.spi.common.InternalCDOFeature;
-
-import org.eclipse.net4j.util.om.trace.ContextTracer;
+import org.eclipse.emf.cdo.common.model.CDOPackageManager;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOClass;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOFeature;
 
 import java.io.IOException;
-import java.text.MessageFormat;
 
 /**
  * @author Eike Stepper
  */
-public class CDOFeatureImpl extends CDOTypedElementImpl implements InternalCDOFeature
+public abstract class CDOFeatureImpl extends CDOTypedElementImpl implements InternalCDOFeature
 {
-  private static final int UNKNOWN_FEATURE_INDEX = Integer.MIN_VALUE;
+  private transient CDOClass containingClass;
 
-  private static final ContextTracer MODEL_TRACER = new ContextTracer(OM.DEBUG_MODEL, CDOFeatureImpl.class);
-
-  private static final ContextTracer PROTOCOL_TRACER = new ContextTracer(OM.DEBUG_PROTOCOL, CDOFeatureImpl.class);
-
-  private CDOClass containingClass;
+  private transient int featureIndex = UNKNOWN_FEATURE_INDEX;
 
   private int featureID;
 
-  private int featureIndex = UNKNOWN_FEATURE_INDEX;
-
-  private boolean containment;
+  private boolean unsettable;
 
   private Object defaultValue;
 
-  /**
-   * Creates an uninitialized instance.
-   */
   public CDOFeatureImpl()
   {
   }
 
-  /**
-   * Creates an attribute feature.
-   */
-  public CDOFeatureImpl(CDOClass containingClass, int featureID, String name, CDOType type, Object defaultValue,
-      boolean many)
-  {
-    super(containingClass.getContainingPackage(), name, type, many, null);
-    if (type == CDOType.OBJECT)
-    {
-      throw new IllegalArgumentException("type == OBJECT");
-    }
-
-    this.containingClass = containingClass;
-    this.featureID = featureID;
-    this.defaultValue = defaultValue;
-    if (MODEL_TRACER.isEnabled())
-    {
-      MODEL_TRACER.format("Created attribute {0}", this);
-    }
-  }
-
-  /**
-   * Creates a reference feature.
-   */
-  public CDOFeatureImpl(CDOClass containingClass, int featureID, String name, CDOClassProxy referenceTypeProxy,
-      boolean many, boolean containment)
-  {
-    super(containingClass.getContainingPackage(), name, CDOType.OBJECT, many, referenceTypeProxy);
-    if (referenceTypeProxy == null)
-    {
-      throw new IllegalArgumentException("referenceTypeProxy == null");
-    }
-
-    this.containingClass = containingClass;
-    this.featureID = featureID;
-    this.containment = containment;
-    if (MODEL_TRACER.isEnabled())
-    {
-      MODEL_TRACER.format("Created reference {0}", this);
-    }
-  }
-
-  /**
-   * Reads a feature from a stream.
-   */
-  public CDOFeatureImpl(CDOClass containingClass, CDODataInput in) throws IOException
-  {
-    super(containingClass.getContainingPackage(), in);
-    this.containingClass = containingClass;
-    featureID = in.readInt();
-    if (in.readBoolean())
-    {
-      defaultValue = getType().readValue(in);
-    }
-
-    containment = in.readBoolean();
-    if (PROTOCOL_TRACER.isEnabled())
-    {
-      PROTOCOL_TRACER.format("Read feature: ID={0}, name={1}, type={2}, many={3}, containment={4}", featureID,
-          getName(), getType(), isMany(), containment);
-    }
-  }
-
-  @Override
-  public void write(CDODataOutput out) throws IOException
-  {
-    if (PROTOCOL_TRACER.isEnabled())
-    {
-      PROTOCOL_TRACER.format("Writing feature: ID={0}, name={1}, type={2}, many={3}, containment={4}", featureID,
-          getName(), getType(), isMany(), containment);
-    }
-
-    super.write(out);
-    out.writeInt(featureID);
-    if (defaultValue != null)
-    {
-      out.writeBoolean(true);
-      getType().writeValue(out, defaultValue);
-    }
-    else
-    {
-      out.writeBoolean(false);
-    }
-
-    out.writeBoolean(containment);
-  }
-
   public CDOClass getContainingClass()
   {
     return containingClass;
@@ -147,17 +46,6 @@
   public void setContainingClass(CDOClass containingClass)
   {
     this.containingClass = containingClass;
-    setContainingPackage(containingClass.getContainingPackage());
-  }
-
-  public int getFeatureID()
-  {
-    return featureID;
-  }
-
-  public void setFeatureID(int featureID)
-  {
-    this.featureID = featureID;
   }
 
   public int getFeatureIndex()
@@ -175,9 +63,24 @@
     this.featureIndex = featureIndex;
   }
 
-  public String getQualifiedName()
+  public int getFeatureID()
   {
-    return getContainingClass().getQualifiedName() + "." + getName();
+    return featureID;
+  }
+
+  public void setFeatureID(int featureID)
+  {
+    this.featureID = featureID;
+  }
+
+  public boolean isUnsettable()
+  {
+    return unsettable;
+  }
+
+  public void setUnsettable(boolean unsettable)
+  {
+    this.unsettable = unsettable;
   }
 
   public Object getDefaultValue()
@@ -190,41 +93,56 @@
     this.defaultValue = defaultValue;
   }
 
-  public boolean isContainment()
+  public CDOPackageManager getPackageManager()
   {
-    return containment;
+    return containingClass.getPackageManager();
   }
 
-  public void setContainment(boolean containment)
+  public String getQualifiedName()
   {
-    this.containment = containment;
+    return getContainingClass().getQualifiedName() + "." + getName();
   }
 
+  // @Override
+  // public void writeValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // if (!getType().canBeNull() && value == null)
+  // {
+  // // TODO Simon: Is this special handling needed?
+  // getType().writeValue(out, getDefaultValue());
+  // }
+  // else
+  // {
+  // super.writeValue(out, value);
+  // }
+  // }
+
   @Override
-  public String toString()
+  public void read(CDODataInput in, boolean proxy) throws IOException
   {
-    if (isReference())
+    super.read(in, proxy);
+    featureID = in.readInt();
+    unsettable = in.readBoolean();
+    if (in.readBoolean())
     {
-      return MessageFormat.format("CDOFeature(ID={0}, name={1}, type={2})", featureID, getName(),
-          getReferenceTypeProxy());
-    }
-    else
-    {
-      return MessageFormat.format("CDOFeature(ID={0}, name={1}, type={2})", featureID, getName(), getType());
+      defaultValue = getType().readValue(in);
     }
   }
 
   @Override
-  public void writeValue(CDODataOutput out, Object value) throws IOException
+  public void write(CDODataOutput out, boolean proxy) throws IOException
   {
-    if (!getType().canBeNull() && value == null)
+    super.write(out, proxy);
+    out.writeInt(featureID);
+    out.writeBoolean(unsettable);
+    if (defaultValue != null)
     {
-      // TODO Simon: Is this special handling needed?
-      getType().writeValue(out, getDefaultValue());
+      out.writeBoolean(true);
+      getType().writeValue(out, defaultValue);
     }
     else
     {
-      super.writeValue(out, value);
+      out.writeBoolean(false);
     }
   }
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOModelElementImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOModelElementImpl.java
index 0aa9e53..a73937a 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOModelElementImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOModelElementImpl.java
@@ -10,10 +10,8 @@
  **************************************************************************/
 package org.eclipse.emf.cdo.internal.common.model;
 
-import org.eclipse.emf.cdo.common.model.CDOPackage;
-import org.eclipse.emf.cdo.common.model.CDOPackageManager;
 import org.eclipse.emf.cdo.internal.common.bundle.OM;
-import org.eclipse.emf.cdo.spi.common.InternalCDOModelElement;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOModelElement;
 
 import org.eclipse.net4j.util.om.trace.ContextTracer;
 
@@ -24,8 +22,6 @@
 {
   private static final ContextTracer MODEL_TRACER = new ContextTracer(OM.DEBUG_MODEL, CDOModelElementImpl.class);
 
-  private CDOPackage containingPackage;
-
   private transient Object clientInfo;
 
   private transient Object serverInfo;
@@ -34,26 +30,6 @@
   {
   }
 
-  protected CDOModelElementImpl(CDOPackage containingPackage)
-  {
-    this.containingPackage = containingPackage;
-  }
-
-  public CDOPackage getContainingPackage()
-  {
-    return containingPackage;
-  }
-
-  public void setContainingPackage(CDOPackage containingPackage)
-  {
-    this.containingPackage = containingPackage;
-  }
-
-  public CDOPackageManager getPackageManager()
-  {
-    return containingPackage.getPackageManager();
-  }
-
   public Object getClientInfo()
   {
     return clientInfo;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDONamedElementImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDONamedElementImpl.java
index e8bb3ff..a15b1d0 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDONamedElementImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDONamedElementImpl.java
@@ -12,8 +12,7 @@
 
 import org.eclipse.emf.cdo.common.CDODataInput;
 import org.eclipse.emf.cdo.common.CDODataOutput;
-import org.eclipse.emf.cdo.common.model.CDOPackage;
-import org.eclipse.emf.cdo.spi.common.InternalCDONamedElement;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDONamedElement;
 
 import java.io.IOException;
 
@@ -28,23 +27,6 @@
   {
   }
 
-  protected CDONamedElementImpl(CDOPackage containingPackage, String name)
-  {
-    super(containingPackage);
-    this.name = name;
-  }
-
-  protected CDONamedElementImpl(CDOPackage containingPackage, CDODataInput in) throws IOException
-  {
-    super(containingPackage);
-    name = in.readString();
-  }
-
-  public void write(CDODataOutput out) throws IOException
-  {
-    out.writeString(name);
-  }
-
   public String getName()
   {
     return name;
@@ -54,4 +36,14 @@
   {
     this.name = name;
   }
+
+  public void read(CDODataInput in, boolean proxy) throws IOException
+  {
+    name = in.readString();
+  }
+
+  public void write(CDODataOutput out, boolean proxy) throws IOException
+  {
+    out.writeString(name);
+  }
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageImpl.java
index f36b1b7f..9eb3532 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageImpl.java
@@ -15,12 +15,13 @@
 import org.eclipse.emf.cdo.common.CDODataOutput;
 import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
 import org.eclipse.emf.cdo.common.model.CDOClass;
+import org.eclipse.emf.cdo.common.model.CDOClassifier;
 import org.eclipse.emf.cdo.common.model.CDOPackage;
 import org.eclipse.emf.cdo.common.model.CDOPackageManager;
 import org.eclipse.emf.cdo.internal.common.bundle.OM;
-import org.eclipse.emf.cdo.spi.common.InternalCDOClass;
-import org.eclipse.emf.cdo.spi.common.InternalCDOPackage;
-import org.eclipse.emf.cdo.spi.common.InternalCDOPackageManager;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOClassifier;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackage;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageManager;
 
 import org.eclipse.net4j.util.ObjectUtil;
 import org.eclipse.net4j.util.om.trace.ContextTracer;
@@ -43,134 +44,64 @@
 
   private String packageURI;
 
-  private List<CDOClass> classes;
-
-  private List<CDOClass> index;
-
-  private String ecore;
-
-  private boolean ecoreLoaded;
-
-  private boolean dynamic;
+  private String parentURI;
 
   private CDOIDMetaRange metaIDRange;
 
-  private String parentURI;
+  private List<CDOClassifier> classifiers;
 
-  private transient boolean persistent = true;
+  private boolean dynamic;
+
+  private String ecore;
+
+  private transient boolean ecoreLoaded;
+
+  private transient State state = State.NEW;
+
+  private transient List<CDOClass> classes;
+
+  private transient List<CDOClassifier> index;
 
   public CDOPackageImpl()
   {
   }
 
-  public CDOPackageImpl(CDOPackageManager packageManager, String packageURI, String name, String ecore,
-      boolean dynamic, CDOIDMetaRange metaIDRange, String parentURI)
-  {
-    super(null, name);
-    this.packageManager = packageManager;
-    this.packageURI = packageURI;
-    this.dynamic = dynamic;
-    this.metaIDRange = metaIDRange;
-    this.parentURI = parentURI;
-    if (MODEL_TRACER.isEnabled())
-    {
-      MODEL_TRACER.format("Created {0}", this);
-    }
+  // public CDOPackageImpl(CDOPackageManager packageManager, String packageURI, String name, String ecore,
+  // boolean dynamic, CDOIDMetaRange metaIDRange, String parentURI)
+  // {
+  // super(null, name);
+  // this.packageManager = packageManager;
+  // this.packageURI = packageURI;
+  // this.dynamic = dynamic;
+  // this.metaIDRange = metaIDRange;
+  // this.parentURI = parentURI;
+  // if (MODEL_TRACER.isEnabled())
+  // {
+  // MODEL_TRACER.format("Created {0}", this);
+  // }
+  //
+  // setEcore(ecore);
+  // createLists();
+  // }
+  //
+  // /**
+  // * Creates a proxy CDO package
+  // */
+  // public CDOPackageImpl(CDOPackageManager packageManager, String packageURI, boolean dynamic,
+  // CDOIDMetaRange metaIDRange, String parentURI)
+  // {
+  // this.packageManager = packageManager;
+  // this.packageURI = packageURI;
+  // this.dynamic = dynamic;
+  // this.metaIDRange = metaIDRange;
+  // this.parentURI = parentURI;
+  // if (MODEL_TRACER.isEnabled())
+  // {
+  // MODEL_TRACER.format("Created proxy package {0}, dynamic={1}, metaIDRange={2}, parentURI={3}", packageURI,
+  // dynamic, metaIDRange, packageURI);
+  // }
+  // }
 
-    setEcore(ecore);
-    createLists();
-  }
-
-  /**
-   * Creates a proxy CDO package
-   */
-  public CDOPackageImpl(CDOPackageManager packageManager, String packageURI, boolean dynamic,
-      CDOIDMetaRange metaIDRange, String parentURI)
-  {
-    this.packageManager = packageManager;
-    this.packageURI = packageURI;
-    this.dynamic = dynamic;
-    this.metaIDRange = metaIDRange;
-    this.parentURI = parentURI;
-    if (MODEL_TRACER.isEnabled())
-    {
-      MODEL_TRACER.format("Created proxy package {0}, dynamic={1}, metaIDRange={2}, parentURI={3}", packageURI,
-          dynamic, metaIDRange, packageURI);
-    }
-  }
-
-  public CDOPackageImpl(CDOPackageManager packageManager, CDODataInput in) throws IOException
-  {
-    super(null, in);
-    this.packageManager = packageManager;
-    createLists();
-    read(in);
-  }
-
-  /**
-   * If not called through {@link #CDOPackageImpl(CDOPackageManager, CDODataInput)} the following must becalled
-   * <b>before</b>:
-   * <p>
-   * 
-   * <pre>
-   * setName(in.readString());
-   * </pre>
-   */
-  public void read(CDODataInput in) throws IOException
-  {
-    packageURI = in.readCDOPackageURI();
-    dynamic = in.readBoolean();
-    metaIDRange = in.readCDOIDMetaRange();
-    parentURI = in.readString();
-    if (PROTOCOL_TRACER.isEnabled())
-    {
-      PROTOCOL_TRACER.format("Read package: URI={0}, name={1}, dynamic={2}, metaIDRange={3}, parentURI={4}",
-          packageURI, getName(), dynamic, metaIDRange, parentURI);
-    }
-
-    int size = in.readInt();
-    if (PROTOCOL_TRACER.isEnabled())
-    {
-      PROTOCOL_TRACER.format("Reading {0} classes", size);
-    }
-
-    for (int i = 0; i < size; i++)
-    {
-      CDOClass cdoClass = in.readCDOClass(this);
-      addClass(cdoClass);
-    }
-  }
-
-  @Override
-  public void write(CDODataOutput out) throws IOException
-  {
-    load();
-    if (PROTOCOL_TRACER.isEnabled())
-    {
-      PROTOCOL_TRACER.format("Writing package: URI={0}, name={1}, dynamic={2}, metaIDRange={3}, parentURI={4}",
-          packageURI, getName(), dynamic, metaIDRange, parentURI);
-    }
-
-    super.write(out);
-    out.writeCDOPackageURI(packageURI);
-    out.writeBoolean(dynamic);
-    out.writeCDOIDMetaRange(metaIDRange);
-    out.writeString(parentURI);
-
-    int size = classes.size();
-    if (PROTOCOL_TRACER.isEnabled())
-    {
-      PROTOCOL_TRACER.format("Writing {0} classes", size);
-    }
-
-    out.writeInt(size);
-    for (CDOClass cdoClass : classes)
-    {
-      out.writeCDOClass(cdoClass);
-    }
-  }
-
-  @Override
   public CDOPackageManager getPackageManager()
   {
     return packageManager;
@@ -181,6 +112,16 @@
     this.packageManager = packageManager;
   }
 
+  public State getState()
+  {
+    return state;
+  }
+
+  public void setState(State state)
+  {
+    this.state = state;
+  }
+
   public String getParentURI()
   {
     return parentURI;
@@ -252,6 +193,61 @@
     return getName();
   }
 
+  public CDOClassifier lookupClassifier(int classifierID)
+  {
+    load();
+    return index.get(classifierID);
+  }
+
+  public int getClassifierCount()
+  {
+    load();
+    return classifiers.size();
+  }
+
+  public CDOClassifier[] getClassifiers()
+  {
+    load();
+    return classifiers.toArray(new CDOClassifier[classifiers.size()]);
+  }
+
+  public void setClassifiers(List<CDOClassifier> classifiers)
+  {
+    this.classifiers = classifiers;
+    for (CDOClassifier cdoClassifier : classifiers)
+    {
+      ((InternalCDOClassifier)cdoClassifier).setContainingPackage(this);
+      setIndex(cdoClassifier.getClassifierID(), cdoClassifier);
+    }
+  }
+
+  public void addClassifier(CDOClassifier cdoClassifier)
+  {
+    int classifierID = cdoClassifier.getClassifierID();
+    if (MODEL_TRACER.isEnabled())
+    {
+      MODEL_TRACER.format("Adding classifier: {0}", cdoClassifier);
+    }
+
+    setIndex(classifierID, cdoClassifier);
+    classifiers.add(cdoClassifier);
+    if (cdoClassifier.getClassifierKind() == CDOClassifier.Kind.CLASS)
+    {
+      classes.add((CDOClass)cdoClassifier);
+    }
+  }
+
+  public CDOClass lookupClass(int classifierID)
+  {
+    CDOClassifier classifier = lookupClassifier(classifierID);
+    if (classifier.getClassifierKind() == CDOClassifier.Kind.CLASS)
+    {
+      return (CDOClass)classifier;
+    }
+
+    return null;
+  }
+
   public int getClassCount()
   {
     load();
@@ -264,16 +260,6 @@
     return classes.toArray(new CDOClass[classes.size()]);
   }
 
-  public void setClasses(List<CDOClass> classes)
-  {
-    this.classes = classes;
-    for (CDOClass cdoClass : classes)
-    {
-      ((InternalCDOClass)cdoClass).setContainingPackage(this);
-      setIndex(cdoClass.getClassifierID(), cdoClass);
-    }
-  }
-
   /**
    * @return All classes with <code>isAbstract() == false</code> and <code>isSystem() == false</code>.
    */
@@ -292,12 +278,6 @@
     return result.toArray(new CDOClass[result.size()]);
   }
 
-  public CDOClass lookupClass(int classifierID)
-  {
-    load();
-    return index.get(classifierID);
-  }
-
   public synchronized String basicGetEcore()
   {
     return ecore;
@@ -352,26 +332,142 @@
     return classes == null;
   }
 
-  public boolean isPersistent()
-  {
-    return persistent;
-  }
+  // public CDOPackageImpl(CDOPackageManager packageManager, String packageURI, String name, String ecore,
+  // boolean dynamic, CDOIDMetaRange metaIDRange, String parentURI)
+  // {
+  // super(null, name);
+  // this.packageManager = packageManager;
+  // this.packageURI = packageURI;
+  // this.dynamic = dynamic;
+  // this.metaIDRange = metaIDRange;
+  // this.parentURI = parentURI;
+  // if (MODEL_TRACER.isEnabled())
+  // {
+  // MODEL_TRACER.format("Created {0}", this);
+  // }
+  //
+  // setEcore(ecore);
+  // createLists();
+  // }
+  //
+  // /**
+  // * Creates a proxy CDO package
+  // */
+  // public CDOPackageImpl(CDOPackageManager packageManager, String packageURI, boolean dynamic,
+  // CDOIDMetaRange metaIDRange, String parentURI)
+  // {
+  // this.packageManager = packageManager;
+  // this.packageURI = packageURI;
+  // this.dynamic = dynamic;
+  // this.metaIDRange = metaIDRange;
+  // this.parentURI = parentURI;
+  // if (MODEL_TRACER.isEnabled())
+  // {
+  // MODEL_TRACER.format("Created proxy package {0}, dynamic={1}, metaIDRange={2}, parentURI={3}", packageURI,
+  // dynamic, metaIDRange, packageURI);
+  // }
+  // }
+  //
+  // public CDOPackageImpl(CDOPackageManager packageManager, String packageURI, String name, String ecore,
+  // boolean dynamic, CDOIDMetaRange metaIDRange, String parentURI)
+  // {
+  // super(null, name);
+  // this.packageManager = packageManager;
+  // this.packageURI = packageURI;
+  // this.dynamic = dynamic;
+  // this.metaIDRange = metaIDRange;
+  // this.parentURI = parentURI;
+  // if (MODEL_TRACER.isEnabled())
+  // {
+  // MODEL_TRACER.format("Created {0}", this);
+  // }
+  //
+  // setEcore(ecore);
+  // createLists();
+  // }
+  //
+  // /**
+  // * Creates a proxy CDO package
+  // */
+  // public CDOPackageImpl(CDOPackageManager packageManager, String packageURI, boolean dynamic,
+  // CDOIDMetaRange metaIDRange, String parentURI)
+  // {
+  // this.packageManager = packageManager;
+  // this.packageURI = packageURI;
+  // this.dynamic = dynamic;
+  // this.metaIDRange = metaIDRange;
+  // this.parentURI = parentURI;
+  // if (MODEL_TRACER.isEnabled())
+  // {
+  // MODEL_TRACER.format("Created proxy package {0}, dynamic={1}, metaIDRange={2}, parentURI={3}", packageURI,
+  // dynamic, metaIDRange, packageURI);
+  // }
+  // }
 
-  public void setPersistent(boolean persistent)
+  /**
+   * If not called through {@link #CDOPackageImpl(CDOPackageManager, CDODataInput)} the following must becalled
+   * <b>before</b>:
+   * <p>
+   * 
+   * <pre>
+   * setName(in.readString());
+   * </pre>
+   */
+  @Override
+  public void read(CDODataInput in, boolean proxy) throws IOException
   {
-    this.persistent = persistent;
-  }
-
-  public void addClass(CDOClass cdoClass)
-  {
-    int classifierID = cdoClass.getClassifierID();
-    if (MODEL_TRACER.isEnabled())
+    super.read(in, proxy);
+    createLists();
+    packageURI = in.readCDOPackageURI();
+    dynamic = in.readBoolean();
+    metaIDRange = in.readCDOIDMetaRange();
+    parentURI = in.readString();
+    if (PROTOCOL_TRACER.isEnabled())
     {
-      MODEL_TRACER.format("Adding class: {0}", cdoClass);
+      PROTOCOL_TRACER.format("Read package: URI={0}, name={1}, dynamic={2}, metaIDRange={3}, parentURI={4}",
+          packageURI, getName(), dynamic, metaIDRange, parentURI);
     }
 
-    setIndex(classifierID, cdoClass);
-    classes.add(cdoClass);
+    int size = in.readInt();
+    if (PROTOCOL_TRACER.isEnabled())
+    {
+      PROTOCOL_TRACER.format("Reading {0} classes", size);
+    }
+
+    for (int i = 0; i < size; i++)
+    {
+      CDOClassifier cdoClassifier = in.readCDOClassifier(this);
+      addClassifier(cdoClassifier);
+    }
+  }
+
+  @Override
+  public void write(CDODataOutput out, boolean proxy) throws IOException
+  {
+    load();
+    if (PROTOCOL_TRACER.isEnabled())
+    {
+      PROTOCOL_TRACER.format("Writing package: URI={0}, name={1}, dynamic={2}, metaIDRange={3}, parentURI={4}",
+          packageURI, getName(), dynamic, metaIDRange, parentURI);
+    }
+
+    super.write(out, proxy);
+    out.writeCDOPackageURI(packageURI);
+    out.writeBoolean(dynamic);
+    out.writeCDOIDMetaRange(metaIDRange);
+    out.writeString(parentURI);
+
+    int size = classifiers.size();
+    if (PROTOCOL_TRACER.isEnabled())
+    {
+      PROTOCOL_TRACER.format("Writing {0} classifiers", size);
+    }
+
+    out.writeInt(size);
+    for (CDOClassifier cdoClassifier : classifiers)
+    {
+      out.writeCDOClassifier(cdoClassifier);
+    }
   }
 
   public int compareTo(CDOPackage that)
@@ -386,20 +482,21 @@
         packageURI, getName(), dynamic, metaIDRange, parentURI);
   }
 
-  private void setIndex(int classifierID, CDOClass cdoClass)
+  private void setIndex(int classifierID, CDOClassifier cdoClassifier)
   {
     while (classifierID >= index.size())
     {
       index.add(null);
     }
 
-    index.set(classifierID, cdoClass);
+    index.set(classifierID, cdoClassifier);
   }
 
   private void createLists()
   {
+    classifiers = new ArrayList<CDOClassifier>(0);
     classes = new ArrayList<CDOClass>(0);
-    index = new ArrayList<CDOClass>(0);
+    index = new ArrayList<CDOClassifier>(0);
   }
 
   private synchronized void load()
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageManagerImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageManagerImpl.java
index 9ca85e6..e2cf011 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageManagerImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageManagerImpl.java
@@ -16,7 +16,7 @@
 import org.eclipse.emf.cdo.internal.common.bundle.OM;
 import org.eclipse.emf.cdo.internal.common.model.core.CDOCorePackageImpl;
 import org.eclipse.emf.cdo.internal.common.model.resource.CDOResourcePackageImpl;
-import org.eclipse.emf.cdo.spi.common.InternalCDOPackageManager;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageManager;
 
 import org.eclipse.net4j.util.container.Container;
 import org.eclipse.net4j.util.om.trace.ContextTracer;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOReferenceImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOReferenceImpl.java
new file mode 100644
index 0000000..ce05e9b
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOReferenceImpl.java
@@ -0,0 +1,78 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2008 Eike Stepper, Germany.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ **************************************************************************/
+package org.eclipse.emf.cdo.internal.common.model;
+
+import org.eclipse.emf.cdo.common.CDODataInput;
+import org.eclipse.emf.cdo.common.CDODataOutput;
+import org.eclipse.emf.cdo.common.model.CDOClass;
+import org.eclipse.emf.cdo.common.model.CDOClassifier;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOReference;
+
+import org.eclipse.net4j.util.CheckUtil;
+
+import java.io.IOException;
+import java.text.MessageFormat;
+
+/**
+ * @author Eike Stepper
+ */
+public class CDOReferenceImpl extends CDOFeatureImpl implements InternalCDOReference
+{
+  private boolean containment;
+
+  public CDOReferenceImpl()
+  {
+  }
+
+  @Override
+  public CDOClass getType()
+  {
+    return (CDOClass)super.getType();
+  }
+
+  @Override
+  public void setType(CDOClassifier type)
+  {
+    CheckUtil.checkArg(type instanceof CDOClass, "type");
+    super.setType(type);
+  }
+
+  public boolean isContainment()
+  {
+    return containment;
+  }
+
+  public void setContainment(boolean containment)
+  {
+    this.containment = containment;
+  }
+
+  @Override
+  public void read(CDODataInput in, boolean proxy) throws IOException
+  {
+    super.read(in, proxy);
+    containment = in.readBoolean();
+  }
+
+  @Override
+  public void write(CDODataOutput out, boolean proxy) throws IOException
+  {
+    super.write(out, proxy);
+    out.writeBoolean(containment);
+  }
+
+  @Override
+  public String toString()
+  {
+    return MessageFormat.format("CDOReference[featureID={0}, name={1}, type={2}[{3}..{4}]], containment={5}]",
+        getFeatureID(), getName(), getType(), getLowerBound(), getUpperBound(), containment);
+  }
+}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOTypeImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOTypeImpl.java
index 87ecc95..5ddf16e 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOTypeImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOTypeImpl.java
@@ -10,510 +10,502 @@
  **************************************************************************/
 package org.eclipse.emf.cdo.internal.common.model;
 
-import org.eclipse.emf.cdo.common.CDODataInput;
-import org.eclipse.emf.cdo.common.CDODataOutput;
-import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.model.CDOPackageManager;
 import org.eclipse.emf.cdo.common.model.CDOType;
-import org.eclipse.emf.cdo.common.revision.CDOReferenceAdjuster;
-import org.eclipse.emf.cdo.internal.common.model.core.CDOFeatureMapEntryDataTypeImpl;
 
-import java.io.IOException;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
+import java.text.MessageFormat;
 
 /**
  * @author Eike Stepper
  */
-public abstract class CDOTypeImpl implements CDOType
+public abstract class CDOTypeImpl extends CDOClassifierImpl implements CDOType
 {
-  public static Map<Integer, CDOTypeImpl> ids = new HashMap<Integer, CDOTypeImpl>();
+  // private static final byte BOOLEAN_DEFAULT_PRIMITIVE = 0;
+  //
+  // private static final char CHARACTER_DEFAULT_PRIMITIVE = 0;
+  //
+  // private static final short SHORT_DEFAULT_PRIMITIVE = 0;
+  //
+  // public static final Boolean BOOLEAN_DEFAULT = new Boolean(false);
+  //
+  // public static final Byte BYTE_DEFAULT = new Byte(BOOLEAN_DEFAULT_PRIMITIVE);
+  //
+  // public static final Character CHARACTER_DEFAULT = new Character(CHARACTER_DEFAULT_PRIMITIVE);
+  //
+  // public static final Double DOUBLE_DEFAULT = new Double(0.0);
+  //
+  // public static final Float FLOAT_DEFAULT = new Float(0.0);
+  //
+  // public static final Integer INTEGER_DEFAULT = new Integer(0);
+  //
+  // public static final Long LONG_DEFAULT = new Long(0L);
+  //
+  // public static final Short SHORT_DEFAULT = new Short(SHORT_DEFAULT_PRIMITIVE);
 
-  private static final byte BOOLEAN_DEFAULT_PRIMITIVE = 0;
+  // public static final CDOType BOOLEAN = new CDOTypeImpl("BOOLEAN", 22, false, BOOLEAN_DEFAULT)
+  // {
+  // public void writeValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // boolean v = (Boolean)(value == null ? getDefaultValue() : value);
+  // out.writeBoolean(v);
+  // }
+  //
+  // public Object readValue(CDODataInput in) throws IOException
+  // {
+  // boolean v = in.readBoolean();
+  // return new Boolean(v);
+  // }
+  // };
+  //
+  // public static final CDOType BYTE = new CDOTypeImpl("BYTE", 24, false, BYTE_DEFAULT)
+  // {
+  // public void writeValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // out.writeByte((Byte)(value == null ? getDefaultValue() : value));
+  // }
+  //
+  // public Object readValue(CDODataInput in) throws IOException
+  // {
+  // return new Byte(in.readByte());
+  // }
+  // };
+  //
+  // public static final CDOType CHAR = new CDOTypeImpl("CHAR", 27, false, CHARACTER_DEFAULT)
+  // {
+  // public void writeValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // out.writeChar(((Character)(value == null ? getDefaultValue() : value)).charValue());
+  // }
+  //
+  // public Object readValue(CDODataInput in) throws IOException
+  // {
+  // return new Character(in.readChar());
+  // }
+  // };
+  //
+  // public static final CDOType DOUBLE = new CDOTypeImpl("DOUBLE", 31, false, DOUBLE_DEFAULT)
+  // {
+  // public void writeValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // out.writeDouble((Double)(value == null ? getDefaultValue() : value));
+  // }
+  //
+  // public Object readValue(CDODataInput in) throws IOException
+  // {
+  // return new Double(in.readDouble());
+  // }
+  // };
+  //
+  // public static final CDOType FLOAT = new CDOTypeImpl("FLOAT", 37, false, FLOAT_DEFAULT)
+  // {
+  // public void writeValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // out.writeFloat((Float)(value == null ? getDefaultValue() : value));
+  // }
+  //
+  // public Object readValue(CDODataInput in) throws IOException
+  // {
+  // return new Float(in.readFloat());
+  // }
+  // };
+  //
+  // public static final CDOType INT = new CDOTypeImpl("INT", 39, false, INTEGER_DEFAULT)
+  // {
+  // public void writeValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // out.writeInt((Integer)(value == null ? getDefaultValue() : value));
+  // }
+  //
+  // public Object readValue(CDODataInput in) throws IOException
+  // {
+  // return new Integer(in.readInt());
+  // }
+  // };
+  //
+  // public static final CDOType LONG = new CDOTypeImpl("LONG", 43, false, LONG_DEFAULT)
+  // {
+  // public void writeValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // out.writeLong((Long)(value == null ? getDefaultValue() : value));
+  // }
+  //
+  // public Object readValue(CDODataInput in) throws IOException
+  // {
+  // return new Long(in.readLong());
+  // }
+  // };
+  //
+  // public static final CDOType SHORT = new CDOTypeImpl("SHORT", 48, false, SHORT_DEFAULT)
+  // {
+  // public void writeValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // out.writeShort((Short)(value == null ? getDefaultValue() : value));
+  // }
+  //
+  // public Object readValue(CDODataInput in) throws IOException
+  // {
+  // return new Short(in.readShort());
+  // }
+  // };
+  //
+  // public static final CDOType OBJECT = new CDOTypeImpl("OBJECT", 10, true, CDOID.NULL)
+  // {
+  // public void writeValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // out.writeCDOID((CDOID)value);
+  // }
+  //
+  // public Object readValue(CDODataInput in) throws IOException
+  // {
+  // return in.readCDOID();
+  // }
+  //
+  // @Override
+  // public Object doAdjustReferences(CDOReferenceAdjuster adjuster, Object value)
+  // {
+  // return adjuster.adjustReference(value);
+  // }
+  // };
+  //
+  // public static final CDOType BOOLEAN_OBJECT = new ObjectType("BOOLEAN_OBJECT", 23)
+  // {
+  // @Override
+  // protected void doWriteValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // out.writeBoolean((Boolean)value);
+  // }
+  //
+  // @Override
+  // protected Object doReadValue(CDODataInput in) throws IOException
+  // {
+  // return in.readBoolean();
+  // }
+  // };
+  //
+  // public static final CDOType BYTE_OBJECT = new ObjectType("BYTE_OBJECT", 26)
+  // {
+  // @Override
+  // protected void doWriteValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // out.writeByte((Byte)value);
+  // }
+  //
+  // @Override
+  // protected Object doReadValue(CDODataInput in) throws IOException
+  // {
+  // return in.readByte();
+  // }
+  // };
+  //
+  // public static final CDOType CHARACTER_OBJECT = new ObjectType("CHARACTER_OBJECT", 28)
+  // {
+  // @Override
+  // protected void doWriteValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // out.writeChar((Character)value);
+  // }
+  //
+  // @Override
+  // protected Object doReadValue(CDODataInput in) throws IOException
+  // {
+  // return in.readChar();
+  // }
+  // };
+  //
+  // public static final CDOType DATE = new ObjectType("DATE", 29)
+  // {
+  // @Override
+  // protected void doWriteValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // out.writeLong(((Date)value).getTime());
+  // }
+  //
+  // @Override
+  // protected Object doReadValue(CDODataInput in) throws IOException
+  // {
+  // return new Date(in.readLong());
+  // }
+  // };
+  //
+  // public static final CDOType DOUBLE_OBJECT = new ObjectType("DOUBLE_OBJECT", 32)
+  // {
+  // @Override
+  // protected void doWriteValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // out.writeDouble((Double)value);
+  // }
+  //
+  // @Override
+  // protected Object doReadValue(CDODataInput in) throws IOException
+  // {
+  // return in.readDouble();
+  // }
+  // };
+  //
+  // public static final CDOType FLOAT_OBJECT = new ObjectType("FLOAT_OBJECT", 38)
+  // {
+  // @Override
+  // protected void doWriteValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // out.writeFloat((Float)value);
+  // }
+  //
+  // @Override
+  // protected Object doReadValue(CDODataInput in) throws IOException
+  // {
+  // return in.readFloat();
+  // }
+  // };
+  //
+  // public static final CDOType INTEGER_OBJECT = new ObjectType("INTEGER_OBJECT", 40)
+  // {
+  // @Override
+  // protected void doWriteValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // out.writeInt((Integer)value);
+  // }
+  //
+  // @Override
+  // protected Object doReadValue(CDODataInput in) throws IOException
+  // {
+  // return in.readInt();
+  // }
+  // };
+  //
+  // public static final CDOType LONG_OBJECT = new ObjectType("LONG_OBJECT", 44)
+  // {
+  // @Override
+  // protected void doWriteValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // out.writeLong((Long)value);
+  // }
+  //
+  // @Override
+  // protected Object doReadValue(CDODataInput in) throws IOException
+  // {
+  // return in.readLong();
+  // }
+  // };
+  //
+  // public static final CDOType SHORT_OBJECT = new ObjectType("SHORT_OBJECT", 49)
+  // {
+  // @Override
+  // protected void doWriteValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // out.writeShort((Short)value);
+  // }
+  //
+  // @Override
+  // protected Object doReadValue(CDODataInput in) throws IOException
+  // {
+  // return in.readShort();
+  // }
+  // };
+  //
+  // public static final CDOType STRING = new CDOTypeImpl("STRING", 50, true)
+  // {
+  // @SuppressWarnings("cast")
+  // @Override
+  // public Object copyValue(Object value)
+  // {
+  // return (String)value;
+  // }
+  //
+  // public void writeValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // out.writeString((String)value);
+  // }
+  //
+  // public Object readValue(CDODataInput in) throws IOException
+  // {
+  // return in.readString();
+  // }
+  // };
+  //
+  // public static final CDOType BYTE_ARRAY = new CDOTypeImpl("BYTE_ARRAY", 25, true)
+  // {
+  // @Override
+  // public Object copyValue(Object value)
+  // {
+  // if (value == null)
+  // {
+  // return null;
+  // }
+  //
+  // byte[] array = (byte[])value;
+  // byte[] result = new byte[array.length];
+  // System.arraycopy(value, 0, result, 0, array.length);
+  // return result;
+  // }
+  //
+  // public void writeValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // out.writeByteArray((byte[])value);
+  // }
+  //
+  // public Object readValue(CDODataInput in) throws IOException
+  // {
+  // return in.readByteArray();
+  // }
+  // };
+  //
+  // public static final CDOType FEATURE_MAP_ENTRY = new CDOTypeImpl("FEATURE_MAP_ENTRY", 36, false)
+  // {
+  // @Override
+  // public Object copyValue(Object value)
+  // {
+  // return value;
+  // }
+  //
+  // public void writeValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // CDOFeatureMapEntryDataTypeImpl featureMapEntry = (CDOFeatureMapEntryDataTypeImpl)value;
+  // out.writeString(featureMapEntry.getURI());
+  // out.writeCDOID(out.getIDProvider().provideCDOID(featureMapEntry.getObject()));
+  // }
+  //
+  // public Object readValue(CDODataInput in) throws IOException
+  // {
+  // String uri = in.readString();
+  // Object id = in.readCDOID();
+  // return new CDOFeatureMapEntryDataTypeImpl(uri, id);
+  // }
+  //
+  // @Override
+  // public Object doAdjustReferences(CDOReferenceAdjuster adjuster, Object value)
+  // {
+  // CDOFeatureMapEntryDataTypeImpl featureMapEntry = (CDOFeatureMapEntryDataTypeImpl)value;
+  // featureMapEntry.adjustReferences(adjuster);
+  // return value;
+  // }
+  //
+  // };
+  //
+  // public static final CDOType CUSTOM = new CDOTypeImpl("CUSTOM", 999, true)
+  // {
+  // @SuppressWarnings("cast")
+  // @Override
+  // public Object copyValue(Object value)
+  // {
+  // return (String)value;
+  // }
+  //
+  // public void writeValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // out.writeString((String)value);
+  // }
+  //
+  // public Object readValue(CDODataInput in) throws IOException
+  // {
+  // return in.readString();
+  // }
+  // };
 
-  private static final char CHARACTER_DEFAULT_PRIMITIVE = 0;
-
-  private static final short SHORT_DEFAULT_PRIMITIVE = 0;
-
-  public static final Boolean BOOLEAN_DEFAULT = new Boolean(false);
-
-  public static final Byte BYTE_DEFAULT = new Byte(BOOLEAN_DEFAULT_PRIMITIVE);
-
-  public static final Character CHARACTER_DEFAULT = new Character(CHARACTER_DEFAULT_PRIMITIVE);
-
-  public static final Double DOUBLE_DEFAULT = new Double(0.0);
-
-  public static final Float FLOAT_DEFAULT = new Float(0.0);
-
-  public static final Integer INTEGER_DEFAULT = new Integer(0);
-
-  public static final Long LONG_DEFAULT = new Long(0L);
-
-  public static final Short SHORT_DEFAULT = new Short(SHORT_DEFAULT_PRIMITIVE);
-
-  public static final CDOType BOOLEAN = new CDOTypeImpl("BOOLEAN", 22, false, BOOLEAN_DEFAULT)
+  protected CDOTypeImpl()
   {
-    public void writeValue(CDODataOutput out, Object value) throws IOException
-    {
-      boolean v = (Boolean)(value == null ? getDefaultValue() : value);
-      out.writeBoolean(v);
-    }
-
-    public Object readValue(CDODataInput in) throws IOException
-    {
-      boolean v = in.readBoolean();
-      return new Boolean(v);
-    }
-  };
-
-  public static final CDOType BYTE = new CDOTypeImpl("BYTE", 24, false, BYTE_DEFAULT)
-  {
-    public void writeValue(CDODataOutput out, Object value) throws IOException
-    {
-      out.writeByte((Byte)(value == null ? getDefaultValue() : value));
-    }
-
-    public Object readValue(CDODataInput in) throws IOException
-    {
-      return new Byte(in.readByte());
-    }
-  };
-
-  public static final CDOType CHAR = new CDOTypeImpl("CHAR", 27, false, CHARACTER_DEFAULT)
-  {
-    public void writeValue(CDODataOutput out, Object value) throws IOException
-    {
-      out.writeChar(((Character)(value == null ? getDefaultValue() : value)).charValue());
-    }
-
-    public Object readValue(CDODataInput in) throws IOException
-    {
-      return new Character(in.readChar());
-    }
-  };
-
-  public static final CDOType DOUBLE = new CDOTypeImpl("DOUBLE", 31, false, DOUBLE_DEFAULT)
-  {
-    public void writeValue(CDODataOutput out, Object value) throws IOException
-    {
-      out.writeDouble((Double)(value == null ? getDefaultValue() : value));
-    }
-
-    public Object readValue(CDODataInput in) throws IOException
-    {
-      return new Double(in.readDouble());
-    }
-  };
-
-  public static final CDOType FLOAT = new CDOTypeImpl("FLOAT", 37, false, FLOAT_DEFAULT)
-  {
-    public void writeValue(CDODataOutput out, Object value) throws IOException
-    {
-      out.writeFloat((Float)(value == null ? getDefaultValue() : value));
-    }
-
-    public Object readValue(CDODataInput in) throws IOException
-    {
-      return new Float(in.readFloat());
-    }
-  };
-
-  public static final CDOType INT = new CDOTypeImpl("INT", 39, false, INTEGER_DEFAULT)
-  {
-    public void writeValue(CDODataOutput out, Object value) throws IOException
-    {
-      out.writeInt((Integer)(value == null ? getDefaultValue() : value));
-    }
-
-    public Object readValue(CDODataInput in) throws IOException
-    {
-      return new Integer(in.readInt());
-    }
-  };
-
-  public static final CDOType LONG = new CDOTypeImpl("LONG", 43, false, LONG_DEFAULT)
-  {
-    public void writeValue(CDODataOutput out, Object value) throws IOException
-    {
-      out.writeLong((Long)(value == null ? getDefaultValue() : value));
-    }
-
-    public Object readValue(CDODataInput in) throws IOException
-    {
-      return new Long(in.readLong());
-    }
-  };
-
-  public static final CDOType SHORT = new CDOTypeImpl("SHORT", 48, false, SHORT_DEFAULT)
-  {
-    public void writeValue(CDODataOutput out, Object value) throws IOException
-    {
-      out.writeShort((Short)(value == null ? getDefaultValue() : value));
-    }
-
-    public Object readValue(CDODataInput in) throws IOException
-    {
-      return new Short(in.readShort());
-    }
-  };
-
-  public static final CDOType OBJECT = new CDOTypeImpl("OBJECT", 10, true, CDOID.NULL)
-  {
-    public void writeValue(CDODataOutput out, Object value) throws IOException
-    {
-      out.writeCDOID((CDOID)value);
-    }
-
-    public Object readValue(CDODataInput in) throws IOException
-    {
-      return in.readCDOID();
-    }
-
-    @Override
-    public Object doAdjustReferences(CDOReferenceAdjuster adjuster, Object value)
-    {
-      return adjuster.adjustReference(value);
-    }
-  };
-
-  public static final CDOType BOOLEAN_OBJECT = new ObjectType("BOOLEAN_OBJECT", 23)
-  {
-    @Override
-    protected void doWriteValue(CDODataOutput out, Object value) throws IOException
-    {
-      out.writeBoolean((Boolean)value);
-    }
-
-    @Override
-    protected Object doReadValue(CDODataInput in) throws IOException
-    {
-      return in.readBoolean();
-    }
-  };
-
-  public static final CDOType BYTE_OBJECT = new ObjectType("BYTE_OBJECT", 26)
-  {
-    @Override
-    protected void doWriteValue(CDODataOutput out, Object value) throws IOException
-    {
-      out.writeByte((Byte)value);
-    }
-
-    @Override
-    protected Object doReadValue(CDODataInput in) throws IOException
-    {
-      return in.readByte();
-    }
-  };
-
-  public static final CDOType CHARACTER_OBJECT = new ObjectType("CHARACTER_OBJECT", 28)
-  {
-    @Override
-    protected void doWriteValue(CDODataOutput out, Object value) throws IOException
-    {
-      out.writeChar((Character)value);
-    }
-
-    @Override
-    protected Object doReadValue(CDODataInput in) throws IOException
-    {
-      return in.readChar();
-    }
-  };
-
-  public static final CDOType DATE = new ObjectType("DATE", 29)
-  {
-    @Override
-    protected void doWriteValue(CDODataOutput out, Object value) throws IOException
-    {
-      out.writeLong(((Date)value).getTime());
-    }
-
-    @Override
-    protected Object doReadValue(CDODataInput in) throws IOException
-    {
-      return new Date(in.readLong());
-    }
-  };
-
-  public static final CDOType DOUBLE_OBJECT = new ObjectType("DOUBLE_OBJECT", 32)
-  {
-    @Override
-    protected void doWriteValue(CDODataOutput out, Object value) throws IOException
-    {
-      out.writeDouble((Double)value);
-    }
-
-    @Override
-    protected Object doReadValue(CDODataInput in) throws IOException
-    {
-      return in.readDouble();
-    }
-  };
-
-  public static final CDOType FLOAT_OBJECT = new ObjectType("FLOAT_OBJECT", 38)
-  {
-    @Override
-    protected void doWriteValue(CDODataOutput out, Object value) throws IOException
-    {
-      out.writeFloat((Float)value);
-    }
-
-    @Override
-    protected Object doReadValue(CDODataInput in) throws IOException
-    {
-      return in.readFloat();
-    }
-  };
-
-  public static final CDOType INTEGER_OBJECT = new ObjectType("INTEGER_OBJECT", 40)
-  {
-    @Override
-    protected void doWriteValue(CDODataOutput out, Object value) throws IOException
-    {
-      out.writeInt((Integer)value);
-    }
-
-    @Override
-    protected Object doReadValue(CDODataInput in) throws IOException
-    {
-      return in.readInt();
-    }
-  };
-
-  public static final CDOType LONG_OBJECT = new ObjectType("LONG_OBJECT", 44)
-  {
-    @Override
-    protected void doWriteValue(CDODataOutput out, Object value) throws IOException
-    {
-      out.writeLong((Long)value);
-    }
-
-    @Override
-    protected Object doReadValue(CDODataInput in) throws IOException
-    {
-      return in.readLong();
-    }
-  };
-
-  public static final CDOType SHORT_OBJECT = new ObjectType("SHORT_OBJECT", 49)
-  {
-    @Override
-    protected void doWriteValue(CDODataOutput out, Object value) throws IOException
-    {
-      out.writeShort((Short)value);
-    }
-
-    @Override
-    protected Object doReadValue(CDODataInput in) throws IOException
-    {
-      return in.readShort();
-    }
-  };
-
-  public static final CDOType STRING = new CDOTypeImpl("STRING", 50, true)
-  {
-    @SuppressWarnings("cast")
-    @Override
-    public Object copyValue(Object value)
-    {
-      return (String)value;
-    }
-
-    public void writeValue(CDODataOutput out, Object value) throws IOException
-    {
-      out.writeString((String)value);
-    }
-
-    public Object readValue(CDODataInput in) throws IOException
-    {
-      return in.readString();
-    }
-  };
-
-  public static final CDOType BYTE_ARRAY = new CDOTypeImpl("BYTE_ARRAY", 25, true)
-  {
-    @Override
-    public Object copyValue(Object value)
-    {
-      if (value == null)
-      {
-        return null;
-      }
-
-      byte[] array = (byte[])value;
-      byte[] result = new byte[array.length];
-      System.arraycopy(value, 0, result, 0, array.length);
-      return result;
-    }
-
-    public void writeValue(CDODataOutput out, Object value) throws IOException
-    {
-      out.writeByteArray((byte[])value);
-    }
-
-    public Object readValue(CDODataInput in) throws IOException
-    {
-      return in.readByteArray();
-    }
-  };
-
-  public static final CDOType FEATURE_MAP_ENTRY = new CDOTypeImpl("FEATURE_MAP_ENTRY", 36, false)
-  {
-    @Override
-    public Object copyValue(Object value)
-    {
-      return value;
-    }
-
-    public void writeValue(CDODataOutput out, Object value) throws IOException
-    {
-      CDOFeatureMapEntryDataTypeImpl featureMapEntry = (CDOFeatureMapEntryDataTypeImpl)value;
-      out.writeString(featureMapEntry.getURI());
-      out.writeCDOID(out.getIDProvider().provideCDOID(featureMapEntry.getObject()));
-    }
-
-    public Object readValue(CDODataInput in) throws IOException
-    {
-      String uri = in.readString();
-      Object id = in.readCDOID();
-      return new CDOFeatureMapEntryDataTypeImpl(uri, id);
-    }
-
-    @Override
-    public Object doAdjustReferences(CDOReferenceAdjuster adjuster, Object value)
-    {
-      CDOFeatureMapEntryDataTypeImpl featureMapEntry = (CDOFeatureMapEntryDataTypeImpl)value;
-      featureMapEntry.adjustReferences(adjuster);
-      return value;
-    }
-
-  };
-
-  public static final CDOType CUSTOM = new CDOTypeImpl("CUSTOM", 999, true)
-  {
-    @SuppressWarnings("cast")
-    @Override
-    public Object copyValue(Object value)
-    {
-      return (String)value;
-    }
-
-    public void writeValue(CDODataOutput out, Object value) throws IOException
-    {
-      out.writeString((String)value);
-    }
-
-    public Object readValue(CDODataInput in) throws IOException
-    {
-      return in.readString();
-    }
-  };
-
-  private String name;
-
-  private int typeID;
-
-  private boolean canBeNull;
-
-  private Object defaultValue;
-
-  private CDOTypeImpl(String name, int typeID, boolean canBeNull, Object defaultValue)
-  {
-    this.name = name;
-    this.typeID = typeID;
-    this.canBeNull = canBeNull;
-    this.defaultValue = defaultValue;
-    ids.put(typeID, this);
   }
 
-  private CDOTypeImpl(String name, int typeID, boolean canBeNull)
+  public Kind getClassifierKind()
   {
-    this(name, typeID, canBeNull, null);
-  }
-
-  public String getName()
-  {
-    return name;
-  }
-
-  public int getTypeID()
-  {
-    return typeID;
-  }
-
-  public boolean canBeNull()
-  {
-    return canBeNull;
-  }
-
-  public Object getDefaultValue()
-  {
-    return defaultValue;
+    return Kind.TYPE;
   }
 
   @Override
   public String toString()
   {
-    return name;
-  }
-
-  public Object copyValue(Object value)
-  {
-    return value == null ? getDefaultValue() : value;
-  }
-
-  public void write(CDODataOutput out) throws IOException
-  {
-    out.writeInt(typeID);
-  }
-
-  final public Object adjustReferences(CDOReferenceAdjuster adjuster, Object value)
-  {
-    return value == null ? null : doAdjustReferences(adjuster, value);
-  }
-
-  protected Object doAdjustReferences(CDOReferenceAdjuster adjuster, Object value)
-  {
-    return value;
+    return MessageFormat.format("CDOType[classifierID={0}, name={1}]", getClassifierID(), getName());
   }
 
   /**
    * @author Eike Stepper
    */
-  private static abstract class ObjectType extends CDOTypeImpl
+  public static final class Ref extends CDOClassifierImpl.Ref implements CDOType
   {
-    public ObjectType(String name, int typeID)
+    public Ref(CDOPackageManager packageManager, String packageURI, int classifierID)
     {
-      super(name, typeID, true);
+      super(packageManager, packageURI, classifierID);
     }
 
-    public final void writeValue(CDODataOutput out, Object value) throws IOException
+    public Kind getClassifierKind()
     {
-      if (value == null)
-      {
-        out.writeBoolean(false);
-      }
-      else
-      {
-        out.writeBoolean(true);
-        doWriteValue(out, value);
-      }
+      return Kind.TYPE;
     }
 
-    protected abstract void doWriteValue(CDODataOutput out, Object value) throws IOException;
-
-    public final Object readValue(CDODataInput in) throws IOException
+    @Override
+    public CDOType resolve()
     {
-      boolean notNull = in.readBoolean();
-      if (notNull)
-      {
-        return doReadValue(in);
-      }
-
-      return null;
+      return (CDOType)super.resolve();
     }
 
-    protected abstract Object doReadValue(CDODataInput in) throws IOException;
+    @Override
+    public String toString()
+    {
+      if (isResolved())
+      {
+        resolve().toString();
+      }
+
+      return MessageFormat.format("CDOTypeRef[packageURI={0}, classifierID={1}]", getPackageURI(), getClassifierID());
+    }
   }
+
+  // public Object copyValue(Object value)
+  // {
+  // return value == null ? getDefaultValue() : value;
+  // }
+  //
+  // @Override
+  // public void write(CDODataOutput out) throws IOException
+  // {
+  // out.writeInt(typeID);
+  // }
+  //
+  // final public Object adjustReferences(CDOReferenceAdjuster adjuster, Object value)
+  // {
+  // return value == null ? null : doAdjustReferences(adjuster, value);
+  // }
+  //
+  // protected Object doAdjustReferences(CDOReferenceAdjuster adjuster, Object value)
+  // {
+  // return value;
+  // }
+
+  // /**
+  // * @author Eike Stepper
+  // */
+  // private static abstract class ObjectType extends CDOTypeImpl
+  // {
+  // public ObjectType(String name, int typeID)
+  // {
+  // super(name, typeID, true);
+  // }
+  //
+  // public final void writeValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // if (value == null)
+  // {
+  // out.writeBoolean(false);
+  // }
+  // else
+  // {
+  // out.writeBoolean(true);
+  // doWriteValue(out, value);
+  // }
+  // }
+  //
+  // protected abstract void doWriteValue(CDODataOutput out, Object value) throws IOException;
+  //
+  // public final Object readValue(CDODataInput in) throws IOException
+  // {
+  // boolean notNull = in.readBoolean();
+  // if (notNull)
+  // {
+  // return doReadValue(in);
+  // }
+  //
+  // return null;
+  // }
+  //
+  // protected abstract Object doReadValue(CDODataInput in) throws IOException;
+  // }
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOTypedElementImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOTypedElementImpl.java
index 28ef759..0ee9cb9 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOTypedElementImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOTypedElementImpl.java
@@ -12,13 +12,8 @@
 
 import org.eclipse.emf.cdo.common.CDODataInput;
 import org.eclipse.emf.cdo.common.CDODataOutput;
-import org.eclipse.emf.cdo.common.model.CDOClass;
-import org.eclipse.emf.cdo.common.model.CDOClassProxy;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
-import org.eclipse.emf.cdo.common.model.CDOPackage;
-import org.eclipse.emf.cdo.common.model.CDOType;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
-import org.eclipse.emf.cdo.spi.common.InternalCDOTypedElement;
+import org.eclipse.emf.cdo.common.model.CDOClassifier;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOTypedElement;
 
 import java.io.IOException;
 
@@ -27,135 +22,108 @@
  */
 public abstract class CDOTypedElementImpl extends CDONamedElementImpl implements InternalCDOTypedElement
 {
-  private CDOType type;
+  private CDOClassifier type;
 
-  private boolean many;
+  private int lowerBound;
 
-  private CDOClassProxy referenceTypeProxy;
+  private int upperBound;
 
-  /**
-   * Creates an uninitialized instance.
-   */
   protected CDOTypedElementImpl()
   {
   }
 
-  protected CDOTypedElementImpl(CDOPackage containingPackage, String name, CDOType type, boolean many,
-      CDOClassProxy referenceTypeProxy)
-  {
-    super(containingPackage, name);
-    this.type = type;
-    this.many = many;
-    this.referenceTypeProxy = referenceTypeProxy;
-  }
-
-  /**
-   * Reads a typed element from a stream.
-   */
-  protected CDOTypedElementImpl(CDOPackage containingPackage, CDODataInput in) throws IOException
-  {
-    super(containingPackage, in);
-    type = in.readCDOType();
-    many = in.readBoolean();
-    if (isReference())
-    {
-      CDOClassRef classRef = in.readCDOClassRef();
-      referenceTypeProxy = new CDOClassProxy(classRef, getPackageManager());
-    }
-  }
-
-  @Override
-  public void write(CDODataOutput out) throws IOException
-  {
-    super.write(out);
-    out.writeCDOType(type);
-    out.writeBoolean(many);
-    if (isReference())
-    {
-      CDOClassRef classRef = referenceTypeProxy.getClassRef();
-      out.writeCDOClassRef(classRef);
-    }
-  }
-
-  public CDOType getType()
+  public CDOClassifier getType()
   {
     return type;
   }
 
-  public void setType(CDOType type)
+  public void setType(CDOClassifier type)
   {
     this.type = type;
   }
 
+  public int getLowerBound()
+  {
+    return lowerBound;
+  }
+
+  public void setLowerBound(int lowerBound)
+  {
+    this.lowerBound = lowerBound;
+  }
+
+  public int getUpperBound()
+  {
+    return upperBound;
+  }
+
+  public void setUpperBound(int upperBound)
+  {
+    this.upperBound = upperBound;
+  }
+
+  public boolean isRequired()
+  {
+    return lowerBound > 0;
+  }
+
   public boolean isMany()
   {
-    return many;
+    return upperBound > 1;
   }
 
-  public void setMany(boolean many)
+  @Override
+  public void read(CDODataInput in, boolean proxy) throws IOException
   {
-    this.many = many;
+    super.read(in, proxy);
+    type = in.readCDOClassifier(containingPackage);
+    lowerBound = in.readInt();
+    upperBound = in.readInt();
   }
 
-  public boolean isReference()
+  @Override
+  public void write(CDODataOutput out, boolean proxy) throws IOException
   {
-    return type == CDOType.OBJECT;
+    super.write(out, proxy);
+    out.writeCDOClassifierRef(type);
+    out.writeInt(lowerBound);
+    out.writeInt(upperBound);
   }
 
-  public CDOClass getReferenceType()
-  {
-    if (referenceTypeProxy == null)
-    {
-      return null;
-    }
-
-    return referenceTypeProxy.getCdoClass();
-  }
-
-  public void setReferenceType(CDOClassRef cdoClassRef)
-  {
-    referenceTypeProxy = new CDOClassProxy(cdoClassRef, getPackageManager());
-  }
-
-  public CDOClassProxy getReferenceTypeProxy()
-  {
-    return referenceTypeProxy;
-  }
-
-  public Object readValue(CDODataInput in) throws IOException
-  {
-    CDOType type = getType();
-    if (type.canBeNull() && !isMany())
-    {
-      if (in.readBoolean())
-      {
-        return InternalCDORevision.NIL;
-      }
-    }
-
-    return type.readValue(in);
-  }
-
-  public void writeValue(CDODataOutput out, Object value) throws IOException
-  {
-    // TODO We could certainly optimized this: When a feature is a reference, NIL is only possible in the case where
-    // unsettable == true. (TO be verified)
-    if (type.canBeNull())
-    {
-      if (!isMany())
-      {
-        if (value == InternalCDORevision.NIL)
-        {
-          out.writeBoolean(true);
-          return;
-        }
-        else
-        {
-          out.writeBoolean(false);
-        }
-      }
-    }
-
-    type.writeValue(out, value);
-  }
+  // public Object readValue(CDODataInput in) throws IOException
+  // {
+  // CDOType type = getType();
+  // if (type.canBeNull() && !isMany())
+  // {
+  // if (in.readBoolean())
+  // {
+  // return InternalCDORevision.NIL;
+  // }
+  // }
+  //
+  // return type.readValue(in);
+  // }
+  //
+  // public void writeValue(CDODataOutput out, Object value) throws IOException
+  // {
+  // // TODO We could certainly optimized this: When a feature is a reference, NIL is only possible in the case where
+  // // unsettable == true. (TO be verified)
+  // if (type.canBeNull())
+  // {
+  // if (!isMany())
+  // {
+  // if (value == InternalCDORevision.NIL)
+  // {
+  // out.writeBoolean(true);
+  // return;
+  // }
+  // else
+  // {
+  // out.writeBoolean(false);
+  // }
+  // }
+  // }
+  //
+  // type.writeValue(out, value);
+  // }
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/core/CDOCorePackageImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/core/CDOCorePackageImpl.java
index 7cbf5b8..fc172de 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/core/CDOCorePackageImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/core/CDOCorePackageImpl.java
@@ -10,6 +10,7 @@
  **************************************************************************/
 package org.eclipse.emf.cdo.internal.common.model.core;
 
+import org.eclipse.emf.cdo.common.model.CDOType;
 import org.eclipse.emf.cdo.common.model.core.CDOCorePackage;
 import org.eclipse.emf.cdo.internal.common.model.CDOPackageImpl;
 import org.eclipse.emf.cdo.internal.common.model.CDOPackageManagerImpl;
@@ -21,18 +22,52 @@
 {
   private CDOObjectClassImpl cdoObjectClass;
 
+  private CDOType cdoBoolean;
+
+  private CDOType cdoBooleanObject;
+
+  private CDOType cdoByte;
+
+  private CDOType cdoByteObject;
+
+  private CDOType cdoChar;
+
+  private CDOType cdoCharacterObject;
+
+  private CDOType cdoDate;
+
+  private CDOType cdoDouble;
+
+  private CDOType cdoDoubleObject;
+
+  private CDOType cdoFloat;
+
+  private CDOType cdoFloatObject;
+
+  private CDOType cdoInt;
+
+  private CDOType cdoIntegerObject;
+
+  private CDOType cdoLong;
+
+  private CDOType cdoLongObject;
+
+  private CDOType cdoShort;
+
+  private CDOType cdoShortObject;
+
+  private CDOType cdoString;
+
+  private CDOType cdoByteArray;
+
+  private CDOType cdoFeatureMapEntry;
+
   public CDOCorePackageImpl(CDOPackageManagerImpl packageManager)
   {
     super(packageManager, PACKAGE_URI, NAME, null, false, null, null);
-    addClass(cdoObjectClass = new CDOObjectClassImpl(this));
+    addClassifier(cdoObjectClass = new CDOObjectClassImpl(this));
   }
 
-  public CDOObjectClassImpl getCDOObjectClass()
-  {
-    return cdoObjectClass;
-  }
-
-  @SuppressWarnings("all")
   @Override
   public String getEcore()
   {
@@ -44,4 +79,109 @@
   {
     return true;
   }
+
+  public CDOObjectClassImpl getCDOObjectClass()
+  {
+    return cdoObjectClass;
+  }
+
+  public CDOType getCDOBoolean()
+  {
+    return cdoBoolean;
+  }
+
+  public CDOType getCDOBooleanObject()
+  {
+    return cdoBooleanObject;
+  }
+
+  public CDOType getCDOByte()
+  {
+    return cdoByte;
+  }
+
+  public CDOType getCDOByteObject()
+  {
+    return cdoByteObject;
+  }
+
+  public CDOType getCDOChar()
+  {
+    return cdoChar;
+  }
+
+  public CDOType getCDOCharacterObject()
+  {
+    return cdoCharacterObject;
+  }
+
+  public CDOType getCDODate()
+  {
+    return cdoDate;
+  }
+
+  public CDOType getCDODouble()
+  {
+    return cdoDouble;
+  }
+
+  public CDOType getCDODoubleObject()
+  {
+    return cdoDoubleObject;
+  }
+
+  public CDOType getCDOFloat()
+  {
+    return cdoFloat;
+  }
+
+  public CDOType getCDOFloatObject()
+  {
+    return cdoFloatObject;
+  }
+
+  public CDOType getCDOInt()
+  {
+    return cdoInt;
+  }
+
+  public CDOType getCDOIntegerObject()
+  {
+    return cdoIntegerObject;
+  }
+
+  public CDOType getCDOLong()
+  {
+    return cdoLong;
+  }
+
+  public CDOType getCDOLongObject()
+  {
+    return cdoLongObject;
+  }
+
+  public CDOType getCDOShort()
+  {
+    return cdoShort;
+  }
+
+  public CDOType getCDOShortObject()
+  {
+    return cdoShortObject;
+  }
+
+  public CDOType getCDOString()
+  {
+    return cdoString;
+  }
+
+  public CDOType getCDOByteArray()
+  {
+    return cdoByteArray;
+  }
+
+  public CDOType getCDOFeatureMapEntry()
+  {
+    return cdoFeatureMapEntry;
+  }
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/resource/CDOContentsFeatureImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/resource/CDOContentsFeatureImpl.java
index 6cb5ca1..959b680 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/resource/CDOContentsFeatureImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/resource/CDOContentsFeatureImpl.java
@@ -17,12 +17,12 @@
 import org.eclipse.emf.cdo.common.model.core.CDOCorePackage;
 import org.eclipse.emf.cdo.common.model.core.CDOObjectClass;
 import org.eclipse.emf.cdo.common.model.resource.CDOContentsFeature;
-import org.eclipse.emf.cdo.internal.common.model.CDOFeatureImpl;
+import org.eclipse.emf.cdo.internal.common.model.CDOReferenceImpl;
 
 /**
  * @author Eike Stepper
  */
-public class CDOContentsFeatureImpl extends CDOFeatureImpl implements CDOContentsFeature
+public class CDOContentsFeatureImpl extends CDOReferenceImpl implements CDOContentsFeature
 {
   public CDOContentsFeatureImpl(CDOClass containingClass, CDOPackageManager packageManager)
   {
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/resource/CDOFolderFeatureImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/resource/CDOFolderFeatureImpl.java
index 094106c..5e4aa13 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/resource/CDOFolderFeatureImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/resource/CDOFolderFeatureImpl.java
@@ -17,12 +17,12 @@
 import org.eclipse.emf.cdo.common.model.resource.CDOFolderFeature;
 import org.eclipse.emf.cdo.common.model.resource.CDOResourceFolderClass;
 import org.eclipse.emf.cdo.common.model.resource.CDOResourcePackage;
-import org.eclipse.emf.cdo.internal.common.model.CDOFeatureImpl;
+import org.eclipse.emf.cdo.internal.common.model.CDOReferenceImpl;
 
 /**
  * @author Eike Stepper
  */
-public class CDOFolderFeatureImpl extends CDOFeatureImpl implements CDOFolderFeature
+public class CDOFolderFeatureImpl extends CDOReferenceImpl implements CDOFolderFeature
 {
   public CDOFolderFeatureImpl(CDOClass containingClass, CDOPackageManager packageManager)
   {
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/resource/CDONameFeatureImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/resource/CDONameFeatureImpl.java
index d62aae3..8305a99 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/resource/CDONameFeatureImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/resource/CDONameFeatureImpl.java
@@ -12,13 +12,13 @@
 
 import org.eclipse.emf.cdo.common.model.CDOClass;
 import org.eclipse.emf.cdo.common.model.resource.CDONameFeature;
-import org.eclipse.emf.cdo.internal.common.model.CDOFeatureImpl;
+import org.eclipse.emf.cdo.internal.common.model.CDOAttributeImpl;
 import org.eclipse.emf.cdo.internal.common.model.CDOTypeImpl;
 
 /**
  * @author Eike Stepper
  */
-public class CDONameFeatureImpl extends CDOFeatureImpl implements CDONameFeature
+public class CDONameFeatureImpl extends CDOAttributeImpl implements CDONameFeature
 {
   public CDONameFeatureImpl(CDOClass containingClass)
   {
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/resource/CDONodesFeatureImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/resource/CDONodesFeatureImpl.java
index 6d5e437..aa6874c 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/resource/CDONodesFeatureImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/resource/CDONodesFeatureImpl.java
@@ -17,12 +17,12 @@
 import org.eclipse.emf.cdo.common.model.resource.CDONodesFeature;
 import org.eclipse.emf.cdo.common.model.resource.CDOResourceNodeClass;
 import org.eclipse.emf.cdo.common.model.resource.CDOResourcePackage;
-import org.eclipse.emf.cdo.internal.common.model.CDOFeatureImpl;
+import org.eclipse.emf.cdo.internal.common.model.CDOReferenceImpl;
 
 /**
  * @author Eike Stepper
  */
-public class CDONodesFeatureImpl extends CDOFeatureImpl implements CDONodesFeature
+public class CDONodesFeatureImpl extends CDOReferenceImpl implements CDONodesFeature
 {
   public CDONodesFeatureImpl(CDOClass containingClass, CDOPackageManager packageManager)
   {
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/resource/CDOResourcePackageImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/resource/CDOResourcePackageImpl.java
index c19722f..2f73c64 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/resource/CDOResourcePackageImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/resource/CDOResourcePackageImpl.java
@@ -28,9 +28,9 @@
   public CDOResourcePackageImpl(CDOPackageManagerImpl packageManager)
   {
     super(packageManager, PACKAGE_URI, NAME, null, false, null, null);
-    addClass(cdoResourceNodeClass = new CDOResourceNodeClassImpl(this, packageManager));
-    addClass(cdoResourceFolderClass = new CDOResourceFolderClassImpl(this, packageManager));
-    addClass(cdoResourceClass = new CDOResourceClassImpl(this, packageManager));
+    addClassifier(cdoResourceNodeClass = new CDOResourceNodeClassImpl(this, packageManager));
+    addClassifier(cdoResourceFolderClass = new CDOResourceFolderClassImpl(this, packageManager));
+    addClassifier(cdoResourceClass = new CDOResourceClassImpl(this, packageManager));
   }
 
   public CDOResourceFolderClassImpl getCDOResourceFolderClass()
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDOListImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDOListImpl.java
index fd9d02e..cd88dd8 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDOListImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDOListImpl.java
@@ -14,8 +14,8 @@
 import org.eclipse.emf.cdo.common.revision.CDOList;
 import org.eclipse.emf.cdo.common.revision.CDOListFactory;
 import org.eclipse.emf.cdo.common.revision.CDOReferenceAdjuster;
-import org.eclipse.emf.cdo.spi.common.InternalCDOList;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDOList;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.collection.MoveableArrayList;
 
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDORevisionImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDORevisionImpl.java
index d8fab97..01ccf0e 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDORevisionImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDORevisionImpl.java
@@ -19,8 +19,8 @@
 import org.eclipse.emf.cdo.common.model.CDOFeature;
 import org.eclipse.emf.cdo.common.model.CDOType;
 import org.eclipse.emf.cdo.common.revision.CDORevision;
-import org.eclipse.emf.cdo.spi.common.AbstractCDORevision;
-import org.eclipse.emf.cdo.spi.common.InternalCDOList;
+import org.eclipse.emf.cdo.spi.common.revision.AbstractCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDOList;
 
 import java.io.IOException;
 
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDORevisionResolverImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDORevisionResolverImpl.java
index 34c1cca..112b139 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDORevisionResolverImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDORevisionResolverImpl.java
@@ -20,7 +20,7 @@
 import org.eclipse.emf.cdo.common.revision.cache.CDORevisionCache;
 import org.eclipse.emf.cdo.common.revision.cache.CDORevisionCacheUtil;
 import org.eclipse.emf.cdo.internal.common.bundle.OM;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.lifecycle.Lifecycle;
 import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/EvictionEventImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/EvictionEventImpl.java
index b80951b..a5e8a15 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/EvictionEventImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/EvictionEventImpl.java
@@ -13,7 +13,7 @@
 import org.eclipse.emf.cdo.common.id.CDOID;
 import org.eclipse.emf.cdo.common.revision.cache.CDORevisionCache;
 import org.eclipse.emf.cdo.common.revision.cache.CDORevisionCache.EvictionEvent;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.event.Event;
 
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/lru/DLRevisionHolder.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/lru/DLRevisionHolder.java
index eabebfb..b9364e0 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/lru/DLRevisionHolder.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/lru/DLRevisionHolder.java
@@ -10,7 +10,7 @@
  **************************************************************************/
 package org.eclipse.emf.cdo.internal.common.revision.cache.lru;
 
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 /**
  * @author Eike Stepper
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/lru/DLRevisionList.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/lru/DLRevisionList.java
index dd82220..ba8cd93 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/lru/DLRevisionList.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/lru/DLRevisionList.java
@@ -11,7 +11,7 @@
 package org.eclipse.emf.cdo.internal.common.revision.cache.lru;
 
 import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import java.text.MessageFormat;
 
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/lru/LRURevisionCache.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/lru/LRURevisionCache.java
index c6ff70c..a2b2a28 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/lru/LRURevisionCache.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/lru/LRURevisionCache.java
@@ -21,7 +21,7 @@
 import org.eclipse.emf.cdo.common.revision.cache.CDORevisionCache;
 import org.eclipse.emf.cdo.internal.common.bundle.OM;
 import org.eclipse.emf.cdo.internal.common.revision.cache.EvictionEventImpl;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.ObjectUtil;
 import org.eclipse.net4j.util.lifecycle.Lifecycle;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/lru/LRURevisionHolder.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/lru/LRURevisionHolder.java
index c031144..b47e574 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/lru/LRURevisionHolder.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/lru/LRURevisionHolder.java
@@ -10,7 +10,7 @@
  **************************************************************************/
 package org.eclipse.emf.cdo.internal.common.revision.cache.lru;
 
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 /**
  * @author Eike Stepper
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/lru/RevisionHolder.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/lru/RevisionHolder.java
index fdb471d..29e6fbd 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/lru/RevisionHolder.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/lru/RevisionHolder.java
@@ -12,7 +12,7 @@
 
 import org.eclipse.emf.cdo.common.id.CDOID;
 import org.eclipse.emf.cdo.common.revision.CDORevision;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import java.text.MessageFormat;
 
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/mem/MEMRevisionCache.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/mem/MEMRevisionCache.java
index d8ccfa0..4f32db4 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/mem/MEMRevisionCache.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/mem/MEMRevisionCache.java
@@ -23,7 +23,7 @@
 import org.eclipse.emf.cdo.common.revision.cache.CDORevisionCache;
 import org.eclipse.emf.cdo.internal.common.bundle.OM;
 import org.eclipse.emf.cdo.internal.common.revision.cache.EvictionEventImpl;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.ObjectUtil;
 import org.eclipse.net4j.util.om.trace.ContextTracer;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/two/TwoLevelRevisionCache.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/two/TwoLevelRevisionCache.java
index ad50da6..e065ef5 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/two/TwoLevelRevisionCache.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/cache/two/TwoLevelRevisionCache.java
@@ -18,7 +18,7 @@
 import org.eclipse.emf.cdo.common.revision.CDORevision;
 import org.eclipse.emf.cdo.common.revision.cache.CDORevisionCache;
 import org.eclipse.emf.cdo.internal.common.bundle.OM;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.event.IEvent;
 import org.eclipse.net4j.util.event.IListener;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOAddFeatureDeltaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOAddFeatureDeltaImpl.java
index dd4b311..5d8fb0d 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOAddFeatureDeltaImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOAddFeatureDeltaImpl.java
@@ -17,7 +17,7 @@
 import org.eclipse.emf.cdo.common.revision.CDORevision;
 import org.eclipse.emf.cdo.common.revision.delta.CDOAddFeatureDelta;
 import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDeltaVisitor;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import java.io.IOException;
 
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOClearFeatureDeltaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOClearFeatureDeltaImpl.java
index 6e128c7..c30a892 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOClearFeatureDeltaImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOClearFeatureDeltaImpl.java
@@ -18,7 +18,7 @@
 import org.eclipse.emf.cdo.common.revision.CDORevision;
 import org.eclipse.emf.cdo.common.revision.delta.CDOClearFeatureDelta;
 import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDeltaVisitor;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import java.io.IOException;
 
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOContainerFeatureDeltaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOContainerFeatureDeltaImpl.java
index 4155ddc..d481d2f 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOContainerFeatureDeltaImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOContainerFeatureDeltaImpl.java
@@ -26,7 +26,7 @@
 import org.eclipse.emf.cdo.common.revision.CDORevision;
 import org.eclipse.emf.cdo.common.revision.delta.CDOContainerFeatureDelta;
 import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDeltaVisitor;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import java.io.IOException;
 
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOMoveFeatureDeltaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOMoveFeatureDeltaImpl.java
index 5752440..28014a3 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOMoveFeatureDeltaImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOMoveFeatureDeltaImpl.java
@@ -19,7 +19,7 @@
 import org.eclipse.emf.cdo.common.revision.CDORevision;
 import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDeltaVisitor;
 import org.eclipse.emf.cdo.common.revision.delta.CDOMoveFeatureDelta;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import java.io.IOException;
 
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORemoveFeatureDeltaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORemoveFeatureDeltaImpl.java
index ab9d056..42753dd 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORemoveFeatureDeltaImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORemoveFeatureDeltaImpl.java
@@ -19,7 +19,7 @@
 import org.eclipse.emf.cdo.common.revision.CDORevision;
 import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDeltaVisitor;
 import org.eclipse.emf.cdo.common.revision.delta.CDORemoveFeatureDelta;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import java.io.IOException;
 
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionDeltaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionDeltaImpl.java
index 265bfc0..5b00fd5 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionDeltaImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionDeltaImpl.java
@@ -25,8 +25,8 @@
 import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDeltaVisitor;
 import org.eclipse.emf.cdo.common.revision.delta.CDOListFeatureDelta;
 import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevisionDelta;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta;
 
 import java.io.IOException;
 import java.util.ArrayList;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionMerger.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionMerger.java
index a6af879..57c2ba6 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionMerger.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionMerger.java
@@ -20,7 +20,7 @@
 import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
 import org.eclipse.emf.cdo.common.revision.delta.CDOSetFeatureDelta;
 import org.eclipse.emf.cdo.common.revision.delta.CDOUnsetFeatureDelta;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 /**
  * @author Simon McDuff
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOSetFeatureDeltaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOSetFeatureDeltaImpl.java
index 92aed0d..66d0fd6 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOSetFeatureDeltaImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOSetFeatureDeltaImpl.java
@@ -17,7 +17,7 @@
 import org.eclipse.emf.cdo.common.revision.CDORevision;
 import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDeltaVisitor;
 import org.eclipse.emf.cdo.common.revision.delta.CDOSetFeatureDelta;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import java.io.IOException;
 
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOSingleValueFeatureDeltaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOSingleValueFeatureDeltaImpl.java
index b8d67f3..3b4e3af 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOSingleValueFeatureDeltaImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOSingleValueFeatureDeltaImpl.java
@@ -18,7 +18,7 @@
 import org.eclipse.emf.cdo.common.model.CDOFeature;
 import org.eclipse.emf.cdo.common.revision.CDOReferenceAdjuster;
 import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDelta;
-import org.eclipse.emf.cdo.spi.common.InternalCDOFeature;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOFeature;
 
 import java.io.IOException;
 
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOUnsetFeatureDeltaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOUnsetFeatureDeltaImpl.java
index b6fa9d0..5b5d592 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOUnsetFeatureDeltaImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOUnsetFeatureDeltaImpl.java
@@ -18,7 +18,7 @@
 import org.eclipse.emf.cdo.common.revision.CDORevision;
 import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDeltaVisitor;
 import org.eclipse.emf.cdo.common.revision.delta.CDOUnsetFeatureDelta;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import java.io.IOException;
 
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOTypedElement.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOTypedElement.java
deleted file mode 100644
index 3ed7825..0000000
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOTypedElement.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************
- * Copyright (c) 2004 - 2008 Eike Stepper, Germany.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *    Eike Stepper - initial API and implementation
- **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
-
-import org.eclipse.emf.cdo.common.CDODataInput;
-import org.eclipse.emf.cdo.common.CDODataOutput;
-import org.eclipse.emf.cdo.common.model.CDOClassProxy;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
-import org.eclipse.emf.cdo.common.model.CDOTypedElement;
-
-import java.io.IOException;
-
-/**
- * @author Eike Stepper
- * @noimplement This interface is not intended to be implemented by clients.
- * @since 2.0
- */
-public interface InternalCDOTypedElement extends CDOTypedElement, InternalCDONamedElement
-{
-  public CDOClassProxy getReferenceTypeProxy();
-
-  public void setReferenceType(CDOClassRef cdoClassRef);
-
-  /**
-   * @since 2.0
-   */
-  public void writeValue(CDODataOutput out, Object value) throws IOException;
-
-  /**
-   * @since 2.0
-   */
-  public Object readValue(CDODataInput in) throws IOException;
-}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/AbstractCDOID.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/AbstractCDOID.java
similarity index 95%
rename from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/AbstractCDOID.java
rename to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/AbstractCDOID.java
index 017e5a7..3b7b2e7 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/AbstractCDOID.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/AbstractCDOID.java
@@ -9,7 +9,7 @@
  *    Eike Stepper - initial API and implementation
  *    Simon McDuff - http://bugs.eclipse.org/213402
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.spi.common.id;
 
 import org.eclipse.emf.cdo.common.id.CDOID;
 
@@ -20,6 +20,7 @@
 
 /**
  * @author Eike Stepper
+ * @since 2.0
  */
 public abstract class AbstractCDOID implements CDOID
 {
@@ -81,9 +82,6 @@
     }
   }
 
-  /**
-   * @since 2.0
-   */
   public boolean isExternal()
   {
     switch (getType())
@@ -99,8 +97,6 @@
 
   /**
    * <b>Note:</b> {@link CDOID#toURIFragment()} and {@link AbstractCDOID#read(String)} need to match.
-   * 
-   * @since 2.0
    */
   public abstract void read(String fragmentPart);
 
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/AbstractCDOIDInteger.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/AbstractCDOIDInteger.java
similarity index 95%
rename from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/AbstractCDOIDInteger.java
rename to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/AbstractCDOIDInteger.java
index 4114519..5dc9479 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/AbstractCDOIDInteger.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/AbstractCDOIDInteger.java
@@ -9,7 +9,7 @@
  *    Eike Stepper - initial API and implementation
  *    Simon McDuff - http://bugs.eclipse.org/226778
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.spi.common.id;
 
 import org.eclipse.net4j.util.io.ExtendedDataInput;
 import org.eclipse.net4j.util.io.ExtendedDataOutput;
@@ -18,6 +18,7 @@
 
 /**
  * @author Eike Stepper
+ * @since 2.0
  */
 public abstract class AbstractCDOIDInteger extends AbstractCDOID implements Comparable<AbstractCDOIDInteger>
 {
@@ -44,17 +45,11 @@
     return value;
   }
 
-  /**
-   * @since 2.0
-   */
   public String toURIFragment()
   {
     return String.valueOf(value);
   }
 
-  /**
-   * @since 2.0
-   */
   @Override
   public void read(String fragmentPart)
   {
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/AbstractCDOIDLong.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/AbstractCDOIDLong.java
similarity index 94%
rename from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/AbstractCDOIDLong.java
rename to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/AbstractCDOIDLong.java
index 85bb390..c7fea98 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/AbstractCDOIDLong.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/AbstractCDOIDLong.java
@@ -9,7 +9,7 @@
  *    Eike Stepper - initial API and implementation
  *    Simon McDuff - http://bugs.eclipse.org/226778
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.spi.common.id;
 
 import org.eclipse.net4j.util.ObjectUtil;
 import org.eclipse.net4j.util.io.ExtendedDataInput;
@@ -19,12 +19,10 @@
 
 /**
  * @author Eike Stepper
+ * @since 2.0
  */
 public abstract class AbstractCDOIDLong extends AbstractCDOID implements Comparable<AbstractCDOIDLong>
 {
-  /**
-   * @since 2.0
-   */
   public static final long NULL_VALUE = 0L;
 
   private static final long serialVersionUID = 1L;
@@ -50,17 +48,11 @@
     return value;
   }
 
-  /**
-   * @since 2.0
-   */
   public String toURIFragment()
   {
     return String.valueOf(value);
   }
 
-  /**
-   * @since 2.0
-   */
   @Override
   public void read(String fragmentPart)
   {
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOIDLibraryDescriptorImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/CDOIDLibraryDescriptorImpl.java
similarity index 98%
rename from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOIDLibraryDescriptorImpl.java
rename to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/CDOIDLibraryDescriptorImpl.java
index 7806eb5..4a2efb4 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOIDLibraryDescriptorImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/CDOIDLibraryDescriptorImpl.java
@@ -8,7 +8,7 @@
  * Contributors:
  *    Eike Stepper - initial API and implementation
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.spi.common.id;
 
 import org.eclipse.emf.cdo.common.id.CDOIDLibraryDescriptor;
 import org.eclipse.emf.cdo.internal.common.bundle.OM;
@@ -21,6 +21,7 @@
 
 /**
  * @author Eike Stepper
+ * @since 2.0
  */
 public class CDOIDLibraryDescriptorImpl implements CDOIDLibraryDescriptor
 {
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOIDLibraryProviderImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/CDOIDLibraryProviderImpl.java
similarity index 97%
rename from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOIDLibraryProviderImpl.java
rename to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/CDOIDLibraryProviderImpl.java
index 1e5ac72..1cd0dcd 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOIDLibraryProviderImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/CDOIDLibraryProviderImpl.java
@@ -1,4 +1,4 @@
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.spi.common.id;
 
 import org.eclipse.emf.cdo.common.id.CDOIDLibraryDescriptor;
 import org.eclipse.emf.cdo.common.id.CDOIDLibraryProvider;
@@ -17,6 +17,7 @@
 
 /**
  * @author Eike Stepper
+ * @since 2.0
  */
 public class CDOIDLibraryProviderImpl implements CDOIDLibraryProvider
 {
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOIDLongFactoryImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/CDOIDLongFactoryImpl.java
similarity index 96%
rename from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOIDLongFactoryImpl.java
rename to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/CDOIDLongFactoryImpl.java
index 72e6a9a..9eff939 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOIDLongFactoryImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/CDOIDLongFactoryImpl.java
@@ -9,7 +9,7 @@
  *    Eike Stepper - initial API and implementation
  *    Simon McDuff - http://bugs.eclipse.org/226778    
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.spi.common.id;
 
 import org.eclipse.emf.cdo.common.id.CDOIDLibraryProvider;
 import org.eclipse.emf.cdo.common.id.CDOIDObject;
@@ -22,6 +22,7 @@
 
 /**
  * @author Eike Stepper
+ * @since 2.0
  */
 public class CDOIDLongFactoryImpl implements CDOIDObjectFactory
 {
@@ -36,9 +37,6 @@
     return new CDOIDLongImpl();
   }
 
-  /**
-   * @since 2.0
-   */
   public CDOIDObject createCDOIDObject(String fragmentPart)
   {
     return new CDOIDLongImpl();
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOIDLongImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/CDOIDLongImpl.java
similarity index 94%
rename from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOIDLongImpl.java
rename to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/CDOIDLongImpl.java
index c8529ad..8427cc1 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/CDOIDLongImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/id/CDOIDLongImpl.java
@@ -8,12 +8,13 @@
  * Contributors:
  *    Eike Stepper - initial API and implementation
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.spi.common.id;
 
 import org.eclipse.emf.cdo.common.id.CDOIDObject;
 
 /**
  * @author Eike Stepper
+ * @since 2.0
  */
 public class CDOIDLongImpl extends AbstractCDOIDLong implements CDOIDObject
 {
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOAttribute.java
similarity index 77%
copy from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java
copy to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOAttribute.java
index 354c58a..391d7b1 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOAttribute.java
@@ -8,14 +8,15 @@
  * Contributors:
  *    Eike Stepper - initial API and implementation
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.spi.common.model;
+
+import org.eclipse.emf.cdo.common.model.CDOAttribute;
 
 /**
  * @author Eike Stepper
  * @noimplement This interface is not intended to be implemented by clients.
  * @since 2.0
  */
-public interface InternalCDONamedElement extends InternalCDOModelElement
+public interface InternalCDOAttribute extends CDOAttribute, InternalCDOFeature
 {
-  public void setName(String name);
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOClass.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOClass.java
similarity index 85%
rename from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOClass.java
rename to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOClass.java
index ec80b34..e04ab17 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOClass.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOClass.java
@@ -8,11 +8,11 @@
  * Contributors:
  *    Eike Stepper - initial API and implementation
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.spi.common.model;
 
 import org.eclipse.emf.cdo.common.model.CDOClass;
 import org.eclipse.emf.cdo.common.model.CDOClassProxy;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
 import org.eclipse.emf.cdo.common.model.CDOFeature;
 
 import java.util.List;
@@ -20,10 +20,11 @@
 /**
  * @author Eike Stepper
  * @noimplement This interface is not intended to be implemented by clients.
+ * @since 2.0
  */
 public interface InternalCDOClass extends CDOClass, InternalCDOClassifier
 {
-  public void addSuperType(CDOClassRef classRef);
+  public void addSuperType(CDOClassifierRef classRef);
 
   public void addFeature(CDOFeature cdoFeature);
 
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOClassifier.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOClassifier.java
similarity index 83%
rename from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOClassifier.java
rename to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOClassifier.java
index d1fd905..a577fc2 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOClassifier.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOClassifier.java
@@ -8,9 +8,10 @@
  * Contributors:
  *    Eike Stepper - initial API and implementation
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.spi.common.model;
 
 import org.eclipse.emf.cdo.common.model.CDOClassifier;
+import org.eclipse.emf.cdo.common.model.CDOPackage;
 
 /**
  * @author Eike Stepper
@@ -19,5 +20,7 @@
  */
 public interface InternalCDOClassifier extends CDOClassifier, InternalCDONamedElement
 {
+  public void setContainingPackage(CDOPackage containingPackage);
+
   public void setClassifierID(int classifierID);
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOFeature.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOFeature.java
similarity index 82%
rename from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOFeature.java
rename to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOFeature.java
index 53af17f..a4d1990 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOFeature.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOFeature.java
@@ -8,7 +8,7 @@
  * Contributors:
  *    Eike Stepper - initial API and implementation
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.spi.common.model;
 
 import org.eclipse.emf.cdo.common.model.CDOClass;
 import org.eclipse.emf.cdo.common.model.CDOFeature;
@@ -16,15 +16,19 @@
 /**
  * @author Eike Stepper
  * @noimplement This interface is not intended to be implemented by clients.
+ * @since 2.0
  */
 public interface InternalCDOFeature extends CDOFeature, InternalCDOTypedElement
 {
+  public static final int UNKNOWN_FEATURE_INDEX = Integer.MIN_VALUE;
+
   public void setContainingClass(CDOClass containingClass);
 
+  public int getFeatureIndex();
+
   public void setFeatureIndex(int featureIndex);
 
-  /**
-   * @since 2.0
-   */
   public void setDefaultValue(Object defaultValue);
+
+  public void setUnsettable(boolean unsettable);
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOModelElement.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOModelElement.java
similarity index 75%
rename from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOModelElement.java
rename to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOModelElement.java
index 10146e1..935c3af 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOModelElement.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOModelElement.java
@@ -8,33 +8,26 @@
  * Contributors:
  *    Eike Stepper - initial API and implementation
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.spi.common.model;
 
+import org.eclipse.emf.cdo.common.CDODataInput;
 import org.eclipse.emf.cdo.common.CDODataOutput;
 import org.eclipse.emf.cdo.common.model.CDOModelElement;
-import org.eclipse.emf.cdo.common.model.CDOPackage;
 
 import java.io.IOException;
 
 /**
  * @author Eike Stepper
  * @noimplement This interface is not intended to be implemented by clients.
+ * @since 2.0
  */
 public interface InternalCDOModelElement extends CDOModelElement
 {
-  /**
-   * @since 2.0
-   */
-  public void setContainingPackage(CDOPackage containingPackage);
-
-  public void setName(String name);
-
   public void setClientInfo(Object clientInfo);
 
   public void setServerInfo(Object serverInfo);
 
-  /**
-   * @since 2.0
-   */
-  public void write(CDODataOutput out) throws IOException;
+  public void read(CDODataInput in, boolean proxy) throws IOException;
+
+  public void write(CDODataOutput out, boolean proxy) throws IOException;
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDONamedElement.java
similarity index 77%
copy from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java
copy to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDONamedElement.java
index 354c58a..78ef3d7 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDONamedElement.java
@@ -8,14 +8,16 @@
  * Contributors:
  *    Eike Stepper - initial API and implementation
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.spi.common.model;
+
+import org.eclipse.emf.cdo.common.model.CDONamedElement;
 
 /**
  * @author Eike Stepper
  * @noimplement This interface is not intended to be implemented by clients.
  * @since 2.0
  */
-public interface InternalCDONamedElement extends InternalCDOModelElement
+public interface InternalCDONamedElement extends CDONamedElement, InternalCDOModelElement
 {
   public void setName(String name);
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOPackage.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackage.java
similarity index 68%
rename from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOPackage.java
rename to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackage.java
index 41e064d..8cf1e74 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOPackage.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackage.java
@@ -8,44 +8,49 @@
  * Contributors:
  *    Eike Stepper - initial API and implementation
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.spi.common.model;
 
-import org.eclipse.emf.cdo.common.CDODataInput;
 import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
-import org.eclipse.emf.cdo.common.model.CDOClass;
+import org.eclipse.emf.cdo.common.model.CDOClassifier;
 import org.eclipse.emf.cdo.common.model.CDOPackage;
 import org.eclipse.emf.cdo.common.model.CDOPackageManager;
 
-import java.io.IOException;
 import java.util.List;
 
 /**
  * @author Eike Stepper
  * @noimplement This interface is not intended to be implemented by clients.
+ * @since 2.0
  */
 public interface InternalCDOPackage extends CDOPackage, InternalCDONamedElement
 {
+  public State getState();
+
+  public void setState(State state);
+
   public void setPackageManager(CDOPackageManager packageManager);
 
-  public void setPersistent(boolean persistent);
+  public void setPackageURI(String packageURI);
+
+  public void setParentURI(String parentURI);
+
+  public void setDynamic(boolean dynamic);
 
   public void setMetaIDRange(CDOIDMetaRange metaIDRange);
 
   public void setEcore(String ecore);
 
-  /**
-   * @since 2.0
-   */
   public String basicGetEcore();
 
-  public void addClass(CDOClass cdoClass);
+  public void setClassifiers(List<CDOClassifier> classifiers);
 
-  public void setClasses(List<CDOClass> classes);
+  public void addClassifier(CDOClassifier cdoClassifier);
 
   /**
-   * Fill a proxy package with data from a stream.
-   * 
-   * @since 2.0
+   * @author Eike Stepper
    */
-  public void read(CDODataInput in) throws IOException;
+  public enum State
+  {
+    NEW, CLEAN, PROXY
+  }
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOPackageManager.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageManager.java
similarity index 95%
rename from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOPackageManager.java
rename to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageManager.java
index 1b6091e..65ea256 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOPackageManager.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOPackageManager.java
@@ -8,7 +8,7 @@
  * Contributors:
  *    Eike Stepper - initial API and implementation
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.spi.common.model;
 
 import org.eclipse.emf.cdo.common.model.CDOPackage;
 import org.eclipse.emf.cdo.common.model.CDOPackageManager;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOReference.java
similarity index 73%
copy from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java
copy to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOReference.java
index 354c58a..40eafc8 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDONamedElement.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOReference.java
@@ -8,14 +8,16 @@
  * Contributors:
  *    Eike Stepper - initial API and implementation
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.spi.common.model;
+
+import org.eclipse.emf.cdo.common.model.CDOReference;
 
 /**
  * @author Eike Stepper
  * @noimplement This interface is not intended to be implemented by clients.
  * @since 2.0
  */
-public interface InternalCDONamedElement extends InternalCDOModelElement
+public interface InternalCDOReference extends CDOReference, InternalCDOFeature
 {
-  public void setName(String name);
+  public void setContainment(boolean containment);
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOTypedElement.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOTypedElement.java
new file mode 100644
index 0000000..e08bbde
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/model/InternalCDOTypedElement.java
@@ -0,0 +1,36 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2008 Eike Stepper, Germany.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ **************************************************************************/
+package org.eclipse.emf.cdo.spi.common.model;
+
+import org.eclipse.emf.cdo.common.model.CDOClassifier;
+import org.eclipse.emf.cdo.common.model.CDOTypedElement;
+
+/**
+ * @author Eike Stepper
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @since 2.0
+ */
+public interface InternalCDOTypedElement extends CDOTypedElement, InternalCDONamedElement
+{
+  public void setType(CDOClassifier type);
+
+  public void setLowerBound(int lowerBound);
+
+  public void setUpperBound(int upperBound);
+
+  // public Object copyValue(Object value);
+  //
+  // public Object adjustReferences(CDOReferenceAdjuster adjuster, Object value);
+  //
+  // public Object readValue(CDODataInput in) throws IOException;
+  //
+  // public void writeValue(CDODataOutput out, Object value) throws IOException;
+}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/AbstractCDORevision.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/AbstractCDORevision.java
similarity index 98%
rename from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/AbstractCDORevision.java
rename to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/AbstractCDORevision.java
index e822171..5f5274c 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/AbstractCDORevision.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/AbstractCDORevision.java
@@ -11,7 +11,7 @@
  *    Simon McDuff - http://bugs.eclipse.org/212958
  *    Simon McDuff - http://bugs.eclipse.org/213402
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.spi.common.revision;
 
 import org.eclipse.emf.cdo.common.CDODataInput;
 import org.eclipse.emf.cdo.common.CDODataOutput;
@@ -19,7 +19,7 @@
 import org.eclipse.emf.cdo.common.id.CDOIDTemp;
 import org.eclipse.emf.cdo.common.id.CDOIDUtil;
 import org.eclipse.emf.cdo.common.model.CDOClass;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
 import org.eclipse.emf.cdo.common.model.CDOFeature;
 import org.eclipse.emf.cdo.common.revision.CDOList;
 import org.eclipse.emf.cdo.common.revision.CDOListFactory;
@@ -30,6 +30,7 @@
 import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDeltaUtil;
 import org.eclipse.emf.cdo.internal.common.bundle.OM;
 import org.eclipse.emf.cdo.internal.common.revision.delta.CDORevisionMerger;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOFeature;
 
 import org.eclipse.net4j.util.ImplementationError;
 import org.eclipse.net4j.util.collection.MoveableList;
@@ -132,7 +133,7 @@
 
   public void write(CDODataOutput out, int referenceChunk) throws IOException
   {
-    CDOClassRef classRef = cdoClass.createClassRef();
+    CDOClassifierRef classRef = cdoClass.createClassRef();
     if (TRACER.isEnabled())
     {
       TRACER
@@ -143,7 +144,7 @@
     }
 
     WRITING.start(this);
-    out.writeCDOClassRef(classRef);
+    out.writeCDOClassifierRef(classRef);
     out.writeCDOID(id);
     out.writeInt(getVersion());
     if (!id.isTemporary())
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOList.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDOList.java
similarity index 95%
rename from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOList.java
rename to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDOList.java
index 3deeb57..aea6c88 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDOList.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDOList.java
@@ -8,7 +8,7 @@
  * Contributors:
  *    Simon McDuff - initial API and implementation
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.spi.common.revision;
 
 import org.eclipse.emf.cdo.common.model.CDOType;
 import org.eclipse.emf.cdo.common.revision.CDOList;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDORevision.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevision.java
similarity index 93%
rename from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDORevision.java
rename to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevision.java
index d5e6176..9d71f2f 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDORevision.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevision.java
@@ -9,7 +9,7 @@
  *    Eike Stepper - initial API and implementation
  *    Simon McDuff - maintenance
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.spi.common.revision;
 
 import org.eclipse.emf.cdo.common.CDODataOutput;
 import org.eclipse.emf.cdo.common.id.CDOID;
@@ -24,6 +24,7 @@
 
 /**
  * @author Eike Stepper
+ * @since 2.0
  */
 public interface InternalCDORevision extends CDORevision, CDORevisionData, CDOReferenceAdjustable
 {
@@ -31,8 +32,6 @@
 
   /**
    * The equivalent of <code>EStructuralFeatureImpl.NIL</code> (i.e. explicit <code>null</code>).
-   * 
-   * @since 2.0
    */
   public static final Object NIL = new Object();
 
@@ -50,9 +49,6 @@
 
   public void setResourceID(CDOID resourceID);
 
-  /**
-   * @since 2.0
-   */
   public void setContainerID(Object containerID);
 
   public void setContainingFeatureID(int containingFeatureID);
@@ -78,26 +74,16 @@
 
   /**
    * Use this method to retrieved {@link InternalCDORevision#NIL} object in some cases.
-   * 
-   * @since 2.0
    */
   public Object basicGet(CDOFeature feature, int index);
 
   /**
    * Use this method to retrieved {@link InternalCDORevision#NIL} object in some cases.
-   * 
-   * @since 2.0
    */
   public Object basicSet(CDOFeature feature, int index, Object value);
 
-  /**
-   * @since 2.0
-   */
   public void setList(CDOFeature feature, InternalCDOList list);
 
-  /**
-   * @since 2.0
-   */
   public CDOList getList(CDOFeature feature);
 
   /**
@@ -111,8 +97,5 @@
   @Deprecated
   public void setListSize(CDOFeature feature, int size);
 
-  /**
-   * @since 2.0
-   */
   public void write(CDODataOutput out, int referenceChunk) throws IOException;
 }
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDORevisionDelta.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevisionDelta.java
similarity index 89%
rename from plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDORevisionDelta.java
rename to plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevisionDelta.java
index 7c80c57..d7551f4 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/InternalCDORevisionDelta.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevisionDelta.java
@@ -8,7 +8,7 @@
  * Contributors:
  *    Eike Stepper - initial API and implementation
  **************************************************************************/
-package org.eclipse.emf.cdo.spi.common;
+package org.eclipse.emf.cdo.spi.common.revision;
 
 import org.eclipse.emf.cdo.common.revision.CDOReferenceAdjuster;
 import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDelta;
@@ -17,23 +17,15 @@
 /**
  * @author Eike Stepper
  * @noimplement This interface is not intended to be implemented by clients.
+ * @since 2.0
  */
 public interface InternalCDORevisionDelta extends CDORevisionDelta
 {
   public void addFeatureDelta(CDOFeatureDelta delta);
 
-  /**
-   * @since 2.0
-   */
   public void adjustReferences(CDOReferenceAdjuster idMappings);
 
-  /**
-   * @since 2.0
-   */
   public void setOriginVersion(int originVersion);
 
-  /**
-   * @since 2.0
-   */
   public void setDirtyVersion(int dirtyVersion);
 }
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IDBStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IDBStoreAccessor.java
index 7626643..7be3add 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IDBStoreAccessor.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IDBStoreAccessor.java
@@ -10,7 +10,7 @@
  **************************************************************************/
 package org.eclipse.emf.cdo.server.db;
 
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
 import org.eclipse.emf.cdo.server.IStoreAccessor;
 
 /**
@@ -24,7 +24,7 @@
   /**
    * @since 2.0
    */
-  public CDOClassRef readClassRef(int classID);
+  public CDOClassifierRef readClassRef(int classID);
 
   /**
    * @since 2.0
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMappingStrategy.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMappingStrategy.java
index 7b4010a..98a15f4 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMappingStrategy.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMappingStrategy.java
@@ -12,7 +12,7 @@
 
 import org.eclipse.emf.cdo.common.id.CDOID;
 import org.eclipse.emf.cdo.common.model.CDOClass;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
 import org.eclipse.emf.cdo.server.IStoreAccessor;
 import org.eclipse.emf.cdo.server.internal.db.ServerInfo;
 
@@ -91,7 +91,7 @@
   /**
    * @since 2.0
    */
-  public CDOClassRef getClassRef(IDBStoreAccessor accessor, int classID);
+  public CDOClassifierRef getClassRef(IDBStoreAccessor accessor, int classID);
 
   /**
    * @since 2.0
@@ -101,7 +101,7 @@
   /**
    * @since 2.0
    */
-  public CDOClassRef readObjectType(IDBStoreAccessor accessor, CDOID id);
+  public CDOClassifierRef readObjectType(IDBStoreAccessor accessor, CDOID id);
 
   /**
    * @since 2.0
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IObjectTypeCache.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IObjectTypeCache.java
index 133ccda..95d7353 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IObjectTypeCache.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IObjectTypeCache.java
@@ -12,7 +12,7 @@
 
 import org.eclipse.emf.cdo.common.id.CDOID;
 import org.eclipse.emf.cdo.common.model.CDOClass;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
 
 /**
  * @author Eike Stepper
@@ -22,7 +22,7 @@
   /**
    * @since 2.0
    */
-  public CDOClassRef getObjectType(IDBStoreAccessor accessor, CDOID id);
+  public CDOClassifierRef getObjectType(IDBStoreAccessor accessor, CDOID id);
 
   /**
    * @since 2.0
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/AttributeMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/AttributeMapping.java
index 04a3d9b..be852c1 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/AttributeMapping.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/AttributeMapping.java
@@ -14,7 +14,7 @@
 import org.eclipse.emf.cdo.common.model.CDOFeature;
 import org.eclipse.emf.cdo.common.revision.CDORevision;
 import org.eclipse.emf.cdo.server.db.IAttributeMapping;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.db.DBException;
 import org.eclipse.net4j.db.IDBAdapter;
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ClassMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ClassMapping.java
index baa1f77..253c5ec 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ClassMapping.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ClassMapping.java
@@ -21,7 +21,7 @@
 import org.eclipse.emf.cdo.server.db.IDBStoreAccessor;
 import org.eclipse.emf.cdo.server.db.IFeatureMapping;
 import org.eclipse.emf.cdo.server.db.IReferenceMapping;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.db.DBException;
 import org.eclipse.net4j.db.DBType;
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ClassServerInfo.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ClassServerInfo.java
index 14cafb8..fefbade 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ClassServerInfo.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ClassServerInfo.java
@@ -12,7 +12,7 @@
 
 import org.eclipse.emf.cdo.common.model.CDOClass;
 import org.eclipse.emf.cdo.server.db.IClassMapping;
-import org.eclipse.emf.cdo.spi.common.InternalCDOClass;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOClass;
 
 import org.eclipse.net4j.util.ImplementationError;
 
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java
index faa6ff2..1852911 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java
@@ -16,7 +16,7 @@
 import org.eclipse.emf.cdo.common.id.CDOIDUtil;
 import org.eclipse.emf.cdo.common.model.CDOClass;
 import org.eclipse.emf.cdo.common.model.CDOClassProxy;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
 import org.eclipse.emf.cdo.common.model.CDOFeature;
 import org.eclipse.emf.cdo.common.model.CDOModelUtil;
 import org.eclipse.emf.cdo.common.model.CDOPackage;
@@ -37,10 +37,10 @@
 import org.eclipse.emf.cdo.server.db.IJDBCDelegate;
 import org.eclipse.emf.cdo.server.db.IMappingStrategy;
 import org.eclipse.emf.cdo.server.internal.db.bundle.OM;
-import org.eclipse.emf.cdo.spi.common.InternalCDOClass;
-import org.eclipse.emf.cdo.spi.common.InternalCDOFeature;
-import org.eclipse.emf.cdo.spi.common.InternalCDOPackage;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOClass;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOFeature;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackage;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.db.DBException;
 import org.eclipse.net4j.db.DBUtil;
@@ -170,7 +170,7 @@
         boolean isAbstract = getBoolean(values[3]);
         CDOClass cdoClass = CDOModelUtil.createClass(cdoPackage, classifierID, name, isAbstract);
         ClassServerInfo.setDBID(cdoClass, classID);
-        ((InternalCDOPackage)cdoPackage).addClass(cdoClass);
+        ((InternalCDOPackage)cdoPackage).addClassifier(cdoClass);
         readSuperTypes(cdoClass, classID);
         readFeatures(cdoClass, classID);
         return true;
@@ -217,7 +217,7 @@
           String packageURI = (String)values[4];
           int classifierID = (Integer)values[5];
           boolean containment = getBoolean(values[7]);
-          CDOClassRef classRef = CDOModelUtil.createClassRef(packageURI, classifierID);
+          CDOClassifierRef classRef = CDOModelUtil.createClassRef(packageURI, classifierID);
           CDOClassProxy referenceType = new CDOClassProxy(classRef, cdoClass.getPackageManager());
           feature = CDOModelUtil.createReference(cdoClass, featureID, name, referenceType, many, containment);
         }
@@ -263,7 +263,7 @@
     return getStore().getMappingStrategy().readObjectIDs(this);
   }
 
-  public CDOClassRef readObjectType(CDOID id)
+  public CDOClassifierRef readObjectType(CDOID id)
   {
     if (TRACER.isEnabled())
     {
@@ -273,7 +273,7 @@
     return getStore().getMappingStrategy().readObjectType(this, id);
   }
 
-  public final CDOClassRef readClassRef(int classID)
+  public final CDOClassifierRef readClassRef(int classID)
   {
     String where = CDODBSchema.CLASSES_ID.getName() + "=" + classID;
     Object[] res = DBUtil.select(jdbcDelegate.getConnection(), where, CDODBSchema.CLASSES_CLASSIFIER,
@@ -354,7 +354,7 @@
     // TODO Replace calls to getObjectType by optimized calls to RevisionManager.getObjectType (cache!)
     IRepository repository = getStore().getRepository();
     IPackageManager packageManager = repository.getPackageManager();
-    CDOClassRef type = readObjectType(id);
+    CDOClassifierRef type = readObjectType(id);
     return type.resolve(packageManager);
   }
 
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/FeatureServerInfo.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/FeatureServerInfo.java
index 03e9ab9..4330a01 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/FeatureServerInfo.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/FeatureServerInfo.java
@@ -11,7 +11,7 @@
 package org.eclipse.emf.cdo.server.internal.db;
 
 import org.eclipse.emf.cdo.common.model.CDOFeature;
-import org.eclipse.emf.cdo.spi.common.InternalCDOFeature;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOFeature;
 
 /**
  * @author Eike Stepper
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/HorizontalMappingStrategy.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/HorizontalMappingStrategy.java
index 6a86ea8..897da2c 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/HorizontalMappingStrategy.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/HorizontalMappingStrategy.java
@@ -13,7 +13,7 @@
 import org.eclipse.emf.cdo.common.id.CDOID;
 import org.eclipse.emf.cdo.common.id.CDOIDUtil;
 import org.eclipse.emf.cdo.common.model.CDOClass;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
 import org.eclipse.emf.cdo.common.model.CDOPackage;
 import org.eclipse.emf.cdo.common.model.resource.CDOResourceNodeClass;
 import org.eclipse.emf.cdo.common.model.resource.CDOResourcePackage;
@@ -64,12 +64,12 @@
     this.objectTypeCache = objectTypeCache;
   }
 
-  public CDOClassRef readObjectType(IDBStoreAccessor accessor, CDOID id)
+  public CDOClassifierRef readObjectType(IDBStoreAccessor accessor, CDOID id)
   {
     return objectTypeCache.getObjectType(accessor, id);
   }
 
-  protected final CDOClassRef readObjectTypeFromClassesWithObjectInfo(IDBStoreAccessor accessor, CDOID id)
+  protected final CDOClassifierRef readObjectTypeFromClassesWithObjectInfo(IDBStoreAccessor accessor, CDOID id)
   {
     String prefix = "SELECT DISTINCT " + CDODBSchema.ATTRIBUTES_CLASS + " FROM ";
     String suffix = " WHERE " + CDODBSchema.ATTRIBUTES_ID + "=" + id;
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MappingStrategy.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MappingStrategy.java
index d1290dd..6c645f8 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MappingStrategy.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MappingStrategy.java
@@ -14,7 +14,7 @@
 import org.eclipse.emf.cdo.common.id.CDOID;
 import org.eclipse.emf.cdo.common.id.CDOIDUtil;
 import org.eclipse.emf.cdo.common.model.CDOClass;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
 import org.eclipse.emf.cdo.common.model.CDOFeature;
 import org.eclipse.emf.cdo.common.model.CDOPackage;
 import org.eclipse.emf.cdo.common.model.resource.CDOResourceClass;
@@ -62,7 +62,7 @@
 
   private Map<Object, IDBTable> referenceTables = new HashMap<Object, IDBTable>();
 
-  private Map<Integer, CDOClassRef> classRefs = new HashMap<Integer, CDOClassRef>();
+  private Map<Integer, CDOClassifierRef> classRefs = new HashMap<Integer, CDOClassifierRef>();
 
   public MappingStrategy()
   {
@@ -140,9 +140,9 @@
     return referenceTables;
   }
 
-  public CDOClassRef getClassRef(IDBStoreAccessor accessor, int classID)
+  public CDOClassifierRef getClassRef(IDBStoreAccessor accessor, int classID)
   {
-    CDOClassRef classRef = classRefs.get(classID);
+    CDOClassifierRef classRef = classRefs.get(classID);
     if (classRef == null)
     {
       switch (classID)
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ObjectTypeCache.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ObjectTypeCache.java
index 6945f9c..49d7433 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ObjectTypeCache.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ObjectTypeCache.java
@@ -13,7 +13,7 @@
 import org.eclipse.emf.cdo.common.id.CDOID;
 import org.eclipse.emf.cdo.common.id.CDOIDUtil;
 import org.eclipse.emf.cdo.common.model.CDOClass;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
 import org.eclipse.emf.cdo.server.db.IDBStoreAccessor;
 import org.eclipse.emf.cdo.server.db.IMappingStrategy;
 import org.eclipse.emf.cdo.server.db.IObjectTypeCache;
@@ -61,7 +61,7 @@
     this.mappingStrategy = mappingStrategy;
   }
 
-  public final CDOClassRef getObjectType(IDBStoreAccessor accessor, CDOID id)
+  public final CDOClassifierRef getObjectType(IDBStoreAccessor accessor, CDOID id)
   {
     Statement statement = accessor.getJDBCDelegate().getStatement();
     initialize(statement);
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/PackageServerInfo.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/PackageServerInfo.java
index a368e46..8a7b62e 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/PackageServerInfo.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/PackageServerInfo.java
@@ -11,7 +11,7 @@
 package org.eclipse.emf.cdo.server.internal.db;
 
 import org.eclipse.emf.cdo.common.model.CDOPackage;
-import org.eclipse.emf.cdo.spi.common.InternalCDOPackage;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackage;
 
 import org.eclipse.net4j.db.ddl.IDBSchema;
 
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ReferenceMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ReferenceMapping.java
index e45f041..5ab520a 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ReferenceMapping.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ReferenceMapping.java
@@ -21,7 +21,7 @@
 import org.eclipse.emf.cdo.server.db.IDBStoreChunkReader;
 import org.eclipse.emf.cdo.server.db.IJDBCDelegate;
 import org.eclipse.emf.cdo.server.db.IReferenceMapping;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.db.DBType;
 import org.eclipse.net4j.db.ddl.IDBField;
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/VerticalMappingStrategy.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/VerticalMappingStrategy.java
index a22f748..1bb6ed0 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/VerticalMappingStrategy.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/VerticalMappingStrategy.java
@@ -12,7 +12,7 @@
 
 import org.eclipse.emf.cdo.common.id.CDOID;
 import org.eclipse.emf.cdo.common.model.CDOClass;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
 import org.eclipse.emf.cdo.server.db.IClassMapping;
 import org.eclipse.emf.cdo.server.db.IDBStoreAccessor;
 
@@ -46,7 +46,7 @@
     return rootClassMapping;
   }
 
-  public CDOClassRef readObjectType(IDBStoreAccessor accessor, CDOID id)
+  public CDOClassifierRef readObjectType(IDBStoreAccessor accessor, CDOID id)
   {
     throw new UnsupportedOperationException();
   }
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/jdbc/AbstractJDBCDelegate.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/jdbc/AbstractJDBCDelegate.java
index 5cbb509..8d9c070 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/jdbc/AbstractJDBCDelegate.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/jdbc/AbstractJDBCDelegate.java
@@ -20,7 +20,7 @@
 import org.eclipse.emf.cdo.server.db.IJDBCDelegate;
 import org.eclipse.emf.cdo.server.db.IReferenceMapping;
 import org.eclipse.emf.cdo.server.internal.db.FeatureServerInfo;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.db.DBException;
 import org.eclipse.net4j.db.DBUtil;
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/jdbc/PreparedStatementJDBCDelegate.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/jdbc/PreparedStatementJDBCDelegate.java
index cf63bb8..e670e6c 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/jdbc/PreparedStatementJDBCDelegate.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/jdbc/PreparedStatementJDBCDelegate.java
@@ -17,7 +17,7 @@
 import org.eclipse.emf.cdo.server.internal.db.CDODBSchema;
 import org.eclipse.emf.cdo.server.internal.db.ServerInfo;
 import org.eclipse.emf.cdo.server.internal.db.bundle.OM;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.db.DBException;
 import org.eclipse.net4j.db.DBUtil;
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernatePackageHandler.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernatePackageHandler.java
index 4e949eb..1b38fc5 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernatePackageHandler.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernatePackageHandler.java
@@ -19,9 +19,9 @@
 import org.eclipse.emf.cdo.internal.server.TransactionCommitContextImpl;
 import org.eclipse.emf.cdo.server.IStoreAccessor.CommitContext;
 import org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM;
-import org.eclipse.emf.cdo.spi.common.InternalCDOClass;
-import org.eclipse.emf.cdo.spi.common.InternalCDOFeature;
-import org.eclipse.emf.cdo.spi.common.InternalCDOPackage;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOClass;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOFeature;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackage;
 
 import org.eclipse.net4j.util.ObjectUtil;
 import org.eclipse.net4j.util.WrappedException;
@@ -290,7 +290,7 @@
         // }
       }
 
-      ((InternalCDOPackage)cdoPackage).setClasses(cdoClasses);
+      ((InternalCDOPackage)cdoPackage).setClassifiers(cdoClasses);
     }
     finally
     {
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore.java
index 2f3fc22..9a98881 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore.java
@@ -26,7 +26,7 @@
 import org.eclipse.emf.cdo.server.hibernate.internal.id.CDOIDHibernateLibraryHandler;
 import org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM;
 import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOInterceptor;
-import org.eclipse.emf.cdo.spi.common.CDOIDLibraryProviderImpl;
+import org.eclipse.emf.cdo.spi.common.id.CDOIDLibraryProviderImpl;
 
 import org.eclipse.net4j.util.WrappedException;
 import org.eclipse.net4j.util.io.IOUtil;
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java
index b10b94c..fa729bf 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java
@@ -14,7 +14,7 @@
 import org.eclipse.emf.cdo.common.id.CDOID;
 import org.eclipse.emf.cdo.common.id.CDOIDTemp;
 import org.eclipse.emf.cdo.common.id.CDOIDUtil;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
 import org.eclipse.emf.cdo.common.model.CDOFeature;
 import org.eclipse.emf.cdo.common.model.CDOPackage;
 import org.eclipse.emf.cdo.common.model.CDOPackageInfo;
@@ -32,7 +32,7 @@
 import org.eclipse.emf.cdo.server.hibernate.internal.id.CDOIDHibernateFactoryImpl;
 import org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM;
 import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.PersistableListHolder;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.ObjectUtil;
 import org.eclipse.net4j.util.WrappedException;
@@ -219,7 +219,7 @@
     throw new UnsupportedOperationException();
   }
 
-  public CDOClassRef readObjectType(CDOID id)
+  public CDOClassifierRef readObjectType(CDOID id)
   {
     CDORevision cdoRevision = readRevision(id, -1);
     return cdoRevision.getCDOClass().createClassRef();
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java
index 8b7c25b..90faaa8 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java
@@ -19,7 +19,7 @@
 import org.eclipse.emf.cdo.server.hibernate.IHibernateStore;
 import org.eclipse.emf.cdo.server.hibernate.id.CDOIDHibernate;
 import org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.ObjectUtil;
 import org.eclipse.net4j.util.WrappedException;
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainerIDGetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainerIDGetter.java
index 0a355a1..dacde71 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainerIDGetter.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainerIDGetter.java
@@ -10,7 +10,7 @@
  **************************************************************************/
 package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
 
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.HibernateException;
 
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainerIDSetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainerIDSetter.java
index 90322ed..30487aa 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainerIDSetter.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainerIDSetter.java
@@ -10,7 +10,7 @@
  **************************************************************************/
 package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
 
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.HibernateException;
 import org.hibernate.engine.SessionFactoryImplementor;
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainingFeatureIDGetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainingFeatureIDGetter.java
index 1e3cd1f..ec78f7b 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainingFeatureIDGetter.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainingFeatureIDGetter.java
@@ -10,7 +10,7 @@
  **************************************************************************/
 package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
 
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.HibernateException;
 
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainingFeatureIDSetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainingFeatureIDSetter.java
index a8aafe4..74cb002 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainingFeatureIDSetter.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainingFeatureIDSetter.java
@@ -10,7 +10,7 @@
  **************************************************************************/
 package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
 
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.HibernateException;
 import org.hibernate.engine.SessionFactoryImplementor;
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertyGetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertyGetter.java
index cd8c67d..9d19a10 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertyGetter.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertyGetter.java
@@ -11,7 +11,7 @@
 package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
 
 import org.eclipse.emf.cdo.server.hibernate.id.CDOIDHibernate;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.HibernateException;
 
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertySetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertySetter.java
index bdfc294..6bea8fc 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertySetter.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertySetter.java
@@ -16,7 +16,7 @@
 import org.eclipse.emf.cdo.server.hibernate.internal.id.CDOIDHibernateFactoryImpl;
 import org.eclipse.emf.cdo.server.internal.hibernate.HibernateCommitContext;
 import org.eclipse.emf.cdo.server.internal.hibernate.HibernateThreadContext;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.HibernateException;
 import org.hibernate.engine.SessionFactoryImplementor;
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOInterceptor.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOInterceptor.java
index c23fd4f..e3c4012 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOInterceptor.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOInterceptor.java
@@ -11,7 +11,7 @@
 package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
 
 import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.EmptyInterceptor;
 
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceGetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceGetter.java
index 858a75b..78d7f94 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceGetter.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceGetter.java
@@ -11,7 +11,7 @@
 package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
 
 import org.eclipse.emf.cdo.common.revision.CDOList;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.HibernateException;
 import org.hibernate.collection.PersistentCollection;
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceSetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceSetter.java
index 65ddb20..084ffae 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceSetter.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceSetter.java
@@ -10,7 +10,7 @@
  **************************************************************************/
 package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
 
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.HibernateException;
 import org.hibernate.collection.PersistentCollection;
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyGetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyGetter.java
index f23c77c..00490f4 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyGetter.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyGetter.java
@@ -11,7 +11,7 @@
 package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
 
 import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionPropertyAccessor.CDORevisionSetter;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.HibernateException;
 import org.hibernate.engine.SessionImplementor;
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertySetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertySetter.java
index af4e604..abeaa42 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertySetter.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertySetter.java
@@ -11,7 +11,7 @@
 package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
 
 import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionPropertyAccessor.CDORevisionSetter;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.HibernateException;
 import org.hibernate.engine.SessionFactoryImplementor;
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOResourceIDGetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOResourceIDGetter.java
index b37b9d5..d1c2eca 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOResourceIDGetter.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOResourceIDGetter.java
@@ -10,7 +10,7 @@
  **************************************************************************/
 package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
 
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.HibernateException;
 
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOResourceIDSetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOResourceIDSetter.java
index 3038b10..e6e09aa 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOResourceIDSetter.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOResourceIDSetter.java
@@ -11,7 +11,7 @@
 package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
 
 import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.HibernateException;
 import org.hibernate.engine.SessionFactoryImplementor;
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionInstantiator.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionInstantiator.java
index c53a431..7574be8 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionInstantiator.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionInstantiator.java
@@ -13,7 +13,7 @@
 import org.eclipse.emf.cdo.common.model.CDOClass;
 import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
 import org.eclipse.emf.cdo.server.hibernate.internal.id.CDOIDHibernateFactoryImpl;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.mapping.PersistentClass;
 import org.hibernate.tuple.Instantiator;
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionLazyInitializer.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionLazyInitializer.java
index 0a1c914..7fa5889 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionLazyInitializer.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionLazyInitializer.java
@@ -10,7 +10,7 @@
  **************************************************************************/
 package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
 
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.engine.SessionImplementor;
 import org.hibernate.proxy.AbstractLazyInitializer;
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor.java
index 62dd956..e5f04db 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor.java
@@ -11,7 +11,7 @@
 package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
 
 import org.eclipse.emf.cdo.common.model.CDOFeature;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.HibernateException;
 import org.hibernate.PropertyNotFoundException;
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxy.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxy.java
index 27e26c9..8804eff 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxy.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxy.java
@@ -19,8 +19,8 @@
 import org.eclipse.emf.cdo.common.revision.CDORevision;
 import org.eclipse.emf.cdo.common.revision.CDORevisionData;
 import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
-import org.eclipse.emf.cdo.spi.common.InternalCDOList;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDOList;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.proxy.HibernateProxy;
 import org.hibernate.proxy.LazyInitializer;
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java
index 2834f31..da05941 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java
@@ -17,7 +17,7 @@
 import org.eclipse.emf.cdo.common.model.resource.CDOResourcePackage;
 import org.eclipse.emf.cdo.server.internal.hibernate.HibernateStore;
 import org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.om.trace.ContextTracer;
 
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticIdPropertyHandler.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticIdPropertyHandler.java
index 547f18e..217f8f9 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticIdPropertyHandler.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticIdPropertyHandler.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   Martin Taal
  *
- * $Id: CDOSyntheticIdPropertyHandler.java,v 1.6 2008-12-28 17:56:54 estepper Exp $
+ * $Id: CDOSyntheticIdPropertyHandler.java,v 1.6.2.1 2009-01-07 07:21:11 estepper Exp $
  */
 
 package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
@@ -20,7 +20,7 @@
 import org.eclipse.emf.cdo.server.internal.hibernate.HibernateCommitContext;
 import org.eclipse.emf.cdo.server.internal.hibernate.HibernateThreadContext;
 import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.HibernateException;
 import org.hibernate.PropertyNotFoundException;
@@ -38,7 +38,7 @@
  * Is only used for synthetic id's.
  * 
  * @author <a href="mailto:mtaal@elver.org">Martin Taal</a>
- * @version $Revision: 1.6 $
+ * @version $Revision: 1.6.2.1 $
  */
 @SuppressWarnings("unchecked")
 public class CDOSyntheticIdPropertyHandler implements Getter, Setter, PropertyAccessor
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticVersionPropertyHandler.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticVersionPropertyHandler.java
index 49a0555..bbdbbb7 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticVersionPropertyHandler.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticVersionPropertyHandler.java
@@ -8,13 +8,13 @@
  * Contributors:
  *   Martin Taal
  *
- * $Id: CDOSyntheticVersionPropertyHandler.java,v 1.4 2008-12-28 17:56:54 estepper Exp $
+ * $Id: CDOSyntheticVersionPropertyHandler.java,v 1.4.2.1 2009-01-07 07:21:11 estepper Exp $
  */
 
 package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
 
 import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.HibernateException;
 import org.hibernate.PropertyNotFoundException;
@@ -31,7 +31,7 @@
  * Reads the version from the internal version cache.
  * 
  * @author <a href="mailto:mtaal@elver.org">Martin Taal</a>
- * @version $Revision: 1.4 $
+ * @version $Revision: 1.4.2.1 $
  */
 @SuppressWarnings("unchecked")
 public class CDOSyntheticVersionPropertyHandler implements Getter, Setter, PropertyAccessor
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertyGetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertyGetter.java
index 2f36621..cbb2132 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertyGetter.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertyGetter.java
@@ -10,7 +10,7 @@
  **************************************************************************/
 package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
 
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.HibernateException;
 
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertySetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertySetter.java
index c0b7a9e..75990dc 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertySetter.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertySetter.java
@@ -10,7 +10,7 @@
  **************************************************************************/
 package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
 
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.hibernate.HibernateException;
 import org.hibernate.engine.SessionFactoryImplementor;
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList.java
index c8c5164..e383291 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList.java
@@ -16,7 +16,7 @@
 import org.eclipse.emf.cdo.common.revision.CDOReferenceAdjuster;
 import org.eclipse.emf.cdo.common.revision.CDORevision;
 import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
-import org.eclipse.emf.cdo.spi.common.InternalCDOList;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDOList;
 
 import java.util.ArrayList;
 import java.util.Collection;
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/LongIDStore.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/LongIDStore.java
index 3331898..14d7a6f 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/LongIDStore.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/LongIDStore.java
@@ -15,7 +15,7 @@
 import org.eclipse.emf.cdo.common.id.CDOIDLibraryProvider;
 import org.eclipse.emf.cdo.common.id.CDOIDObjectFactory;
 import org.eclipse.emf.cdo.common.id.CDOIDUtil;
-import org.eclipse.emf.cdo.spi.common.CDOIDLongFactoryImpl;
+import org.eclipse.emf.cdo.spi.common.id.CDOIDLongFactoryImpl;
 
 import org.eclipse.net4j.util.ReflectUtil.ExcludeFromDump;
 
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStore.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStore.java
index a5a62aa..0bd34d3 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStore.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStore.java
@@ -23,7 +23,7 @@
 import org.eclipse.emf.cdo.server.ITransaction;
 import org.eclipse.emf.cdo.server.IView;
 import org.eclipse.emf.cdo.server.StoreThreadLocal;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.ObjectUtil;
 
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStoreAccessor.java
index 82c308b..8350e10 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStoreAccessor.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStoreAccessor.java
@@ -14,7 +14,7 @@
 
 import org.eclipse.emf.cdo.common.id.CDOID;
 import org.eclipse.emf.cdo.common.model.CDOClass;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
 import org.eclipse.emf.cdo.common.model.CDOFeature;
 import org.eclipse.emf.cdo.common.model.CDOPackage;
 import org.eclipse.emf.cdo.common.model.CDOPackageInfo;
@@ -24,7 +24,7 @@
 import org.eclipse.emf.cdo.server.IQueryContext;
 import org.eclipse.emf.cdo.server.ISession;
 import org.eclipse.emf.cdo.server.ITransaction;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.WrappedException;
 import org.eclipse.net4j.util.collection.CloseableIterator;
@@ -95,7 +95,10 @@
     throw new UnsupportedOperationException();
   }
 
-  public CDOClassRef readObjectType(CDOID id)
+  /**
+   * @since 2.0
+   */
+  public CDOClassifierRef readObjectType(CDOID id)
   {
     InternalCDORevision storeRevision = (InternalCDORevision)getStore().getRevision(id);
     return storeRevision.getCDOClass().createClassRef();
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStoreChunkReader.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStoreChunkReader.java
index 4cac5f8..2fb3149 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStoreChunkReader.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStoreChunkReader.java
@@ -14,7 +14,7 @@
 import org.eclipse.emf.cdo.common.model.CDOFeature;
 import org.eclipse.emf.cdo.common.revision.CDORevision;
 import org.eclipse.emf.cdo.server.IStoreAccessor;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import java.util.List;
 
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/RevisionManager.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/RevisionManager.java
index 64acb23..b4cc8b5 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/RevisionManager.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/RevisionManager.java
@@ -24,7 +24,7 @@
 import org.eclipse.emf.cdo.server.IStoreChunkReader;
 import org.eclipse.emf.cdo.server.StoreThreadLocal;
 import org.eclipse.emf.cdo.server.IStoreChunkReader.Chunk;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.collection.MoveableList;
 
@@ -67,6 +67,9 @@
     return repository.getStore().getCDOIDObjectFactory();
   }
 
+  /**
+   * @since 2.0
+   */
   @Override
   protected InternalCDORevision verifyRevision(InternalCDORevision revision, int referenceChunk)
   {
@@ -195,6 +198,9 @@
     return accessor;
   }
 
+  /**
+   * @since 2.0
+   */
   @Override
   protected InternalCDORevision loadRevision(CDOID id, int referenceChunk)
   {
@@ -202,6 +208,9 @@
     return (InternalCDORevision)accessor.readRevision(id, referenceChunk);
   }
 
+  /**
+   * @since 2.0
+   */
   @Override
   protected InternalCDORevision loadRevisionByTime(CDOID id, int referenceChunk, long timeStamp)
   {
@@ -224,6 +233,9 @@
     throw new UnsupportedOperationException("No support for auditing mode");
   }
 
+  /**
+   * @since 2.0
+   */
   @Override
   protected InternalCDORevision loadRevisionByVersion(CDOID id, int referenceChunk, int version)
   {
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java
index 2b0d405..dd84024 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java
@@ -32,7 +32,7 @@
 import org.eclipse.emf.cdo.server.ITransaction;
 import org.eclipse.emf.cdo.server.IView;
 import org.eclipse.emf.cdo.server.SessionCreationException;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.channel.IChannel;
 import org.eclipse.net4j.util.ReflectUtil.ExcludeFromDump;
@@ -310,6 +310,8 @@
 
   /**
    * TODO I can't see how recursion is controlled/limited
+   * 
+   * @since 2.0
    */
   public void collectContainedRevisions(InternalCDORevision revision, int referenceChunk, Set<CDOID> revisions,
       List<CDORevision> additionalRevisions)
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/StoreAccessor.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/StoreAccessor.java
index ebc9348..ae24320 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/StoreAccessor.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/StoreAccessor.java
@@ -26,10 +26,10 @@
 import org.eclipse.emf.cdo.server.IStoreAccessor;
 import org.eclipse.emf.cdo.server.ITransaction;
 import org.eclipse.emf.cdo.server.StoreUtil;
-import org.eclipse.emf.cdo.spi.common.InternalCDOClass;
-import org.eclipse.emf.cdo.spi.common.InternalCDOFeature;
-import org.eclipse.emf.cdo.spi.common.InternalCDOPackage;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOClass;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOFeature;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackage;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.lifecycle.Lifecycle;
 import org.eclipse.net4j.util.om.monitor.OMMonitor;
@@ -118,6 +118,9 @@
     return context.getResourceID();
   }
 
+  /**
+   * @since 2.0
+   */
   public InternalCDORevision verifyRevision(CDORevision revision)
   {
     return (InternalCDORevision)revision;
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContextImpl.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContextImpl.java
index d1a3e07..4603d58 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContextImpl.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/TransactionCommitContextImpl.java
@@ -25,10 +25,10 @@
 import org.eclipse.emf.cdo.internal.server.bundle.OM;
 import org.eclipse.emf.cdo.server.IStoreAccessor;
 import org.eclipse.emf.cdo.server.StoreThreadLocal;
-import org.eclipse.emf.cdo.spi.common.InternalCDOPackage;
-import org.eclipse.emf.cdo.spi.common.InternalCDOPackageManager;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevisionDelta;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackage;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageManager;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta;
 
 import org.eclipse.net4j.util.ObjectUtil;
 import org.eclipse.net4j.util.StringUtil;
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/CommitTransactionIndication.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/CommitTransactionIndication.java
index 48e721e..6ab87f9 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/CommitTransactionIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/CommitTransactionIndication.java
@@ -40,7 +40,7 @@
 import org.eclipse.emf.cdo.internal.server.bundle.OM;
 import org.eclipse.emf.cdo.server.IStore;
 import org.eclipse.emf.cdo.server.IView;
-import org.eclipse.emf.cdo.spi.common.InternalCDOPackage;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackage;
 
 import org.eclipse.net4j.signal.IndicationWithMonitoring;
 import org.eclipse.net4j.util.WrappedException;
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/LoadChunkIndication.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/LoadChunkIndication.java
index 4d2817f..157503d 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/LoadChunkIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/LoadChunkIndication.java
@@ -18,7 +18,7 @@
 import org.eclipse.emf.cdo.common.model.CDOClass;
 import org.eclipse.emf.cdo.common.model.CDOFeature;
 import org.eclipse.emf.cdo.internal.server.bundle.OM;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.collection.MoveableList;
 import org.eclipse.net4j.util.om.trace.ContextTracer;
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/LoadRevisionByTimeIndication.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/LoadRevisionByTimeIndication.java
index 98ed615..62e6caf 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/LoadRevisionByTimeIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/LoadRevisionByTimeIndication.java
@@ -14,7 +14,7 @@
 import org.eclipse.emf.cdo.common.CDOProtocolConstants;
 import org.eclipse.emf.cdo.common.id.CDOID;
 import org.eclipse.emf.cdo.internal.server.bundle.OM;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.om.trace.ContextTracer;
 
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/LoadRevisionByVersionIndication.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/LoadRevisionByVersionIndication.java
index 02087f8..5f64566 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/LoadRevisionByVersionIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/LoadRevisionByVersionIndication.java
@@ -14,7 +14,7 @@
 import org.eclipse.emf.cdo.common.CDOProtocolConstants;
 import org.eclipse.emf.cdo.common.id.CDOID;
 import org.eclipse.emf.cdo.internal.server.bundle.OM;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.om.trace.ContextTracer;
 
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/LoadRevisionIndication.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/LoadRevisionIndication.java
index 6ed1606..926c31a 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/LoadRevisionIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/LoadRevisionIndication.java
@@ -21,7 +21,7 @@
 import org.eclipse.emf.cdo.common.revision.CDORevision;
 import org.eclipse.emf.cdo.internal.server.RevisionManager;
 import org.eclipse.emf.cdo.internal.server.bundle.OM;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.collection.MoveableList;
 import org.eclipse.net4j.util.om.trace.ContextTracer;
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/SyncRevisionIndication.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/SyncRevisionIndication.java
index 3214881..e14b939 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/SyncRevisionIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/SyncRevisionIndication.java
@@ -19,7 +19,7 @@
 import org.eclipse.emf.cdo.internal.server.bundle.OM;
 import org.eclipse.emf.cdo.server.IStoreAccessor;
 import org.eclipse.emf.cdo.server.StoreThreadLocal;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.collection.Pair;
 import org.eclipse.net4j.util.om.trace.ContextTracer;
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/VerifyRevisionIndication.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/VerifyRevisionIndication.java
index fa19e37..524fbf5 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/VerifyRevisionIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/VerifyRevisionIndication.java
@@ -16,7 +16,7 @@
 import org.eclipse.emf.cdo.common.id.CDOID;
 import org.eclipse.emf.cdo.internal.server.RevisionManager;
 import org.eclipse.emf.cdo.internal.server.bundle.OM;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.om.trace.ContextTracer;
 
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStoreAccessor.java
index 7d706f5..4349d95 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStoreAccessor.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IStoreAccessor.java
@@ -13,7 +13,7 @@
 import org.eclipse.emf.cdo.common.CDOProtocolView;
 import org.eclipse.emf.cdo.common.id.CDOID;
 import org.eclipse.emf.cdo.common.id.CDOIDTemp;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
 import org.eclipse.emf.cdo.common.model.CDOFeature;
 import org.eclipse.emf.cdo.common.model.CDOPackage;
 import org.eclipse.emf.cdo.common.model.CDOPackageInfo;
@@ -21,7 +21,7 @@
 import org.eclipse.emf.cdo.common.query.CDOQueryInfo;
 import org.eclipse.emf.cdo.common.revision.CDORevision;
 import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
-import org.eclipse.emf.cdo.spi.common.InternalCDOPackage;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackage;
 
 import org.eclipse.net4j.util.collection.CloseableIterator;
 import org.eclipse.net4j.util.om.monitor.OMMonitor;
@@ -102,7 +102,7 @@
    * 
    * @since 2.0
    */
-  public CDOClassRef readObjectType(CDOID id);
+  public CDOClassifierRef readObjectType(CDOID id);
 
   /**
    * Reads a current revision (i.e. one with revised == 0) from the back-end. Returns <code>null</code> if the id is
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionDeltaTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionDeltaTest.java
index 4be7efb..bd215ae 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionDeltaTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionDeltaTest.java
@@ -24,7 +24,7 @@
 import org.eclipse.emf.cdo.eresource.CDOResource;
 import org.eclipse.emf.cdo.internal.common.revision.delta.CDOListFeatureDeltaImpl;
 import org.eclipse.emf.cdo.internal.server.RevisionManager;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 import org.eclipse.emf.cdo.tests.model1.Category;
 import org.eclipse.emf.cdo.tests.model1.Company;
 import org.eclipse.emf.cdo.tests.model1.Customer;
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionHolderTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionHolderTest.java
index c60251b..140f3b6 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionHolderTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionHolderTest.java
@@ -25,8 +25,8 @@
 import org.eclipse.emf.cdo.internal.common.revision.cache.lru.LRURevisionHolder;
 import org.eclipse.emf.cdo.internal.common.revision.cache.lru.LRURevisionList;
 import org.eclipse.emf.cdo.internal.common.revision.cache.lru.RevisionHolder;
-import org.eclipse.emf.cdo.spi.common.InternalCDOList;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDOList;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import java.io.IOException;
 import java.util.LinkedList;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOAuditImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOAuditImpl.java
index e908625..9286e06 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOAuditImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOAuditImpl.java
@@ -14,7 +14,7 @@
 import org.eclipse.emf.cdo.common.id.CDOID;
 import org.eclipse.emf.cdo.common.revision.CDORevision;
 import org.eclipse.emf.cdo.common.revision.CDORevisionResolver;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.emf.internal.cdo.protocol.CDOClientProtocol;
 import org.eclipse.emf.internal.cdo.protocol.SetAuditRequest;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOCollectionLoadingPolicyImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOCollectionLoadingPolicyImpl.java
index 65ffc2f..26beb66 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOCollectionLoadingPolicyImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOCollectionLoadingPolicyImpl.java
@@ -14,7 +14,7 @@
 import org.eclipse.emf.cdo.CDORevisionManager;
 import org.eclipse.emf.cdo.common.model.CDOFeature;
 import org.eclipse.emf.cdo.common.revision.CDORevision;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.emf.internal.cdo.revision.CDOElementProxy;
 
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyWrapper.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyWrapper.java
index 7fb3b5f..895d110 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyWrapper.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyWrapper.java
@@ -20,7 +20,7 @@
 import org.eclipse.emf.cdo.common.revision.CDORevision;
 import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
 import org.eclipse.emf.cdo.eresource.CDOResource;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 import org.eclipse.emf.cdo.util.CDOPackageRegistry;
 
 import org.eclipse.emf.internal.cdo.bundle.OM;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOMetaWrapper.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOMetaWrapper.java
index 75c9a19..37ebcfc 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOMetaWrapper.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOMetaWrapper.java
@@ -15,7 +15,7 @@
 import org.eclipse.emf.cdo.common.model.CDOClass;
 import org.eclipse.emf.cdo.common.revision.CDORevision;
 import org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.emf.ecore.InternalEObject;
 
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java
index 5c5977a..a3aafbb 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java
@@ -20,7 +20,7 @@
 import org.eclipse.emf.cdo.common.revision.CDORevision;
 import org.eclipse.emf.cdo.eresource.CDOResource;
 import org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 import org.eclipse.emf.cdo.util.CDOUtil;
 
 import org.eclipse.emf.internal.cdo.bundle.OM;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectMerger.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectMerger.java
index a86b079..16c5edb 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectMerger.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectMerger.java
@@ -14,7 +14,7 @@
 import org.eclipse.emf.cdo.CDOState;
 import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
 import org.eclipse.emf.cdo.internal.common.revision.delta.CDORevisionMerger;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 /**
  * @author Simon McDuff
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDORevisionManagerImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDORevisionManagerImpl.java
index 91bd4c6..8d02e70 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDORevisionManagerImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDORevisionManagerImpl.java
@@ -20,7 +20,8 @@
 import org.eclipse.emf.cdo.common.revision.CDORevision;
 import org.eclipse.emf.cdo.common.util.TransportException;
 import org.eclipse.emf.cdo.internal.common.revision.CDORevisionResolverImpl;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOFeature;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.emf.internal.cdo.bundle.OM;
 import org.eclipse.emf.internal.cdo.protocol.CDOClientProtocol;
@@ -85,8 +86,8 @@
     try
     {
       CDOClientProtocol protocol = (CDOClientProtocol)session.getProtocol();
-      return new LoadChunkRequest(protocol, (InternalCDORevision)revision, feature, accessIndex, fetchIndex, fromIndex,
-          toIndex).send();
+      return new LoadChunkRequest(protocol, (InternalCDORevision)revision, (InternalCDOFeature)feature, accessIndex,
+          fetchIndex, fromIndex, toIndex).send();
     }
     catch (RuntimeException ex)
     {
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOSessionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOSessionImpl.java
index 696bf20..6ad5b5a 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOSessionImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOSessionImpl.java
@@ -38,7 +38,7 @@
 import org.eclipse.emf.cdo.common.revision.CDORevisionFactory;
 import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
 import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 import org.eclipse.emf.cdo.util.CDOPackageRegistry;
 import org.eclipse.emf.cdo.util.CDOUtil;
 
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOSessionPackageManagerImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOSessionPackageManagerImpl.java
index 481ef2a..a3e7693 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOSessionPackageManagerImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOSessionPackageManagerImpl.java
@@ -21,7 +21,7 @@
 import org.eclipse.emf.cdo.common.model.CDOPackageInfo;
 import org.eclipse.emf.cdo.common.util.TransportException;
 import org.eclipse.emf.cdo.internal.common.model.CDOPackageManagerImpl;
-import org.eclipse.emf.cdo.spi.common.InternalCDOPackage;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackage;
 
 import org.eclipse.emf.internal.cdo.bundle.OM;
 import org.eclipse.emf.internal.cdo.protocol.CDOClientProtocol;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java
index 2f0387a..b867f71 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java
@@ -21,7 +21,7 @@
 import org.eclipse.emf.cdo.common.revision.CDORevisionFactory;
 import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDelta;
 import org.eclipse.emf.cdo.common.util.TransportException;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 import org.eclipse.emf.cdo.util.InvalidObjectException;
 
 import org.eclipse.emf.internal.cdo.bundle.OM;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java
index 0a75811..98afef0 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java
@@ -30,7 +30,7 @@
 import org.eclipse.emf.cdo.internal.common.revision.delta.CDORemoveFeatureDeltaImpl;
 import org.eclipse.emf.cdo.internal.common.revision.delta.CDOSetFeatureDeltaImpl;
 import org.eclipse.emf.cdo.internal.common.revision.delta.CDOUnsetFeatureDeltaImpl;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.emf.internal.cdo.bundle.OM;
 import org.eclipse.emf.internal.cdo.revision.CDOElementProxy;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOTransactionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOTransactionImpl.java
index 8980295..72eceab 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOTransactionImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOTransactionImpl.java
@@ -38,8 +38,8 @@
 import org.eclipse.emf.cdo.eresource.EresourceFactory;
 import org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl;
 import org.eclipse.emf.cdo.eresource.impl.CDOResourceNodeImpl;
-import org.eclipse.emf.cdo.spi.common.InternalCDOPackage;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevisionDelta;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackage;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta;
 import org.eclipse.emf.cdo.util.CDOURIUtil;
 
 import org.eclipse.emf.internal.cdo.bundle.OM;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOViewImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOViewImpl.java
index 5a5711f..d7b4102 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOViewImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOViewImpl.java
@@ -43,7 +43,7 @@
 import org.eclipse.emf.cdo.eresource.CDOResourceFolder;
 import org.eclipse.emf.cdo.eresource.CDOResourceNode;
 import org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 import org.eclipse.emf.cdo.util.CDOURIUtil;
 import org.eclipse.emf.cdo.util.CDOUtil;
 import org.eclipse.emf.cdo.util.DanglingReferenceException;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/InternalCDOObject.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/InternalCDOObject.java
index 3a873be..f8f8755 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/InternalCDOObject.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/InternalCDOObject.java
@@ -15,7 +15,7 @@
 import org.eclipse.emf.cdo.CDOView;
 import org.eclipse.emf.cdo.common.id.CDOID;
 import org.eclipse.emf.cdo.common.revision.CDORevision;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/InternalCDOView.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/InternalCDOView.java
index 23f22bf..57e357d 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/InternalCDOView.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/InternalCDOView.java
@@ -18,7 +18,7 @@
 import org.eclipse.emf.cdo.common.id.CDOIDProvider;
 import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
 import org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.net4j.util.concurrent.RWLockManager;
 import org.eclipse.net4j.util.lifecycle.ILifecycle;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CommitTransactionRequest.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CommitTransactionRequest.java
index 825c0cd..c68f919 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CommitTransactionRequest.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CommitTransactionRequest.java
@@ -35,7 +35,7 @@
 import org.eclipse.emf.cdo.eresource.CDOResource;
 import org.eclipse.emf.cdo.internal.common.CDODataInputImpl;
 import org.eclipse.emf.cdo.internal.common.CDODataOutputImpl;
-import org.eclipse.emf.cdo.spi.common.InternalCDOPackage;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackage;
 
 import org.eclipse.emf.internal.cdo.InternalCDOCommitContext;
 import org.eclipse.emf.internal.cdo.InternalCDOSession;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/LoadChunkRequest.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/LoadChunkRequest.java
index a267a24..7f36f65 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/LoadChunkRequest.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/LoadChunkRequest.java
@@ -14,8 +14,8 @@
 import org.eclipse.emf.cdo.common.CDODataOutput;
 import org.eclipse.emf.cdo.common.CDOProtocolConstants;
 import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.model.CDOFeature;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOFeature;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.emf.internal.cdo.bundle.OM;
 
@@ -33,7 +33,7 @@
 
   private InternalCDORevision revision;
 
-  private CDOFeature feature;
+  private InternalCDOFeature feature;
 
   private int accessIndex;
 
@@ -43,7 +43,7 @@
 
   private int fetchIndex;
 
-  public LoadChunkRequest(CDOClientProtocol protocol, InternalCDORevision revision, CDOFeature feature,
+  public LoadChunkRequest(CDOClientProtocol protocol, InternalCDORevision revision, InternalCDOFeature feature,
       int accessIndex, int fetchIndex, int fromIndex, int toIndex)
   {
     super(protocol, CDOProtocolConstants.SIGNAL_LOAD_CHUNK);
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/LoadRevisionRequest.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/LoadRevisionRequest.java
index 722b882..7c68b06 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/LoadRevisionRequest.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/LoadRevisionRequest.java
@@ -16,7 +16,7 @@
 import org.eclipse.emf.cdo.common.CDOProtocolConstants;
 import org.eclipse.emf.cdo.common.analyzer.CDOFetchRule;
 import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.emf.internal.cdo.CDORevisionManagerImpl;
 import org.eclipse.emf.internal.cdo.bundle.OM;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/SyncRevisionRequest.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/SyncRevisionRequest.java
index 2426d53..9778196 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/SyncRevisionRequest.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/SyncRevisionRequest.java
@@ -19,7 +19,7 @@
 import org.eclipse.emf.cdo.common.id.CDOIDAndVersion;
 import org.eclipse.emf.cdo.common.id.CDOIDUtil;
 import org.eclipse.emf.cdo.common.revision.CDORevision;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.emf.internal.cdo.CDORevisionManagerImpl;
 import org.eclipse.emf.internal.cdo.CDOTimeStampContextImpl;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/VerifyRevisionRequest.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/VerifyRevisionRequest.java
index 0790af1..b2314e0 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/VerifyRevisionRequest.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/VerifyRevisionRequest.java
@@ -15,7 +15,7 @@
 import org.eclipse.emf.cdo.common.CDOProtocolConstants;
 import org.eclipse.emf.cdo.common.id.CDOID;
 import org.eclipse.emf.cdo.common.revision.CDORevision;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.emf.internal.cdo.bundle.OM;
 
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/revision/CDOListWithElementProxiesImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/revision/CDOListWithElementProxiesImpl.java
index 86c1458..36867fe 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/revision/CDOListWithElementProxiesImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/revision/CDOListWithElementProxiesImpl.java
@@ -14,8 +14,8 @@
 import org.eclipse.emf.cdo.common.revision.CDOList;
 import org.eclipse.emf.cdo.common.revision.CDOListFactory;
 import org.eclipse.emf.cdo.internal.common.revision.CDOListImpl;
-import org.eclipse.emf.cdo.spi.common.InternalCDOList;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDOList;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 /**
  * @author Simon McDuff
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/CDOPackageRegistryImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/CDOPackageRegistryImpl.java
index 1b63672..6047687 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/CDOPackageRegistryImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/CDOPackageRegistryImpl.java
@@ -20,7 +20,7 @@
 import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
 import org.eclipse.emf.cdo.common.model.CDOPackage;
 import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDelta;
-import org.eclipse.emf.cdo.spi.common.InternalCDOPackage;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackage;
 import org.eclipse.emf.cdo.util.CDOPackageRegistry;
 import org.eclipse.emf.cdo.util.CDOPackageType;
 import org.eclipse.emf.cdo.util.CDOPackageTypeRegistry;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/ModelUtil.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/ModelUtil.java
index 706c886..6dcc99a 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/ModelUtil.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/ModelUtil.java
@@ -14,7 +14,7 @@
 import org.eclipse.emf.cdo.common.id.CDOIDMetaRange;
 import org.eclipse.emf.cdo.common.model.CDOClass;
 import org.eclipse.emf.cdo.common.model.CDOClassProxy;
-import org.eclipse.emf.cdo.common.model.CDOClassRef;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
 import org.eclipse.emf.cdo.common.model.CDOFeature;
 import org.eclipse.emf.cdo.common.model.CDOModelUtil;
 import org.eclipse.emf.cdo.common.model.CDOPackage;
@@ -27,9 +27,9 @@
 import org.eclipse.emf.cdo.common.model.resource.CDOResourcePackage;
 import org.eclipse.emf.cdo.common.util.CDOException;
 import org.eclipse.emf.cdo.eresource.EresourcePackage;
-import org.eclipse.emf.cdo.spi.common.InternalCDOClass;
-import org.eclipse.emf.cdo.spi.common.InternalCDOFeature;
-import org.eclipse.emf.cdo.spi.common.InternalCDOPackage;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOClass;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOFeature;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackage;
 import org.eclipse.emf.cdo.util.CDOPackageRegistry;
 import org.eclipse.emf.cdo.util.EMFUtil;
 
@@ -135,7 +135,7 @@
     for (EClass eClass : EMFUtil.getPersistentClasses(ePackage))
     {
       CDOClass cdoClass = createCDOClass(eClass, cdoPackage);
-      ((InternalCDOPackage)cdoPackage).addClass(cdoClass);
+      ((InternalCDOPackage)cdoPackage).addClassifier(cdoClass);
     }
   }
 
@@ -222,7 +222,7 @@
 
     for (EClass superType : eClass.getESuperTypes())
     {
-      CDOClassRef classRef = createClassRef(superType);
+      CDOClassifierRef classRef = createClassRef(superType);
       cdoClass.addSuperType(classRef);
     }
 
@@ -251,7 +251,7 @@
     CDOPackageManager packageManager = containingClass.getPackageManager();
     int featureID = eFeature.getFeatureID();
     String name = eFeature.getName();
-    CDOClassRef classRef = createClassRef(eFeature.getEType());
+    CDOClassifierRef classRef = createClassRef(eFeature.getEType());
     boolean many = eFeature.isMany();
     boolean containment = EMFUtil.isContainment(eFeature);
     CDOFeature cdoFeature = CDOModelUtil.createReference(containingClass, featureID, name, new CDOClassProxy(classRef,
@@ -380,7 +380,7 @@
     return result;
   }
 
-  public static CDOClassRef createClassRef(EClassifier classifier)
+  public static CDOClassifierRef createClassRef(EClassifier classifier)
   {
     if (classifier instanceof EClass)
     {
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/RevisionAdjuster.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/RevisionAdjuster.java
index 09d7b10..224e412 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/RevisionAdjuster.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/RevisionAdjuster.java
@@ -22,8 +22,8 @@
 import org.eclipse.emf.cdo.common.revision.delta.CDOSetFeatureDelta;
 import org.eclipse.emf.cdo.internal.common.revision.delta.CDOFeatureDeltaVisitorImpl;
 import org.eclipse.emf.cdo.internal.common.revision.delta.CDOListFeatureDeltaImpl;
-import org.eclipse.emf.cdo.spi.common.InternalCDOList;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDOList;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
 
 import org.eclipse.emf.internal.cdo.revision.CDOElementProxy;
 
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/ObjectConflictResolver.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/ObjectConflictResolver.java
index 123505f..e418671 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/ObjectConflictResolver.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/ObjectConflictResolver.java
@@ -24,8 +24,8 @@
 import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
 import org.eclipse.emf.cdo.common.util.CDOException;
 import org.eclipse.emf.cdo.internal.common.revision.delta.CDORevisionMerger;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
-import org.eclipse.emf.cdo.spi.common.InternalCDORevisionDelta;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta;
 import org.eclipse.emf.cdo.util.CDODefaultTransactionHandler;
 
 import org.eclipse.emf.internal.cdo.CDOObjectMerger;