The main reason standing behind this decision was type safety and clarity. I didn't want user to realize in runtime (or while reading documentation) that the object he receives in ``MessageConverter#toMessage(Object)`` method is actually ``KeyValue<K, Versioned<V>>`` wrapper, and that I expect him to return ``KeyValue<K, V>`` in ``MessageConverter#fromMessage(Message<P>)``. If you can think of any better solution or using ``MessageConverter`` is preferred, I'll be happy to alter this part of code. I can see that spring-integration-mongodb module also uses MongoDB specific converter.