diff --git a/Changes b/Changes
index 8a361d2..d2ab2a0 100644
--- a/Changes
+++ b/Changes
@@ -2,7 +2,10 @@
 
 - Introduced APIDeprecationFilter (#759)
 - Deprecated matchInfo web-service has been removed for API v1.1.
-- Remove deprecated Authorization Post web-service for API v1.1.
+- Remove deprecated Authorization Post web-service for API v1.1 (#767)
+- Remove deprecated user-group web-services for API v1.1 (#769)
+
+
 
 # version 0.79
 
diff --git a/src/main/java/de/ids_mannheim/korap/web/controller/UserGroupController.java b/src/main/java/de/ids_mannheim/korap/web/controller/UserGroupController.java
index fa3607c..6e7d1fd 100644
--- a/src/main/java/de/ids_mannheim/korap/web/controller/UserGroupController.java
+++ b/src/main/java/de/ids_mannheim/korap/web/controller/UserGroupController.java
@@ -15,6 +15,7 @@
 import de.ids_mannheim.korap.security.context.TokenContext;
 import de.ids_mannheim.korap.service.UserGroupService;
 import de.ids_mannheim.korap.web.KustvaktResponseHandler;
+import de.ids_mannheim.korap.web.filter.APIDeprecationFilter;
 import de.ids_mannheim.korap.web.filter.APIVersionFilter;
 import de.ids_mannheim.korap.web.filter.AuthenticationFilter;
 import de.ids_mannheim.korap.web.filter.BlockingFilter;
@@ -203,6 +204,8 @@
     @POST
     @Path("@{groupName}/invite")
     @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
+    @ResourceFilters({APIDeprecationFilter.class, 
+    	AuthenticationFilter.class, BlockingFilter.class})
     public Response inviteGroupMembers (
             @Context SecurityContext securityContext,
             @PathParam("groupName") String groupName,
@@ -251,6 +254,8 @@
     @POST
     @Path("@{groupName}/role/add")
     @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
+    @ResourceFilters({APIDeprecationFilter.class, 
+    	AuthenticationFilter.class, BlockingFilter.class})
     public Response addMemberRoles (@Context SecurityContext securityContext,
             @PathParam("groupName") String groupName,
             @FormParam("memberUsername") String memberUsername,
@@ -350,6 +355,8 @@
     @Deprecated
     @POST
     @Path("@{groupName}/subscribe")
+    @ResourceFilters({APIDeprecationFilter.class, 
+    	AuthenticationFilter.class, BlockingFilter.class})
     public Response subscribeToGroup (@Context SecurityContext securityContext,
             @PathParam("groupName") String groupName) {
         throw kustvaktResponseHandler.throwit(new KustvaktException(
@@ -373,6 +380,8 @@
     @Deprecated
     @DELETE
     @Path("@{groupName}/unsubscribe")
+    @ResourceFilters({APIDeprecationFilter.class, 
+    	AuthenticationFilter.class, BlockingFilter.class})
     public Response unsubscribeFromGroup (
             @Context SecurityContext securityContext,
             @PathParam("groupName") String groupName) {
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/usergroup/UserGroupDeprecationTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/usergroup/UserGroupDeprecationTest.java
new file mode 100644
index 0000000..12d803b
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/usergroup/UserGroupDeprecationTest.java
@@ -0,0 +1,107 @@
+package de.ids_mannheim.korap.web.controller.usergroup;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.Test;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
+import de.ids_mannheim.korap.config.Attributes;
+import de.ids_mannheim.korap.config.SpringJerseyTest;
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.exceptions.StatusCodes;
+import de.ids_mannheim.korap.utils.JsonUtils;
+import jakarta.ws.rs.client.Entity;
+import jakarta.ws.rs.core.Form;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.Status;
+
+public class UserGroupDeprecationTest extends SpringJerseyTest{
+
+	private String groupName= "GroupV1_0";
+	
+	private void testDeprecation (Response response) throws KustvaktException {
+		assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
+		String entity = response.readEntity(String.class);
+        JsonNode node = JsonUtils.readTree(entity);
+        assertEquals(StatusCodes.DEPRECATED,
+                node.at("/errors/0/0").asInt());
+	}
+	
+	@Test
+	public void testV1_0 () throws KustvaktException {
+		Form form = new Form();
+        form.param("members", "marlin");
+        
+        // invite member
+		Response response = target().path(API_VERSION_V1_0).path("group")
+                .path("@" + groupName+"/invite").request()
+                .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
+                        .createBasicAuthorizationHeaderValue("dory", "pass"))
+                .post(Entity.form(form));
+		testDeprecation(response);
+	
+		// add member role
+		response = target().path(API_VERSION_V1_0).path("group")
+                .path("@" + groupName+"/role/add").request()
+                .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
+                        .createBasicAuthorizationHeaderValue("dory", "pass"))
+                .post(Entity.form(form));
+		testDeprecation(response);
+		
+		// subscribe
+		response = target().path(API_VERSION_V1_0).path("group")
+                .path("@" + groupName+"/subscribe").request()
+                .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
+                        .createBasicAuthorizationHeaderValue("dory", "pass"))
+                .post(Entity.form(form));
+		testDeprecation(response);
+
+		// unsusbcribe
+		response = target().path(API_VERSION_V1_0).path("group")
+                .path("@" + groupName+"/unsubscribe").request()
+                .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
+                        .createBasicAuthorizationHeaderValue("dory", "pass"))
+                .delete();
+		testDeprecation(response);
+	}
+	
+	@Test
+	public void testCurrentVersion () throws KustvaktException {
+		Form form = new Form();
+        form.param("members", "marlin");
+        
+        // invite member
+		Response response = target().path(API_VERSION).path("group")
+                .path("@" + groupName+"/invite").request()
+                .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
+                        .createBasicAuthorizationHeaderValue("dory", "pass"))
+                .post(Entity.form(form));
+		assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus());
+	
+		// add member role
+		response = target().path(API_VERSION).path("group")
+                .path("@" + groupName+"/role/add").request()
+                .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
+                        .createBasicAuthorizationHeaderValue("dory", "pass"))
+                .post(Entity.form(form));
+		assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus());
+		
+		// subscribe
+		response = target().path(API_VERSION).path("group")
+                .path("@" + groupName+"/subscribe").request()
+                .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
+                        .createBasicAuthorizationHeaderValue("dory", "pass"))
+                .post(Entity.form(form));
+		assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus());
+
+		// unsusbcribe
+		response = target().path(API_VERSION).path("group")
+                .path("@" + groupName+"/unsubscribe").request()
+                .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
+                        .createBasicAuthorizationHeaderValue("dory", "pass"))
+                .delete();
+		assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus());
+	}
+}
