diff --git a/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java b/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java
index 3c5eba7..40c21bd 100644
--- a/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java
+++ b/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java
@@ -434,6 +434,11 @@
     public static final String USE_BACK_GESTURE_ML_MODEL = "use_back_gesture_ml_model";
 
     /**
+     * (string) The name of the ML model for Back Gesture.
+     */
+    public static final String BACK_GESTURE_ML_MODEL_NAME = "back_gesture_ml_model_name";
+
+    /**
      * (float) Threshold for Back Gesture ML model prediction.
      */
     public static final String BACK_GESTURE_ML_MODEL_THRESHOLD = "back_gesture_ml_model_threshold";
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
index 4a77de2..eebf70b 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
@@ -190,7 +190,7 @@
      * This method is overridden in vendor specific implementation of Sys UI.
      */
     public BackGestureTfClassifierProvider createBackGestureTfClassifierProvider(
-            AssetManager am) {
+            AssetManager am, String modelName) {
         return new BackGestureTfClassifierProvider();
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java
index 3271abe..dc42997 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java
@@ -137,7 +137,9 @@
                             && (properties.getKeyset().contains(
                                     SystemUiDeviceConfigFlags.BACK_GESTURE_ML_MODEL_THRESHOLD)
                             || properties.getKeyset().contains(
-                                    SystemUiDeviceConfigFlags.USE_BACK_GESTURE_ML_MODEL))) {
+                                    SystemUiDeviceConfigFlags.USE_BACK_GESTURE_ML_MODEL)
+                            || properties.getKeyset().contains(
+                                    SystemUiDeviceConfigFlags.BACK_GESTURE_ML_MODEL_NAME))) {
                         updateMLModelState();
                     }
                 }
@@ -478,8 +480,10 @@
         }
 
         if (newState) {
+            String mlModelName = DeviceConfig.getString(DeviceConfig.NAMESPACE_SYSTEMUI,
+                    SystemUiDeviceConfigFlags.BACK_GESTURE_ML_MODEL_NAME, "backgesture");
             mBackGestureTfClassifierProvider = SystemUIFactory.getInstance()
-                    .createBackGestureTfClassifierProvider(mContext.getAssets());
+                    .createBackGestureTfClassifierProvider(mContext.getAssets(), mlModelName);
             mMLModelThreshold = DeviceConfig.getFloat(DeviceConfig.NAMESPACE_SYSTEMUI,
                     SystemUiDeviceConfigFlags.BACK_GESTURE_ML_MODEL_THRESHOLD, 0.9f);
             if (mBackGestureTfClassifierProvider.isActive()) {
@@ -529,21 +533,22 @@
         boolean withinRange = false;
         float results = -1;
 
+        // Disallow if we are in the bottom gesture area
+        if (y >= (mDisplaySize.y - mBottomGestureHeight)) {
+            return false;
+        }
+        // If the point is way too far (twice the margin), it is
+        // not interesting to us for logging purposes, nor we
+        // should process it.  Simply return false and keep
+        // mLogGesture = false.
+        if (x > 2 * (mEdgeWidthLeft + mLeftInset)
+                && x < (mDisplaySize.x - 2 * (mEdgeWidthRight + mRightInset))) {
+            return false;
+        }
+
         if (mUseMLModel &&  (results = getBackGesturePredictionsCategory(x, y)) != -1) {
             withinRange = results == 1 ? true : false;
         } else {
-            // Disallow if we are in the bottom gesture area
-            if (y >= (mDisplaySize.y - mBottomGestureHeight)) {
-                return false;
-            }
-            // If the point is way too far (twice the margin), it is
-            // not interesting to us for logging purposes, nor we
-            // should process it.  Simply return false and keep
-            // mLogGesture = false.
-            if (x > 2 * (mEdgeWidthLeft + mLeftInset)
-                    && x < (mDisplaySize.x - 2 * (mEdgeWidthRight + mRightInset))) {
-                return false;
-            }
             // Denotes whether we should proceed with the gesture.
             // Even if it is false, we may want to log it assuming
             // it is not invalid due to exclusion.
