diff --git a/org.eclipse.scout.rt.shared/src/org/eclipse/scout/rt/shared/ScoutTexts.java b/org.eclipse.scout.rt.shared/src/org/eclipse/scout/rt/shared/ScoutTexts.java
index 7b2291e..e86ce1c 100644
--- a/org.eclipse.scout.rt.shared/src/org/eclipse/scout/rt/shared/ScoutTexts.java
+++ b/org.eclipse.scout.rt.shared/src/org/eclipse/scout/rt/shared/ScoutTexts.java
@@ -41,7 +41,7 @@
   private final ITextProviderService[] m_textProviders;
 
   public ScoutTexts() {
-    this(SERVICES.getServices(ITextProviderService.class));
+    this(SERVICES.getServicesOrdered(ITextProviderService.class));
   }
 
   public ScoutTexts(ITextProviderService[] textProviders) {
diff --git a/org.eclipse.scout.service/src/org/eclipse/scout/service/SERVICES.java b/org.eclipse.scout.service/src/org/eclipse/scout/service/SERVICES.java
index d45a21d..2a715a6 100644
--- a/org.eclipse.scout.service/src/org/eclipse/scout/service/SERVICES.java
+++ b/org.eclipse.scout.service/src/org/eclipse/scout/service/SERVICES.java
@@ -12,11 +12,14 @@
 
 import java.lang.reflect.Array;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
 
 import org.eclipse.scout.commons.logger.IScoutLogger;
 import org.eclipse.scout.commons.logger.ScoutLogManager;
 import org.eclipse.scout.service.internal.Activator;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
 
@@ -123,8 +126,26 @@
   /**
    * @return the services in order of registration (not by ranking)
    */
-  @SuppressWarnings("unchecked")
   public static <T extends Object> T[] getServices(Class<T> serviceInterfaceClass, String filter) {
+    return getServicesInternal(serviceInterfaceClass, null, false);
+  }
+
+  /**
+   * @return the services in order of ranking
+   */
+  public static <T extends Object> T[] getServicesOrdered(Class<T> serviceInterfaceClass) {
+    return getServicesOrdered(serviceInterfaceClass, null);
+  }
+
+  /**
+   * @return the services in order of ranking
+   */
+  public static <T extends Object> T[] getServicesOrdered(Class<T> serviceInterfaceClass, String filter) {
+    return getServicesInternal(serviceInterfaceClass, null, true);
+  }
+
+  @SuppressWarnings("unchecked")
+  private static <T extends Object> T[] getServicesInternal(Class<T> serviceInterfaceClass, String filter, boolean ordered) {
     Activator a = Activator.getDefault();
     if (a == null || serviceInterfaceClass == null) {
       return (T[]) Array.newInstance(serviceInterfaceClass, 0);
@@ -144,6 +165,14 @@
       // nop
     }
     if (refs != null) {
+      if (ordered) {
+        Arrays.sort(refs, new Comparator<ServiceReference>() {
+          @Override
+          public int compare(ServiceReference ref1, ServiceReference ref2) {
+            return ((Comparable) ref2.getProperty(Constants.SERVICE_RANKING)).compareTo(((Comparable) ref1.getProperty(Constants.SERVICE_RANKING)));
+          }
+        });
+      }
       ArrayList<T> list = new ArrayList<T>(refs.length);
       for (ServiceReference ref : refs) {
         T s = resolveService(serviceInterfaceClass, context, ref);
