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 1d2805e..6616bca 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
@@ -25,6 +25,6 @@
   <!-- resources to the plugin. No theme inherits lines were      -->
   <!-- added in order to make this plugin as simple as possible   -->
   <!-- Specify the app entry point class.                         -->
-  <entry-point class="com.googlesource.gerrit.plugins.cookbook.client.HelloForm"/>
+  <entry-point class="com.googlesource.gerrit.plugins.cookbook.client.CookBookPlugin"/>
   <stylesheet src="cookbook.css"/>
 </module>
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 5e11b03..4d98601 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloTopMenu.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloTopMenu.java
@@ -23,13 +23,12 @@
 
 public class HelloTopMenu implements TopMenu {
   private final List<MenuEntry> menuEntries;
-  public final static String MENU_ID = "cookbook-plugin_hello-form";
 
   @Inject
   public HelloTopMenu(@PluginName String pluginName) {
     String baseUrl = "/plugins/" + pluginName + "/";
     List<MenuItem> menuItems = Lists.newArrayListWithCapacity(2);
-    menuItems.add(new MenuItem("Greeting", "", "", MENU_ID));
+    menuItems.add(new MenuItem("Greeting", "#/x/" + pluginName + "/", ""));
     menuItems.add(new MenuItem("Documentation", baseUrl));
     menuEntries = Lists.newArrayListWithCapacity(2);
     menuEntries.add(new MenuEntry("Cookbook", menuItems));
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cookbook/client/CookBookPlugin.java b/src/main/java/com/googlesource/gerrit/plugins/cookbook/client/CookBookPlugin.java
new file mode 100644
index 0000000..e9ace38
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/client/CookBookPlugin.java
@@ -0,0 +1,25 @@
+// Copyright (C) 2013 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.client;
+
+import com.google.gerrit.plugin.client.Plugin;
+import com.google.gerrit.plugin.client.PluginEntryPoint;
+
+public class CookBookPlugin extends PluginEntryPoint {
+  @Override
+  public void onPluginLoad() {
+    Plugin.get().screen("", new IndexScreen.Factory());
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cookbook/client/HelloForm.java b/src/main/java/com/googlesource/gerrit/plugins/cookbook/client/IndexScreen.java
similarity index 68%
rename from src/main/java/com/googlesource/gerrit/plugins/cookbook/client/HelloForm.java
rename to src/main/java/com/googlesource/gerrit/plugins/cookbook/client/IndexScreen.java
index 5600406..c50dc36 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cookbook/client/HelloForm.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/client/IndexScreen.java
@@ -14,7 +14,7 @@
 
 package com.googlesource.gerrit.plugins.cookbook.client;
 
-import com.google.gerrit.plugin.client.PluginEntryPoint;
+import com.google.gerrit.plugin.client.screen.Screen;
 import com.google.gwt.core.client.Scheduler;
 import com.google.gwt.core.client.Scheduler.ScheduledCommand;
 import com.google.gwt.event.dom.client.ClickEvent;
@@ -24,29 +24,26 @@
 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.DialogBox;
-import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.Panel;
-import com.google.gwt.user.client.ui.RootPanel;
 import com.google.gwt.user.client.ui.TextArea;
 import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.user.client.ui.VerticalPanel;
-import com.googlesource.gerrit.plugins.cookbook.HelloTopMenu;
 
-public class HelloForm extends PluginEntryPoint {
-  private DialogBox dialogBox;
+class IndexScreen extends VerticalPanel {
+  static class Factory implements Screen.EntryPoint {
+    @Override
+    public void onLoad(Screen screen) {
+      screen.setPageTitle("cookbook index");
+      screen.show(new IndexScreen());
+    }
+  }
+
   private TextBox usernameTxt;
   private TextArea greetingTxt;
 
-  @Override
-  public void onPluginLoad() {
-    dialogBox = new DialogBox(false, false);
-    dialogBox.setText("Greetings dialog");
-    dialogBox.setAnimationEnabled(true);
-
-    Panel p = new VerticalPanel();
-    p.setStyleName("panel");
+  IndexScreen() {
+    setStyleName("cookbook-panel");
 
     Panel usernamePanel = new VerticalPanel();
     usernamePanel.add(new Label("Username:"));
@@ -75,7 +72,7 @@
     usernameTxt.sinkEvents(Event.ONPASTE);
     usernameTxt.setVisibleLength(40);
     usernamePanel.add(usernameTxt);
-    p.add(usernamePanel);
+    add(usernamePanel);
 
     Panel messagePanel = new VerticalPanel();
     messagePanel.add(new Label("Message:"));
@@ -90,43 +87,18 @@
     greetingTxt.setCharacterWidth(80);
     greetingTxt.getElement().setPropertyBoolean("spellcheck", false);
     messagePanel.add(greetingTxt);
-    p.add(messagePanel);
+    add(messagePanel);
 
-    HorizontalPanel buttons = new HorizontalPanel();
-    p.add(buttons);
-
-    final Button helloButton = new Button("Say Hello");
-    helloButton.addStyleName("helloButton");
+    Button helloButton = new Button("Say Hello");
+    helloButton.addStyleName("cookbook-helloButton");
     helloButton.addClickHandler(new ClickHandler() {
       @Override
       public void onClick(final ClickEvent event) {
         sayHello();
       }
     });
-    buttons.add(helloButton);
+    add(helloButton);
     helloButton.setEnabled(true);
-
-    Button closeButton = new Button("Close");
-    closeButton.addClickHandler(new ClickHandler() {
-      public void onClick(ClickEvent event) {
-        hide();
-      }
-    });
-    buttons.add(closeButton);
-
-    dialogBox.setWidget(p);
-
-    RootPanel rootPanel = RootPanel.get(HelloTopMenu.MENU_ID);
-    rootPanel.getElement().removeAttribute("href");
-    rootPanel.addDomHandler(new ClickHandler() {
-        @Override
-        public void onClick(ClickEvent event) {
-          dialogBox.center();
-          dialogBox.show();
-          usernameTxt.setFocus(true);
-          helloButton.setEnabled(true);
-        }
-    }, ClickEvent.getType());
   }
 
   private void sayHello() {
@@ -149,10 +121,4 @@
     sb.append(greeting.isEmpty() ? "what's up?" : greeting);
     Window.alert(sb.toString());
   }
-
-  private void hide() {
-    dialogBox.hide();
-    usernameTxt.setValue("");
-    greetingTxt.setValue("");
-  }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cookbook/public/cookbook.css b/src/main/java/com/googlesource/gerrit/plugins/cookbook/public/cookbook.css
index c820fdd..dd4f2a4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cookbook/public/cookbook.css
+++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/public/cookbook.css
@@ -1,108 +1,8 @@
-body, table td, select {
-  font-family: sans-serif;
-  font-size: small;
-}
-pre {
-  font-family: "courier new", courier;
-  font-size: small;
-}
-body {
-  color: black;
-  margin: 0px;
-  border: 0px;
-  padding: 0px;
-  background: #fff;
-  direction: ltr;
-}
-a, a:visited, a:hover {
-  color: #0000AA;
-}
-
-/**
- * The reference theme can be used to determine when this style sheet has
- * loaded.  Create a hidden div element with absolute position, assign the style
- * name below, and attach it to the DOM.  Use a timer to detect when the
- * element's height and width are set to 5px.
- */
-.gwt-Reference-standard {
-  height: 5px;
-  width: 5px;
-  zoom: 1;
-}
-
-.gwt-Button {
-  margin: 0;
-  padding: 3px 5px;
-  text-decoration: none;
-  font-size: small;
-  cursor: pointer;
-  border: 1px outset #ccc;
-}
-.gwt-Button:active {
-  border: 1px inset #ccc;
-}
-.gwt-Button:hover {
-  border-color: #9cf #69e #69e #7af;
-}
-.gwt-Button[disabled] {
-  cursor: default;
-  color: #888;
-}
-.gwt-Button[disabled]:hover {
-  border: 1px outset #ccc;
-}
-
-.gwt-DialogBox .Caption {
-  background: #e3e8f3;
-  padding: 4px 4px 4px 8px;
-  cursor: default;
-  border-bottom: 1px solid #bbbbbb;
-  border-top: 5px solid #d0e4f6;
-  border-left: 5px solid #d0e4f6;
-  border-right: 5px solid #d0e4f6;
-}
-
-.gwt-DialogBox .dialogContent {
-}
-
-.gwt-DialogBox .dialogMiddleCenter {
-  padding: 3px;
-  background: white;
-  border-left: 5px solid #d0e4f6;
-  border-right: 5px solid #d0e4f6;
-  border-bottom: 5px solid #d0e4f6;
-}
-
-.gwt-DialogBox .dialogTopLeftInner {
-  width: 5px;
-  zoom: 1;
-}
-.gwt-DialogBox .dialogTopRightInner {
-  width: 8px;
-  zoom: 1;
-}
-.gwt-DialogBox .dialogBottomLeftInner {
-  width: 5px;
-  height: 8px;
-  zoom: 1;
-}
-
-.gwt-DialogBox .dialogBottomRightInner {
-  width: 5px;
-  height: 8px;
-  zoom: 1;
-}
-
-#cookbook-plugin_hello-form {
-  cursor: pointer;
-}
-
-.panel {
+.cookbook-panel {
   border-spacing: 0px 5px;
 }
 
-.helloButton {
+.cookbook-helloButton {
   margin-left: 35px !important;
   margin-right: 450px !important;
 }
-
