293526 -  [JPA 2.0] Orphan-Removal Orm context model need to be refactored
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/AbstractJpaFactory.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/AbstractJpaFactory.java
index 079946d..4828830 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/AbstractJpaFactory.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/AbstractJpaFactory.java
@@ -124,6 +124,7 @@
 import org.eclipse.jpt.core.internal.jpa2.context.java.NullJavaCacheable2_0;
 import org.eclipse.jpt.core.internal.jpa2.context.java.NullJavaDerivedId2_0;
 import org.eclipse.jpt.core.internal.jpa2.context.java.NullJavaMapsId2_0;
+import org.eclipse.jpt.core.internal.jpa2.context.java.NullJavaOrphanRemoval2_0;
 import org.eclipse.jpt.core.jpa2.JpaFactory2_0;
 import org.eclipse.jpt.core.jpa2.JpaProject2_0;
 import org.eclipse.jpt.core.jpa2.MetamodelSynchronizer;
@@ -134,6 +135,8 @@
 import org.eclipse.jpt.core.jpa2.context.java.JavaElementCollectionMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaEmbeddedMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaMapsId2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaSingleRelationshipMapping2_0;
 import org.eclipse.jpt.core.resource.java.AssociationOverrideAnnotation;
 import org.eclipse.jpt.core.resource.java.JavaResourcePersistentAttribute;
@@ -381,4 +384,8 @@
 	public JavaCacheable2_0 buildJavaCacheable(JavaCacheableHolder2_0 parent) {
 		return new NullJavaCacheable2_0(parent);
 	}
+	
+	public JavaOrphanRemovable2_0 buildJavaOrphanRemoval(JavaOrphanRemovalHolder2_0 parent) {
+		return new NullJavaOrphanRemoval2_0(parent);
+	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/AbstractJavaOneToManyMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/AbstractJavaOneToManyMapping.java
index a983552..0a6383e 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/AbstractJavaOneToManyMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/AbstractJavaOneToManyMapping.java
@@ -12,7 +12,10 @@
 import org.eclipse.jpt.core.MappingKeys;
 import org.eclipse.jpt.core.context.java.JavaOneToManyRelationshipReference;
 import org.eclipse.jpt.core.context.java.JavaPersistentAttribute;
+import org.eclipse.jpt.core.jpa2.JpaFactory2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaOneToManyMapping2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.resource.java.JPA;
 import org.eclipse.jpt.core.resource.java.OneToManyAnnotation;
 import org.eclipse.jpt.utility.internal.ArrayTools;
@@ -20,11 +23,27 @@
 
 public abstract class AbstractJavaOneToManyMapping<T extends OneToManyAnnotation>
 	extends AbstractJavaMultiRelationshipMapping<T>
-	implements JavaOneToManyMapping2_0
+	implements JavaOneToManyMapping2_0, JavaOrphanRemovalHolder2_0
 {
+	protected final JavaOrphanRemovable2_0 orphanRemoval;
 	
 	protected AbstractJavaOneToManyMapping(JavaPersistentAttribute parent) {
 		super(parent);
+		this.orphanRemoval = ((JpaFactory2_0) this.getJpaFactory()).buildJavaOrphanRemoval(this);
+	}
+
+	// ********** initialize/update **********
+	
+	@Override
+	protected void initialize() {
+		super.initialize();
+		this.orphanRemoval.initialize(this.getResourcePersistentAttribute());
+	}
+	
+	@Override
+	protected void update() {
+		super.update();
+		this.orphanRemoval.update(this.getResourcePersistentAttribute());
 	}
 	
 	
@@ -39,36 +58,26 @@
 			JPA.JOIN_COLUMN,
 			JPA.JOIN_COLUMNS);
 	}
+	
+	public String getKey() {
+		return MappingKeys.ONE_TO_MANY_ATTRIBUTE_MAPPING_KEY;
+	}
+
+	// ********** JavaOneToManyMapping implementation **********
 
 	@Override
 	public T getMappingAnnotation() {
 		return super.getMappingAnnotation();
 	}
 	
-	public String getKey() {
-		return MappingKeys.ONE_TO_MANY_ATTRIBUTE_MAPPING_KEY;
-	}
-	
 	@Override
 	public JavaOneToManyRelationshipReference getRelationshipReference() {
 		return (JavaOneToManyRelationshipReference) super.getRelationshipReference();
 	}
-	
-	// ********** JPA 2.0 behavior **********
 
-	public boolean isOrphanRemoval() {
-		throw new UnsupportedOperationException("operation not supported in JPA 1.0"); //$NON-NLS-1$
-	}
+	// ********** JavaOrphanRemovalHolder2_0 implementation **********
 
-	public Boolean getSpecifiedOrphanRemoval() {
-		throw new UnsupportedOperationException("operation not supported in JPA 1.0"); //$NON-NLS-1$
-	}
-
-	public void setSpecifiedOrphanRemoval(Boolean newOrphanRemoval) {
-		throw new UnsupportedOperationException("operation not supported in JPA 1.0"); //$NON-NLS-1$
-	}
-
-	public boolean isDefaultOrphanRemoval() {
-		throw new UnsupportedOperationException("operation not supported in JPA 1.0"); //$NON-NLS-1$
+	public JavaOrphanRemovable2_0 getOrphanRemoval() {
+		return this.orphanRemoval;
 	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/AbstractJavaOneToOneMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/AbstractJavaOneToOneMapping.java
index a43aa9d..c953dbf 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/AbstractJavaOneToOneMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/AbstractJavaOneToOneMapping.java
@@ -13,7 +13,10 @@
 import org.eclipse.jpt.core.context.java.JavaOneToOneRelationshipReference;
 import org.eclipse.jpt.core.context.java.JavaPersistentAttribute;
 import org.eclipse.jpt.core.context.java.JavaRelationshipReference;
+import org.eclipse.jpt.core.jpa2.JpaFactory2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaOneToOneMapping2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.resource.java.JPA;
 import org.eclipse.jpt.core.resource.java.OneToOneAnnotation;
 import org.eclipse.jpt.utility.internal.ArrayTools;
@@ -21,11 +24,28 @@
 
 public abstract class AbstractJavaOneToOneMapping
 	extends AbstractJavaSingleRelationshipMapping<OneToOneAnnotation>
-	implements JavaOneToOneMapping2_0
+	implements JavaOneToOneMapping2_0, JavaOrphanRemovalHolder2_0
 {
+	protected final JavaOrphanRemovable2_0 orphanRemoval;
+	
 	// ********** constructor **********
 	protected AbstractJavaOneToOneMapping(JavaPersistentAttribute parent) {
 		super(parent);
+		this.orphanRemoval = ((JpaFactory2_0) this.getJpaFactory()).buildJavaOrphanRemoval(this);
+	}
+
+	// ********** initialize/update **********
+	
+	@Override
+	protected void initialize() {
+		super.initialize();
+		this.orphanRemoval.initialize(this.getResourcePersistentAttribute());
+	}
+	
+	@Override
+	protected void update() {
+		super.update();
+		this.orphanRemoval.update(this.getResourcePersistentAttribute());
 	}
 
 	@Override
@@ -38,11 +58,6 @@
 	}
 	
 	@Override
-	public OneToOneAnnotation getMappingAnnotation() {
-		return super.getMappingAnnotation();
-	}
-	
-	@Override
 	protected String[] buildSupportingAnnotationNames() {
 		return ArrayTools.addAll(
 			super.buildSupportingAnnotationNames(),
@@ -55,11 +70,6 @@
 	}
 	
 	@Override
-	public JavaOneToOneRelationshipReference getRelationshipReference() {
-		return (JavaOneToOneRelationshipReference) super.getRelationshipReference();
-	}
-	
-	@Override
 	protected Boolean getResourceOptional() {
 		return this.mappingAnnotation.getOptional();
 	}
@@ -68,22 +78,22 @@
 	protected void setResourceOptional(Boolean newOptional) {
 		this.mappingAnnotation.setOptional(newOptional);
 	}
+
+	// ********** JavaOneToOneMapping implementation **********
 	
-	// ********** JPA 2.0 behavior **********
-
-	public boolean isOrphanRemoval() {
-		throw new UnsupportedOperationException("operation not supported in JPA 1.0"); //$NON-NLS-1$
+	@Override
+	public OneToOneAnnotation getMappingAnnotation() {
+		return super.getMappingAnnotation();
+	}
+	
+	@Override
+	public JavaOneToOneRelationshipReference getRelationshipReference() {
+		return (JavaOneToOneRelationshipReference) super.getRelationshipReference();
 	}
 
-	public Boolean getSpecifiedOrphanRemoval() {
-		throw new UnsupportedOperationException("operation not supported in JPA 1.0"); //$NON-NLS-1$
-	}
+	// ********** JavaOrphanRemovalHolder2_0 implementation **********
 
-	public void setSpecifiedOrphanRemoval(Boolean newOrphanRemoval) {
-		throw new UnsupportedOperationException("operation not supported in JPA 1.0"); //$NON-NLS-1$
-	}
-
-	public boolean isDefaultOrphanRemoval() {
-		throw new UnsupportedOperationException("operation not supported in JPA 1.0"); //$NON-NLS-1$
+	public JavaOrphanRemovable2_0 getOrphanRemoval() {
+		return this.orphanRemoval;
 	}
 }
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmOneToManyMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmOneToManyMapping.java
index c67fcbd..6db06bc 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmOneToManyMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmOneToManyMapping.java
@@ -14,16 +14,31 @@
 import org.eclipse.jpt.core.context.orm.OrmOneToManyRelationshipReference;
 import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmOneToManyMapping2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovalHolder2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmXml2_0ContextNodeFactory;
 import org.eclipse.jpt.core.resource.orm.Attributes;
 import org.eclipse.jpt.core.resource.orm.XmlOneToMany;
 
 
 public abstract class AbstractOrmOneToManyMapping<T extends XmlOneToMany>
 	extends AbstractOrmMultiRelationshipMapping<T>
-	implements OrmOneToManyMapping2_0
+	implements OrmOneToManyMapping2_0, OrmOrphanRemovalHolder2_0
 {
+	protected final OrmOrphanRemovable2_0 orphanRemoval;
+
+	// ********** constructor **********
 	protected AbstractOrmOneToManyMapping(OrmPersistentAttribute parent, T resourceMapping) {
 		super(parent, resourceMapping);
+		this.orphanRemoval = ((OrmXml2_0ContextNodeFactory) getXmlContextNodeFactory()).buildOrmOrphanRemoval(this, resourceMapping);
+	}
+
+	// ********** update **********
+	
+	@Override
+	public void update() {
+		super.update();
+		this.getOrphanRemoval().update();
 	}
 
 	public int getXmlSequence() {
@@ -50,22 +65,10 @@
 	public OrmOneToManyRelationshipReference getRelationshipReference() {
 		return (OrmOneToManyRelationshipReference) super.getRelationshipReference();
 	}
-	
-	// ********** JPA 2.0 behavior *********s*
 
-	public boolean isOrphanRemoval() {
-		throw new UnsupportedOperationException("operation not supported in JPA 1.0"); //$NON-NLS-1$
-	}
+	// ********** OrmOrphanRemovalHolder2_0 implementation **********
 
-	public Boolean getSpecifiedOrphanRemoval() {
-		throw new UnsupportedOperationException("operation not supported in JPA 1.0"); //$NON-NLS-1$
-	}
-
-	public void setSpecifiedOrphanRemoval(Boolean newOrphanRemoval) {
-		throw new UnsupportedOperationException("operation not supported in JPA 1.0"); //$NON-NLS-1$
-	}
-
-	public boolean isDefaultOrphanRemoval() {
-		throw new UnsupportedOperationException("operation not supported in JPA 1.0"); //$NON-NLS-1$
+	public OrmOrphanRemovable2_0 getOrphanRemoval() {
+		return this.orphanRemoval;
 	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmOneToOneMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmOneToOneMapping.java
index e0a5e20..61456cc 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmOneToOneMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmOneToOneMapping.java
@@ -15,18 +15,32 @@
 import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute;
 import org.eclipse.jpt.core.context.orm.OrmRelationshipReference;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmOneToOneMapping2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovalHolder2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmXml2_0ContextNodeFactory;
 import org.eclipse.jpt.core.resource.orm.Attributes;
 import org.eclipse.jpt.core.resource.orm.XmlOneToOne;
 
 
 public abstract class AbstractOrmOneToOneMapping<T extends XmlOneToOne>
 	extends AbstractOrmSingleRelationshipMapping<T>
-	implements OrmOneToOneMapping2_0
+	implements OrmOneToOneMapping2_0, OrmOrphanRemovalHolder2_0
 {
+	protected final OrmOrphanRemovable2_0 orphanRemoval;
+	
+	// ********** constructor **********
 	protected AbstractOrmOneToOneMapping(OrmPersistentAttribute parent, T resourceMapping) {
 		super(parent, resourceMapping);
+		this.orphanRemoval = ((OrmXml2_0ContextNodeFactory) getXmlContextNodeFactory()).buildOrmOrphanRemoval(this, resourceMapping);
 	}
+
+	// ********** update **********
 	
+	@Override
+	public void update() {
+		super.update();
+		this.getOrphanRemoval().update();
+	}
 	
 	@Override
 	protected OrmRelationshipReference buildRelationshipReference() {
@@ -57,22 +71,10 @@
 	public OrmOneToOneRelationshipReference getRelationshipReference() {
 		return (OrmOneToOneRelationshipReference) super.getRelationshipReference();
 	}
-	
-	// ********** JPA 2.0 behavior **********
 
-	public boolean isOrphanRemoval() {
-		throw new UnsupportedOperationException("operation not supported in JPA 1.0"); //$NON-NLS-1$
-	}
+	// ********** OrmOrphanRemovalHolder2_0 implementation **********
 
-	public Boolean getSpecifiedOrphanRemoval() {
-		throw new UnsupportedOperationException("operation not supported in JPA 1.0"); //$NON-NLS-1$
-	}
-
-	public void setSpecifiedOrphanRemoval(Boolean newOrphanRemoval) {
-		throw new UnsupportedOperationException("operation not supported in JPA 1.0"); //$NON-NLS-1$
-	}
-
-	public boolean isDefaultOrphanRemoval() {
-		throw new UnsupportedOperationException("operation not supported in JPA 1.0"); //$NON-NLS-1$
+	public OrmOrphanRemovable2_0 getOrphanRemoval() {
+		return this.orphanRemoval;
 	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmXmlContextNodeFactory.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmXmlContextNodeFactory.java
index 588ff6f..37d9e3d 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmXmlContextNodeFactory.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmXmlContextNodeFactory.java
@@ -124,6 +124,7 @@
 import org.eclipse.jpt.core.internal.jpa2.context.orm.NullOrmCacheable2_0;
 import org.eclipse.jpt.core.internal.jpa2.context.orm.NullOrmDerivedId2_0;
 import org.eclipse.jpt.core.internal.jpa2.context.orm.NullOrmMapsId2_0;
+import org.eclipse.jpt.core.internal.jpa2.context.orm.NullOrmOrphanRemoval2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaElementCollectionMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmCacheable2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmCacheableHolder2_0;
@@ -131,6 +132,8 @@
 import org.eclipse.jpt.core.jpa2.context.orm.OrmElementCollectionMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmEmbeddedMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmMapsId2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmSingleRelationshipMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmXml2_0ContextNodeFactory;
 import org.eclipse.jpt.core.resource.orm.AbstractXmlRelationshipMapping;
@@ -173,6 +176,7 @@
 import org.eclipse.jpt.core.resource.orm.v2_0.XmlCacheable2_0;
 import org.eclipse.jpt.core.resource.orm.v2_0.XmlDerivedId_2_0;
 import org.eclipse.jpt.core.resource.orm.v2_0.XmlMapsId_2_0;
+import org.eclipse.jpt.core.resource.orm.v2_0.XmlOrphanRemovable2_0;
 import org.eclipse.jpt.core.resource.xml.JpaXmlResource;
 
 public abstract class AbstractOrmXmlContextNodeFactory implements OrmXml2_0ContextNodeFactory
@@ -391,6 +395,10 @@
 		return new NullOrmCacheable2_0(parent);
 	}
 	
+	public OrmOrphanRemovable2_0 buildOrmOrphanRemoval(OrmOrphanRemovalHolder2_0 parent, XmlOrphanRemovable2_0 resource) {
+		return new NullOrmOrphanRemoval2_0(parent);
+	}
+	
 	// ********** ORM Virtual Resource Model **********
 
 	public XmlAssociationOverride buildVirtualXmlAssociationOverride(String name, OrmTypeMapping parent, JoiningStrategy joiningStrategy) {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericOrmOneToOneMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericOrmOneToOneMapping.java
index 3c0a879..1b7a9a2 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericOrmOneToOneMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericOrmOneToOneMapping.java
@@ -14,11 +14,13 @@
 import org.eclipse.jpt.core.resource.orm.XmlOneToOne;
 
 
-public class GenericOrmOneToOneMapping extends AbstractOrmOneToOneMapping<XmlOneToOne>
+public class GenericOrmOneToOneMapping 
+	extends AbstractOrmOneToOneMapping<XmlOneToOne>
 {
-	
+
+	// ********** constructor **********
 	public GenericOrmOneToOneMapping(OrmPersistentAttribute parent, XmlOneToOne resourceMapping) {
 		super(parent, resourceMapping);
 	}
-	
-}
+
+}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/GenericJpaFactory2_0.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/GenericJpaFactory2_0.java
index f215f54..dd1f368 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/GenericJpaFactory2_0.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/GenericJpaFactory2_0.java
@@ -32,6 +32,7 @@
 import org.eclipse.jpt.core.internal.jpa2.context.java.GenericJavaMapsId2_0;
 import org.eclipse.jpt.core.internal.jpa2.context.java.GenericJavaOneToManyMapping2_0;
 import org.eclipse.jpt.core.internal.jpa2.context.java.GenericJavaOneToOneMapping2_0;
+import org.eclipse.jpt.core.internal.jpa2.context.java.GenericJavaOrphanRemoval2_0;
 import org.eclipse.jpt.core.internal.jpa2.context.java.GenericJavaPersistentAttribute2_0;
 import org.eclipse.jpt.core.internal.jpa2.context.java.GenericJavaPersistentType2_0;
 import org.eclipse.jpt.core.internal.jpa2.context.java.GenericJavaSequenceGenerator2_0;
@@ -45,6 +46,8 @@
 import org.eclipse.jpt.core.jpa2.context.java.JavaElementCollectionMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaEmbeddedMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaMapsId2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaSingleRelationshipMapping2_0;
 import org.eclipse.jpt.core.resource.java.AssociationOverrideAnnotation;
 import org.eclipse.jpt.core.resource.java.JavaResourcePersistentAttribute;
@@ -144,4 +147,9 @@
 	public JavaCacheable2_0 buildJavaCacheable(JavaCacheableHolder2_0 parent) {
 		return new GenericJavaCacheable2_0(parent);
 	}
+	
+	@Override
+	public JavaOrphanRemovable2_0 buildJavaOrphanRemoval(JavaOrphanRemovalHolder2_0 parent) {
+		return new GenericJavaOrphanRemoval2_0(parent);
+	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/java/GenericJavaOneToManyMapping2_0.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/java/GenericJavaOneToManyMapping2_0.java
index e3bc7e8..6d9db77 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/java/GenericJavaOneToManyMapping2_0.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/java/GenericJavaOneToManyMapping2_0.java
@@ -11,7 +11,6 @@
 
 import org.eclipse.jpt.core.context.java.JavaPersistentAttribute;
 import org.eclipse.jpt.core.internal.jpa1.context.java.GenericJavaOneToManyMapping;
-import org.eclipse.jpt.core.jpa2.context.OneToManyMapping2_0;
 import org.eclipse.jpt.core.jpa2.resource.java.JPA2_0;
 import org.eclipse.jpt.core.jpa2.resource.java.OneToMany2_0Annotation;
 import org.eclipse.jpt.utility.internal.ArrayTools;
@@ -22,65 +21,17 @@
 public class GenericJavaOneToManyMapping2_0
 	extends GenericJavaOneToManyMapping<OneToMany2_0Annotation>
 {
-	protected Boolean specifiedOrphanRemoval = false;
 
 	// ********** constructor **********
 	public GenericJavaOneToManyMapping2_0(JavaPersistentAttribute parent) {
 		super(parent);
 	}
-	
-	@Override
-	protected void initialize() {
-		super.initialize();
-		this.specifiedOrphanRemoval = this.getResourceOrphanRemoval();
-	}
-	
-	@Override
-	protected void update() {
-		super.update();
-		this.setSpecifiedOrphanRemoval_(this.getResourceOrphanRemoval());
-	}
-	
+
 	@Override
 	protected String[] buildSupportingAnnotationNames() {
 		return ArrayTools.addAll(
 			super.buildSupportingAnnotationNames(),
 			JPA2_0.ONE_TO_MANY__ORPHAN_REMOVAL);
 	}
-	
-	// ********** OrphanRemovable2_0 implementation **********
-
-	@Override
-	public boolean isOrphanRemoval() {
-		return (this.specifiedOrphanRemoval != null) ? this.specifiedOrphanRemoval.booleanValue() : this.isDefaultOrphanRemoval();
-	}
-
-	@Override
-	public Boolean getSpecifiedOrphanRemoval() {
-		return this.specifiedOrphanRemoval;
-	}
-
-	@Override
-	public void setSpecifiedOrphanRemoval(Boolean newOrphanRemoval) {
-		Boolean old = this.specifiedOrphanRemoval;
-		this.specifiedOrphanRemoval = newOrphanRemoval;
-		((OneToMany2_0Annotation) this.mappingAnnotation).setOrphanRemoval(newOrphanRemoval);
-		this.firePropertyChanged(OneToManyMapping2_0.SPECIFIED_ORPHAN_REMOVAL_PROPERTY, old, newOrphanRemoval);
-	}
-
-	@Override
-	public boolean isDefaultOrphanRemoval() {
-		return OneToManyMapping2_0.DEFAULT_ORPHAN_REMOVAL;
-	}
-	
-	protected Boolean getResourceOrphanRemoval() {
-		return ((OneToMany2_0Annotation) this.mappingAnnotation).getOrphanRemoval();
-	}
-
-	protected void setSpecifiedOrphanRemoval_(Boolean newOrphanRemoval) {
-		Boolean old = this.specifiedOrphanRemoval;
-		this.specifiedOrphanRemoval = newOrphanRemoval;
-		firePropertyChanged(OneToManyMapping2_0.SPECIFIED_ORPHAN_REMOVAL_PROPERTY, old, newOrphanRemoval);
-	}
 
 }
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/java/GenericJavaOneToOneMapping2_0.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/java/GenericJavaOneToOneMapping2_0.java
index e7345e1..7112fbb 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/java/GenericJavaOneToOneMapping2_0.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/java/GenericJavaOneToOneMapping2_0.java
@@ -11,9 +11,7 @@
 
 import org.eclipse.jpt.core.context.java.JavaPersistentAttribute;
 import org.eclipse.jpt.core.internal.jpa1.context.java.GenericJavaOneToOneMapping;
-import org.eclipse.jpt.core.jpa2.context.OneToOneMapping2_0;
 import org.eclipse.jpt.core.jpa2.resource.java.JPA2_0;
-import org.eclipse.jpt.core.jpa2.resource.java.OneToOne2_0Annotation;
 import org.eclipse.jpt.utility.internal.ArrayTools;
 
 /**
@@ -22,7 +20,6 @@
 public class GenericJavaOneToOneMapping2_0
 	extends GenericJavaOneToOneMapping
 {
-	private Boolean specifiedOrphanRemoval = false;
 	
 	// ********** constructor **********
 	public GenericJavaOneToOneMapping2_0(JavaPersistentAttribute parent) {
@@ -30,57 +27,10 @@
 	}
 	
 	@Override
-	protected void initialize() {
-		super.initialize();
-		this.specifiedOrphanRemoval = this.getResourceOrphanRemoval();
-	}
-	
-	@Override
-	protected void update() {
-		super.update();
-		this.setSpecifiedOrphanRemoval_(this.getResourceOrphanRemoval());
-	}
-	
-	@Override
 	protected String[] buildSupportingAnnotationNames() {
 		return ArrayTools.addAll(
 			super.buildSupportingAnnotationNames(),
 			JPA2_0.ONE_TO_ONE__ORPHAN_REMOVAL);
 	}
-	
-	// ********** JPA 2.0 - OrphanRemovable2_0 implementation **********
-
-	@Override
-	public boolean isOrphanRemoval() {
-		return (this.specifiedOrphanRemoval != null) ? this.specifiedOrphanRemoval.booleanValue() : this.isDefaultOrphanRemoval();
-	}
-
-	@Override
-	public Boolean getSpecifiedOrphanRemoval() {
-		return this.specifiedOrphanRemoval;
-	}
-
-	@Override
-	public void setSpecifiedOrphanRemoval(Boolean newOrphanRemoval) {
-		Boolean old = this.specifiedOrphanRemoval;
-		this.specifiedOrphanRemoval = newOrphanRemoval;
-		((OneToOne2_0Annotation) this.mappingAnnotation).setOrphanRemoval(newOrphanRemoval);
-		this.firePropertyChanged(OneToOneMapping2_0.SPECIFIED_ORPHAN_REMOVAL_PROPERTY, old, newOrphanRemoval);
-	}
-
-	@Override
-	public boolean isDefaultOrphanRemoval() {
-		return OneToOneMapping2_0.DEFAULT_ORPHAN_REMOVAL;
-	}
-	
-	protected Boolean getResourceOrphanRemoval() {
-		return ((OneToOne2_0Annotation) this.mappingAnnotation).getOrphanRemoval();
-	}
-
-	protected void setSpecifiedOrphanRemoval_(Boolean newOrphanRemoval) {
-		Boolean old = this.specifiedOrphanRemoval;
-		this.specifiedOrphanRemoval = newOrphanRemoval;
-		firePropertyChanged(OneToOneMapping2_0.SPECIFIED_ORPHAN_REMOVAL_PROPERTY, old, newOrphanRemoval);
-	}
 
 }
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/java/GenericJavaOrphanRemoval2_0.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/java/GenericJavaOrphanRemoval2_0.java
new file mode 100644
index 0000000..8587f04
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/java/GenericJavaOrphanRemoval2_0.java
@@ -0,0 +1,109 @@
+/*******************************************************************************
+* Copyright (c) 2009 Oracle. 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:
+*     Oracle - initial API and implementation
+*******************************************************************************/
+package org.eclipse.jpt.core.internal.jpa2.context.java;
+
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jpt.core.context.java.JavaAttributeMapping;
+import org.eclipse.jpt.core.internal.context.java.AbstractJavaJpaContextNode;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovalHolder2_0;
+import org.eclipse.jpt.core.jpa2.resource.java.OrphanRemovable2_0Annotation;
+import org.eclipse.jpt.core.resource.java.JavaResourcePersistentAttribute;
+import org.eclipse.jpt.core.utility.TextRange;
+
+/**
+ *  GenericJavaOrphanRemoval2_0
+ */
+public class GenericJavaOrphanRemoval2_0
+		extends AbstractJavaJpaContextNode 
+		implements JavaOrphanRemovable2_0
+{
+	protected boolean defaultOrphanRemoval;
+	protected Boolean specifiedOrphanRemoval;
+	
+	protected JavaResourcePersistentAttribute resourcePersistentAttribute;
+	
+	public GenericJavaOrphanRemoval2_0(JavaOrphanRemovalHolder2_0 parent) {
+		super(parent);
+	}
+	
+	@Override
+	public JavaOrphanRemovalHolder2_0 getParent() {
+		return (JavaOrphanRemovalHolder2_0) super.getParent();
+	}
+	
+	protected String getAnnotationName() {
+		return ((JavaAttributeMapping)getParent()).getAnnotationName();
+	}
+	
+	protected OrphanRemovable2_0Annotation getResourceOrphanRemovable() {
+		return (OrphanRemovable2_0Annotation) this.resourcePersistentAttribute.getAnnotation(this.getAnnotationName());
+	}
+	
+	// ********** OrphanRemovable2_0 implementation **********
+
+	public boolean isOrphanRemoval() {
+		return this.specifiedOrphanRemoval != null ? this.specifiedOrphanRemoval.booleanValue() : this.defaultOrphanRemoval; 
+	}
+	
+	public Boolean getSpecifiedOrphanRemoval() {
+		return this.specifiedOrphanRemoval;
+	}
+	
+	public boolean isDefaultOrphanRemoval() {
+		return this.defaultOrphanRemoval;
+	}
+	
+	protected void setDefaultOrphanRemoval(boolean newDefaultOrphanRemoval) {
+		boolean old = this.defaultOrphanRemoval;
+		this.defaultOrphanRemoval = newDefaultOrphanRemoval;
+		this.firePropertyChanged(DEFAULT_ORPHAN_REMOVAL_PROPERTY, old, newDefaultOrphanRemoval);
+	}
+	
+	public void setSpecifiedOrphanRemoval(Boolean newOrphanRemoval) {
+		Boolean old = this.specifiedOrphanRemoval;
+		this.specifiedOrphanRemoval = newOrphanRemoval;
+		this.getResourceOrphanRemovable().setOrphanRemoval(newOrphanRemoval);
+		this.firePropertyChanged(SPECIFIED_ORPHAN_REMOVAL_PROPERTY, old, newOrphanRemoval);
+	}
+	
+	protected void setSpecifiedOrphanRemoval_(Boolean newSpecifiedOrphanRemoval) {
+		Boolean old = this.specifiedOrphanRemoval;
+		this.specifiedOrphanRemoval = newSpecifiedOrphanRemoval;
+		this.firePropertyChanged(SPECIFIED_ORPHAN_REMOVAL_PROPERTY, old, newSpecifiedOrphanRemoval);
+	}
+
+	// ********** initialize/update **********
+	
+	public void initialize(JavaResourcePersistentAttribute jrpa) {
+		this.resourcePersistentAttribute = jrpa;
+		OrphanRemovable2_0Annotation resource = this.getResourceOrphanRemovable();
+		this.specifiedOrphanRemoval = this.getSpecifiedOrphanRemovalFrom(resource);
+	}
+	
+	public void update(JavaResourcePersistentAttribute jrpa) {
+		this.resourcePersistentAttribute = jrpa;
+		OrphanRemovable2_0Annotation resource = this.getResourceOrphanRemovable();
+		this.setSpecifiedOrphanRemoval_(this.getSpecifiedOrphanRemovalFrom(resource));
+	}
+	
+	private Boolean getSpecifiedOrphanRemovalFrom(OrphanRemovable2_0Annotation resource) {
+		return (resource == null) ? null : resource.getOrphanRemoval();
+	}
+
+	// ********** validation **********
+
+	public TextRange getValidationTextRange(CompilationUnit astRoot) {
+		// TODO
+		return null;
+	}
+	
+
+}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/java/NullJavaOrphanRemoval2_0.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/java/NullJavaOrphanRemoval2_0.java
new file mode 100644
index 0000000..03633a8
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/java/NullJavaOrphanRemoval2_0.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+* Copyright (c) 2009 Oracle. 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:
+*     Oracle - initial API and implementation
+*******************************************************************************/
+package org.eclipse.jpt.core.internal.jpa2.context.java;
+
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jpt.core.internal.context.java.AbstractJavaJpaContextNode;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovalHolder2_0;
+import org.eclipse.jpt.core.resource.java.JavaResourcePersistentAttribute;
+import org.eclipse.jpt.core.utility.TextRange;
+
+/**
+ *  NullJavaOrphanRemoval2_0
+ */
+public class NullJavaOrphanRemoval2_0
+			extends AbstractJavaJpaContextNode
+			implements JavaOrphanRemovable2_0
+{
+	// ********** constructor **********
+	public NullJavaOrphanRemoval2_0(JavaOrphanRemovalHolder2_0 parent) {
+		super(parent);
+	}
+
+	// ********** OrphanRemovable2_0 implementation **********
+	
+	public boolean isOrphanRemoval() {
+		return false;
+	}
+	
+	public Boolean getSpecifiedOrphanRemoval() {
+		return null;
+	}
+	
+	public boolean isDefaultOrphanRemoval() {
+		return false;
+	}
+	
+	public void setSpecifiedOrphanRemoval(Boolean newSpecifiedOrphanRemoval) {
+		throw new UnsupportedOperationException();
+	}
+
+	// ********** JavaOrphanRemovable2_0 implementation **********
+	
+	public void initialize(JavaResourcePersistentAttribute jrpa) {
+		// do nothing
+	}
+	
+	public void update(JavaResourcePersistentAttribute jrpa) {
+		// do nothing
+	}
+
+	// ********** validation **********
+	
+	public TextRange getValidationTextRange(CompilationUnit astRoot) {
+		return null;
+	}
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/GenericOrmOneToManyMapping2_0.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/GenericOrmOneToManyMapping2_0.java
deleted file mode 100644
index a68b3ca..0000000
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/GenericOrmOneToManyMapping2_0.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.core.internal.jpa2.context.orm;
-
-import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute;
-import org.eclipse.jpt.core.internal.jpa1.context.orm.GenericOrmOneToManyMapping;
-import org.eclipse.jpt.core.jpa2.context.OrphanRemovable2_0;
-import org.eclipse.jpt.core.resource.orm.XmlOneToMany;
-
-/**
- *  GenericOrmOneToManyMapping2_0
- */
-public class GenericOrmOneToManyMapping2_0
-	extends GenericOrmOneToManyMapping
-{
-	protected Boolean specifiedOrphanRemoval;
-	
-	// ********** constructor **********
-	public GenericOrmOneToManyMapping2_0(OrmPersistentAttribute parent, XmlOneToMany resourceMapping) {
-		super(parent, resourceMapping);
-		
-		this.specifiedOrphanRemoval = this.getResourceOrphanRemoval();
-	}
-	
-	@Override
-	public void update() {
-		super.update();
-		this.setSpecifiedOrphanRemoval_(this.getResourceOrphanRemoval());
-	}
-	
-	protected Boolean getResourceOrphanRemoval() {
-		return this.resourceAttributeMapping.getOrphanRemoval();
-	}
-	
-	// ********** OrphanRemovable2_0 implementation **********
-
-	@Override
-	public boolean isOrphanRemoval() {
-		return (this.getSpecifiedOrphanRemoval() == null) ? this.isDefaultOrphanRemoval() : this.getSpecifiedOrphanRemoval().booleanValue();
-	}
-
-	@Override
-	public boolean isDefaultOrphanRemoval() {
-		return OrphanRemovable2_0.DEFAULT_ORPHAN_REMOVAL;
-	}
-
-	@Override
-	public Boolean getSpecifiedOrphanRemoval() {
-		return this.specifiedOrphanRemoval;
-	}
-
-	@Override
-	public void setSpecifiedOrphanRemoval(Boolean newOrphanRemoval) {
-		Boolean old = this.specifiedOrphanRemoval;
-		this.specifiedOrphanRemoval = newOrphanRemoval;
-		this.resourceAttributeMapping.setOrphanRemoval(newOrphanRemoval);
-		firePropertyChanged(OrphanRemovable2_0.SPECIFIED_ORPHAN_REMOVAL_PROPERTY, old, newOrphanRemoval);
-	}
-	
-	protected void setSpecifiedOrphanRemoval_(Boolean newOrphanRemoval) {
-		Boolean old = this.specifiedOrphanRemoval;
-		this.specifiedOrphanRemoval = newOrphanRemoval;
-		firePropertyChanged(OrphanRemovable2_0.SPECIFIED_ORPHAN_REMOVAL_PROPERTY, old, newOrphanRemoval);
-	}
-	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/GenericOrmOneToOneMapping2_0.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/GenericOrmOneToOneMapping2_0.java
deleted file mode 100644
index 921b031..0000000
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/GenericOrmOneToOneMapping2_0.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.core.internal.jpa2.context.orm;
-
-import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute;
-import org.eclipse.jpt.core.internal.jpa1.context.orm.GenericOrmOneToOneMapping;
-import org.eclipse.jpt.core.jpa2.context.OrphanRemovable2_0;
-import org.eclipse.jpt.core.resource.orm.XmlOneToOne;
-
-/**
- *  GenericOrmOneToOneMapping2_0
- */
-public class GenericOrmOneToOneMapping2_0
-	extends GenericOrmOneToOneMapping
-{
-	protected Boolean specifiedOrphanRemoval;
-	
-	// ********** constructor **********
-	public GenericOrmOneToOneMapping2_0(OrmPersistentAttribute parent, XmlOneToOne resourceMapping) {
-		super(parent, resourceMapping);
-		
-		this.specifiedOrphanRemoval = this.getResourceOrphanRemoval();
-	}
-	
-	@Override
-	public void update() {
-		super.update();
-		this.setSpecifiedOrphanRemoval_(this.getResourceOrphanRemoval());
-	}
-	
-	protected Boolean getResourceOrphanRemoval() {
-		return this.resourceAttributeMapping.getOrphanRemoval();
-	}
-	
-	// ********** OrphanRemovable2_0 implementation **********
-
-	@Override
-	public boolean isOrphanRemoval() {
-		return (this.getSpecifiedOrphanRemoval() == null) ? this.isDefaultOrphanRemoval() : this.getSpecifiedOrphanRemoval().booleanValue();
-	}
-
-	@Override
-	public boolean isDefaultOrphanRemoval() {
-		return OrphanRemovable2_0.DEFAULT_ORPHAN_REMOVAL;
-	}
-
-	@Override
-	public Boolean getSpecifiedOrphanRemoval() {
-		return this.specifiedOrphanRemoval;
-	}
-
-	@Override
-	public void setSpecifiedOrphanRemoval(Boolean newOrphanRemoval) {
-		Boolean old = this.specifiedOrphanRemoval;
-		this.specifiedOrphanRemoval = newOrphanRemoval;
-		this.resourceAttributeMapping.setOrphanRemoval(newOrphanRemoval);
-		firePropertyChanged(OrphanRemovable2_0.SPECIFIED_ORPHAN_REMOVAL_PROPERTY, old, newOrphanRemoval);
-	}
-	
-	protected void setSpecifiedOrphanRemoval_(Boolean newOrphanRemoval) {
-		Boolean old = this.specifiedOrphanRemoval;
-		this.specifiedOrphanRemoval = newOrphanRemoval;
-		firePropertyChanged(OrphanRemovable2_0.SPECIFIED_ORPHAN_REMOVAL_PROPERTY, old, newOrphanRemoval);
-	}
-	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/GenericOrmOrphanRemoval2_0.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/GenericOrmOrphanRemoval2_0.java
new file mode 100644
index 0000000..42c2f82
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/GenericOrmOrphanRemoval2_0.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+* Copyright (c) 2009 Oracle. 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:
+*     Oracle - initial API and implementation
+*******************************************************************************/
+package org.eclipse.jpt.core.internal.jpa2.context.orm;
+
+import org.eclipse.jpt.core.internal.context.orm.AbstractOrmXmlContextNode;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovalHolder2_0;
+import org.eclipse.jpt.core.resource.orm.v2_0.XmlOrphanRemovable2_0;
+import org.eclipse.jpt.core.utility.TextRange;
+
+/**
+ *  GenericOrmOrphanRemoval2_0
+ */
+public class GenericOrmOrphanRemoval2_0 extends AbstractOrmXmlContextNode 
+	implements OrmOrphanRemovable2_0
+{
+	protected final XmlOrphanRemovable2_0 resource;
+	protected boolean defaultOrphanRemoval;
+	protected Boolean specifiedOrphanRemoval;
+
+	// ********** constructor **********
+	public GenericOrmOrphanRemoval2_0(OrmOrphanRemovalHolder2_0 parent, XmlOrphanRemovable2_0 resource) {
+		super(parent);
+		this.resource = resource;
+		this.specifiedOrphanRemoval = this.getResourceOrphanRemoval();
+	}
+
+	@Override
+	public OrmOrphanRemovalHolder2_0 getParent() {
+		return (OrmOrphanRemovalHolder2_0) super.getParent();
+	}
+
+	// ********** OrphanRemovable2_0 implementation **********
+
+	public boolean isOrphanRemoval() {
+		return (this.specifiedOrphanRemoval != null) ? this.specifiedOrphanRemoval.booleanValue() : this.defaultOrphanRemoval;
+	}
+
+	public Boolean getSpecifiedOrphanRemoval() {
+		return this.specifiedOrphanRemoval;
+	}
+
+	public boolean isDefaultOrphanRemoval() {
+		return this.defaultOrphanRemoval;
+	}
+
+	public void setSpecifiedOrphanRemoval(Boolean newSpecifiedOrphanRemoval) {
+		Boolean old = this.specifiedOrphanRemoval;
+		this.specifiedOrphanRemoval = newSpecifiedOrphanRemoval;
+		this.resource.setOrphanRemoval(newSpecifiedOrphanRemoval);
+		this.firePropertyChanged(SPECIFIED_ORPHAN_REMOVAL_PROPERTY, old, newSpecifiedOrphanRemoval);
+	}
+	
+	protected void setSpecifiedOrphanRemoval_(Boolean newSpecifiedOrphanRemoval) {
+		Boolean old = this.specifiedOrphanRemoval;
+		this.specifiedOrphanRemoval = newSpecifiedOrphanRemoval;
+		this.firePropertyChanged(SPECIFIED_ORPHAN_REMOVAL_PROPERTY, old, newSpecifiedOrphanRemoval);
+	}
+
+	// ********** initialize/update **********
+	public void update() {
+		this.setSpecifiedOrphanRemoval_(this.getResourceOrphanRemoval());
+	}
+
+	// ********** validation **********
+	public TextRange getValidationTextRange() {
+		// TODO
+		return null;
+	}
+	
+	protected Boolean getResourceOrphanRemoval() {
+		return this.resource.getOrphanRemoval();
+	}
+	
+}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/GenericOrmXml2_0ContextNodeFactory.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/GenericOrmXml2_0ContextNodeFactory.java
index 7218fd3..7058fd3 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/GenericOrmXml2_0ContextNodeFactory.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/GenericOrmXml2_0ContextNodeFactory.java
@@ -26,8 +26,6 @@
 import org.eclipse.jpt.core.context.orm.OrmAssociationOverrideContainer;
 import org.eclipse.jpt.core.context.orm.OrmAssociationOverrideRelationshipReference;
 import org.eclipse.jpt.core.context.orm.OrmEmbeddable;
-import org.eclipse.jpt.core.context.orm.OrmOneToManyMapping;
-import org.eclipse.jpt.core.context.orm.OrmOneToOneMapping;
 import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute;
 import org.eclipse.jpt.core.context.orm.OrmPersistentType;
 import org.eclipse.jpt.core.context.orm.OrmSequenceGenerator;
@@ -45,6 +43,8 @@
 import org.eclipse.jpt.core.jpa2.context.orm.OrmElementCollectionMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmEmbeddedMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmMapsId2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmSingleRelationshipMapping2_0;
 import org.eclipse.jpt.core.resource.orm.XmlAssociationOverride;
 import org.eclipse.jpt.core.resource.orm.XmlAssociationOverrideContainer;
@@ -63,6 +63,7 @@
 import org.eclipse.jpt.core.resource.orm.v2_0.XmlCacheable2_0;
 import org.eclipse.jpt.core.resource.orm.v2_0.XmlDerivedId_2_0;
 import org.eclipse.jpt.core.resource.orm.v2_0.XmlMapsId_2_0;
+import org.eclipse.jpt.core.resource.orm.v2_0.XmlOrphanRemovable2_0;
 
 public class GenericOrmXml2_0ContextNodeFactory extends AbstractOrmXmlContextNodeFactory
 {	
@@ -121,17 +122,12 @@
 	public OrmCacheable2_0 buildOrmCacheable(OrmCacheableHolder2_0 parent, XmlCacheable2_0 resource) {
 		return new GenericOrmCacheable2_0(parent, resource);
 	}
-
-	@Override
-	public OrmOneToManyMapping buildOrmOneToManyMapping(OrmPersistentAttribute parent, XmlOneToMany resourceMapping) {
-		return new GenericOrmOneToManyMapping2_0(parent, resourceMapping);
-	}
-
-	@Override
-	public OrmOneToOneMapping buildOrmOneToOneMapping(OrmPersistentAttribute parent, XmlOneToOne resourceMapping) {
-		return new GenericOrmOneToOneMapping2_0(parent, resourceMapping);
-	}
 	
+	@Override
+	public OrmOrphanRemovable2_0 buildOrmOrphanRemoval(OrmOrphanRemovalHolder2_0 parent, XmlOrphanRemovable2_0 resource) {
+		return new GenericOrmOrphanRemoval2_0(parent, resource);
+	}
+
 	
 	// ********** ORM Virtual Resource Model **********
 
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/NullOrmOrphanRemoval2_0.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/NullOrmOrphanRemoval2_0.java
new file mode 100644
index 0000000..9c90fa5
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/NullOrmOrphanRemoval2_0.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+* Copyright (c) 2009 Oracle. 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:
+*     Oracle - initial API and implementation
+*******************************************************************************/
+package org.eclipse.jpt.core.internal.jpa2.context.orm;
+
+import org.eclipse.jpt.core.internal.context.orm.AbstractOrmXmlContextNode;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovalHolder2_0;
+import org.eclipse.jpt.core.utility.TextRange;
+
+/**
+ *  NullOrmOrphanRemovable2_0
+ */
+public class NullOrmOrphanRemoval2_0
+			extends AbstractOrmXmlContextNode
+			implements OrmOrphanRemovable2_0
+{
+	public NullOrmOrphanRemoval2_0(OrmOrphanRemovalHolder2_0 parent) {
+		super(parent);
+	}
+
+	public boolean isDefaultOrphanRemoval() {
+		return false;
+	}
+
+	public boolean isOrphanRemoval() {
+		return false;
+	}
+
+	public Boolean getSpecifiedOrphanRemoval() {
+		return null;
+	}
+
+	public void setSpecifiedOrphanRemoval(Boolean newSpecifiedOrphanRemoval) {
+		throw new UnsupportedOperationException();
+	}
+
+	public void update() {
+		// do nothing
+	}
+
+	public TextRange getValidationTextRange() {
+		return null;
+	}
+
+}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/VirtualXmlOneToMany2_0.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/VirtualXmlOneToMany2_0.java
index f6a5220..7fc508e 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/VirtualXmlOneToMany2_0.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/VirtualXmlOneToMany2_0.java
@@ -12,7 +12,10 @@
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.jpt.core.context.orm.OrmTypeMapping;
 import org.eclipse.jpt.core.internal.context.orm.VirtualXmlOneToMany;
+import org.eclipse.jpt.core.jpa2.context.OneToManyMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaOneToManyMapping2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.resource.orm.AccessType;
 import org.eclipse.jpt.core.resource.orm.CascadeType;
 import org.eclipse.jpt.core.resource.orm.FetchType;
@@ -86,13 +89,18 @@
 	public void setCascade(CascadeType value) {
 		this.virtualXmlOneToMany.setCascade(value);
 	}
-
+	
+	private JavaOrphanRemovable2_0 getOrphanRemovalOf(OneToManyMapping2_0 oneToManyMapping) {
+		return ((JavaOrphanRemovalHolder2_0) oneToManyMapping).getOrphanRemoval();
+	}
+	
 	@Override
 	public Boolean getOrphanRemoval() {
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(this.javaAttributeMapping);
 		if (this.isOrmMetadataComplete()) {
-			return this.javaAttributeMapping.isDefaultOrphanRemoval();
+			return mappingsOrphanRemoval.isDefaultOrphanRemoval();
 		}
-		return this.javaAttributeMapping.isOrphanRemoval();
+		return mappingsOrphanRemoval.isOrphanRemoval();
 	}
 
 	@Override
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/VirtualXmlOneToOne2_0.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/VirtualXmlOneToOne2_0.java
index cf358e8..5c5d7c2 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/VirtualXmlOneToOne2_0.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa2/context/orm/VirtualXmlOneToOne2_0.java
@@ -12,7 +12,10 @@
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.jpt.core.context.orm.OrmTypeMapping;
 import org.eclipse.jpt.core.internal.context.orm.VirtualXmlOneToOne;
+import org.eclipse.jpt.core.jpa2.context.OneToOneMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaOneToOneMapping2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.resource.orm.AccessType;
 import org.eclipse.jpt.core.resource.orm.CascadeType;
 import org.eclipse.jpt.core.resource.orm.FetchType;
@@ -100,12 +103,17 @@
 		this.virtualXmlOneToOne.setCascade(value);
 	}
 	
+	private JavaOrphanRemovable2_0 getOrphanRemovalOf(OneToOneMapping2_0 oneToOneMapping) {
+		return ((JavaOrphanRemovalHolder2_0) oneToOneMapping).getOrphanRemoval();
+	}
+	
 	@Override
 	public Boolean getOrphanRemoval() {
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(this.javaAttributeMapping);
 		if (this.isOrmMetadataComplete()) {
-			return this.javaAttributeMapping.isDefaultOrphanRemoval();
+			return mappingsOrphanRemoval.isDefaultOrphanRemoval();
 		}
-		return this.javaAttributeMapping.isOrphanRemoval();
+		return mappingsOrphanRemoval.isOrphanRemoval();
 	}
 
 	@Override
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/JpaFactory2_0.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/JpaFactory2_0.java
index ead464c..1283551 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/JpaFactory2_0.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/JpaFactory2_0.java
@@ -20,6 +20,8 @@
 import org.eclipse.jpt.core.jpa2.context.java.JavaElementCollectionMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaEmbeddedMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaMapsId2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaSingleRelationshipMapping2_0;
 
 /**
@@ -55,4 +57,6 @@
 	JavaMapsId2_0 buildJavaMapsId(JavaSingleRelationshipMapping2_0 parent);
 	
 	JavaCacheable2_0 buildJavaCacheable(JavaCacheableHolder2_0 parent);
+	
+	JavaOrphanRemovable2_0 buildJavaOrphanRemoval(JavaOrphanRemovalHolder2_0 parent);
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/OneToManyMapping2_0.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/OneToManyMapping2_0.java
index c6c5eea..ae79424 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/OneToManyMapping2_0.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/OneToManyMapping2_0.java
@@ -19,5 +19,5 @@
  * will almost certainly be broken (repeatedly) as the API evolves.
  */
 public interface OneToManyMapping2_0
-	extends OneToManyMapping, OrphanRemovable2_0
+	extends OneToManyMapping
 {}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/OneToOneMapping2_0.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/OneToOneMapping2_0.java
index c6e6401..25f167c 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/OneToOneMapping2_0.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/OneToOneMapping2_0.java
@@ -20,5 +20,5 @@
  * will almost certainly be broken (repeatedly) as the API evolves.
  */
 public interface OneToOneMapping2_0
-	extends OneToOneMapping, SingleRelationshipMapping2_0, OrphanRemovable2_0
+	extends OneToOneMapping, SingleRelationshipMapping2_0
 {}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/OrphanRemovalHolder2_0.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/OrphanRemovalHolder2_0.java
new file mode 100644
index 0000000..7308be8
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/OrphanRemovalHolder2_0.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+* Copyright (c) 2009 Oracle. 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:
+*     Oracle - initial API and implementation
+*******************************************************************************/
+package org.eclipse.jpt.core.jpa2.context;
+
+import org.eclipse.jpt.core.JpaNode;
+
+/**
+ * Provisional API: This interface is part of an interim API that is still
+ * under development and expected to change significantly before reaching
+ * stability. It is available at this early stage to solicit feedback from
+ * pioneering adopters on the understanding that any code that uses this API
+ * will almost certainly be broken (repeatedly) as the API evolves.
+ * 
+ * @version 3.0
+ * @since 3.0
+ */
+public interface OrphanRemovalHolder2_0 extends JpaNode
+{
+	OrphanRemovable2_0 getOrphanRemoval();
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/java/JavaOrphanRemovable2_0.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/java/JavaOrphanRemovable2_0.java
new file mode 100644
index 0000000..669e192
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/java/JavaOrphanRemovable2_0.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+* Copyright (c) 2009 Oracle. 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:
+*     Oracle - initial API and implementation
+*******************************************************************************/
+package org.eclipse.jpt.core.jpa2.context.java;
+
+import org.eclipse.jpt.core.context.java.JavaJpaContextNode;
+import org.eclipse.jpt.core.jpa2.context.OrphanRemovable2_0;
+import org.eclipse.jpt.core.resource.java.JavaResourcePersistentAttribute;
+
+/**
+ * Provisional API: This interface is part of an interim API that is still
+ * under development and expected to change significantly before reaching
+ * stability. It is available at this early stage to solicit feedback from
+ * pioneering adopters on the understanding that any code that uses this API
+ * will almost certainly be broken (repeatedly) as the API evolves.
+ * 
+ * @version 3.0
+ * @since 3.0
+ */
+public interface JavaOrphanRemovable2_0
+	extends JavaJpaContextNode, OrphanRemovable2_0
+{
+	/**
+	 * Initialize model without throwing any events
+	 */
+	void initialize(JavaResourcePersistentAttribute jrpa);
+	
+	/**
+	 * Update model, throwing events as necessary
+	 */
+	void update(JavaResourcePersistentAttribute jrpa);
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/java/JavaOrphanRemovalHolder2_0.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/java/JavaOrphanRemovalHolder2_0.java
new file mode 100644
index 0000000..754b419
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/java/JavaOrphanRemovalHolder2_0.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+* Copyright (c) 2009 Oracle. 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:
+*     Oracle - initial API and implementation
+*******************************************************************************/
+package org.eclipse.jpt.core.jpa2.context.java;
+
+import org.eclipse.jpt.core.context.java.JavaJpaContextNode;
+import org.eclipse.jpt.core.jpa2.context.OrphanRemovalHolder2_0;
+
+/**
+ * Provisional API: This interface is part of an interim API that is still
+ * under development and expected to change significantly before reaching
+ * stability. It is available at this early stage to solicit feedback from
+ * pioneering adopters on the understanding that any code that uses this API
+ * will almost certainly be broken (repeatedly) as the API evolves.
+ * 
+ * @version 3.0
+ * @since 3.0
+ */
+public interface JavaOrphanRemovalHolder2_0 extends OrphanRemovalHolder2_0, JavaJpaContextNode
+{
+	JavaOrphanRemovable2_0 getOrphanRemoval();
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/orm/OrmOrphanRemovable2_0.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/orm/OrmOrphanRemovable2_0.java
new file mode 100644
index 0000000..7771215
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/orm/OrmOrphanRemovable2_0.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+* Copyright (c) 2009 Oracle. 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:
+*     Oracle - initial API and implementation
+*******************************************************************************/
+package org.eclipse.jpt.core.jpa2.context.orm;
+
+import org.eclipse.jpt.core.context.XmlContextNode;
+import org.eclipse.jpt.core.jpa2.context.OrphanRemovable2_0;
+
+/**
+ * Provisional API: This interface is part of an interim API that is still
+ * under development and expected to change significantly before reaching
+ * stability. It is available at this early stage to solicit feedback from
+ * pioneering adopters on the understanding that any code that uses this API
+ * will almost certainly be broken (repeatedly) as the API evolves.
+ * 
+ * @version 3.0
+ * @since 3.0
+ */
+public interface OrmOrphanRemovable2_0
+	extends XmlContextNode, OrphanRemovable2_0
+{	
+	/**
+	 * Update model, throwing events as necessary
+	 */
+	void update();
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/orm/OrmOrphanRemovalHolder2_0.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/orm/OrmOrphanRemovalHolder2_0.java
new file mode 100644
index 0000000..356a5b2
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/orm/OrmOrphanRemovalHolder2_0.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+* Copyright (c) 2009 Oracle. 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:
+*     Oracle - initial API and implementation
+*******************************************************************************/
+package org.eclipse.jpt.core.jpa2.context.orm;
+
+import org.eclipse.jpt.core.context.XmlContextNode;
+import org.eclipse.jpt.core.jpa2.context.OrphanRemovalHolder2_0;
+
+/**
+ * Provisional API: This interface is part of an interim API that is still
+ * under development and expected to change significantly before reaching
+ * stability. It is available at this early stage to solicit feedback from
+ * pioneering adopters on the understanding that any code that uses this API
+ * will almost certainly be broken (repeatedly) as the API evolves.
+ * 
+ * @version 3.0
+ * @since 3.0
+ */
+public interface OrmOrphanRemovalHolder2_0 extends OrphanRemovalHolder2_0, XmlContextNode
+{
+	OrmOrphanRemovable2_0 getOrphanRemoval();
+}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/orm/OrmXml2_0ContextNodeFactory.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/orm/OrmXml2_0ContextNodeFactory.java
index b4447c0..a58d31b 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/orm/OrmXml2_0ContextNodeFactory.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/context/orm/OrmXml2_0ContextNodeFactory.java
@@ -19,6 +19,7 @@
 import org.eclipse.jpt.core.resource.orm.v2_0.XmlCacheable2_0;
 import org.eclipse.jpt.core.resource.orm.v2_0.XmlDerivedId_2_0;
 import org.eclipse.jpt.core.resource.orm.v2_0.XmlMapsId_2_0;
+import org.eclipse.jpt.core.resource.orm.v2_0.XmlOrphanRemovable2_0;
 
 public interface OrmXml2_0ContextNodeFactory extends OrmXmlContextNodeFactory
 {
@@ -42,4 +43,6 @@
 			OrmTypeMapping ormTypeMapping, JavaElementCollectionMapping2_0 javaMapping);
 	
 	OrmCacheable2_0 buildOrmCacheable(OrmCacheableHolder2_0 parent, XmlCacheable2_0 resource);
+	
+	OrmOrphanRemovable2_0 buildOrmOrphanRemoval(OrmOrphanRemovalHolder2_0 parent, XmlOrphanRemovable2_0 resource);
 }
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/resource/java/OneToMany2_0Annotation.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/resource/java/OneToMany2_0Annotation.java
index e541a65..155e2db 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/resource/java/OneToMany2_0Annotation.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/resource/java/OneToMany2_0Annotation.java
@@ -9,34 +9,18 @@
 *******************************************************************************/
 package org.eclipse.jpt.core.jpa2.resource.java;
 
-import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jpt.core.resource.java.OneToManyAnnotation;
-import org.eclipse.jpt.core.utility.TextRange;
 
 /**
- *  OneToMany2_0Annotation
+ * Provisional API: This interface is part of an interim API that is still
+ * under development and expected to change significantly before reaching
+ * stability. It is available at this early stage to solicit feedback from
+ * pioneering adopters on the understanding that any code that uses this API
+ * will almost certainly be broken (repeatedly) as the API evolves.
+ * 
+ * @version 3.0
+ * @since 3.0
  */
 public interface OneToMany2_0Annotation
-	extends OneToManyAnnotation
-{
-	// ********** orphan removal **********
-	/**
-	 * Corresponds to the orphanRemoval element of the OneToMany annotation.
-	 * Returns null if the orphanRemoval element does not exist in java.
-	 */
-	Boolean getOrphanRemoval();
-		String ORPHAN_REMOVAL_PROPERTY = "orphanRemoval"; //$NON-NLS-1$
-	
-	/**
-	 * Corresponds to the orphanRemoval element of the OneToMany annotation.
-	 * Set to null to remove the orphanRemoval element.
-	 */
-	void setOrphanRemoval(Boolean orphanRemoval);
-
-	/**
-	 * Return the {@link TextRange} for the orphanRemoval element.  If the orphanRemoval element 
-	 * does not exist return the {@link TextRange} for the OneToMany annotation.
-	 */
-	TextRange getOrphanRemovalTextRange(CompilationUnit astRoot);
-
-}
+	extends OneToManyAnnotation, OrphanRemovable2_0Annotation
+{}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/resource/java/OneToOne2_0Annotation.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/resource/java/OneToOne2_0Annotation.java
index 70a0ac5..d216997 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/resource/java/OneToOne2_0Annotation.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/resource/java/OneToOne2_0Annotation.java
@@ -9,34 +9,18 @@
 *******************************************************************************/
 package org.eclipse.jpt.core.jpa2.resource.java;
 
-import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jpt.core.resource.java.OneToOneAnnotation;
-import org.eclipse.jpt.core.utility.TextRange;
 
 /**
- *  OneToOne2_0Annotation
+ * Provisional API: This interface is part of an interim API that is still
+ * under development and expected to change significantly before reaching
+ * stability. It is available at this early stage to solicit feedback from
+ * pioneering adopters on the understanding that any code that uses this API
+ * will almost certainly be broken (repeatedly) as the API evolves.
+ * 
+ * @version 3.0
+ * @since 3.0
  */
 public interface OneToOne2_0Annotation
-	extends OneToOneAnnotation
-{
-	// ********** orphan removal **********
-	/**
-	 * Corresponds to the orphanRemoval element of the OneToMany annotation.
-	 * Returns null if the orphanRemoval element does not exist in java.
-	 */
-	Boolean getOrphanRemoval();
-	
-	/**
-	 * Corresponds to the orphanRemoval element of the OneToMany annotation.
-	 * Set to null to remove the orphanRemoval element.
-	 */
-	void setOrphanRemoval(Boolean orphanRemoval);
-		String ORPHAN_REMOVAL_PROPERTY = "orphanRemoval"; //$NON-NLS-1$
-
-	/**
-	 * Return the {@link TextRange} for the orphanRemoval element.  If the orphanRemoval element 
-	 * does not exist return the {@link TextRange} for the OneToMany annotation.
-	 */
-	TextRange getOrphanRemovalTextRange(CompilationUnit astRoot);
-
-}
+	extends OneToOneAnnotation, OrphanRemovable2_0Annotation
+{}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/resource/java/OrphanRemovable2_0Annotation.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/resource/java/OrphanRemovable2_0Annotation.java
new file mode 100644
index 0000000..b674c93
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/jpa2/resource/java/OrphanRemovable2_0Annotation.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+* Copyright (c) 2009 Oracle. 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:
+*     Oracle - initial API and implementation
+*******************************************************************************/
+package org.eclipse.jpt.core.jpa2.resource.java;
+
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jpt.core.utility.TextRange;
+
+/**
+ * Provisional API: This interface is part of an interim API that is still
+ * under development and expected to change significantly before reaching
+ * stability. It is available at this early stage to solicit feedback from
+ * pioneering adopters on the understanding that any code that uses this API
+ * will almost certainly be broken (repeatedly) as the API evolves.
+ * 
+ * @version 3.0
+ * @since 3.0
+ */
+public interface OrphanRemovable2_0Annotation
+{
+	// ********** orphan removal **********
+	/**
+	 * Corresponds to the orphanRemoval element of the OneToMany annotation.
+	 * Returns null if the orphanRemoval element does not exist in java.
+	 */
+	Boolean getOrphanRemoval();
+		String ORPHAN_REMOVAL_PROPERTY = "orphanRemoval"; //$NON-NLS-1$
+	
+	/**
+	 * Corresponds to the orphanRemoval element of the OneToMany annotation.
+	 * Set to null to remove the orphanRemoval element.
+	 */
+	void setOrphanRemoval(Boolean orphanRemoval);
+
+	/**
+	 * Return the {@link TextRange} for the orphanRemoval element.  If the orphanRemoval element 
+	 * does not exist return the {@link TextRange} for the OneToMany annotation.
+	 */
+	TextRange getOrphanRemovalTextRange(CompilationUnit astRoot);
+
+}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/EclipseLink2_0JpaFactory.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/EclipseLink2_0JpaFactory.java
index 83d6a63..663dc1e 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/EclipseLink2_0JpaFactory.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/EclipseLink2_0JpaFactory.java
@@ -29,6 +29,7 @@
 import org.eclipse.jpt.core.internal.jpa2.context.java.GenericJavaDerivedId2_0;
 import org.eclipse.jpt.core.internal.jpa2.context.java.GenericJavaElementCollectionMapping2_0;
 import org.eclipse.jpt.core.internal.jpa2.context.java.GenericJavaMapsId2_0;
+import org.eclipse.jpt.core.internal.jpa2.context.java.GenericJavaOrphanRemoval2_0;
 import org.eclipse.jpt.core.internal.jpa2.context.java.GenericJavaPersistentType2_0;
 import org.eclipse.jpt.core.internal.jpa2.context.java.GenericJavaSequenceGenerator2_0;
 import org.eclipse.jpt.core.internal.jpa2.context.java.VirtualAssociationOverride2_0Annotation;
@@ -41,6 +42,8 @@
 import org.eclipse.jpt.core.jpa2.context.java.JavaElementCollectionMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaEmbeddedMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaMapsId2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaSingleRelationshipMapping2_0;
 import org.eclipse.jpt.core.resource.java.AssociationOverrideAnnotation;
 import org.eclipse.jpt.core.resource.java.JavaResourcePersistentMember;
@@ -114,11 +117,6 @@
 	}
 	
 	@Override
-	public JavaCacheable2_0 buildJavaCacheable(JavaCacheableHolder2_0 parent) {
-		return new GenericJavaCacheable2_0(parent);
-	}
-	
-	@Override
 	public JavaOneToManyMapping buildJavaOneToManyMapping(JavaPersistentAttribute parent) {
 		return new JavaEclipseLinkOneToManyMapping2_0(parent);
 	}
@@ -127,4 +125,14 @@
 	public JavaOneToOneMapping buildJavaOneToOneMapping(JavaPersistentAttribute parent) {
 		return new JavaEclipseLinkOneToOneMapping2_0(parent);
 	}
+	
+	@Override
+	public JavaCacheable2_0 buildJavaCacheable(JavaCacheableHolder2_0 parent) {
+		return new GenericJavaCacheable2_0(parent);
+	}
+	
+	@Override
+	public JavaOrphanRemovable2_0 buildJavaOrphanRemoval(JavaOrphanRemovalHolder2_0 parent) {
+		return new GenericJavaOrphanRemoval2_0(parent);
+	}
 }
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/java/JavaEclipseLinkOneToManyMapping2_0.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/java/JavaEclipseLinkOneToManyMapping2_0.java
index 46f0703..f19eca5 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/java/JavaEclipseLinkOneToManyMapping2_0.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/java/JavaEclipseLinkOneToManyMapping2_0.java
@@ -10,10 +10,10 @@
 package org.eclipse.jpt.eclipselink.core.internal.v2_0.context.java;
 
 import org.eclipse.jpt.core.context.java.JavaPersistentAttribute;
-import org.eclipse.jpt.core.jpa2.context.OneToManyMapping2_0;
-import org.eclipse.jpt.core.jpa2.resource.java.OneToMany2_0Annotation;
+import org.eclipse.jpt.core.jpa2.resource.java.JPA2_0;
 import org.eclipse.jpt.eclipselink.core.internal.context.java.JavaEclipseLinkOneToManyMapping;
 import org.eclipse.jpt.eclipselink.core.v2_0.context.EclipseLinkOneToManyMapping2_0;
+import org.eclipse.jpt.utility.internal.ArrayTools;
 
 /**
  *  JavaEclipseLinkOneToManyMapping2_0
@@ -22,7 +22,6 @@
 	extends JavaEclipseLinkOneToManyMapping
 	implements EclipseLinkOneToManyMapping2_0
 {
-	private Boolean specifiedOrphanRemoval;
 	
 	// ********** constructor **********
 	public JavaEclipseLinkOneToManyMapping2_0(JavaPersistentAttribute parent) {
@@ -30,54 +29,10 @@
 	}
 	
 	@Override
-	protected void initialize() {
-		super.initialize();
-		this.specifiedOrphanRemoval = this.getResourceOrphanRemoval();
-	}
-	
-	@Override
-	protected void update() {
-		super.update();
-		this.setSpecifiedOrphanRemoval_(this.getResourceOrphanRemoval());
-	}
-	
-	// ********** JPA 2.0 - OrphanRemovable2_0 implementation **********
-
-	@Override
-	public boolean isOrphanRemoval() {
-		return (this.specifiedOrphanRemoval != null) ? this.specifiedOrphanRemoval.booleanValue() : this.isDefaultOrphanRemoval();
-	}
-
-	@Override
-	public Boolean getSpecifiedOrphanRemoval() {
-		return this.specifiedOrphanRemoval;
-	}
-
-	@Override
-	public void setSpecifiedOrphanRemoval(Boolean newOrphanRemoval) {
-		Boolean old = this.specifiedOrphanRemoval;
-		this.specifiedOrphanRemoval = newOrphanRemoval;
-		this.setResourceOrphanRemoval(newOrphanRemoval);
-		this.firePropertyChanged(OneToManyMapping2_0.SPECIFIED_ORPHAN_REMOVAL_PROPERTY, old, newOrphanRemoval);
-	}
-
-	@Override
-	public boolean isDefaultOrphanRemoval() {
-		return OneToManyMapping2_0.DEFAULT_ORPHAN_REMOVAL;
-	}
-
-	protected Boolean getResourceOrphanRemoval() {
-		return ((OneToMany2_0Annotation) this.mappingAnnotation).getOrphanRemoval();
-	}
-	
-	protected void setResourceOrphanRemoval(Boolean newOrphanRemoval) {
-		((OneToMany2_0Annotation) this.mappingAnnotation).setOrphanRemoval(newOrphanRemoval);
-	}
-
-	protected void setSpecifiedOrphanRemoval_(Boolean newOrphanRemoval) {
-		Boolean old = this.specifiedOrphanRemoval;
-		this.specifiedOrphanRemoval = newOrphanRemoval;
-		firePropertyChanged(OneToManyMapping2_0.SPECIFIED_ORPHAN_REMOVAL_PROPERTY, old, newOrphanRemoval);
+	protected String[] buildSupportingAnnotationNames() {
+		return ArrayTools.addAll(
+			super.buildSupportingAnnotationNames(),
+			JPA2_0.ONE_TO_ONE__ORPHAN_REMOVAL);
 	}
 
 }
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/java/JavaEclipseLinkOneToOneMapping2_0.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/java/JavaEclipseLinkOneToOneMapping2_0.java
index d89b625..f6e36b7 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/java/JavaEclipseLinkOneToOneMapping2_0.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/java/JavaEclipseLinkOneToOneMapping2_0.java
@@ -10,10 +10,10 @@
 package org.eclipse.jpt.eclipselink.core.internal.v2_0.context.java;
 
 import org.eclipse.jpt.core.context.java.JavaPersistentAttribute;
-import org.eclipse.jpt.core.jpa2.context.OneToOneMapping2_0;
-import org.eclipse.jpt.core.jpa2.resource.java.OneToOne2_0Annotation;
+import org.eclipse.jpt.core.jpa2.resource.java.JPA2_0;
 import org.eclipse.jpt.eclipselink.core.internal.context.java.JavaEclipseLinkOneToOneMapping;
 import org.eclipse.jpt.eclipselink.core.v2_0.context.EclipseLinkOneToOneMapping2_0;
+import org.eclipse.jpt.utility.internal.ArrayTools;
 
 /**
  *  JavaEclipseLinkOneToOneMapping2_0
@@ -22,7 +22,6 @@
 	extends JavaEclipseLinkOneToOneMapping
 	implements EclipseLinkOneToOneMapping2_0
 {
-	private Boolean specifiedOrphanRemoval;
 	
 	// ********** constructor **********
 	public JavaEclipseLinkOneToOneMapping2_0(JavaPersistentAttribute parent) {
@@ -30,54 +29,10 @@
 	}
 	
 	@Override
-	protected void initialize() {
-		super.initialize();
-		this.specifiedOrphanRemoval = this.getResourceOrphanRemoval();
-	}
-	
-	@Override
-	protected void update() {
-		super.update();
-		this.setSpecifiedOrphanRemoval_(this.getResourceOrphanRemoval());
-	}
-	
-	// ********** JPA 2.0 - OrphanRemovable2_0 implementation **********
-
-	@Override
-	public boolean isOrphanRemoval() {
-		return (this.specifiedOrphanRemoval != null) ? this.specifiedOrphanRemoval.booleanValue() : this.isDefaultOrphanRemoval();
-	}
-
-	@Override
-	public Boolean getSpecifiedOrphanRemoval() {
-		return this.specifiedOrphanRemoval;
-	}
-
-	@Override
-	public void setSpecifiedOrphanRemoval(Boolean newOrphanRemoval) {
-		Boolean old = this.specifiedOrphanRemoval;
-		this.specifiedOrphanRemoval = newOrphanRemoval;
-		this.setResourceOrphanRemoval(newOrphanRemoval);
-		this.firePropertyChanged(OneToOneMapping2_0.SPECIFIED_ORPHAN_REMOVAL_PROPERTY, old, newOrphanRemoval);
-	}
-
-	@Override
-	public boolean isDefaultOrphanRemoval() {
-		return OneToOneMapping2_0.DEFAULT_ORPHAN_REMOVAL;
-	}
-
-	protected Boolean getResourceOrphanRemoval() {
-		return ((OneToOne2_0Annotation) this.mappingAnnotation).getOrphanRemoval();
-	}
-	
-	protected void setResourceOrphanRemoval(Boolean newOrphanRemoval) {
-		((OneToOne2_0Annotation) this.mappingAnnotation).setOrphanRemoval(newOrphanRemoval);
-	}
-
-	protected void setSpecifiedOrphanRemoval_(Boolean newOrphanRemoval) {
-		Boolean old = this.specifiedOrphanRemoval;
-		this.specifiedOrphanRemoval = newOrphanRemoval;
-		firePropertyChanged(OneToOneMapping2_0.SPECIFIED_ORPHAN_REMOVAL_PROPERTY, old, newOrphanRemoval);
+	protected String[] buildSupportingAnnotationNames() {
+		return ArrayTools.addAll(
+			super.buildSupportingAnnotationNames(),
+			JPA2_0.ONE_TO_ONE__ORPHAN_REMOVAL);
 	}
 
 }
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/orm/EclipseLinkOrmXml2_0ContextNodeFactory.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/orm/EclipseLinkOrmXml2_0ContextNodeFactory.java
index d5f7d9b..d66cf55 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/orm/EclipseLinkOrmXml2_0ContextNodeFactory.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/orm/EclipseLinkOrmXml2_0ContextNodeFactory.java
@@ -25,8 +25,6 @@
 import org.eclipse.jpt.core.context.orm.OrmAssociationOverride;
 import org.eclipse.jpt.core.context.orm.OrmAssociationOverrideContainer;
 import org.eclipse.jpt.core.context.orm.OrmAssociationOverrideRelationshipReference;
-import org.eclipse.jpt.core.context.orm.OrmOneToManyMapping;
-import org.eclipse.jpt.core.context.orm.OrmOneToOneMapping;
 import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute;
 import org.eclipse.jpt.core.context.orm.OrmPersistentType;
 import org.eclipse.jpt.core.context.orm.OrmSequenceGenerator;
@@ -38,6 +36,7 @@
 import org.eclipse.jpt.core.internal.jpa2.context.orm.GenericOrmDerivedId2_0;
 import org.eclipse.jpt.core.internal.jpa2.context.orm.GenericOrmElementCollectionMapping2_0;
 import org.eclipse.jpt.core.internal.jpa2.context.orm.GenericOrmMapsId2_0;
+import org.eclipse.jpt.core.internal.jpa2.context.orm.GenericOrmOrphanRemoval2_0;
 import org.eclipse.jpt.core.internal.jpa2.context.orm.GenericOrmSequenceGenerator2_0;
 import org.eclipse.jpt.core.internal.jpa2.context.orm.VirtualXmlAssociationOverride2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaElementCollectionMapping2_0;
@@ -48,6 +47,8 @@
 import org.eclipse.jpt.core.jpa2.context.orm.OrmElementCollectionMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmEmbeddedMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmMapsId2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmSingleRelationshipMapping2_0;
 import org.eclipse.jpt.core.resource.orm.XmlAssociationOverride;
 import org.eclipse.jpt.core.resource.orm.XmlAssociationOverrideContainer;
@@ -56,6 +57,7 @@
 import org.eclipse.jpt.core.resource.orm.v2_0.XmlCacheable2_0;
 import org.eclipse.jpt.core.resource.orm.v2_0.XmlDerivedId_2_0;
 import org.eclipse.jpt.core.resource.orm.v2_0.XmlMapsId_2_0;
+import org.eclipse.jpt.core.resource.orm.v2_0.XmlOrphanRemovable2_0;
 import org.eclipse.jpt.eclipselink.core.internal.context.java.JavaEclipseLinkBasicCollectionMapping;
 import org.eclipse.jpt.eclipselink.core.internal.context.java.JavaEclipseLinkBasicMapMapping;
 import org.eclipse.jpt.eclipselink.core.internal.context.java.JavaEclipseLinkTransformationMapping;
@@ -130,20 +132,14 @@
 	}
 	
 	@Override
-	public OrmOneToManyMapping buildOrmOneToManyMapping(OrmPersistentAttribute parent, org.eclipse.jpt.core.resource.orm.XmlOneToMany resourceMapping) {
-		return new OrmEclipseLinkOneToManyMapping2_0(parent, (XmlOneToMany) resourceMapping);
-	}
-	
-	@Override
-	public OrmOneToOneMapping buildOrmOneToOneMapping(OrmPersistentAttribute parent, org.eclipse.jpt.core.resource.orm.XmlOneToOne resourceMapping) {
-		return new OrmEclipseLinkOneToOneMapping2_0(parent, (XmlOneToOne) resourceMapping);
-	}
-	
-	@Override
 	public OrmCacheable2_0 buildOrmCacheable(OrmCacheableHolder2_0 parent, XmlCacheable2_0 resource) {
 		return new GenericOrmCacheable2_0(parent, resource);
 	}
 	
+	public OrmOrphanRemovable2_0 buildOrmOrphanRemoval(OrmOrphanRemovalHolder2_0 parent, XmlOrphanRemovable2_0 resource) {
+		return new GenericOrmOrphanRemoval2_0(parent, resource);
+	}
+	
 	
 	// ********** ORM Virtual Resource Model **********
 	@Override
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/orm/OrmEclipseLinkOneToManyMapping2_0.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/orm/OrmEclipseLinkOneToManyMapping2_0.java
deleted file mode 100644
index b154af7..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/orm/OrmEclipseLinkOneToManyMapping2_0.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.core.internal.v2_0.context.orm;
-
-import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute;
-import org.eclipse.jpt.core.jpa2.context.OrphanRemovable2_0;
-import org.eclipse.jpt.eclipselink.core.internal.context.orm.OrmEclipseLinkOneToManyMapping;
-import org.eclipse.jpt.eclipselink.core.resource.orm.XmlOneToMany;
-
-/**
- *  OrmEclipseLinkOneToManyMapping2_0
- */
-public class OrmEclipseLinkOneToManyMapping2_0 extends OrmEclipseLinkOneToManyMapping
-{
-	protected Boolean specifiedOrphanRemoval;
-	
-	public OrmEclipseLinkOneToManyMapping2_0(OrmPersistentAttribute parent, XmlOneToMany resourceMapping) {
-		super(parent, resourceMapping);
-	}
-	
-	@Override
-	public void update() {
-		super.update();
-		this.setSpecifiedOrphanRemoval_(this.getResourceOrphanRemoval());
-	}
-	
-	protected Boolean getResourceOrphanRemoval() {
-		return this.resourceAttributeMapping.getOrphanRemoval();
-	}
-	
-	// ********** OrphanRemovable2_0 implementation **********
-
-	@Override
-	public boolean isOrphanRemoval() {
-		return (this.getSpecifiedOrphanRemoval() == null) ? this.isDefaultOrphanRemoval() : this.getSpecifiedOrphanRemoval().booleanValue();
-	}
-
-	@Override
-	public boolean isDefaultOrphanRemoval() {
-		return OrphanRemovable2_0.DEFAULT_ORPHAN_REMOVAL;
-	}
-
-	@Override
-	public Boolean getSpecifiedOrphanRemoval() {
-		return this.specifiedOrphanRemoval;
-	}
-
-	@Override
-	public void setSpecifiedOrphanRemoval(Boolean newOrphanRemoval) {
-		Boolean old = this.specifiedOrphanRemoval;
-		this.specifiedOrphanRemoval = newOrphanRemoval;
-		this.resourceAttributeMapping.setOrphanRemoval(newOrphanRemoval);
-		firePropertyChanged(OrphanRemovable2_0.SPECIFIED_ORPHAN_REMOVAL_PROPERTY, old, newOrphanRemoval);
-	}
-	
-	protected void setSpecifiedOrphanRemoval_(Boolean newOrphanRemoval) {
-		Boolean old = this.specifiedOrphanRemoval;
-		this.specifiedOrphanRemoval = newOrphanRemoval;
-		firePropertyChanged(OrphanRemovable2_0.SPECIFIED_ORPHAN_REMOVAL_PROPERTY, old, newOrphanRemoval);
-	}
-	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/orm/OrmEclipseLinkOneToOneMapping2_0.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/orm/OrmEclipseLinkOneToOneMapping2_0.java
deleted file mode 100644
index 7d8ea15..0000000
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/orm/OrmEclipseLinkOneToOneMapping2_0.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2009 Oracle. 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:
-*     Oracle - initial API and implementation
-*******************************************************************************/
-package org.eclipse.jpt.eclipselink.core.internal.v2_0.context.orm;
-
-import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute;
-import org.eclipse.jpt.core.jpa2.context.OrphanRemovable2_0;
-import org.eclipse.jpt.eclipselink.core.internal.context.orm.OrmEclipseLinkOneToOneMapping;
-import org.eclipse.jpt.eclipselink.core.resource.orm.XmlOneToOne;
-
-/**
- *  OrmEclipseLinkOneToOneMapping2_0
- */
-public class OrmEclipseLinkOneToOneMapping2_0 extends OrmEclipseLinkOneToOneMapping
-{
-	protected Boolean specifiedOrphanRemoval;
-	
-	public OrmEclipseLinkOneToOneMapping2_0(OrmPersistentAttribute parent, XmlOneToOne resourceMapping) {
-		super(parent, resourceMapping);
-	}
-	
-	@Override
-	public void update() {
-		super.update();
-		this.setSpecifiedOrphanRemoval_(this.getResourceOrphanRemoval());
-	}
-	
-	protected Boolean getResourceOrphanRemoval() {
-		return this.resourceAttributeMapping.getOrphanRemoval();
-	}
-	
-	// ********** OrphanRemovable2_0 implementation **********
-
-	@Override
-	public boolean isOrphanRemoval() {
-		return (this.getSpecifiedOrphanRemoval() == null) ? this.isDefaultOrphanRemoval() : this.getSpecifiedOrphanRemoval().booleanValue();
-	}
-
-	@Override
-	public boolean isDefaultOrphanRemoval() {
-		return OrphanRemovable2_0.DEFAULT_ORPHAN_REMOVAL;
-	}
-
-	@Override
-	public Boolean getSpecifiedOrphanRemoval() {
-		return this.specifiedOrphanRemoval;
-	}
-
-	@Override
-	public void setSpecifiedOrphanRemoval(Boolean newOrphanRemoval) {
-		Boolean old = this.specifiedOrphanRemoval;
-		this.specifiedOrphanRemoval = newOrphanRemoval;
-		this.resourceAttributeMapping.setOrphanRemoval(newOrphanRemoval);
-		firePropertyChanged(OrphanRemovable2_0.SPECIFIED_ORPHAN_REMOVAL_PROPERTY, old, newOrphanRemoval);
-	}
-	
-	protected void setSpecifiedOrphanRemoval_(Boolean newOrphanRemoval) {
-		Boolean old = this.specifiedOrphanRemoval;
-		this.specifiedOrphanRemoval = newOrphanRemoval;
-		firePropertyChanged(OrphanRemovable2_0.SPECIFIED_ORPHAN_REMOVAL_PROPERTY, old, newOrphanRemoval);
-	}
-	
-}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/orm/VirtualEclipseLinkXmlOneToMany2_0.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/orm/VirtualEclipseLinkXmlOneToMany2_0.java
index a11b0f6..f92eb81 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/orm/VirtualEclipseLinkXmlOneToMany2_0.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/orm/VirtualEclipseLinkXmlOneToMany2_0.java
@@ -11,6 +11,9 @@
 
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.jpt.core.context.orm.OrmTypeMapping;
+import org.eclipse.jpt.core.jpa2.context.OneToManyMapping2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.resource.orm.AccessType;
 import org.eclipse.jpt.core.resource.orm.CascadeType;
 import org.eclipse.jpt.core.resource.orm.FetchType;
@@ -87,20 +90,25 @@
 	public void setCascade(CascadeType value) {
 		this.virtualXmlOneToMany.setCascade(value);
 	}
+	
+	private JavaOrphanRemovable2_0 getOrphanRemovalOf(OneToManyMapping2_0 oneToManyMapping) {
+		return ((JavaOrphanRemovalHolder2_0) oneToManyMapping).getOrphanRemoval();
+	}
 
 	@Override
 	public Boolean getOrphanRemoval() {
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(this.javaAttributeMapping);
 		if (this.isOrmMetadataComplete()) {
-			return this.javaAttributeMapping.isDefaultOrphanRemoval();
+			return mappingsOrphanRemoval.isDefaultOrphanRemoval();
 		}
-		return this.javaAttributeMapping.isOrphanRemoval();
+		return mappingsOrphanRemoval.isOrphanRemoval();
 	}
 
 	@Override
 	public void setOrphanRemoval(Boolean newOrphanRemoval) {
 		throw new UnsupportedOperationException("cannot set values on a virtual mapping"); //$NON-NLS-1$
 	}
-	
+
 	@Override
 	public XmlJoinTable getJoinTable() {
 		return this.virtualXmlOneToMany.getJoinTable();
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/orm/VirtualEclipseLinkXmlOneToOne2_0.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/orm/VirtualEclipseLinkXmlOneToOne2_0.java
index 23831be..83a7960 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/orm/VirtualEclipseLinkXmlOneToOne2_0.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/v2_0/context/orm/VirtualEclipseLinkXmlOneToOne2_0.java
@@ -10,7 +10,10 @@
 package org.eclipse.jpt.eclipselink.core.internal.v2_0.context.orm;
 
 import org.eclipse.emf.common.util.EList;
+import org.eclipse.jpt.core.jpa2.context.OneToOneMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaOneToOneMapping2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.context.orm.OrmTypeMapping;
 import org.eclipse.jpt.core.resource.orm.AccessType;
 import org.eclipse.jpt.core.resource.orm.CascadeType;
@@ -102,12 +105,17 @@
 		this.virtualXmlOneToOne.setCascade(value);
 	}
 	
+	private JavaOrphanRemovable2_0 getOrphanRemovalOf(OneToOneMapping2_0 oneToOneMapping) {
+		return ((JavaOrphanRemovalHolder2_0) oneToOneMapping).getOrphanRemoval();
+	}
+	
 	@Override
 	public Boolean getOrphanRemoval() {
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(this.javaAttributeMapping);
 		if (this.isOrmMetadataComplete()) {
-			return this.javaAttributeMapping.isDefaultOrphanRemoval();
+			return mappingsOrphanRemoval.isDefaultOrphanRemoval();
 		}
-		return this.javaAttributeMapping.isOrphanRemoval();
+		return mappingsOrphanRemoval.isOrphanRemoval();
 	}
 
 	@Override
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkOneToManyMapping2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkOneToManyMapping2_0Composite.java
index 2aea1b0..c953426 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkOneToManyMapping2_0Composite.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkOneToManyMapping2_0Composite.java
@@ -9,6 +9,9 @@
 *******************************************************************************/
 package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.java;
 
+import org.eclipse.jpt.core.jpa2.context.OrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.OrphanRemovalHolder2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOneToManyMapping2_0;
 import org.eclipse.jpt.eclipselink.core.context.EclipseLinkJoinFetch;
 import org.eclipse.jpt.eclipselink.core.context.EclipseLinkOneToManyRelationshipReference;
 import org.eclipse.jpt.eclipselink.core.context.EclipseLinkPrivateOwned;
@@ -104,7 +107,7 @@
 		new FetchTypeComposite(this, this.addPane(container, groupBoxMargin));
 		new EclipseLinkJoinFetchComposite(this, this.buildJoinFetchableHolder(), this.addPane(container, groupBoxMargin));
 		new EclipseLinkPrivateOwnedComposite(this, this.buildPrivateOwnableHolder(), this.addPane(container, groupBoxMargin));
-		new OrphanRemoval2_0Composite(this, this.addPane(container, groupBoxMargin));
+		new OrphanRemoval2_0Composite(this, this.buildOrphanRemovableHolder(), this.addPane(container, groupBoxMargin));
 		new CascadeComposite(this, this.buildCascadeHolder(), this.addSubPane(container, 5));
 		new OrderingComposite(this, container);
 	}
@@ -136,5 +139,12 @@
 		};
 	}
 	
-}
-	
\ No newline at end of file
+	protected PropertyValueModel<OrphanRemovable2_0> buildOrphanRemovableHolder() {
+		return new PropertyAspectAdapter<EclipseLinkOneToManyMapping2_0, OrphanRemovable2_0>(this.getSubjectHolder()) {
+			@Override
+			protected OrphanRemovable2_0 buildValue_() {
+				return ((OrphanRemovalHolder2_0) this.subject).getOrphanRemoval();
+			}
+		};
+	}
+}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkOneToOneMapping2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkOneToOneMapping2_0Composite.java
index c89394e..52c7e80 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkOneToOneMapping2_0Composite.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/java/JavaEclipseLinkOneToOneMapping2_0Composite.java
@@ -9,6 +9,8 @@
 *******************************************************************************/
 package org.eclipse.jpt.eclipselink.ui.internal.v2_0.details.java;
 
+import org.eclipse.jpt.core.jpa2.context.OrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.OrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaOneToOneMapping2_0;
 import org.eclipse.jpt.eclipselink.core.context.EclipseLinkJoinFetch;
 import org.eclipse.jpt.eclipselink.core.context.EclipseLinkOneToOneMapping;
@@ -101,7 +103,7 @@
 		new EclipseLinkJoinFetchComposite(this, this.buildJoinFetchableHolder(), this.addPane(container, groupBoxMargin));
 		new OptionalComposite(this, this.addPane(container, groupBoxMargin));
 		new EclipseLinkPrivateOwnedComposite(this, this.buildPrivateOwnableHolder(), this.addPane(container, groupBoxMargin));
-		new OrphanRemoval2_0Composite(this, this.addPane(container, groupBoxMargin));
+		new OrphanRemoval2_0Composite(this, this.buildOrphanRemovableHolder(), this.addPane(container, groupBoxMargin));
 		new CascadeComposite(this, this.buildCascadeHolder(),  this.addSubPane(container, 5));
 	}
 	
@@ -123,5 +125,13 @@
 			}
 		};
 	}
-
+	
+	protected PropertyValueModel<OrphanRemovable2_0> buildOrphanRemovableHolder() {
+		return new PropertyAspectAdapter<JavaOneToOneMapping2_0, OrphanRemovable2_0>(this.getSubjectHolder()) {
+			@Override
+			protected OrphanRemovable2_0 buildValue_() {
+				return ((OrphanRemovalHolder2_0) this.subject).getOrphanRemoval();
+			}
+		};
+	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkOneToManyMapping2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkOneToManyMapping2_0Composite.java
index 12afafc..dc553d6 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkOneToManyMapping2_0Composite.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkOneToManyMapping2_0Composite.java
@@ -11,6 +11,8 @@
 
 import org.eclipse.jpt.core.context.AccessHolder;
 import org.eclipse.jpt.core.context.OneToManyMapping;
+import org.eclipse.jpt.core.jpa2.context.OrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.OrphanRemovalHolder2_0;
 import org.eclipse.jpt.eclipselink.core.v2_0.context.EclipseLinkOneToManyMapping2_0;
 import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkJoinFetchComposite;
 import org.eclipse.jpt.eclipselink.ui.internal.details.EclipseLinkOneToManyJoiningStrategyPane;
@@ -110,7 +112,7 @@
 		new FetchTypeComposite(this, this.addPane(container, groupBoxMargin));
 		new EclipseLinkJoinFetchComposite(this, this.buildJoinFetchableHolder(), this.addPane(container, groupBoxMargin));
 		new EclipseLinkPrivateOwnedComposite(this, this.buildPrivateOwnableHolder(), this.addPane(container, groupBoxMargin));
-		new OrphanRemoval2_0Composite(this, this.addPane(container, groupBoxMargin));
+		new OrphanRemoval2_0Composite(this, this.buildOrphanRemovableHolder(), this.addPane(container, groupBoxMargin));
 		new CascadeComposite(this, this.buildCascadeHolder(), this.addSubPane(container, 5));
 		new OrderingComposite(this, container);
 	}
@@ -123,4 +125,13 @@
 			}
 		};
 	}
-}
\ No newline at end of file
+	
+	protected PropertyValueModel<OrphanRemovable2_0> buildOrphanRemovableHolder() {
+		return new PropertyAspectAdapter<T, OrphanRemovable2_0>(this.getSubjectHolder()) {
+			@Override
+			protected OrphanRemovable2_0 buildValue_() {
+				return ((OrphanRemovalHolder2_0) this.subject).getOrphanRemoval();
+			}
+		};
+	}
+}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkOneToOneMapping2_0Composite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkOneToOneMapping2_0Composite.java
index 57a9473..5b530e1 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkOneToOneMapping2_0Composite.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/v2_0/details/orm/OrmEclipseLinkOneToOneMapping2_0Composite.java
@@ -11,6 +11,8 @@
 
 import org.eclipse.jpt.core.context.AccessHolder;
 import org.eclipse.jpt.core.context.OneToOneMapping;
+import org.eclipse.jpt.core.jpa2.context.OrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.OrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaOneToOneMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmOneToOneMapping2_0;
 import org.eclipse.jpt.eclipselink.core.context.EclipseLinkJoinFetch;
@@ -101,7 +103,7 @@
 		new EclipseLinkJoinFetchComposite(this, buildJoinFetchableHolder(), addPane(container, groupBoxMargin));
 		new OptionalComposite(this, addPane(container, groupBoxMargin));
 		new EclipseLinkPrivateOwnedComposite(this, buildPrivateOwnableHolder(), addPane(container, groupBoxMargin));
-		new OrphanRemoval2_0Composite(this, this.addPane(container, groupBoxMargin));
+		new OrphanRemoval2_0Composite(this, this.buildOrphanRemovableHolder(), this.addPane(container, groupBoxMargin));
 		new CascadeComposite(this, buildCascadeHolder(), addSubPane(container, 5));
 	}
 	
@@ -132,5 +134,13 @@
 			}
 		};
 	}
-
+	
+	protected PropertyValueModel<OrphanRemovable2_0> buildOrphanRemovableHolder() {
+		return new PropertyAspectAdapter<T, OrphanRemovable2_0>(this.getSubjectHolder()) {
+			@Override
+			protected OrphanRemovable2_0 buildValue_() {
+				return ((OrphanRemovalHolder2_0) this.subject).getOrphanRemoval();
+			}
+		};
+	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jpa2/details/OrphanRemoval2_0Composite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jpa2/details/OrphanRemoval2_0Composite.java
index 7cb400c..d4f0c9d 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jpa2/details/OrphanRemoval2_0Composite.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jpa2/details/OrphanRemoval2_0Composite.java
@@ -9,8 +9,11 @@
 *******************************************************************************/
 package org.eclipse.jpt.ui.internal.jpa2.details;
 
+import org.eclipse.jpt.core.context.RelationshipMapping;
 import org.eclipse.jpt.core.jpa2.context.OrphanRemovable2_0;
 import org.eclipse.jpt.ui.internal.details.JptUiDetailsMessages;
+import org.eclipse.jpt.ui.internal.jpa2.details.java.JavaOneToOneMapping2_0Composite;
+import org.eclipse.jpt.ui.internal.jpa2.details.orm.OrmOneToOneMapping2_0Composite;
 import org.eclipse.jpt.ui.internal.widgets.FormPane;
 import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
 import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
@@ -20,7 +23,19 @@
 import org.eclipse.swt.widgets.Composite;
 
 /**
- *  OrphanRemoval2_0Composite
+ * Here the layout of this pane:
+ * <pre>
+ * -----------------------------------------------------------------------------
+ * | ------------------------------------------------------------------------- |
+ * | |                                                                       | |
+ * | | [X]  Orphan removal (true/false)                                    | |
+ * | |                                                                       | |
+ * | ------------------------------------------------------------------------- |
+ * -----------------------------------------------------------------------------</pre>
+ *
+ * @see {@link OrphanRemovable2_0}
+ * @see {@link JavaOneToOneMapping2_0Composite} - A container of this widget
+ * @see {@link OrmOneToOneMapping2_0Composite} - A container of this widget
  */
 public class OrphanRemoval2_0Composite extends FormPane<OrphanRemovable2_0>
 {
@@ -31,10 +46,10 @@
 	 * @param parent The parent container
 	 */
 	public OrphanRemoval2_0Composite(
-							FormPane<? extends OrphanRemovable2_0> parentPane,
-							Composite parent) 
-	{
-		super(parentPane, parent);
+							FormPane<? extends RelationshipMapping> parentPane,
+							PropertyValueModel<? extends OrphanRemovable2_0> subjectHolder,
+							Composite parent) {
+		super(parentPane, subjectHolder, parent);
 	}
 
 	@Override
@@ -49,7 +64,10 @@
 		);
 	}
 	private WritablePropertyValueModel<Boolean> buildOrphanRemovalHolder() {
-		return new PropertyAspectAdapter<OrphanRemovable2_0, Boolean>(this.getSubjectHolder(), OrphanRemovable2_0.SPECIFIED_ORPHAN_REMOVAL_PROPERTY) {
+		return new PropertyAspectAdapter<OrphanRemovable2_0, Boolean>(
+				this.getSubjectHolder(), 
+				OrphanRemovable2_0.DEFAULT_ORPHAN_REMOVAL_PROPERTY,
+				OrphanRemovable2_0.SPECIFIED_ORPHAN_REMOVAL_PROPERTY) {
 			@Override
 			protected Boolean buildValue_() {
 				return this.subject.getSpecifiedOrphanRemoval();
@@ -63,6 +81,7 @@
 	}
 
 	private PropertyValueModel<String> buildOrphanRemovalStringHolder() {
+		
 		return new TransformationPropertyValueModel<Boolean, String>(this.buildDefaultOrphanRemovalHolder()) {
 			@Override
 			protected String transform(Boolean value) {
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jpa2/details/java/JavaOneToManyMapping2_0Composite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jpa2/details/java/JavaOneToManyMapping2_0Composite.java
index c587b6b..7debddc 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jpa2/details/java/JavaOneToManyMapping2_0Composite.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jpa2/details/java/JavaOneToManyMapping2_0Composite.java
@@ -9,6 +9,8 @@
 *******************************************************************************/
 package org.eclipse.jpt.ui.internal.jpa2.details.java;
 
+import org.eclipse.jpt.core.jpa2.context.OrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.OrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaOneToManyMapping2_0;
 import org.eclipse.jpt.ui.WidgetFactory;
 import org.eclipse.jpt.ui.internal.details.AbstractOneToManyMappingComposite;
@@ -18,6 +20,7 @@
 import org.eclipse.jpt.ui.internal.details.OrderingComposite;
 import org.eclipse.jpt.ui.internal.details.TargetEntityComposite;
 import org.eclipse.jpt.ui.internal.jpa2.details.OrphanRemoval2_0Composite;
+import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
 import org.eclipse.jpt.utility.model.value.PropertyValueModel;
 import org.eclipse.swt.widgets.Composite;
 
@@ -83,9 +86,17 @@
 		new TargetEntityComposite(this, this.addPane(container, groupBoxMargin));
 		new OneToManyJoiningStrategyPane(this, this.buildJoiningHolder(), container);
 		new FetchTypeComposite(this, this.addPane(container, groupBoxMargin));
-		new OrphanRemoval2_0Composite(this, this.addPane(container, groupBoxMargin));
+		new OrphanRemoval2_0Composite(this, this.buildOrphanRemovableHolder(), this.addPane(container, groupBoxMargin));
 		new CascadeComposite(this, this.buildCascadeHolder(), this.addSubPane(container, 5));
 		new OrderingComposite(this, container);
 	}
-
+	
+	protected PropertyValueModel<OrphanRemovable2_0> buildOrphanRemovableHolder() {
+		return new PropertyAspectAdapter<JavaOneToManyMapping2_0, OrphanRemovable2_0>(this.getSubjectHolder()) {
+			@Override
+			protected OrphanRemovable2_0 buildValue_() {
+				return ((OrphanRemovalHolder2_0) this.subject).getOrphanRemoval();
+			}
+		};
+	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jpa2/details/java/JavaOneToOneMapping2_0Composite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jpa2/details/java/JavaOneToOneMapping2_0Composite.java
index 1ea409e..81b228f 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jpa2/details/java/JavaOneToOneMapping2_0Composite.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jpa2/details/java/JavaOneToOneMapping2_0Composite.java
@@ -1,5 +1,7 @@
 package org.eclipse.jpt.ui.internal.jpa2.details.java;
 
+import org.eclipse.jpt.core.jpa2.context.OrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.OrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaOneToOneMapping2_0;
 import org.eclipse.jpt.ui.WidgetFactory;
 import org.eclipse.jpt.ui.internal.details.CascadeComposite;
@@ -10,6 +12,7 @@
 import org.eclipse.jpt.ui.internal.jpa2.details.AbstractOneToOneMapping2_0Composite;
 import org.eclipse.jpt.ui.internal.jpa2.details.DerivedId2_0Pane;
 import org.eclipse.jpt.ui.internal.jpa2.details.OrphanRemoval2_0Composite;
+import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
 import org.eclipse.jpt.utility.model.value.PropertyValueModel;
 import org.eclipse.swt.widgets.Composite;
 
@@ -84,7 +87,16 @@
 		new OneToOneJoiningStrategyPane(this, this.buildJoiningHolder(), container);
 		new FetchTypeComposite(this, this.addPane(container, groupBoxMargin));
 		new OptionalComposite(this, this.addPane(container, groupBoxMargin));
-		new OrphanRemoval2_0Composite(this, this.addPane(container, groupBoxMargin));
+		new OrphanRemoval2_0Composite(this, this.buildOrphanRemovableHolder(), this.addPane(container, groupBoxMargin));
 		new CascadeComposite(this, this.buildCascadeHolder(),  this.addSubPane(container, 5));
 	}
+	
+	protected PropertyValueModel<OrphanRemovable2_0> buildOrphanRemovableHolder() {
+		return new PropertyAspectAdapter<JavaOneToOneMapping2_0, OrphanRemovable2_0>(this.getSubjectHolder()) {
+			@Override
+			protected OrphanRemovable2_0 buildValue_() {
+				return ((OrphanRemovalHolder2_0) this.subject).getOrphanRemoval();
+			}
+		};
+	}
 }
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jpa2/details/orm/OrmOneToManyMapping2_0Composite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jpa2/details/orm/OrmOneToManyMapping2_0Composite.java
index 81e5f9b..7b9f005 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jpa2/details/orm/OrmOneToManyMapping2_0Composite.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jpa2/details/orm/OrmOneToManyMapping2_0Composite.java
@@ -12,6 +12,8 @@
 import org.eclipse.jpt.core.context.AccessHolder;
 import org.eclipse.jpt.core.context.OneToManyMapping;
 import org.eclipse.jpt.core.context.orm.OrmOneToManyMapping;
+import org.eclipse.jpt.core.jpa2.context.OrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.OrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmOneToManyMapping2_0;
 import org.eclipse.jpt.ui.WidgetFactory;
 import org.eclipse.jpt.ui.internal.details.AbstractOneToManyMappingComposite;
@@ -94,7 +96,7 @@
 		new OneToManyJoiningStrategyPane(this, this.buildJoiningHolder(), container);
 		new AccessTypeComposite(this, this.buildAccessHolderHolder(), this.addPane(container, groupBoxMargin));
 		new FetchTypeComposite(this, this.addPane(container, groupBoxMargin));
-		new OrphanRemoval2_0Composite(this, this.addPane(container, groupBoxMargin));
+		new OrphanRemoval2_0Composite(this, this.buildOrphanRemovableHolder(), this.addPane(container, groupBoxMargin));
 		new CascadeComposite(this, this.buildCascadeHolder(), this.addSubPane(container, 5));
 		new OrderingComposite(this, container);
 	}
@@ -107,4 +109,13 @@
 			}
 		};
 	}
-}
\ No newline at end of file
+	
+	protected PropertyValueModel<OrphanRemovable2_0> buildOrphanRemovableHolder() {
+		return new PropertyAspectAdapter<T, OrphanRemovable2_0>(this.getSubjectHolder()) {
+			@Override
+			protected OrphanRemovable2_0 buildValue_() {
+				return ((OrphanRemovalHolder2_0) this.subject).getOrphanRemoval();
+			}
+		};
+	}
+}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jpa2/details/orm/OrmOneToOneMapping2_0Composite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jpa2/details/orm/OrmOneToOneMapping2_0Composite.java
index c62b573..9d9b5bc 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jpa2/details/orm/OrmOneToOneMapping2_0Composite.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/jpa2/details/orm/OrmOneToOneMapping2_0Composite.java
@@ -11,6 +11,8 @@
 
 import org.eclipse.jpt.core.context.AccessHolder;
 import org.eclipse.jpt.core.context.orm.OrmOneToOneMapping;
+import org.eclipse.jpt.core.jpa2.context.OrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.OrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmOneToOneMapping2_0;
 import org.eclipse.jpt.ui.WidgetFactory;
 import org.eclipse.jpt.ui.internal.details.AccessTypeComposite;
@@ -105,7 +107,7 @@
 		new AccessTypeComposite(this, this.buildAccessHolderHolder(), this.addPane(container, groupBoxMargin));
 		new FetchTypeComposite(this, this.addPane(container, groupBoxMargin));
 		new OptionalComposite(this, this.addPane(container, groupBoxMargin));
-		new OrphanRemoval2_0Composite(this, this.addPane(container, groupBoxMargin));
+		new OrphanRemoval2_0Composite(this, this.buildOrphanRemovableHolder(), this.addPane(container, groupBoxMargin));
 		new CascadeComposite(this, this.buildCascadeHolder(),  this.addSubPane(container, 5));
 	}
 		
@@ -117,4 +119,13 @@
 			}
 		};
 	}
+	
+	protected PropertyValueModel<OrphanRemovable2_0> buildOrphanRemovableHolder() {
+		return new PropertyAspectAdapter<T, OrphanRemovable2_0>(this.getSubjectHolder()) {
+			@Override
+			protected OrphanRemovable2_0 buildValue_() {
+				return ((OrphanRemovalHolder2_0) this.subject).getOrphanRemoval();
+			}
+		};
+	}
 }
diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/java/GenericJavaOneToManyMapping2_0Tests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/java/GenericJavaOneToManyMapping2_0Tests.java
index 4e60bfe..05290c3 100644
--- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/java/GenericJavaOneToManyMapping2_0Tests.java
+++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/java/GenericJavaOneToManyMapping2_0Tests.java
@@ -16,6 +16,8 @@
 import org.eclipse.jpt.core.context.OneToManyMapping;
 import org.eclipse.jpt.core.context.PersistentAttribute;
 import org.eclipse.jpt.core.jpa2.context.OneToManyMapping2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.jpa2.resource.java.OneToMany2_0Annotation;
 import org.eclipse.jpt.core.resource.java.JPA;
 import org.eclipse.jpt.core.resource.java.JavaResourcePersistentAttribute;
@@ -176,6 +178,10 @@
 		AttributeMapping stateFooMapping = oneToManyMapping.getResolvedTargetEntity().resolveAttributeMapping("state.foo");
 		assertEquals("foo", stateFooMapping.getName());
 	}
+	
+	private JavaOrphanRemovable2_0 getOrphanRemovalOf(OneToManyMapping2_0 oneToManyMapping) {
+		return ((JavaOrphanRemovalHolder2_0) oneToManyMapping).getOrphanRemoval();
+	}
 
 	public void testDefaultOneToManyGetDefaultOrphanRemoval() throws Exception {
 		this.createTestEntityWithValidOneToManyMapping();
@@ -183,7 +189,7 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToManyMapping2_0 oneToManyMapping = (OneToManyMapping2_0) persistentAttribute.getMapping();
-		assertEquals(false, oneToManyMapping.isDefaultOrphanRemoval());
+		assertEquals(false, this.getOrphanRemovalOf(oneToManyMapping).isDefaultOrphanRemoval());
 	}
 	
 	public void testSpecifiedOneToManyGetDefaultOrphanRemoval() throws Exception {
@@ -192,7 +198,7 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToManyMapping2_0 oneToManyMapping = (OneToManyMapping2_0) persistentAttribute.getSpecifiedMapping();
-		assertEquals(false, oneToManyMapping.isDefaultOrphanRemoval());
+		assertEquals(false, this.getOrphanRemovalOf(oneToManyMapping).isDefaultOrphanRemoval());
 	}
 	
 	public void testGetOrphanRemoval() throws Exception {
@@ -201,11 +207,12 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToManyMapping2_0 oneToManyMapping = (OneToManyMapping2_0) persistentAttribute.getSpecifiedMapping();
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToManyMapping);
 
-		assertEquals(false, oneToManyMapping.isOrphanRemoval());
+		assertEquals(false, mappingsOrphanRemoval.isOrphanRemoval());
 		
-		oneToManyMapping.setSpecifiedOrphanRemoval(Boolean.TRUE);
-		assertEquals(true, oneToManyMapping.isOrphanRemoval());
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(Boolean.TRUE);
+		assertEquals(true, mappingsOrphanRemoval.isOrphanRemoval());
 	}
 	
 	public void testGetSpecifiedOrphanRemoval() throws Exception {
@@ -214,15 +221,16 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToManyMapping2_0 oneToManyMapping = (OneToManyMapping2_0) persistentAttribute.getSpecifiedMapping();
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToManyMapping);
 
-		assertNull(oneToManyMapping.getSpecifiedOrphanRemoval());
+		assertNull(mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		
 		JavaResourcePersistentType typeResource = getJpaProject().getJavaResourcePersistentType(FULLY_QUALIFIED_TYPE_NAME);
 		JavaResourcePersistentAttribute attributeResource = typeResource.persistableAttributes().next();
 		OneToMany2_0Annotation oneToMany = (OneToMany2_0Annotation) attributeResource.getAnnotation(JPA.ONE_TO_MANY);
 		oneToMany.setOrphanRemoval(Boolean.FALSE);
 		
-		assertEquals(Boolean.FALSE, oneToManyMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.FALSE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 	}
 	
 	public void testGetSpecifiedOrphanRemoval2() throws Exception {
@@ -231,8 +239,9 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToManyMapping2_0 oneToManyMapping = (OneToManyMapping2_0) persistentAttribute.getSpecifiedMapping();
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToManyMapping);
 
-		assertEquals(Boolean.FALSE, oneToManyMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.FALSE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 	}
 
 	public void testSetSpecifiedOrphanRemoval() throws Exception {
@@ -241,9 +250,10 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToManyMapping2_0 oneToManyMapping = (OneToManyMapping2_0) persistentAttribute.getMapping();
-		assertNull(oneToManyMapping.getSpecifiedOrphanRemoval());
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToManyMapping);
+		assertNull(mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		
-		oneToManyMapping.setSpecifiedOrphanRemoval(Boolean.TRUE);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(Boolean.TRUE);
 		
 		JavaResourcePersistentType typeResource = getJpaProject().getJavaResourcePersistentType(FULLY_QUALIFIED_TYPE_NAME);
 		JavaResourcePersistentAttribute attributeResource = typeResource.persistableAttributes().next();
@@ -251,7 +261,7 @@
 		
 		assertEquals(Boolean.TRUE, oneToMany.getOrphanRemoval());
 		
-		oneToManyMapping.setSpecifiedOrphanRemoval(null);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(null);
 		assertNotNull(attributeResource.getAnnotation(JPA.ONE_TO_MANY)); 	// .getElement);
 	}
 	
@@ -261,9 +271,10 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToManyMapping2_0 oneToManyMapping = (OneToManyMapping2_0) persistentAttribute.getMapping();
-		assertNull(oneToManyMapping.getSpecifiedOrphanRemoval());
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToManyMapping);
+		assertNull(mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		
-		oneToManyMapping.setSpecifiedOrphanRemoval(Boolean.TRUE);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(Boolean.TRUE);
 		
 		JavaResourcePersistentType typeResource = getJpaProject().getJavaResourcePersistentType(FULLY_QUALIFIED_TYPE_NAME);
 		JavaResourcePersistentAttribute attributeResource = typeResource.persistableAttributes().next();
@@ -272,9 +283,9 @@
 		assertEquals(Boolean.TRUE, oneToMany.getOrphanRemoval());
 		
 		oneToManyMapping = (OneToManyMapping2_0) persistentAttribute.getMapping();
-		assertEquals(Boolean.TRUE, oneToManyMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.TRUE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 
-		oneToManyMapping.setSpecifiedOrphanRemoval(null);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(null);
 		assertNotNull(attributeResource.getAnnotation(JPA.ONE_TO_MANY));
 		
 		oneToManyMapping = (OneToManyMapping2_0) persistentAttribute.getMapping();
@@ -286,18 +297,19 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToManyMapping2_0 oneToManyMapping = (OneToManyMapping2_0) persistentAttribute.getSpecifiedMapping();
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToManyMapping);
 
-		assertNull(oneToManyMapping.getSpecifiedOrphanRemoval());
+		assertNull(mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 
 		JavaResourcePersistentType typeResource = getJpaProject().getJavaResourcePersistentType(FULLY_QUALIFIED_TYPE_NAME);
 		JavaResourcePersistentAttribute attributeResource = typeResource.persistableAttributes().next();
 		OneToMany2_0Annotation oneToMany = (OneToMany2_0Annotation) attributeResource.getAnnotation(JPA.ONE_TO_MANY);
 		oneToMany.setOrphanRemoval(Boolean.FALSE);
 
-		assertEquals(Boolean.FALSE, oneToManyMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.FALSE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		
 		oneToMany.setOrphanRemoval(null);
-		assertNull(oneToManyMapping.getSpecifiedOrphanRemoval());
+		assertNull(mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		assertSame(oneToManyMapping, persistentAttribute.getSpecifiedMapping());
 		
 		oneToMany.setOrphanRemoval(Boolean.FALSE);
diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/java/GenericJavaOneToOneMapping2_0Tests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/java/GenericJavaOneToOneMapping2_0Tests.java
index a3fce97..e0657fe 100644
--- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/java/GenericJavaOneToOneMapping2_0Tests.java
+++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/java/GenericJavaOneToOneMapping2_0Tests.java
@@ -23,6 +23,8 @@
 import org.eclipse.jpt.core.jpa2.context.OneToOneMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaManyToOneMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaOneToOneMapping2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.jpa2.resource.java.JPA2_0;
 import org.eclipse.jpt.core.jpa2.resource.java.MapsId2_0Annotation;
 import org.eclipse.jpt.core.jpa2.resource.java.OneToOne2_0Annotation;
@@ -374,6 +376,10 @@
 		AttributeMapping stateFooMapping = oneToOneMapping.getResolvedTargetEntity().resolveAttributeMapping("state.foo");
 		assertEquals("foo", stateFooMapping.getName());
 	}
+	
+	private JavaOrphanRemovable2_0 getOrphanRemovalOf(OneToOneMapping2_0 oneToOneMapping) {
+		return ((JavaOrphanRemovalHolder2_0) oneToOneMapping).getOrphanRemoval();
+	}
 
 	public void testDefaultOneToOneGetDefaultOrphanRemoval() throws Exception {
 		this.createTestEntity();
@@ -381,7 +387,7 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToOneMapping2_0 oneToOneMapping = (OneToOneMapping2_0) persistentAttribute.getMapping();
-		assertEquals(false, oneToOneMapping.isDefaultOrphanRemoval());
+		assertEquals(false, this.getOrphanRemovalOf(oneToOneMapping).isDefaultOrphanRemoval());
 	}
 	
 	public void testSpecifiedOneToOneGetDefaultOrphanRemoval() throws Exception {
@@ -390,7 +396,7 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToOneMapping2_0 oneToOneMapping = (OneToOneMapping2_0) persistentAttribute.getSpecifiedMapping();
-		assertEquals(false, oneToOneMapping.isDefaultOrphanRemoval());
+		assertEquals(false, this.getOrphanRemovalOf(oneToOneMapping).isDefaultOrphanRemoval());
 	}
 	
 	public void testGetOrphanRemoval() throws Exception {
@@ -399,11 +405,12 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToOneMapping2_0 oneToOneMapping = (OneToOneMapping2_0) persistentAttribute.getSpecifiedMapping();
-
-		assertEquals(false, oneToOneMapping.isOrphanRemoval());
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToOneMapping);
 		
-		oneToOneMapping.setSpecifiedOrphanRemoval(Boolean.TRUE);
-		assertEquals(true, oneToOneMapping.isOrphanRemoval());
+		assertEquals(false, mappingsOrphanRemoval.isOrphanRemoval());
+		
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(Boolean.TRUE);
+		assertEquals(true, mappingsOrphanRemoval.isOrphanRemoval());
 	}
 	
 	public void testGetSpecifiedOrphanRemoval() throws Exception {
@@ -412,15 +419,16 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToOneMapping2_0 oneToOneMapping = (OneToOneMapping2_0) persistentAttribute.getSpecifiedMapping();
+		 JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToOneMapping);
 
-		assertNull(oneToOneMapping.getSpecifiedOrphanRemoval());
+		assertNull(mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		
 		JavaResourcePersistentType typeResource = getJpaProject().getJavaResourcePersistentType(FULLY_QUALIFIED_TYPE_NAME);
 		JavaResourcePersistentAttribute attributeResource = typeResource.persistableAttributes().next();
 		OneToOne2_0Annotation oneToOne = (OneToOne2_0Annotation) attributeResource.getAnnotation(JPA.ONE_TO_ONE);
 		oneToOne.setOrphanRemoval(Boolean.FALSE);
 		
-		assertEquals(Boolean.FALSE, oneToOneMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.FALSE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 	}
 	
 	public void testGetSpecifiedOrphanRemoval2() throws Exception {
@@ -430,7 +438,7 @@
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToOneMapping2_0 oneToOneMapping = (OneToOneMapping2_0) persistentAttribute.getSpecifiedMapping();
 
-		assertEquals(Boolean.FALSE, oneToOneMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.FALSE, this.getOrphanRemovalOf(oneToOneMapping).getSpecifiedOrphanRemoval());
 	}
 
 	public void testSetSpecifiedOrphanRemoval() throws Exception {
@@ -439,9 +447,11 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToOneMapping2_0 oneToOneMapping = (OneToOneMapping2_0) persistentAttribute.getMapping();
-		assertNull(oneToOneMapping.getSpecifiedOrphanRemoval());
+		 JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToOneMapping);
+		 
+		assertNull(mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		
-		oneToOneMapping.setSpecifiedOrphanRemoval(Boolean.TRUE);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(Boolean.TRUE);
 		
 		JavaResourcePersistentType typeResource = getJpaProject().getJavaResourcePersistentType(FULLY_QUALIFIED_TYPE_NAME);
 		JavaResourcePersistentAttribute attributeResource = typeResource.persistableAttributes().next();
@@ -449,7 +459,7 @@
 		
 		assertEquals(Boolean.TRUE, oneToOne.getOrphanRemoval());
 		
-		oneToOneMapping.setSpecifiedOrphanRemoval(null);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(null);
 		assertNotNull(attributeResource.getAnnotation(JPA.ONE_TO_ONE)); 	// .getElement);
 	}
 	
@@ -459,9 +469,11 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToOneMapping2_0 oneToOneMapping = (OneToOneMapping2_0) persistentAttribute.getMapping();
-		assertNull(oneToOneMapping.getSpecifiedOrphanRemoval());
+		 JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToOneMapping);
+		 
+		assertNull(mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		
-		oneToOneMapping.setSpecifiedOrphanRemoval(Boolean.TRUE);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(Boolean.TRUE);
 		
 		JavaResourcePersistentType typeResource = getJpaProject().getJavaResourcePersistentType(FULLY_QUALIFIED_TYPE_NAME);
 		JavaResourcePersistentAttribute attributeResource = typeResource.persistableAttributes().next();
@@ -470,12 +482,11 @@
 		assertEquals(Boolean.TRUE, oneToOne.getOrphanRemoval());
 		
 		oneToOneMapping = (OneToOneMapping2_0) persistentAttribute.getMapping();
-		assertEquals(Boolean.TRUE, oneToOneMapping.getSpecifiedOrphanRemoval());
+		mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToOneMapping);
+		assertEquals(Boolean.TRUE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 
-		oneToOneMapping.setSpecifiedOrphanRemoval(null);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(null);
 		assertNotNull(attributeResource.getAnnotation(JPA.ONE_TO_ONE));
-		
-		oneToOneMapping = (OneToOneMapping2_0) persistentAttribute.getMapping();
 	}
 
 	public void testGetSpecifiedOrphanRemovalUpdatesFromResourceModelChange() throws Exception {
@@ -484,18 +495,19 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToOneMapping2_0 oneToOneMapping = (OneToOneMapping2_0) persistentAttribute.getSpecifiedMapping();
+		 JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToOneMapping);
 
-		assertNull(oneToOneMapping.getSpecifiedOrphanRemoval());
+		assertNull(mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 
 		JavaResourcePersistentType typeResource = getJpaProject().getJavaResourcePersistentType(FULLY_QUALIFIED_TYPE_NAME);
 		JavaResourcePersistentAttribute attributeResource = typeResource.persistableAttributes().next();
 		OneToOne2_0Annotation oneToOne = (OneToOne2_0Annotation) attributeResource.getAnnotation(JPA.ONE_TO_ONE);
 		oneToOne.setOrphanRemoval(Boolean.FALSE);
 
-		assertEquals(Boolean.FALSE, oneToOneMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.FALSE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		
 		oneToOne.setOrphanRemoval(null);
-		assertNull(oneToOneMapping.getSpecifiedOrphanRemoval());
+		assertNull(mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		assertSame(oneToOneMapping, persistentAttribute.getSpecifiedMapping());
 		
 		oneToOne.setOrphanRemoval(Boolean.FALSE);
diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmOneToManyMapping2_0Tests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmOneToManyMapping2_0Tests.java
index 603df70..a7d16c7 100644
--- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmOneToManyMapping2_0Tests.java
+++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmOneToManyMapping2_0Tests.java
@@ -18,7 +18,10 @@
 import org.eclipse.jpt.core.context.PersistentAttribute;
 import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute;
 import org.eclipse.jpt.core.context.orm.OrmPersistentType;
+import org.eclipse.jpt.core.jpa2.context.OneToManyMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmOneToManyMapping2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.resource.java.JPA;
 import org.eclipse.jpt.core.resource.orm.XmlOneToMany;
 import org.eclipse.jpt.core.tests.internal.projects.TestJavaProject.SourceWriter;
@@ -157,22 +160,27 @@
 		assertEquals("foo", stateFooMapping.getName());
 	}
 	
+	private OrmOrphanRemovable2_0 getOrphanRemovalOf(OneToManyMapping2_0 oneToManyMapping) {
+		return ((OrmOrphanRemovalHolder2_0) oneToManyMapping).getOrphanRemoval();
+	}
+	
 	public void testUpdateSpecifiedOrphanRemoval() throws Exception {
 		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
 		OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.addSpecifiedPersistentAttribute(MappingKeys.ONE_TO_MANY_ATTRIBUTE_MAPPING_KEY, "oneToManyMapping");
 		OrmOneToManyMapping2_0 ormOneToManyMapping = (OrmOneToManyMapping2_0) ormPersistentAttribute.getMapping();
+		OrmOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(ormOneToManyMapping);
 		XmlOneToMany oneToManyResource = getXmlEntityMappings().getEntities().get(0).getAttributes().getOneToManys().get(0);
 		
-		assertEquals(null, ormOneToManyMapping.getSpecifiedOrphanRemoval());
+		assertEquals(null, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		assertEquals(null, oneToManyResource.getOrphanRemoval());
 				
 		//set enumerated in the resource model, verify context model updated
 		oneToManyResource.setOrphanRemoval(Boolean.TRUE);
-		assertEquals(Boolean.TRUE, ormOneToManyMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.TRUE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		assertEquals(Boolean.TRUE, oneToManyResource.getOrphanRemoval());
 	
 		oneToManyResource.setOrphanRemoval(Boolean.FALSE);
-		assertEquals(Boolean.FALSE, ormOneToManyMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.FALSE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		assertEquals(Boolean.FALSE, oneToManyResource.getOrphanRemoval());
 	}
 	
@@ -180,18 +188,19 @@
 		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
 		OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.addSpecifiedPersistentAttribute(MappingKeys.ONE_TO_MANY_ATTRIBUTE_MAPPING_KEY, "oneToManyMapping");
 		OrmOneToManyMapping2_0 ormOneToManyMapping = (OrmOneToManyMapping2_0) ormPersistentAttribute.getMapping();
+		OrmOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(ormOneToManyMapping);
 		XmlOneToMany oneToManyResource = getXmlEntityMappings().getEntities().get(0).getAttributes().getOneToManys().get(0);
 		
-		assertEquals(null, ormOneToManyMapping.getSpecifiedOrphanRemoval());
+		assertEquals(null, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		assertEquals(null, oneToManyResource.getOrphanRemoval());
 				
 		//set enumerated in the context model, verify resource model updated
-		ormOneToManyMapping.setSpecifiedOrphanRemoval(Boolean.TRUE);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(Boolean.TRUE);
 		assertEquals(Boolean.TRUE, oneToManyResource.getOrphanRemoval());
-		assertEquals(Boolean.TRUE, ormOneToManyMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.TRUE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 	
-		ormOneToManyMapping.setSpecifiedOrphanRemoval(Boolean.FALSE);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(Boolean.FALSE);
 		assertEquals(Boolean.FALSE, oneToManyResource.getOrphanRemoval());
-		assertEquals(Boolean.FALSE, ormOneToManyMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.FALSE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 	}
 }
diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmOneToOneMapping2_0Tests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmOneToOneMapping2_0Tests.java
index 9b98f6b..c1e6237 100644
--- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmOneToOneMapping2_0Tests.java
+++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/jpa2/context/orm/GenericOrmOneToOneMapping2_0Tests.java
@@ -18,8 +18,11 @@
 import org.eclipse.jpt.core.context.PersistentAttribute;
 import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute;
 import org.eclipse.jpt.core.context.orm.OrmPersistentType;
+import org.eclipse.jpt.core.jpa2.context.OneToOneMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmManyToOneMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmOneToOneMapping2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.resource.java.JPA;
 import org.eclipse.jpt.core.resource.orm.XmlEntity;
 import org.eclipse.jpt.core.resource.orm.XmlManyToOne;
@@ -336,22 +339,27 @@
 		assertEquals("foo", stateFooMapping.getName());
 	}
 	
+	private OrmOrphanRemovable2_0 getOrphanRemovalOf(OneToOneMapping2_0 oneToOneMapping) {
+		return ((OrmOrphanRemovalHolder2_0) oneToOneMapping).getOrphanRemoval();
+	}
+	
 	public void testUpdateSpecifiedOrphanRemoval() throws Exception {
 		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
 		OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.addSpecifiedPersistentAttribute(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY, "oneToOneMapping");
 		OrmOneToOneMapping2_0 ormOneToOneMapping = (OrmOneToOneMapping2_0) ormPersistentAttribute.getMapping();
+		OrmOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(ormOneToOneMapping);
 		XmlOneToOne oneToOneResource = getXmlEntityMappings().getEntities().get(0).getAttributes().getOneToOnes().get(0);
 		
-		assertEquals(null, ormOneToOneMapping.getSpecifiedOrphanRemoval());
+		assertEquals(null, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		assertEquals(null, oneToOneResource.getOrphanRemoval());
 				
 		//set enumerated in the resource model, verify context model updated
 		oneToOneResource.setOrphanRemoval(Boolean.TRUE);
-		assertEquals(Boolean.TRUE, ormOneToOneMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.TRUE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		assertEquals(Boolean.TRUE, oneToOneResource.getOrphanRemoval());
 	
 		oneToOneResource.setOrphanRemoval(Boolean.FALSE);
-		assertEquals(Boolean.FALSE, ormOneToOneMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.FALSE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		assertEquals(Boolean.FALSE, oneToOneResource.getOrphanRemoval());
 	}
 	
@@ -359,18 +367,19 @@
 		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
 		OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.addSpecifiedPersistentAttribute(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY, "oneToOneMapping");
 		OrmOneToOneMapping2_0 ormOneToOneMapping = (OrmOneToOneMapping2_0) ormPersistentAttribute.getMapping();
+		OrmOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(ormOneToOneMapping);
 		XmlOneToOne oneToOneResource = getXmlEntityMappings().getEntities().get(0).getAttributes().getOneToOnes().get(0);
 		
-		assertEquals(null, ormOneToOneMapping.getSpecifiedOrphanRemoval());
+		assertEquals(null, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		assertEquals(null, oneToOneResource.getOrphanRemoval());
 
 		//set enumerated in the context model, verify resource model updated
-		ormOneToOneMapping.setSpecifiedOrphanRemoval(Boolean.TRUE);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(Boolean.TRUE);
 		assertEquals(Boolean.TRUE, oneToOneResource.getOrphanRemoval());
-		assertEquals(Boolean.TRUE, ormOneToOneMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.TRUE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 	
-		ormOneToOneMapping.setSpecifiedOrphanRemoval(Boolean.FALSE);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(Boolean.FALSE);
 		assertEquals(Boolean.FALSE, oneToOneResource.getOrphanRemoval());
-		assertEquals(Boolean.FALSE, ormOneToOneMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.FALSE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 	}
 }
diff --git a/jpa/tests/org.eclipse.jpt.eclipselink.core.tests/src/org/eclipse/jpt/eclipselink2_0/core/tests/internal/context/java/EclipseLink2_0JavaOneToManyMappingTests.java b/jpa/tests/org.eclipse.jpt.eclipselink.core.tests/src/org/eclipse/jpt/eclipselink2_0/core/tests/internal/context/java/EclipseLink2_0JavaOneToManyMappingTests.java
index caca95b..7f54c79 100644
--- a/jpa/tests/org.eclipse.jpt.eclipselink.core.tests/src/org/eclipse/jpt/eclipselink2_0/core/tests/internal/context/java/EclipseLink2_0JavaOneToManyMappingTests.java
+++ b/jpa/tests/org.eclipse.jpt.eclipselink.core.tests/src/org/eclipse/jpt/eclipselink2_0/core/tests/internal/context/java/EclipseLink2_0JavaOneToManyMappingTests.java
@@ -14,6 +14,8 @@
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jpt.core.context.PersistentAttribute;
 import org.eclipse.jpt.core.jpa2.context.OneToManyMapping2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.jpa2.resource.java.OneToMany2_0Annotation;
 import org.eclipse.jpt.core.resource.java.JPA;
 import org.eclipse.jpt.core.resource.java.JavaResourcePersistentAttribute;
@@ -74,6 +76,10 @@
 			}
 		});
 	}
+	
+	private JavaOrphanRemovable2_0 getOrphanRemovalOf(OneToManyMapping2_0 oneToManyMapping) {
+		return ((JavaOrphanRemovalHolder2_0) oneToManyMapping).getOrphanRemoval();
+	}
 
 	public void testDefaultOneToManyGetDefaultOrphanRemoval() throws Exception {
 		this.createTestEntity();
@@ -81,7 +87,7 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToManyMapping2_0 oneToManyMapping = (OneToManyMapping2_0) persistentAttribute.getMapping();
-		assertEquals(false, oneToManyMapping.isDefaultOrphanRemoval());
+		assertEquals(false, this.getOrphanRemovalOf(oneToManyMapping).isDefaultOrphanRemoval());
 	}
 	
 	public void testSpecifiedOneToManyGetDefaultOrphanRemoval() throws Exception {
@@ -90,7 +96,7 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToManyMapping2_0 oneToManyMapping = (OneToManyMapping2_0) persistentAttribute.getSpecifiedMapping();
-		assertEquals(false, oneToManyMapping.isDefaultOrphanRemoval());
+		assertEquals(false, this.getOrphanRemovalOf(oneToManyMapping).isDefaultOrphanRemoval());
 	}
 	
 	public void testGetOrphanRemoval() throws Exception {
@@ -99,11 +105,13 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToManyMapping2_0 oneToManyMapping = (OneToManyMapping2_0) persistentAttribute.getSpecifiedMapping();
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToManyMapping);
 
-		assertEquals(false, oneToManyMapping.isOrphanRemoval());
+
+		assertEquals(false, mappingsOrphanRemoval.isOrphanRemoval());
 		
-		oneToManyMapping.setSpecifiedOrphanRemoval(Boolean.TRUE);
-		assertEquals(true, oneToManyMapping.isOrphanRemoval());
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(Boolean.TRUE);
+		assertEquals(true, mappingsOrphanRemoval.isOrphanRemoval());
 	}
 	
 	public void testGetSpecifiedOrphanRemoval() throws Exception {
@@ -112,15 +120,16 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToManyMapping2_0 oneToManyMapping = (OneToManyMapping2_0) persistentAttribute.getSpecifiedMapping();
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToManyMapping);
 
-		assertNull(oneToManyMapping.getSpecifiedOrphanRemoval());
+		assertNull(mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		
 		JavaResourcePersistentType typeResource = getJpaProject().getJavaResourcePersistentType(FULLY_QUALIFIED_TYPE_NAME);
 		JavaResourcePersistentAttribute attributeResource = typeResource.persistableAttributes().next();
 		OneToMany2_0Annotation oneToMany = (OneToMany2_0Annotation) attributeResource.getAnnotation(JPA.ONE_TO_MANY);
 		oneToMany.setOrphanRemoval(Boolean.FALSE);
 		
-		assertEquals(Boolean.FALSE, oneToManyMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.FALSE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 	}
 	
 	public void testGetSpecifiedOrphanRemoval2() throws Exception {
@@ -129,8 +138,9 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToManyMapping2_0 oneToManyMapping = (OneToManyMapping2_0) persistentAttribute.getSpecifiedMapping();
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToManyMapping);
 
-		assertEquals(Boolean.FALSE, oneToManyMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.FALSE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 	}
 
 	public void testSetSpecifiedOrphanRemoval() throws Exception {
@@ -139,9 +149,10 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToManyMapping2_0 oneToManyMapping = (OneToManyMapping2_0) persistentAttribute.getMapping();
-		assertNull(oneToManyMapping.getSpecifiedOrphanRemoval());
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToManyMapping);
+		assertNull(mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		
-		oneToManyMapping.setSpecifiedOrphanRemoval(Boolean.TRUE);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(Boolean.TRUE);
 		
 		JavaResourcePersistentType typeResource = getJpaProject().getJavaResourcePersistentType(FULLY_QUALIFIED_TYPE_NAME);
 		JavaResourcePersistentAttribute attributeResource = typeResource.persistableAttributes().next();
@@ -149,7 +160,7 @@
 		
 		assertEquals(Boolean.TRUE, oneToMany.getOrphanRemoval());
 		
-		oneToManyMapping.setSpecifiedOrphanRemoval(null);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(null);
 		assertNotNull(attributeResource.getAnnotation(JPA.ONE_TO_MANY)); 	// .getElement);
 	}
 	
@@ -159,9 +170,10 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToManyMapping2_0 oneToManyMapping = (OneToManyMapping2_0) persistentAttribute.getMapping();
-		assertNull(oneToManyMapping.getSpecifiedOrphanRemoval());
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToManyMapping);
+		assertNull(mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		
-		oneToManyMapping.setSpecifiedOrphanRemoval(Boolean.TRUE);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(Boolean.TRUE);
 		
 		JavaResourcePersistentType typeResource = getJpaProject().getJavaResourcePersistentType(FULLY_QUALIFIED_TYPE_NAME);
 		JavaResourcePersistentAttribute attributeResource = typeResource.persistableAttributes().next();
@@ -170,9 +182,9 @@
 		assertEquals(Boolean.TRUE, oneToMany.getOrphanRemoval());
 		
 		oneToManyMapping = (OneToManyMapping2_0) persistentAttribute.getMapping();
-		assertEquals(Boolean.TRUE, oneToManyMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.TRUE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 
-		oneToManyMapping.setSpecifiedOrphanRemoval(null);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(null);
 		assertNotNull(attributeResource.getAnnotation(JPA.ONE_TO_MANY));
 		
 		oneToManyMapping = (OneToManyMapping2_0) persistentAttribute.getMapping();
@@ -184,18 +196,19 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToManyMapping2_0 oneToManyMapping = (OneToManyMapping2_0) persistentAttribute.getSpecifiedMapping();
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToManyMapping);
 
-		assertNull(oneToManyMapping.getSpecifiedOrphanRemoval());
+		assertNull(mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 
 		JavaResourcePersistentType typeResource = getJpaProject().getJavaResourcePersistentType(FULLY_QUALIFIED_TYPE_NAME);
 		JavaResourcePersistentAttribute attributeResource = typeResource.persistableAttributes().next();
 		OneToMany2_0Annotation oneToMany = (OneToMany2_0Annotation) attributeResource.getAnnotation(JPA.ONE_TO_MANY);
 		oneToMany.setOrphanRemoval(Boolean.FALSE);
 
-		assertEquals(Boolean.FALSE, oneToManyMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.FALSE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		
 		oneToMany.setOrphanRemoval(null);
-		assertNull(oneToManyMapping.getSpecifiedOrphanRemoval());
+		assertNull(mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		assertSame(oneToManyMapping, persistentAttribute.getSpecifiedMapping());
 		
 		oneToMany.setOrphanRemoval(Boolean.FALSE);
diff --git a/jpa/tests/org.eclipse.jpt.eclipselink.core.tests/src/org/eclipse/jpt/eclipselink2_0/core/tests/internal/context/java/EclipseLink2_0JavaOneToOneMappingTests.java b/jpa/tests/org.eclipse.jpt.eclipselink.core.tests/src/org/eclipse/jpt/eclipselink2_0/core/tests/internal/context/java/EclipseLink2_0JavaOneToOneMappingTests.java
index 6fea6a4..32d5329 100644
--- a/jpa/tests/org.eclipse.jpt.eclipselink.core.tests/src/org/eclipse/jpt/eclipselink2_0/core/tests/internal/context/java/EclipseLink2_0JavaOneToOneMappingTests.java
+++ b/jpa/tests/org.eclipse.jpt.eclipselink.core.tests/src/org/eclipse/jpt/eclipselink2_0/core/tests/internal/context/java/EclipseLink2_0JavaOneToOneMappingTests.java
@@ -23,6 +23,8 @@
 import org.eclipse.jpt.core.jpa2.context.OneToOneMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaManyToOneMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.java.JavaOneToOneMapping2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.java.JavaOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.jpa2.resource.java.JPA2_0;
 import org.eclipse.jpt.core.jpa2.resource.java.MapsId2_0Annotation;
 import org.eclipse.jpt.core.jpa2.resource.java.OneToOne2_0Annotation;
@@ -374,6 +376,10 @@
 		AttributeMapping stateFooMapping = oneToOneMapping.getResolvedTargetEntity().resolveAttributeMapping("state.foo");
 		assertEquals("foo", stateFooMapping.getName());
 	}
+	
+	private JavaOrphanRemovable2_0 getOrphanRemovalOf(OneToOneMapping2_0 oneToOneMapping) {
+		return ((JavaOrphanRemovalHolder2_0) oneToOneMapping).getOrphanRemoval();
+	}
 
 	public void testDefaultOneToOneGetDefaultOrphanRemoval() throws Exception {
 		this.createTestEntity();
@@ -381,7 +387,7 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToOneMapping2_0 oneToOneMapping = (OneToOneMapping2_0) persistentAttribute.getMapping();
-		assertEquals(false, oneToOneMapping.isDefaultOrphanRemoval());
+		assertEquals(false, this.getOrphanRemovalOf(oneToOneMapping).isDefaultOrphanRemoval());
 	}
 	
 	public void testSpecifiedOneToOneGetDefaultOrphanRemoval() throws Exception {
@@ -390,7 +396,7 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToOneMapping2_0 oneToOneMapping = (OneToOneMapping2_0) persistentAttribute.getSpecifiedMapping();
-		assertEquals(false, oneToOneMapping.isDefaultOrphanRemoval());
+		assertEquals(false, this.getOrphanRemovalOf(oneToOneMapping).isDefaultOrphanRemoval());
 	}
 	
 	public void testGetOrphanRemoval() throws Exception {
@@ -399,11 +405,12 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToOneMapping2_0 oneToOneMapping = (OneToOneMapping2_0) persistentAttribute.getSpecifiedMapping();
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToOneMapping);
 
-		assertEquals(false, oneToOneMapping.isOrphanRemoval());
+		assertEquals(false, mappingsOrphanRemoval.isOrphanRemoval());
 		
-		oneToOneMapping.setSpecifiedOrphanRemoval(Boolean.TRUE);
-		assertEquals(true, oneToOneMapping.isOrphanRemoval());
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(Boolean.TRUE);
+		assertEquals(true, mappingsOrphanRemoval.isOrphanRemoval());
 	}
 	
 	public void testGetSpecifiedOrphanRemoval() throws Exception {
@@ -412,15 +419,16 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToOneMapping2_0 oneToOneMapping = (OneToOneMapping2_0) persistentAttribute.getSpecifiedMapping();
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToOneMapping);
 
-		assertNull(oneToOneMapping.getSpecifiedOrphanRemoval());
+		assertNull(mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		
 		JavaResourcePersistentType typeResource = getJpaProject().getJavaResourcePersistentType(FULLY_QUALIFIED_TYPE_NAME);
 		JavaResourcePersistentAttribute attributeResource = typeResource.persistableAttributes().next();
 		OneToOne2_0Annotation oneToOne = (OneToOne2_0Annotation) attributeResource.getAnnotation(JPA.ONE_TO_ONE);
 		oneToOne.setOrphanRemoval(Boolean.FALSE);
 		
-		assertEquals(Boolean.FALSE, oneToOneMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.FALSE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 	}
 	
 	public void testGetSpecifiedOrphanRemoval2() throws Exception {
@@ -430,7 +438,7 @@
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToOneMapping2_0 oneToOneMapping = (OneToOneMapping2_0) persistentAttribute.getSpecifiedMapping();
 
-		assertEquals(Boolean.FALSE, oneToOneMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.FALSE, this.getOrphanRemovalOf(oneToOneMapping).getSpecifiedOrphanRemoval());
 	}
 
 	public void testSetSpecifiedOrphanRemoval() throws Exception {
@@ -439,9 +447,10 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToOneMapping2_0 oneToOneMapping = (OneToOneMapping2_0) persistentAttribute.getMapping();
-		assertNull(oneToOneMapping.getSpecifiedOrphanRemoval());
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToOneMapping);
+		assertNull(mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		
-		oneToOneMapping.setSpecifiedOrphanRemoval(Boolean.TRUE);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(Boolean.TRUE);
 		
 		JavaResourcePersistentType typeResource = getJpaProject().getJavaResourcePersistentType(FULLY_QUALIFIED_TYPE_NAME);
 		JavaResourcePersistentAttribute attributeResource = typeResource.persistableAttributes().next();
@@ -449,7 +458,7 @@
 		
 		assertEquals(Boolean.TRUE, oneToOne.getOrphanRemoval());
 		
-		oneToOneMapping.setSpecifiedOrphanRemoval(null);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(null);
 		assertNotNull(attributeResource.getAnnotation(JPA.ONE_TO_ONE)); 	// .getElement);
 	}
 	
@@ -459,9 +468,10 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToOneMapping2_0 oneToOneMapping = (OneToOneMapping2_0) persistentAttribute.getMapping();
-		assertNull(oneToOneMapping.getSpecifiedOrphanRemoval());
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToOneMapping);
+		assertNull(mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		
-		oneToOneMapping.setSpecifiedOrphanRemoval(Boolean.TRUE);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(Boolean.TRUE);
 		
 		JavaResourcePersistentType typeResource = getJpaProject().getJavaResourcePersistentType(FULLY_QUALIFIED_TYPE_NAME);
 		JavaResourcePersistentAttribute attributeResource = typeResource.persistableAttributes().next();
@@ -470,12 +480,11 @@
 		assertEquals(Boolean.TRUE, oneToOne.getOrphanRemoval());
 		
 		oneToOneMapping = (OneToOneMapping2_0) persistentAttribute.getMapping();
-		assertEquals(Boolean.TRUE, oneToOneMapping.getSpecifiedOrphanRemoval());
+		mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToOneMapping);
+		assertEquals(Boolean.TRUE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 
-		oneToOneMapping.setSpecifiedOrphanRemoval(null);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(null);
 		assertNotNull(attributeResource.getAnnotation(JPA.ONE_TO_ONE));
-		
-		oneToOneMapping = (OneToOneMapping2_0) persistentAttribute.getMapping();
 	}
 
 	public void testGetSpecifiedOrphanRemovalUpdatesFromResourceModelChange() throws Exception {
@@ -484,18 +493,19 @@
 		
 		PersistentAttribute persistentAttribute = getJavaPersistentType().attributes().next();
 		OneToOneMapping2_0 oneToOneMapping = (OneToOneMapping2_0) persistentAttribute.getSpecifiedMapping();
+		JavaOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToOneMapping);
 
-		assertNull(oneToOneMapping.getSpecifiedOrphanRemoval());
+		assertNull(mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 
 		JavaResourcePersistentType typeResource = getJpaProject().getJavaResourcePersistentType(FULLY_QUALIFIED_TYPE_NAME);
 		JavaResourcePersistentAttribute attributeResource = typeResource.persistableAttributes().next();
 		OneToOne2_0Annotation oneToOne = (OneToOne2_0Annotation) attributeResource.getAnnotation(JPA.ONE_TO_ONE);
 		oneToOne.setOrphanRemoval(Boolean.FALSE);
 
-		assertEquals(Boolean.FALSE, oneToOneMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.FALSE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		
 		oneToOne.setOrphanRemoval(null);
-		assertNull(oneToOneMapping.getSpecifiedOrphanRemoval());
+		assertNull(mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		assertSame(oneToOneMapping, persistentAttribute.getSpecifiedMapping());
 		
 		oneToOne.setOrphanRemoval(Boolean.FALSE);
diff --git a/jpa/tests/org.eclipse.jpt.eclipselink.core.tests/src/org/eclipse/jpt/eclipselink2_0/core/tests/internal/context/orm/EclipseLink2_0OrmOneToManyMappingTests.java b/jpa/tests/org.eclipse.jpt.eclipselink.core.tests/src/org/eclipse/jpt/eclipselink2_0/core/tests/internal/context/orm/EclipseLink2_0OrmOneToManyMappingTests.java
index c58d567..c20aa08 100644
--- a/jpa/tests/org.eclipse.jpt.eclipselink.core.tests/src/org/eclipse/jpt/eclipselink2_0/core/tests/internal/context/orm/EclipseLink2_0OrmOneToManyMappingTests.java
+++ b/jpa/tests/org.eclipse.jpt.eclipselink.core.tests/src/org/eclipse/jpt/eclipselink2_0/core/tests/internal/context/orm/EclipseLink2_0OrmOneToManyMappingTests.java
@@ -12,7 +12,10 @@
 import org.eclipse.jpt.core.MappingKeys;
 import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute;
 import org.eclipse.jpt.core.context.orm.OrmPersistentType;
+import org.eclipse.jpt.core.jpa2.context.OneToManyMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmOneToManyMapping2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.resource.orm.XmlOneToMany;
 
 /**
@@ -25,41 +28,47 @@
 		super(name);
 	}
 	
+	private OrmOrphanRemovable2_0 getOrphanRemovalOf(OneToManyMapping2_0 oneToManyMapping) {
+		return ((OrmOrphanRemovalHolder2_0) oneToManyMapping).getOrphanRemoval();
+	}
+	
 	public void testUpdateSpecifiedOrphanRemoval() throws Exception {
 		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
 		OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.addSpecifiedPersistentAttribute(MappingKeys.ONE_TO_MANY_ATTRIBUTE_MAPPING_KEY, "oneToManyMapping");
-		OrmOneToManyMapping2_0 ormOneToManyMapping = (OrmOneToManyMapping2_0) ormPersistentAttribute.getMapping();
+		OrmOneToManyMapping2_0 oneToManyMapping = (OrmOneToManyMapping2_0) ormPersistentAttribute.getMapping();
+		OrmOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToManyMapping);
 		XmlOneToMany oneToManyResource = getXmlEntityMappings().getEntities().get(0).getAttributes().getOneToManys().get(0);
 		
-		assertEquals(null, ormOneToManyMapping.getSpecifiedOrphanRemoval());
+		assertEquals(null, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		assertEquals(null, oneToManyResource.getOrphanRemoval());
 				
 		//set enumerated in the resource model, verify context model updated
 		oneToManyResource.setOrphanRemoval(Boolean.TRUE);
-		assertEquals(Boolean.TRUE, ormOneToManyMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.TRUE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		assertEquals(Boolean.TRUE, oneToManyResource.getOrphanRemoval());
 	
 		oneToManyResource.setOrphanRemoval(Boolean.FALSE);
-		assertEquals(Boolean.FALSE, ormOneToManyMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.FALSE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		assertEquals(Boolean.FALSE, oneToManyResource.getOrphanRemoval());
 	}
 	
 	public void testModifySpecifiedOrphanRemoval() throws Exception {
 		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
 		OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.addSpecifiedPersistentAttribute(MappingKeys.ONE_TO_MANY_ATTRIBUTE_MAPPING_KEY, "oneToManyMapping");
-		OrmOneToManyMapping2_0 ormOneToManyMapping = (OrmOneToManyMapping2_0) ormPersistentAttribute.getMapping();
+		OrmOneToManyMapping2_0 oneToManyMapping = (OrmOneToManyMapping2_0) ormPersistentAttribute.getMapping();
+		OrmOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(oneToManyMapping);
 		XmlOneToMany oneToManyResource = getXmlEntityMappings().getEntities().get(0).getAttributes().getOneToManys().get(0);
 		
-		assertEquals(null, ormOneToManyMapping.getSpecifiedOrphanRemoval());
+		assertEquals(null, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		assertEquals(null, oneToManyResource.getOrphanRemoval());
 				
 		//set enumerated in the context model, verify resource model updated
-		ormOneToManyMapping.setSpecifiedOrphanRemoval(Boolean.TRUE);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(Boolean.TRUE);
 		assertEquals(Boolean.TRUE, oneToManyResource.getOrphanRemoval());
-		assertEquals(Boolean.TRUE, ormOneToManyMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.TRUE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 	
-		ormOneToManyMapping.setSpecifiedOrphanRemoval(Boolean.FALSE);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(Boolean.FALSE);
 		assertEquals(Boolean.FALSE, oneToManyResource.getOrphanRemoval());
-		assertEquals(Boolean.FALSE, ormOneToManyMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.FALSE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 	}
 }
diff --git a/jpa/tests/org.eclipse.jpt.eclipselink.core.tests/src/org/eclipse/jpt/eclipselink2_0/core/tests/internal/context/orm/EclipseLink2_0OrmOneToOneMappingTests.java b/jpa/tests/org.eclipse.jpt.eclipselink.core.tests/src/org/eclipse/jpt/eclipselink2_0/core/tests/internal/context/orm/EclipseLink2_0OrmOneToOneMappingTests.java
index c5d3d66..31580ea 100644
--- a/jpa/tests/org.eclipse.jpt.eclipselink.core.tests/src/org/eclipse/jpt/eclipselink2_0/core/tests/internal/context/orm/EclipseLink2_0OrmOneToOneMappingTests.java
+++ b/jpa/tests/org.eclipse.jpt.eclipselink.core.tests/src/org/eclipse/jpt/eclipselink2_0/core/tests/internal/context/orm/EclipseLink2_0OrmOneToOneMappingTests.java
@@ -17,8 +17,11 @@
 import org.eclipse.jpt.core.context.PersistentAttribute;
 import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute;
 import org.eclipse.jpt.core.context.orm.OrmPersistentType;
+import org.eclipse.jpt.core.jpa2.context.OneToOneMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmManyToOneMapping2_0;
 import org.eclipse.jpt.core.jpa2.context.orm.OrmOneToOneMapping2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovable2_0;
+import org.eclipse.jpt.core.jpa2.context.orm.OrmOrphanRemovalHolder2_0;
 import org.eclipse.jpt.core.resource.java.JPA;
 import org.eclipse.jpt.core.resource.orm.XmlEntity;
 import org.eclipse.jpt.core.resource.orm.XmlManyToOne;
@@ -335,22 +338,27 @@
 		assertEquals("foo", stateFooMapping.getName());
 	}
 	
+	private OrmOrphanRemovable2_0 getOrphanRemovalOf(OneToOneMapping2_0 oneToOneMapping) {
+		return ((OrmOrphanRemovalHolder2_0) oneToOneMapping).getOrphanRemoval();
+	}
+	
 	public void testUpdateSpecifiedOrphanRemoval() throws Exception {
 		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
 		OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.addSpecifiedPersistentAttribute(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY, "oneToOneMapping");
 		OrmOneToOneMapping2_0 ormOneToOneMapping = (OrmOneToOneMapping2_0) ormPersistentAttribute.getMapping();
+		OrmOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(ormOneToOneMapping);
 		XmlOneToOne oneToOneResource = getXmlEntityMappings().getEntities().get(0).getAttributes().getOneToOnes().get(0);
 		
-		assertEquals(null, ormOneToOneMapping.getSpecifiedOrphanRemoval());
+		assertEquals(null, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		assertEquals(null, oneToOneResource.getOrphanRemoval());
 				
 		//set enumerated in the resource model, verify context model updated
 		oneToOneResource.setOrphanRemoval(Boolean.TRUE);
-		assertEquals(Boolean.TRUE, ormOneToOneMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.TRUE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		assertEquals(Boolean.TRUE, oneToOneResource.getOrphanRemoval());
 	
 		oneToOneResource.setOrphanRemoval(Boolean.FALSE);
-		assertEquals(Boolean.FALSE, ormOneToOneMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.FALSE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		assertEquals(Boolean.FALSE, oneToOneResource.getOrphanRemoval());
 	}
 	
@@ -358,18 +366,19 @@
 		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
 		OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.addSpecifiedPersistentAttribute(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY, "oneToOneMapping");
 		OrmOneToOneMapping2_0 ormOneToOneMapping = (OrmOneToOneMapping2_0) ormPersistentAttribute.getMapping();
+		OrmOrphanRemovable2_0 mappingsOrphanRemoval = this.getOrphanRemovalOf(ormOneToOneMapping);
 		XmlOneToOne oneToOneResource = getXmlEntityMappings().getEntities().get(0).getAttributes().getOneToOnes().get(0);
 		
-		assertEquals(null, ormOneToOneMapping.getSpecifiedOrphanRemoval());
+		assertEquals(null, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 		assertEquals(null, oneToOneResource.getOrphanRemoval());
 
 		//set enumerated in the context model, verify resource model updated
-		ormOneToOneMapping.setSpecifiedOrphanRemoval(Boolean.TRUE);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(Boolean.TRUE);
 		assertEquals(Boolean.TRUE, oneToOneResource.getOrphanRemoval());
-		assertEquals(Boolean.TRUE, ormOneToOneMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.TRUE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 	
-		ormOneToOneMapping.setSpecifiedOrphanRemoval(Boolean.FALSE);
+		mappingsOrphanRemoval.setSpecifiedOrphanRemoval(Boolean.FALSE);
 		assertEquals(Boolean.FALSE, oneToOneResource.getOrphanRemoval());
-		assertEquals(Boolean.FALSE, ormOneToOneMapping.getSpecifiedOrphanRemoval());
+		assertEquals(Boolean.FALSE, mappingsOrphanRemoval.getSpecifiedOrphanRemoval());
 	}
 }