anchor.diff:                                       has_w1c(New), valid_w1c(New),
                                        has_consistent(New), valid_consistent(New)])
                      end,
  -                   collect(with_title("{has_datatype, valid_datatype, allow_mult, has_w1c, valid_w1c, has_consistent, valid_consistent}"),
  -                           {has_datatype(New), valid_datatype(New), allow_mult(New), has_w1c(New), valid_w1c(New),
  -                           has_consistent(New), valid_consistent(New)},
  +                   collect(with_title("{has_datatype, valid_datatype, allow_mult, has_w1c, valid_w1c, has_consistent, valid_consistent, lww, dvv_enabled}"),
  +                           {has_datatype(New), valid_datatype(New), allow_mult(New), has_w1c(New), valid_w1c(New), has_consistent(New), valid_consistent(New), last_write_wins(New), dvv_enabled(New)},
                              only_create_if_valid(Result, New)))
               end).
   
  
positive.code: gen_valid_mult_dt(true) ->
      ?LET(Datatype, gen_datatype(), [{allow_mult, true}, {datatype, Datatype}]).
  
  gen_new(update) ->
      ?LET({Mult, Datatype, WriteOnce, Consistent, NVal},
           {gen_allow_mult(), oneof([[], gen_datatype_property()]),
            oneof([[], gen_valid_w1c()]),
            oneof([[], gen_maybe_bad_consistent()]), oneof([[], [{n_val, choose(1, 10)}]])},
           Mult ++ Datatype ++ WriteOnce ++ Consistent ++ NVal);
  gen_new(create) ->
      Defaults0 = riak_core_bucket_type:defaults(),
      Defaults = lists:keydelete(allow_mult, 1, Defaults0),
      ?LET(
          {Mult, DatatypeOrConsistent, WriteOnce},
          {
              gen_allow_mult(),
              frequency(
                  [{5, gen_datatype_property()},
                   {5, gen_maybe_bad_consistent()},
                   {5, []}]
              ),
              gen_w1c()
          },
          Defaults ++ Mult ++ DatatypeOrConsistent ++ WriteOnce).
  
  gen_allow_mult() ->
      ?LET(Mult, frequency([{9, bool()}, {1, binary()}]), [{allow_mult, Mult}]).
  
  gen_datatype_property() ->
      ?LET(Datattype, oneof([gen_datatype(), notadatatype]), [{datatype, Datattype}]).
  
  gen_datatype() ->
      ?LET(Datamod, oneof(?V2_TOP_LEVEL_TYPES), riak_kv_crdt:from_mod(Datamod)).
  
negative.code:                        io:format("New ~p~n", [New]),
                         io:format("Result ~p~n", [Result]),
                         io:format("Expected ~p~n", [lists:sort(Expected)]),
                         io:format("Expected - Good ~p~n", [sets:to_list(sets:subtract(sets:from_list(Expected), sets:from_list(Good)))]),
                         io:format("Good - Expected ~p~n", [sets:to_list(sets:subtract(sets:from_list(Good), sets:from_list(Expected)))])
                     end,
                     case valid_dvv_lww({Good, Bad}) of
                         true ->
                             lists:sort(maybe_remove_dvv_enabled(Expected)) == lists:sort(maybe_remove_dvv_enabled(Good));
                         _ ->
                             false
                     end
                    )
              end).
  
  valid_dvv_lww({Good, Bad}) ->
      case last_write_wins(Good) of
          true ->
              DvvEnabled = dvv_enabled(Good),
              (DvvEnabled =:= undefined) orelse (not DvvEnabled) orelse has_dvv_enabled(Bad);
          _ ->
              true
      end.
  
  maybe_remove_dvv_enabled(Props) ->
      lists:keydelete(dvv_enabled, 1, lists:keydelete(last_write_wins, 1, Props)).
  
  %% Generators
  gen_args(GenDefBucket) ->
  