# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
diff --git a/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/Framework.java b/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/Framework.java
index 617db7f..1851f4a 100644
--- a/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/Framework.java
+++ b/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/Framework.java
@@ -563,11 +563,19 @@ public class Framework implements EventPublisher, Runnable {
 
 	private URL findNextBestProfile(String javaEdition, Version javaVersion) {
 		URL result = null;
+                int major = javaVersion.getMajor();
 		int minor = javaVersion.getMinor();
-		do {
-			result = findInSystemBundle(javaEdition + javaVersion.getMajor() + "." + minor + PROFILE_EXT); //$NON-NLS-1$
-			minor = minor - 1;
-		} while (result == null && minor > 0);
+            do {
+                result = findInSystemBundle(javaEdition + major + "." + minor + PROFILE_EXT); //$NON-NLS-1$
+                if (major > 9) {
+                    major -= 1;
+                } else if (major == 9) {
+                    minor = major - 1;
+                    major = 1;
+                } else {
+                    minor -= 1;
+                }
+            } while (result == null && ((minor > 0) || (major > 1)));
 		return result;
 	}
 
