diff --git a/WORKSPACE b/WORKSPACE
index e820776..ce8fcd5 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,27 +3,27 @@
 load("//:bazlets.bzl", "load_bazlets")
 
 load_bazlets(
-    commit = "42bffc66c0e92753133e4cea2debe65abc359c4d",
+    commit = "cbddbc2b9571b1d692fb823ba8791ccd60b52421",
     #local_path = "/home/ehugare/workspaces/bazlets",
 )
 
 #Snapshot Plugin API
-load(
-    "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
-    "gerrit_api_maven_local",
-)
-
-# Load snapshot Plugin API
-gerrit_api_maven_local()
-
-# Release Plugin API
 #load(
-#   "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
-#   "gerrit_api",
+#    "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
+#    "gerrit_api_maven_local",
 #)
 
+# Load snapshot Plugin API
+#gerrit_api_maven_local()
+
+# Release Plugin API
+load(
+   "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
+   "gerrit_api",
+)
+
 # Load release Plugin API
-#gerrit_api()
+gerrit_api()
 
 load("//:external_plugin_deps.bzl", "external_plugin_deps")
 
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarder.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarder.java
index c38e849..c1c46d9 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarder.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarder.java
@@ -131,20 +131,22 @@
           log.debug("{} OK", name);
           return true;
         } catch (ForwardingException e) {
+          int maxTries = cfg.http().maxTries();
+          log.debug("Failed to {} [{}/{}]", name, execCnt, maxTries, e);
           if (!e.isRecoverable()) {
-            log.error("Failed to {}", name, e);
+            log.error("{} failed with unrecoverable error; giving up", name);
             return false;
           }
-          if (execCnt >= cfg.http().maxTries()) {
-            log.error("Failed to {}, after {} tries", name, cfg.http().maxTries());
+          if (execCnt >= maxTries) {
+            log.error("Failed to {} after {} tries; giving up", name, maxTries);
             return false;
           }
 
-          log.debug("Retrying to {} caused by '{}'", name, e);
+          log.debug("Retrying to {}", name);
           try {
             Thread.sleep(cfg.http().retryInterval());
           } catch (InterruptedException ie) {
-            log.error("{} was interrupted, giving up", name, ie);
+            log.error("{} was interrupted; giving up", name, ie);
             Thread.currentThread().interrupt();
             return false;
           }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/peers/jgroups/JGroupsPeerInfoProvider.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/peers/jgroups/JGroupsPeerInfoProvider.java
index 610d781..cc573fc 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/peers/jgroups/JGroupsPeerInfoProvider.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/peers/jgroups/JGroupsPeerInfoProvider.java
@@ -32,13 +32,13 @@
 
 /**
  * Provider which uses JGroups to find the peer gerrit instances. On startup every gerrit instance
- * joins a jgroups channel. Whenever the set of channel members changes each gerrit server publishes
- * its url to all channel members.
+ * creates its own channel and joins jgroup cluster. Whenever the set of cluster members changes
+ * each gerrit server publishes its url to all cluster members (publishes it to all channels).
  *
- * <p>This provider maintains a list of all members which joined the jgroups channel. This may be
+ * <p>This provider maintains a list of all members which joined the jgroups cluster. This may be
  * more than two. But will always pick the first node which sent its url as the peer to be returned
  * by {@link #get()}. It will continue to return that node until that node leaves the jgroups
- * channel.
+ * cluster.
  */
 @Singleton
 public class JGroupsPeerInfoProvider extends ReceiverAdapter
@@ -81,8 +81,10 @@
     synchronized (this) {
       if (view.getMembers().size() > 2) {
         log.warn(
-            "{} members joined the jgroups channel {}. Only two members are supported. Members: {}",
+            "{} members joined the jgroups cluster {} ({}). "
+                + " Only two members are supported. Members: {}",
             view.getMembers().size(),
+            jgroupsConfig.clusterName(),
             channel.getName(),
             view.getMembers());
       }
@@ -98,7 +100,10 @@
       } catch (Exception e) {
         // channel communication caused an error. Can't do much about it.
         log.error(
-            "Sending a message over jgroups channel {} failed", jgroupsConfig.clusterName(), e);
+            "Sending a message over channel {} to cluster {} failed",
+            channel.getName(),
+            jgroupsConfig.clusterName(),
+            e);
       }
     }
   }
@@ -113,9 +118,16 @@
       channel.setReceiver(this);
       channel.setDiscardOwnMessages(true);
       channel.connect(jgroupsConfig.clusterName());
-      log.info("Succesfully joined jgroups channel {}", channel);
+      log.info(
+          "Channel {} successfully joined jgroups cluster {}",
+          channel.getName(),
+          jgroupsConfig.clusterName());
     } catch (Exception e) {
-      log.error("joining jgroups channel {} failed", e);
+      log.error(
+          "joining cluster {} for channel {} failed",
+          jgroupsConfig.clusterName(),
+          channel.getName(),
+          e);
     }
   }
 
@@ -131,7 +143,8 @@
 
   @Override
   public void stop() {
-    log.info("closing jgroups channel {}", jgroupsConfig.clusterName());
+    log.info(
+        "closing jgroups channel {} (cluster {})", channel.getName(), jgroupsConfig.clusterName());
     channel.close();
     peerInfo = Optional.empty();
     peerAddress = null;
