diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/PreviewDiffUrl.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/PreviewDiffUrl.java
new file mode 100644
index 0000000..366ad4a
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/PreviewDiffUrl.java
@@ -0,0 +1,66 @@
+// Copyright (C) 2015 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.xdocs;
+
+import com.google.gerrit.extensions.annotations.PluginName;
+import com.google.inject.Inject;
+
+public class PreviewDiffUrl {
+  private final String pluginName;
+
+  @Inject
+  PreviewDiffUrl(@PluginName String pluginName) {
+    this.pluginName = pluginName;
+  }
+
+  public String getSideBySideUrl(int changeId, Integer patchSetIdA,
+      int patchSetIdB, String path) {
+    return getUrl(changeId, patchSetIdA, patchSetIdB, path, false);
+  }
+
+  public String getSideBySideIconUrl() {
+    return "plugins/" + pluginName + "/static/sideBySideDiffPreview.png";
+  }
+
+  public String getUnifiedUrl(int changeId, Integer patchSetIdA,
+      int patchSetIdB, String path) {
+    return getUrl(changeId, patchSetIdA, patchSetIdB, path, true);
+  }
+
+  public String getUnifiedIconUrl() {
+    return "plugins/" + pluginName + "/static/unifiedDiffPreview.png";
+  }
+
+  private String getUrl(int changeId, Integer patchSetIdA, int patchSetIdB,
+      String path, boolean unified) {
+    StringBuilder url = new StringBuilder();
+    url.append("#/x/");
+    url.append(pluginName);
+    url.append("/c/");
+    url.append(changeId);
+    url.append("/");
+    if (patchSetIdA != null) {
+      url.append(patchSetIdA);
+      url.append("..");
+    }
+    url.append(patchSetIdB);
+    url.append("/");
+    url.append(path);
+    if (unified) {
+      url.append(",unified");
+    }
+    return url.toString();
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/SideBySideDiffPreviewWebLink.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/SideBySideDiffPreviewWebLink.java
index 27c04bf..0205047 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/SideBySideDiffPreviewWebLink.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/SideBySideDiffPreviewWebLink.java
@@ -14,7 +14,6 @@
 
 package com.googlesource.gerrit.plugins.xdocs;
 
-import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.common.DiffWebLinkInfo;
 import com.google.gerrit.extensions.webui.DiffWebLink;
 import com.google.inject.Inject;
@@ -25,14 +24,14 @@
 public class SideBySideDiffPreviewWebLink implements DiffWebLink {
   private static final String SIDE_BY_SIDE_PREVIEW_DIFF = "side-by-side preview diff";
 
-  private final String pluginName;
+  private final PreviewDiffUrl previewDiffUrl;
   private final Formatters formatters;
 
   @Inject
   SideBySideDiffPreviewWebLink(
-      @PluginName String pluginName,
+      PreviewDiffUrl previewDiffUrl,
       Formatters formatters) {
-    this.pluginName = pluginName;
+    this.previewDiffUrl = previewDiffUrl;
     this.formatters = formatters;
   }
 
@@ -46,26 +45,8 @@
     }
 
     return DiffWebLinkInfo.forSideBySideDiffView(SIDE_BY_SIDE_PREVIEW_DIFF,
-        "plugins/" + pluginName + "/static/sideBySideDiffPreview.png",
-        getUrl(pluginName, changeId, patchSetIdA, patchSetIdB, pathB),
+        previewDiffUrl.getSideBySideIconUrl(),
+        previewDiffUrl.getSideBySideUrl(changeId, patchSetIdA, patchSetIdB, pathB),
         Target.SELF);
   }
-
-  public static String getUrl(String pluginName, int changeId,
-      Integer patchSetIdA, int patchSetIdB, String path) {
-    StringBuilder url = new StringBuilder();
-    url.append("#/x/");
-    url.append(pluginName);
-    url.append("/c/");
-    url.append(changeId);
-    url.append("/");
-    if (patchSetIdA != null) {
-      url.append(patchSetIdA);
-      url.append("..");
-    }
-    url.append(patchSetIdB);
-    url.append("/");
-    url.append(path);
-    return url.toString();
-  }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/UnifiedDiffPreviewWebLink.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/UnifiedDiffPreviewWebLink.java
index f51c2b6..a3cdb6e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/UnifiedDiffPreviewWebLink.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/UnifiedDiffPreviewWebLink.java
@@ -14,7 +14,6 @@
 
 package com.googlesource.gerrit.plugins.xdocs;
 
-import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.common.DiffWebLinkInfo;
 import com.google.gerrit.extensions.webui.DiffWebLink;
 import com.google.inject.Inject;
@@ -25,14 +24,14 @@
 public class UnifiedDiffPreviewWebLink implements DiffWebLink {
   private static final String UNIFIED_PREVIEW_DIFF = "unified preview diff";
 
-  private final String pluginName;
+  private final PreviewDiffUrl previewDiffUrl;
   private final Formatters formatters;
 
   @Inject
   UnifiedDiffPreviewWebLink(
-      @PluginName String pluginName,
+      PreviewDiffUrl previewDiffUrl,
       Formatters formatters) {
-    this.pluginName = pluginName;
+    this.previewDiffUrl = previewDiffUrl;
     this.formatters = formatters;
   }
 
@@ -46,14 +45,8 @@
     }
 
     return DiffWebLinkInfo.forUnifiedDiffView(UNIFIED_PREVIEW_DIFF,
-        "plugins/" + pluginName + "/static/unifiedDiffPreview.png",
-        getUrl(pluginName, changeId, patchSetIdA, patchSetIdB, pathB),
+        previewDiffUrl.getUnifiedIconUrl(),
+        previewDiffUrl.getUnifiedUrl(changeId, patchSetIdA, patchSetIdB, pathB),
         Target.SELF);
   }
-
-  private static String getUrl(String pluginName, int changeId,
-      Integer patchSetIdA, int patchSetIdB, String path) {
-    return SideBySideDiffPreviewWebLink.getUrl(pluginName, changeId,
-        patchSetIdA, patchSetIdB, path) + ",unified";
-  }
 }
