diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.ui/property_files/jpt_jaxb_ui.properties b/jaxb/plugins/org.eclipse.jpt.jaxb.ui/property_files/jpt_jaxb_ui.properties
index 72802c6..7fbffe7 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.ui/property_files/jpt_jaxb_ui.properties
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.ui/property_files/jpt_jaxb_ui.properties
@@ -10,6 +10,8 @@
 
 # JptJaxbUiMessages
 
+ADD_SCHEMA_TO_LIBRARY_JOB__NAME=Adding schema to project schema library
+
 JAVA_PROJECT_WIZARD_PAGE_PROJECT=Project:
 JAVA_PROJECT_WIZARD_PAGE_DESTINATION_PROJECT=Select destination project:
 
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.ui/src/org/eclipse/jpt/jaxb/ui/JptJaxbUiMessages.java b/jaxb/plugins/org.eclipse.jpt.jaxb.ui/src/org/eclipse/jpt/jaxb/ui/JptJaxbUiMessages.java
index ddef4cc..a9f791d 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.ui/src/org/eclipse/jpt/jaxb/ui/JptJaxbUiMessages.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.ui/src/org/eclipse/jpt/jaxb/ui/JptJaxbUiMessages.java
@@ -21,7 +21,9 @@
 	static {
 		NLS.initializeMessages(BUNDLE_NAME, BUNDLE_CLASS);
 	}
-
+	
+	public static String ADD_SCHEMA_TO_LIBRARY_JOB__NAME;
+	
 	public static String JAVA_PROJECT_WIZARD_PAGE_PROJECT;
 	public static String JAVA_PROJECT_WIZARD_PAGE_DESTINATION_PROJECT;
 	
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.ui/src/org/eclipse/jpt/jaxb/ui/internal/wizards/classesgen/ClassesGeneratorWizard.java b/jaxb/plugins/org.eclipse.jpt.jaxb.ui/src/org/eclipse/jpt/jaxb/ui/internal/wizards/classesgen/ClassesGeneratorWizard.java
index 431a27a..d4549b5 100644
--- a/jaxb/plugins/org.eclipse.jpt.jaxb.ui/src/org/eclipse/jpt/jaxb/ui/internal/wizards/classesgen/ClassesGeneratorWizard.java
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.ui/src/org/eclipse/jpt/jaxb/ui/internal/wizards/classesgen/ClassesGeneratorWizard.java
@@ -17,6 +17,9 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.WorkspaceJob;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaProject;
@@ -165,14 +168,14 @@
 			IFolder folder = this.getJavaProject().getProject().getFolder(this.destinationFolder);
 			this.createFolderIfNotExist(folder);
 		}
-
+		
 		if (this.performsGeneration) {
-			if (this.displayOverwritingClassesWarning(this.generatorOptions)) {
-				this.scheduleGenerateJaxbClassesJob();
-				this.addSchemaToLibrary();
+			if (displayOverwritingClassesWarning(this.generatorOptions)) {
+				doGenerateJaxbClasses();
+				doAddSchemaToLibrary();
 			}
 		}
-
+		
 		return true;
 	}
     
@@ -370,7 +373,7 @@
 		}
 	}
 	
-	private void scheduleGenerateJaxbClassesJob() {
+	private void doGenerateJaxbClasses() {
 		try {
 			WorkspaceJob generateJaxbClassesJob = 
 					new GenerateJaxbClassesJob(
@@ -394,26 +397,56 @@
 		}
 	}
 	
-	private void addSchemaToLibrary() {
-		JaxbProject jaxbProject = getJaxbProject();
-		
-		if (jaxbProject == null) {
-			return;
-		}
-		
-		String schemaLocation = getSchemaLocation();
-		String resolvedUri = XsdUtil.getResolvedUri(schemaLocation);
-		XSDSchema schema = XSDImpl.buildXSDModel(resolvedUri);
-		if (schema != null) {
-			SchemaLibrary schemaLib = jaxbProject.getSchemaLibrary();
-			List<String> schemas = new Vector<String>(schemaLib.getSchemaLocations());
-			if (! schemas.contains(schemaLocation)) {
-				schemas.add(schemaLocation);
-				schemaLib.setSchemaLocations(schemas);
+	private void doAddSchemaToLibrary() {
+		try {
+			JaxbProject jaxbProject = getJaxbProject();
+			if (jaxbProject == null) {
+				return;
 			}
+			WorkspaceJob addSchemaToLibraryJob = new AddSchemaToLibraryJob(jaxbProject, getSchemaLocation());
+			addSchemaToLibraryJob.schedule();
+		}
+		catch(RuntimeException re) {
+			JptJaxbUiPlugin.instance().logError(re);
+			
+			String msg = re.getMessage();
+			String message = (msg == null) ? re.toString() : msg;
+			this.logError(message);
 		}
 	}
 	
+	
+	protected class AddSchemaToLibraryJob
+			extends WorkspaceJob {
+		
+		private final JaxbProject jaxbProject;
+		private final String schemaLocation;
+		
+		
+		protected AddSchemaToLibraryJob(JaxbProject jaxbProject, String schemaLocation) {
+			super(JptJaxbUiMessages.ADD_SCHEMA_TO_LIBRARY_JOB__NAME);
+			this.jaxbProject = jaxbProject;
+			this.schemaLocation = schemaLocation;
+		}
+		
+		
+		@Override
+		public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
+			String resolvedUri = XsdUtil.getResolvedUri(this.schemaLocation);
+			XSDSchema schema = XSDImpl.buildXSDModel(resolvedUri);
+			if (schema != null) {
+				SchemaLibrary schemaLib = this.jaxbProject.getSchemaLibrary();
+				List<String> schemas = new Vector<String>(schemaLib.getSchemaLocations());
+				if (! schemas.contains(this.schemaLocation)) {
+					schemas.add(this.schemaLocation);
+					schemaLib.setSchemaLocations(schemas);
+				}
+			}
+			return Status.OK_STATUS;
+		}
+	}
+	
+	
 	protected void logError(String message) {
 			this.displayError(message);
 	}
