diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/AbstractQuery.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/AbstractQuery.java
index 5228988..f8a8b81 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/AbstractQuery.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/AbstractQuery.java
@@ -55,6 +55,7 @@
 	@Override
 	public final ExternalQueryHint addQueryHint(String name, String value) {
 		QueryHint queryHint = buildQueryHint(-1);
+		queryHint.addSelf();
 		queryHint.setName(name);
 		queryHint.setValue(value);
 		return queryHint;
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/AssociationOverride.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/AssociationOverride.java
index bab1eda..410a539 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/AssociationOverride.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/AssociationOverride.java
@@ -56,6 +56,7 @@
 	@Override
 	public ExternalJoinColumn addJoinColumn(String name) {
 		JoinColumn joinColumn = buildJoinColumn(-1);
+		joinColumn.addSelf();
 		joinColumn.setName(name);
 		return joinColumn;
 	}
@@ -66,6 +67,7 @@
 	@Override
 	public ExternalJoinTable addJoinTable(String tableName) {
 		JoinTable joinTable = buildJoinTable();
+		joinTable.addSelf();
 		joinTable.setName(tableName);
 		return joinTable;
 	}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/BasicCollectionMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/BasicCollectionMapping.java
index 07375c6..ebe7d2e 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/BasicCollectionMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/BasicCollectionMapping.java
@@ -60,6 +60,7 @@
 	@Override
 	public ExternalCollectionTable addCollectionTable(String name) {
 		CollectionTable collectionTable = buildCollectionTable();
+		collectionTable.addSelf();
 		collectionTable.setName(name);
 		return collectionTable;
 	}
@@ -70,6 +71,7 @@
 	@Override
 	public ExternalEntityColumn addValueColumn(String columnName) {
 		EntityColumn valueColumn = buildValueColumn();
+		valueColumn.addSelf();
 		valueColumn.setName(columnName);
 		return valueColumn;
 	}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/BasicMapMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/BasicMapMapping.java
index 25d5bea..574d2e2 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/BasicMapMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/BasicMapMapping.java
@@ -64,6 +64,7 @@
 	@Override
 	public ExternalCollectionTable addCollectionTable(String name) {
 		CollectionTable collectionTable = buildCollectionTable();
+		collectionTable.addSelf();
 		collectionTable.setName(name);
 		return collectionTable;
 	}
@@ -74,6 +75,7 @@
 	@Override
 	public ExternalEntityColumn addKeyColumn(String columnName) {
 		EntityColumn column = buildColumn(KEY_COLUMN);
+		column.addSelf();
 		column.setName(columnName);
 		return column;
 	}
@@ -92,6 +94,7 @@
 	@Override
 	public ExternalEntityColumn addValueColumn(String columnName) {
 		EntityColumn column = buildColumn(VALUE_COLUMN);
+		column.addSelf();
 		column.setName(columnName);
 		return column;
 	}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ElementCollectionMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ElementCollectionMapping.java
index 0a2b64d..92b7f67 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ElementCollectionMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ElementCollectionMapping.java
@@ -71,6 +71,7 @@
 	@Override
 	public ExternalAttributeOverride addAttributeOverride(String name) {
 		AttributeOverride attributeOverride = buildAttributeOverride(-1);
+		attributeOverride.addSelf();
 		attributeOverride.setName(name);
 		return attributeOverride;
 	}
@@ -141,6 +142,7 @@
 	@Override
 	public ExternalJoinColumn addMapKeyJoinColumn(String name) {
 		JoinColumn joinColumn = buildJoinColumn(MAP_KEY_JOIN_COLUMN, -1);
+		joinColumn.addSelf();
 		joinColumn.setName(name);
 		return joinColumn;
 	}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Embeddable.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Embeddable.java
index e1d63dd..6fcf39a 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Embeddable.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Embeddable.java
@@ -86,6 +86,7 @@
 	@Override
 	public final ExternalAccessMethods addAccessMethods(String getMethodName, String setMethodName) {
 		AccessMethods accessMethods = buildAccessMethods();
+		accessMethods.addSelf();
 		accessMethods.setGetMethod(getMethodName);
 		accessMethods.setSetMethod(setMethodName);
 		return accessMethods;
@@ -97,6 +98,7 @@
 	@Override
 	public final ExternalBasicCollectionMapping addBasicCollectionMapping(String name) {
 		BasicCollectionMapping mapping = buildBasicCollectionMapping(mappingsSize());
+		mapping.addSelf();
 		mapping.setName(name);
 		return mapping;
 	}
@@ -107,6 +109,7 @@
 	@Override
 	public final ExternalBasicMapMapping addBasicMapMapping(String name) {
 		BasicMapMapping mapping = buildBasicMapMapping(mappingsSize());
+		mapping.addSelf();
 		mapping.setName(name);
 		return mapping;
 	}
@@ -117,6 +120,7 @@
 	@Override
 	public final ExternalBasicMapping addBasicMapping(String name) {
 		BasicMapping mapping = buildBasicMapping(mappingsSize());
+		mapping.addSelf();
 		mapping.setName(name);
 		return mapping;
 	}
@@ -137,6 +141,7 @@
 	@Override
 	public final ExternalConverter addConverter(String name) {
 		Converter converter = buildConverter(index);
+		converter.addSelf();
 		converter.setName(name);
 		return converter;
 	}
@@ -157,6 +162,7 @@
 	@Override
 	public final ExternalElementCollectionMapping addElementCollectionMapping(String name) {
 		ElementCollectionMapping mapping = buildElementCollectionMapping(mappingsSize());
+		mapping.addSelf();
 		mapping.setName(name);
 		return mapping;
 	}
@@ -167,6 +173,7 @@
 	@Override
 	public final ExternalEmbeddedMapping addEmbeddedMapping(String name) {
 		EmbeddedMapping mapping = buildEmbeddedMapping(mappingsSize());
+		mapping.addSelf();
 		mapping.setName(name);
 		return mapping;
 	}
@@ -197,6 +204,7 @@
 	@Override
 	public final ExternalManyToManyMapping addManyToManyMapping(String name) {
 		ManyToManyMapping mapping = buildManyToManyMapping(mappingsSize());
+		mapping.addSelf();
 		mapping.setName(name);
 		return mapping;
 	}
@@ -207,6 +215,7 @@
 	@Override
 	public final ExternalManyToOneMapping addManyToOneMapping(String name) {
 		ManyToOneMapping mapping = buildManyToOneMapping(mappingsSize());
+		mapping.addSelf();
 		mapping.setName(name);
 		return mapping;
 	}
@@ -227,6 +236,7 @@
 	@Override
 	public final ExternalObjectTypeConverter addObjectTypeConverter(String name) {
 		ObjectTypeConverter converter = buildObjectTypeConverter(index);
+		converter.addSelf();
 		converter.setName(name);
 		return converter;
 	}
@@ -237,6 +247,7 @@
 	@Override
 	public final ExternalOneToManyMapping addOneToManyMapping(String name) {
 		OneToManyMapping mapping = buildOneToManyMapping(mappingsSize());
+		mapping.addSelf();
 		mapping.setName(name);
 		return mapping;
 	}
@@ -247,6 +258,7 @@
 	@Override
 	public final ExternalOneToOneMapping addOneToOneMapping(String name) {
 		OneToOneMapping mapping = buildOneToOneMapping(mappingsSize());
+		mapping.addSelf();
 		mapping.setName(name);
 		return mapping;
 	}
@@ -257,6 +269,7 @@
 	@Override
 	public final ExternalProperty addProperty(String name, String value) {
 		Property property = buildProperty(index);
+		property.addSelf();
 		property.setName(name);
 		property.setValue(value);
 		return property;
@@ -268,6 +281,7 @@
 	@Override
 	public final ExternalStructConverter addStructConverter(String name) {
 		StructConverter converter = buildStructConverter(index);
+		converter.addSelf();
 		converter.setName(name);
 		return converter;
 	}
@@ -278,6 +292,7 @@
 	@Override
 	public final ExternalTransientMapping addTransientMapping(String name) {
 		TransientMapping mapping = buildTransientMapping(mappingsSize());
+		mapping.addSelf();
 		mapping.setName(name);
 		return mapping;
 	}
@@ -288,6 +303,7 @@
 	@Override
 	public final ExternalTypeConverter addTypeConverter(String name) {
 		TypeConverter converter = buildTypeConverter(index);
+		converter.addSelf();
 		converter.setName(name);
 		return converter;
 	}
@@ -548,7 +564,7 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public TextRange getAccessTypeTextRange() {
+	public final TextRange getAccessTypeTextRange() {
 		return getAttributeTextRange(ACCESS);
 	}
 
@@ -564,7 +580,7 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public TextRange getChangeTrackingTypeTextRange() {
+	public final TextRange getChangeTrackingTypeTextRange() {
 		return getChildAttributeTextRange(CHANGE_TRACKING, TYPE);
 	}
 
@@ -580,7 +596,7 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public TextRange getClassNameTextRange() {
+	public final TextRange getClassNameTextRange() {
 		return getAttributeTextRange(CLASS);
 	}
 
@@ -643,7 +659,7 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public TextRange getCustomizerClassNameTextRange() {
+	public final TextRange getCustomizerClassNameTextRange() {
 		return getChildAttributeTextRange(CUSTOMIZER, CLASS);
 	}
 
@@ -659,7 +675,7 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public TextRange getDescriptionTextRange() {
+	public final TextRange getDescriptionTextRange() {
 		return getChildTextNodeTextRange(DESCRIPTION);
 	}
 
@@ -726,15 +742,11 @@
 		return this.mappingElementNamesOrder;
 	}
 
-	public final List<ExternalMapping> getMappings() {
-		return ListTools.list(mappings());
-	}
-
 	/**
 	 * {@inheritDoc}
 	 */
 	@Override
-	public TextRange getMetadataCompleteTextRange() {
+	public final TextRange getMetadataCompleteTextRange() {
 		return getAttributeTextRange(METADATA_COMPLETE);
 	}
 
@@ -768,7 +780,7 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public List<ExternalProperty> getProperties(String name) {
+	public final List<ExternalProperty> getProperties(String name) {
 		return null;
 	}
 
@@ -789,7 +801,7 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public ExternalProperty getProperty(String name) {
+	public final ExternalProperty getProperty(String name) {
 
 		for (ExternalProperty property : properties()) {
 			if (ObjectTools.equals(property.getName(), name)) {
@@ -804,7 +816,7 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public ExternalProperty getProperty(String name, int index) {
+	public final ExternalProperty getProperty(String name, int index) {
 
 		ExternalProperty property = getProperty(index);
 
@@ -819,7 +831,7 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public ExternalProperty getProperty(String name, String value) {
+	public final ExternalProperty getProperty(String name, String value) {
 
 		for (ExternalProperty property : properties()) {
 			if (ObjectTools.equals(property.getName(),  name) &&
@@ -836,7 +848,7 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public TextRange getPropertyNameTextRange(String name) {
+	public final TextRange getPropertyNameTextRange(String name) {
 
 		for (ExternalProperty property : properties()) {
 			if (ObjectTools.equals(property.getName(), name)) {
@@ -851,7 +863,7 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public TextRange getPropertyTextRange(String name) {
+	public final TextRange getPropertyTextRange(String name) {
 
 		for (ExternalProperty property : properties()) {
 			if (ObjectTools.equals(property.getName(), name)) {
@@ -866,7 +878,7 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public TextRange getPropertyTextRange(String name, String value) {
+	public final TextRange getPropertyTextRange(String name, String value) {
 
 		for (ExternalProperty property : properties()) {
 
@@ -884,7 +896,7 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public TextRange getPropertyValueTextRange(String name) {
+	public final TextRange getPropertyValueTextRange(String name) {
 
 		for (ExternalProperty property : properties()) {
 			if (ObjectTools.equals(property.getName(), name)) {
@@ -1054,7 +1066,7 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public int propertiesSize(String name) {
+	public final int propertiesSize(String name) {
 
 		int count = 0;
 
@@ -1155,7 +1167,7 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public void removeProperty(String name) {
+	public final void removeProperty(String name) {
 		Property property = (Property) getProperty(name);
 		property.removeSelf();
 	}
@@ -1164,7 +1176,9 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public void removeProperty(String name, String value) {
+	public final void removeProperty(String name, String value) {
+		Property property = (Property) getProperty(name, value);
+		property.removeSelf();
 	}
 
 	/**
@@ -1197,7 +1211,7 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public void setAccessType(AccessType type) {
+	public final void setAccessType(AccessType type) {
 		setAttribute(ACCESS, type);
 	}
 
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EmbeddedIDMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EmbeddedIDMapping.java
index 21e17df..13b52ff 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EmbeddedIDMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EmbeddedIDMapping.java
@@ -44,6 +44,7 @@
 	@Override
 	public ExternalAttributeOverride addAttributeOverride(String name) {
 		AttributeOverride attributeOverride = buildAttributeOverride(-1);
+		attributeOverride.addSelf();
 		attributeOverride.setName(name);
 		return attributeOverride;
 	}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Entity.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Entity.java
index e293fc2..fd188e7 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Entity.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Entity.java
@@ -59,6 +59,7 @@
 	@Override
 	public ExternalAssociationOverride addAssociationOverride(String name) {
 		AssociationOverride associationOverride = buildAssociationOverride(-1);
+		associationOverride.addSelf();
 		associationOverride.setName(name);
 		return associationOverride;
 	}
@@ -69,6 +70,7 @@
 	@Override
 	public ExternalAttributeOverride addAttributeOverride(String name) {
 		AttributeOverride attributeOverride = buildAttributeOverride(-1);
+		attributeOverride.addSelf();
 		attributeOverride.setName(name);
 		return attributeOverride;
 	}
@@ -96,6 +98,7 @@
 	@Override
 	public ExternalNamedQuery addNamedQuery(String name) {
 		NamedQuery namedQuery = buildNamedQuery(-1);
+		namedQuery.addSelf();
 		namedQuery.setName(name);
 		return namedQuery;
 	}
@@ -106,6 +109,7 @@
 	@Override
 	public ExternalNativeQuery addNativeQuery(String name) {
 		NamedNativeQuery namedNativeQuery = buildNamedNativeQuery(-1);
+		namedNativeQuery.addSelf();
 		namedNativeQuery.setName(name);
 		return namedNativeQuery;
 	}
@@ -116,6 +120,7 @@
 	@Override
 	public ExternalPrimaryKeyJoinColumn addPrimaryKeyJoinColumn(String name) {
 		PrimaryKeyJoinColumn pkJoinColumn = buildPrimaryKeyJoinColumn(-1);
+		pkJoinColumn.addSelf();
 		pkJoinColumn.setName(name);
 		return pkJoinColumn;
 	}
@@ -137,6 +142,7 @@
 	@Override
 	public ExternalSecondaryTable addSecondaryTable(String name, String catalog, String schema) {
 		SecondaryTable secondaryTable = buildSecondaryTable(-1);
+		secondaryTable.addSelf();
 		secondaryTable.setName(name);
 		secondaryTable.setCatalogName(catalog);
 		secondaryTable.setSchemaName(schema);
@@ -149,6 +155,7 @@
 	@Override
 	public ExternalSQLResultSetMapping addSqlResultSetMapping(String name) {
 		SQLResultSetMapping sqlResultSetMapping = buildSqlResultSetMapping(-1);
+		sqlResultSetMapping.addSelf();
 		sqlResultSetMapping.setName(name);
 		return sqlResultSetMapping;
 	}
@@ -159,6 +166,7 @@
 	@Override
 	public ExternalStoredProcedureQuery addStoredProcedureQuery(String name, String procedureName) {
 		NamedStoredProcedureQuery storedProcedureQuery = buildStoredProcedureQuery(-1);
+		storedProcedureQuery.addSelf();
 		storedProcedureQuery.setName(name);
 		storedProcedureQuery.setProcedureName(procedureName);
 		return storedProcedureQuery;
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EntityResult.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EntityResult.java
index 1eac3f5..8ade1f5 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EntityResult.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EntityResult.java
@@ -53,6 +53,7 @@
 	@Override
 	public ExternalFieldResult addFieldResult(String name) {
 		FieldResult fieldResult = buildFieldResult(-1);
+		fieldResult.addSelf();
 		fieldResult.setName(name);
 		return fieldResult;
 	}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/JoinTable.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/JoinTable.java
index 5b8f25f..2bbf6fe 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/JoinTable.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/JoinTable.java
@@ -52,6 +52,7 @@
 	@Override
 	public ExternalInverseJoinColumn addInverseJoinColumn(String name) {
 		InverseJoinColumn joinColumn = buildInverseJoinColumn(-1);
+		joinColumn.addSelf();
 		joinColumn.setName(name);
 		return joinColumn;
 	}
@@ -62,6 +63,7 @@
 	@Override
 	public ExternalJoinColumn addJoinColumn(String name) {
 		JoinColumn joinColumn = buildJoinColumn(-1);
+		joinColumn.addSelf();
 		joinColumn.setName(name);
 		return joinColumn;
 	}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ManyToManyMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ManyToManyMapping.java
index e899cd0..1a9ba7d 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ManyToManyMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ManyToManyMapping.java
@@ -44,7 +44,8 @@
 	 */
 	@Override
 	public ExternalNoSqlJoinField addJoinField(String name) {
-		ExternalNoSqlJoinField joinField = buildJoinField(-1);
+		NoSqlJoinField joinField = buildJoinField(-1);
+		joinField.addSelf();
 		joinField.setName(name);
 		return joinField;
 	}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ManyToOneMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ManyToOneMapping.java
index 4126fa0..8f1a3d4 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ManyToOneMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ManyToOneMapping.java
@@ -46,6 +46,7 @@
 	@Override
 	public ExternalJoinColumn addJoinColumn(String name) {
 		JoinColumn joinColumn = buildJoinColumn(-1);
+		joinColumn.addSelf();
 		joinColumn.setName(name);
 		return joinColumn;
 	}
@@ -55,7 +56,8 @@
 	 */
 	@Override
 	public ExternalNoSqlJoinField addJoinField(String name) {
-		ExternalNoSqlJoinField joinField = buildJoinField(-1);
+		NoSqlJoinField joinField = buildJoinField(-1);
+		joinField.addSelf();
 		joinField.setName(name);
 		return joinField;
 	}
@@ -96,7 +98,7 @@
 		return new JoinColumn(this, JoinColumn.JOIN_COLUMN, index);
 	}
 
-	private ExternalNoSqlJoinField buildJoinField(int index) {
+	private NoSqlJoinField buildJoinField(int index) {
 		return new NoSqlJoinField(this, index);
 	}
 
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/MappedSuperClassEntity.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/MappedSuperClassEntity.java
index 94e0612..11cc63e 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/MappedSuperClassEntity.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/MappedSuperClassEntity.java
@@ -72,6 +72,7 @@
 	@Override
 	public final ExternalEmbeddedIDMapping addEmbeddedIdMapping(String name) {
 		EmbeddedIDMapping mapping = buildEmbeddedIdMapping(mappingsSize());
+		mapping.addSelf();
 		mapping.setName(name);
 		return mapping;
 	}
@@ -82,6 +83,7 @@
 	@Override
 	public final ExternalEntityListener addEntityListener(String name) {
 		EntityListener entityListener = buildEntityListener(-1);
+		entityListener.addSelf();
 		entityListener.setClassName(name);
 		return entityListener;
 	}
@@ -92,6 +94,7 @@
 	@Override
 	public final ExternalFetchGroup addFetchGroup(String name) {
 		FetchGroup fetchGroup = buildFetchGroup(-1);
+		fetchGroup.addSelf();
 		fetchGroup.setName(name);
 		return fetchGroup;
 	}
@@ -102,6 +105,7 @@
 	@Override
 	public final ExternalIDMapping addIdMapping(String name) {
 		IdMapping mapping = buildIdMapping(mappingsSize());
+		mapping.addSelf();
 		mapping.setName(name);
 		return mapping;
 	}
@@ -162,6 +166,7 @@
 	@Override
 	public final ExternalTransformationMapping addTransformationMapping(String name) {
 		TransformationMapping mapping = buildTransformationMapping(mappingsSize());
+		mapping.addSelf();
 		mapping.setName(name);
 		return mapping;
 	}
@@ -172,6 +177,7 @@
 	@Override
 	public final ExternalVariableOneToOneMapping addVariableOneToOneMapping(String name) {
 		VariableOneToOneMapping mapping = buildVariableOneToOneMapping(mappingsSize());
+		mapping.addSelf();
 		mapping.setName(name);
 		return mapping;
 	}
@@ -182,6 +188,7 @@
 	@Override
 	public final ExternalVersionMapping addVersionMapping(String name) {
 		VersionMapping mapping = buildVersionMapping(mappingsSize());
+		mapping.addSelf();
 		mapping.setName(name);
 		return mapping;
 	}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/NonTransientMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/NonTransientMapping.java
index ba27ac4..5a04603 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/NonTransientMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/NonTransientMapping.java
@@ -49,6 +49,7 @@
 	@Override
 	public final ExternalAccessMethods addAccessMethods(String getMethodName, String setMethodName) {
 		AccessMethods accessMethods = buildAccessMethods();
+		accessMethods.addSelf();
 		accessMethods.setGetMethod(getMethodName);
 		accessMethods.setSetMethod(setMethodName);
 		return accessMethods;
@@ -60,6 +61,7 @@
 	@Override
 	public final ExternalProperty addProperty(String name, String value) {
 		Property property = buildProperty(-1);
+		property.addSelf();
 		property.setName(name);
 		property.setValue(value);
 		return property;
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ORMConfiguration.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ORMConfiguration.java
index 6a19288..fb87b75 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ORMConfiguration.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ORMConfiguration.java
@@ -181,7 +181,7 @@
 	 */
 	@Override
 	public Element addSelf(String elementName, List<String> elementNamesOrder) {
-		return getHelper().buildORMConfiguration(this);
+		return helper.buildORMConfiguration(this);
 	}
 
 	/**
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ObjectCollectionMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ObjectCollectionMapping.java
index a04b7d4..7d2222b 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ObjectCollectionMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/ObjectCollectionMapping.java
@@ -82,6 +82,7 @@
 	@Override
 	public ExternalJoinColumn addMapKeyJoinColumn(String name) {
 		JoinColumn joinColumn = buildJoinColumn(MAP_KEY_JOIN_COLUMN, -1);
+		joinColumn.addSelf();
 		joinColumn.setName(name);
 		return joinColumn;
 	}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/OneToManyMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/OneToManyMapping.java
index 7ac2fe1..e363b8d 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/OneToManyMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/OneToManyMapping.java
@@ -49,6 +49,7 @@
 	@Override
 	public ExternalJoinColumn addJoinColumn(String name) {
 		JoinColumn joinColumn = buildJoinColumn(JoinColumn.JOIN_COLUMN, -1);
+		joinColumn.addSelf();
 		joinColumn.setName(name);
 		return joinColumn;
 	}
@@ -58,7 +59,8 @@
 	 */
 	@Override
 	public ExternalNoSqlJoinField addJoinField(String name) {
-		ExternalNoSqlJoinField joinField = buildJoinField(-1);
+		NoSqlJoinField joinField = buildJoinField(-1);
+		joinField.addSelf();
 		joinField.setName(name);
 		return joinField;
 	}
@@ -108,7 +110,7 @@
 		return names;
 	}
 
-	private ExternalNoSqlJoinField buildJoinField(int index) {
+	private NoSqlJoinField buildJoinField(int index) {
 		return new NoSqlJoinField(this, index);
 	}
 
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/OneToOneMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/OneToOneMapping.java
index f1290cb..36cffc0 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/OneToOneMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/OneToOneMapping.java
@@ -48,6 +48,7 @@
 	@Override
 	public ExternalJoinColumn addJoinColumn(String name) {
 		JoinColumn joinColumn = buildJoinColumn(-1);
+		joinColumn.addSelf();
 		joinColumn.setName(name);
 		return joinColumn;
 	}
@@ -57,7 +58,8 @@
 	 */
 	@Override
 	public ExternalNoSqlJoinField addJoinField(String name) {
-		ExternalNoSqlJoinField joinField = buildJoinField(-1);
+		NoSqlJoinField joinField = buildJoinField(-1);
+		joinField.addSelf();
 		joinField.setName(name);
 		return joinField;
 	}
@@ -68,6 +70,7 @@
 	@Override
 	public ExternalPrimaryKeyJoinColumn addPrimaryKeyJoinColumn(String name) {
 		PrimaryKeyJoinColumn pkJoinColumn = buildPrimaryKeyJoinColumn(-1);
+		pkJoinColumn.addSelf();
 		pkJoinColumn.setName(name);
 		return pkJoinColumn;
 	}
@@ -112,7 +115,7 @@
 		return new JoinColumn(this, JoinColumn.JOIN_COLUMN, index);
 	}
 
-	private ExternalNoSqlJoinField buildJoinField(int index) {
+	private NoSqlJoinField buildJoinField(int index) {
 		return new NoSqlJoinField(this, index);
 	}
 
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/OptimisticLocking.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/OptimisticLocking.java
index fed35cb..f9b6d85 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/OptimisticLocking.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/OptimisticLocking.java
@@ -47,6 +47,7 @@
 	@Override
 	public ExternalEntityColumn addColumn(String columnName) {
 		EntityColumn column = buildColumn(-1);
+		column.addSelf();
 		column.setName(columnName);
 		return column;
 	}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PersistenceUnit.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PersistenceUnit.java
index 77bcb58..1fd465b 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PersistenceUnit.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PersistenceUnit.java
@@ -59,6 +59,7 @@
 	@Override
 	public ExternalEntityListener addEntityListener(String className) {
 		EntityListener entityListener = buildEntityListener(-1);
+		entityListener.addSelf();
 		entityListener.setClassName(className);
 		return entityListener;
 	}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PrimaryKey.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PrimaryKey.java
index aeed572..99073f4 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PrimaryKey.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/PrimaryKey.java
@@ -48,6 +48,7 @@
 	@Override
 	public ExternalEntityColumn addColumn(String columnName) {
 		EntityColumn column = buildColumn(-1);
+		column.addSelf();
 		column.setName(columnName);
 		return column;
 	}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/SQLResultSetMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/SQLResultSetMapping.java
index 596ef04..14a0d94 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/SQLResultSetMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/SQLResultSetMapping.java
@@ -55,6 +55,7 @@
 	@Override
 	public ExternalColumnResult addColumnResult(String name) {
 		ColumnResult entityResult = buildColumnResult(-1);
+		entityResult.addSelf();
 		entityResult.setName(name);
 		return entityResult;
 	}
@@ -65,6 +66,7 @@
 	@Override
 	public ExternalEntityResult addEntityResult(String className) {
 		EntityResult entityResult = buildEntityResult(index);
+		entityResult.addSelf();
 		entityResult.setEntityClassName(className);
 		return entityResult;
 	}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/SecondaryTable.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/SecondaryTable.java
index db64e37..03cabad 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/SecondaryTable.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/SecondaryTable.java
@@ -51,6 +51,7 @@
 	@Override
 	public ExternalPrimaryKeyJoinColumn addPrimaryKeyJoinColumn(String name) {
 		PrimaryKeyJoinColumn primaryKeyJoinColumn = buildPrimaryKeyJoinColumn(-1);
+		primaryKeyJoinColumn.addSelf();
 		primaryKeyJoinColumn.setName(name);
 		return primaryKeyJoinColumn;
 	}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Table.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Table.java
index 8a7839d..29137db 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Table.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Table.java
@@ -47,6 +47,7 @@
 	@Override
 	public ExternalUniqueConstraint addUniqueConstraint(ListIterable<String> columnNames) {
 		UniqueConstraint uniqueConstraint = buildUniqueConstraint(-1);
+		uniqueConstraint.addSelf();
 		uniqueConstraint.setColumnNames(columnNames);
 		return uniqueConstraint;
 	}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/TableGenerator.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/TableGenerator.java
index 993d510..8e4ddc4 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/TableGenerator.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/TableGenerator.java
@@ -51,6 +51,7 @@
 	@Override
 	public ExternalUniqueConstraint addUniqueConstraint(ListIterable<String> columnNames) {
 		UniqueConstraint uniqueConstraint = buildUniqueConstraint(-1);
+		uniqueConstraint.addSelf();
 		uniqueConstraint.setColumnNames(columnNames);
 		return uniqueConstraint;
 	}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/VariableOneToOneMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/VariableOneToOneMapping.java
index 8b331a7..6220b22 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/VariableOneToOneMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/VariableOneToOneMapping.java
@@ -72,6 +72,7 @@
 	@Override
 	public ExternalDiscriminatorClass addDiscriminatorClass(String discrimator, String value) {
 		DiscriminatorClass discriminatorClass = buildDiscriminatorClass(-1);
+		discriminatorClass.addSelf();
 		discriminatorClass.setDiscriminator(discrimator);
 		discriminatorClass.setValue(value);
 		return discriminatorClass;
@@ -93,6 +94,7 @@
 	@Override
 	public ExternalJoinColumn addJoinColumn(String name) {
 		JoinColumn joinColumn = buildJoinColumn(-1);
+		joinColumn.addSelf();
 		joinColumn.setName(name);
 		return joinColumn;
 	}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/persistence/dom/PersistenceConfiguration.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/persistence/dom/PersistenceConfiguration.java
index 2a87f14..9697e3d 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/persistence/dom/PersistenceConfiguration.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/persistence/dom/PersistenceConfiguration.java
@@ -55,6 +55,7 @@
 	@Override
 	public ExternalPersistenceUnit addPersistenceUnit(String name) {
 		PersistenceUnit persistenceUnit = buildPersistenceUnit(-1);
+		persistenceUnit.addSelf();
 		persistenceUnit.setName(name);
 		return persistenceUnit;
 	}
@@ -72,7 +73,7 @@
 	 */
 	@Override
 	public Element addSelf(String elementName, List<String> elementNamesOrder) {
-		return getHelper().buildPersistenceConfiguration(this);
+		return helper.buildPersistenceConfiguration(this);
 	}
 
 	private PersistenceUnit buildPersistenceUnit(int index) {
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/persistence/dom/PersistenceUnit.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/persistence/dom/PersistenceUnit.java
index 67f3cd8..317659b 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/persistence/dom/PersistenceUnit.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/persistence/dom/PersistenceUnit.java
@@ -57,6 +57,7 @@
 	@Override
 	public ExternalProperty addProperty(String name, String value) {
 		Property property = buildProperty(-1);
+		property.addSelf();
 		property.setName(name);
 		property.setValue(value);
 		return property;
