A method for automatic routing of messages in a data processing system, the method comprising: receiving an incoming message at an input/output, I/O, interface of the data processing system, the incoming message comprising a message identifier and payload data; determining match information, where the match information comprises an indicator of whether the message identifier of the incoming message matches a message identifier of a message request in a message receive queue, RQ, and an indicator of a location of a matching request in the RQ; determining the incoming message to be urgent or non-urgent by comparing the indicated location of the matching request to a location threshold; comparing a size of the payload data to a first size threshold, T0; determining a destination, in the data processing system, for the incoming message, said determining including: setting the destination to be a core-private cache, a cluster-private cache or a scratch pad of a processing element of the data processing system when the match information indicates a match between the identifier of the incoming message and an identifier of a message request in the RQ and the incoming message is determined to be urgent and the payload data size does not exceed the first size threshold, T0; and setting the destination to be a home node, HN, of the data processing system when the match information indicates no match between the identifier of the incoming message and an identifier of a message request in the RQ or the incoming message is determined to be non-urgent or the payload data size exceeds the first size threshold, T0, and forwarding (514, 530) the incoming message to the determined destination. receiving an incoming message at an input/output, I/O, interface of the data processing system, the incoming message comprising a message identifier and payload data; determining match information, where the match information comprises an indicator of whether the message identifier of the incoming message matches a message identifier of a message request in a message receive queue, RQ, and an indicator of a location of a matching request in the RQ; determining the incoming message to be urgent or non-urgent by comparing the indicated location of the matching request to a location threshold; comparing a size of the payload data to a first size threshold, T0; determining a destination, in the data processing system, for the incoming message, said determining including: setting the destination to be a core-private cache, a cluster-private cache or a scratch pad of a processing element of the data processing system when the match information indicates a match between the identifier of the incoming message and an identifier of a message request in the RQ and the incoming message is determined to be urgent and the payload data size does not exceed the first size threshold, T0; and setting the destination to be a home node, HN, of the data processing setting the destination to be a core-private cache, a cluster-private cache or a scratch pad of a processing element of the data processing system when the match information indicates a match between the identifier of the incoming message and an identifier of a message request in the RQ and the incoming message is determined to be urgent and the payload data size does not exceed the first size threshold, T0; and setting the destination to be a home node, HN, of the data processing system when the match information indicates no match between the identifier of the incoming message and an identifier of a message request in the RQ or the incoming message is determined to be non-urgent or the payload data size exceeds the first size threshold, T0, and forwarding (514, 530) the incoming message to the determined destination.