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 356e8000e76d093054efb2235c197fd28cd7bd18..20d87eac40604cc4cb13cf966e08def340c27523 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
@@ -92,7 +92,7 @@ public class GroupController {
 
         createdGroup.addUser(UserGroupAsso.builder()
                 .id(userGroupId)
-                .primaryGroup(false)
+                .primaryGroup(true)
                 .groupAuthority("ADMIN")
                 .group(createdGroup)
                 .user(user)
@@ -178,28 +178,46 @@ public class GroupController {
      * Handles the HTTP PUT request to change the primary group of a user.
      *
      * @param username the username of the user whose primary group is to be changed
-     * @param groupId the ID of the group
+     * @param newPrimaryGroupId the ID of the new primary group
      * @return a ResponseEntity object containing an HTTP status code and the updated UserGroupAsso object,
      *         or a ResponseEntity object with an HTTP status code indicating that the request was not successful
      */
-    @PutMapping("/markNewPrimary/{username}/{groupId}/{newId}")
+    @PutMapping("/markNewPrimary/{username}/{newPrimaryGroupId}")
     public ResponseEntity<?> markNewPrimaryGroup(@PathVariable("username") String username,
-                                                 @PathVariable("groupId") long groupId){
-        return userService.getUserFromUsername(username)
-                .flatMap(user ->{
-                            user.getGroup().forEach(userGroupAsso -> {
-                                if(userGroupAsso.getGroup().getGroupId() != groupId){
-                                    userGroupAsso.setPrimaryGroup(false);
-                                }
-                                if(userGroupAsso.getGroup().getGroupId() == groupId){
-                                    userGroupAsso.setPrimaryGroup(true);
-                                }
-                            });
-                            return Optional.of(userService.updateUser(user));
-                        }
-                )
-                .map(ResponseEntity::ok)
-                .orElseGet(() -> ResponseEntity.notFound().build());
+                                                 @PathVariable("newPrimaryGroupId") long newPrimaryGroupId) {
+        Optional<User> optionalUser = userService.getUserFromUsername(username);
+
+        if (optionalUser.isEmpty()) {
+            return ResponseEntity.badRequest().body("Invalid username.");
+        }
+
+        User user = optionalUser.get();
+
+        Optional<UserGroupAsso> oldPrimaryOpt = groupService.findPrimaryUserGroupAssoForUser(username);
+        if (oldPrimaryOpt.isEmpty()) {
+            return ResponseEntity.badRequest().body("No primary group found for the user.");
+        }
+
+        UserGroupAsso oldPrimary = oldPrimaryOpt.get();
+        oldPrimary.setPrimaryGroup(false);
+        groupService.updateUserGroupAsso(oldPrimary);
+
+        Optional<UserGroupAsso> newPrimaryOpt = groupService.getUserGroupAsso(username, newPrimaryGroupId);
+        if (newPrimaryOpt.isEmpty()) {
+            return ResponseEntity.badRequest().body("Invalid new primary group ID.");
+        }
+
+        UserGroupAsso newPrimary = newPrimaryOpt.get();
+        newPrimary.setPrimaryGroup(true);
+        groupService.updateUserGroupAsso(newPrimary);
+
+        userService.updateUser(user);
+
+        Map<String, Object> responseBody = new HashMap<>();
+        responseBody.put("username", username);
+        responseBody.put("oldPrimaryGroupId", oldPrimary.getGroup().getGroupId());
+        responseBody.put("newPrimaryGroupId", newPrimary.getGroup().getGroupId());
+        return ResponseEntity.ok(responseBody);
     }
 
     /**
diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/UserGroupAssoRepository.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/UserGroupAssoRepository.java
index 1580965a7e73b07091c4abad6843da268bb83555..8e3c12e3d9a31db60e7262729b8fe06eebfb83ab 100644
--- a/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/UserGroupAssoRepository.java
+++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/UserGroupAssoRepository.java
@@ -53,6 +53,16 @@ public interface UserGroupAssoRepository extends JpaRepository<UserGroupAsso, Us
 
     /**
      * Finds UserGroupAsso by UserGroupId
+     *
+     * @param userGroupId the UserGroupId to find by
+     * @return an optional containing the UserGroupAsso if it exists
      */
     Optional<UserGroupAsso> findByUserGroupId(UserGroupId userGroupId);
+
+    /**
+     * Finds primary group for given user
+     * @param username the username of the user
+     * @return an optional containing the UserGroupAsso if it exists
+     */
+    Optional<UserGroupAsso> findByUser_UsernameAndPrimaryGroupTrue(String username);
 }
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 5091a87044deef6a1d8b0489386e212189664eda..5f0f2b8c8d3046f41e979f791b42db2b5eb9e917 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
@@ -4,6 +4,7 @@ import lombok.AllArgsConstructor;
 import ntnu.idatt2016.v233.SmartMat.entity.ShoppingList;
 import ntnu.idatt2016.v233.SmartMat.entity.group.Fridge;
 import ntnu.idatt2016.v233.SmartMat.entity.group.Group;
+import ntnu.idatt2016.v233.SmartMat.entity.group.UserGroupAsso;
 import ntnu.idatt2016.v233.SmartMat.entity.group.UserGroupId;
 import ntnu.idatt2016.v233.SmartMat.repository.ShoppingListRepository;
 import ntnu.idatt2016.v233.SmartMat.repository.group.FridgeRepository;
@@ -179,4 +180,27 @@ public class GroupService {
 
         return userGroupAssoRepository.findById(userGroupId).isPresent();
     }
+
+    /**
+     * Updates a user group association
+     *
+     * @param userGroupAsso the user group association to update
+     * @return the updated user group association
+     */
+    public UserGroupAsso updateUserGroupAsso(UserGroupAsso userGroupAsso) {
+        return userGroupAssoRepository.save(userGroupAsso);
+    }
+
+    public Optional<UserGroupAsso> findPrimaryUserGroupAssoForUser(String username) {
+        return userGroupAssoRepository.findByUser_UsernameAndPrimaryGroupTrue(username);
+    }
+
+    public Optional<UserGroupAsso> getUserGroupAsso(String username, Long groupId) {
+        UserGroupId userGroupId = UserGroupId.builder()
+                .username(username)
+                .groupId(groupId)
+                .build();
+
+        return userGroupAssoRepository.findById(userGroupId);
+    }
 }