diff --git a/org.eclipse.scout.nls.sdk.services/src/org/eclipse/scout/nls/sdk/services/model/ws/project/ServiceNlsProjectProvider.java b/org.eclipse.scout.nls.sdk.services/src/org/eclipse/scout/nls/sdk/services/model/ws/project/ServiceNlsProjectProvider.java
index 00248b0..5e43ccb 100644
--- a/org.eclipse.scout.nls.sdk.services/src/org/eclipse/scout/nls/sdk/services/model/ws/project/ServiceNlsProjectProvider.java
+++ b/org.eclipse.scout.nls.sdk.services/src/org/eclipse/scout/nls/sdk/services/model/ws/project/ServiceNlsProjectProvider.java
@@ -12,7 +12,6 @@
 import org.eclipse.core.runtime.IExtension;
 import org.eclipse.jdt.core.IAnnotation;
 import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IMemberValuePair;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.pde.internal.core.PDECore;
@@ -24,6 +23,7 @@
 import org.eclipse.scout.sdk.RuntimeClasses;
 import org.eclipse.scout.sdk.ScoutSdkCore;
 import org.eclipse.scout.sdk.internal.workspace.IScoutBundleConstantes;
+import org.eclipse.scout.sdk.util.jdt.JdtUtility;
 import org.eclipse.scout.sdk.util.log.ScoutStatus;
 import org.eclipse.scout.sdk.util.type.TypeUtility;
 import org.eclipse.scout.sdk.util.typecache.TypeCacheAccessor;
@@ -46,7 +46,7 @@
 
   /**
    * Gets the registered (in plugin.xml) text provider service types ordered by priority.
-   * 
+   *
    * @param returnDocServices
    *          If true, only Docs text provider services (implementing marker interface
    *          <code>IDocumentationTextProviderService</code>) are returned. Otherwise only non-docs text provider
@@ -185,14 +185,11 @@
 
     // second check class annotation
     try {
-      IAnnotation a = registration.getAnnotation("org.eclipse.scout.commons.annotations.Priority");
-      if (a != null) {
-        for (IMemberValuePair mvp : a.getMemberValuePairs()) {
-          if ("value".equals(mvp.getMemberName()) && mvp.getValue() instanceof Float) {
-            return ((Float) mvp.getValue()).floatValue();
-          }
+    	IAnnotation a = JdtUtility.getAnnotation(registration, RuntimeClasses.Ranking);
+        Double val = JdtUtility.getNumericAnnotationValue(a, "value");
+        if (val != null) {
+          return val.floatValue();
         }
-      }
     }
     catch (Exception e) {
       //nop
diff --git a/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/jdt/JdtUtility.java b/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/jdt/JdtUtility.java
index ac8e5b7..0ca2821 100644
--- a/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/jdt/JdtUtility.java
+++ b/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/jdt/JdtUtility.java
@@ -15,6 +15,7 @@
 import org.eclipse.jdt.core.IAnnotation;
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IMemberValuePair;
 import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaCore;
@@ -38,6 +39,26 @@
     return TypeUtility.exists(getAnnotation(element, fullyQuallifiedAnnotation));
   }
 
+  public static Double getNumericAnnotationValue(IAnnotation annotation, String name) throws JavaModelException {
+    if (TypeUtility.exists(annotation)) {
+      IMemberValuePair[] memberValues = annotation.getMemberValuePairs();
+      for (IMemberValuePair p : memberValues) {
+        if (name.equals(p.getMemberName())) {
+          switch (p.getValueKind()) {
+            case IMemberValuePair.K_DOUBLE:
+              return ((Double) p.getValue()).doubleValue();
+            case IMemberValuePair.K_FLOAT:
+              return ((Float) p.getValue()).doubleValue();
+            case IMemberValuePair.K_INT:
+              return ((Integer) p.getValue()).doubleValue();
+          }
+          break;
+        }
+      }
+    }
+    return null;
+  }
+
   public static IAnnotation getAnnotation(IAnnotatable element, String fullyQuallifiedAnnotation) {
     try {
       IAnnotation annotation = element.getAnnotation(fullyQuallifiedAnnotation);
@@ -61,7 +82,7 @@
 
   /**
    * Escape the given string in java style.
-   * 
+   *
    * @param s
    *          The string to escape.
    * @return A new string with backslashes and double-quotes escaped in java style.
@@ -74,7 +95,7 @@
   /**
    * converts the given string into a string literal with leading and ending double-quotes including escaping of the
    * given value.
-   * 
+   *
    * @param s
    *          the string to convert.
    * @return the literal string.
diff --git a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/RuntimeClasses.java b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/RuntimeClasses.java
index 1dd785f..f79f3c5 100644
--- a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/RuntimeClasses.java
+++ b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/RuntimeClasses.java
@@ -12,7 +12,7 @@
 
 /**
  * <h3>{@link RuntimeClasses}</h3> ...
- * 
+ *
  * @author Andreas Hoegger
  * @since 1.0.8 24.01.2009
  */
@@ -221,6 +221,7 @@
   public static final String LookupCall = "org.eclipse.scout.rt.shared.services.lookup.LookupCall"; // NO_UCD
   public static final String LookupRow = "org.eclipse.scout.rt.shared.services.lookup.LookupRow"; // NO_UCD
   public static final String Order = "org.eclipse.scout.commons.annotations.Order"; // NO_UCD
+  public static final String Ranking = "org.eclipse.scout.commons.annotations.Priority"; // NO_UCD
   public static final String ScoutTexts = "org.eclipse.scout.rt.shared.ScoutTexts"; // NO_UCD
   public static final String SearchFilter = "org.eclipse.scout.rt.shared.services.common.jdbc.SearchFilter"; // NO_UCD
   public static final String ServerServiceFactory = "org.eclipse.scout.rt.server.services.ServerServiceFactory"; // NO_UCD
diff --git a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/ScoutTypeUtility.java b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/ScoutTypeUtility.java
index 3778066..d34c0dd 100644
--- a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/ScoutTypeUtility.java
+++ b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/ScoutTypeUtility.java
@@ -99,7 +99,7 @@
    * }
    * // execCreateChildPages.getAllNewTypeOccurrences() returns BCType[]{A,B}
    * </xmp>
-   * 
+   *
    * @return
    * @throws JavaModelException
    */
@@ -545,31 +545,8 @@
   }
 
   public static Double getOrderAnnotationValue(IAnnotatable a) throws JavaModelException {
-    Double sortNo = null;
-    IAnnotation annotation = JdtUtility.getAnnotation(a, RuntimeClasses.Order);
-    if (TypeUtility.exists(annotation)) {
-      IMemberValuePair[] memberValues = annotation.getMemberValuePairs();
-      for (IMemberValuePair p : memberValues) {
-        if ("value".equals(p.getMemberName())) {
-          switch (p.getValueKind()) {
-            case IMemberValuePair.K_DOUBLE:
-              sortNo = ((Double) p.getValue()).doubleValue();
-              break;
-            case IMemberValuePair.K_FLOAT:
-              sortNo = ((Float) p.getValue()).doubleValue();
-              break;
-            case IMemberValuePair.K_INT:
-              sortNo = ((Integer) p.getValue()).doubleValue();
-              break;
-            default:
-              sortNo = null;
-              break;
-          }
-          break;
-        }
-      }
-    }
-    return sortNo;
+	IAnnotation annotation = JdtUtility.getAnnotation(a, RuntimeClasses.Order);
+	return JdtUtility.getNumericAnnotationValue(annotation, "value");
   }
 
   public static IType[] getFormFieldsWithoutButtons(IType declaringType) {
@@ -1123,7 +1100,7 @@
 
   /**
    * don not hang on this object.
-   * 
+   *
    * @param type
    * @return
    */
