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 e0a6650..3dcf164 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
@@ -678,10 +678,8 @@
 	 * Installation has been cancelled, abort and revert
 	 */
 	private void abort() throws CoreException {
-		// throws an exception that will be caught by the install
-		// the install will abort the consumer.	 	
-		CoreException exp = Utilities.newCoreException(Policy.bind("Feature.InstallationCancelled"), null); //$NON-NLS-1$
-		throw new InstallAbortedException(exp);
+		String msg = Policy.bind("Feature.InstallationCancelled"); //$NON-NLS-1$
+		throw new InstallAbortedException(msg,null);
 	}
 
 	/*
@@ -840,12 +838,9 @@
 				int result = verificationListener.prompt(vr);
 
 				if (result == IVerificationListener.CHOICE_ABORT) {
-					CoreException exp = Utilities
-						.newCoreException(
-							Policy.bind("JarVerificationService.CancelInstall"),
-					//$NON-NLS-1$
-					vr.getVerificationException());
-					throw new InstallAbortedException(exp);
+					String msg = Policy.bind("JarVerificationService.CancelInstall"); //$NON-NLS-1$
+					Exception e = vr.getVerificationException();
+					throw new InstallAbortedException(msg,e);
 				}
 				if (result == IVerificationListener.CHOICE_ERROR) {
 					throw Utilities
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/core/model/InstallAbortedException.java b/update/org.eclipse.update.core/src/org/eclipse/update/core/model/InstallAbortedException.java
index b226765..6a20374 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/core/model/InstallAbortedException.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/core/model/InstallAbortedException.java
@@ -4,7 +4,7 @@
  * All Rights Reserved.
  */
 
-import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.*;
 
 /**
  * Exception thrown when the user cancelled an installation.
@@ -19,7 +19,7 @@
 	 * 
 	 * @since 2.0
 	 */
-	public InstallAbortedException(CoreException exp) {
-		super(exp.getStatus());
+	public InstallAbortedException(String msg,Exception e) {
+		super(new Status(IStatus.INFO,"org.eclipse.update.core",IStatus.OK,msg,e));
 	}
 }
\ No newline at end of file
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/ConfiguredSite.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/ConfiguredSite.java
index 93d1b0b..d1eeb32 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/ConfiguredSite.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/ConfiguredSite.java
@@ -207,42 +207,30 @@
 			installedFeatureRef =
 				getSite().install(feature, verificationListener, monitor);
 
-			if (monitor!=null && monitor.isCanceled()){
-				if (UpdateManagerPlugin.DEBUG
-					&& UpdateManagerPlugin.DEBUG_SHOW_INSTALL) {
-					UpdateManagerPlugin.debug(
-						"Install cancelled: "
-							+ installedFeatureRef.getURL().toExternalForm());
-				}
+			if (UpdateManagerPlugin.DEBUG
+				&& UpdateManagerPlugin.DEBUG_SHOW_INSTALL) {
+				UpdateManagerPlugin.debug(
+					"Sucessfully installed: "
+						+ installedFeatureRef.getURL().toExternalForm());
+			}
 
-				// everything done ok
-				activity.setStatus(IActivity.STATUS_NOK);				
-			} else {
-				if (UpdateManagerPlugin.DEBUG
-					&& UpdateManagerPlugin.DEBUG_SHOW_INSTALL) {
-					UpdateManagerPlugin.debug(
-						"Sucessfully installed: "
-							+ installedFeatureRef.getURL().toExternalForm());
+			if (installedFeatureRef!=null){
+				try {
+					installedFeature = installedFeatureRef.getFeature();
+				} catch (CoreException e) {
+					UpdateManagerPlugin.warn(null,e);
 				}
-	
-				if (installedFeatureRef!=null){
-					try {
-						installedFeature = installedFeatureRef.getFeature();
-					} catch (CoreException e) {
-						UpdateManagerPlugin.warn(null,e);
-					}
-				}
-	
-				// everything done ok
-				activity.setStatus(IActivity.STATUS_OK);
-				// notify listeners
-				Object[] siteListeners = listeners.getListeners();
-				for (int i = 0; i < siteListeners.length; i++) {
-					if (installedFeature != null) {
-						IConfiguredSiteChangedListener listener =
-							((IConfiguredSiteChangedListener) siteListeners[i]);
-						listener.featureInstalled(installedFeature);
-					}
+			}
+
+			// everything done ok
+			activity.setStatus(IActivity.STATUS_OK);
+			// notify listeners
+			Object[] siteListeners = listeners.getListeners();
+			for (int i = 0; i < siteListeners.length; i++) {
+				if (installedFeature != null) {
+					IConfiguredSiteChangedListener listener =
+						((IConfiguredSiteChangedListener) siteListeners[i]);
+					listener.featureInstalled(installedFeature);
 				}
 			}
 		} catch (CoreException e) {
@@ -254,13 +242,12 @@
 				SiteManager.getLocalSite().getCurrentConfiguration();
 			((InstallConfiguration) current).addActivityModel(activity);
 		}
-
-		// call the configure task	
+			// call the configure task	
 		if (installedFeature!=null)	
 			configure(installedFeature, false);
 			/*callInstallHandler*/
-
-		return installedFeatureRef;
+	
+			return installedFeatureRef;
 	}
 
 	/*
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/DefaultInstallHandler.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/DefaultInstallHandler.java
index 2eb13d8..8a5bfc6 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/DefaultInstallHandler.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/DefaultInstallHandler.java
@@ -128,11 +128,8 @@
 		int result = listener.prompt(verificationResult);
 
 		if (result == IVerificationListener.CHOICE_ABORT) {
-			CoreException exp= Utilities
-				.newCoreException(Policy.bind("JarVerificationService.CancelInstall"),
-			//$NON-NLS-1$
-			verificationResult.getVerificationException());
-			throw new InstallAbortedException(exp);
+			Exception e = verificationResult.getVerificationException();
+			throw new InstallAbortedException(Policy.bind("JarVerificationService.CancelInstall"),e);
 		}
 		if (result == IVerificationListener.CHOICE_ERROR) {
 			throw Utilities
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteFile.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteFile.java
index 81f1e60..e61af44 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteFile.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/SiteFile.java
@@ -68,12 +68,7 @@
 		IFeature localFeature = createExecutableFeature(sourceFeature);
 
 		IFeatureReference localFeatureReference = null;
-		try{
-			localFeatureReference = sourceFeature.install(localFeature, verificationListener, monitor);
-		} catch (InstallAbortedException e){
-			// warn user
-			UpdateManagerPlugin.warn("Install aborted:");
-		}
+		localFeatureReference = sourceFeature.install(localFeature, verificationListener, monitor);
 			
 		return localFeatureReference;
 	}
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/UpdateUIPlugin.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/UpdateUIPlugin.java
index f8b891e..dc9428b 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/UpdateUIPlugin.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/UpdateUIPlugin.java
@@ -174,14 +174,21 @@
 	}
 
 	public static void log(IStatus status, boolean showErrorDialog) {
-		if (showErrorDialog)
-			ErrorDialog.openError(
+		if (status.getSeverity()!=IStatus.INFO){
+			if (showErrorDialog)
+				ErrorDialog.openError(
+					getActiveWorkbenchShell(),
+					null,
+					null,
+					status);
+			//ResourcesPlugin.getPlugin().getLog().log(status);
+			Platform.getPlugin("org.eclipse.core.runtime").getLog().log(status);
+		} else {
+			MessageDialog.openInformation(
 				getActiveWorkbenchShell(),
 				null,
-				null,
-				status);
-		//ResourcesPlugin.getPlugin().getLog().log(status);
-		Platform.getPlugin("org.eclipse.core.runtime").getLog().log(status);
+				status.getMessage());			
+		}
 	}
 
 	public static IFeature[] searchSite(
