anchor.diff:  %%%===================================================================
   %%% Internal functions
   %%%===================================================================
  -do_reverse(State = #state{type = Type}, Latitude, Longitude, Language) ->
  -    case do_reverse_provider(Type, Latitude, Longitude, Language) of
  +do_reverse(State = #state{type = Type, cache = Cache}, Latitude, Longitude, Language) ->
  +  case ets:lookup(Cache, {Latitude, Longitude}) of
  +    [] ->
  +      case do_reverse_provider(Type, Latitude, Longitude, Language) of
           {ok, Address} ->
  -            {reply, {ok, do_address_format(Address)}, State};
  +          case ets:insert_new(Cache, {{Latitude, Longitude}, Address}) of
  +            true ->
  +              {reply, {ok, do_address_format(Address)}, State};
  +            false ->
  +              {reply, {error, <<"Error sync in address cache">>}, State}
  +          end;
           Reason ->
  -            {reply, Reason, State}
  -    end.
  +          {reply, Reason, State}
  +      end;
  +    [{_, Address} | _] ->
  +      {reply, {ok, do_address_format(Address)}, State}
  +  end.
   
   do_reverse_provider(google, Latitude, Longitude, Language) ->
       em_geocoder_google:reverse(Latitude, Longitude, Language);
  
positive.code: -define(SERVER, ?MODULE).
  
  -record(state, {
            type :: atom()
           }).
  
  %%%===================================================================
  
negative.code:              {stop, Reason :: term()} | ignore).
  init([GeocoderType, _GeocoderSettings]) ->
      em_logger:info("Init '~s' geocoder service", [GeocoderType]),
      Cache = ets:new(address, [set, private]),
      {ok, #state{type = GeocoderType, cache = Cache}}.
  %%--------------------------------------------------------------------
  %% @private
  %% @doc
  