diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/client/CompleteImportDialog.java b/src/main/java/com/googlesource/gerrit/plugins/importer/client/CompleteImportDialog.java
new file mode 100644
index 0000000..5874d8a
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/client/CompleteImportDialog.java
@@ -0,0 +1,115 @@
+// 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.importer.client;
+
+import com.google.gerrit.plugin.client.Plugin;
+import com.google.gerrit.plugin.client.rpc.NoContent;
+import com.google.gerrit.plugin.client.rpc.RestApi;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.DialogBox;
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.Panel;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwtexpui.globalkey.client.GlobalKey;
+import com.google.gwtexpui.user.client.AutoCenterDialogBox;
+
+public class CompleteImportDialog extends AutoCenterDialogBox {
+
+  private final Button cancelButton;
+  private final Button completeButton;
+
+  public CompleteImportDialog(final String project) {
+    super(/* auto hide */false, /* modal */true);
+    setGlassEnabled(true);
+    setText("Complete Project Import");
+
+    FlowPanel buttons = new FlowPanel();
+
+    completeButton = new Button();
+    completeButton.setText("Complete");
+    completeButton.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(ClickEvent event) {
+        hide();
+
+        new RestApi("config").id("server")
+            .view(Plugin.get().getName(), "projects").id(project)
+            .delete(new AsyncCallback<NoContent>() {
+              @Override
+              public void onSuccess(NoContent result) {
+                Plugin.get().go("/x/" + Plugin.get().getName() + "/list");
+
+                final DialogBox successDialog = new DialogBox();
+                successDialog.setText("Project Import Completed");
+                successDialog.setAnimationEnabled(true);
+
+                Panel p = new VerticalPanel();
+                p.setStyleName("importer-message-panel");
+                p.add(new Label("The project import was completed."));
+                Button okButton = new Button("OK");
+                okButton.addClickHandler(new ClickHandler() {
+                  public void onClick(ClickEvent event) {
+                    successDialog.hide();
+                  }
+                });
+
+                p.add(okButton);
+                successDialog.add(p);
+
+                successDialog.center();
+                successDialog.show();
+              }
+
+              @Override
+              public void onFailure(Throwable caught) {
+              }
+            });
+      }
+    });
+    buttons.add(completeButton);
+
+    cancelButton = new Button();
+    cancelButton.addStyleName("importer-cancel-button");
+    cancelButton.setText("Cancel");
+    cancelButton.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(ClickEvent event) {
+        hide();
+      }
+    });
+    buttons.add(cancelButton);
+
+    FlowPanel center = new FlowPanel();
+    Label msg = new Label("Complete import of project '" + project + "'");
+    msg.addStyleName("importer-complete-message");
+    center.add(msg);
+
+    center.add(buttons);
+    add(center);
+
+    setWidget(center);
+  }
+
+  @Override
+  public void center() {
+    super.center();
+    GlobalKey.dialog(this);
+    cancelButton.setFocus(true);
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/client/ImportProjectListScreen.java b/src/main/java/com/googlesource/gerrit/plugins/importer/client/ImportProjectListScreen.java
index 56b152d..acdbd4d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/client/ImportProjectListScreen.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/client/ImportProjectListScreen.java
@@ -26,6 +26,7 @@
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.FlexTable;
 import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.VerticalPanel;
 
 import java.util.List;
@@ -100,12 +101,21 @@
         t.setText(row, 3, "N/A");
       }
 
-      t.setWidget(row, 4, new Button("Resume...", new ClickHandler() {
+      FlowPanel p = new FlowPanel();
+      p.setStyleName("importer-action-panel");
+      p.add(new Button("Resume...", new ClickHandler() {
         @Override
         public void onClick(ClickEvent event) {
           (new ResumeImportDialog(project)).center();
         }
       }));
+      p.add(new Button("Complete...", new ClickHandler() {
+        @Override
+        public void onClick(ClickEvent event) {
+          (new CompleteImportDialog(project)).center();
+        }
+      }));
+      t.setWidget(row, 4, p);
 
       row++;
     }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/public/importer.css b/src/main/java/com/googlesource/gerrit/plugins/importer/public/importer.css
index 9ec691e..770081a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/public/importer.css
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/public/importer.css
@@ -58,6 +58,11 @@
   margin-left: 150px;
 }
 
-.importer-resume-message {
+.importer-resume-message,
+.importer-complete-message {
   margin-bottom: 10px;
 }
+
+.importer-action-panel .gwt-Button {
+  margin: 2px;
+}
