First, I believe in the power of component software. Unix was the first to succeed in this area; it provides a number of components (programs), and connects them all through well defined interfaces (pipes, etc.). The way everything fits, and connects is awesome. Microsoft used this same idea when creating COM; instead of using data streams though (as in Unix), which have to be formatted and parsed, COM allows you to create interfaces that are inherent to your programming language and use them from any other language. COM is a smashing success, and used for everything in Windows. For all they did correctly, Microsoft's COM specification is severely lacking. There are no advanced capabilities when doing all but the most basic things (e.g. structures, real variants). It is for these reasons that COM becomes cumbersome quickly, I am always fitting my ideas into COM, and I don't believe that should be the case.
Secondly, I love CORBA; I immediately fell in love with it's seemingly endless engineering and over-abundance of features. Unfortunately they did make some choices which do not allow users to create components in the style of COM. The most limiting of which is that each component can implement only a single interface. Other limitations are easier to overcome, but not natural in CORBA, such as reference counting (although any CORBA developer seems to argue its value). After many years of using CORBA and trying to fit in a COM style, the ideas for iCOM were born.
So in the end it's simple really, take COM, make it work on multiple platforms; then add every conceivable CORBA feature to it.