diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/match/AdminSupervisorKeywordPanel.java b/src/main/java/se/su/dsv/scipro/admin/panels/match/AdminSupervisorKeywordPanel.java
index e43d5626a0..486b0e2a09 100644
--- a/src/main/java/se/su/dsv/scipro/admin/panels/match/AdminSupervisorKeywordPanel.java
+++ b/src/main/java/se/su/dsv/scipro/admin/panels/match/AdminSupervisorKeywordPanel.java
@@ -4,6 +4,9 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
+
+import com.mysema.query.types.OrderSpecifier;
+import com.mysema.query.types.expr.BooleanExpression;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
@@ -21,6 +24,7 @@ import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.odlabs.wiquery.ui.dialog.Dialog;
 
 import se.su.dsv.scipro.data.dataobjects.Employee;
+import se.su.dsv.scipro.data.dataobjects.QEmployee;
 import se.su.dsv.scipro.match.dao.interfaces.KeywordTypeDao;
 import se.su.dsv.scipro.match.dao.interfaces.SupervisorDao;
 import se.su.dsv.scipro.match.dataobject.Keyword;
@@ -37,6 +41,9 @@ public class AdminSupervisorKeywordPanel extends Panel {
     @SpringBean
     private SupervisorService supervisorService;
 
+    @SpringBean
+    private KeywordTypeDao keywordTypeDao;
+
 	public AdminSupervisorKeywordPanel(String str) {
 		super(str);
         Dialog dialog = new Dialog("detailsDialog");
@@ -88,39 +95,6 @@ if(!supervisorName.toString().isEmpty()) {
         return employeeList;
     }
 
-
-
-    private List<Employee> sortEmployeeList(final StringBuffer sortDirection, final StringBuffer orderBy, List<Employee> employeeList, final String keywordType) {
-        if(sortDirection.toString().equals("ASC")) {
-            Collections.sort(employeeList, new Comparator<Employee>() {
-                @Override
-                public int compare(Employee o1, Employee o2) {
-                    if (o1.getKeywords().getFiltered(keywordType).size() > o2.getKeywords().getFiltered(keywordType).size()) {
-                        return -1;
-                    } else if (o2.getKeywords().getFiltered(keywordType).size() > o1.getKeywords().getFiltered(keywordType).size()) {
-                        return 1;
-                    } else {
-                        return 0;
-                    }
-                }
-            });
-        } else if (orderBy.toString().equals("keywords.all.size") && sortDirection.toString().equals("DESC")) {
-            Collections.sort(employeeList, new Comparator<Employee>() {
-                @Override
-                public int compare(Employee o1, Employee o2) {
-                    if (o1.getKeywords().getFiltered(keywordType).size() > o2.getKeywords().getFiltered(keywordType).size()) {
-                        return 1;
-                    } else if (o2.getKeywords().getFiltered(keywordType).size() > o1.getKeywords().getFiltered(keywordType).size()) {
-                        return -1;
-                    } else {
-                        return 0;
-                    }
-                }
-            });
-        }
-        return employeeList;
-    }
-
 	private void setUpTable(final Dialog dialog, final WebMarkupContainer tableContainer, final StringBuffer supervisorName) {
         final StringBuffer sortDirection = new StringBuffer();
         final StringBuffer orderBy = new StringBuffer();
@@ -130,21 +104,43 @@ if(!supervisorName.toString().isEmpty()) {
 
             @Override
             protected List<Employee> load() {
-                org.springframework.data.domain.Sort sorter;
-                if (sortDirection.toString().isEmpty() || sortDirection.toString().equals("ASC")) {
-                    sorter = new org.springframework.data.domain.Sort(org.springframework.data.domain.Sort.Direction.ASC, "user.lastName");
-                } else {
-                    sorter = new org.springframework.data.domain.Sort(org.springframework.data.domain.Sort.Direction.DESC, "user.lastName");
-                }
                 List<Employee> employeeList = new ArrayList<Employee>();
-                employeeList.addAll(supervisorService.findAllEmployees(sorter));
+                org.springframework.data.domain.Sort sorter;
 
-                if(orderBy.toString().equals("keywords.all.size")) {
-                    employeeList = sortEmployeeList(sortDirection, orderBy, employeeList, KeywordTypeDao.TYPE.REGULAR.toDbName());
-                } else if (orderBy.toString().equals("areas.all.size")) {
-                    employeeList = sortEmployeeList(sortDirection, orderBy, employeeList, KeywordTypeDao.TYPE.RESEARCH_AREA.toDbName());
+                if(!orderBy.toString().equals("areas.all.size") && !orderBy.toString().equals("keywords.all.size")) {
+                    if (sortDirection.toString().isEmpty() || sortDirection.toString().equals("ASC")) {
+                        sorter = new org.springframework.data.domain.Sort(org.springframework.data.domain.Sort.Direction.ASC, "user.lastName");
+                        employeeList.addAll(supervisorService.findAllEmployees(sorter));
+                    } else {
+                        sorter = new org.springframework.data.domain.Sort(org.springframework.data.domain.Sort.Direction.DESC, "user.lastName");
+                        employeeList.addAll(supervisorService.findAllEmployees(sorter));
+                    }
                 }
 
+
+                QEmployee employee = QEmployee.employee;
+                OrderSpecifier<?> orderBySize = employee.keywords.keywords.size().asc();
+                KeywordType keywordType = keywordTypeDao.findByType(KeywordTypeDao.TYPE.REGULAR);
+
+                if(orderBy.toString().equals("keywords.all.size") || orderBy.toString().equals("areas.all.size")) {
+                    if(sortDirection.toString().equals("ASC")) {
+                        orderBySize = employee.keywords.keywords.size().asc();
+                    } else {
+                        orderBySize = employee.keywords.keywords.size().desc();
+                    }
+
+                    if(orderBy.toString().equals("keywords.all.size")) {
+                        keywordType = keywordTypeDao.findByType(KeywordTypeDao.TYPE.REGULAR);
+                    } else if (orderBy.toString().equals("areas.all.size")) {
+                        keywordType = keywordTypeDao.findByType(KeywordTypeDao.TYPE.RESEARCH_AREA);
+                    }
+
+                    // DETTA funkar inte den kollar om det finns nĂ¥got element i listan av den aktuella typen!!!!!!
+                    BooleanExpression keywordsHasCorrectType = employee.isNotNull().and(employee.keywords.keywords.any().type.eq(keywordType));
+                    for(Employee employee__ : supervisorService.findSupervisorQuery(keywordsHasCorrectType, orderBySize)) {
+                        employeeList.add(employee__);
+                    }
+                }
                 if(supervisorName.toString().isEmpty()) {
                     return employeeList;
                 }
diff --git a/src/test/java/se/su/dsv/scipro/springdata/TestSupervisor.java b/src/test/java/se/su/dsv/scipro/springdata/TestSupervisor.java
index de3303dc3f..1101bf9d40 100644
--- a/src/test/java/se/su/dsv/scipro/springdata/TestSupervisor.java
+++ b/src/test/java/se/su/dsv/scipro/springdata/TestSupervisor.java
@@ -47,10 +47,12 @@ public class TestSupervisor {
 
     private KeywordType keywordTypeWord;
 
+    private KeywordType keywordTypeArea;
+
     @SuppressWarnings("EmptyMethod")
     @Before
     public void startTransaction() throws Exception {
-        KeywordType keywordTypeArea = keywordTypeDao.save(new KeywordType("Area"));
+        keywordTypeArea = keywordTypeDao.save(new KeywordType("Area"));
         keywordTypeWord = keywordTypeDao.save(new KeywordType("Word"));
         Weights weights = createWeights();
     }
@@ -251,16 +253,32 @@ public class TestSupervisor {
         keyword = createKeyword(keywordTypeWord, "Java", false);
         tholerus.getKeywords().getAll().add(keyword);
         tholerus =  supervisorService.save(tholerus);
+
+        keyword = createKeyword(keywordTypeArea, "Area1", false);
+        larsson.getKeywords().getAll().add(keyword);
+        keyword = createKeyword(keywordTypeArea, "Area2", false);
+        larsson.getKeywords().getAll().add(keyword);
+        larsson =  supervisorService.save(larsson);
+
+        keyword = createKeyword(keywordTypeArea, "Area3", false);
+        larsson.getKeywords().getAll().add(keyword);
+        hallberg =  supervisorService.save(hallberg);
+
         QEmployee employee = QEmployee.employee;
         OrderSpecifier<?> orderBySize = employee.keywords.keywords.size().desc();
-        BooleanExpression employeeExists = employee.isNotNull();
-
-        for(Employee employee__ : supervisorService.findSupervisorQuery(employeeExists, orderBySize)) {
+        KeywordType keywordType = keywordTypeDao.findByType(KeywordTypeDao.TYPE.RESEARCH_AREA);
+        BooleanExpression predicate = employee.isNotNull().and(employee.keywords.keywords.any().type.eq(keywordType));
+        for(Employee employee__ : supervisorService.findSupervisorQuery(predicate, orderBySize)) {
             employeeList.add(employee__);
         }
 
         assertFalse(employeeList.isEmpty());
-        assertTrue(employeeList.get(0).equals(tholerus));
-        assertTrue(employeeList.get(1).equals(herder));
+        if(keywordType.equals(KeywordTypeDao.TYPE.REGULAR)) {
+            assertTrue(employeeList.get(0).equals(tholerus));
+            assertTrue(employeeList.get(1).equals(herder));
+        } else if(keywordType.equals(KeywordTypeDao.TYPE.RESEARCH_AREA)){
+            assertTrue(employeeList.get(0).equals(larsson));
+            assertTrue(employeeList.get(1).equals(hallberg));
+        }
     }
 }