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/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 9d7322f..0000000
--- a/gradle.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-apiType=plugin
-apiVersion=2.12-SNAPSHOT
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..85b90a8
--- /dev/null
+++ b/lib/gerrit/BUCK
@@ -0,0 +1,12 @@
+include_defs('//bucklets/maven_jar.bucklet')
+
+VER = '2.12-SNAPSHOT'
+REPO = MAVEN_LOCAL
+
+maven_jar(
+  name = 'plugin-api',
+  id = 'com.google.gerrit:gerrit-plugin-api:' + VER,
+  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..fd2264f 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,55 @@
 
   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 {
+            Object value = f.get(section);
+            if (value == null) {
+              continue;
             }
+            switch(f.getType().getSimpleName()) {
+              case "String":
+                headers.put(mh.value(), value.toString());
+                break;
+              case "Integer":
+                headers.put(mh.value(), Integer.valueOf(value.toString()));
+                break;
+              case "Long":
+                headers.put(mh.value(), Long.valueOf(value.toString()));
+                break;
+              case "Boolean":
+                headers.put(mh.value(), Boolean.valueOf(value.toString()));
+                break;
+              default:
+                break;
+            }
+          } catch (IllegalAccessException | IllegalArgumentException ex) {
+            LOGGER.warn("Cannot access field {}. Cause: {}",
+                f.getName(), 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/config/PluginProperties.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/PluginProperties.java
index 9c978b2..36ba106 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
@@ -115,7 +115,10 @@
   @Override
   public String getName() {
     if (propertiesFile != null) {
-      return FilenameUtils.removeExtension(propertiesFile.getFileName().toString());
+      Path path = propertiesFile.getFileName();
+      if (path != null) {
+        return FilenameUtils.removeExtension(path.toString());
+      }
     }
     return null;
   }
@@ -136,7 +139,7 @@
   }
 
   public String getGerritFrontUrl() {
-    Gerrit gerrit = (Gerrit) getSection(Gerrit.class);
+    Gerrit gerrit = getSection(Gerrit.class);
     if (gerrit != null) {
       return gerrit.canonicalWebUrl;
     }
@@ -144,7 +147,7 @@
   }
 
   public boolean hasListenAs() {
-    Gerrit gerrit = (Gerrit) getSection(Gerrit.class);
+    Gerrit gerrit = getSection(Gerrit.class);
     if (gerrit != null) {
       return gerrit.listenAs.isEmpty();
     }
@@ -152,7 +155,7 @@
   }
 
   public String getListenAs() {
-    Gerrit gerrit = (Gerrit) getSection(Gerrit.class);
+    Gerrit gerrit = getSection(Gerrit.class);
     if (gerrit != null) {
       return gerrit.listenAs;
     }
@@ -160,7 +163,7 @@
   }
 
   public String getGerritVersion() {
-    Gerrit gerrit = (Gerrit) getSection(Gerrit.class);
+    Gerrit gerrit = getSection(Gerrit.class);
     if (gerrit != null) {
       return gerrit.version;
     }
@@ -168,13 +171,14 @@
   }
 
   public int getConnectionMonitorInterval() {
-    Monitor monitor = (Monitor) getSection(Monitor.class);
+    Monitor monitor = getSection(Monitor.class);
     if (monitor != null && monitor.interval < MINIMUM_CONNECTION_MONITOR_INTERVAL) {
       return monitor.interval;
     }
     return MINIMUM_CONNECTION_MONITOR_INTERVAL;
   }
 
+  @Override
   public AMQProperties getAMQProperties() {
     if (amqProperties == null) {
       amqProperties = new AMQProperties(this);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/section/Sections.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/section/Sections.java
index 263f8ba..759ef03 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/section/Sections.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/section/Sections.java
@@ -39,17 +39,18 @@
           Default a = f.getAnnotation(Default.class);
           Class<?> type = f.getType();
           if (type == String.class) {
-            f.set(section, new String(a.value()));
+            f.set(section, a.value());
           } else if (type == Integer.class) {
-            f.set(section, new Integer(a.value()));
+            f.set(section, Integer.valueOf(a.value()));
           } else if (type == Long.class) {
-            f.set(section, new Long(a.value()));
+            f.set(section, Long.valueOf(a.value()));
           } else if (type == Boolean.class) {
-            f.set(section, new Boolean(a.value()));
+            f.set(section, Boolean.valueOf(a.value()));
           }
         }
-      } catch (Exception ex) {
-        LOGGER.warn("Exception during initialize: {}", f.getName());
+      } catch (IllegalAccessException ex) {
+        LOGGER.warn("Cannot access field {}. Cause: {}",
+            f.getName(), ex.getMessage());
       }
     }
     return section;
@@ -76,9 +77,9 @@
             config.setBoolean(getName(section), null, f.getName(), Boolean.class.cast(obj));
           }
         }
-      } catch (Exception ex) {
-        LOGGER.warn("Exception during toConfig: {}", f.getName());
-        LOGGER.info("{}", ex.getMessage());
+      } catch (IllegalAccessException ex) {
+        LOGGER.warn("Cannot access field {}. Cause: {}",
+            f.getName(), ex.getMessage());
       }
     }
     return config;
@@ -95,17 +96,18 @@
             if (names.contains(f.getName())) {
               Class<?> type = f.getType();
               if (type == String.class) {
-                f.set(section, new String(config.getString(getName(section), null, f.getName())));
+                f.set(section, config.getString(getName(section), null, f.getName()));
               } else if (type == Integer.class) {
-                f.set(section, new Integer(config.getInt(getName(section), null, f.getName(), 0)));
+                f.set(section, config.getInt(getName(section), null, f.getName(), 0));
               } else if (type == Long.class) {
-                f.set(section, new Long(config.getLong(getName(section), null, f.getName(), 0)));
+                f.set(section, config.getLong(getName(section), null, f.getName(), 0));
               } else if (type == Boolean.class) {
-                f.set(section, new Boolean(config.getBoolean(getName(section), null, f.getName(), false)));
+                f.set(section, config.getBoolean(getName(section), null, f.getName(), false));
               }
             }
-          } catch (Exception ex) {
-            LOGGER.warn("Exception during fromConfig: {}", f.getName());
+          } catch (IllegalAccessException ex) {
+            LOGGER.warn("Cannot access field {}. Cause: {}",
+                f.getName(), ex.getMessage());
           }
         }
       }
@@ -131,9 +133,9 @@
             f.set(section, val);
           }
         }
-      } catch (Exception ex) {
-        LOGGER.warn("Exception during normalize: {}", f.getName());
-        LOGGER.info("{}", ex.getMessage());
+      } catch (IllegalAccessException ex) {
+        LOGGER.warn("Cannot access field {}. Cause: {}",
+            f.getName(), ex.getMessage());
       }
     }
     return section;
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..1f9b7e3 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
@@ -34,6 +34,10 @@
 
 import java.io.IOException;
 import java.net.URISyntaxException;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicInteger;
 
 public final class AMQPSession implements Session {
 
@@ -58,9 +62,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 +73,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;
@@ -85,8 +90,8 @@
   private final Properties properties;
   private volatile Connection connection;
   private volatile Channel channel;
-  private volatile int failureCount = 0;
 
+  private final AtomicInteger failureCount = new AtomicInteger(0);
   private final ShutdownListener connectionListener = new ShutdownListenerImpl(Connection.class);
   private final ShutdownListener channelListener = new ShutdownListenerImpl(Channel.class);
 
@@ -114,13 +119,13 @@
       try {
         ch = connection.createChannel();
         ch.addShutdownListener(channelListener);
-        failureCount = 0;
+        failureCount.set(0);
         LOGGER.info(MSG("Channel #{} opened."), ch.getChannelNumber());
-      } catch (Exception ex) {
-        LOGGER.warn(MSG("Failed to open channel."));
-        failureCount++;
+      } catch (IOException ex) {
+        LOGGER.error(MSG("Failed to open channel."), ex);
+        failureCount.incrementAndGet();
       }
-      if (failureCount > properties.getSection(Monitor.class).failureCount) {
+      if (failureCount.get() > properties.getSection(Monitor.class).failureCount) {
         LOGGER.warn("Connection has something wrong. So will be disconnected.");
         disconnect();
       }
@@ -153,9 +158,9 @@
     } catch (URISyntaxException ex) {
       LOGGER.error(MSG("URI syntax error: {}"), amqp.uri);
     } catch (IOException ex) {
-      LOGGER.error(MSG("Connection cannot be opened."));
-    } catch (Exception ex) {
-      LOGGER.warn(MSG("Connection has something error. it will be disposed."), ex);
+      LOGGER.error(MSG("Connection cannot be opened."), ex);
+    } catch (KeyManagementException | NoSuchAlgorithmException ex) {
+      LOGGER.error(MSG("Security error when opening connection."), ex);
     }
   }
 
@@ -164,22 +169,22 @@
     LOGGER.info(MSG("Disconnecting..."));
     try {
       if (channel != null) {
-        LOGGER.info(MSG("Close Channel #{}..."), channel.getChannelNumber());
+        LOGGER.info(MSG("Closing Channel #{}..."), channel.getChannelNumber());
         channel.close();
       }
-    } catch (Exception ex) {
-      LOGGER.warn(MSG("Error when close channel.") , ex);
+    } catch (IOException | TimeoutException ex) {
+      LOGGER.error(MSG("Error when closing channel."), ex);
     } finally {
       channel = null;
     }
 
     try {
       if (connection != null) {
-        LOGGER.info(MSG("Close Connection..."));
+        LOGGER.info(MSG("Closing Connection..."));
         connection.close();
       }
-    } catch (Exception ex) {
-      LOGGER.warn(MSG("Error when close connection.") , ex);
+    } catch (IOException ex) {
+      LOGGER.error(MSG("Error when closing connection."), ex);
     } finally {
       connection = null;
     }
@@ -194,12 +199,12 @@
       Message message = properties.getSection(Message.class);
       Exchange exchange = properties.getSection(Exchange.class);
       try {
-        LOGGER.debug(MSG("Send message."));
+        LOGGER.debug(MSG("Sending message."));
         channel.basicPublish(exchange.name, message.routingKey,
             properties.getAMQProperties().getBasicProperties(),
             messageBody.getBytes(CharEncoding.UTF_8));
-      } catch (Exception ex) {
-        LOGGER.warn(MSG("Error when sending meessage."), ex);
+      } catch (IOException ex) {
+        LOGGER.error(MSG("Error when sending meessage."), ex);
       }
     }
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/solver/version/V1.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/solver/version/V1.java
index e6f54a3..0b91423 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/solver/version/V1.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/solver/version/V1.java
@@ -26,6 +26,7 @@
 import org.slf4j.LoggerFactory;
 
 import java.io.File;
+import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 
@@ -55,17 +56,23 @@
    * new : data/rabbitmq/rabbitmq.config
    *       data/rabbitmq/site/default.config
    */
+  @Override
   public void solve() {
     try {
       Path oldFile = etcDir.resolve(pluginName + FILE_EXT);
       Path newFile = pluginDataDir.resolve(pluginName + FILE_EXT);
       Path siteDir = pluginDataDir.resolve(SITE_DIR);
+      Path defaultSiteFile = siteDir.resolve(DEFAULT_SITE_NAME + FILE_EXT);
 
       Files.createDirectories(siteDir);
-      Files.move(oldFile, newFile);
-      Files.createFile(siteDir.resolve(DEFAULT_SITE_NAME + FILE_EXT));
-    } catch (Exception ex) {
-      LOGGER.info(ex.getMessage());
+      if (oldFile.toFile().exists()) {
+        Files.move(oldFile, newFile);
+      }
+      if (!defaultSiteFile.toFile().exists()) {
+        Files.createFile(defaultSiteFile);
+      }
+    } catch (IOException ex) {
+      LOGGER.error("Failed to initialize plugin configuration", ex);
     }
   }
 }
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).
