diff --git a/example-webLinkBranch/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkbranch/HelloWeblink.java b/example-webLinkBranch/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkbranch/HelloWeblink.java
index a82ac93..1a73ada 100644
--- a/example-webLinkBranch/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkbranch/HelloWeblink.java
+++ b/example-webLinkBranch/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkbranch/HelloWeblink.java
@@ -16,21 +16,11 @@
 
 import com.google.gerrit.extensions.common.WebLinkInfo;
 import com.google.gerrit.extensions.webui.BranchWebLink;
-import com.google.gerrit.extensions.webui.FileHistoryWebLink;
-import com.google.gerrit.extensions.webui.PatchSetWebLink;
-import com.google.gerrit.extensions.webui.ProjectWebLink;
 
-public class HelloWeblink implements PatchSetWebLink, ProjectWebLink,
-    BranchWebLink, FileHistoryWebLink {
+public class HelloWeblink implements BranchWebLink {
   private String name = "HelloLink";
-  private String placeHolderUrlProject =
-      "http://my.hellolink.com/project=%s";
   private String placeHolderUrlProjectBranch =
       "http://my.hellolink.com/project=%s-branch=%s";
-  private String placeHolderUrlProjectCommit =
-      placeHolderUrlProject + "/commit=%s";
-  private String placeHolderUrlProjectRevisionFileName =
-      placeHolderUrlProject + "-revision=%s-file=%s";
   private String myImageUrl = "http://placehold.it/16x16.gif";
 
   @Override
@@ -40,30 +30,4 @@
         String.format(placeHolderUrlProjectBranch, projectName, branchName),
         Target.BLANK);
   }
-
-  @Override
-  public WebLinkInfo getProjectWeblink(String projectName) {
-    return new WebLinkInfo(name,
-        myImageUrl,
-        String.format(placeHolderUrlProject, projectName),
-        Target.BLANK);
-  }
-
-  @Override
-  public WebLinkInfo getPatchSetWebLink(String projectName, String commit) {
-    return new WebLinkInfo(name,
-        myImageUrl,
-        String.format(placeHolderUrlProjectCommit, projectName, commit),
-        Target.BLANK);
-  }
-
-  @Override
-  public WebLinkInfo getFileHistoryWebLink(String projectName, String revision,
-      String fileName) {
-    return new WebLinkInfo(name,
-        myImageUrl,
-        String.format(placeHolderUrlProjectRevisionFileName, projectName,
-            revision, fileName),
-        Target.BLANK);
-  }
 }
diff --git a/example-webLinkFileHistory/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkfilehistory/HelloWeblink.java b/example-webLinkFileHistory/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkfilehistory/HelloWeblink.java
index 32fa97c..e5462c8 100644
--- a/example-webLinkFileHistory/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkfilehistory/HelloWeblink.java
+++ b/example-webLinkFileHistory/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkfilehistory/HelloWeblink.java
@@ -15,49 +15,17 @@
 package com.googlesource.gerrit.plugins.examples.weblinkfilehistory;
 
 import com.google.gerrit.extensions.common.WebLinkInfo;
-import com.google.gerrit.extensions.webui.BranchWebLink;
 import com.google.gerrit.extensions.webui.FileHistoryWebLink;
-import com.google.gerrit.extensions.webui.PatchSetWebLink;
-import com.google.gerrit.extensions.webui.ProjectWebLink;
 
-public class HelloWeblink implements PatchSetWebLink, ProjectWebLink,
-    BranchWebLink, FileHistoryWebLink {
+public class HelloWeblink implements FileHistoryWebLink {
   private String name = "HelloLink";
   private String placeHolderUrlProject =
       "http://my.hellolink.com/project=%s";
-  private String placeHolderUrlProjectBranch =
-      "http://my.hellolink.com/project=%s-branch=%s";
-  private String placeHolderUrlProjectCommit =
-      placeHolderUrlProject + "/commit=%s";
   private String placeHolderUrlProjectRevisionFileName =
       placeHolderUrlProject + "-revision=%s-file=%s";
   private String myImageUrl = "http://placehold.it/16x16.gif";
 
   @Override
-  public WebLinkInfo getBranchWebLink(String projectName, String branchName) {
-    return new WebLinkInfo(name,
-        myImageUrl,
-        String.format(placeHolderUrlProjectBranch, projectName, branchName),
-        Target.BLANK);
-  }
-
-  @Override
-  public WebLinkInfo getProjectWeblink(String projectName) {
-    return new WebLinkInfo(name,
-        myImageUrl,
-        String.format(placeHolderUrlProject, projectName),
-        Target.BLANK);
-  }
-
-  @Override
-  public WebLinkInfo getPatchSetWebLink(String projectName, String commit) {
-    return new WebLinkInfo(name,
-        myImageUrl,
-        String.format(placeHolderUrlProjectCommit, projectName, commit),
-        Target.BLANK);
-  }
-
-  @Override
   public WebLinkInfo getFileHistoryWebLink(String projectName, String revision,
       String fileName) {
     return new WebLinkInfo(name,
diff --git a/example-webLinkPatchSet/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkpatchset/HelloWeblink.java b/example-webLinkPatchSet/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkpatchset/HelloWeblink.java
index 333ee0f..6ec68ac 100644
--- a/example-webLinkPatchSet/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkpatchset/HelloWeblink.java
+++ b/example-webLinkPatchSet/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkpatchset/HelloWeblink.java
@@ -15,55 +15,21 @@
 package com.googlesource.gerrit.plugins.examples.weblinkpatchset;
 
 import com.google.gerrit.extensions.common.WebLinkInfo;
-import com.google.gerrit.extensions.webui.BranchWebLink;
-import com.google.gerrit.extensions.webui.FileHistoryWebLink;
 import com.google.gerrit.extensions.webui.PatchSetWebLink;
-import com.google.gerrit.extensions.webui.ProjectWebLink;
 
-public class HelloWeblink implements PatchSetWebLink, ProjectWebLink,
-    BranchWebLink, FileHistoryWebLink {
+public class HelloWeblink implements PatchSetWebLink {
   private String name = "HelloLink";
   private String placeHolderUrlProject =
       "http://my.hellolink.com/project=%s";
-  private String placeHolderUrlProjectBranch =
-      "http://my.hellolink.com/project=%s-branch=%s";
   private String placeHolderUrlProjectCommit =
       placeHolderUrlProject + "/commit=%s";
-  private String placeHolderUrlProjectRevisionFileName =
-      placeHolderUrlProject + "-revision=%s-file=%s";
   private String myImageUrl = "http://placehold.it/16x16.gif";
 
   @Override
-  public WebLinkInfo getBranchWebLink(String projectName, String branchName) {
-    return new WebLinkInfo(name,
-        myImageUrl,
-        String.format(placeHolderUrlProjectBranch, projectName, branchName),
-        Target.BLANK);
-  }
-
-  @Override
-  public WebLinkInfo getProjectWeblink(String projectName) {
-    return new WebLinkInfo(name,
-        myImageUrl,
-        String.format(placeHolderUrlProject, projectName),
-        Target.BLANK);
-  }
-
-  @Override
   public WebLinkInfo getPatchSetWebLink(String projectName, String commit) {
     return new WebLinkInfo(name,
         myImageUrl,
         String.format(placeHolderUrlProjectCommit, projectName, commit),
         Target.BLANK);
   }
-
-  @Override
-  public WebLinkInfo getFileHistoryWebLink(String projectName, String revision,
-      String fileName) {
-    return new WebLinkInfo(name,
-        myImageUrl,
-        String.format(placeHolderUrlProjectRevisionFileName, projectName,
-            revision, fileName),
-        Target.BLANK);
-  }
 }
diff --git a/example-webLinkProject/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkproject/HelloWeblink.java b/example-webLinkProject/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkproject/HelloWeblink.java
index f1da053..91ba9d0 100644
--- a/example-webLinkProject/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkproject/HelloWeblink.java
+++ b/example-webLinkProject/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkproject/HelloWeblink.java
@@ -20,50 +20,17 @@
 import com.google.gerrit.extensions.webui.PatchSetWebLink;
 import com.google.gerrit.extensions.webui.ProjectWebLink;
 
-public class HelloWeblink implements PatchSetWebLink, ProjectWebLink,
-    BranchWebLink, FileHistoryWebLink {
+public class HelloWeblink implements ProjectWebLink {
   private String name = "HelloLink";
   private String placeHolderUrlProject =
       "http://my.hellolink.com/project=%s";
-  private String placeHolderUrlProjectBranch =
-      "http://my.hellolink.com/project=%s-branch=%s";
-  private String placeHolderUrlProjectCommit =
-      placeHolderUrlProject + "/commit=%s";
-  private String placeHolderUrlProjectRevisionFileName =
-      placeHolderUrlProject + "-revision=%s-file=%s";
   private String myImageUrl = "http://placehold.it/16x16.gif";
 
   @Override
-  public WebLinkInfo getBranchWebLink(String projectName, String branchName) {
-    return new WebLinkInfo(name,
-        myImageUrl,
-        String.format(placeHolderUrlProjectBranch, projectName, branchName),
-        Target.BLANK);
-  }
-
-  @Override
   public WebLinkInfo getProjectWeblink(String projectName) {
     return new WebLinkInfo(name,
         myImageUrl,
         String.format(placeHolderUrlProject, projectName),
         Target.BLANK);
   }
-
-  @Override
-  public WebLinkInfo getPatchSetWebLink(String projectName, String commit) {
-    return new WebLinkInfo(name,
-        myImageUrl,
-        String.format(placeHolderUrlProjectCommit, projectName, commit),
-        Target.BLANK);
-  }
-
-  @Override
-  public WebLinkInfo getFileHistoryWebLink(String projectName, String revision,
-      String fileName) {
-    return new WebLinkInfo(name,
-        myImageUrl,
-        String.format(placeHolderUrlProjectRevisionFileName, projectName,
-            revision, fileName),
-        Target.BLANK);
-  }
 }
