Yes!! Well, sort of. You can't derive anything from the actual coclass, but you can achieve nearly the same effect. Separate all of the implementation code into a separate class, templated on the type of the implemented interface, and derive the coclass from that. Since the implementation classes are not COM coclasses, they can be extended like normal C++ classes, and you can arrange these in a heirarchy to suit your needs. The idea is to put absolutely no source code in the COM coclass, it should inherit ALL of its functionality from the impl classes. This might look something like this: // In your idl file: interace IA : IDispatch { HRESULT Method1([out,retval] double* pVal); } interface IB : IA { HRESULT Method2([out,retval] double* pVal); } // The definition of your coclass for A: class ATL_NO_VTABLE CA : public CComObjectRootEx, public CComCoClass, public IDispatchImpl, &IID_IA, &LIBID_ABCDLib> { // etc. } // The definition of the coclass for B: class ATL_NO_VTABLE CB : public CComObjectRootEx, public CComCoClass, public IDispatchImpl, &IID_IB, &LIBID_ABCDLib> { // etc. } // The definition of the implementation class for A: template class IAImpl : public Base { public: IAImpl(); ~IAImpl(); // Methods of IA STDMETHOD(Method1)(/*[out, retval]*/ double* pVal); }; // Implement the methods and stuff here . . . // The definition of the implementation for B: // B inherits stuff from A template class IBImpl : public IAImpl { public: IBImpl(); ~IBImpl(); // Methods of IB STDMETHOD(Method2)(/*[out, retval]*/ double* pVal); }; // Implement methods of B here Anyway, one implementation can inherit stuff from another, and implementations of generic stuff can be put into base classes, etc., etc. Someone else may be able to suggest other methods; this one has worked well for me. Good Luck!