Rework abstract api to allow replacements within extended apis