This closes #1123
diff --git a/brooklyn-library/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitBroker.java b/brooklyn-library/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitBroker.java
index fc4eddf..874bed8 100644
--- a/brooklyn-library/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitBroker.java
+++ b/brooklyn-library/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitBroker.java
@@ -44,14 +44,19 @@
 public interface RabbitBroker extends SoftwareProcess, MessageBroker, AmqpServer {
 
     @SetFromFlag("version")
-    public static final ConfigKey<String> SUGGESTED_VERSION = ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.SUGGESTED_VERSION, "2.8.7");
+    public static final ConfigKey<String> SUGGESTED_VERSION = ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.SUGGESTED_VERSION, "3.6.0");
 
     @SetFromFlag("downloadUrl")
     public static final BasicAttributeSensorAndConfigKey<String> DOWNLOAD_URL = new BasicAttributeSensorAndConfigKey<String>(
-            SoftwareProcess.DOWNLOAD_URL, "http://www.rabbitmq.com/releases/rabbitmq-server/v${version}/rabbitmq-server-generic-unix-${version}.tar.gz");
+            SoftwareProcess.DOWNLOAD_URL, "http://www.rabbitmq.com/releases/rabbitmq-server/v${version}/rabbitmq-server-generic-unix-${version}.tar.xz");
     
     @SetFromFlag("erlangVersion")
-    public static final BasicConfigKey<String> ERLANG_VERSION = new BasicConfigKey<String>(String.class, "erlang.version", "Erlang runtime version", "R15B");
+    public static final BasicConfigKey<String> ERLANG_VERSION = new BasicConfigKey<String>(String.class, "erlang.version", "Erlang runtime version", "18.2");
+
+    @SetFromFlag("erlangDebRepoUrl")
+    public static final BasicConfigKey<String> ERLANG_DEB_REPO_URL = new BasicConfigKey<String>(String.class, "erlang.deb.repo.url", 
+            "Deb file used to configure an external Erlang repository which provides up to date packages for Ubuntu/Debian", 
+            "http://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb");
 
     @SetFromFlag("rabbitmqConfigTemplateUrl")
     ConfigKey<String> CONFIG_TEMPLATE_URL = ConfigKeys.newStringConfigKey(
diff --git a/brooklyn-library/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitSshDriver.java b/brooklyn-library/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitSshDriver.java
index c8d0a89..ad04d55 100644
--- a/brooklyn-library/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitSshDriver.java
+++ b/brooklyn-library/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitSshDriver.java
@@ -27,7 +27,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 
@@ -39,6 +38,7 @@
 import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.net.Networking;
 import org.apache.brooklyn.util.os.Os;
+import org.apache.brooklyn.util.text.Strings;
 
 /**
  * TODO javadoc
@@ -81,40 +81,32 @@
     public void install() {
         List<String> urls = resolver.getTargets();
         String saveAs = resolver.getFilename();
-        // Version and architecture are only required for download of epel package on RHEL/Centos systems so pick sensible
-        // defaults if unavailable
-        String osMajorVersion = getMachine().getOsDetails().getVersion();
-        if (Strings.isNullOrEmpty(osMajorVersion)) {
-            osMajorVersion = "7";
-        } else {
-            osMajorVersion = osMajorVersion.indexOf(".") > 0 ? osMajorVersion.substring(0, osMajorVersion.indexOf('.')) : osMajorVersion;
-            if (!CENTOS_VERSION_TO_EPEL_VERSION.keySet().contains(osMajorVersion)) {
-                osMajorVersion = "7";
-            }
-        }
-        String epelVersion = CENTOS_VERSION_TO_EPEL_VERSION.get(osMajorVersion);
-        String osArchitecture = getMachine().getOsDetails().getArch();
-        if (Strings.isNullOrEmpty(osArchitecture)) {
-            osArchitecture = "x86_64";
-        }
+
 
         List<String> commands = ImmutableList.<String>builder()
-                // EPEL repository for erlang install required on some Centos distributions
-                .add(chainGroup("which yum", sudo("yum -y update ca-certificates"), sudo("rpm -Uvh --replacepkgs " +
-                        format("http://download.fedoraproject.org/pub/epel/%s/%s/epel-release-%s.noarch.rpm", osMajorVersion, osArchitecture, epelVersion))))
-                .add(ifExecutableElse0("zypper", chainGroup(
-                        ok(sudo("zypper --non-interactive addrepo http://download.opensuse.org/repositories/devel:/languages:/erlang/SLE_11_SP3 erlang_sles_11")),
-                        ok(sudo("zypper --non-interactive addrepo http://download.opensuse.org/repositories/devel:/languages:/erlang/openSUSE_11.4 erlang_suse_11")),
-                        ok(sudo("zypper --non-interactive addrepo http://download.opensuse.org/repositories/devel:/languages:/erlang/openSUSE_12.3 erlang_suse_12")),
-                        ok(sudo("zypper --non-interactive addrepo http://download.opensuse.org/repositories/devel:/languages:/erlang/openSUSE_13.1 erlang_suse_13")))))
+                // RabbitMQ recommends Erlang 18. Release notes state:
+                // ====
+                // Minimum required Erlang version is R16B03 for plain ("just TCP") connections for all protocols 
+                // and 17.5 for TLS ones (18.x is recommended for both).
+                // ====
+                //
+                // The recommended provider for up to date Erlang versions is Erlang Solutions now.
+                // Supported platforms by Erlang Solutions are: CentOS, RHEL, Ubuntu and Debian.
+                // 
+                // New Erlang versions for SUSE are provided via the openSUSE repositories
+                // 
+                // EPEL 6 provides only packages for Erlang 14, but EPEL 7 - Erlang 16
+                // 
+                .add(ifExecutableElse0("apt-get", getAptRepository()))
+                .add(ifExecutableElse0("yum", getYumRepository()))
+                .add(ifExecutableElse0("zypper", getZypperRepository()))
                 .add(installPackage( // NOTE only 'port' states the version of Erlang used, maybe remove this constraint?
                         ImmutableMap.of(
-                                "apt", "erlang-nox erlang-dev",
                                 "port", "erlang@"+getErlangVersion()+"+ssl"),
-                        "erlang"))
+                                "erlang"))
                 .addAll(commandsToDownloadUrlsAs(urls, saveAs))
                 .add(installExecutable("tar"))
-                .add(format("tar xvzf %s",saveAs))
+                .add(format("tar xvf %s",saveAs))
                 .build();
 
         newScript(INSTALLING).
@@ -147,9 +139,9 @@
         newScript(MutableMap.of("usePidFile", false), LAUNCHING)
             .body.append(
                 "nohup ./sbin/rabbitmq-server > console-out.log 2> console-err.log &",
-                "for i in {1..30}\n" +
+                "for i in {1..60}\n" +
                     "do\n" +
-                     "    grep 'broker running' console-out.log && exit\n" +
+                     "    grep 'Starting broker... completed' console-out.log && exit\n" +
                      "    sleep 1\n" +
                      "done",
                 "echo \"Couldn't determine if rabbitmq-server is running\"",
@@ -166,7 +158,6 @@
             ).execute();
     }
 
-
     public String getPidFile() { return "rabbitmq.pid"; }
 
     @Override
@@ -183,7 +174,6 @@
                 .execute();
     }
 
-
     @Override
     public void kill() {
         stop(); // TODO No pid file to easily do `kill -9`
@@ -205,4 +195,69 @@
     private String getConfigPath() {
         return getRunDir() + "/rabbitmq";
     }
+
+    private String getYumRepository() {
+        String yumRepoFileName = "erlang_solutions.repo";
+        
+        // Version and architecture are only required for download of epel package on RHEL/Centos systems so pick sensible
+        // defaults if unavailable
+        //
+        // EPEL is still required as it is a prerequisite for the packages provided by Erlang Solutions
+        
+        String osMajorVersion = getMachine().getOsDetails().getVersion();
+        if (Strings.isBlank(osMajorVersion)) {
+            osMajorVersion = "7";
+        } else {
+            osMajorVersion = osMajorVersion.indexOf(".") > 0 ? osMajorVersion.substring(0, osMajorVersion.indexOf('.')) : osMajorVersion;
+            if (!CENTOS_VERSION_TO_EPEL_VERSION.keySet().contains(osMajorVersion)) {
+                osMajorVersion = "7";
+            }
+        }
+        String epelVersion = CENTOS_VERSION_TO_EPEL_VERSION.get(osMajorVersion);
+        String osArchitecture = getMachine().getOsDetails().getArch();
+        if (Strings.isBlank(osArchitecture)) {
+            osArchitecture = "x86_64";
+        }
+
+        // Erlang Solutions provide separate packages for RHEL and CentOS, but they are hosted in a single repo.
+        // E.g. - http://packages.erlang-solutions.com/rpm/centos/6/x86_64/
+        // 
+        // Erlang Solutions created a repo configuration RPM which can NOT be used on RedHat, because it has explicit checks for CentOS.
+        // 
+        // Bellow we are creating a repo file that works for CentOS and RedHat
+        return chainGroup(
+                sudo("yum -y update ca-certificates"),
+                sudo("rpm -Uvh --replacepkgs " + format("http://download.fedoraproject.org/pub/epel/%s/%s/epel-release-%s.noarch.rpm", osMajorVersion, osArchitecture, epelVersion)),
+                "( cat << 'EOF_BROOKLYN'\n"
+                   + "[erlang-solutions]\n"
+                   + "name=Centos / RHEL " + osMajorVersion + " - $basearch - Erlang Solutions\n"
+                   + "baseurl=http://packages.erlang-solutions.com/rpm/centos/" + osMajorVersion + "/$basearch\n"
+                   + "gpgcheck=0\n"
+                   + "gpgkey=http://packages.erlang-solutions.com/debian/erlang_solutions.asc\n"
+                   + "enabled=1\n"
+                   + "EOF_BROOKLYN\n"
+                   + ") > " + yumRepoFileName,
+                  sudo(format("mv %s /etc/yum.repos.d/", yumRepoFileName)),
+                  sudo(format("chown root:root /etc/yum.repos.d/%s", yumRepoFileName))
+            );
+    }
+
+    private String getAptRepository() {
+        String debFileName = "erlang-repo.deb";
+
+        return chainGroup(
+                INSTALL_WGET,
+                format("wget --quiet -O %s %s", debFileName, entity.getConfig(RabbitBroker.ERLANG_DEB_REPO_URL)),
+                sudo(format("dpkg -i %s", debFileName))
+            );
+    }
+
+    private String getZypperRepository() {
+        return chainGroup(
+                ok(sudo("zypper --non-interactive addrepo http://download.opensuse.org/repositories/devel:/languages:/erlang/SLE_11_SP3 erlang_sles_11")),
+                ok(sudo("zypper --non-interactive addrepo http://download.opensuse.org/repositories/devel:/languages:/erlang/openSUSE_11.4 erlang_suse_11")),
+                ok(sudo("zypper --non-interactive addrepo http://download.opensuse.org/repositories/devel:/languages:/erlang/openSUSE_12.3 erlang_suse_12")),
+                ok(sudo("zypper --non-interactive addrepo http://download.opensuse.org/repositories/devel:/languages:/erlang/openSUSE_13.1 erlang_suse_13")));
+    }
 }
+
diff --git a/brooklyn-library/software/messaging/src/main/resources/org/apache/brooklyn/entity/messaging/rabbit/rabbitmq.config b/brooklyn-library/software/messaging/src/main/resources/org/apache/brooklyn/entity/messaging/rabbit/rabbitmq.config
index b4428f0..c350b65 100644
--- a/brooklyn-library/software/messaging/src/main/resources/org/apache/brooklyn/entity/messaging/rabbit/rabbitmq.config
+++ b/brooklyn-library/software/messaging/src/main/resources/org/apache/brooklyn/entity/messaging/rabbit/rabbitmq.config
@@ -1,5 +1,6 @@
 [
 <#if entity.enableManagementPlugin>
+    {rabbit, [{loopback_users, []}]},
     {rabbitmq_mochiweb, [{listeners, [{mgmt, [{port, ${entity.managementPort?c}}]}]}]}
 </#if>
 ].
\ No newline at end of file