diff --git a/org.eclipse.jdt.launching.macosx/macosx/org/eclipse/jdt/internal/launching/macosx/MacOSXLauncherMessages.properties b/org.eclipse.jdt.launching.macosx/macosx/org/eclipse/jdt/internal/launching/macosx/MacOSXLauncherMessages.properties
index 2a099ef..0dbf90c 100644
--- a/org.eclipse.jdt.launching.macosx/macosx/org/eclipse/jdt/internal/launching/macosx/MacOSXLauncherMessages.properties
+++ b/org.eclipse.jdt.launching.macosx/macosx/org/eclipse/jdt/internal/launching/macosx/MacOSXLauncherMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2002, 2005 IBM Corporation and others.
+# Copyright (c) 2002, 2010 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
@@ -7,10 +7,11 @@
 #
 # Contributors:
 #    Andre Weinand - Initial implementation
+#    Ralf Ebert ralf@ralfebert.de - fix for #307109
 ###############################################################################
 			
 MacOSXVMType.jvmName= JVM {0}
 MacOSXVMType.jvmDefaultName= JVM {0} (MacOS X Default)
 MacOSXVMType.error.notRoot=Not a JDK Root; MacOS X executable was not found
 MacOSXVMType.name=MacOS X VM
-
+MacOSXVMType.error.jvmDirectoryNotFound=Java VM default location "{0}" not found, JVMs were not scanned.
diff --git a/org.eclipse.jdt.launching.macosx/macosx/org/eclipse/jdt/internal/launching/macosx/MacOSXVMInstallType.java b/org.eclipse.jdt.launching.macosx/macosx/org/eclipse/jdt/internal/launching/macosx/MacOSXVMInstallType.java
index 12697ff..0148213 100644
--- a/org.eclipse.jdt.launching.macosx/macosx/org/eclipse/jdt/internal/launching/macosx/MacOSXVMInstallType.java
+++ b/org.eclipse.jdt.launching.macosx/macosx/org/eclipse/jdt/internal/launching/macosx/MacOSXVMInstallType.java
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Jeff Myers myersj@gmail.com - fix for #75201
+ *     Ralf Ebert ralf@ralfebert.de - fix for #307109
  *******************************************************************************/
 package org.eclipse.jdt.internal.launching.macosx;
 
@@ -22,14 +23,13 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Status;
-
 import org.eclipse.jdt.internal.launching.LaunchingPlugin;
 import org.eclipse.jdt.internal.launching.LibraryInfo;
 import org.eclipse.jdt.internal.launching.StandardVMType;
-
 import org.eclipse.jdt.launching.IVMInstall;
 import org.eclipse.jdt.launching.JavaRuntime;
 import org.eclipse.jdt.launching.VMStandin;
+import org.eclipse.osgi.util.NLS;
 
 /**
  * This plugins into the org.eclipse.jdt.launching.vmInstallTypes extension point
@@ -58,10 +58,11 @@
 	
 	/** The OS keeps all the JVM versions in this directory */
 	private static final String JVM_VERSION_LOC= "/System/Library/Frameworks/JavaVM.framework/Versions/";	//$NON-NLS-1$
+	private static final File JVM_VERSIONS_FOLDER= new File(JVM_VERSION_LOC);
 	/** The name of a Unix link to MacOS X's default VM */
-	private static final String CURRENT_JVM= "CurrentJDK";	//$NON-NLS-1$
+	private static final String CURRENT_JDK= "CurrentJDK";	//$NON-NLS-1$
 	/** The root of a JVM */
-	private static final String JVM_ROOT= "Home";	//$NON-NLS-1$
+	private static final String JVM_HOME= "Home";	//$NON-NLS-1$
 	/** The doc (for all JVMs) lives here (if the developer kit has been expanded)*/
 	private static final String JAVADOC_LOC= "/Developer/Documentation/Java/Reference/";	//$NON-NLS-1$
 	/** The doc for 1.4.1 is kept in a sub directory of the above. */ 
@@ -85,53 +86,42 @@
 		if (javaVMName == null) {
 			return null;
 		}
+
+		if (!JVM_VERSIONS_FOLDER.exists() || !JVM_VERSIONS_FOLDER.isDirectory()) {
+			String message= NLS.bind(MacOSXLaunchingPlugin.getString("MacOSXVMType.error.jvmDirectoryNotFound"), JVM_VERSIONS_FOLDER);  //$NON-NLS-1$
+			LaunchingPlugin.log(message);
+			return null;
+		}
+
 		// find all installed VMs
 		File defaultLocation= null;
-		File versionDir= new File(JVM_VERSION_LOC);
-		if (versionDir.exists() && versionDir.isDirectory()) {
-			File currentJDK= new File(versionDir, CURRENT_JVM);
-			try {
-				currentJDK= currentJDK.getCanonicalFile();
-			} catch (IOException ex) {
-				// NeedWork
-			}
-			File[] versions= versionDir.listFiles();
-			for (int i= 0; i < versions.length; i++) {
-				String version= versions[i].getName();
-				File home= new File(versions[i], JVM_ROOT);
-				if (home.exists()) {
-					boolean isDefault= currentJDK.equals(versions[i]);
-					IVMInstall install= findVMInstall(version);
-					if (install == null && !CURRENT_JVM.equals(version)) {
-						VMStandin vm= new VMStandin(this, version);
-						vm.setInstallLocation(home);
-						String format= MacOSXLaunchingPlugin.getString(isDefault
-													? "MacOSXVMType.jvmDefaultName"		//$NON-NLS-1$
-													: "MacOSXVMType.jvmName");				//$NON-NLS-1$
-						vm.setName(MessageFormat.format(format, new Object[] { version } ));
-						vm.setLibraryLocations(getDefaultLibraryLocations(home));
-						URL doc= getDefaultJavadocLocation(home);
-						if (doc != null)
-							vm.setJavadocLocation(doc);
-						
-						IVMInstall rvm= vm.convertToRealVM();					
-						if (isDefault) {
-							defaultLocation= home;
-							try {
-								JavaRuntime.setDefaultVMInstall(rvm, null);
-							} catch (CoreException e) {
-								LaunchingPlugin.log(e);
-							}
-						}
-					} else {
-						if (isDefault) {
-							defaultLocation= home;
-							try {
-								JavaRuntime.setDefaultVMInstall(install, null);
-							} catch (CoreException e) {
-								LaunchingPlugin.log(e);
-							}
-						}
+		File[] versions= getAllVersions();
+		File currentJDK= getCurrentJDK();
+		for (int i= 0; i < versions.length; i++) {
+			File versionFile= versions[i];
+			String version= versionFile.getName();
+			File home= new File(versionFile, JVM_HOME);
+			if (home.exists()) {
+				boolean isDefault= currentJDK.equals(versionFile);
+				IVMInstall install= findVMInstall(version);
+				if (install == null) {
+					VMStandin vm= new VMStandin(this, version);
+					vm.setInstallLocation(home);
+					String format= MacOSXLaunchingPlugin.getString(isDefault
+												? "MacOSXVMType.jvmDefaultName"		//$NON-NLS-1$
+												: "MacOSXVMType.jvmName");				//$NON-NLS-1$
+					vm.setName(MessageFormat.format(format, new Object[] { version } ));
+					vm.setLibraryLocations(getDefaultLibraryLocations(home));
+					vm.setJavadocLocation(getDefaultJavadocLocation(home));
+					
+					install= vm.convertToRealVM();
+				}
+				if (isDefault) {
+					defaultLocation= home;
+					try {
+						JavaRuntime.setDefaultVMInstall(install, null);
+					} catch (CoreException e) {
+						LaunchingPlugin.log(e);
 					}
 				}
 			}
@@ -139,6 +129,26 @@
 		return defaultLocation;
 	}
 
+	private File[] getAllVersions() {
+		File[] versionFiles= JVM_VERSIONS_FOLDER.listFiles();
+		for (int i= 0; i < versionFiles.length; i++) {
+			versionFiles[i]= resolveSymbolicLinks(versionFiles[i]);
+		}
+		return versionFiles;
+	}
+
+	private File getCurrentJDK() {
+		return resolveSymbolicLinks(new File(JVM_VERSIONS_FOLDER, CURRENT_JDK));
+	}
+	
+	private File resolveSymbolicLinks(File file) {
+		try {
+			return file.getCanonicalFile();
+		} catch (IOException ex) {
+			return file;
+		}
+	}
+
 	/**
 	 * Returns default library info for the given install location.
 	 * 
@@ -174,7 +184,7 @@
 	protected IPath getDefaultSystemLibrarySource(File libLocation) {
 		File parent= libLocation.getParentFile();
 		while (parent != null) {
-			File home= new File(parent, JVM_ROOT);
+			File home= new File(parent, JVM_HOME);
 			File parentsrc= new File(home, "src.jar"); //$NON-NLS-1$
 			if (parentsrc.isFile()) {
 				setDefaultRootPath("src");//$NON-NLS-1$
@@ -210,7 +220,7 @@
 		// try in local filesystem
 		String id= null;	
 		try {
-			String post= File.separator + JVM_ROOT;
+			String post= File.separator + JVM_HOME;
 			String path= installLocation.getCanonicalPath();
 			if (path.startsWith(JVM_VERSION_LOC) && path.endsWith(post))
 				id= path.substring(JVM_VERSION_LOC.length(), path.length()-post.length());
