A method for providing motion sensor data from motion sensors on a motion sensing device to an application program running on the motion sensing device, the method comprising: sampling motion sensor data output by the motion sensors at a first sampling rate, wherein the motion sensors include a plurality of rotational motion sensors and a plurality of linear motion sensors; storing the motion sensor data in a buffer; providing an application programming interface, API, layer which is in communication with the application program, wherein the application program initially sends commands to the API layer to provide settings that set up one or more motion algorithms to run in the background as callback functions, wherein the settings specify which types of information related to the buffered motion sensor data the application program wants during system operation, wherein the settings indicate to the API layer which of the one or more motion algorithms should run and which of the one or more motion algorithms provide information back to the application program about the device; and retrieving at least a portion of the buffered motion sensor data for the application program at a second sampling rate required by an application implemented by the application program, the second sampling rate being lower than the first sampling rate; examining all outputs of all of the motion sensors of the motion sensing device to determine information needed for the type of application implemented by the application program; selectively using only a subset of the axes of the motion sensors needed for the type of application after examining all of the motion sensor outputs; and turning off the operation or sensing function of the motion sensors or particular axes thereof that are not being used for any currently-running application. sampling motion sensor data output by the motion sensors at a first sampling rate, wherein the motion sensors include a plurality of rotational motion sensors and a plurality of linear motion sensors; storing the motion sensor data in a buffer; providing an application programming interface, API, layer which is in communication with the application program, wherein the application program initially sends commands to the API layer to provide settings that set up one or more motion algorithms to run in the background as callback functions, wherein the settings specify which types of information related to the buffered motion sensor data the application program wants during system operation, wherein the settings indicate to the API layer which of the one or more motion algorithms should run and which of the one or more motion algorithms provide information back to the application program about the device; and retrieving at least a portion of the buffered motion sensor data for the application program at a second sampling rate required by an application implemented by the application program, the second sampling rate being lower than the first sampling rate; examining all outputs of all of the motion sensors of the motion sensing device to determine information needed for the type of application implemented by the application program; selectively using only a subset of the axes of the motion sensors needed for the type of application after examining all of the motion sensor outputs; and turning off the operation or sensing function of the motion sensors or particular axes thereof that are not being used for any currently-running application.