diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/oxm/XMLConversionManager.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/oxm/XMLConversionManager.java
index dcca604..61a78c3 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/oxm/XMLConversionManager.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/oxm/XMLConversionManager.java
@@ -27,6 +27,7 @@
 import java.util.Locale;
 import java.util.StringTokenizer;
 import java.util.TimeZone;
+import java.util.UUID;
 
 import javax.xml.datatype.DatatypeConfigurationException;
 import javax.xml.datatype.DatatypeConstants;
@@ -192,6 +193,8 @@ public Object convertObject(Object sourceObject, Class javaClass) throws Convers
             return convertObjectToDuration(sourceObject);
         } else if ((javaClass == CoreClassConstants.FILE) && (sourceObject instanceof String)) {
             return convertStringToFile((String) sourceObject);
+        } else if ((javaClass == Constants.UUID) && (sourceObject instanceof String)) {
+            return UUID.fromString((String) sourceObject);
         } else {
             try {
                 return super.convertObject(sourceObject, javaClass);
diff --git a/moxy/eclipselink.moxy.test/resource/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElement.json b/moxy/eclipselink.moxy.test/resource/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElement.json
index 813e540..b993f5a 100644
--- a/moxy/eclipselink.moxy.test/resource/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElement.json
+++ b/moxy/eclipselink.moxy.test/resource/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElement.json
@@ -1 +1 @@
-[{"root":{"name":"FOO"}},{"root":{"name":"BAR"}}]
+[{"root":{"name":"FOO", "uuid":"8ae03765-ee01-4a81-a0de-a2497a10739f"}},{"root":{"name":"BAR"}}]
\ No newline at end of file
diff --git a/moxy/eclipselink.moxy.test/resource/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementFormatted.json b/moxy/eclipselink.moxy.test/resource/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementFormatted.json
index ecb8496..6e225c4 100644
--- a/moxy/eclipselink.moxy.test/resource/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementFormatted.json
+++ b/moxy/eclipselink.moxy.test/resource/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementFormatted.json
@@ -1,6 +1,7 @@
 [ {
    "root" : {
-      "name" : "FOO"
+      "name" : "FOO",
+      "uuid" : "8ae03765-ee01-4a81-a0de-a2497a10739f"
    }
 }, {
    "root" : {
diff --git a/moxy/eclipselink.moxy.test/resource/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElement.json b/moxy/eclipselink.moxy.test/resource/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElement.json
index ab46064..f54f6e6 100644
--- a/moxy/eclipselink.moxy.test/resource/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElement.json
+++ b/moxy/eclipselink.moxy.test/resource/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElement.json
@@ -1 +1 @@
-[{"name":"FOO"},{"name":"BAR"}]
+[{"name":"FOO", "uuid":"8ae03765-ee01-4a81-a0de-a2497a10739f"},{"name":"BAR"}]
\ No newline at end of file
diff --git a/moxy/eclipselink.moxy.test/resource/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementFormatted.json b/moxy/eclipselink.moxy.test/resource/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementFormatted.json
index 9111255..3177e18 100644
--- a/moxy/eclipselink.moxy.test/resource/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementFormatted.json
+++ b/moxy/eclipselink.moxy.test/resource/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementFormatted.json
@@ -1,5 +1,6 @@
 [ {
-   "name" : "FOO"
+   "name" : "FOO",
+   "uuid" : "8ae03765-ee01-4a81-a0de-a2497a10739f"
 }, {
    "name" : "BAR"
 } ]
diff --git a/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementArrayTestCases.java b/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementArrayTestCases.java
index e184f9a..a30689b 100644
--- a/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementArrayTestCases.java
+++ b/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementArrayTestCases.java
@@ -18,6 +18,7 @@
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.UUID;
 
 import javax.xml.transform.stream.StreamSource;
 
@@ -39,6 +40,7 @@ public WithXmlRootElementArrayTestCases(String name) throws Exception {
 
         WithXmlRootElementRoot foo = new WithXmlRootElementRoot();
         foo.setName("FOO");
+        foo.setUuid(UUID.fromString("8ae03765-ee01-4a81-a0de-a2497a10739f"));
         array[0] = foo;
 
         WithXmlRootElementRoot bar = new WithXmlRootElementRoot();
diff --git a/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementJAXBElementNoRootTestCases.java b/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementJAXBElementNoRootTestCases.java
index 7a60055..7b8aaf3 100644
--- a/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementJAXBElementNoRootTestCases.java
+++ b/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementJAXBElementNoRootTestCases.java
@@ -16,6 +16,7 @@
 import java.util.Collection;
 import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.UUID;
 
 import javax.xml.bind.JAXBElement;
 import javax.xml.namespace.QName;
@@ -46,6 +47,7 @@ protected Collection<JAXBElement<WithXmlRootElementRoot>> getControlObject() {
 
         WithXmlRootElementRoot foo = new WithXmlRootElementRoot();
         foo.setName("FOO");
+        foo.setUuid(UUID.fromString("8ae03765-ee01-4a81-a0de-a2497a10739f"));
         JAXBElement<WithXmlRootElementRoot> jbe1 = new JAXBElement<WithXmlRootElementRoot>(new QName("roottest1"), WithXmlRootElementRoot.class, foo);
         list.add(jbe1);
 
@@ -64,6 +66,7 @@ public Object getReadControlObject() {
 
         WithXmlRootElementRoot foo = new WithXmlRootElementRoot();
         foo.setName("FOO");
+        foo.setUuid(UUID.fromString("8ae03765-ee01-4a81-a0de-a2497a10739f"));
         list.add(foo);
 
         WithXmlRootElementRoot bar = new WithXmlRootElementRoot();
diff --git a/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementRoot.java b/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementRoot.java
index 1a7315c..d8d0581 100644
--- a/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementRoot.java
+++ b/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementRoot.java
@@ -12,12 +12,15 @@
  ******************************************************************************/
 package org.eclipse.persistence.testing.jaxb.json.rootlevellist;
 
+import java.util.UUID;
+
 import javax.xml.bind.annotation.XmlRootElement;
 
 @XmlRootElement(name="root")
 public class WithXmlRootElementRoot {//implements Comparable<WithXmlRootElementRoot>{
 
     private String name;
+    private UUID uuid;
 
     public String getName() {
         return name;
@@ -27,6 +30,14 @@ public void setName(String name) {
         this.name = name;
     }
 
+    public UUID getUuid() {
+        return uuid;
+    }
+
+    public void setUuid(UUID uuid) {
+        this.uuid = uuid;
+    }
+
     @Override
     public boolean equals(Object o) {
         if(null == o || o.getClass() != this.getClass()) {
@@ -35,8 +46,13 @@ public boolean equals(Object o) {
         WithXmlRootElementRoot test = (WithXmlRootElementRoot) o;
         if(null == name) {
             return null == test.getName();
+        } else if (!name.equals(test.getName())){
+            return false;
+        }
+        if(null == uuid) {
+            return null == test.getUuid();
         } else {
-            return name.equals(test.getName());
+            return uuid.equals(test.getUuid());
         }
     }
 /*
diff --git a/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementSetTestCases.java b/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementSetTestCases.java
index e6ebaeb..71e2d1b 100644
--- a/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementSetTestCases.java
+++ b/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementSetTestCases.java
@@ -16,6 +16,7 @@
 import java.util.Collection;
 import java.util.LinkedHashSet;
 import java.util.Set;
+import java.util.UUID;
 
 import javax.xml.transform.stream.StreamSource;
 
@@ -37,6 +38,7 @@ protected Set<WithXmlRootElementRoot> getControlObject() {
 
         WithXmlRootElementRoot foo = new WithXmlRootElementRoot();
         foo.setName("FOO");
+        foo.setUuid(UUID.fromString("8ae03765-ee01-4a81-a0de-a2497a10739f"));
         set.add(foo);
 
         WithXmlRootElementRoot bar = new WithXmlRootElementRoot();
diff --git a/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementTestCases.java b/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementTestCases.java
index b89eb00..9131fc8 100644
--- a/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementTestCases.java
+++ b/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementTestCases.java
@@ -15,6 +15,7 @@
 import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.UUID;
 
 import javax.xml.transform.stream.StreamSource;
 
@@ -37,6 +38,7 @@ protected List<WithXmlRootElementRoot> getControlObject() {
 
         WithXmlRootElementRoot foo = new WithXmlRootElementRoot();
         foo.setName("FOO");
+        foo.setUuid(UUID.fromString("8ae03765-ee01-4a81-a0de-a2497a10739f"));
         list.add(foo);
 
         WithXmlRootElementRoot bar = new WithXmlRootElementRoot();
diff --git a/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementArrayTestCases.java b/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementArrayTestCases.java
index 357b3ca..8284277 100644
--- a/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementArrayTestCases.java
+++ b/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementArrayTestCases.java
@@ -20,6 +20,7 @@
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.UUID;
 
 import javax.xml.bind.JAXBElement;
 import javax.xml.namespace.QName;
@@ -50,6 +51,7 @@ public Class getUnmarshalClass(){
 
         WithoutXmlRootElementRoot foo = new WithoutXmlRootElementRoot();
         foo.setName("FOO");
+        foo.setUuid(UUID.fromString("8ae03765-ee01-4a81-a0de-a2497a10739f"));
         array[0] = foo;
 
         WithoutXmlRootElementRoot bar = new WithoutXmlRootElementRoot();
diff --git a/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementRoot.java b/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementRoot.java
index 006557c..a07f3cc 100644
--- a/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementRoot.java
+++ b/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementRoot.java
@@ -12,9 +12,12 @@
  ******************************************************************************/
 package org.eclipse.persistence.testing.jaxb.json.rootlevellist;
 
+import java.util.UUID;
+
 public class WithoutXmlRootElementRoot {
 
     private String name;
+    private UUID uuid;
 
     public String getName() {
         return name;
@@ -24,6 +27,14 @@ public void setName(String name) {
         this.name = name;
     }
 
+    public UUID getUuid() {
+        return uuid;
+    }
+
+    public void setUuid(UUID uuid) {
+        this.uuid = uuid;
+    }
+
     @Override
     public boolean equals(Object o) {
         if(null == o || o.getClass() != this.getClass()) {
@@ -32,8 +43,13 @@ public boolean equals(Object o) {
         WithoutXmlRootElementRoot test = (WithoutXmlRootElementRoot) o;
         if(null == name) {
             return null == test.getName();
+        } else if (!name.equals(test.getName())){
+            return false;
+        }
+        if(null == uuid) {
+            return null == test.getUuid();
         } else {
-            return name.equals(test.getName());
+            return uuid.equals(test.getUuid());
         }
     }
 
diff --git a/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementSetTestCases.java b/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementSetTestCases.java
index 0e71d67..516333d 100644
--- a/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementSetTestCases.java
+++ b/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementSetTestCases.java
@@ -19,6 +19,7 @@
 import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.Set;
+import java.util.UUID;
 
 import javax.xml.bind.JAXBElement;
 import javax.xml.namespace.QName;
@@ -48,6 +49,7 @@ protected Set<WithoutXmlRootElementRoot> getControlObject() {
 
         WithoutXmlRootElementRoot foo = new WithoutXmlRootElementRoot();
         foo.setName("FOO");
+        foo.setUuid(UUID.fromString("8ae03765-ee01-4a81-a0de-a2497a10739f"));
         set.add(foo);
 
         WithoutXmlRootElementRoot bar = new WithoutXmlRootElementRoot();
diff --git a/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementTestCases.java b/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementTestCases.java
index 8c6fd7f..b8c27ad 100644
--- a/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementTestCases.java
+++ b/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementTestCases.java
@@ -16,6 +16,7 @@
 import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.UUID;
 
 import javax.xml.bind.JAXBElement;
 import javax.xml.namespace.QName;
@@ -46,6 +47,7 @@ protected List<WithoutXmlRootElementRoot> getControlObject() {
 
         WithoutXmlRootElementRoot foo = new WithoutXmlRootElementRoot();
         foo.setName("FOO");
+        foo.setUuid(UUID.fromString("8ae03765-ee01-4a81-a0de-a2497a10739f"));
         list.add(foo);
 
         WithoutXmlRootElementRoot bar = new WithoutXmlRootElementRoot();
