diff --git a/src/main/java/org/olat/admin/UserAdminMainController.java b/src/main/java/org/olat/admin/UserAdminMainController.java
index f946bed3f085af584ea26cdde7b495be301f6c27..4add87f55427729a6c21f2ae7201fec42719ee55 100644
--- a/src/main/java/org/olat/admin/UserAdminMainController.java
+++ b/src/main/java/org/olat/admin/UserAdminMainController.java
@@ -401,6 +401,14 @@ public class UserAdminMainController extends MainLayoutBasicController implement
 			listenTo(contentCtr);
 			return contentCtr.getInitialComponent();
 		}
+		else if (uobject.equals("userswithoutgroup")) {
+			activatePaneInDetailView = "edit.withoutgroup";
+			List<Identity> usersWithoutGroup = BaseSecurityManager.getInstance().findIdentitiesWithoutBusinessGroup(null);
+			contentCtr = new UsermanagerUserSearchController(ureq, bwControl, usersWithoutGroup, null, true, true);
+			addToHistory(ureq, bwControl);
+			listenTo(contentCtr);
+			return contentCtr.getInitialComponent();
+		}
 		else if (uobject.equals("logondeniedgroup")) {
 			activatePaneInDetailView = "edit.uroles";
 			//fxdiff BAKS-7 Resume function
@@ -684,6 +692,12 @@ public class UserAdminMainController extends MainLayoutBasicController implement
 		gtn3.setAltText(translator.translate("menu.menuqueries.alt"));
 		admin.addChild(gtn3);
 		
+		gtnChild = new GenericTreeNode();		
+		gtnChild.setTitle(translator.translate("menu.userswithoutgroup"));
+		gtnChild.setUserObject("userswithoutgroup");
+		gtnChild.setAltText(translator.translate("menu.userswithoutgroup.alt"));
+		gtn3.addChild(gtnChild);
+		
 		gtnChild = new GenericTreeNode();		
 		gtnChild.setTitle(translator.translate("menu.created.lastweek"));
 		gtnChild.setUserObject("created.lastweek");
diff --git a/src/main/java/org/olat/admin/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/admin/_i18n/LocalStrings_de.properties
index c93606ffa65f851ab1933c0ed1be56dba318c1c3..9ffa66c73f69102ec1473483425b17a59e511126 100644
--- a/src/main/java/org/olat/admin/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/admin/_i18n/LocalStrings_de.properties
@@ -124,6 +124,8 @@ menu.usertools=Benutzerwerkzeug
 menu.usertools.alt=Benutzerwerkzeug
 menu.usersimport=Benutzer importieren
 menu.usersimport.alt=Benutzer via Excel-Liste in OpenOLAT importieren
+menu.userswithoutgroup=Benutzer ohne Gruppe
+menu.userswithoutgroup.alt=Benutzer ohne Gruppe
 menu.versions=Versionierung
 menu.versions.alt=Versionierung Einstellungen
 queries.intro=Unter dem Men\u00FC <i>Vordefinierte Suchabfragen</i> finden Sie oft benutzte Suchabfragen. Spezifischere Suchabfragen k\u00F6nnen mit der Benutzersuche definiert werden.
diff --git a/src/main/java/org/olat/admin/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/admin/_i18n/LocalStrings_en.properties
index 0cc848d6cabfa66ed2a9c76394fe01fe5b8c8a34..2c826d418020cec2586c40a3cc07c6a6f6c9397c 100644
--- a/src/main/java/org/olat/admin/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/admin/_i18n/LocalStrings_en.properties
@@ -127,6 +127,8 @@ menu.userproperties.alt=Manage User Properties
 menu.usersimport=Import users
 menu.usersimport.alt=Import users by means of Excel lists
 menu.usertools=User tools
+menu.userswithoutgroup=Users without groups
+menu.userswithoutgroup.alt=Users without groups
 menu.versions=Versioning
 menu.versions.alt=Versioning settings
 queries.intro=In the menu <i>Predefined searches</i> you will find often used search queries. You can specify your queries by means of the user search.
diff --git a/src/main/java/org/olat/basesecurity/BaseSecurity.java b/src/main/java/org/olat/basesecurity/BaseSecurity.java
index 77a2b73eb61730682a234ee71623cf88e1065b47..f6b8b957e5be74ad41a14e60bb86090b8a5d3890 100644
--- a/src/main/java/org/olat/basesecurity/BaseSecurity.java
+++ b/src/main/java/org/olat/basesecurity/BaseSecurity.java
@@ -200,6 +200,13 @@ public interface BaseSecurity {
 	 * @return The identities
 	 */
 	public List<IdentityShort> findShortIdentitiesByKey(Collection<Long> identityKeys);
+	
+	/**
+	 * Find identities which are not in a business group
+	 * @param status
+	 * @return
+	 */
+	public List<Identity> findIdentitiesWithoutBusinessGroup(Integer status);
 
 	/**
 	 * find an identity by the key instead of the username. Prefer this method as
diff --git a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
index d747aa1f9b137191332c4fbe86e2a2e073a9a379..fcb68564ee1352cd0b859cbd97be7507be9fe655 100644
--- a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
+++ b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
@@ -65,6 +65,7 @@ import org.olat.core.util.Util;
 import org.olat.core.util.coordinate.CoordinatorManager;
 import org.olat.core.util.coordinate.SyncerCallback;
 import org.olat.core.util.resource.OresHelper;
+import org.olat.group.BusinessGroupImpl;
 import org.olat.login.LoginModule;
 import org.olat.portfolio.manager.InvitationDAO;
 import org.olat.resource.OLATResource;
@@ -1007,6 +1008,33 @@ public class BaseSecurityManager extends BasicManager implements BaseSecurity {
 		} while(count < names.size());
 		return shortIdentities;
 	}
+	
+	public List<Identity> findIdentitiesWithoutBusinessGroup(Integer status) {
+		StringBuilder sb = new StringBuilder();
+		sb.append("select ident from ").append(IdentityImpl.class.getName()).append(" as ident ")
+		  .append(" where not exists (")
+		  .append("   select bgroup from ").append(BusinessGroupImpl.class.getName()).append(" bgroup, bgroupmember as me")
+		  .append("   where  me.group=bgroup.baseGroup and me.identity=ident")
+		  .append(" )");
+		if (status != null) {
+			if (status.equals(Identity.STATUS_VISIBLE_LIMIT)) {
+				// search for all status smaller than visible limit 
+				sb.append(" and ident.status < :status ");
+			} else {
+				// search for certain status
+				sb.append(" and ident.status = :status ");
+			}
+		} else {
+			sb.append(" and ident.status < ").append(Identity.STATUS_DELETED);
+		}
+		
+		TypedQuery<Identity> query = dbInstance.getCurrentEntityManager()
+				.createQuery(sb.toString(), Identity.class);
+		if (status != null) {
+			query.setParameter("status", status);
+		}
+		return query.getResultList();
+	}
 
 	/**
 	 *