diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Keys.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Keys.java
index 82c7136..41e011d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Keys.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Keys.java
@@ -1,27 +1,30 @@
 package com.googlesource.gerrit.plugins.rabbitmq;
 
 public enum Keys {
-  AMQP_URI("amqpUri", null),
-  AMQP_USERNAME("amqpUsername", null),
-  AMQP_PASSWORD("amqpPassword", null),
-  AMQP_QUEUE("amqpQueue", null),
-  AMQP_EXCHANGE("amqpExchange", null),
-  AMQP_ROUTINGKEY("amqpRoutingKey", null),
-  MESSAGE_DELIVERY_MODE("messageDeliveryMode", null),
-  MESSAGE_PRIORITY("messagePriority", null),
-  GERRIT_NAME("gerritName", "gerrit-name"),
-  GERRIT_HOSTNAME("gerritHostname", "gerrit-host"),
-  GERRIT_SCHEME("gerritScheme", "gerrit-scheme"),
-  GERRIT_PORT("gerritPort", "gerrit-port"),
-  GERRIT_FRONT_URL("gerritCanonicalWebUrl", "gerrit-front-url"),
-  GERRIT_VERSION(null, "gerrit-version"),
-  CONNECTION_MONITOR_INTERVAL("monitorInterval", null);
+  AMQP_URI("amqp.uri", null),
+  AMQP_USERNAME("amqp.username", null),
+  AMQP_PASSWORD("amqp.password", null),
+  AMQP_QUEUE("amqp.queue", null),
+  AMQP_EXCHANGE("amqp.exchange", null),
+  AMQP_ROUTINGKEY("amqp.routingKey", null),
+  MESSAGE_DELIVERY_MODE("message.deliveryMode", null),
+  MESSAGE_PRIORITY("message.priority", null),
+  GERRIT_NAME("gerrit.name", "gerrit-name"),
+  GERRIT_HOSTNAME("gerrit.hostname", "gerrit-host"),
+  GERRIT_SCHEME("gerrit.scheme", "gerrit-scheme"),
+  GERRIT_PORT("gerrit.port", "gerrit-port"),
+  GERRIT_FRONT_URL("gerrit.canonicalWebUrl", "gerrit-front-url"),
+  GERRIT_VERSION("gerrit.version", "gerrit-version"),
+  CONNECTION_MONITOR_INTERVAL("monitor.interval", null);
 
-  public String property;
+  public String section;
+  public String value;
   public String header;
 
   Keys(String property, String header) {
-    this.property = property;
+    String[] part = property.split("\\.");
+    this.section = part[0];
+    this.value = part[1];
     this.header = header;
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Properties.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Properties.java
index 972657b..4bc20b9 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Properties.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Properties.java
@@ -3,8 +3,7 @@
 import com.google.gerrit.common.Version;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.server.config.GerritServerConfig;
-import com.google.gerrit.server.config.PluginConfig;
-import com.google.gerrit.server.config.PluginConfigFactory;
+import com.google.gerrit.server.config.SitePaths;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
@@ -12,14 +11,22 @@
 
 import org.apache.commons.codec.CharEncoding;
 import org.apache.commons.lang.StringUtils;
+import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.lib.Config;
+import org.eclipse.jgit.storage.file.FileBasedConfig;
+import org.eclipse.jgit.util.FS;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
+import java.io.File;
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
 @Singleton
 public class Properties {
 
+  private static final Logger LOGGER = LoggerFactory.getLogger(Properties.class);
   private final static String GERRIT = "gerrit";
   private final static String CONTENT_TYPE_JSON = "application/json";
 
@@ -31,66 +38,105 @@
   private final static int MINIMUM_CONNECTION_MONITOR_INTERVAL = 5000;
 
   private final Config config;
-  private final PluginConfig pluginConfig;
+  private final Config pluginConfig;
   private AMQP.BasicProperties properties;
 
   @Inject
-  public Properties(@PluginName String pluginName,
-      @GerritServerConfig final Config config, PluginConfigFactory factory) {
+  public Properties(@PluginName final String pluginName, final SitePaths site,
+      @GerritServerConfig final Config config) {
     this.config = config;
-    this.pluginConfig = factory.getFromGerritConfig(pluginName);
+    this.pluginConfig = getPluginConfig(new File(site.etc_dir, pluginName + ".config"));
+  }
+
+  public Config getPluginConfig(File cfgPath) {
+    LOGGER.info("Loading " + cfgPath.toString() + " ...");
+    FileBasedConfig cfg = new FileBasedConfig(cfgPath, FS.DETECTED);
+    if (!cfg.getFile().exists()) {
+      LOGGER.warn("No " + cfg.getFile());
+      return cfg;
+    }
+    if (cfg.getFile().length() == 0) {
+      LOGGER.info("Empty " + cfg.getFile());
+      return cfg;
+    }
+
+    try {
+      cfg.load();
+    } catch (ConfigInvalidException e) {
+      LOGGER.info("Config file " + cfg.getFile() + " is invalid: " + e.getMessage());
+    } catch (IOException e) {
+      LOGGER.info("Cannot read " + cfg.getFile() + ": " + e.getMessage());
+    }
+    return cfg;
+  }
+
+  private String getConfigString(Keys key, String defaultValue) {
+    String val = pluginConfig.getString(key.section, null, key.value);
+    if (val == null) {
+      return defaultValue;
+    } else {
+      return val;
+    }
+  }
+
+  private int getConfigInt(Keys key, int defaultValue) {
+    return pluginConfig.getInt(key.section, key.value, defaultValue);
+  }
+
+  private boolean getConfigBoolean(Keys key, boolean defaultValue) {
+    return pluginConfig.getBoolean(key.section, key.value, defaultValue);
   }
 
   public String getAMQPUri() {
-    return pluginConfig.getString(Keys.AMQP_URI.property, "amqp://localhost");
+    return getConfigString(Keys.AMQP_URI, "amqp://localhost");
   }
 
   public String getAMQPUsername() {
-    return pluginConfig.getString(Keys.AMQP_USERNAME.property, "");
+    return getConfigString(Keys.AMQP_USERNAME, "");
   }
 
   public String getAMQPPassword() {
-    return pluginConfig.getString(Keys.AMQP_PASSWORD.property, "");
+    return getConfigString(Keys.AMQP_PASSWORD, "");
   }
 
   public String getAMQPQueue() {
-    return pluginConfig.getString(Keys.AMQP_QUEUE.property, "");
+    return getConfigString(Keys.AMQP_QUEUE, "");
   }
 
   public String getAMQPExchange() {
-    return pluginConfig.getString(Keys.AMQP_EXCHANGE.property, "");
+    return getConfigString(Keys.AMQP_EXCHANGE, "");
   }
 
   public String getAMQPRoutingKey() {
-    return pluginConfig.getString(Keys.AMQP_ROUTINGKEY.property, "");
+    return getConfigString(Keys.AMQP_ROUTINGKEY, "");
   }
 
   public int getMessageDeliveryMode() {
-    return pluginConfig.getInt(Keys.MESSAGE_DELIVERY_MODE.property, DEFAULT_MESSAGE_DELIVERY_MODE);
+    return getConfigInt(Keys.MESSAGE_DELIVERY_MODE, DEFAULT_MESSAGE_DELIVERY_MODE);
   }
 
   public int getMessagePriority() {
-    return pluginConfig.getInt(Keys.MESSAGE_PRIORITY.property, DEFAULT_MESSAGE_PRIORITY);
+    return getConfigInt(Keys.MESSAGE_PRIORITY, DEFAULT_MESSAGE_PRIORITY);
   }
 
   public String getGerritName() {
-    return pluginConfig.getString(Keys.GERRIT_NAME.property, "");
+    return getConfigString(Keys.GERRIT_NAME, "");
   }
 
   public String getGerritHostname() {
-    return pluginConfig.getString(Keys.GERRIT_HOSTNAME.property, "");
+    return getConfigString(Keys.GERRIT_HOSTNAME, "");
   }
 
   public String getGerritScheme() {
-    return pluginConfig.getString(Keys.GERRIT_SCHEME.property, DEFAULT_GERRIT_SCHEME);
+    return getConfigString(Keys.GERRIT_SCHEME, DEFAULT_GERRIT_SCHEME);
   }
 
   public int getGerritPort() {
-    return pluginConfig.getInt(Keys.GERRIT_PORT.property, DEFAULT_GERRIT_PORT);
+    return getConfigInt(Keys.GERRIT_PORT, DEFAULT_GERRIT_PORT);
   }
 
   public String getGerritFrontUrl() {
-    return StringUtils.stripToEmpty(config.getString(GERRIT, null, Keys.GERRIT_FRONT_URL.property));
+    return StringUtils.stripToEmpty(config.getString(GERRIT, null, Keys.GERRIT_FRONT_URL.value));
   }
 
   public String getGerritVersion() {
@@ -98,7 +144,7 @@
   }
 
   public int getConnectionMonitorInterval() {
-    int interval = pluginConfig.getInt(Keys.CONNECTION_MONITOR_INTERVAL.property, DEFAULT_CONNECTION_MONITOR_INTERVAL);
+    int interval = getConfigInt(Keys.CONNECTION_MONITOR_INTERVAL, DEFAULT_CONNECTION_MONITOR_INTERVAL);
     if (interval < MINIMUM_CONNECTION_MONITOR_INTERVAL) {
       return MINIMUM_CONNECTION_MONITOR_INTERVAL;
     }
