diff --git a/modules/org.openbravo.client.application/src/org/openbravo/client/application/personalization/PersonalizationHandler.java b/modules/org.openbravo.client.application/src/org/openbravo/client/application/personalization/PersonalizationHandler.java
--- a/modules/org.openbravo.client.application/src/org/openbravo/client/application/personalization/PersonalizationHandler.java
+++ b/modules/org.openbravo.client.application/src/org/openbravo/client/application/personalization/PersonalizationHandler.java
@@ -270,11 +270,11 @@
     Collections.sort(personalizations, new PersonalizationComparator(parentTree));
   }
 
-  private static class PersonalizationComparator implements Comparator<UIPersonalization> {
+  public static class PersonalizationComparator implements Comparator<UIPersonalization> {
 
     private List<String> parentTree;
 
-    private PersonalizationComparator(List<String> parentTree) {
+    public PersonalizationComparator(List<String> parentTree) {
       this.parentTree = parentTree;
     }
 new file mode 100644
--- /dev/null
+++ b/src-test/src/org/openbravo/test/SortPersonalizations.java
@@ -0,0 +1,84 @@
+package org.openbravo.test;
+
+import static org.hamcrest.Matchers.greaterThan;
+import static org.hamcrest.Matchers.lessThan;
+import static org.junit.Assert.assertThat;
+
+import java.util.List;
+
+import org.junit.Test;
+import org.openbravo.base.provider.OBProvider;
+import org.openbravo.client.application.UIPersonalization;
+import org.openbravo.client.application.personalization.PersonalizationHandler.PersonalizationComparator;
+import org.openbravo.dal.core.OBContext;
+import org.openbravo.dal.service.OBDal;
+import org.openbravo.model.ad.access.Role;
+import org.openbravo.model.ad.access.User;
+import org.openbravo.model.ad.system.Client;
+import org.openbravo.test.base.OBBaseTest;
+
+public class SortPersonalizations extends OBBaseTest {
+
+  @Test
+  public void sortIsTransitive() {
+    try {
+      OBContext.setAdminMode(true);
+      UIPersonalization a = OBProvider.getInstance().get(UIPersonalization.class);
+      a.setId("A");
+      a.setVisibleAtClient(OBDal.getInstance().getProxy(Client.class, TEST_CLIENT_ID));
+
+      UIPersonalization b = OBProvider.getInstance().get(UIPersonalization.class);
+      b.setId("B");
+      b.setUser(OBDal.getInstance().getProxy(User.class, TEST_USER_ID));
+
+      UIPersonalization c = OBProvider.getInstance().get(UIPersonalization.class);
+      c.setId("C");
+      c.setVisibleAtClient(OBDal.getInstance().getProxy(Client.class, TEST_CLIENT_ID));
+      c.setVisibleAtRole(OBDal.getInstance().getProxy(Role.class, TEST_ROLE_ID));
+
+      PersonalizationComparator comparator = getComparator();
+
+      if (comparator.compare(a, b) > 0 && comparator.compare(b, c) > 0) {
+        assertThat("A > B and B > C then A > C", comparator.compare(a, c), greaterThan(0));
+      }
+
+    } finally {
+      OBDal.getInstance().rollbackAndClose();
+      OBContext.restorePreviousMode();
+    }
+  }
+
+  @Test
+  public void sortIsConmutative() {
+    try {
+      OBContext.setAdminMode(true);
+      UIPersonalization a = OBProvider.getInstance().get(UIPersonalization.class);
+      a.setId("A");
+      a.setVisibleAtClient(OBDal.getInstance().getProxy(Client.class,
+          "23C59575B9CF467C9620760EB255B389"));
+
+      UIPersonalization b = OBProvider.getInstance().get(UIPersonalization.class);
+      b.setId("B");
+
+      PersonalizationComparator comparator = getComparator();
+
+      int res = comparator.compare(a, b);
+      assertThat("A > B", res, greaterThan(0));
+
+      res = comparator.compare(b, a);
+      assertThat("B < A", res, lessThan(0));
+
+    } finally {
+      OBDal.getInstance().rollbackAndClose();
+      OBContext.restorePreviousMode();
+    }
+  }
+
+  private PersonalizationComparator getComparator() {
+    List<String> parentTree = OBContext.getOBContext()
+        .getOrganizationStructureProvider(OBContext.getOBContext().getCurrentClient().getId())
+        .getParentList("0", true);
+    return new PersonalizationComparator(parentTree);
+  }
+
+}
