internal api rework