figure and some impl changes