add some return to havechainable API, and add events to entity part