anchor.diff:      replace_last(strip_trailing_crlf(Data), MP);
   handle_last_data(_Data, #mp{headers=dropping}=MP) ->
       MP;
  -handle_last_data(Data, #mp{name=Name, cb=Callback, cb_data=CbData}=MP) ->
  +handle_last_data(Data, MP) ->
       Stripped = strip_trailing_crlf(Data),
  -    Result = Callback({data, Name, Stripped}, CbData),
  -    handle_last_data_cb(Result, Stripped, MP).
  +    handle_last_data_cb(data_cb(Stripped, MP), Stripped, MP).
  +
  +data_cb(Data, #mp{name=Name, cb=Callback, cb_data=CbData}) ->
  +    Callback({data, Name, Data}, CbData).
   
   strip_trailing_crlf(Bin) ->
       N = size(Bin) - 2,
  
positive.code: 
  handle_finalized_headers(Name, Headers, #mp{cb=undefined}=MP) ->
      MP#mp{name=Name, headers=Headers};
  handle_finalized_headers(Name, Headers, #mp{cb=Callback, cb_data=CbData}=MP) ->
      Result = Callback({part, Name, Headers}, CbData),
      handle_part_cb(Result, Name, Headers, MP).
  
  handle_part_cb({continue, CbData}, Name, Headers, MP) ->
      MP#mp{name=Name, headers=Headers, cb_data=CbData};
  
negative.code: 
  handle_last_data_cb({continue, CbData}, Data, MP) ->
      replace_last(Data, MP#mp{cb_data=CbData});
  handle_last_data_cb({continue, OtherData, CbData}, _Data, MP) ->
      replace_last(OtherData, MP#mp{cb_data=CbData});
  handle_last_data_cb({drop, CbData}, _Data, MP) ->
      MP#mp{cb_data=CbData}.
  
  finalize_part(#mp{headers=dropping}=MP) ->
      reset_part_attrs(MP);
  