A system for providing a therapy to a user comprising: one or more motion sensors configured to measure motion data of the user, a mobile computing device connected to or held by the user and comprising or connected to the one or more motion sensors to receive the motion data, the mobile computing device comprising a sensory output device configured to direct the user in the performance of exercises, and at least one processor configured to: (a) receive a therapy start signal, (b) receive a baseline user motion level, (c) adjust the sensitivity of the one or more motion sensors according to the baseline user motion level, (d) select an exercise having a difficulty level which matches the baseline user motion level, (e) cause the sensory output device to direct the user to perform the exercise, (f) receive user motion data measured during user performance of the exercise from the one or more motion sensors, (g) use the user motion data to establish a further user motion level, (h) compare the further user motion level with the baseline user motion level, (i) when the further user motion level is equal to or greater than the baseline user motion level, set the baseline user motion level to a higher user motion level and go to (k), (j) when the further user motion level is less than the baseline user motion level, set the baseline user motion level to a lower user motion level and go to (k), (k) when a therapy stop signal is not received, return to (d), (l) when a therapy stop signal is received, record the baseline user motion level and cause the sensory output device to direct the user to stop the therapy, wherein the system is configured to: (m) scan the mobile computing device to determine the operating system of the mobile computing device, (n) determine whether each of the one or more motion sensors is an accelerometer sensor, a gyroscope sensor or a global positioning system sensor, (o) scan the one or more motion sensors to determine which of the motion sensors are currently available to measure motion data of the user, and (p) use determinations from steps (m), (n) and (o) to further calibrate the sensitivity of the one or more motion sensors. (a) receive a therapy start signal, (b) receive a baseline user motion level, (c) adjust the sensitivity of the one or more motion sensors according to the baseline user motion level, (d) select an exercise having a difficulty level which matches the baseline user motion level, (e) cause the sensory output device to direct the user to perform the exercise, (f) receive user motion data measured during user performance of the exercise from the one or more motion sensors, (g) use the user motion data to establish a further user motion level, (h) compare the further user motion level with the baseline user motion level, (i) when the further user motion level is equal to or greater than the baseline user motion level, set the baseline user motion level to a higher user motion level and go to (k), (j) when the further user motion level is less than the baseline user motion level, set the baseline user motion level to a lower user motion level and go to (k), (k) when a therapy stop signal is not received, return to (d), (l) when a therapy stop signal is received, record the baseline user motion level and cause the sensory output device to direct the user to stop the therapy, (m) scan the mobile computing device to determine the operating system of the mobile computing device, (n) determine whether each of the one or more motion sensors is an accelerometer sensor, a gyroscope sensor or a global positioning system sensor, (o) scan the one or more motion sensors to determine which of the motion sensors are currently available to measure motion data of the user, and (p) use determinations from steps (m), (n) and (o) to further calibrate the sensitivity of the one or more motion sensors.