diff --git a/java/com/android/dialer/main/impl/MainActivity.java b/java/com/android/dialer/main/impl/MainActivity.java
index fd32aa2..ca9d478 100644
--- a/java/com/android/dialer/main/impl/MainActivity.java
+++ b/java/com/android/dialer/main/impl/MainActivity.java
@@ -53,6 +53,7 @@
 import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.common.concurrent.UiListener;
 import com.android.dialer.compat.CompatUtils;
+import com.android.dialer.configprovider.ConfigProviderBindings;
 import com.android.dialer.configprovider.ConfigProviderComponent;
 import com.android.dialer.constants.ActivityRequestCodes;
 import com.android.dialer.contactsfragment.ContactsFragment;
@@ -76,6 +77,7 @@
 import com.android.dialer.searchfragment.list.NewSearchFragment.SearchFragmentListener;
 import com.android.dialer.smartdial.util.SmartDialPrefix;
 import com.android.dialer.speeddial.SpeedDialFragment;
+import com.android.dialer.storage.StorageComponent;
 import com.android.dialer.telecom.TelecomUtil;
 import com.android.dialer.util.DialerUtils;
 import com.android.dialer.util.TransactionSafeActivity;
@@ -92,6 +94,8 @@
         DisambigDialogDismissedListener {
 
   private static final String KEY_SAVED_LANGUAGE_CODE = "saved_language_code";
+  private static final String KEY_CURRENT_TAB = "current_tab";
+  private static final String KEY_LAST_TAB = "last_tab";
 
   private final MainOnContactSelectedListener onContactSelectedListener =
       new MainOnContactSelectedListener(this);
@@ -114,6 +118,9 @@
   /** Language the device was in last time {@link #onSaveInstanceState(Bundle)} was called. */
   private String savedLanguageCode;
 
+  private LastTabController lastTabController;
+
+  private BottomNavBar bottomNav;
   private View snackbarContainer;
   private UiListener<String> getLastOutgoingCallListener;
 
@@ -152,7 +159,7 @@
     MainToolbar toolbar = findViewById(R.id.toolbar);
     setSupportActionBar(findViewById(R.id.toolbar));
 
-    BottomNavBar bottomNav = findViewById(R.id.bottom_nav_bar);
+    bottomNav = findViewById(R.id.bottom_nav_bar);
     MainBottomNavBarBottomNavTabListener bottomNavTabListener =
         new MainBottomNavBarBottomNavTabListener(
             this, getFragmentManager(), getSupportFragmentManager());
@@ -179,17 +186,25 @@
             bottomNavTabListener, findViewById(R.id.contact_tile_drag_shadow_overlay));
     onDragDropListener = new MainOnDragDropListener();
 
+    lastTabController = new LastTabController(this, bottomNav);
+
     // Restore our view state if needed, else initialize as if the app opened for the first time
     if (savedInstanceState != null) {
       savedLanguageCode = savedInstanceState.getString(KEY_SAVED_LANGUAGE_CODE);
       searchController.onRestoreInstanceState(savedInstanceState);
+      bottomNav.selectTab(savedInstanceState.getInt(KEY_CURRENT_TAB));
     } else {
-      // TODO(calderwoodra): Implement last tab
-      bottomNav.selectTab(BottomNavBar.TabIndex.SPEED_DIAL);
+      lastTabController.selectLastTab();
     }
   }
 
   @Override
+  protected void onNewIntent(Intent intent) {
+    super.onNewIntent(intent);
+    lastTabController.selectLastTab();
+  }
+
+  @Override
   protected void onResume() {
     super.onResume();
     callLogFragmentListener.onActivityResume();
@@ -203,6 +218,7 @@
   @Override
   protected void onStop() {
     super.onStop();
+    lastTabController.onActivityStop();
     callLogFragmentListener.onActivityStop(
         isChangingConfigurations(), getSystemService(KeyguardManager.class).isKeyguardLocked());
   }
@@ -225,6 +241,7 @@
   protected void onSaveInstanceState(Bundle bundle) {
     super.onSaveInstanceState(bundle);
     bundle.putString(KEY_SAVED_LANGUAGE_CODE, CompatUtils.getLocale(this).getISO3Language());
+    bundle.putInt(KEY_CURRENT_TAB, bottomNav.getSelectedTab());
     searchController.onSaveInstanceState(bundle);
   }
 
@@ -847,4 +864,37 @@
       transaction.commit();
     }
   }
+
+  private static final class LastTabController {
+
+    private final Context context;
+    private final BottomNavBar bottomNavBar;
+    private final boolean isEnabled;
+
+    public LastTabController(Context context, BottomNavBar bottomNavBar) {
+      this.context = context;
+      this.bottomNavBar = bottomNavBar;
+      isEnabled = ConfigProviderBindings.get(context).getBoolean("last_tab_enabled", false);
+    }
+
+    /** Sets the last tab if the feature is enabled, otherwise defaults to speed dial. */
+    public void selectLastTab() {
+      @TabIndex int tabIndex = TabIndex.SPEED_DIAL;
+      if (isEnabled) {
+        tabIndex =
+            StorageComponent.get(context)
+                .unencryptedSharedPrefs()
+                .getInt(KEY_LAST_TAB, TabIndex.SPEED_DIAL);
+      }
+      bottomNavBar.selectTab(tabIndex);
+    }
+
+    public void onActivityStop() {
+      StorageComponent.get(context)
+          .unencryptedSharedPrefs()
+          .edit()
+          .putInt(KEY_LAST_TAB, bottomNavBar.getSelectedTab())
+          .apply();
+    }
+  }
 }
