diff --git a/plugins/org.eclipse.jst.j2ee.ejb.annotations.xdoclet/src/org/eclipse/jst/j2ee/ejb/annotations/internal/xdoclet/provider/XDocletAnnotationProvider.java b/plugins/org.eclipse.jst.j2ee.ejb.annotations.xdoclet/src/org/eclipse/jst/j2ee/ejb/annotations/internal/xdoclet/provider/XDocletAnnotationProvider.java
index 9b49169..29c5d5b 100644
--- a/plugins/org.eclipse.jst.j2ee.ejb.annotations.xdoclet/src/org/eclipse/jst/j2ee/ejb/annotations/internal/xdoclet/provider/XDocletAnnotationProvider.java
+++ b/plugins/org.eclipse.jst.j2ee.ejb.annotations.xdoclet/src/org/eclipse/jst/j2ee/ejb/annotations/internal/xdoclet/provider/XDocletAnnotationProvider.java
@@ -77,8 +77,7 @@
 	public boolean isValid() {
 
 		XDocletPreferenceStore store = XDocletPreferenceStore.forProject(null);
-		XDocletRuntime runtime = XDocletExtensionUtil.getRuntime(store
-				.getProperty(XDocletPreferenceStore.XDOCLETVERSION));
+		XDocletRuntime runtime = XDocletExtensionUtil.getRuntime(store.getProperty(XDocletPreferenceStore.XDOCLETVERSION));
 		runtime.setHome(store.getProperty(XDocletPreferenceStore.XDOCLETHOME));
 		return runtime.isValid();
 	}
@@ -87,8 +86,7 @@
 		return "XDocletAnnotionProvider"; //$NON-NLS-1$
 	}
 
-	public void generateSession(ISessionBean delegate, IProgressMonitor monitor)
-			throws CoreException, InterruptedException {
+	public void generateSession(ISessionBean delegate, IProgressMonitor monitor) throws CoreException, InterruptedException {
 
 		IDataModel dataModel = delegate.getDataModel();
 
@@ -96,8 +94,7 @@
 		String stub = ""; //$NON-NLS-1$
 		String method = ""; //$NON-NLS-1$
 
-		IConfigurationElement preferredAnnotation = EmitterUtilities
-				.findEmitter("XDoclet"); //$NON-NLS-1$
+		IConfigurationElement preferredAnnotation = EmitterUtilities.findEmitter("XDoclet"); //$NON-NLS-1$
 
 		try {
 			EjbEmitter ejbEmitter = new SessionEjbEmitter(preferredAnnotation);
@@ -110,23 +107,16 @@
 		} catch (CoreException e) {
 			throw e;
 		} catch (Exception e) {
-			throw new CoreException(new Status(IStatus.ERROR,
-					ModelPlugin.PLUGINID, 0, "Session EJB Emitters Failed", e));
+			throw new CoreException(new Status(IStatus.ERROR, ModelPlugin.PLUGINID, 0, "Session EJB Emitters Failed", e));
 		}
 
 		EjbBuilder ejbBuilder = new EjbBuilder();
 		ejbBuilder.setConfigurationElement(preferredAnnotation);
 		ejbBuilder.setMonitor(monitor);
-		ejbBuilder
-				.setPackageFragmentRoot((IPackageFragmentRoot) dataModel
-						.getProperty(INewJavaClassDataModelProperties.JAVA_PACKAGE_FRAGMENT_ROOT));
-		ejbBuilder.setEnterpriseBeanDelegate(delegate);
-		ejbBuilder
-				.setTypeName(dataModel
-						.getStringProperty(INewJavaClassDataModelProperties.CLASS_NAME));
-		ejbBuilder
-				.setPackageName(dataModel
-						.getStringProperty(INewJavaClassDataModelProperties.JAVA_PACKAGE));
+		ejbBuilder.setPackageFragmentRoot((IPackageFragmentRoot) dataModel
+				.getProperty(INewJavaClassDataModelProperties.JAVA_PACKAGE_FRAGMENT_ROOT));
+		ejbBuilder.setTypeName(dataModel.getStringProperty(INewJavaClassDataModelProperties.CLASS_NAME));
+		ejbBuilder.setPackageName(dataModel.getStringProperty(INewJavaClassDataModelProperties.JAVA_PACKAGE));
 
 		ejbBuilder.setTypeComment(comment);
 		ejbBuilder.setTypeStub(stub);
@@ -137,16 +127,13 @@
 
 		IType bean = ejbBuilder.getCreatedType();
 		IResource javaFile = bean.getCorrespondingResource();
-		IProject project = (IProject) dataModel
-				.getProperty(INewJavaClassDataModelProperties.PROJECT);
+		IProject project = (IProject) dataModel.getProperty(INewJavaClassDataModelProperties.PROJECT);
 		initializeBuilder(monitor, preferredAnnotation, javaFile, project);
 		XDocletBuildUtility.runNecessaryBuilders(monitor, project);
 
 	}
 
-	public void generateCMP(IContainerManagedEntityBean delegate,
-			IProgressMonitor monitor) throws CoreException,
-			InterruptedException {
+	public void generateCMP(IContainerManagedEntityBean delegate, IProgressMonitor monitor) throws CoreException, InterruptedException {
 
 		IDataModel dataModel = delegate.getDataModel();
 
@@ -155,8 +142,7 @@
 		String method = ""; //$NON-NLS-1$
 		String fields = ""; //$NON-NLS-1$
 
-		IConfigurationElement preferredAnnotation = EmitterUtilities
-				.findEmitter("XDoclet"); //$NON-NLS-1$
+		IConfigurationElement preferredAnnotation = EmitterUtilities.findEmitter("XDoclet"); //$NON-NLS-1$
 
 		try {
 			EjbEmitter ejbEmitter = new EntityEjbEmitter(preferredAnnotation);
@@ -170,23 +156,16 @@
 		} catch (CoreException e) {
 			throw e;
 		} catch (Exception e) {
-			throw new CoreException(new Status(IStatus.ERROR,
-					ModelPlugin.PLUGINID, 0, "CMP EJB Emitters Failed", e));
+			throw new CoreException(new Status(IStatus.ERROR, ModelPlugin.PLUGINID, 0, "CMP EJB Emitters Failed", e));
 		}
 
 		EjbBuilder ejbBuilder = new EjbBuilder();
 		ejbBuilder.setConfigurationElement(preferredAnnotation);
 		ejbBuilder.setMonitor(monitor);
-		ejbBuilder
-				.setPackageFragmentRoot((IPackageFragmentRoot) dataModel
-						.getProperty(INewJavaClassDataModelProperties.JAVA_PACKAGE_FRAGMENT_ROOT));
-		ejbBuilder.setEnterpriseBeanDelegate(delegate);
-		ejbBuilder
-				.setTypeName(dataModel
-						.getStringProperty(INewJavaClassDataModelProperties.CLASS_NAME));
-		ejbBuilder
-				.setPackageName(dataModel
-						.getStringProperty(INewJavaClassDataModelProperties.JAVA_PACKAGE));
+		ejbBuilder.setPackageFragmentRoot((IPackageFragmentRoot) dataModel
+				.getProperty(INewJavaClassDataModelProperties.JAVA_PACKAGE_FRAGMENT_ROOT));
+		ejbBuilder.setTypeName(dataModel.getStringProperty(INewJavaClassDataModelProperties.CLASS_NAME));
+		ejbBuilder.setPackageName(dataModel.getStringProperty(INewJavaClassDataModelProperties.JAVA_PACKAGE));
 
 		ejbBuilder.setTypeComment(comment);
 		ejbBuilder.setTypeStub(stub);
@@ -197,28 +176,23 @@
 
 		IType bean = ejbBuilder.getCreatedType();
 		IResource javaFile = bean.getCorrespondingResource();
-		IProject project = (IProject) dataModel
-				.getProperty(INewJavaClassDataModelProperties.PROJECT);
+		IProject project = (IProject) dataModel.getProperty(INewJavaClassDataModelProperties.PROJECT);
 		initializeBuilder(monitor, preferredAnnotation, javaFile, project);
 		XDocletBuildUtility.runNecessaryBuilders(monitor, project);
 
 	}
 
-	private String applyRuntimeAnnotations(
-			IEnterpriseBean delegate, String comment) {
-		String commentRuntime = XDocletExtensionUtil
-				.getRuntimeTypeAnnotations(delegate);
+	private String applyRuntimeAnnotations(IEnterpriseBean delegate, String comment) {
+		String commentRuntime = XDocletExtensionUtil.getRuntimeTypeAnnotations(delegate);
 		int i = comment.indexOf(END_XDOCLET_DEFINITION);
 		if (commentRuntime == null || i < 0)
 			return comment;
 
-		comment = comment.substring(0, i) + commentRuntime
-				+ comment.substring(i);
+		comment = comment.substring(0, i) + commentRuntime + comment.substring(i);
 		return comment;
 	}
 
-	public void generateMessageDriven(IMessageDrivenBean delegate,
-			IProgressMonitor monitor) throws CoreException,
+	public void generateMessageDriven(IMessageDrivenBean delegate, IProgressMonitor monitor) throws CoreException,
 			InterruptedException {
 
 		IDataModel dataModel = delegate.getDataModel();
@@ -227,12 +201,10 @@
 		String stub = "";
 		String method = "";
 		String fields = "";
-		IConfigurationElement emitterConfiguration = EmitterUtilities
-				.findEmitter("XDoclet");
+		IConfigurationElement emitterConfiguration = EmitterUtilities.findEmitter("XDoclet");
 
 		try {
-			EjbEmitter ejbEmitter = new MessageDrivenEjbEmitter(
-					emitterConfiguration);
+			EjbEmitter ejbEmitter = new MessageDrivenEjbEmitter(emitterConfiguration);
 			ejbEmitter.setMonitor(monitor);
 			fields = ejbEmitter.emitFields(delegate);
 			comment = ejbEmitter.emitTypeComment(delegate);
@@ -243,24 +215,16 @@
 		} catch (CoreException e) {
 			throw e;
 		} catch (Exception e) {
-			throw new CoreException(new Status(IStatus.ERROR,
-					ModelPlugin.PLUGINID, 0,
-					"MessageDriven EJB Emitters Failed", e));
+			throw new CoreException(new Status(IStatus.ERROR, ModelPlugin.PLUGINID, 0, "MessageDriven EJB Emitters Failed", e));
 		}
 
 		EjbBuilder ejbBuilder = new EjbBuilder();
 		ejbBuilder.setConfigurationElement(emitterConfiguration);
 		ejbBuilder.setMonitor(monitor);
-		ejbBuilder
-				.setPackageFragmentRoot((IPackageFragmentRoot) dataModel
-						.getProperty(INewJavaClassDataModelProperties.JAVA_PACKAGE_FRAGMENT_ROOT));
-		ejbBuilder.setEnterpriseBeanDelegate(delegate);
-		ejbBuilder
-				.setTypeName(dataModel
-						.getStringProperty(INewJavaClassDataModelProperties.CLASS_NAME));
-		ejbBuilder
-				.setPackageName(dataModel
-						.getStringProperty(INewJavaClassDataModelProperties.JAVA_PACKAGE));
+		ejbBuilder.setPackageFragmentRoot((IPackageFragmentRoot) dataModel
+				.getProperty(INewJavaClassDataModelProperties.JAVA_PACKAGE_FRAGMENT_ROOT));
+		ejbBuilder.setTypeName(dataModel.getStringProperty(INewJavaClassDataModelProperties.CLASS_NAME));
+		ejbBuilder.setPackageName(dataModel.getStringProperty(INewJavaClassDataModelProperties.JAVA_PACKAGE));
 
 		ejbBuilder.setTypeComment(comment);
 		ejbBuilder.setTypeStub(stub);
@@ -270,14 +234,14 @@
 		ejbBuilder.createType();
 		IType bean = ejbBuilder.getCreatedType();
 		IResource javaFile = bean.getCorrespondingResource();
-		IProject project = (IProject) dataModel
-				.getProperty(INewJavaClassDataModelProperties.PROJECT);
+		IProject project = (IProject) dataModel.getProperty(INewJavaClassDataModelProperties.PROJECT);
 		initializeBuilder(monitor, emitterConfiguration, javaFile, project);
 		XDocletBuildUtility.runNecessaryBuilders(monitor, project);
 
 	}
 
-	protected void initializeBuilder(IProgressMonitor monitor, IConfigurationElement emitterConfiguration, IResource javaFile, IProject project) throws CoreException {
+	protected void initializeBuilder(IProgressMonitor monitor, IConfigurationElement emitterConfiguration, IResource javaFile,
+			IProject project) throws CoreException {
 		addXDocletFacet(project, monitor);
 		// To add an xdoclet builder we must use a
 		// a facet now.
