Interfaces are syntax and loose semantics. Both are immutable. Prefer typed data to opaque data. Avoid connection points. Don't provide more than one implementation of the same interface on a single object.
Dual interfaces are a hack.
Don't require people to implement them. Don't use interface pointers that have not been AddRef'ed. Smart interface pointers add at least as much complexity as they remove. Don't hand-optimize reference counting. Implement enumerators using lazy evaluation.