Just drop IReadOnly****, mark them obsolete. We can't do anything with backward compatibility here. If we inherit ICollection from IReadOnlyCollection we will broke existing code. See: http://stackoverflow.com/questions/12622539/why-doesnt-generic-icollection-implement-ireadonlycollection-in-net-4-5 But may be sometime will be good point do do this breaking change, provide tools for migration automation. And also IReadOnly*** is not clear solution, we needs IReadable*** and IImmutable**** This is not-null reference types like problem. But it's second after nullability. Let's start/continue to solve this problem.