diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/GroupController.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/GroupController.java
index e485351bd49494179545d7f045246f46d920ec58..650976945c6354325005bce0f5194e17466ea404 100644
--- a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/GroupController.java
+++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/GroupController.java
@@ -335,4 +335,49 @@ public class GroupController {
         return ResponseEntity.ok(groupService.getUserGroupAssoByUserName(auth.getName()));
     }
 
+
+    /**
+     * Handles the HTTP DELETE request to remove a user from a group.
+     * @param groupId the ID of the group to get the members of
+     * @param username the username of the user to remove from the group
+     * @param auth the authentication object containing the username of the user
+     * @return a ResponseEntity object containing the list of groups the
+     * user is associated with and an HTTP status code of 200,
+     */
+    @DeleteMapping("/removeUser/{groupId}/{username}")
+    public ResponseEntity<?> removeUserFromGroup(@PathVariable("groupId") long groupId,
+                                                 @PathVariable("username") String username,
+                                                 Authentication auth) {
+        Optional<User> groupAdminOpt = userService.getUserFromUsername(auth.getName());
+        if (groupAdminOpt.isPresent()) {
+            User groupAdmin = groupAdminOpt.get();
+            if (!(groupService.isUserAssociatedWithGroup(groupAdmin.getUsername(), groupId)
+                    && (groupService.getUserGroupAssoAuthority(groupAdmin.getUsername(), groupId).equals("ADMIN"))
+            || groupAdmin.getUsername().equals(username)))
+                return ResponseEntity.status(HttpStatus.FORBIDDEN).body("You are not authorized to remove this user.");
+        }
+
+        Optional<Group> groupOpt = groupService.getGroupById(groupId);
+        Optional<User> userOpt = userService.getUserFromUsername(username);
+
+        if (groupOpt.isEmpty() || userOpt.isEmpty()) {
+            return ResponseEntity.notFound().build();
+        }
+
+        User user = userOpt.get();
+        UserGroupAsso userGroupAsso = user.getGroup().stream()
+                .filter(asso -> asso.getGroup().getGroupId() == groupId)
+                .findFirst()
+                .orElse(null);
+
+        if (userGroupAsso != null) {
+            groupService.removeUserFromGroup(userGroupAsso);
+            return ResponseEntity.ok("User removed successfully.");
+        } else {
+            return ResponseEntity.notFound().build();
+        }
+    }
+
+
+
 }
diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Group.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Group.java
index c390052ee47bd59e9df60ff40d80a7db45d52d9e..346ccd7fb82b696d451775fedcb542fa0f34b758 100644
--- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Group.java
+++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Group.java
@@ -56,8 +56,10 @@ public class Group {
     private ShoppingList shoppingList;
 
 
-    @OneToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH},
-            fetch = FetchType.LAZY, mappedBy = "group")
+    @OneToMany(cascade = {CascadeType.ALL},
+            fetch = FetchType.LAZY, mappedBy = "group",
+            orphanRemoval = true
+    )
     @JsonIgnoreProperties("group")
     private List<UserGroupAsso> user = new ArrayList<>();
 
diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/user/User.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/user/User.java
index 8f9f5967ffd42d4048bf28eb6c6147821fdbc6bd..88646b274072e7a2e84dc070d701c2ee662d9e3d 100644
--- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/user/User.java
+++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/user/User.java
@@ -55,8 +55,7 @@ public class User implements UserDetails {
     private Date dateOfBirth;
 
 
-    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
-    @JoinColumn(name = "username")
+    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user")
     @JsonIgnore
     private List<UserGroupAsso> group;
 
diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/GroupService.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/GroupService.java
index e29d843eea7159002b73e946bb6cebcc26eca41f..53daf543777b798f1332672a3ee3ec5831e5fd23 100644
--- a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/GroupService.java
+++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/GroupService.java
@@ -1,5 +1,6 @@
 package ntnu.idatt2016.v233.SmartMat.service.group;
 
+import jakarta.transaction.Transactional;
 import lombok.AllArgsConstructor;
 import ntnu.idatt2016.v233.SmartMat.entity.ShoppingList;
 import ntnu.idatt2016.v233.SmartMat.entity.group.Fridge;
@@ -229,4 +230,27 @@ public class GroupService {
     public List<UserGroupAsso> getUserGroupAssoByUserName(String username) {
         return userGroupAssoRepository.findAllByUserUsername(username);
     }
+
+    /**
+     * removes user_group relatioon
+     * @param username the username of the user
+     * @param groupId the id of the group
+     * @return true if the user is the owner of the group, false otherwise
+     */
+    @Transactional
+    public boolean removeUserFromGroup(UserGroupAsso userGroup) {
+        Group group = groupRepository.findByGroupId(userGroup.getGroup().getGroupId())
+                .orElseThrow(() -> new IllegalArgumentException("Group does not exist"));
+
+        group.getUser().remove(userGroup);
+
+        if (group.getUser().isEmpty()) {
+            groupRepository.delete(group);
+        } else {
+            groupRepository.save(group);
+        }
+
+        userGroupAssoRepository.delete(userGroup);
+        return true;
+    }
 }
diff --git a/src/test/java/ntnu/idatt2016/v233/SmartMat/repository/group/GroupRepositoryTest.java b/src/test/java/ntnu/idatt2016/v233/SmartMat/repository/group/GroupRepositoryTest.java
index 69cd0518cdf81c5e27d83ebd15410faa43b321d7..52d6a2934e28d1f12f1083f67fc1dbdcc7218f1d 100644
--- a/src/test/java/ntnu/idatt2016/v233/SmartMat/repository/group/GroupRepositoryTest.java
+++ b/src/test/java/ntnu/idatt2016/v233/SmartMat/repository/group/GroupRepositoryTest.java
@@ -106,24 +106,22 @@ public class GroupRepositoryTest {
 
     @Test
     void groupShouldHaveAchivments(){
-        Optional<Group> tempGroupe = groupRepository.findByGroupName("test");
-
-
-        assertTrue(tempGroupe.isPresent());
 
+        Group tempgroup = Group.builder().groupName("testiossxjak").build();
         Achievement tempAchievement = Achievement.builder().achievementName("test2").build();
-        Group tempGroup = tempGroupe.get();
 
+        tempgroup.setAchievements(new ArrayList<>(Collections.singletonList(tempAchievement)));
+        groupRepository.save(tempgroup);
 
-        tempGroup.setAchievements(new ArrayList<>(Collections.singletonList(tempAchievement)));
+        Optional<Group> tempGroupe = groupRepository.findByGroupName("testiossxjak");
 
-        groupRepository.save(tempGroup);
 
-        assertTrue(groupRepository.findByGroupName("test").isPresent());
+        assertTrue(tempGroupe.isPresent());
+
 
-        assertTrue(groupRepository.findByGroupName("test").get().getAchievements().contains(tempAchievement));
+        assertTrue(tempGroupe.get().getAchievements().contains(tempAchievement));
 
-        assertNull(groupRepository.findByGroupName("test").get().getAchievements().get(0).getGroups());
+        assertNull(tempGroupe.get().getAchievements().get(0).getGroups());
 
     }