Bug 185977 InvalidRegistryObjectException thrown when refreshingPackages
diff --git a/bundles/org.eclipse.equinox.registry/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.registry/META-INF/MANIFEST.MF
index 6bdcf61..ecdb124 100644
--- a/bundles/org.eclipse.equinox.registry/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.equinox.registry/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.registry; singleton:=true
-Bundle-Version: 3.3.0.qualifier
+Bundle-Version: 3.3.1.qualifier
 Bundle-Localization: plugin
 Export-Package: org.eclipse.core.internal.registry;x-friends:="org.eclipse.core.runtime",
  org.eclipse.core.internal.registry.osgi;x-friends:="org.eclipse.core.runtime",
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryObjectManager.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryObjectManager.java
index 66d7013..805e08b 100644
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryObjectManager.java
+++ b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryObjectManager.java
@@ -678,8 +678,28 @@
 					if (tmp == null) // already removed
 						continue;
 					Integer extensionIndex = new Integer(extensions[j]);
-					if (!associatedObjects.containsKey(extensionIndex))
+					if (!associatedObjects.containsKey(extensionIndex)) {
 						result.put(extensionIndex, tmp);
+						collectChildren(tmp, 0, result);
+					}
+				}
+			}
+			else if (object instanceof ExtensionPoint) {
+				// by now extensions of this extension point have been marked as orphans
+				Map orphans = getOrphans();
+				String name = ((ExtensionPoint)object).getUniqueIdentifier();
+				int[] extensions = (int[]) orphans.get(name);
+				if (extensions != null) {
+					for (int j = 0; j < extensions.length; j++) {
+						Extension tmp = (Extension) basicGetObject(extensions[j], RegistryObjectManager.EXTENSION);
+						if (tmp == null) // already removed
+							continue;
+						Integer extensionIndex = new Integer(extensions[j]);
+						if (!associatedObjects.containsKey(extensionIndex)) {
+							result.put(extensionIndex, tmp);
+							collectChildren(tmp, 0, result);
+						}
+					}
 				}
 			}
 		}