An apparatus comprising: a processor running an operating system; wherein the processor is configured to: run a set of one or more applications; receive a message from a first application in the set of one or more applications (212, 214, 216, 218) run by the processor, wherein the received message indicates a user action; determine if the user action is in a predetermined set of user actions; and when the user action is in the predetermined set of user actions, create an intercepted message comprising a copy of the received message; append sensor data to the intercepted message, wherein the sensor data comprises at least one of a timestamp and a location; receive one intercepted message from the operating system; read the sensor data corresponding to the received intercepted message, determine a context information based on the received intercepted message and the sensor data; append the context information to the received intercepted message, determine, using a random indexing algorithm, a set of predicted user actions (604, 606, 608, 610, 612) based on the context information and the received intercepted message, and broadcast the intercepted message to one or more applications (212, 214, 216, 218) in the set of applications (212, 214, 216, 218) run by the processor that are configured to receive the intercepted message. a processor running an operating system; wherein the processor is configured to: run a set of one or more applications; receive a message from a first application in the set of one or more applications (212, 214, 216, 218) run by the processor, wherein the received message indicates a user action; determine if the user action is in a predetermined set of user actions; and when the user action is in the predetermined set of user actions, create an intercepted message comprising a copy of the received message; append sensor data to the intercepted message, wherein the sensor data comprises at least one of a timestamp and a location; receive one intercepted message from the operating system; read the sensor data corresponding to the received intercepted message, determine a context information based on the received intercepted message and the sensor data; append the context information to the received intercepted message, determine, using a random indexing algorithm, a set of predicted user actions (604, 606, 608, 610, 612) based on the context information and the received intercepted message, and broadcast the intercepted message to one or more applications (212, 214, 216, 218) in the set of applications (212, 214, 216, 218) run by the processor that are configured to receive the intercepted message. run a set of one or more applications; receive a message from a first application in the set of one or more applications (212, 214, 216, 218) run by the processor, wherein the received message indicates a user action; determine if the user action is in a predetermined set of user actions; and when the user action is in the predetermined set of user actions, create an intercepted message comprising a copy of the received message; append sensor data to the intercepted message, wherein the sensor data comprises at least one of a timestamp and a location; receive one intercepted message from the operating system; read the sensor data corresponding to the received intercepted message, determine a context information based on the received intercepted message and the sensor data; append the context information to the received intercepted message, determine, using a random indexing algorithm, a set of predicted user actions (604, 606, 608, 610, 612) based on the context information and the received intercepted message, and broadcast the intercepted message to one or more applications (212, 214, 216, 218) in the set of applications (212, 214, 216, 218) run by the processor that are configured to receive the intercepted message.