diff --git a/tools/org.eclipse.persistence.tools.gen.db/src/org/eclipse/persistence/tools/gen/DatabaseType.java b/tools/org.eclipse.persistence.tools.gen.db/src/org/eclipse/persistence/tools/gen/DatabaseType.java
index d60a1da..6677a52 100644
--- a/tools/org.eclipse.persistence.tools.gen.db/src/org/eclipse/persistence/tools/gen/DatabaseType.java
+++ b/tools/org.eclipse.persistence.tools.gen.db/src/org/eclipse/persistence/tools/gen/DatabaseType.java
@@ -24,7 +24,7 @@
  * 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.<p>
  *
- * @see DynamicEntityGenerator
+ * @see RelationalEntityGenerator
  *
  * @version 2.5
  * @author John Bracken
diff --git a/tools/org.eclipse.persistence.tools.gen.db/src/org/eclipse/persistence/tools/gen/DynamicEntityGenerator.java b/tools/org.eclipse.persistence.tools.gen.db/src/org/eclipse/persistence/tools/gen/RelationalEntityGenerator.java
similarity index 97%
rename from tools/org.eclipse.persistence.tools.gen.db/src/org/eclipse/persistence/tools/gen/DynamicEntityGenerator.java
rename to tools/org.eclipse.persistence.tools.gen.db/src/org/eclipse/persistence/tools/gen/RelationalEntityGenerator.java
index dc94d33..b2e8604 100644
--- a/tools/org.eclipse.persistence.tools.gen.db/src/org/eclipse/persistence/tools/gen/DynamicEntityGenerator.java
+++ b/tools/org.eclipse.persistence.tools.gen.db/src/org/eclipse/persistence/tools/gen/RelationalEntityGenerator.java
@@ -41,7 +41,7 @@
  * @version 2.5
  * @author John Bracken
  */
-public class DynamicEntityGenerator {
+public class RelationalEntityGenerator {
 
 	/**
 	 * JPT database reference.
@@ -49,11 +49,11 @@
 	private Database database;
 
 	/**
-	 * Constructs a new {@link DynamicEntityGenerator} based on the provided db connection
+	 * Constructs a new {@link RelationalEntityGenerator} based on the provided db connection
 	 *
 	 * @param database the provided database to use in this dynamic entity generator.
 	 */
-	public DynamicEntityGenerator(Database database) {
+	public RelationalEntityGenerator(Database database) {
 		super();
 		this.database = database;
 	}
diff --git a/tools/org.eclipse.persistence.tools.gen.db/src/org/eclipse/persistence/tools/gen/internal/MappingFileGenerator.java b/tools/org.eclipse.persistence.tools.gen.db/src/org/eclipse/persistence/tools/gen/internal/MappingFileGenerator.java
index 37d4475..7d07c84 100644
--- a/tools/org.eclipse.persistence.tools.gen.db/src/org/eclipse/persistence/tools/gen/internal/MappingFileGenerator.java
+++ b/tools/org.eclipse.persistence.tools.gen.db/src/org/eclipse/persistence/tools/gen/internal/MappingFileGenerator.java
@@ -18,11 +18,9 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Properties;
-import java.util.logging.Level;
-import java.util.logging.Logger;
+
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.VelocityEngine;
-import org.apache.velocity.runtime.log.JdkLogChute;
 
 /**
  * This generator will generate EclipseLink dynamic entities for a set of tables.
@@ -37,7 +35,6 @@
 @SuppressWarnings("nls")
 public class MappingFileGenerator {
 
-	private static final String LOGGER_NAME = "org.eclipse.jpt.entities.gen.log";
 	private final ORMGenCustomizer customizer;
 
 	public static String generate(ORMGenCustomizer customizer) {
@@ -64,15 +61,10 @@
 		List<String> tableNames = this.customizer.getGenTableNames();
 
 		try {
-			//JdkLogChute in this version of Velocity not allow to set log level
-			//Workaround by preset the log level before Velocity is initialized
-			Logger logger = Logger.getLogger(LOGGER_NAME);
-			logger.setLevel(Level.SEVERE);
-
+		
 			Properties vep = new Properties();
 			vep.setProperty("resource.loader", "class");
 			vep.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
-			vep.setProperty(JdkLogChute.RUNTIME_LOG_JDK_LOGGER, LOGGER_NAME);
 			VelocityEngine ve = new VelocityEngine();
 		    ve.init(vep);
 
diff --git a/tools/org.eclipse.persistence.tools.gen.nosql/.classpath b/tools/org.eclipse.persistence.tools.gen.nosql/.classpath
index 0b9079a..fe62b7f 100644
--- a/tools/org.eclipse.persistence.tools.gen.nosql/.classpath
+++ b/tools/org.eclipse.persistence.tools.gen.nosql/.classpath
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="templates/java_entities"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
 		<attributes>
 			<attribute name="owner.project.facets" value="java"/>
diff --git a/tools/org.eclipse.persistence.tools.gen.nosql/.settings/org.eclipse.wst.common.component b/tools/org.eclipse.persistence.tools.gen.nosql/.settings/org.eclipse.wst.common.component
index 4fd455f..1fd8eca 100644
--- a/tools/org.eclipse.persistence.tools.gen.nosql/.settings/org.eclipse.wst.common.component
+++ b/tools/org.eclipse.persistence.tools.gen.nosql/.settings/org.eclipse.wst.common.component
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project-modules id="moduleCoreId" project-version="1.5.0">
+<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
     <wb-module deploy-name="org.eclipse.persistence.tools.gen.nosql">
         <wb-resource deploy-path="/" source-path="/src"/>
+        <wb-resource deploy-path="/" source-path="/templates/java_entities"/>
     </wb-module>
 </project-modules>
diff --git a/tools/org.eclipse.persistence.tools.gen.nosql/META-INF/MANIFEST.MF b/tools/org.eclipse.persistence.tools.gen.nosql/META-INF/MANIFEST.MF
index df4abe3..c959b83 100644
--- a/tools/org.eclipse.persistence.tools.gen.nosql/META-INF/MANIFEST.MF
+++ b/tools/org.eclipse.persistence.tools.gen.nosql/META-INF/MANIFEST.MF
@@ -2,8 +2,13 @@
 Export-Package: 
  org.eclipse.persistence.tools.gen.nosql.mongo
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Require-Bundle: org.eclipse.persistence.tools.utility;bundle-version="2.5.0",
- org.eclipse.persistence.tools.mapping;bundle-version="2.5.0"
+Require-Bundle: org.apache.velocity;bundle-version="1.5.0",
+ org.apache.commons.collections;bundle-version="3.2.0",
+ org.jdom;bundle-version="1.1.1",
+ org.apache.commons.lang;bundle-version="2.1.0",
+ org.eclipse.persistence.tools.utility;bundle-version="2.5.0",
+ org.eclipse.persistence.tools.mapping;bundle-version="2.5.0",
+ javax.persistence;bundle-version="2.0.4"
 Bundle-SymbolicName: org.eclipse.persistence.tools.gen.nosql
 Bundle-Name: EclipseLink Tools NoSql
 Bundle-Vendor: Eclipse.org - EclipseLink Project
diff --git a/tools/org.eclipse.persistence.tools.gen.nosql/src/META-INF/persistence.xml b/tools/org.eclipse.persistence.tools.gen.nosql/src/META-INF/persistence.xml
deleted file mode 100644
index 92e3288..0000000
--- a/tools/org.eclipse.persistence.tools.gen.nosql/src/META-INF/persistence.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<persistence-unit name="mongo-example" transaction-type="RESOURCE_LOCAL">
-		<provider>
-            org.eclipse.persistence.jpa.PersistenceProvider
-        </provider>
-		<mapping-file>META-INF/test.xml</mapping-file>
-		<properties>
-            <property name="eclipselink.target-database" value="org.eclipse.persistence.nosql.adapters.mongo.MongoPlatform"/>
-            <property name="eclipselink.nosql.connection-spec" value="org.eclipse.persistence.nosql.adapters.mongo.MongoConnectionSpec"/>
-            <property name="eclipselink.nosql.property.mongo.port" value="27017"/>
-            <property name="eclipselink.nosql.property.mongo.host" value="localhost"/>
-            <property name="eclipselink.nosql.property.mongo.db" value="scratch"/>
-            <property name="eclipselink.logging.level" value="FINEST"/>
-        </properties>
-</persistence-unit>
\ No newline at end of file
diff --git a/tools/org.eclipse.persistence.tools.gen.nosql/src/org/eclipse/persistence/tools/gen/nosql/mongo/MongoDynamicEntityGenerator.java b/tools/org.eclipse.persistence.tools.gen.nosql/src/org/eclipse/persistence/tools/gen/nosql/mongo/MongoEntityGenerator.java
similarity index 81%
rename from tools/org.eclipse.persistence.tools.gen.nosql/src/org/eclipse/persistence/tools/gen/nosql/mongo/MongoDynamicEntityGenerator.java
rename to tools/org.eclipse.persistence.tools.gen.nosql/src/org/eclipse/persistence/tools/gen/nosql/mongo/MongoEntityGenerator.java
index f01c0e2..583abd9 100644
--- a/tools/org.eclipse.persistence.tools.gen.nosql/src/org/eclipse/persistence/tools/gen/nosql/mongo/MongoDynamicEntityGenerator.java
+++ b/tools/org.eclipse.persistence.tools.gen.nosql/src/org/eclipse/persistence/tools/gen/nosql/mongo/MongoEntityGenerator.java
@@ -13,15 +13,23 @@
  *     Oracle - initial API and implementation
  *
  ******************************************************************************/
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.StringWriter;
 import java.net.UnknownHostException;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Properties;
 import java.util.Set;
 import java.util.Vector;
 
+import javax.persistence.AccessType;
+
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
 import org.eclipse.persistence.tools.gen.nosql.mongo.meta.CollectionDescriptor;
 import org.eclipse.persistence.tools.gen.nosql.mongo.meta.ColumnDescriptor;
 import org.eclipse.persistence.tools.gen.nosql.mongo.meta.LeafColumnDescriptor;
@@ -37,6 +45,7 @@
 import org.eclipse.persistence.tools.mapping.orm.ExternalORMConfiguration;
 import org.eclipse.persistence.tools.mapping.orm.ORMDocumentType;
 import org.eclipse.persistence.tools.mapping.orm.dom.ORMRepository;
+import org.eclipse.persistence.tools.utility.CollectionTools;
 import org.eclipse.persistence.tools.utility.NameTools;
 
 import com.mongodb.BasicDBList;
@@ -50,9 +59,9 @@
 import com.mongodb.ServerAddress;
 
 /**
- * This class is an entry point for dynamic entity generation for MongoDB. 
- * It provides API for discovering metadata (table names, etc) and generating 
- * EclipseLink JPA, NoSql, mapping files.
+ * This class is an entry point for dynamic entity xml and source generation for 
+ * MongoDB. It also provides API for discovering metadata (table names, etc) and generating 
+ * EclipseLink-JPA NoSql, mapping files.
  * <p>
  * 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
@@ -62,7 +71,7 @@
  * @author John Bracken
  * @version 2.5
  */
-public class MongoDynamicEntityGenerator {
+public class MongoEntityGenerator {
 
 	/** Mongo database connection to use in generation. */
 	private Mongo connection;
@@ -74,7 +83,7 @@
 	private int rowSampleSize;
 	
 	/**
-	 * Constructs a new {@link MongoDynamicEntityGenerator} based on the provided 
+	 * Constructs a new {@link MongoEntityGenerator} based on the provided 
 	 * db connection information.
 	 * 
 	 * @param host the MongoDB network host.
@@ -87,7 +96,7 @@
 	 * @throws MongoException
 	 * @throws UnknownHostException
 	 */
-	public MongoDynamicEntityGenerator(String host, int port, String dbName, int rowSampleSize) 
+	public MongoEntityGenerator(String host, int port, String dbName, int rowSampleSize) 
 														throws MongoException, UnknownHostException {
 		super();
 		this.rowSampleSize = rowSampleSize;
@@ -137,18 +146,78 @@
 	}
 	
 	/**
-	 * Creates an eclipselink-orm.xml descriptor mapping the provided <code>collectionNames</code>
-	 * as EclipseLink dynamic entities.
+	 * Generates a set of EclipseLink, java entity files mapped to the underlying Mongo 
+	 * database for the given <code>collectionNames</code>.
 	 * 
-	 * @param collectionNames
-	 * @return a {@link String} representation of the eclipselink-orm.xml.
+	 * @param collectionNames names of the Mongo collections to generate entities for. 
+	 * @param packageName java package to use for the generated code.
+	 * @param baseDirectory the base directory to use for the generated code.
+	 * @param type the access type to use (method versus field annotations).
+	 * 
+	 * @throws Exception
 	 */
-	public String generate(Collection<String> collectionNames) {
+	public void generateSource(Collection<String> collectionNames, String packageName, 
+													  File baseDirectory, AccessType type) throws Exception {
 		// Create metadata descriptors for the specified collections.
 		List<CollectionDescriptor> collectionDescriptors = buildCollectionDescriptors(collectionNames);
+		ExternalORMConfiguration config = generate(collectionDescriptors);
 		
-		// Generate an eclpselink-orm.xml from the collection descriptors
-		return generateORMConfig(collectionDescriptors);
+		// Ensure that the provided gen directory and package folders exists
+		File packageDirectory = new File(baseDirectory, packageName.replace('.', '/') + "/");
+		packageDirectory.mkdirs();
+		
+		// Build up the velocity generator
+		Properties vep = new Properties();
+		vep.setProperty("resource.loader", "class");
+		vep.setProperty("class.resource.loader.class",
+					    "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
+		VelocityEngine ve = new VelocityEngine();
+	    ve.init(vep);
+
+	    // Generate source for entities
+	    for (ExternalEntity entity : config.entities()) {
+	    	generateSource(entity, type, "entity.java.vm", packageName, packageDirectory, ve);
+	    }
+	    
+	    // Generate source for embeddables
+	    for (ExternalEmbeddableEntity entity : config.embeddableEntities()) {
+	    	generateSource(entity, type, "embeddable.java.vm", packageName, packageDirectory, ve);
+	    }
+	}
+
+	/**
+	 *  Generates the entity source file for the provided mapping metadata.
+	 * 
+	 * @param entity the metadata representation of the entity.
+	 * @param accessType the {@link AccessType} to use (method or field) for annotations.
+	 * @param templateName the source gen template to use (embeddable, entity, etc).
+	 * @param packageName the package name to use.
+	 * @param packageDirectory the directory to generate the source file in.
+	 * @param ve the velocity engine to use.
+	 * 
+	 * @throws Exception
+	 */
+	private void generateSource(ExternalEmbeddableEntity entity, AccessType accessType, 
+														 String templateName, String packageName, 
+														 File packageDirectory, VelocityEngine ve) throws Exception {
+		VelocityContext context = new VelocityContext();
+        context.put("entity", entity);
+        context.put("mappings", CollectionTools.list(entity.mappings()));
+        context.put("packageName", packageName);
+		context.put("accessType", accessType);
+        StringWriter w = new StringWriter();
+		ve.mergeTemplate(templateName, context, w);
+		
+		String fileContent = w.toString();
+		
+		File javaFile = new File(packageDirectory, entity.getClassName() + ".java");
+		
+		byte[] content = fileContent.getBytes("UTF-8");
+		javaFile.createNewFile();
+		FileOutputStream writer = new FileOutputStream(javaFile);
+		writer.write(content);
+		writer.flush();
+		writer.close();
 	}
 	
 	/**
@@ -245,6 +314,22 @@
 	}
 
 	/**
+	 * Generates and adds a root level named query for each entity
+	 * enumerate in the {@link ExternalORMConfiguration}.
+	 * 
+	 * @param config the configuration to generate and add queries from.
+	 */
+	private void generateQueries(ExternalORMConfiguration config) {
+		for (ExternalEntity entity : config.entities()) {
+			String entityName = entity.getClassName();
+			ExternalNamedQuery query = config.addNamedQuery(entityName + ".findAll");
+			char identifier = Character.toLowerCase(entityName.charAt(0));
+			query.setQuery("select " + identifier + " from " + entityName + " "  + identifier);
+			
+		}
+	}
+
+	/**
 	 * Generates a {@link String} representation of an eclipselink-orm.xml descriptor based
 	 * on the provided MongoDB {@link CollectionDescriptor} definitions.  
 	 * 
@@ -252,7 +337,7 @@
 	 * 
 	 * @return a {@link String} representation of the eclipselink-orm.xml.
 	 */
-	private String generateORMConfig(List<CollectionDescriptor> collectionDescriptors) {
+	private ExternalORMConfiguration generate(List<CollectionDescriptor> collectionDescriptors) {
 		// Create a new orm.xml metadata model.
 		ExternalORMConfiguration config = new ORMRepository().buildORMConfiguration(ORMDocumentType.ECLIPELINK_2_4);
 		// track all entity names being used.
@@ -278,23 +363,22 @@
 		// Generate a default, read all query for all entities
 		generateQueries(config);		
 		
-		return config.getXML();
+		return config;
 	}
 	
 	/**
-	 * Generates and adds a root level named query for each entity
-	 * enumerate in the {@link ExternalORMConfiguration}.
+	 * Creates an eclipselink-orm.xml descriptor mapping the provided <code>collectionNames</code>
+	 * as EclipseLink dynamic entities.
 	 * 
-	 * @param config the configuration to generate and add queries from.
+	 * @param collectionNames
+	 * @return a {@link String} representation of the eclipselink-orm.xml.
 	 */
-	private void generateQueries(ExternalORMConfiguration config) {
-		for (ExternalEntity entity : config.entities()) {
-			String entityName = entity.getClassName();
-			ExternalNamedQuery query = config.addNamedQuery(entityName + ".findAll");
-			char identifier = Character.toLowerCase(entityName.charAt(0));
-			query.setQuery("select " + identifier + " from " + entityName + " "  + identifier);
-			
-		}
+	public String generateXML(Collection<String> collectionNames) {
+		// Create metadata descriptors for the specified collections.
+		List<CollectionDescriptor> collectionDescriptors = buildCollectionDescriptors(collectionNames);
+		
+		// Generate an eclpselink-orm.xml from the collection descriptors
+		return generate(collectionDescriptors).getXML();
 	}
 
 	/**
diff --git a/tools/org.eclipse.persistence.tools.gen.nosql/templates/java_entities/embeddable.java.vm b/tools/org.eclipse.persistence.tools.gen.nosql/templates/java_entities/embeddable.java.vm
new file mode 100644
index 0000000..06dec95
--- /dev/null
+++ b/tools/org.eclipse.persistence.tools.gen.nosql/templates/java_entities/embeddable.java.vm
@@ -0,0 +1,15 @@
+#if ($packageName != "")
+package ${packageName};
+#end
+
+import java.io.Serializable;
+import java.util.*;
+import javax.persistence.*;
+import org.eclipse.persistence.nosql.annotations.*;
+
+/**
+ * The persistent class generated for the "${entity.getClassName()}" nested
+ * column.
+ */
+@Embeddable
+#parse("mapped_class.java.vm")
\ No newline at end of file
diff --git a/tools/org.eclipse.persistence.tools.gen.nosql/templates/java_entities/entity.java.vm b/tools/org.eclipse.persistence.tools.gen.nosql/templates/java_entities/entity.java.vm
new file mode 100644
index 0000000..e618d86
--- /dev/null
+++ b/tools/org.eclipse.persistence.tools.gen.nosql/templates/java_entities/entity.java.vm
@@ -0,0 +1,17 @@
+#if ($packageName != "")
+package ${packageName};
+#end
+
+import java.io.Serializable;
+import java.util.*;
+import javax.persistence.*;
+import org.eclipse.persistence.nosql.annotations.*;
+import static org.eclipse.persistence.nosql.annotations.DataFormatType.*;
+
+/**
+ * The persistent class for the "${entity.getNoSql().getDataType()}" Mongo
+ * collection.
+ */
+@Entity
+@NoSql(dataFormat = MAPPED, dataType = "$entity.getNoSql().getDataType()")
+#parse("mapped_class.java.vm")
\ No newline at end of file
diff --git a/tools/org.eclipse.persistence.tools.gen.nosql/templates/java_entities/mapped_class.java.vm b/tools/org.eclipse.persistence.tools.gen.nosql/templates/java_entities/mapped_class.java.vm
new file mode 100644
index 0000000..546b361
--- /dev/null
+++ b/tools/org.eclipse.persistence.tools.gen.nosql/templates/java_entities/mapped_class.java.vm
@@ -0,0 +1,69 @@
+public class ${entity.getClassName()} implements Serializable {
+	
+	private static final long serialVersionUID = 1L;
+#####
+##### fields
+#####
+#foreach ($mapping in $mappings)
+#if ($accessType == "FIELD")
+
+#if ($mapping.isBasicMapping())
+	@Basic
+#elseif ($mapping.isIdMapping())
+	@Id
+	@GeneratedValue
+#elseif ($mapping.isEmbeddedMapping())
+	@Embedded
+#elseif ($mapping.isElementCollectionMapping())
+	@ElementCollection
+#end
+	@Field(name = "${mapping.getNoSqlField()}")
+#end
+#if ($mapping.isElementCollectionMapping())
+	private $mapping.getAttributeTypeShortName()<$mapping.getTargetClassShortName()> $mapping.getName();
+#else
+	private $mapping.getAttributeTypeShortName() $mapping.getName();
+#end
+#end
+
+	public ${entity.getClassName()}() {
+		super();
+	}
+#foreach ($mapping in $mappings)
+
+#if ($accessType == "PROPERTY")
+#if ($mapping.isBasicMapping())
+	@Basic
+#elseif ($mapping.isIdMapping())
+	@Id
+	@GeneratedValue
+#elseif ($mapping.isEmbeddedMapping())
+	@Embedded
+#elseif ($mapping.isElementCollectionMapping())
+	@ElementCollection
+#end
+	@Field(name = "${mapping.getNoSqlField()}")
+#end
+#if ($mapping.isElementCollectionMapping())
+	public $mapping.getAttributeTypeShortName()<$mapping.getTargetClassShortName()> $mapping.getGetMethodName()() {
+		return this.$mapping.getName();
+	}
+#else
+	public $mapping.getAttributeTypeShortName() $mapping.getGetMethodName()() {
+		return this.$mapping.getName();
+	}
+#end
+#end
+#foreach ($mapping in $mappings)
+
+#if ($mapping.isElementCollectionMapping())
+	public void $mapping.getSetMethodName()($mapping.getAttributeTypeShortName()<$mapping.getTargetClassShortName()> $mapping.getName()) {
+		this.$mapping.getName() = $mapping.getName();
+	}
+#else
+	public void $mapping.getSetMethodName()($mapping.getAttributeTypeShortName() $mapping.getName()) {
+		this.$mapping.getName() = $mapping.getName();
+	}
+#end
+#end
+}
\ No newline at end of file
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalElementCollectionMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalElementCollectionMapping.java
index 0872f1d..c5e14ff 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalElementCollectionMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalElementCollectionMapping.java
@@ -101,6 +101,11 @@
 	 * Returns the target class name for this mapping.
 	 */
 	String getTargetClassName();
+	
+	/**
+	 * Returns the target class short name for this mapping.
+	 */
+	String getTargetClassShortName();
 
 	/**
 	 * Indicates whether this basic mapping's column is a LOB.
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalMapping.java
index 86eb74c..5e27acb 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/ExternalMapping.java
@@ -13,6 +13,11 @@
  ******************************************************************************/
 package org.eclipse.persistence.tools.mapping.orm;
 
+import javax.persistence.Basic;
+import javax.persistence.ElementCollection;
+import javax.persistence.Embedded;
+import javax.persistence.Id;
+
 /**
  * This interface represents the basis for all mapping types defined by the JPA spec that are
  * available for configuration via the ORM xml.
@@ -35,10 +40,53 @@
 	String getAttributeType();
 	
 	/**
+	 * Returns the short name of the attribute type 
+	 * of this mapping.
+	 */	
+	String getAttributeTypeShortName();
+	
+	/**
 	 * Returns the name of the mapping.
 	 */
 	String getName();
-
+	
+	/**
+	 * Indicates whether this mapping is of type 
+	 * {@link Basic}.
+	 */
+	boolean isBasicMapping();
+	
+	/**
+	 * Indicates whether this mapping is of type 
+	 * {@link ElementCollection}.
+	 */
+	boolean isElementCollectionMapping();
+	
+	/**
+	 * Indicates whether this mapping is of type 
+	 * {@link Embedded}.
+	 */
+	boolean isEmbeddedMapping();
+	
+	
+	/**
+	 * Derives a getter method name for this mapping's 
+	 * attribute.
+	 */
+	String getGetMethodName();
+	
+	/**
+	 * Derives a setter method name for this mapping's 
+	 * attribute.
+	 */
+	String getSetMethodName();
+	
+	/**
+	 * Indicates whether this mapping is of type 
+	 * {@link Id}.
+	 */
+	boolean isIdMapping();
+	
 	/**
 	 * Sets the attribute type of this mapping.
 	 */
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/BasicMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/BasicMapping.java
index c0874e6..51ca0e2 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/BasicMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/BasicMapping.java
@@ -284,6 +284,14 @@
 	 * {@inheritDoc}
 	 */
 	@Override
+	public final boolean isBasicMapping() {
+		return true;
+	}
+	
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
 	public Boolean isLob() {
 		return getChildBooleanNode(LOB);
 	}
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 daf1e54..972be04 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
@@ -32,6 +32,7 @@
 import org.eclipse.persistence.tools.mapping.orm.ExternalOrderColumn;
 import org.eclipse.persistence.tools.mapping.orm.ExternalStructConverter;
 import org.eclipse.persistence.tools.mapping.orm.ExternalTypeConverter;
+import org.eclipse.persistence.tools.utility.ClassName;
 import org.eclipse.persistence.tools.utility.iterables.ListIterable;
 import org.eclipse.persistence.tools.utility.iterables.ListListIterable;
 import org.w3c.dom.Element;
@@ -624,6 +625,14 @@
 	public String getTargetClassName() {
 		return getAttribute(TARGET_CLASS);
 	}
+	
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public String getTargetClassShortName() {
+		return ClassName.getSimpleName(getTargetClassName());
+	}
 
 	/**
 	 * {@inheritDoc}
@@ -632,6 +641,14 @@
 	public TemporalType getTemporalType() {
 		return getChildEnumNode(TEMPORAL, TemporalType.class);
 	}
+	
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public boolean isElementCollectionMapping() {
+		return true;
+	}
 
 	/**
 	 * {@inheritDoc}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EmbeddableEntity.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EmbeddableEntity.java
index 8ce5870..c2d757c 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EmbeddableEntity.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EmbeddableEntity.java
@@ -41,6 +41,7 @@
 import org.eclipse.persistence.tools.mapping.orm.ExternalStructConverter;
 import org.eclipse.persistence.tools.mapping.orm.ExternalTransientMapping;
 import org.eclipse.persistence.tools.mapping.orm.ExternalTypeConverter;
+import org.eclipse.persistence.tools.utility.CollectionTools;
 import org.eclipse.persistence.tools.utility.Tools;
 import org.eclipse.persistence.tools.utility.iterables.EmptyListIterable;
 import org.eclipse.persistence.tools.utility.iterables.ListIterable;
@@ -719,6 +720,10 @@
 
 		return buildInstantiationCopyPolicy();
 	}
+	
+	public final List<ExternalMapping> getMappings() {
+		return CollectionTools.list(mappings());
+	}
 
 	/**
 	 * {@inheritDoc}
@@ -846,7 +851,7 @@
 	public final Boolean isMetadataComplete() {
 		return getBooleanAttribute(METADATA_COMPLETE);
 	}
-
+	
 	/**
 	 * {@inheritDoc}
 	 */
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EmbeddedMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EmbeddedMapping.java
index e73493b..c1e1339 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EmbeddedMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/EmbeddedMapping.java
@@ -210,6 +210,14 @@
 		ExternalNoSqlField field = buildNoSqlField();
 		return field.getName();
 	}
+	
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public final boolean isEmbeddedMapping() {
+		return true;
+	}
 
 	/**
 	 * {@inheritDoc}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/IdMapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/IdMapping.java
index 831859f..4763c17 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/IdMapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/IdMapping.java
@@ -224,6 +224,14 @@
 	public TemporalType getTemporalType() {
 		return getChildEnumNode(TEMPORAL, TemporalType.class);
 	}
+	
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public final boolean isIdMapping() {
+		return true;
+	}
 
 	/**
 	 * {@inheritDoc}
diff --git a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Mapping.java b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Mapping.java
index e204c20..1eefe57 100644
--- a/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Mapping.java
+++ b/tools/org.eclipse.persistence.tools.mapping/src/org/eclipse/persistence/tools/mapping/orm/dom/Mapping.java
@@ -17,6 +17,8 @@
 import java.util.List;
 
 import org.eclipse.persistence.tools.mapping.orm.ExternalMapping;
+import org.eclipse.persistence.tools.utility.ClassName;
+import org.eclipse.persistence.tools.utility.NameTools;
 import org.w3c.dom.Element;
 
 /**
@@ -106,6 +108,14 @@
 	public final String getAttributeType() {
 		return getAttribute(ATTRIBUTE_TYPE);
 	}
+	
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public final String getAttributeTypeShortName() {
+		return ClassName.getSimpleName(getAttributeType());
+	}
 
 	/**
 	 * {@inheritDoc}
@@ -121,6 +131,14 @@
 
 		return getChild(element, index);
 	}
+	
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public final String getGetMethodName() {
+		return NameTools.javabeanAccessorName("get", getName(), "");
+	}
 
 	/**
 	 * Returns the position of this external form within the list of children owned by the parent.
@@ -151,6 +169,46 @@
 	 * {@inheritDoc}
 	 */
 	@Override
+	public final String getSetMethodName() {
+		return NameTools.javabeanAccessorName("set", getName(), "");
+	}
+	
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public boolean isBasicMapping() {
+		return false;
+	}
+	
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public boolean isElementCollectionMapping() {
+		return false;
+	}
+	
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public boolean isEmbeddedMapping() {
+		return false;
+	}
+	
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public boolean isIdMapping() {
+		return false;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
 	public final void removeSelf() {
 
 		Element element = getChild(getParent(), ATTRIBUTES);
diff --git a/tools/org.eclipse.persistence.tools.utility/src/org/eclipse/persistence/tools/utility/NameTools.java b/tools/org.eclipse.persistence.tools.utility/src/org/eclipse/persistence/tools/utility/NameTools.java
index 82c8d81..0257aeb 100644
--- a/tools/org.eclipse.persistence.tools.utility/src/org/eclipse/persistence/tools/utility/NameTools.java
+++ b/tools/org.eclipse.persistence.tools.utility/src/org/eclipse/persistence/tools/utility/NameTools.java
@@ -200,7 +200,48 @@
 	 */
 	public static final SortedSet<String> JAVA_RESERVED_WORDS_SET =
 		Collections.unmodifiableSortedSet(CollectionTools.sortedSet(JAVA_RESERVED_WORDS));
+	
+	/**
+	 * Generates a javabean compliant method name based on the provided
+	 * property name.  Does not alter the case of the property name if the
+	 * second character is capitalized, e.g.:
+	 * <ul>
+	 *    <li>javabeanMethodName("get", "URL", "") produces "getURL"
+	 *    <li>javabeanMethodName("get", "fName", "") produces "getfName"
+	 *    <li>javabeanMethodName("get", "fname", "") produces "getFname"
+	 *    <li>javabeanMethodName("get", "firstName", "") produces "getFirstName"
+	 * </ul>
+	 *
+	 * The "fName" example in particular may seem strange, but is required by
+	 * JDev ADF interpretation of the JavaBean naming conventions.
+	 * See bug #4572393.
+	 *
+	 * @param prefix - <code>String</code> representing the prefix for the
+	 *                 method name (for example, "get" to produce a getter
+	 *                 method).
+	 * @param propertyName - <code>String</code> representing the name of the
+	 *                 property for which an accessor name is being generated.
+	 * @param suffix - <code>String</code> representing the suffix for the
+	 *                 accessor being generated (for example, "Holder" for
+	 *                 ValueHolder accessors).
+	 */
+	public static String javabeanAccessorName(String prefix, String propertyName, String suffix) {
+		StringBuilder sb = new StringBuilder(propertyName.length() + 10);
 
+		sb.append(prefix);
+		if (propertyName.length() >=  2
+				&& Character.isUpperCase(propertyName.charAt(1)))
+		{
+			sb.append(propertyName);
+		}
+		else
+		{
+			StringTools.capitalizeOn(propertyName, sb);
+		}
+		sb.append(suffix);
+		return sb.toString();
+	}
+	
 	/**
 	 * Generates a Java identifier name based on the provided database name.
 	 * Camel-cases the Java identifier on _ characters and on characters that
