diff --git a/src/com/android/car/rotary/Navigator.java b/src/com/android/car/rotary/Navigator.java
index f1c10e9..32598f8 100644
--- a/src/com/android/car/rotary/Navigator.java
+++ b/src/com/android/car/rotary/Navigator.java
@@ -59,44 +59,6 @@
         mHunNudgeDirection = showHunOnBottom ? View.FOCUS_DOWN : View.FOCUS_UP;
     }
 
-    /**
-     * Returns a target node representing a HUN FocusArea for a nudge in {@code direction}. The
-     * caller is responsible for recycling the result.
-     *
-     * @param windows    a list of windows to search from
-     * @param sourceNode the current focus
-     * @param direction  nudge direction, must be {@link View#FOCUS_UP}, {@link View#FOCUS_DOWN},
-     *                   {@link View#FOCUS_LEFT}, or {@link View#FOCUS_RIGHT}
-     * @return a node representing a HUN FocusArea, or null if the HUN isn't present, the nudge
-     *         isn't in the direction of the HUN, or the HUN contains no views that can take focus
-     */
-    @Nullable
-    AccessibilityNodeInfo findHunFocusArea(@NonNull List<AccessibilityWindowInfo> windows,
-            @NonNull AccessibilityNodeInfo sourceNode, int direction) {
-        if (direction != mHunNudgeDirection) {
-            return null;
-        }
-
-        // Find the HUN window, if any.
-        AccessibilityWindowInfo hunWindow = findHunWindow(windows);
-        if (hunWindow == null) {
-            return null;
-        }
-
-        // Find the target focus area within the HUN. The HUN may overlap the source node, in which
-        // case the geometric search will fail. The fallback is to use the first (typically only)
-        // focus area.
-        List<AccessibilityNodeInfo> hunFocusAreas = findFocusAreas(hunWindow);
-        removeEmptyFocusAreas(hunFocusAreas);
-        AccessibilityNodeInfo targetFocusArea =
-                chooseBestNudgeCandidate(sourceNode, hunFocusAreas, direction);
-        if (targetFocusArea == null && !hunFocusAreas.isEmpty()) {
-            targetFocusArea = copyNode(hunFocusAreas.get(0));
-        }
-        Utils.recycleNodes(hunFocusAreas);
-        return targetFocusArea;
-    }
-
     @Nullable
     AccessibilityWindowInfo findHunWindow(@NonNull List<AccessibilityWindowInfo> windows) {
         for (AccessibilityWindowInfo window : windows) {
diff --git a/src/com/android/car/rotary/RotaryService.java b/src/com/android/car/rotary/RotaryService.java
index dd0704d..daa27c5 100644
--- a/src/com/android/car/rotary/RotaryService.java
+++ b/src/com/android/car/rotary/RotaryService.java
@@ -1143,16 +1143,10 @@
 
     private boolean nudgeTo(@NonNull List<AccessibilityWindowInfo> windows, int direction) {
         // If the HUN is in the nudge direction, nudge to it.
-        AccessibilityNodeInfo hunFocusArea =
-                mNavigator.findHunFocusArea(windows, mFocusedNode, direction);
-        boolean success;
-        if (hunFocusArea != null) {
-            success = performFocusAction(hunFocusArea);
-            L.d(success ? "Nudge to HUN" : " Failed to nudge to HUN " + hunFocusArea);
-            hunFocusArea.recycle();
-            if (success) {
-                return true;
-            }
+        boolean hunFocusResult = focusHunsWindow(windows, direction);
+        if (hunFocusResult) {
+            L.d("Nudge to HUN successful");
+            return true;
         }
 
         // Try to move the focus to the shortcut node.
@@ -1197,7 +1191,7 @@
         if (Utils.isFocusArea(targetFocusArea)) {
             arguments.clear();
             arguments.putInt(NUDGE_DIRECTION, direction);
-            success = performFocusAction(targetFocusArea, arguments);
+            boolean success = performFocusAction(targetFocusArea, arguments);
             L.d("Nudging to the nearest FocusArea "
                     + (success ? "succeeded" : "failed: " + targetFocusArea));
             targetFocusArea.recycle();
@@ -1206,7 +1200,7 @@
 
         // targetFocusArea is an implicit FocusArea (i.e., the root node of a window without any
         // FocusAreas), so restore the focus in it.
-        success = restoreDefaultFocus(targetFocusArea);
+        boolean success = restoreDefaultFocus(targetFocusArea);
         L.d("Nudging to the nearest implicit focus area "
                 + (success ? "succeeded" : "failed: " + targetFocusArea));
         targetFocusArea.recycle();
