@@ -239,8 +239,9 @@ private async void ModifyItemAsync(object? sender, ModifyQuickAccessEventArgs? e
 				if (e.Reset)
 				{
 					// Find the intersection between the two lists and determine whether to remove or add
-					var itemsToRemove = ItemsAdded.Where(x => !e.Paths.Contains(x.Path)).ToList();
-					var itemsToAdd = e.Paths.Where(x => !ItemsAdded.Any(y => y.Path == x)).ToList();
+					var originalItemsAdded = ItemsAdded.ToList();
+					var itemsToRemove = originalItemsAdded.Where(x => !e.Paths.Contains(x.Path));
+					var itemsToAdd = e.Paths.Where(x => !originalItemsAdded.Any(y => y.Path == x));
 
 					// Remove items
 					foreach (var itemToRemove in itemsToRemove)
@@ -249,13 +250,14 @@ private async void ModifyItemAsync(object? sender, ModifyQuickAccessEventArgs? e
 					// Add items
 					foreach (var itemToAdd in itemsToAdd)
 					{
+						var interimItemsAdded = ItemsAdded.ToList();
 						var item = await App.QuickAccessManager.Model.CreateLocationItemFromPathAsync(itemToAdd);
-						var lastIndex = ItemsAdded.IndexOf(ItemsAdded.FirstOrDefault(x => !x.IsPinned));
+						var lastIndex = ItemsAdded.IndexOf(interimItemsAdded.FirstOrDefault(x => !x.IsPinned));
 						var isPinned = (bool?)e.Items.Where(x => x.FilePath == itemToAdd).FirstOrDefault()?.Properties["System.Home.IsPinned"] ?? false;
-						if (ItemsAdded.Any(x => x.Path == itemToAdd))
+						if (interimItemsAdded.Any(x => x.Path == itemToAdd))
 							continue;
 
-						ItemsAdded.Insert(isPinned && lastIndex >= 0 ? lastIndex : ItemsAdded.Count, new FolderCardItem(item, Path.GetFileName(item.Text), isPinned)
+						ItemsAdded.Insert(isPinned && lastIndex >= 0 ? Math.Min(lastIndex, ItemsAdded.Count) : ItemsAdded.Count, new FolderCardItem(item, Path.GetFileName(item.Text), isPinned)
 						{
 							Path = item.Path,
 						});
@@ -266,18 +268,19 @@ private async void ModifyItemAsync(object? sender, ModifyQuickAccessEventArgs? e
 				if (e.Reorder)
 				{
 					// Remove pinned items
-					foreach (var itemToRemove in ItemsAdded.Where(x => x.IsPinned).ToList())
+					foreach (var itemToRemove in ItemsAdded.ToList().Where(x => x.IsPinned))
 						ItemsAdded.Remove(itemToRemove);
 
 					// Add pinned items in the new order
 					foreach (var itemToAdd in e.Paths)
 					{
+						var interimItemsAdded = ItemsAdded.ToList();
 						var item = await App.QuickAccessManager.Model.CreateLocationItemFromPathAsync(itemToAdd);
-						var lastIndex = ItemsAdded.IndexOf(ItemsAdded.FirstOrDefault(x => !x.IsPinned));
-						if (ItemsAdded.Any(x => x.Path == itemToAdd))
+						var lastIndex = ItemsAdded.IndexOf(interimItemsAdded.FirstOrDefault(x => !x.IsPinned));
+						if (interimItemsAdded.Any(x => x.Path == itemToAdd))
 							continue;
 
-						ItemsAdded.Insert(lastIndex >= 0 ? lastIndex : ItemsAdded.Count, new FolderCardItem(item, Path.GetFileName(item.Text), true)
+						ItemsAdded.Insert(lastIndex >= 0 ? Math.Min(lastIndex, ItemsAdded.Count) : ItemsAdded.Count, new FolderCardItem(item, Path.GetFileName(item.Text), true)
 						{
 							Path = item.Path,
 						});
@@ -289,18 +292,19 @@ private async void ModifyItemAsync(object? sender, ModifyQuickAccessEventArgs? e
 				{
 					foreach (var itemToAdd in e.Paths)
 					{
+						var interimItemsAdded = ItemsAdded.ToList();
 						var item = await App.QuickAccessManager.Model.CreateLocationItemFromPathAsync(itemToAdd);
-						var lastIndex = ItemsAdded.IndexOf(ItemsAdded.FirstOrDefault(x => !x.IsPinned));
-						if (ItemsAdded.Any(x => x.Path == itemToAdd))
+						var lastIndex = ItemsAdded.IndexOf(interimItemsAdded.FirstOrDefault(x => !x.IsPinned));
+						if (interimItemsAdded.Any(x => x.Path == itemToAdd))
 							continue;
-						ItemsAdded.Insert(e.Pin && lastIndex >= 0 ? lastIndex : ItemsAdded.Count, new FolderCardItem(item, Path.GetFileName(item.Text), e.Pin) // Add just after the Recent Folders
+						ItemsAdded.Insert(e.Pin && lastIndex >= 0 ? Math.Min(lastIndex, ItemsAdded.Count) : ItemsAdded.Count, new FolderCardItem(item, Path.GetFileName(item.Text), e.Pin) // Add just after the Recent Folders
 						{
 							Path = item.Path,
 						});
 					}
 				}
 				else
-					foreach (var itemToRemove in ItemsAdded.Where(x => e.Paths.Contains(x.Path)).ToList())
+					foreach (var itemToRemove in ItemsAdded.ToList().Where(x => e.Paths.Contains(x.Path)))
 						ItemsAdded.Remove(itemToRemove);
 			});
 		}
@@ -389,7 +393,7 @@ public override async Task PinToFavoritesAsync(WidgetCardItem item)
 			var items = (await QuickAccessService.GetPinnedFoldersAsync())
 				.Where(link => !((bool?)link.Properties["System.Home.IsPinned"] ?? false));
 
-			var recentItem = items.Where(x => !ItemsAdded.Select(y => y.Path).Contains(x.FilePath)).FirstOrDefault();
+			var recentItem = items.Where(x => !ItemsAdded.ToList().Select(y => y.Path).Contains(x.FilePath)).FirstOrDefault();
 			if (recentItem is not null)
 			{
 				ModifyItemAsync(this, new ModifyQuickAccessEventArgs(new[] { recentItem.FilePath }, true)