anchor.diff:      gs_protocol:data() | fun((gs_protocol:client()) -> gs_protocol:data()).
   translate_harvester(#gri{id = HarvesterId, aspect = instance, scope = private}, Harvester) ->
       #od_harvester{
  -        name = Name, endpoint = Endpoint, 
  +        name = Name, endpoint = Endpoint,
           plugin = Plugin
       } = Harvester,
  -    fun(?USER(UserId)) ->
  -        #{
  -            <<"name">> => Name,
  -            <<"scope">> => <<"private">>,
  -            <<"endpoint">> => Endpoint,
  -            <<"plugin">> => atom_to_binary(Plugin, utf8),
  -            <<"indexList">> => gs_protocol:gri_to_string(#gri{type = od_harvester, id = HarvesterId, aspect = indices}),
  -            <<"canViewPrivileges">> => harvester_logic:has_eff_privilege(Harvester, UserId, ?HARVESTER_VIEW_PRIVILEGES),
  -            <<"directMembership">> => harvester_logic:has_direct_user(Harvester, UserId),
  -            <<"userList">> => gs_protocol:gri_to_string(#gri{type = od_harvester, id = HarvesterId, aspect = users}),
  -            <<"effUserList">> => gs_protocol:gri_to_string(#gri{type = od_harvester, id = HarvesterId, aspect = eff_users}),
  -            <<"groupList">> => gs_protocol:gri_to_string(#gri{type = od_harvester, id = HarvesterId, aspect = groups}),
  -            <<"effGroupList">> => gs_protocol:gri_to_string(#gri{type = od_harvester, id = HarvesterId, aspect = eff_groups}),
  -            <<"spaceList">> => gs_protocol:gri_to_string(#gri{type = od_harvester, id = HarvesterId, aspect = spaces}),
  -            <<"info">> => maps:merge(translate_creator(Harvester#od_harvester.creator), #{
  -                <<"creationTime">> => Harvester#od_harvester.creation_time
  -            })
  -        }
  -    end;
  -
  -translate_harvester(#gri{aspect = instance, scope = protected}, HarvesterData) ->
  +    fun(?USER(UserId)) -> #{
  +        <<"name">> => Name,
  +        <<"scope">> => <<"private">>,
  +        <<"endpoint">> => Endpoint,
  +        <<"plugin">> => atom_to_binary(Plugin, utf8),
  +        <<"indexList">> => gs_protocol:gri_to_string(#gri{type = od_harvester, id = HarvesterId, aspect = indices}),
  +        <<"canViewPrivileges">> => harvester_logic:has_eff_privilege(Harvester, UserId, ?HARVESTER_VIEW_PRIVILEGES),
  +        <<"directMembership">> => harvester_logic:has_direct_user(Harvester, UserId),
  +        <<"userList">> => gs_protocol:gri_to_string(#gri{type = od_harvester, id = HarvesterId, aspect = users}),
  +        <<"effUserList">> => gs_protocol:gri_to_string(#gri{type = od_harvester, id = HarvesterId, aspect = eff_users}),
  +        <<"groupList">> => gs_protocol:gri_to_string(#gri{type = od_harvester, id = HarvesterId, aspect = groups}),
  +        <<"effGroupList">> => gs_protocol:gri_to_string(#gri{type = od_harvester, id = HarvesterId, aspect = eff_groups}),
  +        <<"spaceList">> => gs_protocol:gri_to_string(#gri{type = od_harvester, id = HarvesterId, aspect = spaces}),
  +        <<"info">> => maps:merge(translate_creator(Harvester#od_harvester.creator), #{
  +            <<"creationTime">> => Harvester#od_harvester.creation_time
  +        })
  +    } end;
  +
  +translate_harvester(#gri{id = HarvesterId, aspect = instance, scope = protected}, HarvesterData) ->
       #{
           <<"name">> := Name,
           <<"public">> := Public,
  
positive.code:         <<"creator">> := Creator,
          <<"sharedDirectories">> := SharedDirectories
      } = SpaceData,
      #{
          <<"name">> => Name,
          <<"scope">> => <<"protected">>,
          <<"supportSizes">> => Providers,
          <<"providerList">> => gs_protocol:gri_to_string(#gri{type = od_space, id = SpaceId, aspect = providers}),
          <<"info">> => maps:merge(translate_creator(Creator), #{
              <<"creationTime">> => CreationTime,
              <<"sharedDirectories">> => SharedDirectories
          })
      };
  
  translate_space(#gri{aspect = users}, Users) ->
      #{
  
negative.code:         ({Type, Id}, {AccGRIs, AccDirectMembership}) ->
              GRI = gs_protocol:gri_to_string(#gri{
                  type = Type, id = Id, aspect = instance, scope = auto
              }),
              {AccGRIs ++ [GRI], AccDirectMembership}
      end, {[], false}, Intermediaries),
      #{
          <<"intermediaries">> => GRIs,
          <<"directMembership">> => DirectMembership
  