Is this necessary as a top level function?