use api if possible, else use old