private static IEnumerable<IModelChange> TraverseFlat(IEnumerable<IModelChange> baseList) { foreach (var change in baseList) { yield return change; var transaction = change as ChangeTransaction; if (transaction != null) { yield return transaction.SourceChange; foreach (var nested in TraverseFlat(transaction.NestedChanges)) yield return nested; } } }