anchor.diff:                  SlideOp1 = slide_op:reset_send_errors(SlideOp),
                   update_rcv_data1(State, SlideOp1, MovingData, TargetId, NextOp)
           end,
  -    safe_operation(WorkerFun, MyState, MoveFullId, [wait_for_data, wait_for_other], data);
  +    safe_operation(WorkerFun, MyState, MoveFullId, [wait_for_data, wait_for_other], data, false);
   
   % acknowledgement from neighbor that its node received data for the slide op with the given id
   process_move_msg({move, data_ack, MoveFullId} = _Msg, MyState) ->
  
positive.code:         fun(SlideOp, State) ->
                  abort_slide(State, SlideOp, target_down, false)
          end,
      safe_operation(WorkerFun, MyState, MoveFullId, all, crashed_node).
  
  %% @doc Creates a slide with the node's successor or predecessor. TargetId will
  %%      become the ID between the two nodes, i.e. either the current node or
  
negative.code:                     -> dht_node_state:state()),
      State::dht_node_state:state(), MoveFullId::slide_op:id(),
      WorkPhases::[slide_op:phase(),...] | all,
      MoveMsgTag::atom(), IgnoreWrongNeighbor::boolean()) -> dht_node_state:state().
  safe_operation(WorkerFun, State, MoveFullId, WorkPhases, MoveMsgTag, IgnoreWrongNeighbor) ->
      case get_slide(State, MoveFullId) of
          {_, _PredOrSucc, SlideOp} when MoveMsgTag =:= crashed_node ->
              WorkerFun(SlideOp, State);
          {Status, _PredOrSucc, SlideOp} when Status =:= ok
            orelse (IgnoreWrongNeighbor andalso Status =:= wrong_neighbor)->
              case WorkPhases =:= all orelse lists:member(slide_op:get_phase(SlideOp), WorkPhases) of
                  true -> WorkerFun(SlideOp, State);
                  _    ->
  