diff --git a/BizHawk.Client.EmuHawk/CoreFeatureAnalysis.cs b/BizHawk.Client.EmuHawk/CoreFeatureAnalysis.cs
index 9af1dc8246..33c10ce961 100644
--- a/BizHawk.Client.EmuHawk/CoreFeatureAnalysis.cs
+++ b/BizHawk.Client.EmuHawk/CoreFeatureAnalysis.cs
@@ -50,39 +50,56 @@ namespace BizHawk.Client.EmuHawk
 			ReleasedCoresLabel.Text = cores.Count(c => c.CoreAttributes.Released).ToString();
 
 			CoreTree.Nodes.Clear();
+			CoreTree.BeginUpdate();
 
 			foreach (var core in cores)
 			{
 				var coreNode = new TreeNode
 				{
 					Text = core.CoreAttributes.CoreName + (core.CoreAttributes.Released ? string.Empty : " (UNRELEASED)"),
-					ForeColor = core.CoreAttributes.Released ? Color.Black : Color.DarkGray,
-					// TODO
-					//ForeColor = services.All(s => s.IsAssignableFrom(core.CoreType)) ? Color.Black : Color.Red
+					ForeColor = core.CoreAttributes.Released ? Color.Black : Color.DarkGray
 				};
 
 				foreach (var service in services)
 				{
+					bool isImplemented = false;
+					if (service.IsAssignableFrom(core.CoreType))
+					{
+						isImplemented = true;
+					}
+					else if (service.IsAssignableFrom(typeof(ISettable<,>)))
+					{
+						isImplemented = core.CoreType
+							.GetInterfaces()
+							.Where(t => t.IsGenericType &&
+										t.GetGenericTypeDefinition() == typeof(ISettable<,>))
+							.FirstOrDefault() != null;
+					}
+
+
 					var serviceNode = new TreeNode
 					{
 						Text = service.Name,
-						ForeColor = (service.IsAssignableFrom(core.CoreType)) ? Color.Black : Color.Red
+						ForeColor = isImplemented ? Color.Black : Color.Red
 					};
 
-					foreach(var field in service.GetProperties())
+					if (isImplemented)
 					{
-						serviceNode.Nodes.Add(new TreeNode
+						foreach (var field in service.GetProperties())
 						{
-							Text = field.Name
-						});
-					}
+							serviceNode.Nodes.Add(new TreeNode
+							{
+								Text = field.Name
+							});
+						}
 
-					foreach (var field in service.GetMethods())
-					{
-						serviceNode.Nodes.Add(new TreeNode
+						foreach (var field in service.GetMethods())
 						{
-							Text = field.Name
-						});
+							serviceNode.Nodes.Add(new TreeNode
+							{
+								Text = field.Name
+							});
+						}
 					}
 
 					coreNode.Nodes.Add(serviceNode);
@@ -91,6 +108,8 @@ namespace BizHawk.Client.EmuHawk
 
 				CoreTree.Nodes.Add(coreNode);
 			}
+
+			CoreTree.EndUpdate();
 		}
 	}
 }