Lower-level output API