diff --git a/BUCK b/BUCK
index 066e743..b28f661 100644
--- a/BUCK
+++ b/BUCK
@@ -17,6 +17,15 @@
   ]
 )
 
+java_test(
+  name = 'cookbook_tests',
+  srcs = glob(['src/test/java/**/*.java']),
+  deps = [
+    ':cookbook-plugin__plugin',
+    '//lib:junit',
+  ],
+)
+
 # TODO(davido): is this needed?
 # requires for bucklets/tools/eclipse/project.py to work
 # not sure, if this does something useful in standalone context
diff --git a/lib/gerrit/BUCK b/lib/gerrit/BUCK
index 80c9229..89c75df 100644
--- a/lib/gerrit/BUCK
+++ b/lib/gerrit/BUCK
@@ -1,7 +1,7 @@
 include_defs('//bucklets/maven_jar.bucklet')
 
-VER = '2.10'
-REPO = MAVEN_CENTRAL
+VER = '2.11-SNAPSHOT'
+REPO = MAVEN_LOCAL
 
 maven_jar(
   name = 'plugin-api',
diff --git a/lib/gwt/BUCK b/lib/gwt/BUCK
index e07bf39..394ed92 100644
--- a/lib/gwt/BUCK
+++ b/lib/gwt/BUCK
@@ -1,11 +1,11 @@
 include_defs('//bucklets/maven_jar.bucklet')
 
-VER = '2.6.1'
+VER = '2.7.0'
 
 maven_jar(
   name = 'user',
   id = 'com.google.gwt:gwt-user:' + VER,
-  sha1 = 'c078b1b8cc0281214b0eb458d2c283d039374fad',
+  sha1 = 'bdc7af42581745d3d79c2efe0b514f432b998a5b',
   license = 'Apache2.0',
   attach_source = False,
   deps = [
@@ -17,7 +17,7 @@
 maven_jar(
   name = 'dev',
   id = 'com.google.gwt:gwt-dev:' + VER,
-  sha1 = 'db237e4be0aa1fe43425d2c51ab5485dba211ddd',
+  sha1 = 'c2c3dd5baf648a0bb199047a818be5e560f48982',
   license = 'Apache2.0',
   attach_source = False,
   exclude = ['org/eclipse/jetty/*'],
diff --git a/lib/ow2/BUCK b/lib/ow2/BUCK
new file mode 100644
index 0000000..db6c76c
--- /dev/null
+++ b/lib/ow2/BUCK
@@ -0,0 +1,32 @@
+include_defs('//bucklets/maven_jar.bucklet')
+
+VERSION = '5.0.3'
+
+maven_jar(
+  name = 'ow2-asm',
+  id = 'org.ow2.asm:asm:' + VERSION,
+  sha1 = 'dcc2193db20e19e1feca8b1240dbbc4e190824fa',
+  license = 'ow2',
+)
+
+maven_jar(
+  name = 'ow2-asm-analysis',
+  id = 'org.ow2.asm:asm-analysis:' + VERSION,
+  sha1 = 'c7126aded0e8e13fed5f913559a0dd7b770a10f3',
+  license = 'ow2',
+)
+
+maven_jar(
+  name = 'ow2-asm-tree',
+  id = 'org.ow2.asm:asm-tree:' + VERSION,
+  sha1 = '287749b48ba7162fb67c93a026d690b29f410bed',
+  license = 'ow2',
+)
+
+maven_jar(
+  name = 'ow2-asm-util',
+  id = 'org.ow2.asm:asm-util:' + VERSION,
+  sha1 = '1512e5571325854b05fb1efce1db75fcced54389',
+  license = 'ow2',
+)
+
diff --git a/pom.xml b/pom.xml
index d30c292..b765d38 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,7 +22,7 @@
   <groupId>com.googlesource.gerrit.plugins</groupId>
   <artifactId>cookbook-plugin</artifactId>
   <packaging>jar</packaging>
-  <version>2.10</version>
+  <version>2.11-SNAPSHOT</version>
   <properties>
     <Gerrit-ApiType>plugin</Gerrit-ApiType>
     <Gerrit-ApiVersion>${project.version}</Gerrit-ApiVersion>
@@ -69,7 +69,7 @@
       <plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>gwt-maven-plugin</artifactId>
-        <version>2.6.1</version>
+        <version>2.7.0</version>
         <configuration>
           <module>com.googlesource.gerrit.plugins.cookbook.HelloForm</module>
           <disableClassMetadata>true</disableClassMetadata>
@@ -99,11 +99,12 @@
       <groupId>com.google.gerrit</groupId>
       <artifactId>gerrit-plugin-gwtui</artifactId>
       <version>${Gerrit-ApiVersion}</version>
+      <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>com.google.gwt</groupId>
       <artifactId>gwt-user</artifactId>
-      <version>2.6.1</version>
+      <version>2.7.0</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cookbook/Greetings.java b/src/main/java/com/googlesource/gerrit/plugins/cookbook/Greetings.java
index 6e02c05..58a9017 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cookbook/Greetings.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/Greetings.java
@@ -14,14 +14,14 @@
 
 package com.googlesource.gerrit.plugins.cookbook;
 
-import java.util.ArrayList;
-import java.util.Collection;
-
 import com.google.gerrit.extensions.restapi.Response;
 import com.google.gerrit.extensions.restapi.RestReadView;
 import com.google.gerrit.server.change.RevisionResource;
 import com.google.inject.Inject;
 
+import java.util.ArrayList;
+import java.util.Collection;
+
 class Greetings implements RestReadView<RevisionResource> {
 
   @Inject
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cookbook/HashtagValidator.java b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HashtagValidator.java
new file mode 100644
index 0000000..52f8680
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HashtagValidator.java
@@ -0,0 +1,42 @@
+// Copyright (C) 2014 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.cookbook;
+
+import com.google.gerrit.reviewdb.client.Change;
+import com.google.gerrit.server.validators.HashtagValidationListener;
+import com.google.gerrit.server.validators.ValidationException;
+
+import java.util.Set;
+
+public class HashtagValidator implements HashtagValidationListener {
+
+  @Override
+  public void validateHashtags(Change change, Set<String> toAdd, Set<String> toRemove)
+      throws ValidationException {
+    if (change.getProject().get().equals("plugins/cookbook")) {
+      if (toAdd.size() > 0) {
+        for (String hashtag : toAdd) {
+          if (!hashtag.startsWith("cookbook-")) {
+            throw new ValidationException("Invalid cookbook hashtag: " + hashtag);
+          }
+        }
+      }
+
+      if (toRemove.size() > 0) {
+        throw new ValidationException("Cannot remove cookbook hashtags");
+      }
+    }
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloForm.gwt.xml b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloForm.gwt.xml
index 6616bca..954f97b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloForm.gwt.xml
+++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloForm.gwt.xml
@@ -18,6 +18,7 @@
   <!-- Inherit the core Web Toolkit stuff.                        -->
   <inherits name="com.google.gwt.user.User"/>
   <!-- Other module inherits                                      -->
+  <inherits name="com.google.gerrit.GerritGwtUICommon"/>
   <inherits name="com.google.gerrit.Plugin"/>
   <inherits name="com.google.gwt.http.HTTP"/>
   <inherits name="com.google.gwt.json.JSON"/>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloProjectAction.java b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloProjectAction.java
index e977113..8057bb7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloProjectAction.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloProjectAction.java
@@ -14,7 +14,7 @@
 
 package com.googlesource.gerrit.plugins.cookbook;
 
-import com.google.common.base.Objects;
+import com.google.common.base.MoreObjects;
 import com.google.common.base.Strings;
 import com.google.gerrit.extensions.restapi.RestModifyView;
 import com.google.gerrit.extensions.webui.UiAction;
@@ -47,7 +47,7 @@
     return String.format("%s %s from project %s!",
         greeting,
         Strings.isNullOrEmpty(input.message)
-            ? Objects.firstNonNull(user.get().getUserName(), "world")
+            ? MoreObjects.firstNonNull(user.get().getUserName(), "world")
             : input.message,
         rsrc.getName());
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloRevisionAction.java b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloRevisionAction.java
index 21182ed..0cfbc10 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloRevisionAction.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloRevisionAction.java
@@ -14,7 +14,7 @@
 
 package com.googlesource.gerrit.plugins.cookbook;
 
-import com.google.common.base.Objects;
+import com.google.common.base.MoreObjects;
 import com.google.common.base.Strings;
 import com.google.gerrit.extensions.restapi.RestModifyView;
 import com.google.gerrit.extensions.webui.UiAction;
@@ -47,7 +47,7 @@
     return String.format("%s %s from change %s, patch set %d!",
         greeting,
         Strings.isNullOrEmpty(input.message)
-            ? Objects.firstNonNull(user.get().getUserName(), "world")
+            ? MoreObjects.firstNonNull(user.get().getUserName(), "world")
             : input.message,
         rev.getChange().getId().toString(),
         rev.getPatchSet().getPatchSetId());
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloTopMenu.java b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloTopMenu.java
index 4d98601..96e22d8 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloTopMenu.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloTopMenu.java
@@ -14,13 +14,13 @@
 
 package com.googlesource.gerrit.plugins.cookbook;
 
-import java.util.List;
-
 import com.google.common.collect.Lists;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.webui.TopMenu;
 import com.google.inject.Inject;
 
+import java.util.List;
+
 public class HelloTopMenu implements TopMenu {
   private final List<MenuEntry> menuEntries;
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloWeblink.java b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloWeblink.java
index 3a27191..0137ffa 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloWeblink.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloWeblink.java
@@ -14,28 +14,42 @@
 
 package com.googlesource.gerrit.plugins.cookbook;
 
+import com.google.gerrit.extensions.common.WebLinkInfo;
+import com.google.gerrit.extensions.webui.BranchWebLink;
 import com.google.gerrit.extensions.webui.PatchSetWebLink;
 import com.google.gerrit.extensions.webui.ProjectWebLink;
 
-public class HelloWeblink implements PatchSetWebLink, ProjectWebLink {
+public class HelloWeblink implements PatchSetWebLink, ProjectWebLink, 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 myImageUrl = "http://placehold.it/16x16.gif";
 
   @Override
-  public String getLinkName() {
-    return name ;
+  public WebLinkInfo getBranchWebLink(String projectName, String branchName) {
+    return new WebLinkInfo(name,
+        myImageUrl,
+        String.format(placeHolderUrlProjectBranch, projectName, branchName),
+        Target.BLANK);
   }
 
   @Override
-  public String getPatchSetUrl(String project, String commit) {
-    return String.format(placeHolderUrlProjectCommit, project, commit);
+  public WebLinkInfo getProjectWeblink(String projectName) {
+    return new WebLinkInfo(name,
+        myImageUrl,
+        String.format(placeHolderUrlProject, projectName),
+        Target.BLANK);
   }
 
   @Override
-  public String getProjectUrl(String project) {
-    return String.format(placeHolderUrlProject, project);
+  public WebLinkInfo getPathSetWebLink(String projectName, String commit) {
+    return new WebLinkInfo(name,
+        myImageUrl,
+        String.format(placeHolderUrlProjectCommit, projectName, commit),
+        Target.BLANK);
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloWorldServlet.java b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloWorldServlet.java
index 9bb80a3..d2c3935 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloWorldServlet.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloWorldServlet.java
@@ -14,14 +14,6 @@
 
 package com.googlesource.gerrit.plugins.cookbook;
 
-import java.io.IOException;
-import java.io.Writer;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 import com.google.gerrit.extensions.annotations.PluginCanonicalWebUrl;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.inject.Inject;
@@ -30,6 +22,14 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.IOException;
+import java.io.Writer;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 @Singleton
 class HelloWorldServlet extends HttpServlet {
   private static final long serialVersionUID = 1L;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cookbook/MergeUserValidator.java b/src/main/java/com/googlesource/gerrit/plugins/cookbook/MergeUserValidator.java
new file mode 100644
index 0000000..2e35854
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/MergeUserValidator.java
@@ -0,0 +1,78 @@
+// Copyright (C) 2014 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.cookbook;
+
+import com.google.gerrit.reviewdb.client.Branch;
+import com.google.gerrit.reviewdb.client.PatchSet;
+import com.google.gerrit.reviewdb.client.PatchSetApproval;
+import com.google.gerrit.reviewdb.server.ReviewDb;
+import com.google.gerrit.server.ApprovalsUtil;
+import com.google.gerrit.server.IdentifiedUser;
+import com.google.gerrit.server.git.CodeReviewCommit;
+import com.google.gerrit.server.git.CommitMergeStatus;
+import com.google.gerrit.server.git.validators.MergeValidationException;
+import com.google.gerrit.server.git.validators.MergeValidationListener;
+import com.google.gerrit.server.project.ProjectState;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+import com.google.inject.Singleton;
+
+import org.eclipse.jgit.lib.Repository;
+
+// Because we have a dedicated Module, we need to bind to the set
+// there, however, if you are using this as a base for your own
+// plugin, you can simply comment out the 'Listen' annotation and
+// it will work as expected.
+//@Listen
+@Singleton
+public class MergeUserValidator implements MergeValidationListener {
+
+  private final IdentifiedUser.GenericFactory identifiedUserFactory;
+  private final Provider<ReviewDb> reviewDb;
+  private final ApprovalsUtil approvalsUtil;
+
+
+  // Because there is 'No user on merge thread' we need to get the
+  // identified user from IdentifiedUser.GenericFactory, this is
+  // normally not needed and you can, in many cases, just use
+  // Provider<CurrentUser>, unfortunately not this one.
+  @Inject
+  MergeUserValidator(IdentifiedUser.GenericFactory identifiedUserFactory,
+      Provider<ReviewDb> reviewDb,
+      ApprovalsUtil approvalsUtil) {
+    this.identifiedUserFactory = identifiedUserFactory;
+    this.reviewDb = reviewDb;
+    this.approvalsUtil = approvalsUtil;
+  }
+
+  /**
+   * Reject all merges if the submitter is not an administrator
+   */
+  @Override
+  public void onPreMerge(Repository repo, CodeReviewCommit commit,
+      ProjectState destProject, Branch.NameKey destBranch, PatchSet.Id patchSetId)
+      throws MergeValidationException {
+    PatchSetApproval psa =
+        approvalsUtil.getSubmitter(reviewDb.get(), commit.notes(), patchSetId);
+    if (psa == null) {
+      throw new MergeValidationException(CommitMergeStatus.NO_PATCH_SET);
+    }
+    IdentifiedUser submitter =
+        identifiedUserFactory.create(psa.getAccountId());
+    if (!submitter.getCapabilities().canAdministrateServer()) {
+      throw new MergeValidationException(CommitMergeStatus.MISSING_DEPENDENCY);
+    }
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cookbook/Module.java b/src/main/java/com/googlesource/gerrit/plugins/cookbook/Module.java
index 5f88178..cf6c433 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cookbook/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/Module.java
@@ -19,16 +19,19 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.gerrit.extensions.annotations.Exports;
-import com.google.gerrit.extensions.common.InheritableBoolean;
+import com.google.gerrit.extensions.client.InheritableBoolean;
 import com.google.gerrit.extensions.events.UsageDataPublishedListener;
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.extensions.restapi.RestApiModule;
+import com.google.gerrit.extensions.webui.BranchWebLink;
 import com.google.gerrit.extensions.webui.PatchSetWebLink;
 import com.google.gerrit.extensions.webui.ProjectWebLink;
 import com.google.gerrit.extensions.webui.TopMenu;
 import com.google.gerrit.server.config.ProjectConfigEntry;
+import com.google.gerrit.server.git.validators.MergeValidationListener;
 import com.google.gerrit.server.git.validators.UploadValidationListener;
 import com.google.gerrit.server.plugins.ServerPluginProvider;
+import com.google.gerrit.server.validators.HashtagValidationListener;
 import com.google.inject.AbstractModule;
 
 import com.googlesource.gerrit.plugins.cookbook.pluginprovider.HelloSshPluginProvider;
@@ -41,6 +44,7 @@
         .to(HelloTopMenu.class);
     DynamicSet.bind(binder(), PatchSetWebLink.class).to(HelloWeblink.class);
     DynamicSet.bind(binder(), ProjectWebLink.class).to(HelloWeblink.class);
+    DynamicSet.bind(binder(), BranchWebLink.class).to(HelloWeblink.class);
     DynamicSet.bind(binder(), ServerPluginProvider.class).to(
         HelloSshPluginProvider.class);
     DynamicSet.bind(binder(), UsageDataPublishedListener.class).to(UsageDataLogger.class);
@@ -55,6 +59,10 @@
     });
     DynamicSet.bind(binder(), UploadValidationListener.class)
         .to(DenyUploadExample.class);
+    DynamicSet.bind(binder(), MergeValidationListener.class)
+        .to(MergeUserValidator.class);
+    DynamicSet.bind(binder(), HashtagValidationListener.class)
+        .to(HashtagValidator.class);
     configurePluginParameters();
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cookbook/client/IndexScreen.java b/src/main/java/com/googlesource/gerrit/plugins/cookbook/client/IndexScreen.java
index c50dc36..0edf949 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cookbook/client/IndexScreen.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/client/IndexScreen.java
@@ -14,7 +14,9 @@
 
 package com.googlesource.gerrit.plugins.cookbook.client;
 
+import com.google.gerrit.client.Resources;
 import com.google.gerrit.plugin.client.screen.Screen;
+import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.Scheduler;
 import com.google.gwt.core.client.Scheduler.ScheduledCommand;
 import com.google.gwt.event.dom.client.ClickEvent;
@@ -24,6 +26,8 @@
 import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Image;
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.Panel;
 import com.google.gwt.user.client.ui.TextArea;
@@ -41,12 +45,19 @@
 
   private TextBox usernameTxt;
   private TextArea greetingTxt;
+  private Resources RESOURCES = GWT.create(Resources.class);
 
   IndexScreen() {
     setStyleName("cookbook-panel");
 
+    Panel labelImagePanel = new HorizontalPanel();
     Panel usernamePanel = new VerticalPanel();
-    usernamePanel.add(new Label("Username:"));
+    Image img = new Image(RESOURCES.info());
+    img.setTitle("User to send greetings to");
+    labelImagePanel.add(new Label("Username"));
+    labelImagePanel.add(img);
+    labelImagePanel.add(new Label(":"));
+    usernamePanel.add(labelImagePanel);
     usernameTxt = new TextBox() {
       @Override
       public void onBrowserEvent(Event event) {
diff --git a/src/main/resources/Documentation/cmd-admin.md b/src/main/resources/Documentation/cmd-admin.md
index 312bd2b..edc054b 100644
--- a/src/main/resources/Documentation/cmd-admin.md
+++ b/src/main/resources/Documentation/cmd-admin.md
@@ -1,13 +1,13 @@
-cookbook-plugin admin
+@PLUGIN@ admin
 =====================
 
 NAME
 ----
-cookbook-plugin admin - Administrate the cookbook plugin
+@PLUGIN@ admin - Administrate the cookbook plugin
 
 SYNOPSIS
 --------
->     ssh -p <port> <host> cookbook-plugin admin
+>     ssh -p <port> <host> @PLUGIN@ admin
 
 DESCRIPTION
 -----------
@@ -28,7 +28,7 @@
 
 Have the server say hello to the administrator.
 
->     $ ssh -p 29418 review.example.com cookbook-plugin admin
+>     $ ssh -p 29418 review.example.com @PLUGIN@ admin
 
 SEE ALSO
 --------
diff --git a/src/main/resources/Documentation/cmd-print.md b/src/main/resources/Documentation/cmd-print.md
index 717b564..d471ec0 100644
--- a/src/main/resources/Documentation/cmd-print.md
+++ b/src/main/resources/Documentation/cmd-print.md
@@ -1,13 +1,13 @@
-cookbook-plugin print
+@PLUGIN@ print
 =====================
 
 NAME
 ----
-cookbook-plugin print - Print our "Hello world" message
+@PLUGIN@ print - Print our "Hello world" message
 
 SYNOPSIS
 --------
->     ssh -p <port> <host> cookbook-plugin print
+>     ssh -p <port> <host> @PLUGIN@ print
 >      [--french]
 >      [name]
 
@@ -42,15 +42,15 @@
 
 Have the server say hi to the world.
 
->     $ ssh -p 29418 review.example.com cookbook-plugin print
+>     $ ssh -p 29418 review.example.com @PLUGIN@ print
 
 Have the server say hi to the world in French.
 
->     $ ssh -p 29418 review.example.com cookbook-plugin print --french
+>     $ ssh -p 29418 review.example.com @PLUGIN@ print --french
 
 Have the server say hi to you in French.
 
->     $ ssh -p 29418 review.example.com cookbook-plugin print --french \'Revi Ewer\'
+>     $ ssh -p 29418 review.example.com @PLUGIN@ print --french \'Revi Ewer\'
 
 SEE ALSO
 --------
diff --git a/src/main/resources/Documentation/rest-api-hello-project.md b/src/main/resources/Documentation/rest-api-hello-project.md
index 4e51809..e1fb49d 100644
--- a/src/main/resources/Documentation/rest-api-hello-project.md
+++ b/src/main/resources/Documentation/rest-api-hello-project.md
@@ -1,4 +1,4 @@
-cookbook-plugin hello-project
+@PLUGIN@ hello-project
 =============================
 
 NAME
diff --git a/src/main/resources/Documentation/rest-api-hello-revision.md b/src/main/resources/Documentation/rest-api-hello-revision.md
index 403bb57..a3d7ec1 100644
--- a/src/main/resources/Documentation/rest-api-hello-revision.md
+++ b/src/main/resources/Documentation/rest-api-hello-revision.md
@@ -1,4 +1,4 @@
-cookbook-plugin hello-revision
+@PLUGIN@ hello-revision
 ==============================
 
 NAME
diff --git a/src/main/resources/Documentation/servlet-hello.md b/src/main/resources/Documentation/servlet-hello.md
index e4902bf..d2be599 100644
--- a/src/main/resources/Documentation/servlet-hello.md
+++ b/src/main/resources/Documentation/servlet-hello.md
@@ -1,4 +1,4 @@
-cookbook-plugin hello
+@PLUGIN@ hello
 =====================
 
 NAME
@@ -7,7 +7,7 @@
 
 SYNOPSIS
 --------
->     http://<host>:<port>/cookbook-plugin/say-hello/
+>     http://<host>:<port>/plugins/@PLUGIN@/say-hello/
 
 DESCRIPTION
 -----------
diff --git a/src/main/resources/static/hello-change.js b/src/main/resources/static/hello-change.js
index 4c668fd..ad339f3 100644
--- a/src/main/resources/static/hello-change.js
+++ b/src/main/resources/static/hello-change.js
@@ -18,16 +18,21 @@
           + c.id
           + ", revision: " + r.name);
     }
-    function onSubmitChange(c, r) {
-      return confirm("Really submit change:\n"
-          + c.id + "\n"
-          + "revision: " + r.name
-          + "?");
+    function onSubmitSomeoneElsesChange(c, r) {
+        var u = self.getCurrentUser();
+        if (u._account_id != c.owner._account_id) {
+          return confirm("Really submit change:\n"
+              + c.id + "\n"
+              + "revision: " + r.name + "\n"
+              + "from: " + c.owner.name
+              + "?");
+        }
+        return true;
     }
     function onHistory(t) {
       console.log("History: " + t);
     }
     Gerrit.on('showchange', onShowChange);
-    Gerrit.on('submitchange', onSubmitChange);
+    Gerrit.on('submitchange', onSubmitSomeoneElsesChange);
     Gerrit.on('history', onHistory);
   });
diff --git a/src/test/java/com/googlesource/gerrit/plugins/cookbook/CookbookTest.java b/src/test/java/com/googlesource/gerrit/plugins/cookbook/CookbookTest.java
new file mode 100644
index 0000000..d6376ae
--- /dev/null
+++ b/src/test/java/com/googlesource/gerrit/plugins/cookbook/CookbookTest.java
@@ -0,0 +1,28 @@
+// Copyright (C) 2014 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.cookbook;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+public class CookbookTest {
+  @Test
+  public void cookbookTest() {
+    // Dummy test, only used to make sure the cookbook plugin gets compiled
+    // when running `buck test`, thus highlighting any compilation errors.
+    assertTrue(true);
+  }
+}
