anchor.diff:      jobs:enqueue(sync_jobs, {start_sync, PeerUri}),
       {noreply, State};
   handle_cast({received_block, Block}, State) ->
  -    HdrHash = header_hash(Block),
  -    case aec_chain:get_block_by_hash(HdrHash) of
  -        {ok, _} ->
  -            %% we have the block; do not re-send
  -            {noreply, State};
  -        {error, _} ->
  -            cache_and_queue_block(HdrHash, Block, received, forward, State),
  -            {noreply, State}
  -    end;
  +    queue_block(Block, received, forward, State),
  +    {noreply, State};
   handle_cast({block_created, Block}, State) ->
  -    HdrHash = header_hash(Block),
  -    cache_and_queue_block(HdrHash, Block, created, forward, State),
  +    queue_block(Block, created, forward, State),
       publish(block_created, aec_blocks:height(Block)),
       {noreply, State};
   handle_cast(_, State) ->
  
positive.code: %%% Internal functions
  %%%=============================================================================
  
  ensure_tab(T, Opts) ->
      case ets:info(T, name) of
          undefined ->
              ets:new(T, [{heir, self(), []}|Opts]);
          _ ->
              true
      end.
  
  header_hash(Block) ->
      Header = aec_blocks:to_header(Block),
      {ok, HeaderHash} = aec_headers:hash_header(Header),
  
negative.code:                 pings = gb_trees:empty()}).
  
  start_link() ->
      gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
  
  init([]) ->
      Peers = application:get_env(aecore, peers, []),
  