*** empty log message ***
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/forms/DetailsForm.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/forms/DetailsForm.java
index c088606..0bc71a2 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/forms/DetailsForm.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/forms/DetailsForm.java
@@ -232,15 +232,18 @@
 		super.initialize(modelObject);
 	}
 
-	private void configureSectionHandler(FormWidgetFactory factory, Display display) {
+	private void configureSectionHandler(
+		FormWidgetFactory factory,
+		Display display) {
 		sectionHandler.setHyperlinkUnderlineMode(
 			HyperlinkHandler.UNDERLINE_NEVER);
 		sectionHandler.setBackground(factory.getBackgroundColor());
 		sectionHandler.setForeground(UpdateColors.getTopicColor(display));
 	}
-	
+
 	protected void updateHeadings() {
-		sectionHandler.setForeground(UpdateColors.getTopicColor(getControl().getDisplay()));
+		sectionHandler.setForeground(
+			UpdateColors.getTopicColor(getControl().getDisplay()));
 		super.updateHeadings();
 	}
 
@@ -406,15 +409,17 @@
 					currentFeature = (IFeature) obj;
 					refresh();
 				} else if (obj instanceof IFeatureAdapter) {
-					IFeatureAdapter adapter = (IFeatureAdapter)obj;
+					IFeatureAdapter adapter = (IFeatureAdapter) obj;
 					try {
 						currentAdapter = adapter;
 						currentFeature = adapter.getFeature();
 					} catch (CoreException e) {
 						//UpdateUIPlugin.logException(e);
-						currentFeature = new MissingFeature(adapter.getSite(), adapter.getURL());
-					}
-					finally {
+						currentFeature =
+							new MissingFeature(
+								adapter.getSite(),
+								adapter.getURL());
+					} finally {
 						refresh();
 					}
 				} else {
@@ -536,8 +541,9 @@
 				return true;
 		}
 		// Random site feature
-		if (alreadyInstalled)
-			return false;
+		if (alreadyInstalled) {
+			return isBrokenFeatureUpdate();
+		}
 		// Not installed - check if there are other 
 		// features with this ID that are installed
 		// and that are newer than this one
@@ -546,6 +552,29 @@
 		return true;
 	}
 
+	private boolean isBrokenFeatureUpdate() {
+		if (installedFeatures.length != 1)
+			return false;
+		IFeature installedFeature = installedFeatures[0];
+		if (installedFeature
+			.getVersionedIdentifier()
+			.equals(currentFeature.getVersionedIdentifier())) {
+			return isBroken(currentFeature);
+		}
+		return false;
+	}
+
+	private boolean isBroken(IFeature feature) {
+		try {
+			IStatus status =
+				SiteManager.getLocalSite().getFeatureStatus(feature);
+			if (status != null && status.getSeverity() == IStatus.ERROR)
+				return true;
+		} catch (CoreException e) {
+		}
+		return false;
+	}
+
 	private boolean getUninstallButtonVisibility() {
 		/*
 		 * We will not allow uninstalls for now.
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/UpdatesSearchCategory.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/UpdatesSearchCategory.java
index 642a5f3..63d9635 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/UpdatesSearchCategory.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/UpdatesSearchCategory.java
@@ -110,10 +110,20 @@
 		public ISiteAdapter getSearchSite() {
 			return adapter;
 		}
+		private boolean isBroken() {
+			try {
+				IStatus status =
+					SiteManager.getLocalSite().getFeatureStatus(candidate);
+				return status.getSeverity() == IStatus.ERROR;
+			} catch (CoreException e) {
+				return false;
+			}
+		}
 		public IFeature[] getMatchingFeatures(
 			ISite site,
 			IProgressMonitor monitor) {
 			ArrayList hits = new ArrayList();
+			boolean broken = isBroken();
 			IFeatureReference[] refs = site.getFeatureReferences();
 			monitor.beginTask("", refs.length + 1);
 			for (int i = 0; i < refs.length; i++) {
@@ -122,11 +132,19 @@
 					if (isNewerVersion(candidate.getVersionedIdentifier(),
 						ref.getVersionedIdentifier())) {
 						hits.add(new Hit(candidate, ref));
+					} else {
+						// accept the same feature if the installed
+						// feature is broken
+						if (broken
+							&& candidate.getVersionedIdentifier().equals(
+								ref.getVersionedIdentifier()))
+							hits.add(new Hit(candidate, ref));
 					}
 				} catch (CoreException e) {
 				}
 				monitor.worked(1);
-				if (monitor.isCanceled()) return new IFeature[0];
+				if (monitor.isCanceled())
+					return new IFeature[0];
 			}
 			IFeature[] result;
 			if (hits.size() == 0)
@@ -310,13 +328,15 @@
 		map.put("unchecked", buf.toString());
 	}
 	private ArrayList getSelectedCandidates() {
-		if (tableViewer==null || tableViewer.getControl()==null ||
-			tableViewer.getControl().isDisposed()) {
-				return candidates;
+		if (tableViewer == null
+			|| tableViewer.getControl() == null
+			|| tableViewer.getControl().isDisposed()) {
+			return candidates;
 		}
 		ArrayList selected = new ArrayList();
-		Object [] sel = tableViewer.getCheckedElements();
-		for (int i=0; i<sel.length; i++) selected.add(sel[i]);
+		Object[] sel = tableViewer.getCheckedElements();
+		for (int i = 0; i < sel.length; i++)
+			selected.add(sel[i]);
 		return selected;
 	}
 }
\ No newline at end of file