diff --git a/src/BizHawk.Client.Common/fwmanager/FirmwareManager.cs b/src/BizHawk.Client.Common/fwmanager/FirmwareManager.cs
index 5418344b76..3691c87b1e 100644
--- a/src/BizHawk.Client.Common/fwmanager/FirmwareManager.cs
+++ b/src/BizHawk.Client.Common/fwmanager/FirmwareManager.cs
@@ -7,6 +7,7 @@ using System.IO;
 using System.Linq;
 
 using BizHawk.Common.BufferExtensions;
+using BizHawk.Common.CollectionExtensions;
 using BizHawk.Emulation.Common;
 
 namespace BizHawk.Client.Common
@@ -125,12 +126,11 @@ namespace BizHawk.Client.Common
 			foreach (var fr in FirmwareDatabase.FirmwareRecords)
 			{
 				_resolutionDictionary.Remove(fr); // clear previous resolution results
-				
 				// check each acceptable option for this firmware, looking for the first that's in the reader's file list
-				FirmwareOption fo = FirmwareDatabase.FirmwareOptions.FirstOrDefault(fo1 => fo1.ID == fr.ID && fo1.IsAcceptableOrIdeal && reader.Dict.ContainsKey(fo1.Hash));
-				if (fo.Size == 0)
-					continue;
-
+				var found = FirmwareDatabase.FirmwareOptions.FirstOrNull(fo1 => fo1.ID == fr.ID && fo1.IsAcceptableOrIdeal
+					&& reader.Dict.ContainsKey(fo1.Hash));
+				if (found == null) continue; // didn't find any of them
+				var fo = found.Value;
 				// else found one, add it to the dict
 				_resolutionDictionary[fr] = new ResolutionInfo
 				{
diff --git a/src/BizHawk.Common/Extensions/CollectionExtensions.cs b/src/BizHawk.Common/Extensions/CollectionExtensions.cs
index 52514bc60b..0ef20205de 100644
--- a/src/BizHawk.Common/Extensions/CollectionExtensions.cs
+++ b/src/BizHawk.Common/Extensions/CollectionExtensions.cs
@@ -104,5 +104,18 @@ namespace BizHawk.Common.CollectionExtensions
 
 			throw new InvalidOperationException("Item not found");
 		}
+
+		public static T? FirstOrNull<T>(this IEnumerable<T> list, Func<T, bool> predicate)
+			where T : struct
+		{
+			try
+			{
+				return list.First(predicate);
+			}
+			catch (InvalidOperationException)
+			{
+				return null;
+			}
+		}
 	}
 }