diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.java b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.java
index e7cb590..c152882 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.java
@@ -12,6 +12,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import brooklyn.config.ConfigKey;
 import brooklyn.entity.Entity;
 import brooklyn.entity.Group;
 import brooklyn.entity.basic.Description;
@@ -76,6 +77,15 @@
     public static final BasicConfigKey<Boolean> STICKY =
         new BasicConfigKey<Boolean>(Boolean.class, "nginx.sticky", "whether to use sticky sessions", true);
 
+    @SetFromFlag("stickyVersion")
+    public static final ConfigKey<String> STICKY_VERSION =
+        new BasicConfigKey<String>(String.class, "nginx.sticky.version", 
+                "Version of ngnix-sticky-module to be installed, if required", "1.0");
+    
+    @SetFromFlag("pcreVersion")
+    public static final ConfigKey<String> PCRE_VERSION =
+        new BasicConfigKey<String>(String.class, "pcre.version", "Version of PCRE to be installed, if required", "8.32");
+    
     @SetFromFlag("httpPollPeriod")
     public static final BasicConfigKey<Long> HTTP_POLL_PERIOD =
         new BasicConfigKey<Long>(Long.class, "nginx.sensorpoll.http", "poll period (in milliseconds)", 1000L);
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
index 74fdcd5..b31d8e8 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
@@ -63,10 +63,11 @@
         
         String nginxUrl = format("http://nginx.org/download/nginx-%s.tar.gz", getVersion());
         String nginxSaveAs = format("nginx-%s.tar.gz", getVersion());
-        String stickyModuleUrl = "http://nginx-sticky-module.googlecode.com/files/nginx-sticky-module-1.0.tar.gz";
-        String stickyModuleSaveAs = "nginx-sticky-module-1.0.tar.gz";
+        String stickyVersion = entity.getConfig(NginxController.STICKY_VERSION);
+        String stickyModuleUrl = format("http://nginx-sticky-module.googlecode.com/files/nginx-sticky-module-%s.tar.gz", stickyVersion);
+        String stickyModuleSaveAs = format("nginx-sticky-module-%s.tar.gz", stickyVersion);
         boolean sticky = ((NginxController) entity).isSticky();
-
+        boolean isMac = getMachine().getOsDetails().isMac();
         ScriptHelper script = newScript(INSTALLING);
         script.body.append(CommonCommands.INSTALL_TAR);
         MutableMap<String, String> installPackageFlags = MutableMap.of(
@@ -75,6 +76,21 @@
                 "port", null);
         script.body.append(CommonCommands.installPackage(installPackageFlags, "nginx-prerequisites"));
         script.body.append(CommonCommands.downloadUrlAs(nginxUrl, getEntityVersionLabel("/"), nginxSaveAs));
+        if (isMac) {
+            String pcreVersion = entity.getConfig(NginxController.PCRE_VERSION);
+            String pcreUrl = format("ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-%s.tar.gz", pcreVersion);
+            String pcreSaveAs = format("pcre-%s.tar.gz", pcreVersion);
+            script.body.append(CommonCommands.downloadUrlAs(pcreUrl, getEntityVersionLabel("/"), pcreSaveAs));
+            // Install PCRE
+            script.body.append(format("mkdir -p %s/pcre-dist", getInstallDir()));
+            script.body.append(format("tar xvzf pcre-%s.tar.gz", pcreVersion));
+            script.body.append(format("cd pcre-%s", pcreVersion));
+            script.body.append(format("./configure --prefix=%s/pcre-dist", getInstallDir()));
+            script.body.append("make");
+            script.body.append("make install");
+            script.body.append("cd ..");
+        }
+        
         script.body.append(format("tar xvzf %s", nginxSaveAs));
         script.body.append(format("cd %s/nginx-%s", getInstallDir(), getVersion()));
 
@@ -89,8 +105,9 @@
                 "mkdir -p dist",
                 "./configure"+
                     format(" --prefix=%s/nginx-%s/dist", getInstallDir(), getVersion()) +
-                    " --with-http_ssl_module"+
-                    (sticky ? format(" --add-module=%s/nginx-%s/src/nginx-sticky-module-1.0 ", getInstallDir(), getVersion()) : ""),
+                    " --with-http_ssl_module" +
+                    (sticky ? format(" --add-module=%s/nginx-%s/src/nginx-sticky-module-1.0 ", getInstallDir(), getVersion()) : "") +
+                    (isMac ? format(" --with-ld-opt=\"-L %s/pcre-dist/lib\"", getInstallDir()) : "") ,
                 "make install");
 
         script.header.prepend("set -x");
