diff --git a/audit/audit.go b/audit/audit.go
index 1907683ac6c9f32f638e7640461d28464c5b4971..6dff2b1d2b9a8b7c4c48439203d31b73c41a2577 100644
--- a/audit/audit.go
+++ b/audit/audit.go
@@ -38,27 +38,7 @@ func GetChanges(original interface{}, new interface{}) (map[string]interface{},
 			// 0 = Object
 			// 1 = field
 
-			objectKey := ToSnakeCase(change.Path[0])
-			field := ToSnakeCase(change.Path[1])
-
-			existingObject, present := changes[objectKey]
-			if present {
-				if object, ok := existingObject.(map[string]interface{}); ok {
-					object[field] = FieldChange{
-						From: change.From,
-						To:   change.To,
-					}
-					changes[objectKey] = object
-				}
-			} else {
-				fieldChange := map[string]interface{}{
-					field: FieldChange{
-						From: change.From,
-						To:   change.To,
-					},
-				}
-				changes[objectKey] = fieldChange
-			}
+			ChildObjectChanges(changes, change.Path[0], change.Path[1], change.From, change.To)
 
 		} else if len(change.Path) == 3 {
 			// Array of objects
@@ -69,6 +49,13 @@ func GetChanges(original interface{}, new interface{}) (map[string]interface{},
 
 			objectKey := ToSnakeCase(change.Path[0])
 			indexString := change.Path[1]
+
+			if !string_utils.IsNumericString(indexString) {
+				// Not an array, but an deeper nested object
+				ChildObjectChanges(changes, change.Path[len(change.Path)-2], change.Path[len(change.Path)-1], change.From, change.To)
+				continue
+			}
+
 			index, _ := string_utils.StringToInt64(indexString)
 			field := ToSnakeCase(change.Path[2])
 
@@ -111,6 +98,30 @@ func GetChanges(original interface{}, new interface{}) (map[string]interface{},
 
 	return changes, nil
 }
+func ChildObjectChanges(changes map[string]interface{}, objectPath string, fieldPath string, changeFrom interface{}, changeTo interface{}) {
+
+	objectKey := ToSnakeCase(objectPath)
+	field := ToSnakeCase(fieldPath)
+
+	existingObject, present := changes[objectKey]
+	if present {
+		if object, ok := existingObject.(map[string]interface{}); ok {
+			object[field] = FieldChange{
+				From: changeFrom,
+				To:   changeTo,
+			}
+			changes[objectKey] = object
+		}
+	} else {
+		fieldChange := map[string]interface{}{
+			field: FieldChange{
+				From: changeFrom,
+				To:   changeTo,
+			},
+		}
+		changes[objectKey] = fieldChange
+	}
+}
 
 // GetAllChanges Returns the diff, structured in json, recursively
 // Be warned, here be dragons. Debug this first to understand how it works