Add support for custom IDataObject implementations

This adds support for using a custom `IDataObject` instance when there is a need for special behavior.

Best regards,
Marius