diff --git a/Changes b/Changes
index f32bce1..fdbc55a 100644
--- a/Changes
+++ b/Changes
@@ -2,6 +2,7 @@
 
 - Add a large-context group allowing users to access larger context by request [AI-assisted, #745]
 - Apply new kwic and shrinking properties for kustvakt-dnb
+- Fix handling non-existent large context group
 
 # version 1.2-SNAPSHOT
 
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/QueryContextRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/QueryContextRewrite.java
index 9f5088a..470368d 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/QueryContextRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/QueryContextRewrite.java
@@ -10,6 +10,7 @@
 import de.ids_mannheim.korap.dao.UserGroupDao;
 import de.ids_mannheim.korap.entity.UserGroup;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.exceptions.StatusCodes;
 import de.ids_mannheim.korap.service.UserGroupService;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.utils.JsonUtils;
@@ -45,10 +46,17 @@
     private boolean isInLargeContextGroup (User user)
             throws KustvaktException {
         if (user == null) return false;
-        UserGroup group = userGroupDao.retrieveGroupByName(LARGE_CONTEXT_GROUP,
+        try {
+        	UserGroup group = userGroupDao.retrieveGroupByName(LARGE_CONTEXT_GROUP,
                 false);
-        if (group == null) return false;
-        return userGroupService.isMember(user.getUsername(), group);
+        	return userGroupService.isMember(user.getUsername(), group);
+        	
+        }catch (KustvaktException e) {
+			if (e.getStatusCode() == StatusCodes.NO_RESOURCE_FOUND) {
+				return false;
+			}
+			throw e;
+		}
     }
     
     private boolean cutContext (KoralNode context, String position,
diff --git a/src/test/java/de/ids_mannheim/korap/scenario/DNBTest.java b/src/test/java/de/ids_mannheim/korap/scenario/DNBTest.java
index 03bcb5c..3595049 100644
--- a/src/test/java/de/ids_mannheim/korap/scenario/DNBTest.java
+++ b/src/test/java/de/ids_mannheim/korap/scenario/DNBTest.java
@@ -3,7 +3,9 @@
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Isolated;
 import org.springframework.test.context.ContextConfiguration;
 
 import com.fasterxml.jackson.databind.JsonNode;
@@ -15,13 +17,14 @@
 import jakarta.ws.rs.core.Response;
 import jakarta.ws.rs.core.Response.Status;
 
+@Isolated
 @ContextConfiguration(
 		locations = "classpath:test-config-dnb.xml", 
 		inheritLocations = false
 )		
 public class DNBTest extends SpringJerseyTest {
 
-    public final static String API_VERSION = "v1.0";
+    public final static String API_VERSION = "v1.1";
 
     private JsonNode sendQuery (String query) throws KustvaktException {
         Response r = target().path(API_VERSION).path("search")
@@ -35,24 +38,28 @@
 
     }
     
+    @BeforeAll
+    public static void loadDnbProperties() {
+        KrillProperties.loadProperties("kustvakt-dnb.conf");
+    }
+
     @AfterAll
     public static void resetKrillProperties() {
         KrillProperties.loadProperties("kustvakt-test.conf");
     }
 
-    @Test
-    public void testTokenMatchSize () throws KustvaktException {
-        assertEquals(1, KrillProperties.maxTokenMatchSize);
-        assertEquals(25, KrillProperties.maxTokenContextSize);
+	@Test
+	public void testTokenMatchSize () throws KustvaktException {
+		assertEquals(12, KrillProperties.maxTokenMatchSize);
+		assertEquals(25, KrillProperties.maxTokenContextSize);
 
-        JsonNode node = sendQuery("[orth=das]");
-        assertEquals(KrillProperties.maxTokenMatchSize,
-                node.at("/matches/0/tokens/match").size());
+		JsonNode node = sendQuery("[orth=das]");
+		assertEquals(1, node.at("/matches/0/tokens/match").size());
 
-        node = sendQuery("[orth=das][orth=Glück]");
-        assertEquals(KrillProperties.maxTokenMatchSize,
-                node.at("/matches/0/tokens/match").size());
-    }
+		node = sendQuery("[orth=das][orth=Glück]");
+		assertEquals(6, node.at("/matches/0/context/left/1").asInt());
+		assertEquals(6, node.at("/matches/0/context/right/1").asInt());
+	}
 
     @Test
     public void testTokenContextMatchSize () throws KustvaktException {
@@ -62,6 +69,7 @@
                 .queryParam("context", "30-token,30-token").request().get();
         assertEquals(Status.OK.getStatusCode(), r.getStatus());
         String entity = r.readEntity(String.class);
+        System.out.println(entity);
         JsonNode node = JsonUtils.readTree(entity);
 
         assertEquals(KrillProperties.maxTokenContextSize,
@@ -69,13 +77,11 @@
         assertEquals(KrillProperties.maxTokenContextSize,
                 node.at("/meta/context/right/1").asInt());
         
-        assertEquals(KrillProperties.maxTokenContextSize,
+        assertEquals(24, // using kwic
                 node.at("/matches/0/tokens/left").size());
         
-        // There is a bug in Krill (https://github.com/KorAP/Krill/issues/141)
-        // So the following test fails
-//        assertEquals(KrillProperties.maxTokenContextSize,
-//                node.at("/matches/0/tokens/right").size());
+        assertEquals(24,
+                node.at("/matches/0/tokens/right").size());
     }
 
 }
diff --git a/src/test/resources/kustvakt-dnb.conf b/src/test/resources/kustvakt-dnb.conf
index c807080..a7b338e 100644
--- a/src/test/resources/kustvakt-dnb.conf
+++ b/src/test/resources/kustvakt-dnb.conf
@@ -27,8 +27,8 @@
 # Kustvakt versions
 #
 # multiple versions comma separated
-current.api.version = v1.0
-supported.api.versions = v1.0
+current.api.version = v1.1
+supported.api.versions = v1.0, v1.1
 
 # Server
 #
diff --git a/src/test/resources/test-config-dnb.xml b/src/test/resources/test-config-dnb.xml
index 138d52e..9ef746d 100644
--- a/src/test/resources/test-config-dnb.xml
+++ b/src/test/resources/test-config-dnb.xml
@@ -159,9 +159,8 @@
 
 	<!-- <bean id="initializator"
 		class="de.ids_mannheim.korap.init.Initializator"
-		init-method="initTestWithoutAvailability">
-	</bean>
-    -->
+		init-method="initTest">
+	</bean> -->
     
 	<!-- Krill -->
 	<bean id="search_krill"
