anchor.diff:  %% =====================================================================
   %% Add a link to an input value from a block output
   %% =====================================================================    
  -handle_call({add_link, OutputBlockName, OutputValueId, Link}, _From, State) ->
  -  case system_server:is_block(OutputBlockName) of
  +handle_call({add_link, OutputBlockNameStr, OutputValueIdStr, LinkStrs}, _From, State) ->
  +OutputBlockName = list_to_atom(OutputBlockNameStr),
  +Result = case block_supervisor:is_block(OutputBlockName) of
       true ->
  -      case link_utils:validate_link(Link) of
  -        ok ->
  -          Result = block_server:add_link(OutputBlockName, OutputValueId, Link);
  -
  -        {error, Reason} ->
  -          Result = {error, Reason}
  +      case parse_link(LinkStrs) of
  +        {ok, Link} ->
  +          case link_utils:validate_link(Link) of
  +            ok ->
  +              case attrib_utils:str_to_value_id(OutputValueIdStr) of
  +                {ok, OutputValueId} ->
  +                  block_server:add_link(OutputBlockName, OutputValueId, Link);
  +
  +                {error, Reason} -> {error, Reason}
  +              end;
  +
  +            {error, Reason} -> {error, Reason}
  +          end;
  +
  +        {error, Reason} -> {error, Reason}
         end;
  -    _False ->
  -      Result = {error, block_not_found}
  +
  +    false -> {error, block_not_found}
     end,      
     {reply, Result, State};
   
  
positive.code: %% Get a list of all block names
  %% =====================================================================    
  handle_call(get_block_names, _From, State) ->
    Result = block_supervisor:block_names(),
    {reply, Result, State};
  
  
  
negative.code: %% =====================================================================
  %% Delete execution link from Executor to Executee block
  %% =====================================================================    
  handle_call({del_exec_link, ExecutorBlockNameStr, ExecuteeBlockNameStr}, _From, State) ->
    ExecutorBlockName = list_to_atom(ExecutorBlockNameStr),
    Result = case block_supervisor:is_block(ExecutorBlockName) of
      true ->
        ExecuteeBlockName = list_to_atom(ExecuteeBlockNameStr),
        % Execution links are hard coded from exec_out output to exec_in input attributes
        case link_utils:validate_link({ExecuteeBlockName, exec_in}) of
          ok ->
            case block_server:del_link(ExecutorBlockName, exec_out, {ExecuteeBlockName, exec_in}) of
              ok -> block_server:del_exec_in(ExecuteeBlockName, ExecutorBlockName);
                
              {error, Reason} -> {error, Reason}
            end;
  
          {error, Reason} -> {error, Reason}
        end;
      false -> {error, block_not_found}
    end,      
    {reply, Result, State};
  
  