diff --git a/bundles/org.eclipse.equinox.common.tests/src/org/eclipse/core/runtime/tests/FileLocatorTest.java b/bundles/org.eclipse.equinox.common.tests/src/org/eclipse/core/runtime/tests/FileLocatorTest.java
index c585836..d0f3830 100644
--- a/bundles/org.eclipse.equinox.common.tests/src/org/eclipse/core/runtime/tests/FileLocatorTest.java
+++ b/bundles/org.eclipse.equinox.common.tests/src/org/eclipse/core/runtime/tests/FileLocatorTest.java
@@ -16,6 +16,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
 import java.io.File;
@@ -103,8 +104,9 @@
 		Bundle bundle = context.installBundle("reference:" + FileLocator.toFileURL(url).toExternalForm());
 		BundleTestingHelper.refreshPackages(context, new Bundle[] { bundle });
 
-		File file1 = FileLocator.getBundleFile(bundle);
+		File file1 = FileLocator.getBundleFileLocation(bundle).get();
 		assertNotNull(file1);
+		assertSame(file1, FileLocator.getBundleFile(bundle));
 
 		URL fileURL = FileLocator
 				.toFileURL(context.getBundle().getEntry("Plugin_Testing/fileLocator/testFileLocatorGetRootFile"));
@@ -123,8 +125,9 @@
 		Bundle bundle = context.installBundle("reference:" + FileLocator.toFileURL(url).toExternalForm());
 		BundleTestingHelper.refreshPackages(context, new Bundle[] { bundle });
 
-		File file1 = FileLocator.getBundleFile(bundle);
+		File file1 = FileLocator.getBundleFileLocation(bundle).get();
 		assertNotNull(file1);
+		assertSame(file1, FileLocator.getBundleFile(bundle));
 
 		URL fileURL = FileLocator
 				.toFileURL(context.getBundle().getEntry("Plugin_Testing/fileLocator/testFileLocatorGetRootFile.jar"));
diff --git a/bundles/org.eclipse.equinox.common/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.common/META-INF/MANIFEST.MF
index 0f8c6f8..41003de 100644
--- a/bundles/org.eclipse.equinox.common/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.equinox.common/META-INF/MANIFEST.MF
@@ -19,18 +19,7 @@
  org.eclipse.equinox.events;version="1.0.0"
 Bundle-Vendor: %providerName
 Bundle-Activator: org.eclipse.core.internal.runtime.Activator
-Import-Package: org.eclipse.equinox.log;version="[1.0,2.0)",
- org.eclipse.osgi.framework.log;version="[1.1, 2.0)",
- org.eclipse.osgi.service.datalocation,
- org.eclipse.osgi.service.debug,
- org.eclipse.osgi.service.localization,
- org.eclipse.osgi.service.urlconversion,
- org.eclipse.osgi.util,
- org.osgi.framework,
- org.osgi.service.log;version="[1.3.0, 2.0)",
- org.osgi.service.packageadmin,
- org.osgi.service.url,
- org.osgi.util.tracker
+Require-Bundle: org.eclipse.osgi;bundle-version="[3.17.200,4.0.0)"
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
 Automatic-Module-Name: org.eclipse.equinox.common
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/FileLocator.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/FileLocator.java
index 9d7795e..bb2cacb 100644
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/FileLocator.java
+++ b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/FileLocator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2018 IBM Corporation and others.
+ * Copyright (c) 2006, 2022 IBM Corporation and others.
  *
  * This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License 2.0
@@ -12,12 +12,14 @@
  *     IBM Corporation - initial API and implementation
  *     Sergey Prigogin (Google) - use parameterized types (bug 442021)
  *     Lars Vogel <Lars.Vogel@vogella.com> - Bug 483464
+ *     Hannes Wellmann - Bug 577574 - Speed-up and simplify getBundleFile() and add getBundleFileLocation
  *******************************************************************************/
 package org.eclipse.core.runtime;
 
 import java.io.*;
 import java.net.URL;
 import java.util.Map;
+import java.util.Optional;
 import org.eclipse.core.internal.runtime.Activator;
 import org.eclipse.core.internal.runtime.FindSupport;
 import org.eclipse.osgi.service.urlconversion.URLConverter;
@@ -284,9 +286,9 @@
 	}
 
 	/**
-	 * Returns a file for the contents of the specified bundle.  Depending 
-	 * on how the bundle is installed the returned file may be a directory or a jar file 
-	 * containing the bundle content.  
+	 * Returns a file for the contents of the specified bundle. Depending on how the
+	 * bundle is installed the returned file may be a directory or a jar file
+	 * containing the bundle content.
 	 * 
 	 * @param bundle the bundle
 	 * @return a file with the contents of the bundle
@@ -295,19 +297,26 @@
 	 * @since org.eclipse.equinox.common 3.4
 	 */
 	public static File getBundleFile(Bundle bundle) throws IOException {
-		URL rootEntry = bundle.getEntry("/"); //$NON-NLS-1$
-		rootEntry = resolve(rootEntry);
-		if ("file".equals(rootEntry.getProtocol())) //$NON-NLS-1$
-			return new File(rootEntry.getPath());
-		if ("jar".equals(rootEntry.getProtocol())) { //$NON-NLS-1$
-			String path = rootEntry.getPath();
-			if (path.startsWith("file:")) { //$NON-NLS-1$
-				// strip off the file: and the !/
-				path = path.substring(5, path.length() - 2);
-				return new File(path);
-			}
-		}
-		throw new IOException("Unknown protocol"); //$NON-NLS-1$
+		return getBundleFileLocation(bundle)
+				.orElseThrow(() -> new IOException("Unable to locate the bundle file: " + bundle)); //$NON-NLS-1$
+	}
+
+	/**
+	 * Returns an {@code Optional} {@link File}, that (if present) describes the
+	 * bundle's root location on the file system.
+	 * <p>
+	 * Depending on how the bundle is installed the returned file may be a directory
+	 * or a jar file containing the bundle content. In case the location cannot be
+	 * determined the returned {@code Optional} is empty, which is for example
+	 * usually the case for {@code CONNECT} bundles.
+	 * <p>
+	 * 
+	 * @param bundle the bundle
+	 * @return the optional file to the location of the bundle's root
+	 * @since 3.16
+	 */
+	public static Optional<File> getBundleFileLocation(Bundle bundle) {
+		return Optional.ofNullable(bundle.adapt(File.class));
 	}
 
 }
\ No newline at end of file
