diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java b/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java
index 46a6d00..5b6daea 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java
@@ -266,25 +266,25 @@
       git = gitManager.openRepository(projectName);
       runImpl();
     } catch (RepositoryNotFoundException e) {
-      wrappedLog.error("Cannot replicate " + projectName + "; " + e.getMessage(), getStatesAsArray());
+      wrappedLog.error("Cannot replicate " + projectName
+          + "; Local repository error: "
+          + e.getMessage(), getStatesAsArray());
 
     } catch (RemoteRepositoryException e) {
-      log.error("Cannot replicate " + projectName + "; " + e.getMessage());
-
-    } catch (NoRemoteRepositoryException e) {
-      if (pool.isCreateMissingRepos()) {
-        try {
-          createRepository();
-          log.warn("Missing repository created; retry replication to " + uri);
-          pool.reschedule(this, Destination.RetryReason.REPOSITORY_MISSING);
-        } catch (IOException ioe) {
-          wrappedLog.error("Cannot replicate to " + uri + "; failed to create missing repository",
-              ioe, getStatesAsArray());
-        }
+      // Tried to replicate to a remote via anonymous git:// but the repository
+      // does not exist.  In this case NoRemoteRepositoryException is not
+      // raised.
+      final String msg = e.getMessage();
+      if (msg.contains("access denied")) {
+        createRepository();
       } else {
-        wrappedLog.error("Cannot replicate to " + uri + "; repository not found", getStatesAsArray());
+        log.error("Cannot replicate " + projectName
+            + "; Remote repository error: "
+            + msg);
       }
 
+    } catch (NoRemoteRepositoryException e) {
+      createRepository();
     } catch (NotSupportedException e) {
       wrappedLog.error("Cannot replicate to " + uri, e, getStatesAsArray());
 
@@ -316,21 +316,32 @@
     }
   }
 
-  private void createRepository() throws IOException {
-    final Ref head = git.getRef(Constants.HEAD);
-    NewProjectCreatedListener.Event event =
-        new NewProjectCreatedListener.Event() {
-          @Override
-          public String getProjectName() {
-            return projectName.get();
-          }
+  private void createRepository() {
+    if (pool.isCreateMissingRepos()) {
+      try {
+        final Ref head = git.getRef(Constants.HEAD);
+        NewProjectCreatedListener.Event event =
+            new NewProjectCreatedListener.Event() {
+              @Override
+              public String getProjectName() {
+                return projectName.get();
+              }
 
-          @Override
-          public String getHeadName() {
-            return head != null ? head.getName() : null;
-          }
-        };
-    replicationQueue.onNewProjectCreated(event);
+              @Override
+              public String getHeadName() {
+                return head != null ? head.getName() : null;
+              }
+            };
+        replicationQueue.onNewProjectCreated(event);
+        log.warn("Missing repository created; retry replication to " + uri);
+        pool.reschedule(this, Destination.RetryReason.REPOSITORY_MISSING);
+      } catch (IOException ioe) {
+        wrappedLog.error("Cannot replicate to " + uri + "; failed to create missing repository",
+            ioe, getStatesAsArray());
+      }
+    } else {
+      wrappedLog.error("Cannot replicate to " + uri + "; repository not found", getStatesAsArray());
+    }
   }
 
   private void runImpl() throws IOException {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java
index eea1448..e28060b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java
@@ -228,8 +228,10 @@
   private void createProject(URIish replicateURI, String head) {
     if (!replicateURI.isRemote()) {
       createLocally(replicateURI, head);
+      log.info("Created local repository: " + replicateURI);
     } else if (isSSH(replicateURI)) {
       createRemoteSsh(replicateURI, head);
+      log.info("Created remote repository: " + replicateURI);
     } else {
       log.warn(String.format("Cannot create new project on remote site %s."
           + " Only local paths and SSH URLs are supported"
@@ -252,7 +254,9 @@
         repo.close();
       }
     } catch (IOException e) {
-      log.error(String.format("Failed to create repository %s", uri.getPath()), e);
+      log.error(String.format(
+          "Error creating local repository %s:\n",
+          uri.getPath()), e);
     }
   }
 
@@ -280,8 +284,10 @@
   private void deleteProject(URIish replicateURI) {
     if (!replicateURI.isRemote()) {
       deleteLocally(replicateURI);
+      log.info("Deleted local repository: " + replicateURI);
     } else if (isSSH(replicateURI)) {
       deleteRemoteSsh(replicateURI);
+      log.info("Deleted remote repository: " + replicateURI);
     } else {
       log.warn(String.format("Cannot delete project on remote site %s."
           + " Only local paths and SSH URLs are supported"
@@ -293,7 +299,9 @@
     try {
       recursivelyDelete(new File(uri.getPath()));
     } catch (IOException e) {
-      log.error(String.format("Failed to delete repository %s", uri.getPath()), e);
+      log.error(String.format(
+          "Error deleting local repository %s:\n",
+          uri.getPath()), e);
     }
   }
 
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index de0b907..e8f9473 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -149,6 +149,10 @@
 	or `+refs/*:refs/*` (force push all refs) if not specified and
 	`gerrit.defaultForceUpdate` is true.
 
+	Note that the `refs/meta/config` branch is only replicated
+	when `replicatePermissions` is true, even if the push refspec
+	is 'all refs'.
+
 [2]: #example_file
 
 remote.NAME.timeout
