diff --git a/org.eclipse.wb.core.databinding.xsd/META-INF/MANIFEST.MF b/org.eclipse.wb.core.databinding.xsd/META-INF/MANIFEST.MF
index 73fe613fb3..461fc7608b 100644
--- a/org.eclipse.wb.core.databinding.xsd/META-INF/MANIFEST.MF
+++ b/org.eclipse.wb.core.databinding.xsd/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wb.core.databinding.xsd;singleton:=true
 Bundle-Vendor: %providerName
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.2.0.qualifier
 Export-Package: org.eclipse.wb.core.databinding.xsd.component;x-friends:="org.eclipse.wb.core.java"
 Import-Package: jakarta.xml.bind;version="[3.0.0,5.0.0)",
  jakarta.xml.bind.annotation;version="[3.0.0,5.0.0)",
diff --git a/org.eclipse.wb.core.databinding.xsd/pom.xml b/org.eclipse.wb.core.databinding.xsd/pom.xml
index 931929caff..61f32f9c9b 100644
--- a/org.eclipse.wb.core.databinding.xsd/pom.xml
+++ b/org.eclipse.wb.core.databinding.xsd/pom.xml
@@ -15,7 +15,7 @@
 	<artifactId>org.eclipse.wb.core.databinding.xsd</artifactId>
 	<packaging>eclipse-plugin</packaging>
 	<name>[bundle] WindowBuilder XSD Core</name>
-	<version>1.1.0-SNAPSHOT</version>
+	<version>1.2.0-SNAPSHOT</version>
 
 	<parent>
 		<groupId>org.eclipse.wb</groupId>
diff --git a/org.eclipse.wb.core.databinding.xsd/src/org/eclipse/wb/core/databinding/xsd/component/ContextFactory.java b/org.eclipse.wb.core.databinding.xsd/src/org/eclipse/wb/core/databinding/xsd/component/ContextFactory.java
index 540ddd5a0b..6443e8dd4b 100644
--- a/org.eclipse.wb.core.databinding.xsd/src/org/eclipse/wb/core/databinding/xsd/component/ContextFactory.java
+++ b/org.eclipse.wb.core.databinding.xsd/src/org/eclipse/wb/core/databinding/xsd/component/ContextFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2024 Patrick Ziegler and others
+ * Copyright (c) 2024, 2026 Patrick Ziegler and others
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -12,14 +12,32 @@
  *******************************************************************************/
 package org.eclipse.wb.core.databinding.xsd.component;
 
+import java.util.concurrent.locks.ReentrantLock;
+
 import jakarta.xml.bind.JAXBContext;
 import jakarta.xml.bind.JAXBException;
 
 public final class ContextFactory {
+	private static final ReentrantLock LOCK = new ReentrantLock();
+	private static JAXBContext CONTEXT;
+
 	private ContextFactory() {
 	}
 
-	public static JAXBContext createContext() throws JAXBException {
-		return JAXBContext.newInstance(ContextFactory.class.getPackageName(), ContextFactory.class.getClassLoader());
+	/**
+	 * Returns a {@link JAXBContext} instance shared between all callers, which is
+	 * created automatically when called for the first time. This method is
+	 * thread-safe.
+	 */
+	public static JAXBContext getContext() throws JAXBException {
+		try {
+			LOCK.lock();
+			if (CONTEXT == null) {
+				CONTEXT = JAXBContext.newInstance(ContextFactory.class.getPackageName(), ContextFactory.class.getClassLoader());
+			}
+			return CONTEXT;
+		} finally {
+			LOCK.unlock();
+		}
 	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/LayoutDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/LayoutDescription.java
index 37bc8cab78..55a22578a4 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/LayoutDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/LayoutDescription.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011, 2025 Google, Inc. and others.
+ * Copyright (c) 2011, 2026 Google, Inc. and others.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -33,7 +33,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import jakarta.xml.bind.JAXBContext;
 import jakarta.xml.bind.Unmarshaller;
 
 /**
@@ -175,8 +174,7 @@ private void loadDescription() throws Exception {
 		}
 		// do parse
 		try (InputStream is = resourceInfo.getURL().openStream();) {
-			JAXBContext context = ContextFactory.createContext();
-			Unmarshaller unmarshaller = context.createUnmarshaller();
+			Unmarshaller unmarshaller = ContextFactory.getContext().createUnmarshaller();
 			Component component = (Component) unmarshaller.unmarshal(is);
 			List<Creation> creations = component.getCreation();
 			for (Creation creation : creations) {
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentDescriptionHelper.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentDescriptionHelper.java
index 251578a03a..b131ba34ab 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentDescriptionHelper.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentDescriptionHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011, 2025 Google, Inc. and others.
+ * Copyright (c) 2011, 2026 Google, Inc. and others.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -112,7 +112,6 @@
 import java.util.LinkedList;
 import java.util.List;
 
-import jakarta.xml.bind.JAXBContext;
 import jakarta.xml.bind.JAXBElement;
 import jakarta.xml.bind.Unmarshaller;
 
@@ -371,8 +370,7 @@ private static ComponentDescription getDescription0(AstEditor editor, ComponentD
 				// read next description
 				{
 					componentDescription.setCurrentClass(descriptionInfo.clazz);
-					JAXBContext jaxbContext = ContextFactory.createContext();
-					Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
+					Unmarshaller jaxbUnmarshaller = ContextFactory.getContext().createUnmarshaller();
 					Component component = (Component) jaxbUnmarshaller.unmarshal(resourceInfo.getURL());
 					process(componentDescription, component, editor);
 				}
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/FactoryDescriptionHelper.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/FactoryDescriptionHelper.java
index 36114d6054..d1bbec00be 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/FactoryDescriptionHelper.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/FactoryDescriptionHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011, 2024 Google, Inc. and others.
+ * Copyright (c) 2011, 2026 Google, Inc. and others.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -69,7 +69,6 @@
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.transform.dom.DOMSource;
 
-import jakarta.xml.bind.JAXBContext;
 import jakarta.xml.bind.Unmarshaller;
 
 /**
@@ -200,8 +199,7 @@ private static Map<String, FactoryMethodDescription> getDescriptionsMap0Ex(AstEd
 						fixNamespace(document, rootElement);
 					}
 
-					JAXBContext jaxbContext = ContextFactory.createContext();
-					Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
+					Unmarshaller jaxbUnmarshaller = ContextFactory.getContext().createUnmarshaller();
 					Factory factory = (Factory) jaxbUnmarshaller.unmarshal(new DOMSource(document));
 					descriptions = process(factory, state, factoryClass);
 					allMethodsAreFactories = factory.isAllMethodsAreFactories();
