 #endif
 
     int throttleIn = getThrottleSample();
-    int throttleOut = 126 + ((float)(1023 - throttleIn)) / 1023.0 * 126.0 ;
+    int throttleSensorOut = 126 + ((float)(1023 - throttleIn)) / 1023.0 * 126.0 ;
+
+
+    while (Bluetooth.available()) {
+        switch (Bluetooth.read()) {
+            case 'X':
+                errorStop();
+                break;
+            case 'G':
+                throttleBluetoothOut = 126 + constrain(Bluetooth.parseInt()*1.26, 0, 126);
+                break;
+            default:
+                break;
+        }
+        if (Bluetooth.available() && Bluetooth.read() == '\n') continue;
+    }
 
 #if SendThrottleDebug
     Bluetooth.print('E');
     Bluetooth.print(throttleIn);
     Bluetooth.print(',');
-    Bluetooth.print(throttleOut);
+    Bluetooth.print(((int)throttleSensorOut) * 8);
+    Bluetooth.print(',');
+    Bluetooth.print(((int)throttleBluetoothOut) * 8);
     Bluetooth.println();
 #endif
 
-    analogWrite(ThrottleOut, (byte)throttleOut);
+    analogWrite(ThrottleOut, (byte) ((throttleBluetoothOut > 0) ? throttleBluetoothOut : throttleSensorOut) );
 }
 
 inline float getUnfilteredXAcc() {

// declarations
void setupBluetooth();
bool setupAccelerometer();
inline float getUnfilteredXAcc();
inline float getXAccSample();
void calibrateZeroVel();

int getThrottleSample() {
    int throttleIn = 0; // avarage accumulator
    int sample = 0;
    const unsigned ThrottleSamples = 12;

    for (unsigned i = 0; i < ThrottleSamples; ++i) {
        sample = analogRead(ThrottleSensor1);
