interface changes; now return pointer instead of shared