Add promise interface