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
index 5874d8a..cf3e578 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/client/CompleteImportDialog.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/client/CompleteImportDialog.java
@@ -34,10 +34,10 @@
   private final Button cancelButton;
   private final Button completeButton;
 
-  public CompleteImportDialog(final String project) {
+  public CompleteImportDialog(final String project, final boolean copy) {
     super(/* auto hide */false, /* modal */true);
     setGlassEnabled(true);
-    setText("Complete Project Import");
+    setText("Complete Project " + (copy ? "Copy" : "Import"));
 
     FlowPanel buttons = new FlowPanel();
 
@@ -56,12 +56,14 @@
                 Plugin.get().go("/x/" + Plugin.get().getName() + "/list");
 
                 final DialogBox successDialog = new DialogBox();
-                successDialog.setText("Project Import Completed");
+                successDialog.setText("Project "
+                    + (copy ? "Copy" : "Import") + " Completed");
                 successDialog.setAnimationEnabled(true);
 
                 Panel p = new VerticalPanel();
                 p.setStyleName("importer-message-panel");
-                p.add(new Label("The project import was completed."));
+                p.add(new Label("The project "
+                  + (copy ? "copy" : "import") + " was completed."));
                 Button okButton = new Button("OK");
                 okButton.addClickHandler(new ClickHandler() {
                   public void onClick(ClickEvent event) {
@@ -96,7 +98,8 @@
     buttons.add(cancelButton);
 
     FlowPanel center = new FlowPanel();
-    Label msg = new Label("Complete import of project '" + project + "'");
+    Label msg = new Label("Complete " + (copy ? "copy" : "import")
+        + " of project '" + project + "'");
     msg.addStyleName("importer-complete-message");
     center.add(msg);
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/client/ImportActionPanel.java b/src/main/java/com/googlesource/gerrit/plugins/importer/client/ImportActionPanel.java
index 408dd89..212e5cc 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/client/ImportActionPanel.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/client/ImportActionPanel.java
@@ -21,18 +21,18 @@
 
 public class ImportActionPanel extends FlowPanel {
 
-  ImportActionPanel(final String project) {
+  ImportActionPanel(final String project, final boolean copy) {
     setStyleName("importer-action-panel");
     add(new Button("Resume...", new ClickHandler() {
       @Override
       public void onClick(ClickEvent event) {
-        (new ResumeImportDialog(project)).center();
+        (new ResumeImportDialog(project, copy)).center();
       }
     }));
     add(new Button("Complete...", new ClickHandler() {
       @Override
       public void onClick(ClickEvent event) {
-        (new CompleteImportDialog(project)).center();
+        (new CompleteImportDialog(project, copy)).center();
       }
     }));
   }
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 0b747c3..bd86574 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
@@ -104,7 +104,7 @@
         t.setText(row, 4, "N/A");
       }
 
-      t.setWidget(row, 5, new ImportActionPanel(project));
+      t.setWidget(row, 5, new ImportActionPanel(project, info.from() == null));
 
       row++;
     }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/client/ProjectImportsScreen.java b/src/main/java/com/googlesource/gerrit/plugins/importer/client/ProjectImportsScreen.java
index 6ea04b5..8cbb2eb 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/client/ProjectImportsScreen.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/client/ProjectImportsScreen.java
@@ -75,7 +75,7 @@
 
 
     t.addRow("Parent", info.parent());
-    t.addRow("Actions", new ImportActionPanel(project));
+    t.addRow("Actions", new ImportActionPanel(project, info.from() == null));
     add(t);
 
     add(new Label("Imports:"));
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/client/ResumeImportDialog.java b/src/main/java/com/googlesource/gerrit/plugins/importer/client/ResumeImportDialog.java
index efd3fcb..c4aad43 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/client/ResumeImportDialog.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/client/ResumeImportDialog.java
@@ -43,10 +43,10 @@
   private final TextBox passTxt;
   private final CheckBox forceCheckBox;
 
-  public ResumeImportDialog(final String project) {
+  public ResumeImportDialog(final String project, final boolean copy) {
     super(/* auto hide */false, /* modal */true);
     setGlassEnabled(true);
-    setText("Resume Project Import");
+    setText("Resume Project " + (copy ? "Copy" : "Import"));
 
     FlowPanel buttons = new FlowPanel();
 
@@ -70,12 +70,12 @@
                 Plugin.get().go("/admin/projects/" + project);
 
                 final DialogBox successDialog = new DialogBox();
-                successDialog.setText("Resume Project Import");
+                successDialog.setText("Resume " + (copy ? "Copy" : "Import") + " Import");
                 successDialog.setAnimationEnabled(true);
 
                 Panel p = new VerticalPanel();
                 p.setStyleName("importer-message-panel");
-                p.add(new Label("The project import was resumed."));
+                p.add(new Label("The project " + (copy ? "copy" : "import") + " was resumed."));
                 p.add(new Label("Created Changes: " + result.numChangesCreated()));
                 p.add(new Label("Updated Changes: " + result.numChangesUpdated()));
                 Button okButton = new Button("OK");
@@ -112,7 +112,8 @@
     buttons.add(cancelButton);
 
     FlowPanel center = new FlowPanel();
-    Label msg = new Label("Resume import of project '" + project + "'");
+    Label msg = new Label("Resume " + (copy ? "copy" : "import")
+        + " of project '" + project + "'");
     msg.addStyleName("importer-resume-message");
     center.add(msg);
 
