I understand that. When I did the non-generic subscription it did occur to me that it would be easier to make the non-generic method the one that the generic methods call. But the 80/20 rule applies here. Most people will use the generic method, you'd only want the non-generic if you are discovering message types at runtime - if, for example, you are wrapping EasyNetQ in some other library. So it's quite a specialist requirement and better to keep it separate from the main interface.