IEntryPoint or IExtendedEntryPoint
If you see the definition of the two interfaces defined in Microsoft.VisualStudio.Tools.Applications.Runtime.v9.0.dll you would notice that IExtendedEntryPoint is derived from IEntryPoint. In most of the host add-in applications add-in is the consumer of the host object model, IEntryPoint was derived from that perspective and it could be used in most of the scenarios where add-in is the consumer of the host object model. But for the scenarios where host also needs to know the add-in object model. IExtendedEntryPoint is the right choice as it provides an additional method on an interface GetEntryPointObject that can be used to get handle to the host object model tree on the add-in side. An example of such a scenario is macro recording. In Macro recording host needs to enumerate the functions on the add-in side and expose these as macros. This could be only enabled by a method that provides a mechanism to query for the object model on the add-in side thats where the GetEntryPointObject comes into picture.