closer to original api
begin copy