anchor.diff:  options() ->
       list(option()).
   
  +rr_abort_opts() ->
  +    % {SoftCap, HardCap, ActualRunning, RandomRollResult}
  +    {choose(1000, 2000), choose(3000, 4000), choose(0, 4999), choose(0, 100)}.
  +
   prop_basic_get() ->
  -    ?FORALL({RSeed,PRSeed,Options0, Objects,ReqId,VGetResps},
  +    ?FORALL({RSeed,PRSeed,Options0, Objects,ReqId,VGetResps,RRAbort},
               {r_seed(), r_seed(), options(),
                fsm_eqc_util:riak_objects(), noshrink(largeint()),
  -             vnodegetresps()},
  +             vnodegetresps(),rr_abort_opts()},
       begin
           N = length(VGetResps),
           {R, RealR} = r_val(N, 1000000, RSeed),
  
positive.code: %% Check the read repairs - no need to worry about delete objects, deletes can only
  %% happen when all read repairs are complete.
  
  check_repair(Objects, RepairH, H) ->
      Actual = [ Part || {Part, ?KV_PUT_REQ{}} <- RepairH ],
      Heads  = merge_heads([ Lineage || {_, {ok, Lineage}} <- H ]),
      RepairObject  = (catch build_merged_object(Heads, Objects)),
      Expected =expected_repairs(H),
      RepairObjects = [ Obj || {_Idx, ?KV_PUT_REQ{object=Obj}} <- RepairH ],
      conjunction(
          [{puts, equals(lists:sort(Expected), lists:sort(Actual))},
  
negative.code: do_repair(_Heads, _V) ->
      false.
  
  expected_repairs(_H, {_Soft,Hard,Actual,_Roll}) when Actual >= Hard ->
      [];
  expected_repairs(H, {Soft, Hard, Actual, Roll}) when Soft < Actual, Actual < Hard ->
      CapAdjusted = Hard - Soft,
      ActualAdjusted = Actual - Soft,
      Percent = ActualAdjusted / CapAdjusted * 100,
      if
        Roll < Percent ->
          [];
        true ->
          expected_repairs(H, true)
      end;
  expected_repairs(H,_RRAbort) ->
      case [ Lineage || {_, {ok, Lineage}} <- H ] of
          []   -> [];
          Lins ->
  