diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/property_files/el_jaxb_validation.properties b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/property_files/el_jaxb_validation.properties
index a122081..4f14e7d 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/property_files/el_jaxb_validation.properties
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/property_files/el_jaxb_validation.properties
@@ -12,6 +12,9 @@
 
 OXM_FILE__VERSION_NOT_SUPPORTED = Only OXM files version 2.2 and later are supported.
 
+OXM_JAVA_TYPE__NAME_NOT_SPECIFIED = The java type name must be specified.
+OXM_JAVA_TYPE__PACKAGE_NAME_NOT_UNIFORM = The package name of java types must be uniform within an OXM file.
+
 XML_DISCRIMINATOR_NODE__NOT_SPECIFIED = XmlDiscriminatorNode not specified.
 
 XML_DISCRIMINATOR_VALUE__NOT_SPECIFIED = XmlDiscriminatorValue not specified.
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/oxm/OxmFile.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/oxm/OxmFile.java
index e024245..fbd778f 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/oxm/OxmFile.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/oxm/OxmFile.java
@@ -29,5 +29,10 @@
 	
 	String getPackageName();
 	
+	
+	// ***** xml bindings *****
+	
+	static final String XML_BINDINGS_PROPERTY = "xmlBindings"; //$NON-NLS-1$
+	
 	OxmXmlBindings getXmlBindings();
 }
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/oxm/OxmXmlBindings.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/oxm/OxmXmlBindings.java
index e59c75c..96943ae 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/oxm/OxmXmlBindings.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/context/oxm/OxmXmlBindings.java
@@ -13,6 +13,7 @@
 import org.eclipse.jpt.jaxb.core.context.JaxbContextNode;
 import org.eclipse.jpt.jaxb.eclipselink.core.context.ELXmlAccessOrderHolder;
 import org.eclipse.jpt.jaxb.eclipselink.core.context.ELXmlAccessTypeHolder;
+import org.eclipse.jpt.jaxb.eclipselink.core.resource.oxm.EXmlBindings;
 
 /**
  * Provisional API: This interface is part of an interim API that is still
@@ -27,6 +28,9 @@
 public interface OxmXmlBindings
 		extends JaxbContextNode, ELXmlAccessTypeHolder, ELXmlAccessOrderHolder {
 	
+	EXmlBindings getEXmlBindings();
+	
+	
 	// ***** mapping metadata complete *****
 	
 	final static String XML_MAPPING_METADATA_COMPLETE_PROPERTY = "xmlMappingMetadataComplete"; //$NON-NLS-1$
@@ -38,15 +42,26 @@
 	
 	// ***** package name *****
 	
-	final static String PACKAGE_NAME_PROPERTY = "packageName"; //$NON-NLS-1$
+	/** string associated with specifiedPackageName property */
+	final static String SPECIFIED_PACKAGE_NAME_PROPERTY = "specifiedPackageName"; //$NON-NLS-1$
 	
+	/** return the package name specified on the xml-bindings node */
+	String getSpecifiedPackageName();
+	
+	/** set the package name on the xml-bindings node */
+	void setSpecifiedPackageName(String packageName);
+	
+	/** string associated with impliedPackageName property */
+	final static String IMPLIED_PACKAGE_NAME_PROPERTY = "impliedPackageName"; //$NON-NLS-1$
+	
+	/** return the package name implied by querying java types included in this document */
+	String getImpliedPackageName();
+	
+	/** return the specified package name if specified, otherwise the implied package name */
 	String getPackageName();
 	
-	void setPackageName(String packageName);
-	
-	/**
-	 * Return a qualified name for the given child type
-	 */
+	/** Return a qualified name for the given (qualified or unqualified) child type name, 
+	 *  prepending a package name if applicable */
 	String getQualifiedName(String childTypeName);
 	
 	
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/ELJaxbContextRootImpl.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/ELJaxbContextRootImpl.java
index 6f098e8..186d44d 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/ELJaxbContextRootImpl.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/ELJaxbContextRootImpl.java
@@ -100,6 +100,9 @@
 			if (! unmatchedOxmResources.remove(oxmResource)) {
 				removeOxmFile(oxmFile);
 			}
+			else {
+				oxmFile.update();
+			}
 		}
 		
 		for (JptXmlResource oxmResource : unmatchedOxmResources) {
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmFileImpl.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmFileImpl.java
index 36d62e4..d753062 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmFileImpl.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmFileImpl.java
@@ -9,21 +9,21 @@
  *******************************************************************************/
 package org.eclipse.jpt.jaxb.eclipselink.core.internal.context.oxm;
 
-import java.util.List;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.jpt.common.core.JptResourceType;
-import org.eclipse.jpt.common.core.resource.xml.JptXmlResource;
-import org.eclipse.jpt.common.core.utility.TextRange;
-import org.eclipse.jpt.jaxb.core.internal.context.AbstractJaxbContextNode;
-import org.eclipse.jpt.jaxb.eclipselink.core.context.ELJaxbContextRoot;
-import org.eclipse.jpt.jaxb.eclipselink.core.context.oxm.OxmFile;
-import org.eclipse.jpt.jaxb.eclipselink.core.context.oxm.OxmXmlBindings;
-import org.eclipse.jpt.jaxb.eclipselink.core.internal.validation.ELJaxbValidationMessageBuilder;
-import org.eclipse.jpt.jaxb.eclipselink.core.internal.validation.ELJaxbValidationMessages;
-import org.eclipse.jpt.jaxb.eclipselink.core.resource.oxm.EXmlBindings;
-import org.eclipse.jpt.jaxb.eclipselink.core.resource.oxm.Oxm;
-import org.eclipse.wst.validation.internal.provisional.core.IMessage;
-import org.eclipse.wst.validation.internal.provisional.core.IReporter;
+import java.util.List;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jpt.common.core.JptResourceType;
+import org.eclipse.jpt.common.core.resource.xml.JptXmlResource;
+import org.eclipse.jpt.common.core.utility.TextRange;
+import org.eclipse.jpt.jaxb.core.internal.context.AbstractJaxbContextNode;
+import org.eclipse.jpt.jaxb.eclipselink.core.context.ELJaxbContextRoot;
+import org.eclipse.jpt.jaxb.eclipselink.core.context.oxm.OxmFile;
+import org.eclipse.jpt.jaxb.eclipselink.core.context.oxm.OxmXmlBindings;
+import org.eclipse.jpt.jaxb.eclipselink.core.internal.validation.ELJaxbValidationMessageBuilder;
+import org.eclipse.jpt.jaxb.eclipselink.core.internal.validation.ELJaxbValidationMessages;
+import org.eclipse.jpt.jaxb.eclipselink.core.resource.oxm.EXmlBindings;
+import org.eclipse.jpt.jaxb.eclipselink.core.resource.oxm.Oxm;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
 
 public class OxmFileImpl 
 		extends AbstractJaxbContextNode
@@ -77,11 +77,17 @@
 	@Override
 	public void synchronizeWithResourceModel() {
 		super.synchronizeWithResourceModel();
-		this.resourceType = oxmResource.getResourceType();
-		
-		if (this.xmlBindings != null) {
-			this.xmlBindings.synchronizeWithResourceModel();
-		}
+		this.resourceType = this.oxmResource.getResourceType();
+		syncXmlBindings();
+	}
+	
+	@Override
+	public void update() {
+		super.update();
+		
+		if (this.xmlBindings != null) {
+			this.xmlBindings.update();
+		}
 	}
 	
 	
@@ -90,6 +96,22 @@
 	public OxmXmlBindings getXmlBindings() {
 		return this.xmlBindings;
 	}
+	
+	protected void setXmlBindings(OxmXmlBindings xmlBindings) {
+		OxmXmlBindings oldXmlBindings = this.xmlBindings;
+		this.xmlBindings = xmlBindings;
+		firePropertyChanged(XML_BINDINGS_PROPERTY, oldXmlBindings, xmlBindings);
+	}
+	
+	protected void syncXmlBindings() {
+		EXmlBindings eXmlBindings = (EXmlBindings) this.oxmResource.getRootObject();
+		if (this.xmlBindings == null || this.xmlBindings.getEXmlBindings() != eXmlBindings) {
+			setXmlBindings(buildXmlBindings());
+		}
+		if (this.xmlBindings != null) {
+			this.xmlBindings.synchronizeWithResourceModel();
+		}
+	}
 	
 	protected OxmXmlBindings buildXmlBindings() {
 		// if less than 2.3, then there is no context model support
@@ -124,6 +146,10 @@
 							ELJaxbValidationMessages.OXM_FILE__VERSION_NOT_SUPPORTED,
 							OxmFileImpl.this,
 							getVersionTextRange()));
+		}
+		
+		if (this.xmlBindings != null) {
+			this.xmlBindings.validate(messages, reporter);
 		}
 	}
 }
\ No newline at end of file
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmJavaTypeImpl.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmJavaTypeImpl.java
index 4a4bac2..14504d7 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmJavaTypeImpl.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmJavaTypeImpl.java
@@ -9,11 +9,19 @@
  *******************************************************************************/
 package org.eclipse.jpt.jaxb.eclipselink.core.internal.context.oxm;
 
+import java.util.List;
+import org.eclipse.jpt.common.core.utility.TextRange;
+import org.eclipse.jpt.common.utility.internal.ObjectTools;
+import org.eclipse.jpt.common.utility.internal.StringTools;
 import org.eclipse.jpt.common.utility.internal.TypeDeclarationTools;
 import org.eclipse.jpt.jaxb.core.internal.context.AbstractJaxbContextNode;
 import org.eclipse.jpt.jaxb.eclipselink.core.context.oxm.OxmJavaType;
 import org.eclipse.jpt.jaxb.eclipselink.core.context.oxm.OxmXmlBindings;
+import org.eclipse.jpt.jaxb.eclipselink.core.internal.validation.ELJaxbValidationMessageBuilder;
+import org.eclipse.jpt.jaxb.eclipselink.core.internal.validation.ELJaxbValidationMessages;
 import org.eclipse.jpt.jaxb.eclipselink.core.resource.oxm.EJavaType;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
 
 public class OxmJavaTypeImpl
 		extends AbstractJaxbContextNode
@@ -90,4 +98,49 @@
 	public String getSimpleName() {
 		return TypeDeclarationTools.simpleName(this.qualifiedName);
 	}
+	
+	
+	// ***** validation *****
+	
+	@Override
+	public TextRange getValidationTextRange() {
+		TextRange textRange = this.eJavaType.getValidationTextRange();
+		return (textRange != null) ? textRange : this.getParent().getValidationTextRange();
+	}
+	
+	protected TextRange getNameTextRange() {
+		return this.eJavaType.getNameTextRange();
+	}
+	
+	@Override
+	public void validate(List<IMessage> messages, IReporter reporter) {
+		super.validate(messages, reporter);
+		
+		validateName(messages, reporter);
+		
+	}
+	
+	protected void validateName(List<IMessage> messages, IReporter reporter) {
+		// type name must be specified
+		if (StringTools.isBlank(this.specifiedName)) {
+			messages.add(
+					ELJaxbValidationMessageBuilder.buildMessage(
+							IMessage.HIGH_SEVERITY,
+							ELJaxbValidationMessages.OXM_JAVA_TYPE__NAME_NOT_SPECIFIED,
+							this,
+							getNameTextRange()));
+			return;
+		}
+		
+		// package name must be uniform across oxm file
+		String packageName = TypeDeclarationTools.packageName(this.specifiedName);
+		if (! StringTools.isBlank(packageName) && ! ObjectTools.equals(packageName, getXmlBindings().getPackageName())) {
+			messages.add(
+					ELJaxbValidationMessageBuilder.buildMessage(
+							IMessage.HIGH_SEVERITY,
+							ELJaxbValidationMessages.OXM_JAVA_TYPE__PACKAGE_NAME_NOT_UNIFORM,
+							this,
+							getNameTextRange()));
+		}
+	}
 }
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmXmlBindingsImpl.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmXmlBindingsImpl.java
index 7ce3683..bdb0386 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmXmlBindingsImpl.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/context/oxm/OxmXmlBindingsImpl.java
@@ -9,6 +9,7 @@
  *******************************************************************************/
 package org.eclipse.jpt.jaxb.eclipselink.core.internal.context.oxm;
 
+import java.util.List;
 import org.eclipse.jpt.common.core.utility.TextRange;
 import org.eclipse.jpt.common.utility.internal.ClassNameTools;
 import org.eclipse.jpt.common.utility.internal.ObjectTools;
@@ -25,6 +26,8 @@
 import org.eclipse.jpt.jaxb.eclipselink.core.resource.oxm.EJavaType;
 import org.eclipse.jpt.jaxb.eclipselink.core.resource.oxm.EXmlBindings;
 import org.eclipse.jpt.jaxb.eclipselink.core.resource.oxm.OxmFactory;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
 
 public class OxmXmlBindingsImpl
 		extends AbstractJaxbContextNode
@@ -38,7 +41,8 @@
 	
 	protected boolean xmlMappingMetadataComplete;
 	
-	protected String packageName;
+	protected String specifiedPackageName;
+	protected String impliedPackageName;
 	
 	protected final ContextListContainer<OxmJavaType, EJavaType> javaTypeContainer;
 	
@@ -49,10 +53,15 @@
 		this.specifiedAccessType = buildSpecifiedAccessType();
 		this.specifiedAccessOrder = buildSpecifiedAccessOrder();
 		this.xmlMappingMetadataComplete = buildXmlMappingMetadataComplete();
-		this.packageName = buildPackageName();
+		this.specifiedPackageName = buildSpecifiedPackageName();
+		// impliedPackageName not built until update, as it depends on sub-nodes
 		this.javaTypeContainer = buildJavaTypeContainer();
 	}
 	
+	
+	public EXmlBindings getEXmlBindings() {
+		return this.eXmlBindings;
+	}
 	
 	// ***** sync/update *****
 	
@@ -62,13 +71,14 @@
 		setSpecifiedAccessType_(buildSpecifiedAccessType());
 		setSpecifiedAccessOrder_(buildSpecifiedAccessOrder());
 		setXmlMappingMetadataComplete_(buildXmlMappingMetadataComplete());
-		setPackageName_(buildPackageName());
+		setSpecifiedPackageName_(buildSpecifiedPackageName());
 		this.javaTypeContainer.synchronizeWithResourceModel();
 	}
 	
 	@Override
 	public void update() {
 		super.update();
+		setImpliedPackageName_(buildImpliedPackageName());
 		this.javaTypeContainer.update();
 	}
 	
@@ -158,25 +168,49 @@
 	
 	// ***** package name *****
 	
-	public String getPackageName() {
-		return this.packageName;
+	public String getSpecifiedPackageName() {
+		return this.specifiedPackageName;
 	}
 	
-	public void setPackageName(String packageName) {
+	public void setSpecifiedPackageName(String packageName) {
 		this.eXmlBindings.setPackageName(packageName);
-		setPackageName_(packageName);
+		setSpecifiedPackageName_(packageName);
 	}
 	
-	protected void setPackageName_(String packageName) {
-		String oldPackageName = this.packageName;
-		this.packageName = packageName;
-		firePropertyChanged(PACKAGE_NAME_PROPERTY, oldPackageName, packageName);
-	}
-	
-	protected String buildPackageName() {
-		return this.eXmlBindings.getPackageName();
+	protected void setSpecifiedPackageName_(String packageName) {
+		String oldPackageName = this.specifiedPackageName;
+		this.specifiedPackageName = packageName;
+		firePropertyChanged(SPECIFIED_PACKAGE_NAME_PROPERTY, oldPackageName, packageName);
 	}
 	
+	protected String buildSpecifiedPackageName() {
+		return this.eXmlBindings.getPackageName();
+	}
+	
+	public String getImpliedPackageName() {
+		return this.impliedPackageName;
+	}
+	
+	protected void setImpliedPackageName_(String packageName) {
+		String oldPackageName = this.impliedPackageName;
+		this.impliedPackageName = packageName;
+		firePropertyChanged(IMPLIED_PACKAGE_NAME_PROPERTY, oldPackageName, packageName);
+	}
+	
+	protected String buildImpliedPackageName() {
+		for (OxmJavaType javaType : getJavaTypes()) {
+			String packageName = TypeDeclarationTools.packageName(javaType.getSpecifiedName());
+			if (! StringTools.isBlank(packageName)) {
+				return packageName;
+			}
+		}
+		return StringTools.EMPTY_STRING;
+	}
+	
+	public String getPackageName() {
+		return (this.specifiedPackageName != null) ? this.specifiedPackageName : this.impliedPackageName;
+	}
+	
 	/**
 	 * append package if the name is not qualified
 	 */
@@ -200,7 +234,11 @@
 			return StringTools.concatenate("java.lang.", className);
 		}
 		
-		return StringTools.concatenate(this.packageName, ".", className);
+		if (StringTools.isBlank(this.specifiedPackageName)) {
+			return className;
+		}
+		
+		return StringTools.concatenate(this.specifiedPackageName, ".", className);
 	}
 	
 	
@@ -288,5 +326,14 @@
 	public TextRange getValidationTextRange() {
 		TextRange textRange = this.eXmlBindings.getValidationTextRange();
 		return (textRange != null) ? textRange : this.getParent().getValidationTextRange();
+	}
+	
+	@Override
+	public void validate(List<IMessage> messages, IReporter reporter) {
+		super.validate(messages, reporter);
+		
+		for (OxmJavaType javaType : getJavaTypes()) {
+			javaType.validate(messages, reporter);
+		}
 	}
 }
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/validation/ELJaxbValidationMessages.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/validation/ELJaxbValidationMessages.java
index 0977c7c..0918ebb 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/validation/ELJaxbValidationMessages.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/internal/validation/ELJaxbValidationMessages.java
@@ -22,6 +22,10 @@
 	// oxm file
 	String OXM_FILE__VERSION_NOT_SUPPORTED = "OXM_FILE__VERSION_NOT_SUPPORTED";
 	
+	// oxm java type
+	String OXM_JAVA_TYPE__NAME_NOT_SPECIFIED = "OXM_JAVA_TYPE__NAME_NOT_SPECIFIED";
+	String OXM_JAVA_TYPE__PACKAGE_NAME_NOT_UNIFORM = "OXM_JAVA_TYPE__PACKAGE_NAME_NOT_UNIFORM";
+	
 	// xml discriminator node
 	String XML_DISCRIMINATOR_NODE__NOT_SPECIFIED = "XML_DISCRIMINATOR_NODE__NOT_SPECIFIED";
 	
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/EJavaType.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/EJavaType.java
index 8ad6164..760ee0f 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/EJavaType.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/EJavaType.java
@@ -21,6 +21,7 @@
 import org.eclipse.emf.ecore.util.InternalEList;
 import org.eclipse.jpt.common.core.internal.utility.translators.SimpleTranslator;
 import org.eclipse.jpt.common.core.resource.xml.EBaseObjectImpl;
+import org.eclipse.jpt.common.core.utility.TextRange;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
 /**
@@ -1381,6 +1382,14 @@
 		result.append(')');
 		return result.toString();
 	}
+	
+	
+	// ***** text range *****
+	
+	public TextRange getNameTextRange() {
+		return getAttributeTextRange(Oxm.NAME);
+	}
+	
 
 	// ***** translators *****
 	
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/EXmlBindings.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/EXmlBindings.java
index 77bd82a..a6624ff 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/EXmlBindings.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/EXmlBindings.java
@@ -905,7 +905,7 @@
 		result.append(xmlAccessorOrder);
 		result.append(", xmlMappingMetadataComplete: ");
 		result.append(xmlMappingMetadataComplete);
-		result.append(", packageName: ");
+		result.append(", specifiedPackageName: ");
 		result.append(packageName);
 		result.append(", xmlNameTransformer: ");
 		result.append(xmlNameTransformer);
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/OxmPackage.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/OxmPackage.java
index c3f90a0..122b4e1 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/OxmPackage.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.core/src/org/eclipse/jpt/jaxb/eclipselink/core/resource/oxm/OxmPackage.java
@@ -7284,7 +7284,7 @@
 		initEAttribute(getEXmlBindings_XmlAccessorType(), this.getEXmlAccessType(), "xmlAccessorType", null, 0, 1, EXmlBindings.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getEXmlBindings_XmlAccessorOrder(), this.getEXmlAccessOrder(), "xmlAccessorOrder", null, 0, 1, EXmlBindings.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getEXmlBindings_XmlMappingMetadataComplete(), theXMLTypePackage.getBooleanObject(), "xmlMappingMetadataComplete", null, 0, 1, EXmlBindings.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEAttribute(getEXmlBindings_PackageName(), ecorePackage.getEString(), "packageName", null, 0, 1, EXmlBindings.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getEXmlBindings_PackageName(), ecorePackage.getEString(), "specifiedPackageName", null, 0, 1, EXmlBindings.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getEXmlBindings_XmlNameTransformer(), ecorePackage.getEString(), "xmlNameTransformer", null, 0, 1, EXmlBindings.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getEXmlBindings_XmlSchema(), this.getEXmlSchema(), null, "xmlSchema", null, 0, 1, EXmlBindings.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getEXmlBindings_XmlSchemaType(), this.getEXmlSchemaType(), null, "xmlSchemaType", null, 0, 1, EXmlBindings.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.ui/src/org/eclipse/jpt/jaxb/eclipselink/ui/internal/navigator/OxmFileContentProvider.java b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.ui/src/org/eclipse/jpt/jaxb/eclipselink/ui/internal/navigator/OxmFileContentProvider.java
index 78b09b8..ad61bfd 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.ui/src/org/eclipse/jpt/jaxb/eclipselink/ui/internal/navigator/OxmFileContentProvider.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.eclipselink.ui/src/org/eclipse/jpt/jaxb/eclipselink/ui/internal/navigator/OxmFileContentProvider.java
@@ -13,8 +13,10 @@
 import org.eclipse.jpt.common.utility.internal.model.value.ItemPropertyListValueModelAdapter;
 import org.eclipse.jpt.common.utility.internal.model.value.ListAspectAdapter;
 import org.eclipse.jpt.common.utility.internal.model.value.ListCollectionValueModelAdapter;
+import org.eclipse.jpt.common.utility.internal.model.value.PropertyAspectAdapter;
 import org.eclipse.jpt.common.utility.iterable.ListIterable;
 import org.eclipse.jpt.common.utility.model.value.CollectionValueModel;
+import org.eclipse.jpt.common.utility.model.value.PropertyValueModel;
 import org.eclipse.jpt.jaxb.eclipselink.core.context.ELJaxbPackage;
 import org.eclipse.jpt.jaxb.eclipselink.core.context.oxm.OxmFile;
 import org.eclipse.jpt.jaxb.eclipselink.core.context.oxm.OxmJavaType;
@@ -36,7 +38,7 @@
 	protected CollectionValueModel<OxmJavaType> buildChildrenModel() {
 		return new ListCollectionValueModelAdapter<OxmJavaType>(
 				new ItemPropertyListValueModelAdapter<OxmJavaType>(
-						new ListAspectAdapter<OxmXmlBindings, OxmJavaType>(OxmXmlBindings.JAVA_TYPES_LIST, this.item.getXmlBindings()) {
+						new ListAspectAdapter<OxmXmlBindings, OxmJavaType>(buildXmlBindingsModel(), OxmXmlBindings.JAVA_TYPES_LIST) {
 							@Override
 							protected ListIterable<OxmJavaType> getListIterable() {
 								return this.subject.getJavaTypes();
@@ -47,4 +49,13 @@
 							}
 						}));
 	}
+	
+	protected PropertyValueModel<OxmXmlBindings> buildXmlBindingsModel() {
+		return new PropertyAspectAdapter<OxmFile, OxmXmlBindings>(OxmFile.XML_BINDINGS_PROPERTY, this.item) {
+			@Override
+			protected OxmXmlBindings buildValue_() {
+				return this.subject.getXmlBindings();
+			}
+		};
+	}
 }
diff --git a/jaxb/tests/org.eclipse.jpt.jaxb.eclipselink.core.tests/src/org/eclipse/jpt/jaxb/eclipselink/core/tests/internal/context/oxm/OxmJavaTypeTests.java b/jaxb/tests/org.eclipse.jpt.jaxb.eclipselink.core.tests/src/org/eclipse/jpt/jaxb/eclipselink/core/tests/internal/context/oxm/OxmJavaTypeTests.java
index e48c32b..4f8e43a 100644
--- a/jaxb/tests/org.eclipse.jpt.jaxb.eclipselink.core.tests/src/org/eclipse/jpt/jaxb/eclipselink/core/tests/internal/context/oxm/OxmJavaTypeTests.java
+++ b/jaxb/tests/org.eclipse.jpt.jaxb.eclipselink.core.tests/src/org/eclipse/jpt/jaxb/eclipselink/core/tests/internal/context/oxm/OxmJavaTypeTests.java
@@ -136,7 +136,7 @@
 		assertEquals("java.lang.String", javaType.getQualifiedName());
 		assertEquals("String", javaType.getSimpleName());
 		
-		xmlBindings.setPackageName("test.oxm2");
+		xmlBindings.setSpecifiedPackageName("test.oxm2");
 		javaType.setSpecifiedName("Foo");
 		oxmResource.save();
 		
diff --git a/jaxb/tests/org.eclipse.jpt.jaxb.eclipselink.core.tests/src/org/eclipse/jpt/jaxb/eclipselink/core/tests/internal/context/oxm/OxmXmlBindingsTests.java b/jaxb/tests/org.eclipse.jpt.jaxb.eclipselink.core.tests/src/org/eclipse/jpt/jaxb/eclipselink/core/tests/internal/context/oxm/OxmXmlBindingsTests.java
index fa51981..3175da7 100644
--- a/jaxb/tests/org.eclipse.jpt.jaxb.eclipselink.core.tests/src/org/eclipse/jpt/jaxb/eclipselink/core/tests/internal/context/oxm/OxmXmlBindingsTests.java
+++ b/jaxb/tests/org.eclipse.jpt.jaxb.eclipselink.core.tests/src/org/eclipse/jpt/jaxb/eclipselink/core/tests/internal/context/oxm/OxmXmlBindingsTests.java
@@ -10,6 +10,7 @@
 package org.eclipse.jpt.jaxb.eclipselink.core.tests.internal.context.oxm;
 
 import org.eclipse.jpt.common.core.resource.xml.JptXmlResource;
+import org.eclipse.jpt.common.utility.internal.StringTools;
 import org.eclipse.jpt.common.utility.internal.iterable.IterableTools;
 import org.eclipse.jpt.jaxb.eclipselink.core.context.ELJaxbContextRoot;
 import org.eclipse.jpt.jaxb.eclipselink.core.context.ELXmlAccessOrder;
@@ -276,6 +277,8 @@
 		EXmlBindings eXmlBindings = (EXmlBindings) oxmResource.getRootObject();
 		
 		assertEquals("test.oxm", eXmlBindings.getPackageName());
+		assertEquals("test.oxm", xmlBindings.getSpecifiedPackageName());
+		assertEquals(StringTools.EMPTY_STRING, xmlBindings.getImpliedPackageName());
 		assertEquals("test.oxm", xmlBindings.getPackageName());
 		
 		eXmlBindings.setPackageName("foo");
@@ -283,14 +286,21 @@
 		
 		assertFileContentsContains("oxm.xml", "package-name=\"foo\"", true);
 		assertEquals("foo", eXmlBindings.getPackageName());
+		assertEquals("foo", xmlBindings.getSpecifiedPackageName());
+		assertEquals(StringTools.EMPTY_STRING, xmlBindings.getImpliedPackageName());
 		assertEquals("foo", xmlBindings.getPackageName());
 		
 		eXmlBindings.setPackageName(null);
+		EJavaType eJavaType = OxmFactory.eINSTANCE.createEJavaType();
+		eJavaType.setName("test.foo.Foo");
+		eXmlBindings.getJavaTypes().add(eJavaType);
 		oxmResource.save();
 		
 		assertFileContentsContains("oxm.xml", "package-name=", false);
 		assertNull(eXmlBindings.getPackageName());
-		assertNull(xmlBindings.getPackageName());
+		assertNull(xmlBindings.getSpecifiedPackageName());
+		assertEquals("test.foo", xmlBindings.getImpliedPackageName());
+		assertEquals("test.foo", xmlBindings.getPackageName());
 	}
 	
 	public void testModifyPackageName() throws Exception {
@@ -302,21 +312,21 @@
 		EXmlBindings eXmlBindings = (EXmlBindings) oxmResource.getRootObject();
 		
 		assertEquals("test.oxm", eXmlBindings.getPackageName());
-		assertEquals("test.oxm", xmlBindings.getPackageName());
+		assertEquals("test.oxm", xmlBindings.getSpecifiedPackageName());
 		
-		xmlBindings.setPackageName("foo");
+		xmlBindings.setSpecifiedPackageName("foo");
 		oxmResource.save();
 		
 		assertFileContentsContains("oxm.xml", "package-name=\"foo\"", true);
 		assertEquals("foo", eXmlBindings.getPackageName());
-		assertEquals("foo", xmlBindings.getPackageName());
+		assertEquals("foo", xmlBindings.getSpecifiedPackageName());
 		
-		xmlBindings.setPackageName(null);
+		xmlBindings.setSpecifiedPackageName(null);
 		oxmResource.save();
 		
 		assertFileContentsContains("oxm.xml", "package-name=", false);
 		assertNull(eXmlBindings.getPackageName());
-		assertNull(xmlBindings.getPackageName());
+		assertNull(xmlBindings.getSpecifiedPackageName());
 	}
 	
 	public void testUpdateJavaTypes() throws Exception {
