diff --git a/audit/audit.go b/audit/audit.go
index 4cad86faddb6f9889c29cc237c746a4d2fac959b..0b0b353ab2325f87bebe3c751b134f5f224fadab 100644
--- a/audit/audit.go
+++ b/audit/audit.go
@@ -248,45 +248,11 @@ func CheckToFormatForAuditEvent(changes map[string]any, original any, new any, f
 
 	doGroupSlice := doGroupSliceForAuditEvent(originalStructField)
 
-	originalFormattedObject := checkToFormatForAuditEvent(originalFieldValue, index)
-	newFormattedObject := checkToFormatForAuditEvent(newFieldValue, index)
-	if originalFormattedObject != nil ||
-		newFormattedObject != nil {
-		if _, present := changes[objectKey]; present {
-			if doGroupSlice {
-				// The object has already been added to the changes - group the new change with the previous
-				existingChanges, ok := changes[objectKey].(FieldChange)
-				if !ok {
-					return true
-				}
-
-				if originalFormattedObject != nil {
-					existingChanges.From = appendNewChangeToExistingChanges(existingChanges.From, *originalFormattedObject)
-				}
-
-				if newFormattedObject != nil {
-					existingChanges.To = appendNewChangeToExistingChanges(existingChanges.To, *newFormattedObject)
-				}
-				changes[objectKey] = existingChanges
-			}
-
-			return true
-		}
-
-		if doGroupSlice {
-			fieldChange := FieldChange{}
-			if originalFormattedObject != nil {
-				fieldChange.From = []string{*originalFormattedObject}
-			} else {
-				fieldChange.From = []string{}
-			}
-			if newFormattedObject != nil {
-				fieldChange.To = []string{*newFormattedObject}
-			} else {
-				fieldChange.To = []string{}
-			}
-			changes[objectKey] = fieldChange
-		} else {
+	if !doGroupSlice {
+		originalFormattedObject := checkToFormatForAuditEvent(originalFieldValue, index)
+		newFormattedObject := checkToFormatForAuditEvent(newFieldValue, index)
+		if originalFormattedObject != nil ||
+			newFormattedObject != nil {
 			if index > -1 {
 				objectKey = fmt.Sprintf("%s[%d]", field, index)
 			}
@@ -295,9 +261,31 @@ func CheckToFormatForAuditEvent(changes map[string]any, original any, new any, f
 				From: originalFormattedObject,
 				To:   newFormattedObject,
 			}
+
+			return true
 		}
+	} else {
+		originalFormattedObject := checkToFormatForGroupedAuditEvent(originalFieldValue)
+		newFormattedObject := checkToFormatForGroupedAuditEvent(newFieldValue)
+		if originalFormattedObject != nil ||
+			newFormattedObject != nil {
+			if _, present := changes[objectKey]; !present {
+				fieldChange := FieldChange{}
+				if originalFormattedObject != nil {
+					fieldChange.From = originalFormattedObject
+				} else {
+					fieldChange.From = []*string{}
+				}
+				if newFormattedObject != nil {
+					fieldChange.To = newFormattedObject
+				} else {
+					fieldChange.To = []*string{}
+				}
+				changes[objectKey] = fieldChange
+			}
 
-		return true
+			return true
+		}
 	}
 
 	return false
@@ -359,6 +347,40 @@ func checkToExecuteAuditFormatter(fieldValue reflect.Value) *string {
 	return nil
 }
 
+func checkToFormatForGroupedAuditEvent(fieldValue reflect.Value) []*string {
+	if fieldValue.Kind() == reflect.Ptr {
+		if fieldValue.IsNil() {
+			return nil
+		}
+		fieldValue = fieldValue.Elem()
+	}
+
+	var formattedField []*string
+	if fieldValue.Kind() == reflect.Struct {
+		formattedField = []*string{checkToExecuteAuditFormatter(fieldValue)}
+	} else if fieldValue.Kind() == reflect.Slice {
+		for i := 0; i < fieldValue.Len(); i++ {
+			sliceFieldValue := fieldValue.Index(i)
+			if sliceFieldValue.Kind() == reflect.Ptr {
+				if sliceFieldValue.IsNil() {
+					continue
+				}
+				sliceFieldValue = sliceFieldValue.Elem()
+			}
+
+			if sliceFieldValue.Kind() != reflect.Struct {
+				// Not a slice of structs - ignore the format flag
+				return nil
+			}
+
+			formattedField = append(formattedField, checkToExecuteAuditFormatter(sliceFieldValue))
+		}
+
+	}
+
+	return formattedField
+}
+
 func checkToFormatForAuditEvent(fieldValue reflect.Value, index int) *string {
 	if fieldValue.Kind() == reflect.Ptr {
 		if fieldValue.IsNil() {