api for supporting alternative node types for return (still need to document), and add untested implementations of the rest of the functions