diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/ChangeInfo.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/ChangeInfo.java
index 83ea13a..38c4cf9 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/ChangeInfo.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/ChangeInfo.java
@@ -25,9 +25,28 @@
 public class ChangeInfo extends JavaScriptObject {
   public final native String project() /*-{ return this.project; }-*/;
   public final native NativeMap<RevisionInfo> revisions() /*-{ return this.revisions; }-*/;
-  public final native int _number() /*-{ return this._number; }-*/;
-  public final native String current_revision() /*-{ return this.current_revision; }-*/;
   public final native RevisionInfo revision(String n) /*-{ return this.revisions[n]; }-*/;
+  public final native int _number() /*-{ return this._number; }-*/;
+  private final native String statusRaw() /*-{ return this.status; }-*/;
+  public final native String current_revision() /*-{ return this.current_revision; }-*/;
+  public final native void set_edit(EditInfo edit) /*-{ this.edit = edit; }-*/;
+  public final native EditInfo edit() /*-{ return this.edit; }-*/;
+  public final native boolean has_edit() /*-{ return this.hasOwnProperty('edit') }-*/;
+
+  public final ChangeStatus getStatus() {
+    return ChangeStatus.valueOf(statusRaw());
+  }
+
+  public final boolean isOpen() {
+    switch (getStatus()) {
+      case NEW:
+      case SUBMITTED:
+      case DRAFT:
+        return true;
+      default:
+        return false;
+    }
+  }
 
   protected ChangeInfo() {
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/ChangeStatus.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/ChangeStatus.java
new file mode 100644
index 0000000..ed789cc
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/ChangeStatus.java
@@ -0,0 +1,101 @@
+// 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.xdocs.client;
+
+/* Current state within the basic workflow of the change **/
+public enum ChangeStatus {
+
+  /**
+   * Change is open and pending review, or review is in progress.
+   *
+   * <p>
+   * This is the default state assigned to a change when it is first created
+   * in the database. A change stays in the NEW state throughout its review
+   * cycle, until the change is submitted or abandoned.
+   *
+   * <p>
+   * Changes in the NEW state can be moved to:
+   * <ul>
+   * <li>{@link #SUBMITTED} - when the Submit Patch Set action is used;
+   * <li>{@link #ABANDONED} - when the Abandon action is used.
+   * </ul>
+   */
+  NEW,
+
+  /**
+   * Change is open, but has been submitted to the merge queue.
+   *
+   * <p>
+   * A change enters the SUBMITTED state when an authorized user presses the
+   * "submit" action through the web UI, requesting that Gerrit merge the
+   * change's current patch set into the destination branch.
+   *
+   * <p>
+   * Typically a change resides in the SUBMITTED for only a brief sub-second
+   * period while the merge queue fires and the destination branch is updated.
+   * However, if a dependency commit (directly or transitively) is not yet
+   * merged into the branch, the change will hang in the SUBMITTED state
+   * indefinitely.
+   *
+   * <p>
+   * Changes in the SUBMITTED state can be moved to:
+   * <ul>
+   * <li>{@link #NEW} - when a replacement patch set is supplied, OR when a
+   * merge conflict is detected;
+   * <li>{@link #MERGED} - when the change has been successfully merged into
+   * the destination branch;
+   * <li>{@link #ABANDONED} - when the Abandon action is used.
+   * </ul>
+   */
+  SUBMITTED,
+
+  /**
+   * Change is a draft change that only consists of draft patchsets.
+   *
+   * <p>
+   * This is a change that is not meant to be submitted or reviewed yet. If
+   * the uploader publishes the change, it becomes a NEW change.
+   * Publishing is a one-way action, a change cannot return to DRAFT status.
+   * Draft changes are only visible to the uploader and those explicitly
+   * added as reviewers.
+   *
+   * <p>
+   * Changes in the DRAFT state can be moved to:
+   * <ul>
+   * <li>{@link #NEW} - when the change is published, it becomes a new change;
+   * </ul>
+   */
+  DRAFT,
+
+  /**
+   * Change is closed, and submitted to its destination branch.
+   *
+   * <p>
+   * Once a change has been merged, it cannot be further modified by adding a
+   * replacement patch set. Draft comments however may be published,
+   * supporting a post-submit review.
+   */
+  MERGED,
+
+  /**
+   * Change is closed, but was not submitted to its destination branch.
+   *
+   * <p>
+   * Once a change has been abandoned, it cannot be further modified by adding
+   * a replacement patch set, and it cannot be merged. Draft comments however
+   * may be published, permitting reviewers to send constructive feedback.
+   */
+  ABANDONED
+}
\ No newline at end of file
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/PatchSetSelectBox.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/PatchSetSelectBox.java
index c895091..21190a2 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/PatchSetSelectBox.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/PatchSetSelectBox.java
@@ -82,6 +82,10 @@
     if (!COMMIT_MSG.equals(path)) {
       add(createDownloadLink());
     }
+
+    if (showEditIcon()) {
+      add(createEditIcon());
+    }
   }
 
   private void addPatchSetLabel() {
@@ -145,6 +149,26 @@
     return anchor;
   }
 
+  private boolean showEditIcon() {
+    if (sideA() || !change.isOpen() || !Plugin.get().isSignedIn()) {
+      return false;
+    }
+
+    if (change.has_edit()) {
+      return patchSet == 0;
+    } else {
+      return patchSet == change.revision(change.current_revision())._number();
+    }
+  }
+
+  private Anchor createEditIcon() {
+    Anchor anchor = new Anchor(
+        new ImageResourceRenderer().render(XDocsPlugin.RESOURCES.edit()),
+        "#" + getEditUrl(change._number(), patchSet, path));
+    anchor.setTitle("Edit");
+    return anchor;
+  }
+
   private Integer getSelectedPatchSet() {
     return sideA() ? basePatchSet : Integer.valueOf(patchSet);
   }
@@ -179,4 +203,15 @@
     return url.toString();
   }
 
+  private static String getEditUrl(int changeId, int patchSetId, String path) {
+    StringBuilder url = new StringBuilder();
+    url.append("/c/");
+    url.append(changeId);
+    url.append("/");
+    url.append(patchSetId);
+    url.append("/");
+    url.append(path);
+    url.append(",edit");
+    return url.toString();
+  }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/XDocDiffScreen.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/XDocDiffScreen.java
index 96555d3..0f6877f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/XDocDiffScreen.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/XDocDiffScreen.java
@@ -60,6 +60,7 @@
             @Override
             public void onSuccess(EditInfo edit) {
               if (edit != null) {
+                change.set_edit(edit);
                 change.revisions().put(edit.name(), RevisionInfo.fromEdit(edit));
               }
               initRevisionsAndShow(change);
