It's great to see the ongoing progress on MLContext and related APIs. However, one aspect that really concerns me is the creation of many redundant data types and exposition of various internal data structures. For example, exposing MatrixObject and FrameObject at API level is dangerous because it makes external programs data-dependent on internal structures that might be subject to change (no API stability) and users might not be aware of the implications their interactions have on the buffer pool etc. Furthermore, having such a plethora of entry points makes it very hard to ensure consistency of the compilation chain with regard to configuration handling, environment setup and advanced compilation techniques. I would recommend to create a holistic design across the various APIs that aims to (1) reduce the number of exposed data types (for instance, I would like to remove MatrixObject/FrameObject from the external interface, as well as remove BinaryBlockMatrix, BinaryBlockFrame, Matrix, Frame, and related meta data objects), and (2) create a configurable compilation chain that is invoked from all external APIs. I understand that these data types were introduced to simplify, for example, imports in user programs but I'm sure we find an alternative realization with less redundancy. What do you think? Regards, Matthias