diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationManager.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationManager.java
index 453d38d..1714719 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationManager.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationManager.java
@@ -294,6 +294,23 @@
 	}
 	
 	/**
+	 * Returns the most recent launch for the given group taking launch configuration
+	 * filters into account, or <code>null</code> if none.
+	 * 
+	 * @param groupId launch group
+	 * @return the most recent, un-filtered launch
+	 */
+	public ILaunchConfiguration getFilteredLastLaunch(String groupId) {
+		LaunchHistory history = getLaunchHistory(groupId);if (history != null) {
+			ILaunchConfiguration[] filterConfigs = filterConfigs(history.getHistory());
+			if (filterConfigs.length > 0) {
+				return filterConfigs[0];
+			}
+		}
+		return null;
+	}
+	
+	/**
 	 * Add the specified listener to the list of listeners that will be notified when the
 	 * launch history changes.
 	 */
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchHistory.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchHistory.java
index b155d66..5a8f348 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchHistory.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchHistory.java
@@ -78,7 +78,7 @@
 	}
 	
 	/**
-	 * Adds the given configuration to this hisotry
+	 * Adds the given configuration to this history
 	 * 
 	 * @param configuration
 	 * @param prepend whether the configuration should be added to the beginning of
@@ -382,7 +382,7 @@
 	}
 	
 	/**
-	 * Revmoves the given config from the favorites list, if needed.
+	 * Removes the given config from the favorites list, if needed.
 	 * 
 	 * @param configuration
 	 */
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/AbstractLaunchHistoryAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/AbstractLaunchHistoryAction.java
index bc2fff0..b7214cd 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/AbstractLaunchHistoryAction.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/AbstractLaunchHistoryAction.java
@@ -45,7 +45,7 @@
  * </p>
  * @since 2.1
  */
-public abstract class AbstractLaunchHistoryAction implements IWorkbenchWindowPulldownDelegate2, ILaunchHistoryChangedListener, IResourceChangeListener {
+public abstract class AbstractLaunchHistoryAction implements IWorkbenchWindowPulldownDelegate2, ILaunchHistoryChangedListener {
 	
 	/**
 	 * The menu created by this action
@@ -77,6 +77,19 @@
 	public AbstractLaunchHistoryAction(String launchGroupIdentifier) {
 		fLaunchGroupIdentifier = launchGroupIdentifier;
 	}
+	
+	/**
+	 * Resource change listener to update tooltip
+	 */
+	private IResourceChangeListener fListener = new IResourceChangeListener() {
+		public void resourceChanged(IResourceChangeEvent event) {
+			// need to update the tooltip in the event that one of the launch filters has removed the most recent entry.
+			// bug 156516  we only want to respond to after-the-fact updates
+			if(event.getType() == IResourceChangeEvent.POST_CHANGE) {
+				updateTooltip();
+			}
+		}
+	};
 
 	/**
 	 * Sets the action used to render this delegate.
@@ -125,7 +138,7 @@
 	 */
 	private void initialize(IAction action) {
 		getLaunchConfigurationManager().addLaunchHistoryListener(this);
-		ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(fListener);
 		setAction(action);
 		updateTooltip();	
 		action.setEnabled(existsConfigTypesForMode());	
@@ -157,31 +170,19 @@
 		if (lastLaunched == null) {
 			tooltip = DebugUIPlugin.removeAccelerators(getLaunchHistory().getLaunchGroup().getLabel());
 		} else {
-			String launchName = lastLaunched.getName();
-			String mode = getMode();
-			String label;
-			if (mode.equals(ILaunchManager.RUN_MODE)) {
-				label= ActionMessages.AbstractLaunchHistoryAction_1; 
-			} else if (mode.equals(ILaunchManager.DEBUG_MODE)){
-				label= ActionMessages.AbstractLaunchHistoryAction_2; 
-			} else if (mode.equals(ILaunchManager.PROFILE_MODE)){
-				label= ActionMessages.AbstractLaunchHistoryAction_3; 
-			} else {
-				label= ActionMessages.AbstractLaunchHistoryAction_4; 
-			}
-			tooltip = MessageFormat.format(ActionMessages.AbstractLaunchHistoryAction_0, new String[] {label, launchName}); 
+			tooltip = getToolTip(lastLaunched); 
 		}
 		getAction().setToolTipText(tooltip);
 	}
 	
 	/**
-	 * This method is used to set the tooltip for the luanch history action
-	 * @param lastLaunched the last launched <code>ILauncConfiguration</code>
+	 * Returns the tooltip specific to a configuration.
+	 * 
+	 * @param configuration a <code>ILauncConfiguration</code>
 	 * @return the string for the tool tip
-	 * @deprecated use the method <code>updateToolTip</code> only, this is part of bug 156516
 	 */
-	protected String getToolTip(ILaunchConfiguration lastLaunched) {
-		String launchName= lastLaunched.getName();
+	protected String getToolTip(ILaunchConfiguration configuration) {
+		String launchName= configuration.getName();
 		String mode= getMode();
 		String label;
 		if (mode.equals(ILaunchManager.RUN_MODE)) {
@@ -210,14 +211,17 @@
 	public void dispose() {
 		setMenu(null);
 		getLaunchConfigurationManager().removeLaunchHistoryListener(this);
-		ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(fListener);
 	}
 	
 	/**
-	 * Return the last launch in this action's launch history
+	 * Return the last launch in this action's launch history.
+	 * 
+	 * @return the most recent configuration that was launched from this
+	 *  action's launch history that is not filtered from the menu
 	 */
 	protected ILaunchConfiguration getLastLaunch() {
-		return getLaunchConfigurationManager().getLastLaunch(getLaunchGroupIdentifier());
+		return getLaunchConfigurationManager().getFilteredLastLaunch(getLaunchGroupIdentifier());
 	}
 
 	/**
@@ -373,14 +377,4 @@
 		return fLaunchGroupIdentifier;
 	}
 
-	/**
-	 * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent)
-	 */
-	public void resourceChanged(IResourceChangeEvent event) {
-		// need to update the tooltip in the event that one of the launch filters has removed the most recent entry.
-		// bug 156516  we only want to respond to after-the-fact updates
-		if(event.getType() == IResourceChangeEvent.POST_CHANGE) {
-			updateTooltip();
-		}
-	}
 }
