diff --git a/.buckconfig b/.buckconfig
new file mode 100644
index 0000000..5238f0d
--- /dev/null
+++ b/.buckconfig
@@ -0,0 +1,13 @@
+[alias]
+  rabbitmq = //:rabbitmq
+  plugin = //:rabbitmq
+
+[java]
+  src_roots = java, resources
+
+[project]
+  ignore = .git
+
+[cache]
+  mode = dir
+  dir = buck-out/cache
diff --git a/.gitignore b/.gitignore
index 931312c..73faeb9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,11 +1,15 @@
 work/
+buck-out/
+bucklets
 build/
 bin/
 target/
-.gradle/
+.buckd/
+.buckversion
 .classpath
 .checkstyle
 .project
 .settings/
 .idea/
+.watchmanconfig
 *.iml
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 1cf60c0..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-language: java
-jdk:
-  - oraclejdk7
-  - openjdk7
-env:
-  matrix:
-    - API_VERSION=2.8
-    - API_VERSION=2.8.1
-    - API_VERSION=2.8.2
-    - API_VERSION=2.8.3
-    - API_VERSION=2.8.4
-    - API_VERSION=2.8.5
-    - API_VERSION=2.9
-    - API_VERSION=2.9.1
-    - API_VERSION=2.9.3
-    - API_VERSION=2.10
-
-install: true
-
-script: ./gradlew build -PapiVersion=$API_VERSION
diff --git a/BUCK b/BUCK
new file mode 100644
index 0000000..4e69319
--- /dev/null
+++ b/BUCK
@@ -0,0 +1,55 @@
+include_defs('//bucklets/gerrit_plugin.bucklet')
+include_defs('//bucklets/maven_jar.bucklet')
+
+gerrit_plugin(
+  name = 'rabbitmq',
+  srcs = glob(['src/main/java/**/*.java']),
+  resources = glob(['src/main/resources/**/*']),
+  manifest_entries = [
+    'Gerrit-PluginName: rabbitmq',
+    'Gerrit-Module: com.googlesource.gerrit.plugins.rabbitmq.Module',
+    'Implementation-Title: Gerrit rabbitmq plugin',
+    'Implementation-URL: https://github.com/rinrinne/gerrit-rabbitmq-plugin',
+    'Implementation-Vendor: rinrinne',
+  ],
+  deps = [
+    ':amqp-client',
+    ':guice-multibindings',
+  ],
+  provided_deps = [
+    '//lib:gson',
+    '//lib/commons:codec',
+    '//lib/commons:io',
+    '//lib/commons:lang',
+  ],
+)
+
+java_library(
+  name = 'classpath',
+  deps = [':rabbitmq__plugin'],
+)
+
+maven_jar(
+  name = 'amqp-client',
+  id = 'com.rabbitmq:amqp-client:3.5.2',
+  sha1 = '8d10edd29e08f78349bd1da9d18f81c9f8b90567',
+  license = 'MPL1.1',
+  exclude_java_sources = True,
+  visibility = [],
+)
+
+maven_jar(
+  name = 'guice-multibindings',
+  id = 'com.google.inject.extensions:guice-multibindings:4.0-beta5',
+  sha1 = 'f432356db0a167127ffe4a7921238d7205b12682',
+  license = 'Apache2.0',
+  exclude_java_sources = True,
+  exclude = [
+    'META-INF/DEPENDENCIES',
+    'META-INF/LICENSE',
+    'META-INF/NOTICE',
+    'META-INF/maven/com.google.guava/guava/pom.properties',
+    'META-INF/maven/com.google.guava/guava/pom.xml',
+  ],
+  visibility = [],
+)
diff --git a/README.md b/README.md
index 8e71ef5..6b8c33f 100644
--- a/README.md
+++ b/README.md
@@ -21,22 +21,21 @@
 ---------------------
 
 * `linux`
-  * `java-1.7`
-    * `gradle`
+* `java-1.7`
+* `Buck`
 
 Build
 ---------------------
 
-To build plugin with gradle.
+Clone or link this plugin to the plugins directory of Gerrit's source
+tree, and issue the command:
 
-    ./gradlew build
 
-Using another version API
---------------------------
+    buck build plugins/rabbitmq
 
-Now avaliable for Gerrit 2.10 only. If you want to use it on another version of Gerrit, please try the below.
+The output is created in
 
-    ./gradlew build -PapiVersion=2.8
+    buck-out/gen/plugins/rabbitmq/rabbitmq.jar
 
 Reference
 ---------------------
diff --git a/VERSION b/VERSION
new file mode 100644
index 0000000..f5bb986
--- /dev/null
+++ b/VERSION
@@ -0,0 +1,4 @@
+# Used by BUCK to include "Implementation-Version" in plugin Manifest.
+# If this file doesn't exist the output of 'git describe' is used
+# instead.
+PLUGIN_VERSION = '2.11'
diff --git a/build.gradle b/build.gradle
deleted file mode 100644
index f4eb96d..0000000
--- a/build.gradle
+++ /dev/null
@@ -1,78 +0,0 @@
-task wrapper(type: Wrapper) {
-  gradleVersion = '2.3'
-}
-
-buildscript {
-  repositories {
-    jcenter()
-  }
-  dependencies {
-    classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.1'
-  }
-}
-
-apply plugin: 'java'
-apply plugin: 'eclipse'
-apply plugin: 'idea'
-apply plugin: 'com.github.johnrengelman.shadow'
-
-sourceCompatibility = 1.7
-targetCompatibility = 1.7
-
-group = 'com.googlesource.gerrit.plugins.rabbitmq'
-version = '3.141-SNAPSHOT'
-
-jar {
-  manifest {
-    attributes(
-      'Gerrit-PluginName': project.name,
-      'Gerrit-ApiType': apiType,
-      'Gerrit-ApiVersion': apiVersion,
-      'Gerrit-Module': 'com.googlesource.gerrit.plugins.rabbitmq.Module',
-      'Implementation-Vendor': 'rinrinne',
-      'Implementation-URL': 'https://github.com/rinrinne/gerrit-rabbitmq-plugin',
-      'Implementation-Title': "${apiType} ${project.name}",
-      'Implementation-Version' : version,
-      'Created-By': 'rinrinne (rinrin.ne@gmail.com)'
-    )
-  }
-}
-
-shadowJar {
-  classifier = apiVersion
-  mergeServiceFiles {
-    exclude 'META-INF/*.DSA'
-    exclude 'META-INF/*.RSA'
-  }
-  dependencies {
-    include(dependency('com.rabbitmq:amqp-client'))
-    include(dependency('com.google.inject.extensions:guice-multibindings'))
-  }
-}
-
-repositories {
-  mavenLocal()
-  mavenCentral()
-  maven {
-    name = "Gerrit API repository"
-    url = "https://gerrit-api.storage.googleapis.com/"
-    artifactUrls = [
-      "https://gerrit-api.storage.googleapis.com/release/",
-      "https://gerrit-api.storage.googleapis.com/snapshot/",
-    ]
-  }
-}
-
-dependencies {
-  compile(
-    [group: 'com.google.gerrit', name: "gerrit-${apiType}-api", version: apiVersion],
-    [group: 'com.google.inject.extensions', name: 'guice-multibindings', version: '4.0-beta5'],
-    [group: 'com.google.code.gson', name: 'gson', version: '2.1'],
-    [group: 'commons-lang', name: 'commons-lang', version: '2.5'],
-    [group: 'commons-codec', name: 'commons-codec', version: '1.4'],
-    [group: 'commons-io', name: 'commons-io', version: '1.4'],
-    [group: 'com.rabbitmq', name: 'amqp-client', version: '3.5.0'],
-  )
-}
-
-assemble.dependsOn shadowJar
diff --git a/gradle.properties b/gradle.properties
deleted file mode 100644
index fe1f399..0000000
--- a/gradle.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-apiType=plugin
-apiVersion=2.11
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 3d0dee6..0000000
--- a/gradle/wrapper/gradle-wrapper.jar
+++ /dev/null
Binary files differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index a955c84..0000000
--- a/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Tue Feb 17 13:46:55 JST 2015
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.3-bin.zip
diff --git a/gradlew b/gradlew
deleted file mode 100755
index 91a7e26..0000000
--- a/gradlew
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/usr/bin/env bash
-
-##############################################################################
-##
-##  Gradle start up script for UN*X
-##
-##############################################################################
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn ( ) {
-    echo "$*"
-}
-
-die ( ) {
-    echo
-    echo "$*"
-    echo
-    exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-case "`uname`" in
-  CYGWIN* )
-    cygwin=true
-    ;;
-  Darwin* )
-    darwin=true
-    ;;
-  MINGW* )
-    msys=true
-    ;;
-esac
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched.
-if $cygwin ; then
-    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-fi
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-        PRG="$link"
-    else
-        PRG=`dirname "$PRG"`"/$link"
-    fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >&-
-APP_HOME="`pwd -P`"
-cd "$SAVED" >&-
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-        # IBM's JDK on AIX uses strange locations for the executables
-        JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-        JAVACMD="$JAVA_HOME/bin/java"
-    fi
-    if [ ! -x "$JAVACMD" ] ; then
-        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-    fi
-else
-    JAVACMD="java"
-    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
-    MAX_FD_LIMIT=`ulimit -H -n`
-    if [ $? -eq 0 ] ; then
-        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
-            MAX_FD="$MAX_FD_LIMIT"
-        fi
-        ulimit -n $MAX_FD
-        if [ $? -ne 0 ] ; then
-            warn "Could not set maximum file descriptor limit: $MAX_FD"
-        fi
-    else
-        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
-    fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
-    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
-    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
-    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-
-    # We build the pattern for arguments to be converted via cygpath
-    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
-    SEP=""
-    for dir in $ROOTDIRSRAW ; do
-        ROOTDIRS="$ROOTDIRS$SEP$dir"
-        SEP="|"
-    done
-    OURCYGPATTERN="(^($ROOTDIRS))"
-    # Add a user-defined pattern to the cygpath arguments
-    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
-        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
-    fi
-    # Now convert the arguments - kludge to limit ourselves to /bin/sh
-    i=0
-    for arg in "$@" ; do
-        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
-        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
-
-        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
-            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
-        else
-            eval `echo args$i`="\"$arg\""
-        fi
-        i=$((i+1))
-    done
-    case $i in
-        (0) set -- ;;
-        (1) set -- "$args0" ;;
-        (2) set -- "$args0" "$args1" ;;
-        (3) set -- "$args0" "$args1" "$args2" ;;
-        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
-        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
-        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
-        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
-        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
-        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
-    esac
-fi
-
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
-    JVM_OPTS=("$@")
-}
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
-
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/gradlew.bat b/gradlew.bat
deleted file mode 100644
index aec9973..0000000
--- a/gradlew.bat
+++ /dev/null
@@ -1,90 +0,0 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem  Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windowz variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/lib/BUCK b/lib/BUCK
new file mode 100644
index 0000000..06f7c02
--- /dev/null
+++ b/lib/BUCK
@@ -0,0 +1,8 @@
+include_defs('//bucklets/maven_jar.bucklet')
+
+maven_jar(
+  name = 'gson',
+  id = 'com.google.code.gson:gson:2.3.1',
+  sha1 = 'ecb6e1f8e4b0e84c4b886c2f14a1500caf309757',
+  license = 'Apache2.0',
+)
diff --git a/lib/commons/BUCK b/lib/commons/BUCK
new file mode 100644
index 0000000..7b7f70f
--- /dev/null
+++ b/lib/commons/BUCK
@@ -0,0 +1,24 @@
+include_defs('//bucklets/maven_jar.bucklet')
+
+maven_jar(
+  name = 'codec',
+  id = 'commons-codec:commons-codec:1.4',
+  sha1 = '4216af16d38465bbab0f3dff8efa14204f7a399a',
+  license = 'Apache2.0',
+  exclude = ['META-INF/LICENSE.txt', 'META-INF/NOTICE.txt'],
+)
+
+maven_jar(
+  name = 'lang',
+  id = 'commons-lang:commons-lang:2.5',
+  sha1 = 'b0236b252e86419eef20c31a44579d2aee2f0a69',
+  license = 'Apache2.0',
+  exclude = ['META-INF/LICENSE.txt', 'META-INF/NOTICE.txt'],
+)
+
+maven_jar(
+  name = 'io',
+  id = 'commons-io:commons-io:1.4',
+  sha1 = 'a8762d07e76cfde2395257a5da47ba7c1dbd3dce',
+  license = 'Apache2.0',
+)
diff --git a/lib/gerrit/BUCK b/lib/gerrit/BUCK
new file mode 100644
index 0000000..96d016a
--- /dev/null
+++ b/lib/gerrit/BUCK
@@ -0,0 +1,13 @@
+include_defs('//bucklets/maven_jar.bucklet')
+
+VER = '2.11'
+REPO = MAVEN_CENTRAL
+
+maven_jar(
+  name = 'plugin-api',
+  id = 'com.google.gerrit:gerrit-plugin-api:' + VER,
+  sha1 = 'be80ff991f7b9f8669b7a2a399003ec1ae69ed31',
+  license = 'Apache2.0',
+  attach_source = False,
+  repository = REPO,
+)
diff --git a/settings.gradle b/settings.gradle
deleted file mode 100644
index 1adba7a..0000000
--- a/settings.gradle
+++ /dev/null
@@ -1 +0,0 @@
-rootProject.name = 'rabbitmq'
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java
index 84d47cb..99804d4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java
@@ -117,7 +117,7 @@
     Properties base = propFactory.create(pluginDataDir.resolve(pluginName + FILE_EXT));
     base.load();
 
-    // Load site
+    // Load sites
     try (DirectoryStream<Path> ds = Files.newDirectoryStream(pluginDataDir.resolve(SITE_DIR), "*" + FILE_EXT)) {
       for (Path configFile : ds) {
         Properties site = propFactory.create(configFile);
@@ -128,6 +128,10 @@
     } catch (IOException iex) {
       LOGGER.warn(iex.getMessage());
     }
+    if (propList.isEmpty()) {
+      LOGGER.warn("No site configs found. Using base config only!");
+      propList.add(base);
+    }
     return propList;
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/AMQProperties.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/AMQProperties.java
index 0fd3a88..4663a14 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/AMQProperties.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/AMQProperties.java
@@ -14,6 +14,7 @@
 
 package com.googlesource.gerrit.plugins.rabbitmq.config;
 
+import com.google.gerrit.common.TimeUtil;
 import com.googlesource.gerrit.plugins.rabbitmq.annotation.MessageHeader;
 import com.googlesource.gerrit.plugins.rabbitmq.config.section.Message;
 import com.googlesource.gerrit.plugins.rabbitmq.config.section.Section;
@@ -24,6 +25,7 @@
 import org.slf4j.LoggerFactory;
 
 import java.lang.reflect.Field;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -34,54 +36,50 @@
 
   private static final Logger LOGGER = LoggerFactory.getLogger(AMQProperties.class);
 
-  private final PluginProperties properties;
-  private AMQP.BasicProperties amqpProperties;
+  private final Message message;
+  private final Map<String, Object> headers;
 
   public AMQProperties(PluginProperties properties) {
-    this.properties = properties;
-  }
-
-  public AMQP.BasicProperties getBasicProperties() {
-    if (amqpProperties == null) {
-      Map<String, Object> headers = new HashMap<>();
-      for (Section section : properties.getSections()) {
-        for (Field f : section.getClass().getFields()) {
-          if (f.isAnnotationPresent(MessageHeader.class)) {
-            MessageHeader mh = f.getAnnotation(MessageHeader.class);
-            try {
-              switch(f.getType().getSimpleName()) {
-                case "String":
-                  headers.put(mh.value(), f.get(section).toString());
-                  break;
-                case "Integer":
-                  headers.put(mh.value(), f.getInt(section));
-                  break;
-                case "Long":
-                  headers.put(mh.value(), f.getLong(section));
-                  break;
-                case "Boolean":
-                  headers.put(mh.value(), f.getBoolean(section));
-                  break;
-                default:
-                  break;
-              }
-            } catch (Exception ex) {
-              LOGGER.info(ex.getMessage());
+    this.message = properties.getSection(Message.class);
+    this.headers = new HashMap<>();
+    for (Section section : properties.getSections()) {
+      for (Field f : section.getClass().getFields()) {
+        if (f.isAnnotationPresent(MessageHeader.class)) {
+          MessageHeader mh = f.getAnnotation(MessageHeader.class);
+          try {
+            switch(f.getType().getSimpleName()) {
+              case "String":
+                headers.put(mh.value(), f.get(section).toString());
+                break;
+              case "Integer":
+                headers.put(mh.value(), f.getInt(section));
+                break;
+              case "Long":
+                headers.put(mh.value(), f.getLong(section));
+                break;
+              case "Boolean":
+                headers.put(mh.value(), f.getBoolean(section));
+                break;
+              default:
+                break;
             }
+          } catch (Exception ex) {
+            LOGGER.info(ex.getMessage());
           }
         }
       }
-      Message message = properties.getSection(Message.class);
-      AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder();
-      builder.appId(EVENT_APPID);
-      builder.contentEncoding(CharEncoding.UTF_8);
-      builder.contentType(CONTENT_TYPE_JSON);
-      builder.deliveryMode(message.deliveryMode);
-      builder.priority(message.priority);
-      builder.headers(headers);
-
-      amqpProperties = builder.build();
     }
-    return amqpProperties;
+  }
+
+  public AMQP.BasicProperties getBasicProperties() {
+    return new AMQP.BasicProperties.Builder()
+      .appId(EVENT_APPID)
+      .contentEncoding(CharEncoding.UTF_8)
+      .contentType(CONTENT_TYPE_JSON)
+      .deliveryMode(message.deliveryMode)
+      .priority(message.priority)
+      .headers(headers)
+      .timestamp(new Date(TimeUtil.nowMs()))
+      .build();
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/type/AMQPSession.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/type/AMQPSession.java
index f7dfba6..27acc6f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/type/AMQPSession.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/type/AMQPSession.java
@@ -58,9 +58,10 @@
           if (clazz == Channel.class) {
             Channel ch = Channel.class.cast(obj);
             if (cause.isInitiatedByApplication()) {
-              LOGGER.info(MSG("Channel #{} closed."), ch.getChannelNumber());
+              LOGGER.info(MSG("Channel #{} closed by application."), ch.getChannelNumber());
             } else {
-              LOGGER.info(MSG("Channel #{} suddenly closed."), ch.getChannelNumber());
+              LOGGER.warn(MSG("Channel #{} closed. Cause: {}"),
+                ch.getChannelNumber(), cause.getMessage());
             }
             if (ch.equals(AMQPSession.this.channel)) {
               AMQPSession.this.channel = null;
@@ -68,9 +69,9 @@
           } else if (clazz == Connection.class) {
             Connection conn = Connection.class.cast(obj);
             if (cause.isInitiatedByApplication()) {
-              LOGGER.info(MSG("Connection closed."));
+              LOGGER.info(MSG("Connection closed by application."));
             } else {
-              LOGGER.info(MSG("Connection suddenly closed."));
+              LOGGER.warn(MSG("Connection closed. Cause: {}"), cause.getMessage());
             }
             if (conn.equals(AMQPSession.this.connection)) {
               AMQPSession.this.connection = null;
diff --git a/src/main/resources/Documentation/build.md b/src/main/resources/Documentation/build.md
new file mode 100644
index 0000000..38c3bb5
--- /dev/null
+++ b/src/main/resources/Documentation/build.md
@@ -0,0 +1,73 @@
+Build
+=====
+
+This plugin is built with Buck.
+
+Two build modes are supported: Standalone and in Gerrit tree. Standalone
+build mode is recommended, as this mode doesn't require local Gerrit
+tree to exist.
+
+Build standalone
+----------------
+
+Clone bucklets library:
+
+```
+  git clone https://gerrit.googlesource.com/bucklets
+
+```
+and link it to rabbitmq directory:
+
+```
+  cd rabbitmq && ln -s ../bucklets .
+```
+
+Add link to the .buckversion file:
+
+```
+  cd rabbitmq && ln -s bucklets/buckversion .buckversion
+```
+
+Add link to the .watchmanconfig file:
+
+```
+  cd rabbitmq && ln -s bucklets/watchmanconfig .watchmanconfig
+```
+
+To build the plugin, issue the following command:
+
+
+```
+  buck build plugin
+```
+
+The output is created in
+
+```
+  buck-out/gen/rabbitmq.jar
+```
+
+Build in Gerrit tree
+--------------------
+
+Clone or link this plugin to the plugins directory of Gerrit's source
+tree, and issue the command:
+
+```
+  buck build plugins/rabbitmq
+```
+
+The output is created in
+
+```
+  buck-out/gen/plugins/rabbitmq/rabbitmq.jar
+```
+
+This project can be imported into the Eclipse IDE:
+
+```
+  ./tools/eclipse/project.py
+```
+
+How to build the Gerrit Plugin API is described in the [Gerrit
+documentation](../../../Documentation/dev-buck.html#_extension_and_plugin_api_jar_files).
