diff --git a/interface/resources/controllers/standard.json b/interface/resources/controllers/standard.json
index b0654daaa7..9e3b2f4d13 100644
--- a/interface/resources/controllers/standard.json
+++ b/interface/resources/controllers/standard.json
@@ -4,7 +4,10 @@
         { "from": "Standard.LY", "to": "Actions.TranslateZ" },
 
         { "from": "Standard.LX",
-          "when": [ "Application.InHMD", "Application.SnapTurn" ],
+          "when": [
+            "Application.InHMD", "!Application.AdvancedMovement",
+            "Application.SnapTurn", "!Standard.RX"
+          ],
           "to": "Actions.StepYaw",
           "filters":
             [
@@ -14,7 +17,12 @@
                 { "type": "scale", "scale": 22.5 }
             ]
         },
-        { "from": "Standard.LX", "to": "Actions.TranslateX" },
+        { "from": "Standard.LX", "to": "Actions.TranslateX",
+          "when": [ "Application.AdvancedMovement" ]
+        },
+        { "from": "Standard.LX", "to": "Actions.Yaw",
+          "when": [ "!Application.AdvancedMovement", "!Application.SnapTurn" ]
+        },
 
         { "from": "Standard.RX",
           "when": [ "Application.InHMD", "Application.SnapTurn" ],
@@ -27,8 +35,10 @@
                 { "type": "scale", "scale": 22.5 }
             ]
         },
-        { "from": "Standard.RX", "to": "Actions.Yaw" },
-        
+        { "from": "Standard.RX", "to": "Actions.Yaw",
+          "when": [ "!Application.SnapTurn" ]
+        },
+
         { "from": "Standard.RY",
           "when": "Application.Grounded",
           "to": "Actions.Up",
diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp
index 4bebc80bd1..706fd424fd 100644
--- a/interface/src/Application.cpp
+++ b/interface/src/Application.cpp
@@ -423,6 +423,7 @@ static const QString STATE_CAMERA_THIRD_PERSON = "CameraThirdPerson";
 static const QString STATE_CAMERA_ENTITY = "CameraEntity";
 static const QString STATE_CAMERA_INDEPENDENT = "CameraIndependent";
 static const QString STATE_SNAP_TURN = "SnapTurn";
+static const QString STATE_ADVANCED_MOVEMENT_CONTROLS = "AdvancedMovement";
 static const QString STATE_GROUNDED = "Grounded";
 static const QString STATE_NAV_FOCUSED = "NavigationFocused";
 
@@ -513,7 +514,7 @@ bool setupEssentials(int& argc, char** argv) {
     DependencyManager::set<MessagesClient>();
     controller::StateController::setStateVariables({ { STATE_IN_HMD, STATE_CAMERA_FULL_SCREEN_MIRROR,
                     STATE_CAMERA_FIRST_PERSON, STATE_CAMERA_THIRD_PERSON, STATE_CAMERA_ENTITY, STATE_CAMERA_INDEPENDENT,
-                    STATE_SNAP_TURN, STATE_GROUNDED, STATE_NAV_FOCUSED } });
+                    STATE_SNAP_TURN, STATE_ADVANCED_MOVEMENT_CONTROLS, STATE_GROUNDED, STATE_NAV_FOCUSED } });
     DependencyManager::set<UserInputMapper>();
     DependencyManager::set<controller::ScriptingInterface, ControllerScriptingInterface>();
     DependencyManager::set<InterfaceParentFinder>();
@@ -1127,6 +1128,10 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
     _applicationStateDevice->setInputVariant(STATE_SNAP_TURN, []() -> float {
         return qApp->getMyAvatar()->getSnapTurn() ? 1 : 0;
     });
+    _applicationStateDevice->setInputVariant(STATE_ADVANCED_MOVEMENT_CONTROLS, []() -> float {
+        return qApp->getMyAvatar()->useAdvancedMovementControls() ? 1 : 0;
+    });
+
     _applicationStateDevice->setInputVariant(STATE_GROUNDED, []() -> float {
         return qApp->getMyAvatar()->getCharacterController()->onGround() ? 1 : 0;
     });
diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp
index 969268c549..b045d2c005 100644
--- a/interface/src/avatar/MyAvatar.cpp
+++ b/interface/src/avatar/MyAvatar.cpp
@@ -104,6 +104,7 @@ MyAvatar::MyAvatar(RigPointer rig) :
     _eyeContactTarget(LEFT_EYE),
     _realWorldFieldOfView("realWorldFieldOfView",
                           DEFAULT_REAL_WORLD_FIELD_OF_VIEW_DEGREES),
+    _useAdvancedMovementControls("advancedMovementForHandControllersIsChecked", false),
     _hmdSensorMatrix(),
     _hmdSensorOrientation(),
     _hmdSensorPosition(),
diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h
index 3cc665b533..1a5883edca 100644
--- a/interface/src/avatar/MyAvatar.h
+++ b/interface/src/avatar/MyAvatar.h
@@ -171,6 +171,8 @@ public:
     Q_INVOKABLE void setHMDLeanRecenterEnabled(bool value) { _hmdLeanRecenterEnabled = value; }
     Q_INVOKABLE bool getHMDLeanRecenterEnabled() const { return _hmdLeanRecenterEnabled; }
 
+    bool useAdvancedMovementControls() const { return _useAdvancedMovementControls.get(); }
+
     // get/set avatar data
     void saveData();
     void loadData();
@@ -423,6 +425,7 @@ private:
     glm::vec3 _trackedHeadPosition;
 
     Setting::Handle<float> _realWorldFieldOfView;
+    Setting::Handle<bool> _useAdvancedMovementControls;
 
     // private methods
     void updateOrientation(float deltaTime);