diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/InstalledJREsBlock.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/InstalledJREsBlock.java
index 1bffe4d..88f532a 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/InstalledJREsBlock.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/InstalledJREsBlock.java
@@ -19,12 +19,15 @@
 import java.util.List;
 import java.util.Set;
 
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.ListenerList;
 import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SubMonitor;
 import org.eclipse.debug.internal.ui.SWTFactory;
 import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
+import org.eclipse.jdt.internal.launching.MacInstalledJREs;
 import org.eclipse.jdt.launching.AbstractVMInstall;
 import org.eclipse.jdt.launching.AbstractVMInstallType;
 import org.eclipse.jdt.launching.IVMInstall;
@@ -165,7 +168,7 @@
 				IVMInstall vm= (IVMInstall)element;
 				switch(columnIndex) {
 					case 0:
-						if (isContributed(vm)) {
+						if (JavaRuntime.isContributedVMInstall(vm.getId())) {
 							return NLS.bind(JREMessages.InstalledJREsBlock_19, new String[]{vm.getName()});
 						}
 						if(fVMList.getChecked(element)) {
@@ -556,11 +559,11 @@
 		int selectionCount= selection.size();
 		fEditButton.setEnabled(selectionCount == 1);
 		fCopyButton.setEnabled(selectionCount > 0);
-		if (selectionCount > 0 && selectionCount < fVMList.getTable().getItemCount()) {
+		if (selectionCount > 0 && selectionCount <= fVMList.getTable().getItemCount()) {
 			Iterator<IVMInstall> iterator = selection.iterator();
 			while (iterator.hasNext()) {
 				IVMInstall install = iterator.next();
-				if (isContributed(install)) {
+				if (JavaRuntime.isContributedVMInstall(install.getId())) {
 					fRemoveButton.setEnabled(false);
 					return;
 				}
@@ -572,15 +575,6 @@
 	}	
 	
 	/**
-	 * Returns if the specified VM install has been contributed
-	 * @param install
-	 * @return true if the specified VM is contributed, false otherwise
-	 */
-	private boolean isContributed(IVMInstall install) {
-		return JavaRuntime.isContributedVMInstall(install.getId());
-	}
-	
-	/**
 	 * Returns this block's control
 	 * 
 	 * @return control
@@ -635,11 +629,16 @@
 	 * @see IAddVMDialogRequestor#vmAdded(IVMInstall)
 	 */
 	public void vmAdded(IVMInstall vm) {
+		boolean makeselection = fVMs.size() < 1;
 		fVMs.add(vm);
 		//update from model
 		fVMList.refresh();
 		//update labels
 		fVMList.refresh(true);
+		//if we add a VM and none are selected, select one of them
+		if(makeselection) {
+			fireSelectionChanged();
+		}
 	}
 	
 	/**
@@ -664,7 +663,7 @@
 		if (vm == null) {
 			return;
 		}
-		if (isContributed(vm)) {
+		if (JavaRuntime.isContributedVMInstall(vm.getId())) {
 			VMDetailsDialog dialog= new VMDetailsDialog(getShell(), vm);
 			dialog.open();
 		} else {
@@ -705,21 +704,21 @@
 	 * @param vms
 	 */
 	public void removeJREs(IVMInstall[] vms) {
-		IStructuredSelection prev = (IStructuredSelection) getSelection();
 		for (int i = 0; i < vms.length; i++) {
 			fVMs.remove(vms[i]);
 		}
-		IStructuredSelection curr = (IStructuredSelection) getSelection();
-		if (!curr.equals(prev)) {
-			IVMInstall[] installs = getJREs();
-			if (curr.size() == 0 && installs.length == 1) {
-				// pick a default VM automatically
-				setSelection(new StructuredSelection(installs[0]));
-			} else {
-				fireSelectionChanged();
-			}
-		}
 		fVMList.refresh();
+		IStructuredSelection curr = (IStructuredSelection) getSelection();
+		IVMInstall[] installs = getJREs();
+		if(installs.length < 1) {
+			fPrevSelection = null;
+		}
+		if (curr.size() == 0 && installs.length == 1) {
+			// pick a default VM automatically
+			setSelection(new StructuredSelection(installs[0]));
+		} else {
+			fireSelectionChanged();
+		}
 		fVMList.refresh(true);
 	}
 	
@@ -830,14 +829,19 @@
 					IVMInstall vm = (IVMInstall) iterator.next();
 					exists.add(vm.getId());
 				}
-				VMStandin[] standins = new MacVMSearch().search(monitor);
-				for (int i = 0; i < standins.length; i++) {
-					//we should be comparing install paths, as the ID can be computed differently 
-					//based on if the VM is searched or added manually
-					if (!exists.contains(standins[i].getId())) {
-						added.add(standins[i]);
+				SubMonitor localmonitor = SubMonitor.convert(monitor, JREMessages.MacVMSearch_0, 5);
+				VMStandin[] standins = null;
+				try {
+					standins = MacInstalledJREs.getInstalledJREs(localmonitor);
+					for (int i = 0; i < standins.length; i++) {
+						if (!exists.contains(standins[i].getId())) {
+							added.add(standins[i]);
+						}
 					}
 				}
+				catch(CoreException ce) {
+					JDIDebugUIPlugin.log(ce);
+				}
 				monitor.done();
 			}
 		};
@@ -857,7 +861,6 @@
 			IVMInstall vm = iterator.next();
 			vmAdded(vm);
 		}
-
 	}
 
 	protected Shell getShell() {
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREMessages.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREMessages.java
index b671589..cf2e94d 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREMessages.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREMessages.java
@@ -72,6 +72,8 @@
 	public static String JREsPreferencePage_10;
 	public static String JREsPreferencePage_13;
 
+	public static String JREsPreferencePage_3;
+
 	public static String addVMDialog_duplicateName;
 	public static String addVMDialog_enterLocation;
 	public static String addVMDialog_enterName;
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREMessages.properties b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREMessages.properties
index aed10e3..31c585a 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREMessages.properties
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREMessages.properties
@@ -65,8 +65,9 @@
 JREsPreferencePage_2=Add, remove or edit JRE definitions. By default, the checked JRE is added to the build path of newly created Java projects.
 JREsPreferencePage_0=The selected JRE does not support the current compiler compliance level of {0}
 JREsPreferencePage_10=Installed JRE location no longer exists.  JRE will be removed.
-JREsPreferencePage_13=Select a default JRE
+JREsPreferencePage_13=You must select a default JRE for the workspace
 JREsPreferencePage_14=Conflicting compliance settings can be changed on the <a>Compiler</a> page.
+JREsPreferencePage_3=You must provide at least one JRE to act as the workspace default
 
 addVMDialog_duplicateName=The JRE name is already in use.
 addVMDialog_enterLocation=Enter the home directory of the JRE.
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREsPreferencePage.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREsPreferencePage.java
index 8089105..d005487 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREsPreferencePage.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREsPreferencePage.java
@@ -139,7 +139,12 @@
 				IVMInstall install = getCurrentDefaultVM();
 				if (install == null) {
 					setValid(false);
-					setErrorMessage(JREMessages.JREsPreferencePage_13); 
+					if(fJREBlock.getJREs().length < 1) {
+						setErrorMessage(JREMessages.JREsPreferencePage_3);
+					}
+					else {
+						setErrorMessage(JREMessages.JREsPreferencePage_13); 
+					}
 				} else {
 					//if we change the VM make sure the compliance level supports 
 					//generated class files
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/MacVMSearch.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/MacVMSearch.java
deleted file mode 100644
index 4e36b1f..0000000
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/MacVMSearch.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2013 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jdt.internal.debug.ui.jres;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.SubMonitor;
-import org.eclipse.jdt.internal.launching.MacInstalledJREs;
-import org.eclipse.jdt.launching.VMStandin;
-
-/**
- * Searches for installed JREs on the MAC, in known location.
- */
-public class MacVMSearch {
-
-	/**
-	 * Returns an array of {@link VMStandin}s found at the standard Mac OS location
-	 * or an empty listing, never <code>null</code>
-	 * @param monitor
-	 * @return a listing of {@link VMStandin}s at the standard Mac OS location or an empty listing
-	 */
-	public VMStandin[] search(IProgressMonitor monitor) {
-		SubMonitor localmonitor = SubMonitor.convert(monitor, JREMessages.MacVMSearch_0, 5);
-		try {
-			return MacInstalledJREs.getInstalledJREs(localmonitor);
-		}
-		catch(CoreException ce) {
-			return MacInstalledJREs.NO_VMS;
-		}
-	}
-}
