partial work to allow other implementations