rework APIs to support multiple interfaces