low level interface seems to work with no leaks