anchor.diff:  -spec extract_ring_info2(RingE1::node_details:node_details(), RingE2::node_details:node_details())
           -> [{Label::string(), Value::string(), Known::boolean()}].
   extract_ring_info2(RingE1, RingE2) ->
  -    E1_Me_tmp = node:id(node_details:get(RingE1, node)),
  -    E1_Pred_tmp = node:id(node_details:get(RingE1, pred)),
  -    E2_Pred_tmp = node:id(node_details:get(RingE2, pred)),
  -    E1_Diff = ?RT:get_range(E1_Pred_tmp, E1_Me_tmp) * 100 / ?RT:n(),
  -    E1_Label = node_details:get(RingE1, hostname) ++ " (" ++
  +    E1_MyId = node:id(node_details:get(RingE1, node)),
  +    E1_PredId = node:id(node_details:get(RingE1, pred)),
  +    E2_PredId = node:id(node_details:get(RingE2, pred)),
  +    E1_Diff = ?RT:get_range(E1_PredId, E1_MyId) * 100 / ?RT:n(),
  +    E1_MyIndexStr = case get_indexed_id_by_id(E1_MyId) of
  +                        undefined -> "";
  +                        E1_MyIndex -> integer_to_list(E1_MyIndex) ++ ": "
  +                    end,
  +    E1_Label = E1_MyIndexStr ++ node_details:get(RingE1, hostname) ++ " (" ++
                      integer_to_list(node_details:get(RingE1, load)) ++ ")",
       E1_Me_val = io_lib:format("~f", [E1_Diff]),
  -    case E1_Me_tmp =:= E2_Pred_tmp of
  +    case E1_MyId =:= E2_PredId of
           true -> [{E1_Label, E1_Me_val, true}];
           _ -> % add an "unknown" slice as there is another (but unknown) node:
  -            Diff2 = ?RT:get_range(E1_Me_tmp, E2_Pred_tmp) * 100 / ?RT:n(),
  +            Diff2 = ?RT:get_range(E1_MyId, E2_PredId) * 100 / ?RT:n(),
               Unknown_val = io_lib:format("~f", [Diff2]),
               [{E1_Label, E1_Me_val, true}, {"unknown", Unknown_val, false}]
       end.
  
positive.code:     SuccList = node_details:get(Details, succlist),
      RTSize = node_details:get(Details, rt_size),
      Load = node_details:get(Details, load),
      {tr, [], 
        [
         {td, [], [get_flag(Hostname), io_lib:format("~p", [Hostname])]},
         {td, [], io_lib:format("~.100p", [[node:id(N) || N <- PredList]])},
         {td, [], io_lib:format("~p", [node:id(Node)])},
         {td, [], io_lib:format("~.100p", [[node:id(N) || N <- SuccList]])},
         {td, [], io_lib:format("~p", [RTSize])},
         {td, [], io_lib:format("~p", [Load])}
        ]};
  
negative.code: extract_ring_info([]) ->
      [];
  extract_ring_info([RingE]) ->
      MyId = node:id(node_details:get(RingE, node)),
      PredId = node:id(node_details:get(RingE, pred)),
      MyIndexStr = case get_indexed_id_by_id(MyId) of
                       undefined -> "";
                       MyIndex -> integer_to_list(MyIndex) ++ ": "
                   end,
      Label = MyIndexStr ++ node_details:get(RingE, hostname) ++ " (" ++
                  integer_to_list(node_details:get(RingE, load)) ++ ")",
      case MyId =:= PredId of
          true -> [{Label, "100.00", true}];
          _ ->
              Diff = ?RT:get_range(PredId, MyId) * 100 / ?RT:n(),
              Me_val = io_lib:format("~f", [Diff]),
              Unknown_val = io_lib:format("~f", [100 - Diff]),
              [{Label, Me_val, true}, {"unknown", Unknown_val, false}]
  