diff --git a/gerrit-common/src/main/java/com/google/gerrit/common/data/ChangeDetailService.java b/gerrit-common/src/main/java/com/google/gerrit/common/data/ChangeDetailService.java
index 621f52d..2fbda21 100644
--- a/gerrit-common/src/main/java/com/google/gerrit/common/data/ChangeDetailService.java
+++ b/gerrit-common/src/main/java/com/google/gerrit/common/data/ChangeDetailService.java
@@ -29,7 +29,9 @@
 
   void includedInDetail(Change.Id id, AsyncCallback<IncludedInDetail> callback);
 
-  void patchSetDetail(PatchSet.Id keyA, PatchSet.Id keyB,
+  void patchSetDetail(PatchSet.Id key, AsyncCallback<PatchSetDetail> callback);
+
+  void patchSetDetail2(PatchSet.Id baseId, PatchSet.Id key,
       AccountDiffPreference diffPrefs, AsyncCallback<PatchSetDetail> callback);
 
   @SignInRequired
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PatchSetComplexDisclosurePanel.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PatchSetComplexDisclosurePanel.java
index 364d710..740e08c 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PatchSetComplexDisclosurePanel.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PatchSetComplexDisclosurePanel.java
@@ -539,7 +539,7 @@
       diffPrefs = patchTable.getPreferences().get();
     }
 
-    Util.DETAIL_SVC.patchSetDetail(patchSet.getId(), diffBaseId, diffPrefs,
+    Util.DETAIL_SVC.patchSetDetail2(diffBaseId, patchSet.getId(), diffPrefs,
         new GerritCallback<PatchSetDetail>() {
           @Override
           public void onSuccess(PatchSetDetail result) {
@@ -575,7 +575,7 @@
         diffPrefs = new ListenableAccountDiffPreference().get();
       }
 
-      Util.DETAIL_SVC.patchSetDetail(patchSet.getId(), diffBaseId, diffPrefs,
+      Util.DETAIL_SVC.patchSetDetail2(diffBaseId, patchSet.getId(), diffPrefs,
           new GerritCallback<PatchSetDetail>() {
             public void onSuccess(final PatchSetDetail result) {
               ensureLoaded(result);
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchScreen.java
index c815097..736d1f0 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchScreen.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchScreen.java
@@ -320,7 +320,7 @@
   protected void onLoad() {
     super.onLoad();
     if (patchSetDetail == null) {
-      Util.DETAIL_SVC.patchSetDetail(idSideB, null, null,
+      Util.DETAIL_SVC.patchSetDetail(idSideB,
           new GerritCallback<PatchSetDetail>() {
             @Override
             public void onSuccess(PatchSetDetail result) {
@@ -403,7 +403,7 @@
       commitMessageBlock.display(patchSetDetail.getInfo().getMessage());
     } else {
       commitMessageBlock.setVisible(false);
-      Util.DETAIL_SVC.patchSetDetail(idSideB, null, null,
+      Util.DETAIL_SVC.patchSetDetail(idSideB,
           new GerritCallback<PatchSetDetail>() {
             @Override
             public void onSuccess(PatchSetDetail result) {
@@ -500,7 +500,7 @@
         final PatchSet.Id psid = patchKey.getParentKey();
         fileList = new PatchTable(prefs);
         fileList.setSavePointerId("PatchTable " + psid);
-        Util.DETAIL_SVC.patchSetDetail(psid, null, null,
+        Util.DETAIL_SVC.patchSetDetail(psid,
             new GerritCallback<PatchSetDetail>() {
               public void onSuccess(final PatchSetDetail result) {
                 fileList.display(result);
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/ChangeDetailServiceImpl.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/ChangeDetailServiceImpl.java
index f131123..fa0579e 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/ChangeDetailServiceImpl.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/ChangeDetailServiceImpl.java
@@ -52,10 +52,14 @@
     includedInDetail.create(id).to(callback);
   }
 
-  public void patchSetDetail(final PatchSet.Id idA, final PatchSet.Id idB,
-      final AccountDiffPreference diffPrefs,
-      final AsyncCallback<PatchSetDetail> callback) {
-    patchSetDetail.create(idA, idB, diffPrefs).to(callback);
+  public void patchSetDetail(PatchSet.Id id,
+      AsyncCallback<PatchSetDetail> callback) {
+    patchSetDetail2(null, id, null, callback);
+  }
+
+  public void patchSetDetail2(PatchSet.Id baseId, PatchSet.Id id,
+      AccountDiffPreference diffPrefs, AsyncCallback<PatchSetDetail> callback) {
+    patchSetDetail.create(baseId, id, diffPrefs).to(callback);
   }
 
   public void patchSetPublishDetail(final PatchSet.Id id,
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/PatchSetDetailFactory.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/PatchSetDetailFactory.java
index 6865b2b..f478d66 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/PatchSetDetailFactory.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/PatchSetDetailFactory.java
@@ -56,8 +56,10 @@
     LoggerFactory.getLogger(PatchSetDetailFactory.class);
 
   interface Factory {
-    PatchSetDetailFactory create(@Assisted("psIdNew") PatchSet.Id psIdA,
-        @Assisted("psIdOld") PatchSet.Id psIdB, AccountDiffPreference diffPrefs);
+    PatchSetDetailFactory create(
+        @Assisted("psIdBase") @Nullable PatchSet.Id psIdBase,
+        @Assisted("psIdNew") PatchSet.Id psIdNew,
+        @Nullable AccountDiffPreference diffPrefs);
   }
 
   private final PatchSetInfoFactory infoFactory;
@@ -66,8 +68,8 @@
   private final ChangeControl.Factory changeControlFactory;
 
   private Project.NameKey projectKey;
+  private final PatchSet.Id psIdBase;
   private final PatchSet.Id psIdNew;
-  private final PatchSet.Id psIdOld;
   private final AccountDiffPreference diffPrefs;
   private ObjectId oldId;
   private ObjectId newId;
@@ -80,16 +82,16 @@
   PatchSetDetailFactory(final PatchSetInfoFactory psif, final ReviewDb db,
       final PatchListCache patchListCache,
       final ChangeControl.Factory changeControlFactory,
+      @Assisted("psIdBase") @Nullable final PatchSet.Id psIdBase,
       @Assisted("psIdNew") final PatchSet.Id psIdNew,
-      @Assisted("psIdOld") @Nullable final PatchSet.Id psIdOld,
       @Assisted @Nullable final AccountDiffPreference diffPrefs) {
     this.infoFactory = psif;
     this.db = db;
     this.patchListCache = patchListCache;
     this.changeControlFactory = changeControlFactory;
 
+    this.psIdBase = psIdBase;
     this.psIdNew = psIdNew;
-    this.psIdOld = psIdOld;
     this.diffPrefs = diffPrefs;
   }
 
@@ -106,9 +108,9 @@
 
     final PatchList list;
 
-    if (psIdOld != null) {
+    if (psIdBase != null) {
+      oldId = toObjectId(psIdBase);
       newId = toObjectId(psIdNew);
-      oldId = psIdOld != null ? toObjectId(psIdOld) : null;
 
       projectKey = control.getProject().getNameKey();
 
