static class Extensions {
public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource, Boolean> predicate)
where TSource : IVisible {

foreach (TSource item in source) {
if (item.Visible && predicate(item)) {
	yield return item;
}
}
}
}
