diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
index 79baa9d..154978f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
@@ -19,7 +19,7 @@
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.inject.AbstractModule;
 import com.google.inject.assistedinject.FactoryModuleBuilder;
-import com.google.inject.name.Names;
+import com.google.inject.multibindings.Multibinder;
 
 import com.googlesource.gerrit.plugins.rabbitmq.config.PluginProperties;
 import com.googlesource.gerrit.plugins.rabbitmq.config.Properties;
@@ -48,11 +48,12 @@
 
   @Override
   protected void configure() {
-    bind(Section.class).annotatedWith(Names.named("amqp")).to(AMQP.class);
-    bind(Section.class).annotatedWith(Names.named("exchange")).to(Exchange.class);
-    bind(Section.class).annotatedWith(Names.named("gerrit")).to(Gerrit.class);
-    bind(Section.class).annotatedWith(Names.named("message")).to(Message.class);
-    bind(Section.class).annotatedWith(Names.named("monitor")).to(Monitor.class);
+    Multibinder<Section> sectionBinder = Multibinder.newSetBinder(binder(), Section.class);
+    sectionBinder.addBinding().to(AMQP.class);
+    sectionBinder.addBinding().to(Exchange.class);
+    sectionBinder.addBinding().to(Gerrit.class);
+    sectionBinder.addBinding().to(Message.class);
+    sectionBinder.addBinding().to(Monitor.class);
 
     install(new FactoryModuleBuilder().implement(Solver.class, SolverImpl.class).build(SolverFactory.class));
     install(new FactoryModuleBuilder().implement(Session.class, AMQPSession.class).build(SessionFactory.class));
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/PluginProperties.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/PluginProperties.java
index 3fec0c5..9c978b2 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/PluginProperties.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/PluginProperties.java
@@ -16,7 +16,6 @@
 
 import com.google.inject.assistedinject.Assisted;
 import com.google.inject.assistedinject.AssistedInject;
-import com.google.inject.name.Named;
 
 import com.googlesource.gerrit.plugins.rabbitmq.config.section.Gerrit;
 import com.googlesource.gerrit.plugins.rabbitmq.config.section.Monitor;
@@ -34,10 +33,8 @@
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
-import java.util.List;
+import java.util.Set;
 
 public class PluginProperties implements Properties {
 
@@ -45,35 +42,18 @@
 
   private final static int MINIMUM_CONNECTION_MONITOR_INTERVAL = 5000;
 
-  private final List<Section> sections = new ArrayList<>();
+  private final Set<Section> sections;
   private final Path propertiesFile;
   private AMQProperties amqProperties;
 
   @AssistedInject
-  public PluginProperties(
-      @Named("amqp") final Section amqp,
-      @Named("exchange") final Section exchange,
-      @Named("gerrit") final Section gerrit,
-      @Named("message") final Section message,
-      @Named("monitor") final Section monitor) {
-    this(amqp, exchange, gerrit, message, monitor, null);
+  public PluginProperties(Set<Section> sections) {
+    this(sections, null);
   }
 
   @AssistedInject
-  public PluginProperties(
-      @Named("amqp") final Section amqp,
-      @Named("exchange") final Section exchange,
-      @Named("gerrit") final Section gerrit,
-      @Named("message") final Section message,
-      @Named("monitor") final Section monitor,
-      @Assisted Path propertiesFile) {
-    this.sections.addAll(Arrays.asList(
-        amqp,
-        exchange,
-        gerrit,
-        message,
-        monitor
-    ));
+  public PluginProperties(Set<Section> sections, @Assisted Path propertiesFile) {
+    this.sections = sections;
     this.propertiesFile = propertiesFile;
   }
 
@@ -141,8 +121,8 @@
   }
 
   @Override
-  public List<Section> getSections() {
-    return Collections.unmodifiableList(sections);
+  public Set<Section> getSections() {
+    return Collections.unmodifiableSet(sections);
   }
 
   @Override
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/Properties.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/Properties.java
index a51ad90..d81379b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/Properties.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/Properties.java
@@ -5,7 +5,7 @@
 import org.eclipse.jgit.lib.Config;
 
 import java.nio.file.Path;
-import java.util.List;
+import java.util.Set;
 
 public interface Properties extends Cloneable {
   public Config toConfig();
@@ -13,7 +13,7 @@
   public boolean load(Properties baseProperties);
   public Path getPath();
   public String getName();
-  public List<Section> getSections();
+  public Set<Section> getSections();
   public <T extends Section> T getSection(Class<T> clazz);
   public AMQProperties getAMQProperties();
 }
