anchor.diff:      {L, length(L)};
   
   print(List, Max, Options) when is_list(List) ->
  -    alist_start(List, Max, Options).
  +    alist_start(List, Max, dec_depth(Options)).
   
   %% Returns {List, Length}
   tuple_contents(Tuple, Max, Options) ->
       L = tuple_to_list(Tuple),
  -    list_body(L, Max, Options).
  +    list_body(L, Max, dec_depth(Options), true).
   
   %% Format the inside of a list, i.e. do not add a leading [ or trailing ].
   %% Returns {List, Length}
  -list_body([], _Max, _Options) -> {[], 0};
  -list_body(_, Max, _Options) when Max < 4 -> {"...", 3};
  -list_body([H|T], Max, Options) -> 
  +list_body([], _Max, _Options, _Tuple) -> {[], 0};
  +list_body(_, Max, _Options, _Tuple) when Max < 4 -> {"...", 3};
  +list_body(_, _Max, #print_options{depth=0}, _Tuple) -> {"...", 3};
  +list_body([H|T], Max, Options, Tuple) -> 
       {List, Len} = print(H, Max, Options),
  -    {Final, FLen} = list_bodyc(T, Max - Len, Options),
  +    {Final, FLen} = list_bodyc(T, Max - Len, Options, Tuple),
       {[List|Final], FLen + Len};
  -list_body(X, Max, Options) ->  %% improper list
  +list_body(X, Max, Options, _Tuple) ->  %% improper list
       {List, Len} = print(X, Max - 1, Options),
       {[$|,List], Len + 1}.
   
  -list_bodyc([], _Max, _Options) -> {[], 0};
  -list_bodyc(_, Max, _Options) when Max < 4 -> {"...", 3};
  -list_bodyc([H|T], Max, Options) -> 
  -    {List, Len} = print(H, Max, Options),
  -    {Final, FLen} = list_bodyc(T, Max - Len - 1, Options),
  -    {[$,, List|Final], FLen + Len + 1};
  -list_bodyc(X, Max, Options) ->  %% improper list
  +list_bodyc([], _Max, _Options, _Tuple) -> {[], 0};
  +list_bodyc(_, Max, _Options, _Tuple) when Max < 4 -> {"...", 3};
  +list_bodyc([H|T], Max, #print_options{depth=Depth} = Options, Tuple) -> 
  +    {List, Len} = print(H, Max, dec_depth(Options)),
  +    {Final, FLen} = list_bodyc(T, Max - Len - 1, Options, Tuple),
  +    Sep = case Depth == 1 andalso not Tuple of
  +        true -> $|;
  +        _ -> $,
  +    end,
  +    {[Sep, List|Final], FLen + Len + 1};
  +list_bodyc(X, Max, Options, _Tuple) ->  %% improper list
       {List, Len} = print(X, Max - 1, Options),
       {[$|,List], Len + 1}.
   
  
positive.code:             {[$"|L], Len + 1}
      catch
          throw:unprintable ->
              {R, Len} = list_body([H|T], Max-2, Options),
              {[$[, R, $]], Len + 2}
      end;
  alist_start([H|T], Max, Options) when H =:= 9; H =:= 10; H =:= 13 ->
  
negative.code: %%
  alist_start([], _Max, _Options) -> {"[]", 2};
  alist_start(_, Max, _Options) when Max < 4 -> {"...", 3};
  alist_start(_, _Max, #print_options{depth=0}) -> {"[...]", 3};
  alist_start(L, Max, #print_options{force_strings=true} = Options) ->
      alist(L, Max, Options);
  alist_start([H|T], Max, Options) when is_integer(H), H >= 16#20, H =< 16#7e ->  % definitely printable
  