diff --git a/src/main/java/org/olat/core/util/StringHelper.java b/src/main/java/org/olat/core/util/StringHelper.java
index c3bc38653ca141c035a8974bba89f464209362bf..e7d4e98501a2c07ee7134ad3291d49add2b07135 100644
--- a/src/main/java/org/olat/core/util/StringHelper.java
+++ b/src/main/java/org/olat/core/util/StringHelper.java
@@ -68,6 +68,8 @@ public class StringHelper {
 	private static final String WHITESPACE_REGEXP = "^\\s*$";
 	private static final Pattern WHITESPACE_PATTERN = Pattern.compile(WHITESPACE_REGEXP);
 	
+	private static final int LONG_MAX_LENGTH = Long.toString(Long.MAX_VALUE).length();
+	
 	/**
 	 * regex for not allowing
 	 * <code>;,:</code> <code>ALL_WITHOUT_COMMA_2POINT_STRPNT</code>
@@ -384,11 +386,21 @@ public class StringHelper {
 		return FileUtils.normalizeFilename(s);
 	}
 	
+	/**
+	 * The method do only a precheck if the string can be a number. It's goal
+	 * is to prevent to generate hunderds of exceptions in a loop by using
+	 * the Long.parseLong() method (exceptions is time and CPU intensive).
+	 * 
+	 * return True if the string can be a digit (there is not boundaries check)
+	 */
 	public static boolean isLong(String string) {
 		if(string == null || string.length() == 0) {
 			return false;
 		}
 		int stop = string.startsWith("-") ? 1 : 0;
+		if(string.length() > LONG_MAX_LENGTH + stop) {
+			return false;
+		}
 		char[] charArr = string.toCharArray();
 		for(int i=charArr.length; i-->stop; ) {
 			char ch = charArr[i];
diff --git a/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java b/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java
index b7396c45ee2ca47f67c8a2b50db4857989b9fdb3..9d913c92c2a911a03685fab5373b34655cc9d133 100644
--- a/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java
+++ b/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java
@@ -172,8 +172,12 @@ public class PersistingCourseGroupManager extends BasicManager implements Course
 	public boolean existGroup(String nameOrKey) {
 		SearchBusinessGroupParams params = new SearchBusinessGroupParams();
 		if(StringHelper.isLong(nameOrKey)) {
-			params.setGroupKeys(Collections.singletonList(new Long(nameOrKey)));
-		}else {
+			try {
+				params.setGroupKeys(Collections.singletonList(new Long(nameOrKey)));
+			} catch (NumberFormatException e) {
+				params.setExactName(nameOrKey);
+			}
+		} else {
 			params.setExactName(nameOrKey);
 		}
 		return businessGroupService.countBusinessGroups(params, courseResource) > 0;
diff --git a/src/test/java/org/olat/core/util/StringHelperTest.java b/src/test/java/org/olat/core/util/StringHelperTest.java
index 5e33de1258278900f0b00076935b3171f958582f..df5b39c56763f18ab80d407e9aa8417ad5df1fb9 100644
--- a/src/test/java/org/olat/core/util/StringHelperTest.java
+++ b/src/test/java/org/olat/core/util/StringHelperTest.java
@@ -108,4 +108,16 @@ public class StringHelperTest {
 		String value12 = StringHelper.cleanUTF8ForXml("Hello\u10B7x pahlavi");
 		Assert.assertEquals("Pahlavi test", "Hello\u10B7x pahlavi", value12);
 	}
+	
+	@Test
+	public void isLong() {
+		Assert.assertTrue(StringHelper.isLong("234"));
+		Assert.assertTrue(StringHelper.isLong("9223372036854775807"));
+		Assert.assertTrue(StringHelper.isLong("-9223372036854775807"));
+
+		Assert.assertFalse(StringHelper.isLong("10223372036854775807"));
+		Assert.assertFalse(StringHelper.isLong("-dru"));
+		Assert.assertFalse(StringHelper.isLong("OpenOLAT"));
+		Assert.assertFalse(StringHelper.isLong("A very long number with a lot of characters"));
+	}
 }