Add promise support