bug 74624
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/core/Feature.java b/update/org.eclipse.update.core/src/org/eclipse/update/core/Feature.java
index c4114a3..cb559ae 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/core/Feature.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/core/Feature.java
@@ -287,6 +287,7 @@
 		IFeatureReference alreadyInstalledFeature = null;

 		IFeatureContentConsumer consumer = null;

 		IPluginEntry[] targetSitePluginEntries = null;

+		ArrayList justInstalledPlugins = new ArrayList();

 

 		try {

 			// determine list of plugins to install

@@ -436,9 +437,12 @@
 					pluginConsumer.store(references[j], subMonitor);

 				}

 

-				InstallRegistry.registerPlugin(pluginsToInstall[i]);

 				if (monitor.isCanceled())

 					abort();

+				else {

+					justInstalledPlugins.add(pluginsToInstall[i]);

+					InstallRegistry.registerPlugin(pluginsToInstall[i]);

+				}

 			}

 

 			// check if we need to install feature files [16718]	

@@ -460,13 +464,17 @@
 						msg + " " + references[i].getIdentifier()); //$NON-NLS-1$

 					consumer.store(references[i], subMonitor);

 				}

-				InstallRegistry.registerFeature(this);

-			} else {

-				monitor.worked(1);

-			}

 

-			if (monitor.isCanceled())

-				abort();

+				if (monitor.isCanceled())

+					abort();

+				else

+					InstallRegistry.registerFeature(this);

+			} else {

+				if (monitor.isCanceled())

+					abort();

+				else

+					monitor.worked(1);

+			}

 

 			// call handler to complete installation (eg. handle non-plugin entries)

 			handler.completeInstall(consumer);

@@ -497,6 +505,9 @@
 						// close the log

 						recoveryLog.close(ErrorRecoveryLog.END_INSTALL_LOG);

 					} else {

+						// unregister the just installed plugins

+						for (int i=0; i<justInstalledPlugins.size(); i++)

+							InstallRegistry.unregisterPlugin(((IPluginEntry)justInstalledPlugins.get(i)));

 						consumer.abort();

 					}

 				}