diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/Orphanage.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/Orphanage.java
index f5f6a04..75e38d6 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/Orphanage.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/Orphanage.java
@@ -37,7 +37,6 @@
 import org.eclipse.ocl.pivot.internal.resource.ASResourceImpl;
 import org.eclipse.ocl.pivot.internal.resource.OCLASResourceFactory;
 import org.eclipse.ocl.pivot.internal.utilities.PivotConstantsInternal;
-import org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal;
 import org.eclipse.ocl.pivot.utilities.ClassUtil;
 import org.eclipse.ocl.pivot.utilities.PivotConstants;
 
@@ -45,28 +44,31 @@
  * An Orphanage provides a Package that weakly contains elements such as type specializations that
  * should require a container for the purposes of validation, but which should be eligible for
  * garbage collection whenever no longer in use.
+ * <br>
+ * There is no global orphanage. Any reference to one is stale.
+ * <br>
+ * Each OCL CompleteModel has a shared orphanage that contains the referenced unique synthesized elements.
+ * The shared orphanage is never saved.
+ * <br>
+ * Each saved ASResource has a local orphanage that contains a selective copy of the shared orphanage so that
+ * all references are terminated locally. ASSaver creates this copy via PivotSaveImpl.init().
  */
 public class Orphanage extends PackageImpl
 {
 	/**
-	 * The OrphanResource tailors the inherited ASREsorce functionality to support the single Resource shared by all
-	 * OCL consumers, but not included in any REsourceSEt. It is nt saved and hso has no xmi:ids but it does have LUSSIDs
+	 * The OrphanResource tailors the inherited ASResource functionality to support the single Resource shared by all
+	 * same-OCL consumers. It is not saved and so has no xmi:ids but it does have LUSSIDs
 	 * in order to contribute to the signatures of operations.
 	 */
 	protected static class OrphanResource extends ASResourceImpl
 	{
 		protected OrphanResource(@NonNull URI uri) {
 			super(uri, OCLASResourceFactory.getInstance());
-			setUpdating(true);			// XXX
+			setUpdating(true);
 			setSaveable(false);
 		}
 
 		@Override
-		public NotificationChain basicSetResourceSet(ResourceSet resourceSet, NotificationChain notifications) {
-			return notifications; 	// The OrphanResource is in no, rather than latest, ResourceSt
-		}
-
-		@Override
 		protected void doUnload() {
 			if (contents != null) {
 				for (EObject aContent : contents) {
@@ -86,12 +88,6 @@
 		}
 
 		@Override
-		public ResourceSet getResourceSet() {
-			// OrphanResource can be shared across many ResourceSets - use the current one
-			return PivotUtilInternal.getEnvironmentFactory(null).getMetamodelManager().getASResourceSet();
-		}
-
-		@Override
 		public boolean isOrphanage() {
 			return true;
 		}
@@ -217,7 +213,6 @@
 
 		@Override
 		public void addUnique(T object) {
-		//	throw new UnsupportedOperationException();
 			basicAdd(object, null);
 		}
 
@@ -391,14 +386,40 @@
 	}
 
 	public static final @NonNull URI ORPHANAGE_URI = ClassUtil.nonNullEMF(URI.createURI(PivotConstants.ORPHANAGE_URI + PivotConstants.DOT_OCL_AS_FILE_EXTENSION));
+	@Deprecated /* @deprecated The global Orphanage is never used */
 	private static Orphanage ORPHAN_PACKAGE = null;
-	private static OrphanResource ORPHAN_RESOURCE = null;
 
+	/**
+	 * @since 1.18
+	 */
+	public static org.eclipse.ocl.pivot.@NonNull Package createLocalOrphanage() {
+		org.eclipse.ocl.pivot.Package orphanage = PivotFactory.eINSTANCE.createPackage();
+		orphanage.setName(PivotConstants.ORPHANAGE_NAME);
+		orphanage.setNsPrefix(PivotConstants.ORPHANAGE_PREFIX);
+		orphanage.setURI(PivotConstants.ORPHANAGE_URI);
+		return orphanage;
+	}
+
+	/**
+	 * @since 1.18
+	 */
+	public static @NonNull Orphanage createSharedOrphanage(@NonNull ResourceSet resourceSet) {
+		Orphanage orphanage = new Orphanage(PivotConstants.ORPHANAGE_NAME, PivotConstants.ORPHANAGE_URI);
+		Model orphanModel = PivotFactory.eINSTANCE.createModel();
+		orphanModel.setName(PivotConstants.ORPHANAGE_NAME);;
+		orphanModel.setExternalURI(PivotConstants.ORPHANAGE_URI);
+		orphanModel.getOwnedPackages().add(orphanage);
+		Resource orphanageResource = new OrphanResource(ORPHANAGE_URI);
+		orphanageResource.getContents().add(orphanModel);
+		resourceSet.getResources().add(orphanageResource);
+		return orphanage;
+	}
+
+	@Deprecated /* @deprecated Never used */
 	public static void disposeInstance() {
 		if (ORPHAN_PACKAGE != null) {
 			ORPHAN_PACKAGE.dispose();
 			ORPHAN_PACKAGE = null;
-			ORPHAN_RESOURCE = null;
 		}
 	}
 
@@ -406,6 +427,7 @@
 	 * Return the Orphanage for an eObject, which is the Orphanage resource in the same ResourceSet as
 	 * the eObject, else the global Orphanage.
 	 */
+	@Deprecated /* @deprecated - not used */
 	public static @Nullable Orphanage getOrphanage(@NonNull EObject eObject) {
 		//		if (eObject == null) {
 		//			return null;
@@ -419,56 +441,11 @@
 	}
 
 	/**
-	 * Return the global Orphanage.
-	 *
-	 * @since 1.18
-	 *
-	public static @NonNull Orphanage getOrphanage() {
-		OrphanResource orphanResource = ORPHAN_RESOURCE;
-		Orphanage orphanPackage = ORPHAN_PACKAGE;
-		if (orphanPackage == null) {
-			orphanPackage = ORPHAN_PACKAGE = new Orphanage(PivotConstants.ORPHANAGE_NAME, PivotConstants.ORPHANAGE_URI);
-			Model orphanModel = PivotFactory.eINSTANCE.createModel();
-			orphanModel.setName(PivotConstants.ORPHANAGE_NAME);;
-			orphanModel.setExternalURI(PivotConstants.ORPHANAGE_URI);
-			orphanModel.getOwnedPackages().add(orphanPackage);
-			orphanResource = ORPHAN_RESOURCE = new OrphanResource(ORPHANAGE_URI);
-			orphanResource.getContents().add(orphanModel);
-			orphanResource.setSaveable(false);
-		}
-		return orphanPackage;
-	} */
-
-	/**
-	 * Return the Orphanage for resourceSet.
-	 * The global orphanage contains the globally unique shared orphan,
-	 * A local orphanage holds the subset of the overall orphans necessary to support serialization.
-	 *
-	@Deprecated /* @deprecated - not used - use the shared global Prphange * /
-	public static @NonNull Orphanage getOrphanage(@NonNull ResourceSet resourceSet) {
-		if (ORPHAN_PACKAGE == null) {
-			return getOrphanage();
-		}
-		Orphanage orphanPackage = ORPHAN_PACKAGE;
-		OrphanResource orphanResource = ORPHAN_RESOURCE;
-		assert orphanPackage != null;
-		assert orphanResource != null;
-		EList<@NonNull Resource> resources = resourceSet.getResources();
-		for (Resource aResource : resources) {
-			if (aResource == orphanResource) {
-				return orphanPackage;
-			}
-		}
-		resources.add(orphanResource);
-		return orphanPackage;
-	} */
-
-	/**
-	 * Return the Orphanage for a resourceSet if non-null, else the global Orphanage.
+	 * Return the Orphanage for a resourceSet if non-null. Obsolete deprecated functionality returns a global Orphanage if null.
 	 */
 	public static @NonNull Orphanage getOrphanage(@Nullable ResourceSet resourceSet) {
-		assert resourceSet != null;				// XXX
 		if (resourceSet == null) {
+			assert false : "Use of the global Orphanage is deprecated";
 			Orphanage instance2 = ORPHAN_PACKAGE;
 			if (instance2 == null) {
 				instance2 = ORPHAN_PACKAGE = new Orphanage(PivotConstants.ORPHANAGE_NAME, PivotConstants.ORPHANAGE_URI);
@@ -486,27 +463,29 @@
 				}
 			}
 		}
-		Orphanage orphanage = new Orphanage(PivotConstants.ORPHANAGE_NAME, PivotConstants.ORPHANAGE_URI);
-		Model orphanModel = PivotFactory.eINSTANCE.createModel();
-		orphanModel.setName(PivotConstants.ORPHANAGE_NAME);;
-		orphanModel.setExternalURI(PivotConstants.ORPHANAGE_URI);
-		orphanModel.getOwnedPackages().add(orphanage);
-		Resource orphanageResource = new OrphanResource(ORPHANAGE_URI);
-		orphanageResource.getContents().add(orphanModel);
-		resourceSet.getResources().add(orphanageResource);
-		return orphanage;
+		return createSharedOrphanage(resourceSet);
 	}
 
 	/**
-	 * Return true if asPackage is an orphanage for synthesized types.
+	 * Return true if asPackage is an orphanage for synthesized model elements.
+	 *
+	 * @since 1.18
 	 */
+	public static boolean isOrphanage(org.eclipse.ocl.pivot.@NonNull Package asPackage) {
+		String uri = asPackage.getURI();
+		return PivotConstants.ORPHANAGE_URI.equals(uri) || PivotConstantsInternal.OLD_ORPHANAGE_URI.equals(uri);
+	}
+
+	/**
+	 * Return true if asPackage is a local or shared orphanage for synthesized model elements.
+	 */
+	@Deprecated /* @deprected use isOrphanage() */
 	public static boolean isTypeOrphanage(org.eclipse.ocl.pivot.@Nullable Package asPackage) {
 		if (asPackage == null) {
 			return false;
 		}
 		else {
-			String uri = asPackage.getURI();
-			return PivotConstants.ORPHANAGE_URI.equals(uri) || PivotConstantsInternal.OLD_ORPHANAGE_URI.equals(uri);
+			return isOrphanage(asPackage);
 		}
 	}
 
@@ -521,6 +500,9 @@
 		if (ownedClasses != null) {
 			((WeakEList<?>)ownedClasses).dispose();
 		}
+		if (ownedPackages != null) {
+			((WeakEList<?>)ownedPackages).dispose();
+		}
 	}
 
 	@Override
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotMetamodelManager.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotMetamodelManager.java
index 580a894..af43eef 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotMetamodelManager.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotMetamodelManager.java
@@ -591,8 +591,7 @@
 		}
 	}
 
-	@Deprecated /* @deprecated - not used - use the shared global Orphanage */
-	public @NonNull Orphanage createOrphanage() {				// XXX
+	public @NonNull Orphanage createOrphanage() {
 		return Orphanage.getOrphanage(asResourceSet);
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/ASSaver.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/ASSaver.java
index ac1f504..d5f6501 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/ASSaver.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/ASSaver.java
@@ -179,12 +179,9 @@
 	}
 
 	protected org.eclipse.ocl.pivot.@NonNull Package getOrphanPackage(@NonNull Resource resource) {
-		Package orphanage2 = orphanage;
+		org.eclipse.ocl.pivot.Package orphanage2 = orphanage;
 		if (orphanage2 == null) {
-			orphanage = orphanage2 = PivotFactory.eINSTANCE.createPackage();
-			orphanage2.setName(PivotConstants.ORPHANAGE_NAME);
-			orphanage2.setNsPrefix(PivotConstants.ORPHANAGE_PREFIX);
-			orphanage2.setURI(PivotConstants.ORPHANAGE_URI);
+			orphanage = orphanage2 = Orphanage.createLocalOrphanage();
 			EList<EObject> contents = resource.getContents();
 			if ((contents.size() > 0) && (contents.get(0) instanceof Model)) {
 				((Model)contents.get(0)).getOwnedPackages().add(orphanage2);
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/LUSSIDs.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/LUSSIDs.java
index 880deb6..ead780e 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/LUSSIDs.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/LUSSIDs.java
@@ -420,7 +420,7 @@
 	}
 
 	protected void assignXMIIDs(@NonNull AS2ID as2id) {
-		assert !asResource.isOrphanage();
+	// XXX	assert !asResource.isOrphanage();
 		Map<@NonNull String, @NonNull List<@NonNull Element>> xmiid2collisions2 = xmiid2collisions;
 		for (@NonNull Element element : identifiedElement2lussid.keySet()) {
 			Integer lussid = identifiedElement2lussid.get(element);
