diff --git a/src/main/java/org/apache/sling/serviceusermapping/Mapping.java b/src/main/java/org/apache/sling/serviceusermapping/Mapping.java
index 9139f15..151bf5a 100644
--- a/src/main/java/org/apache/sling/serviceusermapping/Mapping.java
+++ b/src/main/java/org/apache/sling/serviceusermapping/Mapping.java
@@ -18,6 +18,9 @@
  */
 package org.apache.sling.serviceusermapping;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.util.LinkedHashSet;
 import java.util.Set;
 
@@ -33,6 +36,8 @@
      */
     public static String SERVICENAME = ".serviceName";
 
+    private final Logger log = LoggerFactory.getLogger(getClass());
+
     private final String serviceName;
 
     private final String subServiceName;
@@ -86,6 +91,7 @@
         } else {
             this.userName = s;
             this.principalNames = null;
+            log.warn("Deprecated service mapping by userId, refactor to mapping by principal names (e.g. '{}{}=[{}]').", serviceName, ((subServiceName == null) ? "" : ":"+subServiceName) , s);
         }
     }
 
diff --git a/src/main/java/org/apache/sling/serviceusermapping/ServiceUserMapper.java b/src/main/java/org/apache/sling/serviceusermapping/ServiceUserMapper.java
index d65cab8..de1f5f7 100644
--- a/src/main/java/org/apache/sling/serviceusermapping/ServiceUserMapper.java
+++ b/src/main/java/org/apache/sling/serviceusermapping/ServiceUserMapper.java
@@ -77,7 +77,9 @@
 	 *         the service. This may be {@code null} if no particular user can
 	 *         be derived for the service identified by the bundle and the
 	 *         optional {@code serviceInfo}.
+	 * @deprecated Use {@link #getServicePrincipalNames(Bundle, String)} instead.        
 	 */
+	@Deprecated
 	String getServiceUserID(Bundle bundle, String subServiceName);
 
 	/**
diff --git a/src/main/java/org/apache/sling/serviceusermapping/impl/MappingInventoryPrinter.java b/src/main/java/org/apache/sling/serviceusermapping/impl/MappingInventoryPrinter.java
index 821a72c..0050b34 100644
--- a/src/main/java/org/apache/sling/serviceusermapping/impl/MappingInventoryPrinter.java
+++ b/src/main/java/org/apache/sling/serviceusermapping/impl/MappingInventoryPrinter.java
@@ -133,12 +133,12 @@
         w.object();
         w.key("title").value("Service User Mappings");
         w.key("mappingsCount").value(data.size());
-        w.key("uniqueUsersCount").value(byUser.keySet().size());
         w.key("uniquePrincipalsCount").value(byPrincipalName.keySet().size());
+        w.key("uniqueUsersCount").value(byUser.keySet().size());
 
-        w.key("mappingsByUser");
+        w.key("mappingsByPrincipal");
         w.object();
-        for(Map.Entry<String, List<Mapping>> e : byUser.entrySet()) {
+        for(Map.Entry<String, List<Mapping>> e : byPrincipalName.entrySet()) {
             w.key(e.getKey());
             w.array();
             for(Mapping m : e.getValue()) {
@@ -148,9 +148,9 @@
         }
         w.endObject();
 
-        w.key("mappingsByPrincipal");
+        w.key("mappingsByUser (deprecated)");
         w.object();
-        for(Map.Entry<String, List<Mapping>> e : byPrincipalName.entrySet()) {
+        for(Map.Entry<String, List<Mapping>> e : byUser.entrySet()) {
             w.key(e.getKey());
             w.array();
             for(Mapping m : e.getValue()) {
@@ -182,23 +182,8 @@
     private void renderText(PrintWriter out) {
         final List<Mapping> data = mapper.getActiveMappings();
 
-        final Map<String, List<Mapping>> byUser = getMappingsByUser(data);
-
-        out.print("*** Mappings by user (");
-        out.print(byUser.keySet().size());
-        out.print(" users):");
-        out.println(" (format: service name / sub service name / user)");
-
-        for(Map.Entry<String, List<Mapping>> e : byUser.entrySet()) {
-            out.print("  ");
-            out.println(e.getKey());
-            for(Mapping m : e.getValue()) {
-                asText(out, m, "    ");
-            }
-        }
-
         final Map<String, List<Mapping>> byPrincipalName = getMappingsByPrincipalName(data);
-
+        
         out.print("*** Mappings by principals (");
         out.print(byPrincipalName.keySet().size());
         out.print(" principals):");
@@ -211,5 +196,20 @@
                 asText(out, m, "    ");
             }
         }
+        
+        final Map<String, List<Mapping>> byUser = getMappingsByUser(data);
+        out.println();
+        out.print("*** Deprecated mappings by user (");
+        out.print(byUser.keySet().size());
+        out.print(" users):");
+        out.println(" (format: service name / sub service name / user)");
+
+        for(Map.Entry<String, List<Mapping>> e : byUser.entrySet()) {
+            out.print("  ");
+            out.println(e.getKey());
+            for(Mapping m : e.getValue()) {
+                asText(out, m, "    ");
+            }
+        }
    }
 }
\ No newline at end of file
