diff --git a/app/src/main/java/com/google/reviewit/MainActivity.java b/app/src/main/java/com/google/reviewit/MainActivity.java
index d912862..d509f67 100644
--- a/app/src/main/java/com/google/reviewit/MainActivity.java
+++ b/app/src/main/java/com/google/reviewit/MainActivity.java
@@ -141,7 +141,15 @@
     if (getApp().getPrefs().showIntro) {
       displayView(new IntroFragment1());
     } else if (savedInstanceState == null) {
-      displayView(0);
+      switch (getApp().getPrefs().startScreen) {
+        case REVIEW_SCREEN:
+          displayView(1);
+          break;
+        case SORT_SCREEN:
+        default:
+          displayView(0);
+          break;
+      }
     }
   }
 
diff --git a/app/src/main/java/com/google/reviewit/ReviewChangesFragment.java b/app/src/main/java/com/google/reviewit/ReviewChangesFragment.java
index c6fd272..8966c64 100644
--- a/app/src/main/java/com/google/reviewit/ReviewChangesFragment.java
+++ b/app/src/main/java/com/google/reviewit/ReviewChangesFragment.java
@@ -31,6 +31,7 @@
 
 import com.google.gerrit.extensions.restapi.RestApiException;
 import com.google.reviewit.app.Change;
+import com.google.reviewit.app.Preferences;
 import com.google.reviewit.app.QueryHandler;
 import com.google.reviewit.util.TaskObserver;
 import com.google.reviewit.widget.ChangeEntry;
@@ -59,6 +60,11 @@
 
     setHasOptionsMenu(true);
 
+    getApp().getPrefManager().setPreferences(
+        new Preferences.Builder(getApp().getPrefManager().getPreferences())
+            .setStartScreen(Preferences.StartScreen.REVIEW_SCREEN)
+            .build());
+
     TaskObserver.enableProgressBar(getWindow());
     init();
 
diff --git a/app/src/main/java/com/google/reviewit/SortChangesFragment.java b/app/src/main/java/com/google/reviewit/SortChangesFragment.java
index 2969891..b5c0a49 100644
--- a/app/src/main/java/com/google/reviewit/SortChangesFragment.java
+++ b/app/src/main/java/com/google/reviewit/SortChangesFragment.java
@@ -37,6 +37,7 @@
 
 import com.google.gerrit.extensions.client.ChangeStatus;
 import com.google.gerrit.extensions.restapi.RestApiException;
+import com.google.reviewit.app.Preferences;
 import com.google.reviewit.app.SortActionHandler;
 import com.google.reviewit.app.Change;
 import com.google.reviewit.app.ConfigManager;
@@ -78,6 +79,11 @@
       getSortActionHandler().pushBack();
     }
 
+    getApp().getPrefManager().setPreferences(
+        new Preferences.Builder(getApp().getPrefManager().getPreferences())
+            .setStartScreen(Preferences.StartScreen.SORT_SCREEN)
+            .build());
+
     TaskObserver.enableProgressBar(getWindow());
     init();
     display();
diff --git a/app/src/main/java/com/google/reviewit/app/PreferenceManager.java b/app/src/main/java/com/google/reviewit/app/PreferenceManager.java
index 229f4df..c6be90b 100644
--- a/app/src/main/java/com/google/reviewit/app/PreferenceManager.java
+++ b/app/src/main/java/com/google/reviewit/app/PreferenceManager.java
@@ -19,6 +19,7 @@
 
 public class PreferenceManager {
   private static final String KEY_SHOW_INTRO = "SHOW_INTRO";
+  private static final String KEY_START_SCREEN = "START_SCREEN";
   private static final String KEY_COLOR_BACKGROUND = "COLOR_BACKGROUND";
   private final static String KEY_SHOW_PATCH_SETS = "SHOW_PATCH_SETS";
   private final static String KEY_SHOW_POSITIVE_CODE_REVIEW_VOTES =
@@ -46,6 +47,8 @@
     if (preferences == null) {
       preferences = new Preferences.Builder()
           .setShowIntro(prefs.getBoolean(KEY_SHOW_INTRO, true))
+          .setStartScreen(Preferences.StartScreen.fromString(
+              prefs.getString(KEY_START_SCREEN, null)))
           .setColorBackground(prefs.getBoolean(KEY_COLOR_BACKGROUND, true))
           .setShowPatchSets(prefs.getBoolean(KEY_SHOW_PATCH_SETS, true))
           .setShowPositiveCodeReviewVotes(
@@ -64,6 +67,10 @@
   public void setPreferences(Preferences preferences) {
     SharedPreferences.Editor editor = prefs.edit();
     editor.putBoolean(KEY_SHOW_INTRO, preferences.showIntro);
+    editor.putString(KEY_START_SCREEN,
+        preferences.startScreen != null
+            ? preferences.startScreen.name()
+            : null);
     editor.putBoolean(KEY_COLOR_BACKGROUND, preferences.colorBackground);
     editor.putBoolean(KEY_SHOW_PATCH_SETS, preferences.showPatchSets);
     editor.putBoolean(KEY_SHOW_POSITIVE_CODE_REVIEW_VOTES,
diff --git a/app/src/main/java/com/google/reviewit/app/Preferences.java b/app/src/main/java/com/google/reviewit/app/Preferences.java
index fe95b29..e9e3ea7 100644
--- a/app/src/main/java/com/google/reviewit/app/Preferences.java
+++ b/app/src/main/java/com/google/reviewit/app/Preferences.java
@@ -18,12 +18,32 @@
  * User preferences.
  */
 public class Preferences {
+  public static enum StartScreen {
+    SORT_SCREEN, REVIEW_SCREEN;
+
+    public static StartScreen fromString(String s) {
+      if (s == null) {
+        return SORT_SCREEN;
+      }
+      try {
+        return valueOf(s);
+      } catch (IllegalArgumentException e) {
+        return SORT_SCREEN;
+      }
+    }
+  }
+
   /**
    * Whether the app introduction should be shown on app startup.
    */
   public final boolean showIntro;
 
   /**
+   * Which screen should be shown on app startup.
+   */
+  public final StartScreen startScreen;
+
+  /**
    * Whether the background should be colored to indicate Verified votings
    * and change states.
    */
@@ -62,10 +82,12 @@
   public final int commitMessageFontSize;
 
   private Preferences(
-      boolean showIntro, boolean colorBackground, boolean showPatchSets,
-      boolean showPositiveCodeReviewVotes, boolean showNegativeCodeReviewVotes,
-      boolean showComments, boolean showReviewers, int commitMessageFontSize) {
+      boolean showIntro, StartScreen startScreen, boolean colorBackground,
+      boolean showPatchSets, boolean showPositiveCodeReviewVotes,
+      boolean showNegativeCodeReviewVotes, boolean showComments,
+      boolean showReviewers, int commitMessageFontSize) {
     this.showIntro = showIntro;
+    this.startScreen = startScreen;
     this.colorBackground = colorBackground;
     this.showPatchSets = showPatchSets;
     this.showPositiveCodeReviewVotes = showPositiveCodeReviewVotes;
@@ -81,6 +103,7 @@
 
   public static class Builder {
     private boolean showIntro;
+    private StartScreen startScreen;
     private boolean colorBackground;
     private boolean showPatchSets;
     private boolean showPositiveCodeReviewVotes;
@@ -94,6 +117,7 @@
 
     public Builder(Preferences prefs) {
       this.showIntro = prefs.showIntro;
+      this.startScreen = prefs.startScreen;
       this.colorBackground = prefs.colorBackground;
       this.showPatchSets = prefs.showPatchSets;
       this.showPositiveCodeReviewVotes = prefs.showPositiveCodeReviewVotes;
@@ -108,6 +132,11 @@
       return this;
     }
 
+    public Builder setStartScreen(StartScreen startScreen) {
+      this.startScreen = startScreen;
+      return this;
+    }
+
     public Builder setColorBackground(boolean colorBackground) {
       this.colorBackground = colorBackground;
       return this;
@@ -146,9 +175,10 @@
     }
 
     public Preferences build() {
-      return new Preferences(showIntro, colorBackground, showPatchSets,
-          showPositiveCodeReviewVotes, showNegativeCodeReviewVotes,
-          showComments, showReviewers, commitMessageFontSize);
+      return new Preferences(showIntro, startScreen, colorBackground,
+          showPatchSets, showPositiveCodeReviewVotes,
+          showNegativeCodeReviewVotes, showComments, showReviewers,
+          commitMessageFontSize);
     }
   }
 }
