anchor.diff:  	{Workers, StateNum} = gen_server:call({global, ?CCM}, get_workers, Timeout),
   	{_, CStateNum} = gen_server:call({global, ?CCM}, get_callbacks, Timeout),
   
  -	%check nodes
  -	NodesStatus = pmap(fun(Node) -> node_status(Node,StateNum,CStateNum,Timeout) end, Nodes),
  -
   	%check workers
   	WorkersStatus = pmap(fun(Worker) -> worker_status(Worker,Timeout) end,Workers),
   
  +	%check nodes
  +	WorkersOk = not contains_errors(WorkersStatus),
  +	NodesStatus = pmap(fun(Node) -> node_status(Node,StateNum,CStateNum,WorkersOk,Timeout) end, Nodes),
  +
   	%check if errors occured
  -	{HealthStatus, HttpStatusCode} = case contains_errors(NodesStatus) and contains_errors(WorkersStatus) of
  -		true -> {"ok",200};
  -		false -> {"error",500}
  +	{HealthStatus, HttpStatusCode} = case contains_errors(NodesStatus) or contains_errors(WorkersStatus) of
  +		true -> {"error",500};
  +		false -> {"ok",200}
   	end,
   
   	%prepare current date
  
positive.code: 		lager:error("Healthcheck on node ~p failed, callbacks/state number of ccm doesn't match values from node_manager and dispatcher",[Node]),
  		lager:error("ccm_state_num: ~p, ccm_callback_num: ~p,disp_state_num: ~p, disp_callback_num: ~p,manager_state_num: ~p, manager_callback_num: ~p",
  			[CcmStateNum,CcmCStateNum,DispStateNum,DispCStateNum,ManagerStateNum,ManagerCStateNum]),
  		{veil_cluster_node,[{name,atom_to_list(Node)},{status,"error"}],[]}
  	end.
  
  %% worker_status/1
  %% ====================================================================
  %% @doc Calls healthcheck method on selected worker and returns xmerl
  %% simple_xml output describing worker health status
  
negative.code: 	Result :: true | false.
  %% ====================================================================
  contains_errors(StatusList) ->
  	Errors = [Status || {_Tag,Attrs,_Content} <- StatusList, {status,Status} <-Attrs, Status /= "ok", Status /= "initializing"],
  	Errors /= [].
  
  
  %% ====================================================================
  