[jboss-logging-tools] 01/07: New upstream version 2.1.0

Markus Koschany apo at moszumanska.debian.org
Sat Aug 19 20:52:02 UTC 2017


This is an automated email from the git hooks/post-receive script.

apo pushed a commit to branch master
in repository jboss-logging-tools.

commit 017658ba9c75ce06b09138a7c4e1f4b330877d82
Author: Markus Koschany <apo at debian.org>
Date:   Sat Aug 19 22:11:32 2017 +0200

    New upstream version 2.1.0
---
 README.adoc                                        |   16 +
 annotations/pom.xml                                |    4 +-
 .../org/jboss/logging/annotations/BaseUrl.java     |   55 +
 .../java/org/jboss/logging/annotations/Field.java  |   84 +-
 .../annotations/{Field.java => Fields.java}        |   20 +-
 .../org/jboss/logging/annotations/Message.java     |    7 +
 .../jboss/logging/annotations/MessageBundle.java   |   17 +
 .../jboss/logging/annotations/MessageLogger.java   |   17 +
 .../org/jboss/logging/annotations/Producer.java    |   76 ++
 .../annotations/{Field.java => Properties.java}    |   20 +-
 .../org/jboss/logging/annotations/Property.java    |   87 +-
 .../jboss/logging/annotations/ResolutionDoc.java   |  104 ++
 .../org/jboss/logging/annotations/Signature.java   |  100 ++
 .../annotations/{Field.java => Suppressed.java}    |   22 +-
 .../src/main/resources/META-INF/LICENSE.txt        |  202 ++++
 docs/apidocs/allclasses-frame.html                 |   43 +
 docs/apidocs/allclasses-noframe.html               |   43 +
 docs/apidocs/constant-values.html                  |  161 +++
 docs/apidocs/deprecated-list.html                  |  125 ++
 docs/apidocs/help-doc.html                         |  226 ++++
 docs/apidocs/index-all.html                        |  327 ++++++
 docs/apidocs/index.html                            |   73 ++
 .../org/jboss/logging/annotations/BaseUrl.html     |  238 ++++
 .../org/jboss/logging/annotations/Cause.html       |  172 +++
 .../jboss/logging/annotations/ConstructType.html   |  234 ++++
 .../org/jboss/logging/annotations/Field.html       |  510 ++++++++
 .../org/jboss/logging/annotations/Fields.html      |  228 ++++
 .../org/jboss/logging/annotations/FormatWith.html  |  231 ++++
 .../org/jboss/logging/annotations/LogMessage.html  |  259 ++++
 .../jboss/logging/annotations/LoggingClass.html    |  173 +++
 .../jboss/logging/annotations/Message.Format.html  |  368 ++++++
 .../org/jboss/logging/annotations/Message.html     |  363 ++++++
 .../jboss/logging/annotations/MessageBundle.html   |  311 +++++
 .../jboss/logging/annotations/MessageLogger.html   |  313 +++++
 .../org/jboss/logging/annotations/Once.html        |  177 +++
 .../org/jboss/logging/annotations/Param.html       |  237 ++++
 .../apidocs/org/jboss/logging/annotations/Pos.html |  273 +++++
 .../org/jboss/logging/annotations/Producer.html    |  210 ++++
 .../org/jboss/logging/annotations/Properties.html  |  228 ++++
 .../org/jboss/logging/annotations/Property.html    |  511 ++++++++
 .../jboss/logging/annotations/ResolutionDoc.html   |  350 ++++++
 .../org/jboss/logging/annotations/Signature.html   |  338 ++++++
 .../org/jboss/logging/annotations/Suppressed.html  |  179 +++
 .../annotations/Transform.TransformType.html       |  383 ++++++
 .../org/jboss/logging/annotations/Transform.html   |  245 ++++
 .../jboss/logging/annotations/ValidIdRange.html    |  274 +++++
 .../jboss/logging/annotations/ValidIdRanges.html   |  226 ++++
 .../logging/annotations/class-use/BaseUrl.html     |  125 ++
 .../jboss/logging/annotations/class-use/Cause.html |  125 ++
 .../annotations/class-use/ConstructType.html       |  125 ++
 .../jboss/logging/annotations/class-use/Field.html |  125 ++
 .../logging/annotations/class-use/Fields.html      |  125 ++
 .../logging/annotations/class-use/FormatWith.html  |  125 ++
 .../logging/annotations/class-use/LogMessage.html  |  125 ++
 .../annotations/class-use/LoggingClass.html        |  125 ++
 .../annotations/class-use/Message.Format.html      |  159 +++
 .../logging/annotations/class-use/Message.html     |  125 ++
 .../annotations/class-use/MessageBundle.html       |  125 ++
 .../annotations/class-use/MessageLogger.html       |  125 ++
 .../jboss/logging/annotations/class-use/Once.html  |  125 ++
 .../jboss/logging/annotations/class-use/Param.html |  125 ++
 .../jboss/logging/annotations/class-use/Pos.html   |  125 ++
 .../logging/annotations/class-use/Producer.html    |  125 ++
 .../logging/annotations/class-use/Properties.html  |  125 ++
 .../logging/annotations/class-use/Property.html    |  125 ++
 .../annotations/class-use/ResolutionDoc.html       |  125 ++
 .../logging/annotations/class-use/Signature.html   |  125 ++
 .../logging/annotations/class-use/Suppressed.html  |  125 ++
 .../class-use/Transform.TransformType.html         |  159 +++
 .../logging/annotations/class-use/Transform.html   |  125 ++
 .../annotations/class-use/ValidIdRange.html        |  125 ++
 .../annotations/class-use/ValidIdRanges.html       |  125 ++
 .../jboss/logging/annotations/package-frame.html   |   47 +
 .../jboss/logging/annotations/package-summary.html |  299 +++++
 .../jboss/logging/annotations/package-tree.html    |  165 +++
 .../org/jboss/logging/annotations/package-use.html |  150 +++
 docs/apidocs/overview-tree.html                    |  169 +++
 docs/apidocs/package-list                          |    1 +
 docs/apidocs/script.js                             |   30 +
 docs/apidocs/stylesheet.css                        |  574 +++++++++
 docs/default-notes.html                            |  547 +++++++++
 docs/examples.html                                 |  622 ++++++++++
 docs/examples/AppLogger.html                       |  566 +++++++++
 docs/examples/ErrorMessages.html                   |  572 +++++++++
 docs/examples/errors/CW000003.html                 |  532 +++++++++
 docs/examples/errors/CW000100.html                 |  532 +++++++++
 docs/examples/errors/CW000101.html                 |  532 +++++++++
 docs/expressions.html                              |  550 +++++++++
 docs/getting-started.html                          |  588 +++++++++
 docs/index.html                                    | 1242 ++++++++++++++++++++
 docs/js/links.js                                   |    9 +
 docs/message-bundle.html                           |  682 +++++++++++
 docs/message-logger.html                           |  664 +++++++++++
 docs/pom.xml                                       |  207 ++++
 docs/processor-options.html                        |  661 +++++++++++
 docs/reports.html                                  |  586 +++++++++
 docs/src/main/asciidoc/default-notes.adoc          |    3 +
 docs/src/main/asciidoc/docinfo-footer.html         |    4 +
 docs/src/main/asciidoc/examples.adoc               |   17 +
 .../main/asciidoc/examples/errors/CW000003.adoc    |    4 +
 .../main/asciidoc/examples/errors/CW000100.adoc    |    4 +
 .../main/asciidoc/examples/errors/CW000101.adoc    |    4 +
 docs/src/main/asciidoc/expressions.adoc            |    7 +
 docs/src/main/asciidoc/getting-started.adoc        |   47 +
 docs/src/main/asciidoc/index.adoc                  |   24 +
 docs/src/main/asciidoc/js/links.js                 |    9 +
 docs/src/main/asciidoc/message-bundle.adoc         |   58 +
 docs/src/main/asciidoc/message-logger.adoc         |   59 +
 docs/src/main/asciidoc/processor-options.adoc      |   44 +
 docs/src/main/asciidoc/reports.adoc                |   24 +
 .../main/asciidoc/translation-property-files.adoc  |    4 +
 .../jboss/logging/tools/examples/AppLogger.java    |  109 ++
 .../logging/tools/examples/CloseException.java     |   64 +
 .../logging/tools/examples/ContentWriter.java      |  164 +++
 .../tools/examples/ContentWriterBuilder.java       |  113 ++
 .../logging/tools/examples/ErrorMessages.java      |  145 +++
 docs/translation-property-files.html               |  531 +++++++++
 pom.xml                                            |   55 +-
 processor-tests/pom.xml                            |   11 +-
 processor/pom.xml                                  |   63 +-
 .../logging/processor/apt/AbstractClassType.java   |   82 ++
 .../logging/processor/apt/AbstractGenerator.java   |   53 +-
 .../processor/apt/AbstractMessageObjectType.java   |   60 -
 .../apt/ImplementationClassGenerator.java          |    5 +-
 .../processor/apt/LoggingToolsProcessor.java       |  140 ++-
 .../processor/apt/MessageInterfaceFactory.java     |  150 +--
 .../processor/apt/MessageMethodBuilder.java        |  259 ++--
 .../logging/processor/apt/ParameterFactory.java    |  326 ++---
 .../logging/processor/apt/ProcessingException.java |   78 +-
 .../logging/processor/apt/ReportFileGenerator.java |  153 +++
 .../logging/processor/apt/ReturnTypeFactory.java   |  192 +--
 .../processor/apt/ThrowableTypeFactory.java        |  140 ++-
 .../jboss/logging/processor/apt/ToolLogger.java    |   17 +-
 .../processor/apt/TranslationClassGenerator.java   |   32 +-
 .../processor/apt/TranslationFileGenerator.java    |   94 +-
 .../processor/apt/report/AsciidocReportWriter.java |  147 +++
 .../processor/apt/report/IndentingXmlWriter.java   |  293 +++++
 .../report/ReportType.java}                        |   23 +-
 .../logging/processor/apt/report/ReportWriter.java |  183 +++
 .../processor/apt/report/XmlReportWriter.java      |  115 ++
 .../processor/generator/model/ClassModel.java      |  151 ++-
 .../generator/model/ClassModelFactory.java         |   42 +-
 .../generator/model/ClassModelHelper.java          |   20 +-
 .../generator/model/ImplementationClassModel.java  |  458 ++++++--
 .../generator/model/MessageBundleImplementor.java  |   26 +-
 .../generator/model/MessageBundleTranslator.java   |   17 +-
 .../generator/model/MessageLoggerImplementor.java  |   94 +-
 .../generator/model/MessageLoggerTranslator.java   |   17 +-
 .../{MessageObjectType.java => ClassType.java}     |   15 +-
 .../logging/processor/model/DelegatingElement.java |  111 ++
 .../model/DelegatingExecutableElement.java         |   88 ++
 .../processor/model/DelegatingTypeElement.java     |   83 ++
 .../logging/processor/model/JavaDocComment.java    |    2 +-
 .../logging/processor/model/MessageInterface.java  |   57 +-
 .../logging/processor/model/MessageMethod.java     |   29 +-
 .../logging/processor/model/MessageObject.java     |   52 -
 .../jboss/logging/processor/model/Parameter.java   |  123 +-
 .../jboss/logging/processor/model/ReturnType.java  |  146 +--
 .../logging/processor/model/ThrowableType.java     |   15 +-
 .../jboss/logging/processor/util/Comparison.java   |    2 +-
 .../logging/processor/util/ElementHelper.java      |  372 +++---
 .../jboss/logging/processor/util/Expressions.java  |  151 +++
 .../org/jboss/logging/processor/util/Objects.java  |    4 +-
 .../org/jboss/logging/processor/util/Strings.java  |   68 --
 .../logging/processor/util/TranslationHelper.java  |    3 +-
 .../logging/processor/util/VersionComparator.java  |    4 +-
 .../processor/validation/AbstractFormatPart.java   |    2 +-
 .../validation/AbstractFormatValidator.java        |    2 +-
 .../logging/processor/validation/FormatPart.java   |    2 +-
 .../processor/validation/FormatValidator.java      |    2 +-
 .../validation/FormatValidatorFactory.java         |    2 +-
 .../processor/validation/IdLengthValidator.java    |    6 +-
 .../processor/validation/IdRangeValidator.java     |   10 +-
 .../processor/validation/MessageFormatPart.java    |    2 +-
 .../validation/MessageFormatValidator.java         |    8 +-
 .../processor/validation/MessageIdValidator.java   |    6 +-
 .../processor/validation/NoFormatValidator.java    |    2 +-
 .../processor/validation/PropertyValidator.java    |  280 +++++
 .../processor/validation/StringFormatPart.java     |    4 +-
 .../validation/StringFormatValidator.java          |   54 +-
 .../logging/processor/validation/StringPart.java   |    2 +-
 .../processor/validation/ValidationMessage.java    |   62 +-
 .../validation/ValidationMessageFactory.java       |   70 +-
 .../logging/processor/validation/Validator.java    |  361 ++++--
 processor/src/main/resources/META-INF/LICENSE.txt  |  502 ++++++++
 .../main/resources/schema/logging-report_1_0.xsd   |  104 ++
 .../processor/generated/AbstractLoggerTest.java    |   14 +-
 .../logging/processor/generated/DefaultLogger.java |   10 +-
 .../processor/generated/DefaultMessages.java       |    2 +-
 .../{ExtendedLogger.java => ExpressionLogger.java} |   27 +-
 ...ndedLogger.java => ExpressionMessagesTest.java} |   33 +-
 .../processor/generated/ExtendedLogger.java        |    2 +-
 .../generated/GeneratedSourceAnalysisTest.java     |  427 +++----
 .../processor/generated/LevelIdCheckTest.java      |   18 +-
 .../logging/processor/generated/LogOnceLogger.java |    2 +-
 .../logging/processor/generated/LogOnceTest.java   |   29 +-
 .../generated/LoggerVerificationTest.java          |   83 +-
 .../logging/processor/generated/MessagesTest.java  |  226 +++-
 .../generated/MethodMessageConstants.java          |  303 +++++
 ...eListHandler.java => QueuedMessageHandler.java} |   24 +-
 .../{ExtendedLogger.java => RootLocaleLogger.java} |   19 +-
 .../processor/generated/SignatureMessages.java     |   32 +-
 .../processor/generated/StringFormatLogger.java    |    2 +-
 .../generated/ThrowableSignatureTest.java          |   23 +-
 .../processor/generated/TransformLogger.java       |   22 +
 .../processor/generated/TransformMessages.java     |   22 +
 .../logging/processor/generated/TransformTest.java |  151 ++-
 .../logging/processor/generated/ValidLogger.java   |   22 +
 .../logging/processor/generated/ValidMessages.java |   75 +-
 .../processor/report/ReportGenerationTest.java     |  127 ++
 .../TestReportLogger.java}                         |   29 +-
 .../TestReportMessages.java}                       |   31 +-
 .../logging/processor/util/ExpressionsTest.java    |   62 +
 .../processor/util/VersionComparatorTest.java      |   26 +-
 .../validation/MessageFormatValidatorTest.java     |   37 +-
 .../validation/StringFormatValidatorTest.java      |   67 +-
 ...er.i18n_de.properties => expression.properties} |    6 +-
 processor/src/test/resources/logging.properties    |    2 +-
 .../generated/DefaultLogger.i18n_de.properties     |    2 +-
 ...perties => DefaultLogger.i18n_de_DE.properties} |    2 +-
 ...properties => DefaultLogger.i18n_en.properties} |    7 +-
 ...perties => DefaultLogger.i18n_en_CA.properties} |    7 +-
 ...perties => DefaultLogger.i18n_en_UK.properties} |    7 +-
 ...perties => DefaultLogger.i18n_en_US.properties} |    7 +-
 .../generated/DefaultLogger.i18n_es.properties     |    2 +-
 .../generated/DefaultLogger.i18n_fr.properties     |    2 +-
 ...perties => DefaultLogger.i18n_fr_CA.properties} |    3 +-
 ...perties => DefaultLogger.i18n_fr_FR.properties} |    3 +-
 ...properties => DefaultLogger.i18n_it.properties} |    7 +-
 ...perties => DefaultLogger.i18n_it_IT.properties} |    7 +-
 .../generated/DefaultLogger.i18n_ja.properties     |    2 +-
 ...perties => DefaultLogger.i18n_ja_JP.properties} |    2 +-
 ...properties => DefaultLogger.i18n_ko.properties} |    6 +-
 ...perties => DefaultLogger.i18n_ko_KR.properties} |    6 +-
 ...properties => DefaultLogger.i18n_zh.properties} |    6 +-
 ...perties => DefaultLogger.i18n_zh_CN.properties} |    6 +-
 ...perties => DefaultLogger.i18n_zh_TW.properties} |    6 +-
 .../generated/DefaultMessages.i18n_de.properties   |    2 +-
 .../generated/DefaultMessages.i18n_es.properties   |    2 +-
 .../generated/DefaultMessages.i18n_fr.properties   |    2 +-
 ...ties => RootLocaleLogger.i18n_en_US.properties} |    7 +-
 .../StringFormatLogger.i18n_es.properties          |    2 +-
 242 files changed, 30183 insertions(+), 2199 deletions(-)

diff --git a/README.adoc b/README.adoc
new file mode 100644
index 0000000..9dafb01
--- /dev/null
+++ b/README.adoc
@@ -0,0 +1,16 @@
+= JBoss Logging Tools
+
+The JBoss logging tools are used to create internationalized log statements and exceptions.
+
+For user documentation see https://jboss-logging.github.io/jboss-logging-tools/. For annotation JavaDoc's see
+https://jboss-logging.github.io/jboss-logging-tools/apidocs/.
+
+== Building
+
+Standard Maven build:
+
+ mvn clean install
+
+To generate the site use the `-Pgenerate-site` profile or `-Dgenerate-site` system property when building.
+
+  mvn clean install -Dgenerate-site
diff --git a/annotations/pom.xml b/annotations/pom.xml
index 4cb3d04..e931649 100644
--- a/annotations/pom.xml
+++ b/annotations/pom.xml
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.jboss.logging</groupId>
         <artifactId>jboss-logging-tools-parent</artifactId>
-        <version>2.0.1.Final</version>
+        <version>2.1.0.Final</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
@@ -50,4 +50,4 @@
             <scope>provided</scope>
         </dependency>
     </dependencies>
-</project>
\ No newline at end of file
+</project>
diff --git a/annotations/src/main/java/org/jboss/logging/annotations/BaseUrl.java b/annotations/src/main/java/org/jboss/logging/annotations/BaseUrl.java
new file mode 100644
index 0000000..6cea78c
--- /dev/null
+++ b/annotations/src/main/java/org/jboss/logging/annotations/BaseUrl.java
@@ -0,0 +1,55 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ *
+ * Copyright 2017 Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.jboss.logging.annotations;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.CLASS;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * Messages on reports can have a link to a {@linkplain ResolutionDoc resolution document}. This annotation can be used
+ * to provide a base URL for these documents.
+ * <p>
+ * Expressions in the form of {@code ${property.key:default-value}} can be used for the values. If the property key is
+ * prefixed with {@code sys.} a {@linkplain System#getProperty(String) system property} will be used. If the key is
+ * prefixed with {@code env.} an {@linkplain System#getenv(String) environment variable} will be used. In all other cases
+ * the {@code org.jboss.logging.tools.expressionProperties} processor argument is used to specify the path the properties
+ * file which contains the values for the expressions.
+ * </p>
+ *
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ * @since 1.2
+ */
+ at Target(TYPE)
+ at Retention(CLASS)
+ at Documented
+public @interface BaseUrl {
+
+    /**
+     * The base URL used for links to resolution documentation on reports. This can be a fully qualified URL or a
+     * relative URL.
+     *
+     * @return the base URL
+     */
+    String value();
+}
diff --git a/annotations/src/main/java/org/jboss/logging/annotations/Field.java b/annotations/src/main/java/org/jboss/logging/annotations/Field.java
index 177030a..95dfa5c 100644
--- a/annotations/src/main/java/org/jboss/logging/annotations/Field.java
+++ b/annotations/src/main/java/org/jboss/logging/annotations/Field.java
@@ -19,27 +19,109 @@
 
 package org.jboss.logging.annotations;
 
+import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.PARAMETER;
 import static java.lang.annotation.RetentionPolicy.CLASS;
 
 import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
 import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
 /**
  * Indicate that a method parameter value should be applied to a field on the resultant exception object.
+ * <p>
+ * If this annotation is placed on a method the {@linkplain #name() name} attribute becomes a required parameter and one
+ * default attribute needs to be set. The value of the default attribute is used to set the filed on the resultant
+ * exception object.
+ * </p>
  *
  * @author <a href="mailto:david.lloyd at redhat.com">David M. Lloyd</a>
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
 @Retention(CLASS)
- at Target(PARAMETER)
+ at Target({PARAMETER, METHOD})
+ at Repeatable(Fields.class)
 @Documented
 public @interface Field {
 
     /**
      * The field name.  If not specified, the parameter name is assumed to be the field name.
+     * <p>
+     * This becomes a required attrubyte if this annotation is present on a method.
+     * </p>
      *
      * @return the field name
      */
     String name() default "";
+
+    /**
+     * The default {@code boolean} value if this annotation is used on a method.
+     *
+     * @return the default value to use
+     */
+    boolean booleanValue() default false;
+
+    /**
+     * The default boolean value if this annotation is used on a method.
+     *
+     * @return the default value to use
+     */
+    byte byteValue() default 0x00;
+
+    /**
+     * The default {@code byte} value if this annotation is used on a method.
+     *
+     * @return the default value to use
+     */
+    char charValue() default 0x00;
+
+    /**
+     * The default {@link Class} value if this annotation is used on a method.
+     *
+     * @return the default value to use
+     */
+    Class<?> classValue() default Object.class;
+
+    /**
+     * The default {@code double} value if this annotation is used on a method.
+     *
+     * @return the default value to use
+     */
+    double doubleValue() default 0.0d;
+
+    /**
+     * The default {@code float} value if this annotation is used on a method.
+     *
+     * @return the default value to use
+     */
+    float floatValue() default 0.0f;
+
+    /**
+     * The default {@code int} value if this annotation is used on a method.
+     *
+     * @return the default value to use
+     */
+    int intValue() default 0;
+
+    /**
+     * The default {@code long} value if this annotation is used on a method.
+     *
+     * @return the default value to use
+     */
+    long longValue() default 0L;
+
+    /**
+     * The default {@code short} value if this annotation is used on a method.
+     *
+     * @return the default value to use
+     */
+    short shortValue() default 0;
+
+    /**
+     * The default {@link String} value if this annotation is used on a method.
+     *
+     * @return the default value to use
+     */
+    String stringValue() default "";
 }
diff --git a/annotations/src/main/java/org/jboss/logging/annotations/Field.java b/annotations/src/main/java/org/jboss/logging/annotations/Fields.java
similarity index 64%
copy from annotations/src/main/java/org/jboss/logging/annotations/Field.java
copy to annotations/src/main/java/org/jboss/logging/annotations/Fields.java
index 177030a..681d9c9 100644
--- a/annotations/src/main/java/org/jboss/logging/annotations/Field.java
+++ b/annotations/src/main/java/org/jboss/logging/annotations/Fields.java
@@ -1,7 +1,7 @@
 /*
  * JBoss, Home of Professional Open Source.
  *
- * Copyright 2015 Red Hat, Inc., and individual contributors
+ * Copyright 2016 Red Hat, Inc., and individual contributors
  * as indicated by the @author tags.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,9 +17,10 @@
  * limitations under the License.
  */
 
+
 package org.jboss.logging.annotations;
 
-import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.RetentionPolicy.CLASS;
 
 import java.lang.annotation.Documented;
@@ -27,19 +28,20 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
 /**
- * Indicate that a method parameter value should be applied to a field on the resultant exception object.
+ * Defines the default field properties to use on the resultant exception object.
  *
- * @author <a href="mailto:david.lloyd at redhat.com">David M. Lloyd</a>
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
 @Retention(CLASS)
- at Target(PARAMETER)
+ at Target(METHOD)
 @Documented
-public @interface Field {
+public @interface Fields {
 
     /**
-     * The field name.  If not specified, the parameter name is assumed to be the field name.
+     * The fields to use on the resultant exception object. Note that the {@link Field#name() name} attribute is
+     * required for these annotations.
      *
-     * @return the field name
+     * @return the fields
      */
-    String name() default "";
+    Field[] value();
 }
diff --git a/annotations/src/main/java/org/jboss/logging/annotations/Message.java b/annotations/src/main/java/org/jboss/logging/annotations/Message.java
index 2e6d153..39a53da 100644
--- a/annotations/src/main/java/org/jboss/logging/annotations/Message.java
+++ b/annotations/src/main/java/org/jboss/logging/annotations/Message.java
@@ -55,6 +55,13 @@ public @interface Message {
 
     /**
      * The default format string of this message.
+     * <p>
+     * Expressions in the form of {@code ${property.key:default-value}} can be used for the value. If the property key is
+     * prefixed with {@code sys.} a {@linkplain System#getProperty(String) system property} will be used. If the key is
+     * prefixed with {@code env.} an {@linkplain System#getenv(String) environment variable} will be used. In all other cases
+     * the {@code org.jboss.logging.tools.expressionProperties} processor argument is used to specify the path the properties
+     * file which contains the values for the expressions.
+     * </p>
      *
      * @return the format string
      */
diff --git a/annotations/src/main/java/org/jboss/logging/annotations/MessageBundle.java b/annotations/src/main/java/org/jboss/logging/annotations/MessageBundle.java
index e668fd5..7d3ad4d 100644
--- a/annotations/src/main/java/org/jboss/logging/annotations/MessageBundle.java
+++ b/annotations/src/main/java/org/jboss/logging/annotations/MessageBundle.java
@@ -25,6 +25,7 @@ import static java.lang.annotation.RetentionPolicy.CLASS;
 import java.lang.annotation.Documented;
 import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
+import java.util.Locale;
 
 /**
  * Signify that an interface is a message bundle interface.
@@ -54,4 +55,20 @@ public @interface MessageBundle {
      * @return the length the id should be padded
      */
     int length() default 6;
+
+    /**
+     * Specifies the {@linkplain Locale locale} for formatting bundle messages. This is only used in the super
+     * implementation. Subclasses will define their own locale to use based on the name of the resource bundle at
+     * compile time.
+     * <p>
+     * An empty string will default to {@link Locale#ROOT}.
+     * </p>
+     * <p>
+     * A non-empty string will be parsed by the {@link Locale#forLanguageTag(String)}. This uses the
+     * <a href="https://tools.ietf.org/html/bcp47">IETF BCP 47</a> format.
+     * </p>
+     *
+     * @return the default locale message bundles should use for formatting messages
+     */
+    String rootLocale() default "";
 }
diff --git a/annotations/src/main/java/org/jboss/logging/annotations/MessageLogger.java b/annotations/src/main/java/org/jboss/logging/annotations/MessageLogger.java
index 4a30e54..e44de0a 100644
--- a/annotations/src/main/java/org/jboss/logging/annotations/MessageLogger.java
+++ b/annotations/src/main/java/org/jboss/logging/annotations/MessageLogger.java
@@ -25,6 +25,7 @@ import static java.lang.annotation.RetentionPolicy.CLASS;
 import java.lang.annotation.Documented;
 import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
+import java.util.Locale;
 
 /**
  * Signify that an interface is a typed logger interface.  A message logger interface may optionally extend other
@@ -56,4 +57,20 @@ public @interface MessageLogger {
      * @return the length the id should be padded
      */
     int length() default 6;
+
+    /**
+     * Specifies the {@linkplain Locale locale} for formatting bundle messages. This is only used in the super
+     * implementation. Subclasses will define their own locale to use based on the name of the resource bundle at
+     * compile time.
+     * <p>
+     * An empty string will default to {@link Locale#ROOT}.
+     * </p>
+     * <p>
+     * A non-empty string will be parsed by the {@link Locale#forLanguageTag(String)}. This uses the
+     * <a href="https://tools.ietf.org/html/bcp47">IETF BCP 47</a> format.
+     * </p>
+     *
+     * @return the default locale message bundles should use for formatting messages
+     */
+    String rootLocale() default "";
 }
diff --git a/annotations/src/main/java/org/jboss/logging/annotations/Producer.java b/annotations/src/main/java/org/jboss/logging/annotations/Producer.java
new file mode 100644
index 0000000..8f8567c
--- /dev/null
+++ b/annotations/src/main/java/org/jboss/logging/annotations/Producer.java
@@ -0,0 +1,76 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ *
+ * Copyright 2017 Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.jboss.logging.annotations;
+
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.CLASS;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * Identifies a parameter has the ability to produce a {@link Throwable} or a super type of a {@code Throwable}. The
+ * parameter type must be a {@link java.util.function.Function} or a {@link java.util.function.BiFunction}.
+ * <p>
+ * For a {@link java.util.function.Function} the input parameter must be a {@link String} which will be the message
+ * associated with the method. The result type must {@link Throwable} or a super type of a {@code Throwable}.
+ * </p>
+ *
+ * <p>
+ * For a {@link java.util.function.BiFunction} one of the input parameters must be a {@link String} which will be the
+ * message associated with the method. The other input parameter must be a {@link Throwable} or a super type of a
+ * {@code Throwable} and must be assignable from the parameter annotated with {@link Cause}. The result type must
+ * {@link Throwable} or a super type of a {@code Throwable}.
+ * </p>
+ *
+ * <p>
+ * <strong>Example</strong>
+ * <code>
+ * <pre>
+ * @Message("The operation failed due to %s")
+ * <T extends RuntimeException> T operationFailed(@Producer Function<String, T> function, String op);
+ *
+ * @Message("The operation failed due to %s")
+ * <T extends RuntimeException> T operationFailed(@Producer BiFunction<String, Throwable, T> function, @Cause Throwable cause, String op);
+ *
+ * </pre>
+ * </code>
+ * </p>
+ *
+ * <p>
+ * <strong>Example Usage</strong>
+ * <code>
+ * <pre>
+ * throw Bundle.MESSAGES.operationFailed(IllegalArgumentException::new, "start");
+ *
+ * throw Bundle.MESSAGES.operationFailed(IllegalStateException::new, cause, "start");
+ *
+ * </pre>
+ * </code>
+ * </p>
+ *
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+ at Target(PARAMETER)
+ at Retention(CLASS)
+ at Documented
+public @interface Producer {
+}
diff --git a/annotations/src/main/java/org/jboss/logging/annotations/Field.java b/annotations/src/main/java/org/jboss/logging/annotations/Properties.java
similarity index 64%
copy from annotations/src/main/java/org/jboss/logging/annotations/Field.java
copy to annotations/src/main/java/org/jboss/logging/annotations/Properties.java
index 177030a..72296a7 100644
--- a/annotations/src/main/java/org/jboss/logging/annotations/Field.java
+++ b/annotations/src/main/java/org/jboss/logging/annotations/Properties.java
@@ -1,7 +1,7 @@
 /*
  * JBoss, Home of Professional Open Source.
  *
- * Copyright 2015 Red Hat, Inc., and individual contributors
+ * Copyright 2016 Red Hat, Inc., and individual contributors
  * as indicated by the @author tags.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,9 +17,10 @@
  * limitations under the License.
  */
 
+
 package org.jboss.logging.annotations;
 
-import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.RetentionPolicy.CLASS;
 
 import java.lang.annotation.Documented;
@@ -27,19 +28,20 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
 /**
- * Indicate that a method parameter value should be applied to a field on the resultant exception object.
+ * Defines the default properties to use on the resultant exception object.
  *
- * @author <a href="mailto:david.lloyd at redhat.com">David M. Lloyd</a>
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
 @Retention(CLASS)
- at Target(PARAMETER)
+ at Target(METHOD)
 @Documented
-public @interface Field {
+public @interface Properties {
 
     /**
-     * The field name.  If not specified, the parameter name is assumed to be the field name.
+     * The properties to use on the resultant exception object. Note that the {@link Property#name() name} attribute is
+     * required for these annotations.
      *
-     * @return the field name
+     * @return the properties
      */
-    String name() default "";
+    Property[] value();
 }
diff --git a/annotations/src/main/java/org/jboss/logging/annotations/Property.java b/annotations/src/main/java/org/jboss/logging/annotations/Property.java
index 0db0398..9bdeb0a 100644
--- a/annotations/src/main/java/org/jboss/logging/annotations/Property.java
+++ b/annotations/src/main/java/org/jboss/logging/annotations/Property.java
@@ -20,27 +20,110 @@
 
 package org.jboss.logging.annotations;
 
+import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.PARAMETER;
 import static java.lang.annotation.RetentionPolicy.CLASS;
 
 import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
 import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
 /**
- * Indicate that a method parameter value should be applied to a property (with a setter method) on the resultant exception object.
+ * Indicate that a method parameter value should be applied to a property (with a setter method) on the resultant
+ * exception object.
+ * <p>
+ * If this annotation is placed on a method the {@linkplain #name() name} attribute becomes a required parameter and one
+ * default attribute needs to be set. The value of the default attribute is used to set the property on the resultant
+ * exception object.
+ * </p>
  *
  * @author <a href="mailto:david.lloyd at redhat.com">David M. Lloyd</a>
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
 @Retention(CLASS)
- at Target(PARAMETER)
+ at Target({PARAMETER, METHOD})
+ at Repeatable(Properties.class)
 @Documented
 public @interface Property {
 
     /**
      * The property name.  If not specified, the parameter name is assumed to be the property name.
+     * <p>
+     * This becomes a required attribute if this annotation is present on a method.
+     * </p>
      *
      * @return the property name
      */
     String name() default "";
+
+    /**
+     * The default {@code boolean} value if this annotation is used on a method.
+     *
+     * @return the default value to use
+     */
+    boolean booleanValue() default false;
+
+    /**
+     * The default boolean value if this annotation is used on a method.
+     *
+     * @return the default value to use
+     */
+    byte byteValue() default 0x00;
+
+    /**
+     * The default {@code byte} value if this annotation is used on a method.
+     *
+     * @return the default value to use
+     */
+    char charValue() default 0x00;
+
+    /**
+     * The default {@link Class} value if this annotation is used on a method.
+     *
+     * @return the default value to use
+     */
+    Class<?> classValue() default Object.class;
+
+    /**
+     * The default {@code double} value if this annotation is used on a method.
+     *
+     * @return the default value to use
+     */
+    double doubleValue() default 0.0d;
+
+    /**
+     * The default {@code float} value if this annotation is used on a method.
+     *
+     * @return the default value to use
+     */
+    float floatValue() default 0.0f;
+
+    /**
+     * The default {@code int} value if this annotation is used on a method.
+     *
+     * @return the default value to use
+     */
+    int intValue() default 0;
+
+    /**
+     * The default {@code long} value if this annotation is used on a method.
+     *
+     * @return the default value to use
+     */
+    long longValue() default 0L;
+
+    /**
+     * The default {@code short} value if this annotation is used on a method.
+     *
+     * @return the default value to use
+     */
+    short shortValue() default 0;
+
+    /**
+     * The default {@link String} value if this annotation is used on a method.
+     *
+     * @return the default value to use
+     */
+    String stringValue() default "";
 }
diff --git a/annotations/src/main/java/org/jboss/logging/annotations/ResolutionDoc.java b/annotations/src/main/java/org/jboss/logging/annotations/ResolutionDoc.java
new file mode 100644
index 0000000..f84148e
--- /dev/null
+++ b/annotations/src/main/java/org/jboss/logging/annotations/ResolutionDoc.java
@@ -0,0 +1,104 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ *
+ * Copyright 2017 Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.jboss.logging.annotations;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.CLASS;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * Allows a link to be created for messages on a report which contain a possible resolution to the issue reported . If
+ * the method does not include an {@linkplain Message#id() id} no link will be created for the report unless a
+ * {@link #path()} is defined.
+ *
+ * <p>
+ * The rules for building the URL are as follows:
+ * <ul>
+ * <li>{@link #url() url}: If left empty and the type is annotated with a {@link BaseUrl} the value for the
+ * {@code @BaseUrl} will be used. If defined this will override the value of the {@link BaseUrl}. If neither are
+ * defined the rules for the {@link #path()} will be followed.</li>
+ * <li>{@link #path() path}: If defined this will be the path appended to the {@link #url()} or the value of the
+ * {@link BaseUrl}. Note that neither {@link #url()} nor {@link BaseUrl} are required. If the value is left
+ * undefined the id (project code plus the {@linkplain Message#id() message id}) will be used for the path.</li>
+ * <li>{@link #suffix() suffix}: The suffix to append to the {@link #path()}. This is mostly useful if the path
+ * is left undefined and a suffix should be appended to the messages id. If left undefined and the {@link #path()}
+ * is not defined, the suffix will be determined based on the report type.</li>
+ * </ul>
+ * </p>
+ *
+ * <p>
+ * If placed on a type links will be created for all methods on the type.
+ * </p>
+ *
+ * <p>
+ * Do note that the processor does not validate the resolution document exists. It simply attempts to create links to
+ * the resolution document.
+ * </p>
+ * <p>
+ * Expressions in the form of {@code ${property.key:default-value}} can be used for the values with the exception of the
+ * {@link #skip() skip} attribute. If the property key is prefixed with {@code sys.} a
+ * {@linkplain System#getProperty(String) system property} will be used. If the key is prefixed with {@code env.} an
+ * {@linkplain System#getenv(String) environment variable} will be used. In all other cases the
+ * {@code org.jboss.logging.tools.expressionProperties} processor argument is used to specify the path the properties
+ * file which contains the values for the expressions.
+ * </p>
+ *
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ * @since 1.2
+ */
+ at Target({METHOD, TYPE})
+ at Retention(CLASS)
+ at Documented
+public @interface ResolutionDoc {
+
+    /**
+     * The URL, fully qualified or relative, to use for the resolution document. If defined this will override the value
+     * of the {@link BaseUrl} if the annotation is used.
+     *
+     * @return the URL or an empty string
+     */
+    String url() default "";
+
+    /**
+     * The path to the resolution document. If left undefined this will default to the message id.
+     *
+     * @return the path to the resolution document
+     */
+    String path() default "";
+
+    /**
+     * The suffix to append to the path. If left undefined this will default to the extension for the report type. For
+     * example if the report type is {@code xml} the default suffix would be {@code .xml}.
+     *
+     * @return the suffix for the resolution document
+     */
+    String suffix() default "";
+
+    /**
+     * Allows the creation of a link to be skipped.
+     *
+     * @return {@code true} if creating the link should be skipped
+     */
+    boolean skip() default false;
+}
diff --git a/annotations/src/main/java/org/jboss/logging/annotations/Signature.java b/annotations/src/main/java/org/jboss/logging/annotations/Signature.java
new file mode 100644
index 0000000..4f90906
--- /dev/null
+++ b/annotations/src/main/java/org/jboss/logging/annotations/Signature.java
@@ -0,0 +1,100 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ *
+ * Copyright 2016 Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.jboss.logging.annotations;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.CLASS;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * Specifies the exact signature to use when creating a {@link Throwable} return type.
+ *
+ * <p>
+ * Given the following exception and message bundle interface method the {@code InvalidIntValueException(final RuntimeException cause, final String msg, final int value)}
+ * constructor would be used.
+ *
+ * <code>
+ * <pre>
+ * public class InvalidIntValueException extends RuntimeException {
+ *     private final RuntimeException causeAsRuntime;
+ *     private final int value;
+ *     public InvalidIntValueException(final Throwable cause, final String msg, final int value) {
+ *         super(msg, cause);
+ *         causeAsRuntime = new RuntimeException(cause);
+ *         this.value = value;
+ *     }
+ *
+ *     public InvalidIntValueException(final RuntimeException cause, final String msg, final int value) {
+ *         super(msg, cause);
+ *         causeAsRuntime = cause;
+ *         this.value = value;
+ *     }
+ *     public InvalidIntValueException(final RuntimeException cause, final String msg, final Integer value) {
+ *         super(msg, cause);
+ *         causeAsRuntime = cause;
+ *         this.value = value;
+ *     }
+ * }
+ * </pre>
+ * </code>
+ *
+ * <code>
+ * <pre>
+ * @Message("Invalid value %d")
+ * @Signature(causeIndex = 0, messageIndex = 1, value = {RuntimeException.class, String.class, int.class}
+ * InvalidIntValueException invalidValue(@Cause RuntimeException cause, @Param int value);
+ * </pre>
+ * </code>
+ * </p>
+ *
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+ at Retention(CLASS)
+ at Target(METHOD)
+ at Documented
+public @interface Signature {
+
+    /**
+     * An array of types matching the exact signature to use for the exception being created.
+     *
+     * @return an array of types used to find the signature
+     */
+    Class<?>[] value();
+
+    /**
+     * The index for the {@linkplain Cause cause} of the exception being created. A value of less than zero assumes
+     * there is no cause parameter in the constructor. A {@link Cause} annotation can still be used and the
+     * {@link Throwable#initCause(Throwable)} will be used to initialize the cause of the exception.
+     *
+     * @return the index for the cause parameter
+     */
+    int causeIndex() default -1;
+
+    /**
+     * The index for the message. This is the formatted messaged from the {@link Message#value()}. This is a required
+     * value defaulting to 0 which would be the first parameter.
+     *
+     * @return the index for the message parameter
+     */
+    int messageIndex() default 0;
+}
diff --git a/annotations/src/main/java/org/jboss/logging/annotations/Field.java b/annotations/src/main/java/org/jboss/logging/annotations/Suppressed.java
similarity index 59%
copy from annotations/src/main/java/org/jboss/logging/annotations/Field.java
copy to annotations/src/main/java/org/jboss/logging/annotations/Suppressed.java
index 177030a..7c781f1 100644
--- a/annotations/src/main/java/org/jboss/logging/annotations/Field.java
+++ b/annotations/src/main/java/org/jboss/logging/annotations/Suppressed.java
@@ -1,7 +1,7 @@
 /*
  * JBoss, Home of Professional Open Source.
  *
- * Copyright 2015 Red Hat, Inc., and individual contributors
+ * Copyright 2016 Red Hat, Inc., and individual contributors
  * as indicated by the @author tags.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -27,19 +27,19 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
 /**
- * Indicate that a method parameter value should be applied to a field on the resultant exception object.
+ * Indicates the parameter should be added as a {@linkplain Throwable#addSuppressed(Throwable) suppressed} exception to
+ * the returned exception.
+ * <p>
+ * The annotated parameter can be a single {@linkplain Throwable throwable type}, an array of
+ * {@linkplain Throwable throwable types} or a {@linkplain java.util.Collection collection} of
+ * {@linkplain Throwable throwable types}. Note this is only allowed on message bundle methods that return a
+ * {@linkplain Throwable throwable type}.
+ * </p>
  *
- * @author <a href="mailto:david.lloyd at redhat.com">David M. Lloyd</a>
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
 @Retention(CLASS)
 @Target(PARAMETER)
 @Documented
-public @interface Field {
-
-    /**
-     * The field name.  If not specified, the parameter name is assumed to be the field name.
-     *
-     * @return the field name
-     */
-    String name() default "";
+public @interface Suppressed {
 }
diff --git a/annotations/src/main/resources/META-INF/LICENSE.txt b/annotations/src/main/resources/META-INF/LICENSE.txt
new file mode 100644
index 0000000..7a4a3ea
--- /dev/null
+++ b/annotations/src/main/resources/META-INF/LICENSE.txt
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
\ No newline at end of file
diff --git a/docs/apidocs/allclasses-frame.html b/docs/apidocs/allclasses-frame.html
new file mode 100644
index 0000000..cd50fe1
--- /dev/null
+++ b/docs/apidocs/allclasses-frame.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>All Classes (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+<script type="text/javascript" src="script.js"></script>
+</head>
+<body>
+<h1 class="bar">All Classes</h1>
+<div class="indexContainer">
+<ul>
+<li><a href="org/jboss/logging/annotations/BaseUrl.html" title="annotation in org.jboss.logging.annotations" target="classFrame">BaseUrl</a></li>
+<li><a href="org/jboss/logging/annotations/Cause.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Cause</a></li>
+<li><a href="org/jboss/logging/annotations/ConstructType.html" title="annotation in org.jboss.logging.annotations" target="classFrame">ConstructType</a></li>
+<li><a href="org/jboss/logging/annotations/Field.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Field</a></li>
+<li><a href="org/jboss/logging/annotations/Fields.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Fields</a></li>
+<li><a href="org/jboss/logging/annotations/FormatWith.html" title="annotation in org.jboss.logging.annotations" target="classFrame">FormatWith</a></li>
+<li><a href="org/jboss/logging/annotations/LoggingClass.html" title="annotation in org.jboss.logging.annotations" target="classFrame">LoggingClass</a></li>
+<li><a href="org/jboss/logging/annotations/LogMessage.html" title="annotation in org.jboss.logging.annotations" target="classFrame">LogMessage</a></li>
+<li><a href="org/jboss/logging/annotations/Message.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Message</a></li>
+<li><a href="org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations" target="classFrame">Message.Format</a></li>
+<li><a href="org/jboss/logging/annotations/MessageBundle.html" title="annotation in org.jboss.logging.annotations" target="classFrame">MessageBundle</a></li>
+<li><a href="org/jboss/logging/annotations/MessageLogger.html" title="annotation in org.jboss.logging.annotations" target="classFrame">MessageLogger</a></li>
+<li><a href="org/jboss/logging/annotations/Once.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Once</a></li>
+<li><a href="org/jboss/logging/annotations/Param.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Param</a></li>
+<li><a href="org/jboss/logging/annotations/Pos.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Pos</a></li>
+<li><a href="org/jboss/logging/annotations/Producer.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Producer</a></li>
+<li><a href="org/jboss/logging/annotations/Properties.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Properties</a></li>
+<li><a href="org/jboss/logging/annotations/Property.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Property</a></li>
+<li><a href="org/jboss/logging/annotations/ResolutionDoc.html" title="annotation in org.jboss.logging.annotations" target="classFrame">ResolutionDoc</a></li>
+<li><a href="org/jboss/logging/annotations/Signature.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Signature</a></li>
+<li><a href="org/jboss/logging/annotations/Suppressed.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Suppressed</a></li>
+<li><a href="org/jboss/logging/annotations/Transform.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Transform</a></li>
+<li><a href="org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations" target="classFrame">Transform.TransformType</a></li>
+<li><a href="org/jboss/logging/annotations/ValidIdRange.html" title="annotation in org.jboss.logging.annotations" target="classFrame">ValidIdRange</a></li>
+<li><a href="org/jboss/logging/annotations/ValidIdRanges.html" title="annotation in org.jboss.logging.annotations" target="classFrame">ValidIdRanges</a></li>
+</ul>
+</div>
+</body>
+</html>
diff --git a/docs/apidocs/allclasses-noframe.html b/docs/apidocs/allclasses-noframe.html
new file mode 100644
index 0000000..6f842cf
--- /dev/null
+++ b/docs/apidocs/allclasses-noframe.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>All Classes (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+<script type="text/javascript" src="script.js"></script>
+</head>
+<body>
+<h1 class="bar">All Classes</h1>
+<div class="indexContainer">
+<ul>
+<li><a href="org/jboss/logging/annotations/BaseUrl.html" title="annotation in org.jboss.logging.annotations">BaseUrl</a></li>
+<li><a href="org/jboss/logging/annotations/Cause.html" title="annotation in org.jboss.logging.annotations">Cause</a></li>
+<li><a href="org/jboss/logging/annotations/ConstructType.html" title="annotation in org.jboss.logging.annotations">ConstructType</a></li>
+<li><a href="org/jboss/logging/annotations/Field.html" title="annotation in org.jboss.logging.annotations">Field</a></li>
+<li><a href="org/jboss/logging/annotations/Fields.html" title="annotation in org.jboss.logging.annotations">Fields</a></li>
+<li><a href="org/jboss/logging/annotations/FormatWith.html" title="annotation in org.jboss.logging.annotations">FormatWith</a></li>
+<li><a href="org/jboss/logging/annotations/LoggingClass.html" title="annotation in org.jboss.logging.annotations">LoggingClass</a></li>
+<li><a href="org/jboss/logging/annotations/LogMessage.html" title="annotation in org.jboss.logging.annotations">LogMessage</a></li>
+<li><a href="org/jboss/logging/annotations/Message.html" title="annotation in org.jboss.logging.annotations">Message</a></li>
+<li><a href="org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Message.Format</a></li>
+<li><a href="org/jboss/logging/annotations/MessageBundle.html" title="annotation in org.jboss.logging.annotations">MessageBundle</a></li>
+<li><a href="org/jboss/logging/annotations/MessageLogger.html" title="annotation in org.jboss.logging.annotations">MessageLogger</a></li>
+<li><a href="org/jboss/logging/annotations/Once.html" title="annotation in org.jboss.logging.annotations">Once</a></li>
+<li><a href="org/jboss/logging/annotations/Param.html" title="annotation in org.jboss.logging.annotations">Param</a></li>
+<li><a href="org/jboss/logging/annotations/Pos.html" title="annotation in org.jboss.logging.annotations">Pos</a></li>
+<li><a href="org/jboss/logging/annotations/Producer.html" title="annotation in org.jboss.logging.annotations">Producer</a></li>
+<li><a href="org/jboss/logging/annotations/Properties.html" title="annotation in org.jboss.logging.annotations">Properties</a></li>
+<li><a href="org/jboss/logging/annotations/Property.html" title="annotation in org.jboss.logging.annotations">Property</a></li>
+<li><a href="org/jboss/logging/annotations/ResolutionDoc.html" title="annotation in org.jboss.logging.annotations">ResolutionDoc</a></li>
+<li><a href="org/jboss/logging/annotations/Signature.html" title="annotation in org.jboss.logging.annotations">Signature</a></li>
+<li><a href="org/jboss/logging/annotations/Suppressed.html" title="annotation in org.jboss.logging.annotations">Suppressed</a></li>
+<li><a href="org/jboss/logging/annotations/Transform.html" title="annotation in org.jboss.logging.annotations">Transform</a></li>
+<li><a href="org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a></li>
+<li><a href="org/jboss/logging/annotations/ValidIdRange.html" title="annotation in org.jboss.logging.annotations">ValidIdRange</a></li>
+<li><a href="org/jboss/logging/annotations/ValidIdRanges.html" title="annotation in org.jboss.logging.annotations">ValidIdRanges</a></li>
+</ul>
+</div>
+</body>
+</html>
diff --git a/docs/apidocs/constant-values.html b/docs/apidocs/constant-values.html
new file mode 100644
index 0000000..a853f15
--- /dev/null
+++ b/docs/apidocs/constant-values.html
@@ -0,0 +1,161 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Constant Field Values (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+<script type="text/javascript" src="script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Constant Field Values (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li>Class</li>
+<li>Use</li>
+<li><a href="org/jboss/logging/annotations/package-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?constant-values.html" target="_top">Frames</a></li>
+<li><a href="constant-values.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 title="Constant Field Values" class="title">Constant Field Values</h1>
+<h2 title="Contents">Contents</h2>
+<ul>
+<li><a href="#org.jboss">org.jboss.*</a></li>
+</ul>
+</div>
+<div class="constantValuesContainer"><a name="org.jboss">
+<!--   -->
+</a>
+<h2 title="org.jboss">org.jboss.*</h2>
+<ul class="blockList">
+<li class="blockList">
+<table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
+<caption><span>org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Message.html" title="annotation in org.jboss.logging.annotations">Message</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th scope="col">Constant Field</th>
+<th class="colLast" scope="col">Value</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a name="org.jboss.logging.annotations.Message.INHERIT">
+<!--   -->
+</a><code>public static final int</code></td>
+<td><code><a href="org/jboss/logging/annotations/Message.html#INHERIT">INHERIT</a></code></td>
+<td class="colLast"><code>-1</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="org.jboss.logging.annotations.Message.NONE">
+<!--   -->
+</a><code>public static final int</code></td>
+<td><code><a href="org/jboss/logging/annotations/Message.html#NONE">NONE</a></code></td>
+<td class="colLast"><code>0</code></td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li>Class</li>
+<li>Use</li>
+<li><a href="org/jboss/logging/annotations/package-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?constant-values.html" target="_top">Frames</a></li>
+<li><a href="constant-values.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/deprecated-list.html b/docs/apidocs/deprecated-list.html
new file mode 100644
index 0000000..0ee29ae
--- /dev/null
+++ b/docs/apidocs/deprecated-list.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Deprecated List (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+<script type="text/javascript" src="script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Deprecated List (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li>Class</li>
+<li>Use</li>
+<li><a href="org/jboss/logging/annotations/package-tree.html">Tree</a></li>
+<li class="navBarCell1Rev">Deprecated</li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?deprecated-list.html" target="_top">Frames</a></li>
+<li><a href="deprecated-list.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 title="Deprecated API" class="title">Deprecated API</h1>
+<h2 title="Contents">Contents</h2>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li>Class</li>
+<li>Use</li>
+<li><a href="org/jboss/logging/annotations/package-tree.html">Tree</a></li>
+<li class="navBarCell1Rev">Deprecated</li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?deprecated-list.html" target="_top">Frames</a></li>
+<li><a href="deprecated-list.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/help-doc.html b/docs/apidocs/help-doc.html
new file mode 100644
index 0000000..eaa3f45
--- /dev/null
+++ b/docs/apidocs/help-doc.html
@@ -0,0 +1,226 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>API Help (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+<script type="text/javascript" src="script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="API Help (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li>Class</li>
+<li>Use</li>
+<li><a href="org/jboss/logging/annotations/package-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li class="navBarCell1Rev">Help</li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?help-doc.html" target="_top">Frames</a></li>
+<li><a href="help-doc.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 class="title">How This API Document Is Organized</h1>
+<div class="subTitle">This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.</div>
+</div>
+<div class="contentContainer">
+<ul class="blockList">
+<li class="blockList">
+<h2>Package</h2>
+<p>Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:</p>
+<ul>
+<li>Interfaces (italic)</li>
+<li>Classes</li>
+<li>Enums</li>
+<li>Exceptions</li>
+<li>Errors</li>
+<li>Annotation Types</li>
+</ul>
+</li>
+<li class="blockList">
+<h2>Class/Interface</h2>
+<p>Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:</p>
+<ul>
+<li>Class inheritance diagram</li>
+<li>Direct Subclasses</li>
+<li>All Known Subinterfaces</li>
+<li>All Known Implementing Classes</li>
+<li>Class/interface declaration</li>
+<li>Class/interface description</li>
+</ul>
+<ul>
+<li>Nested Class Summary</li>
+<li>Field Summary</li>
+<li>Constructor Summary</li>
+<li>Method Summary</li>
+</ul>
+<ul>
+<li>Field Detail</li>
+<li>Constructor Detail</li>
+<li>Method Detail</li>
+</ul>
+<p>Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</p>
+</li>
+<li class="blockList">
+<h2>Annotation Type</h2>
+<p>Each annotation type has its own separate page with the following sections:</p>
+<ul>
+<li>Annotation Type declaration</li>
+<li>Annotation Type description</li>
+<li>Required Element Summary</li>
+<li>Optional Element Summary</li>
+<li>Element Detail</li>
+</ul>
+</li>
+<li class="blockList">
+<h2>Enum</h2>
+<p>Each enum has its own separate page with the following sections:</p>
+<ul>
+<li>Enum declaration</li>
+<li>Enum description</li>
+<li>Enum Constant Summary</li>
+<li>Enum Constant Detail</li>
+</ul>
+</li>
+<li class="blockList">
+<h2>Use</h2>
+<p>Each documented package, class and interface has its own Use page.  This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A.  You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.</p>
+</li>
+<li class="blockList">
+<h2>Tree (Class Hierarchy)</h2>
+<p>There is a <a href="overview-tree.html">Class Hierarchy</a> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.</p>
+<ul>
+<li>When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.</li>
+<li>When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.</li>
+</ul>
+</li>
+<li class="blockList">
+<h2>Deprecated API</h2>
+<p>The <a href="deprecated-list.html">Deprecated API</a> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</p>
+</li>
+<li class="blockList">
+<h2>Index</h2>
+<p>The <a href="index-all.html">Index</a> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</p>
+</li>
+<li class="blockList">
+<h2>Prev/Next</h2>
+<p>These links take you to the next or previous class, interface, package, or related page.</p>
+</li>
+<li class="blockList">
+<h2>Frames/No Frames</h2>
+<p>These links show and hide the HTML frames.  All pages are available with or without frames.</p>
+</li>
+<li class="blockList">
+<h2>All Classes</h2>
+<p>The <a href="allclasses-noframe.html">All Classes</a> link shows all classes and interfaces except non-static nested types.</p>
+</li>
+<li class="blockList">
+<h2>Serialized Form</h2>
+<p>Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.</p>
+</li>
+<li class="blockList">
+<h2>Constant Field Values</h2>
+<p>The <a href="constant-values.html">Constant Field Values</a> page lists the static final fields and their values.</p>
+</li>
+</ul>
+<span class="emphasizedPhrase">This help file applies to API documentation generated using the standard doclet.</span></div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li>Class</li>
+<li>Use</li>
+<li><a href="org/jboss/logging/annotations/package-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li class="navBarCell1Rev">Help</li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?help-doc.html" target="_top">Frames</a></li>
+<li><a href="help-doc.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/index-all.html b/docs/apidocs/index-all.html
new file mode 100644
index 0000000..3b43bdc
--- /dev/null
+++ b/docs/apidocs/index-all.html
@@ -0,0 +1,327 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+<script type="text/javascript" src="script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Index (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li>Class</li>
+<li>Use</li>
+<li><a href="org/jboss/logging/annotations/package-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li class="navBarCell1Rev">Index</li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?index-all.html" target="_top">Frames</a></li>
+<li><a href="index-all.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="contentContainer"><a href="#I:B">B</a> <a href="#I:C">C</a> <a href="#I:F">F</a> <a href="#I:I">I</a> <a href="#I:L">L</a> <a href="#I:M">M</a> <a href="#I:N">N</a> <a href="#I:O">O</a> <a href="#I:P">P</a> <a href="#I:R">R</a> <a href="#I:S">S</a> <a href="#I:T">T</a> <a href="#I:V">V</a> <a name="I:B">
+<!--   -->
+</a>
+<h2 class="title">B</h2>
+<dl>
+<dt><a href="org/jboss/logging/annotations/BaseUrl.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">BaseUrl</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">Messages on reports can have a link to a <a href="org/jboss/logging/annotations/ResolutionDoc.html" title="annotation in org.jboss.logging.annotations">resolution document</a>.</div>
+</dd>
+</dl>
+<a name="I:C">
+<!--   -->
+</a>
+<h2 class="title">C</h2>
+<dl>
+<dt><a href="org/jboss/logging/annotations/Cause.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Cause</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">Mark a parameter as being the "exception cause" parameter rather than a positional format parameter.</div>
+</dd>
+<dt><a href="org/jboss/logging/annotations/ConstructType.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">ConstructType</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">Indicates the value of this annotation should be constructed and returned.</div>
+</dd>
+</dl>
+<a name="I:F">
+<!--   -->
+</a>
+<h2 class="title">F</h2>
+<dl>
+<dt><a href="org/jboss/logging/annotations/Field.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Field</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">Indicate that a method parameter value should be applied to a field on the resultant exception object.</div>
+</dd>
+<dt><a href="org/jboss/logging/annotations/Fields.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Fields</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">Defines the default field properties to use on the resultant exception object.</div>
+</dd>
+<dt><a href="org/jboss/logging/annotations/FormatWith.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">FormatWith</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">Indicate that the given parameter should be wrapped with a formatting object of the given class.</div>
+</dd>
+</dl>
+<a name="I:I">
+<!--   -->
+</a>
+<h2 class="title">I</h2>
+<dl>
+<dt><span class="memberNameLink"><a href="org/jboss/logging/annotations/Message.html#INHERIT">INHERIT</a></span> - Static variable in annotation type org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Message.html" title="annotation in org.jboss.logging.annotations">Message</a></dt>
+<dd>
+<div class="block">Indicates that this message should inherit the ID from another message with the same name.</div>
+</dd>
+</dl>
+<a name="I:L">
+<!--   -->
+</a>
+<h2 class="title">L</h2>
+<dl>
+<dt><a href="org/jboss/logging/annotations/LoggingClass.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">LoggingClass</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">Mark a parameter as specifying the name of the logging class to use.</div>
+</dd>
+<dt><a href="org/jboss/logging/annotations/LogMessage.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">LogMessage</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">A typed logger method.</div>
+</dd>
+</dl>
+<a name="I:M">
+<!--   -->
+</a>
+<h2 class="title">M</h2>
+<dl>
+<dt><a href="org/jboss/logging/annotations/Message.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Message</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">Assigns a message string to a resource method.</div>
+</dd>
+<dt><a href="org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations"><span class="typeNameLink">Message.Format</span></a> - Enum in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">The possible format types.</div>
+</dd>
+<dt><a href="org/jboss/logging/annotations/MessageBundle.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">MessageBundle</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">Signify that an interface is a message bundle interface.</div>
+</dd>
+<dt><a href="org/jboss/logging/annotations/MessageLogger.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">MessageLogger</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">Signify that an interface is a typed logger interface.</div>
+</dd>
+</dl>
+<a name="I:N">
+<!--   -->
+</a>
+<h2 class="title">N</h2>
+<dl>
+<dt><span class="memberNameLink"><a href="org/jboss/logging/annotations/Message.html#NONE">NONE</a></span> - Static variable in annotation type org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Message.html" title="annotation in org.jboss.logging.annotations">Message</a></dt>
+<dd>
+<div class="block">Indicates that this message has no ID.</div>
+</dd>
+</dl>
+<a name="I:O">
+<!--   -->
+</a>
+<h2 class="title">O</h2>
+<dl>
+<dt><a href="org/jboss/logging/annotations/Once.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Once</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">Indicates a message should only be logged once.</div>
+</dd>
+<dt><a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a> - package org.jboss.logging.annotations</dt>
+<dd> </dd>
+</dl>
+<a name="I:P">
+<!--   -->
+</a>
+<h2 class="title">P</h2>
+<dl>
+<dt><a href="org/jboss/logging/annotations/Param.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Param</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">Identifies a parameter is to be used for constructing an exception and excluded from the formatting of the message.</div>
+</dd>
+<dt><a href="org/jboss/logging/annotations/Pos.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Pos</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd> </dd>
+<dt><a href="org/jboss/logging/annotations/Producer.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Producer</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">Identifies a parameter has the ability to produce a <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><code>Throwable</code></a> or a super type of a <code>Throwable</code>.</div>
+</dd>
+<dt><a href="org/jboss/logging/annotations/Properties.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Properties</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">Defines the default properties to use on the resultant exception object.</div>
+</dd>
+<dt><a href="org/jboss/logging/annotations/Property.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Property</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">Indicate that a method parameter value should be applied to a property (with a setter method) on the resultant
+ exception object.</div>
+</dd>
+</dl>
+<a name="I:R">
+<!--   -->
+</a>
+<h2 class="title">R</h2>
+<dl>
+<dt><a href="org/jboss/logging/annotations/ResolutionDoc.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">ResolutionDoc</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">Allows a link to be created for messages on a report which contain a possible resolution to the issue reported .</div>
+</dd>
+</dl>
+<a name="I:S">
+<!--   -->
+</a>
+<h2 class="title">S</h2>
+<dl>
+<dt><a href="org/jboss/logging/annotations/Signature.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Signature</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">Specifies the exact signature to use when creating a <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><code>Throwable</code></a> return type.</div>
+</dd>
+<dt><a href="org/jboss/logging/annotations/Suppressed.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Suppressed</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">Indicates the parameter should be added as a <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#addSuppressed-java.lang.Throwable-" title="class or interface in java.lang">suppressed</a> exception to
+ the returned exception.</div>
+</dd>
+</dl>
+<a name="I:T">
+<!--   -->
+</a>
+<h2 class="title">T</h2>
+<dl>
+<dt><a href="org/jboss/logging/annotations/Transform.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Transform</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">Indicate the given parameter should be transformed in each of the <a href="org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations"><code>transform types</code></a>
+ provided.</div>
+</dd>
+<dt><a href="org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations"><span class="typeNameLink">Transform.TransformType</span></a> - Enum in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">The transform type</div>
+</dd>
+</dl>
+<a name="I:V">
+<!--   -->
+</a>
+<h2 class="title">V</h2>
+<dl>
+<dt><a href="org/jboss/logging/annotations/ValidIdRange.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">ValidIdRange</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd>
+<div class="block">Sets a range of valid id's allowed on the <a href="org/jboss/logging/annotations/Message.html#id--"><code>message id</code></a>.</div>
+</dd>
+<dt><a href="org/jboss/logging/annotations/ValidIdRanges.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">ValidIdRanges</span></a> - Annotation Type in <a href="org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/jboss/logging/annotations/Message.Format.html#valueOf-java.lang.String-">valueOf(String)</a></span> - Static method in enum org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Message.Format</a></dt>
+<dd>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/jboss/logging/annotations/Transform.TransformType.html#valueOf-java.lang.String-">valueOf(String)</a></span> - Static method in enum org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a></dt>
+<dd>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/jboss/logging/annotations/Message.Format.html#values--">values()</a></span> - Static method in enum org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Message.Format</a></dt>
+<dd>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/jboss/logging/annotations/Transform.TransformType.html#values--">values()</a></span> - Static method in enum org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a></dt>
+<dd>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</dd>
+</dl>
+<a href="#I:B">B</a> <a href="#I:C">C</a> <a href="#I:F">F</a> <a href="#I:I">I</a> <a href="#I:L">L</a> <a href="#I:M">M</a> <a href="#I:N">N</a> <a href="#I:O">O</a> <a href="#I:P">P</a> <a href="#I:R">R</a> <a href="#I:S">S</a> <a href="#I:T">T</a> <a href="#I:V">V</a> </div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li>Class</li>
+<li>Use</li>
+<li><a href="org/jboss/logging/annotations/package-tree.html">Tree</a></li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li class="navBarCell1Rev">Index</li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?index-all.html" target="_top">Frames</a></li>
+<li><a href="index-all.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/index.html b/docs/apidocs/index.html
new file mode 100644
index 0000000..7662fa0
--- /dev/null
+++ b/docs/apidocs/index.html
@@ -0,0 +1,73 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>JBoss Logging I18n Documentation 2.1.0.Final API</title>
+<script type="text/javascript">
+    tmpTargetPage = "" + window.location.search;
+    if (tmpTargetPage != "" && tmpTargetPage != "undefined")
+        tmpTargetPage = tmpTargetPage.substring(1);
+    if (tmpTargetPage.indexOf(":") != -1 || (tmpTargetPage != "" && !validURL(tmpTargetPage)))
+        tmpTargetPage = "undefined";
+    targetPage = tmpTargetPage;
+    function validURL(url) {
+        try {
+            url = decodeURIComponent(url);
+        }
+        catch (error) {
+            return false;
+        }
+        var pos = url.indexOf(".html");
+        if (pos == -1 || pos != url.length - 5)
+            return false;
+        var allowNumber = false;
+        var allowSep = false;
+        var seenDot = false;
+        for (var i = 0; i < url.length - 5; i++) {
+            var ch = url.charAt(i);
+            if ('a' <= ch && ch <= 'z' ||
+                    'A' <= ch && ch <= 'Z' ||
+                    ch == '$' ||
+                    ch == '_' ||
+                    ch.charCodeAt(0) > 127) {
+                allowNumber = true;
+                allowSep = true;
+            } else if ('0' <= ch && ch <= '9'
+                    || ch == '-') {
+                if (!allowNumber)
+                     return false;
+            } else if (ch == '/' || ch == '.') {
+                if (!allowSep)
+                    return false;
+                allowNumber = false;
+                allowSep = false;
+                if (ch == '.')
+                     seenDot = true;
+                if (ch == '/' && seenDot)
+                     return false;
+            } else {
+                return false;
+            }
+        }
+        return true;
+    }
+    function loadFrames() {
+        if (targetPage != "" && targetPage != "undefined")
+             top.classFrame.location = top.targetPage;
+    }
+</script>
+</head>
+<frameset cols="20%,80%" title="Documentation frame" onload="top.loadFrames()">
+<frame src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
+<frame src="org/jboss/logging/annotations/package-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">
+<noframes>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<h2>Frame Alert</h2>
+<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="org/jboss/logging/annotations/package-summary.html">Non-frame version</a>.</p>
+</noframes>
+</frameset>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/BaseUrl.html b/docs/apidocs/org/jboss/logging/annotations/BaseUrl.html
new file mode 100644
index 0000000..598915b
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/BaseUrl.html
@@ -0,0 +1,238 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>BaseUrl (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="BaseUrl (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/BaseUrl.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev Class</li>
+<li><a href="../../../../org/jboss/logging/annotations/Cause.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/BaseUrl.html" target="_top">Frames</a></li>
+<li><a href="BaseUrl.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type BaseUrl" class="title">Annotation Type BaseUrl</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#TYPE" title="class or interface in java.lang.ann [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in jav [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">BaseUrl</span></pre>
+<div class="block">Messages on reports can have a link to a <a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html" title="annotation in org.jboss.logging.annotations">resolution document</a>. This annotation can be used
+ to provide a base URL for these documents.
+ <p>
+ Expressions in the form of <code>${property.key:default-value}</code> can be used for the values. If the property key is
+ prefixed with <code>sys.</code> a <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/System.html?is-external=true#getProperty-java.lang.String-" title="class or interface in java.lang">system property</a> will be used. If the key is
+ prefixed with <code>env.</code> an <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/System.html?is-external=true#getenv-java.lang.String-" title="class or interface in java.lang">environment variable</a> will be used. In all other cases
+ the <code>org.jboss.logging.tools.expressionProperties</code> processor argument is used to specify the path the properties
+ file which contains the values for the expressions.
+ </p></div>
+<dl>
+<dt><span class="simpleTagLabel">Since:</span></dt>
+<dd>1.2</dd>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:jperkins at redhat.com">James R. Perkins</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.required.element.summary">
+<!--   -->
+</a>
+<h3>Required Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Required Element Summary table, listing required elements, and an explanation">
+<caption><span>Required Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Required Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/BaseUrl.html#value--">value</a></span></code>
+<div class="block">The base URL used for links to resolution documentation on reports.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.element.detail">
+<!--   -->
+</a>
+<h3>Element Detail</h3>
+<a name="value--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>value</h4>
+<pre>public abstract <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> value</pre>
+<div class="block">The base URL used for links to resolution documentation on reports. This can be a fully qualified URL or a
+ relative URL.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the base URL</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/BaseUrl.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev Class</li>
+<li><a href="../../../../org/jboss/logging/annotations/Cause.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/BaseUrl.html" target="_top">Frames</a></li>
+<li><a href="BaseUrl.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/Cause.html b/docs/apidocs/org/jboss/logging/annotations/Cause.html
new file mode 100644
index 0000000..8d99b34
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/Cause.html
@@ -0,0 +1,172 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Cause (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Cause (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Cause.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/BaseUrl.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/ConstructType.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Cause.html" target="_top">Frames</a></li>
+<li><a href="Cause.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li>Element</li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type Cause" class="title">Annotation Type Cause</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#PARAMETER" title="class or interface in java.lang.an [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">Cause</span></pre>
+<div class="block">Mark a parameter as being the "exception cause" parameter rather than a positional format parameter.</div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:david.lloyd at redhat.com">David M. Lloyd</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Cause.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/BaseUrl.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/ConstructType.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Cause.html" target="_top">Frames</a></li>
+<li><a href="Cause.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li>Element</li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/ConstructType.html b/docs/apidocs/org/jboss/logging/annotations/ConstructType.html
new file mode 100644
index 0000000..2b5abda
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/ConstructType.html
@@ -0,0 +1,234 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ConstructType (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="ConstructType (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/ConstructType.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Cause.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Field.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/ConstructType.html" target="_top">Frames</a></li>
+<li><a href="ConstructType.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type ConstructType" class="title">Annotation Type ConstructType</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annot [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">ConstructType</span></pre>
+<div class="block">Indicates the value of this annotation should be constructed and returned. This does not change the return type of
+ the method.
+ <p>
+ This annotation is only allowed on bundle messages that have a throwable return type. The value must be assignable
+ to the return type.
+ </p></div>
+<dl>
+<dt><span class="simpleTagLabel">Since:</span></dt>
+<dd>2.0.0</dd>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:jperkins at redhat.com">James R. Perkins</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.required.element.summary">
+<!--   -->
+</a>
+<h3>Required Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Required Element Summary table, listing required elements, and an explanation">
+<caption><span>Required Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Required Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><? extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/ConstructType.html#value--">value</a></span></code>
+<div class="block">The actual type that should be constructed for the return type.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.element.detail">
+<!--   -->
+</a>
+<h3>Element Detail</h3>
+<a name="value--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>value</h4>
+<pre>public abstract <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><? extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>> value</pre>
+<div class="block">The actual type that should be constructed for the return type.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the class to construct</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/ConstructType.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Cause.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Field.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/ConstructType.html" target="_top">Frames</a></li>
+<li><a href="ConstructType.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/Field.html b/docs/apidocs/org/jboss/logging/annotations/Field.html
new file mode 100644
index 0000000..e2fa770
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/Field.html
@@ -0,0 +1,510 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Field (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Field (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Field.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/ConstructType.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Fields.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Field.html" target="_top">Frames</a></li>
+<li><a href="Field.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type Field" class="title">Annotation Type Field</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>={<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#PARAMETER" title="class or interface in java.lang.a [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Repeatable.html?is-external=true" title="class or interface in java.lang.annotation">@Repeatable</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Repeatable.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="../../../../org/jboss/logging/annotations/Fields.html" title="annotation in org.jboss.logging.annotations">Fields.class</a>)
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">Field</span></pre>
+<div class="block">Indicate that a method parameter value should be applied to a field on the resultant exception object.
+ <p>
+ If this annotation is placed on a method the <a href="../../../../org/jboss/logging/annotations/Field.html#name--">name</a> attribute becomes a required parameter and one
+ default attribute needs to be set. The value of the default attribute is used to set the filed on the resultant
+ exception object.
+ </p></div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:david.lloyd at redhat.com">David M. Lloyd</a>, <a href="mailto:jperkins at redhat.com">James R. Perkins</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.optional.element.summary">
+<!--   -->
+</a>
+<h3>Optional Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Optional Element Summary table, listing optional elements, and an explanation">
+<caption><span>Optional Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Optional Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Field.html#booleanValue--">booleanValue</a></span></code>
+<div class="block">The default <code>boolean</code> value if this annotation is used on a method.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>byte</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Field.html#byteValue--">byteValue</a></span></code>
+<div class="block">The default boolean value if this annotation is used on a method.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>char</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Field.html#charValue--">charValue</a></span></code>
+<div class="block">The default <code>byte</code> value if this annotation is used on a method.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Field.html#classValue--">classValue</a></span></code>
+<div class="block">The default <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang"><code>Class</code></a> value if this annotation is used on a method.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>double</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Field.html#doubleValue--">doubleValue</a></span></code>
+<div class="block">The default <code>double</code> value if this annotation is used on a method.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>float</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Field.html#floatValue--">floatValue</a></span></code>
+<div class="block">The default <code>float</code> value if this annotation is used on a method.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Field.html#intValue--">intValue</a></span></code>
+<div class="block">The default <code>int</code> value if this annotation is used on a method.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Field.html#longValue--">longValue</a></span></code>
+<div class="block">The default <code>long</code> value if this annotation is used on a method.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Field.html#name--">name</a></span></code>
+<div class="block">The field name.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>short</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Field.html#shortValue--">shortValue</a></span></code>
+<div class="block">The default <code>short</code> value if this annotation is used on a method.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Field.html#stringValue--">stringValue</a></span></code>
+<div class="block">The default <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> value if this annotation is used on a method.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.element.detail">
+<!--   -->
+</a>
+<h3>Element Detail</h3>
+<a name="name--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>name</h4>
+<pre>public abstract <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name</pre>
+<div class="block">The field name.  If not specified, the parameter name is assumed to be the field name.
+ <p>
+ This becomes a required attrubyte if this annotation is present on a method.
+ </p></div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the field name</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>""</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="booleanValue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>booleanValue</h4>
+<pre>public abstract boolean booleanValue</pre>
+<div class="block">The default <code>boolean</code> value if this annotation is used on a method.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default value to use</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>false</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="byteValue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>byteValue</h4>
+<pre>public abstract byte byteValue</pre>
+<div class="block">The default boolean value if this annotation is used on a method.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default value to use</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>0</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="charValue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>charValue</h4>
+<pre>public abstract char charValue</pre>
+<div class="block">The default <code>byte</code> value if this annotation is used on a method.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default value to use</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>0</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="classValue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>classValue</h4>
+<pre>public abstract <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?> classValue</pre>
+<div class="block">The default <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang"><code>Class</code></a> value if this annotation is used on a method.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default value to use</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>java.lang.Object.class</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="doubleValue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>doubleValue</h4>
+<pre>public abstract double doubleValue</pre>
+<div class="block">The default <code>double</code> value if this annotation is used on a method.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default value to use</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>0.0</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="floatValue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>floatValue</h4>
+<pre>public abstract float floatValue</pre>
+<div class="block">The default <code>float</code> value if this annotation is used on a method.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default value to use</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>0.0f</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="intValue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>intValue</h4>
+<pre>public abstract int intValue</pre>
+<div class="block">The default <code>int</code> value if this annotation is used on a method.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default value to use</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>0</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="longValue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>longValue</h4>
+<pre>public abstract long longValue</pre>
+<div class="block">The default <code>long</code> value if this annotation is used on a method.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default value to use</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>0L</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="shortValue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>shortValue</h4>
+<pre>public abstract short shortValue</pre>
+<div class="block">The default <code>short</code> value if this annotation is used on a method.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default value to use</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>0</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="stringValue--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>stringValue</h4>
+<pre>public abstract <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> stringValue</pre>
+<div class="block">The default <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> value if this annotation is used on a method.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default value to use</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>""</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Field.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/ConstructType.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Fields.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Field.html" target="_top">Frames</a></li>
+<li><a href="Field.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/Fields.html b/docs/apidocs/org/jboss/logging/annotations/Fields.html
new file mode 100644
index 0000000..e738e2c
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/Fields.html
@@ -0,0 +1,228 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Fields (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Fields (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Fields.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Field.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/FormatWith.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Fields.html" target="_top">Frames</a></li>
+<li><a href="Fields.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type Fields" class="title">Annotation Type Fields</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annot [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">Fields</span></pre>
+<div class="block">Defines the default field properties to use on the resultant exception object.</div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:jperkins at redhat.com">James R. Perkins</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.required.element.summary">
+<!--   -->
+</a>
+<h3>Required Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Required Element Summary table, listing required elements, and an explanation">
+<caption><span>Required Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Required Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../org/jboss/logging/annotations/Field.html" title="annotation in org.jboss.logging.annotations">Field</a>[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Fields.html#value--">value</a></span></code>
+<div class="block">The fields to use on the resultant exception object.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.element.detail">
+<!--   -->
+</a>
+<h3>Element Detail</h3>
+<a name="value--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>value</h4>
+<pre>public abstract <a href="../../../../org/jboss/logging/annotations/Field.html" title="annotation in org.jboss.logging.annotations">Field</a>[] value</pre>
+<div class="block">The fields to use on the resultant exception object. Note that the <a href="../../../../org/jboss/logging/annotations/Field.html#name--"><code>name</code></a> attribute is
+ required for these annotations.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the fields</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Fields.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Field.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/FormatWith.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Fields.html" target="_top">Frames</a></li>
+<li><a href="Fields.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/FormatWith.html b/docs/apidocs/org/jboss/logging/annotations/FormatWith.html
new file mode 100644
index 0000000..72687bf
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/FormatWith.html
@@ -0,0 +1,231 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>FormatWith (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="FormatWith (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/FormatWith.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Fields.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/LoggingClass.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/FormatWith.html" target="_top">Frames</a></li>
+<li><a href="FormatWith.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type FormatWith" class="title">Annotation Type FormatWith</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#PARAMETER" title="class or interface in java.lan [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in jav [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">FormatWith</span></pre>
+<div class="block">Indicate that the given parameter should be wrapped with a formatting object of the given class.  The class
+ must have a one-argument constructor which unambiguously accepts a value of this parameter's type.  The resultant
+ object will be passed in as a parameter to the underlying format type; thus its <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang"><code>toString()</code></a>
+ method will be invoked (or, if the format style is <a href="../../../../org/jboss/logging/annotations/Message.Format.html#PRINTF"><code>PRINTF</code></a>, the object may implement
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Formattable.html?is-external=true" title="class or interface in java.util"><code>Formattable</code></a> to get extra functionality).</div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:david.lloyd at redhat.com">David M. Lloyd</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.required.element.summary">
+<!--   -->
+</a>
+<h3>Required Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Required Element Summary table, listing required elements, and an explanation">
+<caption><span>Required Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Required Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/FormatWith.html#value--">value</a></span></code>
+<div class="block">The class of the formatting object to use.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.element.detail">
+<!--   -->
+</a>
+<h3>Element Detail</h3>
+<a name="value--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>value</h4>
+<pre>public abstract <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?> value</pre>
+<div class="block">The class of the formatting object to use.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the class</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/FormatWith.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Fields.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/LoggingClass.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/FormatWith.html" target="_top">Frames</a></li>
+<li><a href="FormatWith.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/LogMessage.html b/docs/apidocs/org/jboss/logging/annotations/LogMessage.html
new file mode 100644
index 0000000..90357d9
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/LogMessage.html
@@ -0,0 +1,259 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>LogMessage (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="LogMessage (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/LogMessage.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/LoggingClass.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Message.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/LogMessage.html" target="_top">Frames</a></li>
+<li><a href="LogMessage.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type LogMessage" class="title">Annotation Type LogMessage</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annot [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">LogMessage</span></pre>
+<div class="block">A typed logger method.  Indicates that this method will log the associated <a href="../../../../org/jboss/logging/annotations/Message.html" title="annotation in org.jboss.logging.annotations"><code>Message</code></a> to the logger system, as
+ opposed to being a simple message lookup.</div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:david.lloyd at redhat.com">David M. Lloyd</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.optional.element.summary">
+<!--   -->
+</a>
+<h3>Optional Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Optional Element Summary table, listing optional elements, and an explanation">
+<caption><span>Optional Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Optional Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>org.jboss.logging.Logger.Level</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/LogMessage.html#level--">level</a></span></code>
+<div class="block">The log level at which this message should be logged.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/LogMessage.html#loggingClass--">loggingClass</a></span></code>
+<div class="block">The logging class name to use for this message, if any.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.element.detail">
+<!--   -->
+</a>
+<h3>Element Detail</h3>
+<a name="level--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>level</h4>
+<pre>public abstract org.jboss.logging.Logger.Level level</pre>
+<div class="block">The log level at which this message should be logged.  Defaults to <code>INFO</code>.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the log level</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>org.jboss.logging.Logger.Level.INFO</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="loggingClass--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>loggingClass</h4>
+<pre>public abstract <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?> loggingClass</pre>
+<div class="block">The logging class name to use for this message, if any.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the logging class name</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>java.lang.Void.class</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/LogMessage.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/LoggingClass.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Message.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/LogMessage.html" target="_top">Frames</a></li>
+<li><a href="LogMessage.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/LoggingClass.html b/docs/apidocs/org/jboss/logging/annotations/LoggingClass.html
new file mode 100644
index 0000000..615f81e
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/LoggingClass.html
@@ -0,0 +1,173 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>LoggingClass (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="LoggingClass (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/LoggingClass.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/FormatWith.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/LogMessage.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/LoggingClass.html" target="_top">Frames</a></li>
+<li><a href="LoggingClass.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li>Element</li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type LoggingClass" class="title">Annotation Type LoggingClass</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#PARAMETER" title="class or interface in java.lang.an [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">LoggingClass</span></pre>
+<div class="block">Mark a parameter as specifying the name of the logging class to use.  The parameter
+ may have a type of <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang"><code>Class</code></a>.</div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:david.lloyd at redhat.com">David M. Lloyd</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/LoggingClass.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/FormatWith.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/LogMessage.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/LoggingClass.html" target="_top">Frames</a></li>
+<li><a href="LoggingClass.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li>Element</li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/Message.Format.html b/docs/apidocs/org/jboss/logging/annotations/Message.Format.html
new file mode 100644
index 0000000..46f76c1
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/Message.Format.html
@@ -0,0 +1,368 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Message.Format (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Message.Format (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":9,"i1":9};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Message.Format.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Message.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/MessageBundle.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Message.Format.html" target="_top">Frames</a></li>
+<li><a href="Message.Format.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li><a href="#enum.constant.summary">Enum Constants</a> | </li>
+<li>Field | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#enum.constant.detail">Enum Constants</a> | </li>
+<li>Field | </li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Enum Message.Format" class="title">Enum Message.Format</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">java.lang.Enum</a><<a href="../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Message.Format</a>></li>
+<li>
+<ul class="inheritance">
+<li>org.jboss.logging.annotations.Message.Format</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><<a href="../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Message.Format</a>></dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../org/jboss/logging/annotations/Message.html" title="annotation in org.jboss.logging.annotations">Message</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static enum <span class="typeNameLabel">Message.Format</span>
+extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a><<a href="../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Message.Format</a>></pre>
+<div class="block">The possible format types.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ENUM CONSTANT SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum.constant.summary">
+<!--   -->
+</a>
+<h3>Enum Constant Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum Constant Summary table, listing enum constants, and an explanation">
+<caption><span>Enum Constants</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colOne" scope="col">Enum Constant and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Message.Format.html#MESSAGE_FORMAT">MESSAGE_FORMAT</a></span></code>
+<div class="block">A <a href="http://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html?is-external=true" title="class or interface in java.text"><code>MessageFormat</code></a>-type format string.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Message.Format.html#NO_FORMAT">NO_FORMAT</a></span></code>
+<div class="block">Indicates the message should not be formatted.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Message.Format.html#PRINTF">PRINTF</a></span></code>
+<div class="block">A <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html?is-external=true" title="class or interface in java.util"><code>Formatter</code></a>-type format string.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>static <a href="../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Message.Format</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Message.Format.html#valueOf-java.lang.String-">valueOf</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</code>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Message.Format</a>[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Message.Format.html#values--">values</a></span>()</code>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Enum">
+<!--   -->
+</a>
+<h3>Methods inherited from class java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a></h3>
+<code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#compareTo-E-" title="class or interface in java.lang">compareTo</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#getDeclaringClass--" title="class or interface in java.lang">getDeclaringClass [...]
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.or [...]
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ENUM CONSTANT DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum.constant.detail">
+<!--   -->
+</a>
+<h3>Enum Constant Detail</h3>
+<a name="PRINTF">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>PRINTF</h4>
+<pre>public static final <a href="../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Message.Format</a> PRINTF</pre>
+<div class="block">A <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html?is-external=true" title="class or interface in java.util"><code>Formatter</code></a>-type format string.</div>
+</li>
+</ul>
+<a name="MESSAGE_FORMAT">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>MESSAGE_FORMAT</h4>
+<pre>public static final <a href="../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Message.Format</a> MESSAGE_FORMAT</pre>
+<div class="block">A <a href="http://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html?is-external=true" title="class or interface in java.text"><code>MessageFormat</code></a>-type format string.</div>
+</li>
+</ul>
+<a name="NO_FORMAT">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>NO_FORMAT</h4>
+<pre>public static final <a href="../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Message.Format</a> NO_FORMAT</pre>
+<div class="block">Indicates the message should not be formatted.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="values--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>values</h4>
+<pre>public static <a href="../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Message.Format</a>[] values()</pre>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.  This method may be used to iterate
+over the constants as follows:
+<pre>
+for (Message.Format c : Message.Format.values())
+    System.out.println(c);
+</pre></div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>an array containing the constants of this enum type, in the order they are declared</dd>
+</dl>
+</li>
+</ul>
+<a name="valueOf-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>valueOf</h4>
+<pre>public static <a href="../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Message.Format</a> valueOf(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</pre>
+<div class="block">Returns the enum constant of this type with the specified name.
+The string must match <i>exactly</i> an identifier used to declare an
+enum constant in this type.  (Extraneous whitespace characters are 
+not permitted.)</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>name</code> - the name of the enum constant to be returned.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the enum constant with the specified name</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if this enum type has no constant with the specified name</dd>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</a></code> - if the argument is null</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Message.Format.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Message.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/MessageBundle.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Message.Format.html" target="_top">Frames</a></li>
+<li><a href="Message.Format.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li><a href="#enum.constant.summary">Enum Constants</a> | </li>
+<li>Field | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#enum.constant.detail">Enum Constants</a> | </li>
+<li>Field | </li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/Message.html b/docs/apidocs/org/jboss/logging/annotations/Message.html
new file mode 100644
index 0000000..cb61cb9
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/Message.html
@@ -0,0 +1,363 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Message (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Message (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Message.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/LogMessage.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Message.html" target="_top">Frames</a></li>
+<li><a href="Message.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li><a href="#annotation.type.field.summary">Field</a> | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#annotation.type.field.detail">Field</a> | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type Message" class="title">Annotation Type Message</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.a [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in jav [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">Message</span></pre>
+<div class="block">Assigns a message string to a resource method.  The method arguments are used to supply the positional parameter
+ values for the method.</div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:david.lloyd at redhat.com">David M. Lloyd</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ANNOTATION TYPE FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Fields and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Message.html#INHERIT">INHERIT</a></span></code>
+<div class="block">Indicates that this message should inherit the ID from another message with the same name.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Message.html#NONE">NONE</a></span></code>
+<div class="block">Indicates that this message has no ID.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.required.element.summary">
+<!--   -->
+</a>
+<h3>Required Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Required Element Summary table, listing required elements, and an explanation">
+<caption><span>Required Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Required Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Message.html#value--">value</a></span></code>
+<div class="block">The default format string of this message.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.optional.element.summary">
+<!--   -->
+</a>
+<h3>Optional Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Optional Element Summary table, listing optional elements, and an explanation">
+<caption><span>Optional Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Optional Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Message.Format</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Message.html#format--">format</a></span></code>
+<div class="block">The format type of this method (defaults to <a href="../../../../org/jboss/logging/annotations/Message.Format.html#PRINTF"><code>Message.Format.PRINTF</code></a>).</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Message.html#id--">id</a></span></code>
+<div class="block">The message ID number.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ANNOTATION TYPE FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="NONE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NONE</h4>
+<pre>public static final int NONE</pre>
+<div class="block">Indicates that this message has no ID.</div>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="INHERIT">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>INHERIT</h4>
+<pre>public static final int INHERIT</pre>
+<div class="block">Indicates that this message should inherit the ID from another message with the same name.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.element.detail">
+<!--   -->
+</a>
+<h3>Element Detail</h3>
+<a name="value--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>value</h4>
+<pre>public abstract <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> value</pre>
+<div class="block">The default format string of this message.
+ <p>
+ Expressions in the form of <code>${property.key:default-value}</code> can be used for the value. If the property key is
+ prefixed with <code>sys.</code> a <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/System.html?is-external=true#getProperty-java.lang.String-" title="class or interface in java.lang">system property</a> will be used. If the key is
+ prefixed with <code>env.</code> an <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/System.html?is-external=true#getenv-java.lang.String-" title="class or interface in java.lang">environment variable</a> will be used. In all other cases
+ the <code>org.jboss.logging.tools.expressionProperties</code> processor argument is used to specify the path the properties
+ file which contains the values for the expressions.
+ </p></div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the format string</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="id--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>id</h4>
+<pre>public abstract int id</pre>
+<div class="block">The message ID number.  Only one message with a given name may specify an ID other than <a href="../../../../org/jboss/logging/annotations/Message.html#INHERIT"><code>INHERIT</code></a>.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the message ID number</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>-1</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="format--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>format</h4>
+<pre>public abstract <a href="../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Message.Format</a> format</pre>
+<div class="block">The format type of this method (defaults to <a href="../../../../org/jboss/logging/annotations/Message.Format.html#PRINTF"><code>Message.Format.PRINTF</code></a>).</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the format type</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>org.jboss.logging.annotations.Message.Format.PRINTF</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Message.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/LogMessage.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Message.html" target="_top">Frames</a></li>
+<li><a href="Message.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li><a href="#annotation.type.field.summary">Field</a> | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#annotation.type.field.detail">Field</a> | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/MessageBundle.html b/docs/apidocs/org/jboss/logging/annotations/MessageBundle.html
new file mode 100644
index 0000000..b6ba0aa
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/MessageBundle.html
@@ -0,0 +1,311 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>MessageBundle (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="MessageBundle (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/MessageBundle.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/MessageLogger.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/MessageBundle.html" target="_top">Frames</a></li>
+<li><a href="MessageBundle.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type MessageBundle" class="title">Annotation Type MessageBundle</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#TYPE" title="class or interface in java.lang.ann [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in jav [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">MessageBundle</span></pre>
+<div class="block">Signify that an interface is a message bundle interface.</div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:david.lloyd at redhat.com">David M. Lloyd</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.required.element.summary">
+<!--   -->
+</a>
+<h3>Required Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Required Element Summary table, listing required elements, and an explanation">
+<caption><span>Required Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Required Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/MessageBundle.html#projectCode--">projectCode</a></span></code>
+<div class="block">Get the project code for messages that have an associated code.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.optional.element.summary">
+<!--   -->
+</a>
+<h3>Optional Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Optional Element Summary table, listing optional elements, and an explanation">
+<caption><span>Optional Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Optional Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/MessageBundle.html#length--">length</a></span></code>
+<div class="block">The length of the padding used for each id in the message bundle.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/MessageBundle.html#rootLocale--">rootLocale</a></span></code>
+<div class="block">Specifies the <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Locale.html?is-external=true" title="class or interface in java.util">locale</a> for formatting bundle messages.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.element.detail">
+<!--   -->
+</a>
+<h3>Element Detail</h3>
+<a name="projectCode--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>projectCode</h4>
+<pre>public abstract <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> projectCode</pre>
+<div class="block">Get the project code for messages that have an associated code.  If no project code is associated
+ with this bundle, specify <code>""</code> (the empty string).</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the project code</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="length--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>length</h4>
+<pre>public abstract int length</pre>
+<div class="block">The length of the padding used for each id in the message bundle. For example given the default padding length
+ of 6 and a message with an id of 100 would result would be <code>"000100"</code>.
+ <p/>
+ Valid values a range of 3 to 8. Any value less than 0 turns off padding. Any other value will result in an error
+ being produced.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the length the id should be padded</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>6</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="rootLocale--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>rootLocale</h4>
+<pre>public abstract <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> rootLocale</pre>
+<div class="block">Specifies the <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Locale.html?is-external=true" title="class or interface in java.util">locale</a> for formatting bundle messages. This is only used in the super
+ implementation. Subclasses will define their own locale to use based on the name of the resource bundle at
+ compile time.
+ <p>
+ An empty string will default to <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Locale.html?is-external=true#ROOT" title="class or interface in java.util"><code>Locale.ROOT</code></a>.
+ </p>
+ <p>
+ A non-empty string will be parsed by the <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Locale.html?is-external=true#forLanguageTag-java.lang.String-" title="class or interface in java.util"><code>Locale.forLanguageTag(String)</code></a>. This uses the
+ <a href="https://tools.ietf.org/html/bcp47">IETF BCP 47</a> format.
+ </p></div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default locale message bundles should use for formatting messages</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>""</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/MessageBundle.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/MessageLogger.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/MessageBundle.html" target="_top">Frames</a></li>
+<li><a href="MessageBundle.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/MessageLogger.html b/docs/apidocs/org/jboss/logging/annotations/MessageLogger.html
new file mode 100644
index 0000000..515315f
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/MessageLogger.html
@@ -0,0 +1,313 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>MessageLogger (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="MessageLogger (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/MessageLogger.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/MessageBundle.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Once.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/MessageLogger.html" target="_top">Frames</a></li>
+<li><a href="MessageLogger.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type MessageLogger" class="title">Annotation Type MessageLogger</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#TYPE" title="class or interface in java.lang.annotat [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">MessageLogger</span></pre>
+<div class="block">Signify that an interface is a typed logger interface.  A message logger interface may optionally extend other
+ message logger interfaces and message bundle interfaces (see <a href="../../../../org/jboss/logging/annotations/MessageBundle.html" title="annotation in org.jboss.logging.annotations"><code>MessageBundle</code></a>, as
+ well as the <code>BasicLogger</code> interface.</div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:david.lloyd at redhat.com">David M. Lloyd</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.required.element.summary">
+<!--   -->
+</a>
+<h3>Required Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Required Element Summary table, listing required elements, and an explanation">
+<caption><span>Required Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Required Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/MessageLogger.html#projectCode--">projectCode</a></span></code>
+<div class="block">Get the project code for messages that have an associated code.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.optional.element.summary">
+<!--   -->
+</a>
+<h3>Optional Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Optional Element Summary table, listing optional elements, and an explanation">
+<caption><span>Optional Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Optional Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/MessageLogger.html#length--">length</a></span></code>
+<div class="block">The length of the padding used for each id in the message bundle.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/MessageLogger.html#rootLocale--">rootLocale</a></span></code>
+<div class="block">Specifies the <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Locale.html?is-external=true" title="class or interface in java.util">locale</a> for formatting bundle messages.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.element.detail">
+<!--   -->
+</a>
+<h3>Element Detail</h3>
+<a name="projectCode--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>projectCode</h4>
+<pre>public abstract <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> projectCode</pre>
+<div class="block">Get the project code for messages that have an associated code.  If no project code is associated
+ with this logger, specify <code>""</code> (the empty string).</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the project code</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="length--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>length</h4>
+<pre>public abstract int length</pre>
+<div class="block">The length of the padding used for each id in the message bundle. For example given the default padding length
+ of 6 and a message with an id of 100 would result would be <code>"000100"</code>.
+ <p/>
+ Valid values a range of 3 to 8. Any value less than 0 turns off padding. Any other value will result in an error
+ being produced.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the length the id should be padded</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>6</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="rootLocale--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>rootLocale</h4>
+<pre>public abstract <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> rootLocale</pre>
+<div class="block">Specifies the <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Locale.html?is-external=true" title="class or interface in java.util">locale</a> for formatting bundle messages. This is only used in the super
+ implementation. Subclasses will define their own locale to use based on the name of the resource bundle at
+ compile time.
+ <p>
+ An empty string will default to <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Locale.html?is-external=true#ROOT" title="class or interface in java.util"><code>Locale.ROOT</code></a>.
+ </p>
+ <p>
+ A non-empty string will be parsed by the <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Locale.html?is-external=true#forLanguageTag-java.lang.String-" title="class or interface in java.util"><code>Locale.forLanguageTag(String)</code></a>. This uses the
+ <a href="https://tools.ietf.org/html/bcp47">IETF BCP 47</a> format.
+ </p></div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default locale message bundles should use for formatting messages</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>""</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/MessageLogger.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/MessageBundle.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Once.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/MessageLogger.html" target="_top">Frames</a></li>
+<li><a href="MessageLogger.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/Once.html b/docs/apidocs/org/jboss/logging/annotations/Once.html
new file mode 100644
index 0000000..e3c1391
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/Once.html
@@ -0,0 +1,177 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Once (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Once (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Once.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/MessageLogger.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Param.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Once.html" target="_top">Frames</a></li>
+<li><a href="Once.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li>Element</li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type Once" class="title">Annotation Type Once</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.a [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in jav [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">Once</span></pre>
+<div class="block">Indicates a message should only be logged once.
+ <p>
+ Methods that use this annotation must be <a href="../../../../org/jboss/logging/annotations/LogMessage.html" title="annotation in org.jboss.logging.annotations">logger methods</a>. Overloaded
+ methods also annotated with <code>@Once</code> will inherit the same check only logging the message from the first
+ overloaded method invoked.
+ </p></div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:jperkins at redhat.com">James R. Perkins</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Once.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/MessageLogger.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Param.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Once.html" target="_top">Frames</a></li>
+<li><a href="Once.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li>Element</li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/Param.html b/docs/apidocs/org/jboss/logging/annotations/Param.html
new file mode 100644
index 0000000..f58f6f5
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/Param.html
@@ -0,0 +1,237 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Param (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Param (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Param.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Once.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Pos.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Param.html" target="_top">Frames</a></li>
+<li><a href="Param.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type Param" class="title">Annotation Type Param</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#PARAMETER" title="class or interface in java.lan [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in jav [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">Param</span></pre>
+<div class="block">Identifies a parameter is to be used for constructing an exception and excluded from the formatting of the message.
+ <p/>
+ Parameters will be order-matched first, then type-matched to resolve ambiguity. If a match fails an error should
+ occur.
+ <p/>
+ The <a href="../../../../org/jboss/logging/annotations/Param.html#value--"><code>value()</code></a> option will allow an optional class to be specified which will have to match the exact type of
+ the parameter in question, to enable unambiguous resolution. The value must be the fully qualified class name.</div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:jperkins at redhat.com">James R. Perkins</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.optional.element.summary">
+<!--   -->
+</a>
+<h3>Optional Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Optional Element Summary table, listing optional elements, and an explanation">
+<caption><span>Optional Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Optional Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Param.html#value--">value</a></span></code>
+<div class="block">Defines an exact class the parameter must match for unambiguous resolution.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.element.detail">
+<!--   -->
+</a>
+<h3>Element Detail</h3>
+<a name="value--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>value</h4>
+<pre>public abstract <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?> value</pre>
+<div class="block">Defines an exact class the parameter must match for unambiguous resolution.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the class the parameter must match.</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>java.lang.Object.class</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Param.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Once.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Pos.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Param.html" target="_top">Frames</a></li>
+<li><a href="Param.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/Pos.html b/docs/apidocs/org/jboss/logging/annotations/Pos.html
new file mode 100644
index 0000000..a696b2c
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/Pos.html
@@ -0,0 +1,273 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Pos (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Pos (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Pos.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Param.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Producer.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Pos.html" target="_top">Frames</a></li>
+<li><a href="Pos.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type Pos" class="title">Annotation Type Pos</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#PARAMETER" title="class or interface in java.lang.an [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">Pos</span></pre>
+<dl>
+<dt><span class="simpleTagLabel">Since:</span></dt>
+<dd>1.1.0</dd>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:jperkins at redhat.com">James R. Perkins</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.required.element.summary">
+<!--   -->
+</a>
+<h3>Required Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Required Element Summary table, listing required elements, and an explanation">
+<caption><span>Required Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Required Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Pos.html#value--">value</a></span></code>
+<div class="block">The positions the value should be used at.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.optional.element.summary">
+<!--   -->
+</a>
+<h3>Optional Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Optional Element Summary table, listing optional elements, and an explanation">
+<caption><span>Optional Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Optional Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../org/jboss/logging/annotations/Transform.html" title="annotation in org.jboss.logging.annotations">Transform</a>[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Pos.html#transform--">transform</a></span></code>
+<div class="block">The transform types used on the parameter.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.element.detail">
+<!--   -->
+</a>
+<h3>Element Detail</h3>
+<a name="value--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>value</h4>
+<pre>public abstract int[] value</pre>
+<div class="block">The positions the value should be used at.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>an array of the positions for the parameter</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="transform--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>transform</h4>
+<pre>public abstract <a href="../../../../org/jboss/logging/annotations/Transform.html" title="annotation in org.jboss.logging.annotations">Transform</a>[] transform</pre>
+<div class="block">The transform types used on the parameter.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>an array of the transformer types</dd>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../org/jboss/logging/annotations/Transform.html" title="annotation in org.jboss.logging.annotations"><code>Transform</code></a></dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>{}</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Pos.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Param.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Producer.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Pos.html" target="_top">Frames</a></li>
+<li><a href="Pos.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/Producer.html b/docs/apidocs/org/jboss/logging/annotations/Producer.html
new file mode 100644
index 0000000..caba55e
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/Producer.html
@@ -0,0 +1,210 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Producer (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Producer (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Producer.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Pos.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Properties.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Producer.html" target="_top">Frames</a></li>
+<li><a href="Producer.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li>Element</li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type Producer" class="title">Annotation Type Producer</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#PARAMETER" title="class or interface in java.lan [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in jav [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">Producer</span></pre>
+<div class="block">Identifies a parameter has the ability to produce a <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><code>Throwable</code></a> or a super type of a <code>Throwable</code>. The
+ parameter type must be a <a href="http://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html?is-external=true" title="class or interface in java.util.function"><code>Function</code></a> or a <a href="http://docs.oracle.com/javase/8/docs/api/java/util/function/BiFunction.html?is-external=true" title="class or interface in java.util.function"><code>BiFunction</code></a>.
+ <p>
+ For a <a href="http://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html?is-external=true" title="class or interface in java.util.function"><code>Function</code></a> the input parameter must be a <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> which will be the message
+ associated with the method. The result type must <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><code>Throwable</code></a> or a super type of a <code>Throwable</code>.
+ </p>
+
+ <p>
+ For a <a href="http://docs.oracle.com/javase/8/docs/api/java/util/function/BiFunction.html?is-external=true" title="class or interface in java.util.function"><code>BiFunction</code></a> one of the input parameters must be a <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> which will be the
+ message associated with the method. The other input parameter must be a <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><code>Throwable</code></a> or a super type of a
+ <code>Throwable</code> and must be assignable from the parameter annotated with <a href="../../../../org/jboss/logging/annotations/Cause.html" title="annotation in org.jboss.logging.annotations"><code>Cause</code></a>. The result type must
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><code>Throwable</code></a> or a super type of a <code>Throwable</code>.
+ </p>
+
+ <p>
+ <strong>Example</strong>
+ <code>
+ <pre>
+ @Message("The operation failed due to %s")
+ <T extends RuntimeException> T operationFailed(@Producer Function<String, T> function, String op);
+
+ @Message("The operation failed due to %s")
+ <T extends RuntimeException> T operationFailed(@Producer BiFunction<String, Throwable, T> function, @Cause Throwable cause, String op);
+
+ </pre>
+ </code>
+ </p>
+
+ <p>
+ <strong>Example Usage</strong>
+ <code>
+ <pre>
+ throw Bundle.MESSAGES.operationFailed(IllegalArgumentException::new, "start");
+
+ throw Bundle.MESSAGES.operationFailed(IllegalStateException::new, cause, "start");
+
+ </pre>
+ </code>
+ </p></div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:jperkins at redhat.com">James R. Perkins</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Producer.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Pos.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Properties.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Producer.html" target="_top">Frames</a></li>
+<li><a href="Producer.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li>Element</li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/Properties.html b/docs/apidocs/org/jboss/logging/annotations/Properties.html
new file mode 100644
index 0000000..e3f854e
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/Properties.html
@@ -0,0 +1,228 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Properties (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Properties (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Properties.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Producer.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Property.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Properties.html" target="_top">Frames</a></li>
+<li><a href="Properties.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type Properties" class="title">Annotation Type Properties</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annot [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">Properties</span></pre>
+<div class="block">Defines the default properties to use on the resultant exception object.</div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:jperkins at redhat.com">James R. Perkins</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.required.element.summary">
+<!--   -->
+</a>
+<h3>Required Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Required Element Summary table, listing required elements, and an explanation">
+<caption><span>Required Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Required Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../org/jboss/logging/annotations/Property.html" title="annotation in org.jboss.logging.annotations">Property</a>[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Properties.html#value--">value</a></span></code>
+<div class="block">The properties to use on the resultant exception object.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.element.detail">
+<!--   -->
+</a>
+<h3>Element Detail</h3>
+<a name="value--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>value</h4>
+<pre>public abstract <a href="../../../../org/jboss/logging/annotations/Property.html" title="annotation in org.jboss.logging.annotations">Property</a>[] value</pre>
+<div class="block">The properties to use on the resultant exception object. Note that the <a href="../../../../org/jboss/logging/annotations/Property.html#name--"><code>name</code></a> attribute is
+ required for these annotations.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the properties</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Properties.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Producer.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Property.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Properties.html" target="_top">Frames</a></li>
+<li><a href="Properties.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/Property.html b/docs/apidocs/org/jboss/logging/annotations/Property.html
new file mode 100644
index 0000000..3fa8aba
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/Property.html
@@ -0,0 +1,511 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Property (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Property (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Property.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Properties.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Property.html" target="_top">Frames</a></li>
+<li><a href="Property.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type Property" class="title">Annotation Type Property</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>={<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#PARAMETER" title="class or interface in java.lang.a [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Repeatable.html?is-external=true" title="class or interface in java.lang.annotation">@Repeatable</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Repeatable.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="../../../../org/jboss/logging/annotations/Properties.html" title="annotation in org.jboss.logging.annotations">Properties.class</a>)
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">Property</span></pre>
+<div class="block">Indicate that a method parameter value should be applied to a property (with a setter method) on the resultant
+ exception object.
+ <p>
+ If this annotation is placed on a method the <a href="../../../../org/jboss/logging/annotations/Property.html#name--">name</a> attribute becomes a required parameter and one
+ default attribute needs to be set. The value of the default attribute is used to set the property on the resultant
+ exception object.
+ </p></div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:david.lloyd at redhat.com">David M. Lloyd</a>, <a href="mailto:jperkins at redhat.com">James R. Perkins</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.optional.element.summary">
+<!--   -->
+</a>
+<h3>Optional Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Optional Element Summary table, listing optional elements, and an explanation">
+<caption><span>Optional Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Optional Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Property.html#booleanValue--">booleanValue</a></span></code>
+<div class="block">The default <code>boolean</code> value if this annotation is used on a method.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>byte</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Property.html#byteValue--">byteValue</a></span></code>
+<div class="block">The default boolean value if this annotation is used on a method.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>char</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Property.html#charValue--">charValue</a></span></code>
+<div class="block">The default <code>byte</code> value if this annotation is used on a method.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Property.html#classValue--">classValue</a></span></code>
+<div class="block">The default <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang"><code>Class</code></a> value if this annotation is used on a method.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>double</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Property.html#doubleValue--">doubleValue</a></span></code>
+<div class="block">The default <code>double</code> value if this annotation is used on a method.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>float</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Property.html#floatValue--">floatValue</a></span></code>
+<div class="block">The default <code>float</code> value if this annotation is used on a method.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Property.html#intValue--">intValue</a></span></code>
+<div class="block">The default <code>int</code> value if this annotation is used on a method.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Property.html#longValue--">longValue</a></span></code>
+<div class="block">The default <code>long</code> value if this annotation is used on a method.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Property.html#name--">name</a></span></code>
+<div class="block">The property name.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>short</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Property.html#shortValue--">shortValue</a></span></code>
+<div class="block">The default <code>short</code> value if this annotation is used on a method.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Property.html#stringValue--">stringValue</a></span></code>
+<div class="block">The default <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> value if this annotation is used on a method.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.element.detail">
+<!--   -->
+</a>
+<h3>Element Detail</h3>
+<a name="name--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>name</h4>
+<pre>public abstract <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name</pre>
+<div class="block">The property name.  If not specified, the parameter name is assumed to be the property name.
+ <p>
+ This becomes a required attribute if this annotation is present on a method.
+ </p></div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the property name</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>""</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="booleanValue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>booleanValue</h4>
+<pre>public abstract boolean booleanValue</pre>
+<div class="block">The default <code>boolean</code> value if this annotation is used on a method.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default value to use</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>false</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="byteValue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>byteValue</h4>
+<pre>public abstract byte byteValue</pre>
+<div class="block">The default boolean value if this annotation is used on a method.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default value to use</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>0</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="charValue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>charValue</h4>
+<pre>public abstract char charValue</pre>
+<div class="block">The default <code>byte</code> value if this annotation is used on a method.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default value to use</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>0</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="classValue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>classValue</h4>
+<pre>public abstract <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?> classValue</pre>
+<div class="block">The default <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang"><code>Class</code></a> value if this annotation is used on a method.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default value to use</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>java.lang.Object.class</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="doubleValue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>doubleValue</h4>
+<pre>public abstract double doubleValue</pre>
+<div class="block">The default <code>double</code> value if this annotation is used on a method.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default value to use</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>0.0</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="floatValue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>floatValue</h4>
+<pre>public abstract float floatValue</pre>
+<div class="block">The default <code>float</code> value if this annotation is used on a method.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default value to use</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>0.0f</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="intValue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>intValue</h4>
+<pre>public abstract int intValue</pre>
+<div class="block">The default <code>int</code> value if this annotation is used on a method.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default value to use</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>0</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="longValue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>longValue</h4>
+<pre>public abstract long longValue</pre>
+<div class="block">The default <code>long</code> value if this annotation is used on a method.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default value to use</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>0L</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="shortValue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>shortValue</h4>
+<pre>public abstract short shortValue</pre>
+<div class="block">The default <code>short</code> value if this annotation is used on a method.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default value to use</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>0</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="stringValue--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>stringValue</h4>
+<pre>public abstract <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> stringValue</pre>
+<div class="block">The default <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> value if this annotation is used on a method.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the default value to use</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>""</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Property.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Properties.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Property.html" target="_top">Frames</a></li>
+<li><a href="Property.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/ResolutionDoc.html b/docs/apidocs/org/jboss/logging/annotations/ResolutionDoc.html
new file mode 100644
index 0000000..1a02206
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/ResolutionDoc.html
@@ -0,0 +1,350 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ResolutionDoc (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="ResolutionDoc (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/ResolutionDoc.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Property.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Signature.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/ResolutionDoc.html" target="_top">Frames</a></li>
+<li><a href="ResolutionDoc.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type ResolutionDoc" class="title">Annotation Type ResolutionDoc</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>={<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang. [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in jav [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">ResolutionDoc</span></pre>
+<div class="block">Allows a link to be created for messages on a report which contain a possible resolution to the issue reported . If
+ the method does not include an <a href="../../../../org/jboss/logging/annotations/Message.html#id--">id</a> no link will be created for the report unless a
+ <a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html#path--"><code>path()</code></a> is defined.
+
+ <p>
+ The rules for building the URL are as follows:
+ <ul>
+ <li><a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html#url--"><code>url</code></a>: If left empty and the type is annotated with a <a href="../../../../org/jboss/logging/annotations/BaseUrl.html" title="annotation in org.jboss.logging.annotations"><code>BaseUrl</code></a> the value for the
+ <code>@BaseUrl</code> will be used. If defined this will override the value of the <a href="../../../../org/jboss/logging/annotations/BaseUrl.html" title="annotation in org.jboss.logging.annotations"><code>BaseUrl</code></a>. If neither are
+ defined the rules for the <a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html#path--"><code>path()</code></a> will be followed.</li>
+ <li><a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html#path--"><code>path</code></a>: If defined this will be the path appended to the <a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html#url--"><code>url()</code></a> or the value of the
+ <a href="../../../../org/jboss/logging/annotations/BaseUrl.html" title="annotation in org.jboss.logging.annotations"><code>BaseUrl</code></a>. Note that neither <a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html#url--"><code>url()</code></a> nor <a href="../../../../org/jboss/logging/annotations/BaseUrl.html" title="annotation in org.jboss.logging.annotations"><code>BaseUrl</code></a> are required. If the value is left
+ undefined the id (project code plus the <a href="../../../../org/jboss/logging/annotations/Message.html#id--">message id</a>) will be used for the path.</li>
+ <li><a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html#suffix--"><code>suffix</code></a>: The suffix to append to the <a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html#path--"><code>path()</code></a>. This is mostly useful if the path
+ is left undefined and a suffix should be appended to the messages id. If left undefined and the <a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html#path--"><code>path()</code></a>
+ is not defined, the suffix will be determined based on the report type.</li>
+ </ul>
+ </p>
+
+ <p>
+ If placed on a type links will be created for all methods on the type.
+ </p>
+
+ <p>
+ Do note that the processor does not validate the resolution document exists. It simply attempts to create links to
+ the resolution document.
+ </p>
+ <p>
+ Expressions in the form of <code>${property.key:default-value}</code> can be used for the values with the exception of the
+ <a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html#skip--"><code>skip</code></a> attribute. If the property key is prefixed with <code>sys.</code> a
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/System.html?is-external=true#getProperty-java.lang.String-" title="class or interface in java.lang">system property</a> will be used. If the key is prefixed with <code>env.</code> an
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/System.html?is-external=true#getenv-java.lang.String-" title="class or interface in java.lang">environment variable</a> will be used. In all other cases the
+ <code>org.jboss.logging.tools.expressionProperties</code> processor argument is used to specify the path the properties
+ file which contains the values for the expressions.
+ </p></div>
+<dl>
+<dt><span class="simpleTagLabel">Since:</span></dt>
+<dd>1.2</dd>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:jperkins at redhat.com">James R. Perkins</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.optional.element.summary">
+<!--   -->
+</a>
+<h3>Optional Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Optional Element Summary table, listing optional elements, and an explanation">
+<caption><span>Optional Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Optional Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html#path--">path</a></span></code>
+<div class="block">The path to the resolution document.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html#skip--">skip</a></span></code>
+<div class="block">Allows the creation of a link to be skipped.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html#suffix--">suffix</a></span></code>
+<div class="block">The suffix to append to the path.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html#url--">url</a></span></code>
+<div class="block">The URL, fully qualified or relative, to use for the resolution document.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.element.detail">
+<!--   -->
+</a>
+<h3>Element Detail</h3>
+<a name="url--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>url</h4>
+<pre>public abstract <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> url</pre>
+<div class="block">The URL, fully qualified or relative, to use for the resolution document. If defined this will override the value
+ of the <a href="../../../../org/jboss/logging/annotations/BaseUrl.html" title="annotation in org.jboss.logging.annotations"><code>BaseUrl</code></a> if the annotation is used.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the URL or an empty string</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>""</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="path--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>path</h4>
+<pre>public abstract <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> path</pre>
+<div class="block">The path to the resolution document. If left undefined this will default to the message id.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the path to the resolution document</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>""</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="suffix--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>suffix</h4>
+<pre>public abstract <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> suffix</pre>
+<div class="block">The suffix to append to the path. If left undefined this will default to the extension for the report type. For
+ example if the report type is <code>xml</code> the default suffix would be <code>.xml</code>.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the suffix for the resolution document</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>""</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="skip--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>skip</h4>
+<pre>public abstract boolean skip</pre>
+<div class="block">Allows the creation of a link to be skipped.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd><code>true</code> if creating the link should be skipped</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>false</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/ResolutionDoc.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Property.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Signature.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/ResolutionDoc.html" target="_top">Frames</a></li>
+<li><a href="ResolutionDoc.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/Signature.html b/docs/apidocs/org/jboss/logging/annotations/Signature.html
new file mode 100644
index 0000000..3d8fadc
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/Signature.html
@@ -0,0 +1,338 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Signature (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Signature (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Signature.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Suppressed.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Signature.html" target="_top">Frames</a></li>
+<li><a href="Signature.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type Signature" class="title">Annotation Type Signature</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annot [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">Signature</span></pre>
+<div class="block">Specifies the exact signature to use when creating a <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><code>Throwable</code></a> return type.
+
+ <p>
+ Given the following exception and message bundle interface method the <code>InvalidIntValueException(final RuntimeException cause, final String msg, final int value)</code>
+ constructor would be used.
+
+ <code>
+ <pre>
+ public class InvalidIntValueException extends RuntimeException {
+     private final RuntimeException causeAsRuntime;
+     private final int value;
+     public InvalidIntValueException(final Throwable cause, final String msg, final int value) {
+         super(msg, cause);
+         causeAsRuntime = new RuntimeException(cause);
+         this.value = value;
+     }
+
+     public InvalidIntValueException(final RuntimeException cause, final String msg, final int value) {
+         super(msg, cause);
+         causeAsRuntime = cause;
+         this.value = value;
+     }
+     public InvalidIntValueException(final RuntimeException cause, final String msg, final Integer value) {
+         super(msg, cause);
+         causeAsRuntime = cause;
+         this.value = value;
+     }
+ }
+ </pre>
+ </code>
+
+ <code>
+ <pre>
+ @Message("Invalid value %d")
+ @Signature(causeIndex = 0, messageIndex = 1, value = {RuntimeException.class, String.class, int.class}
+ InvalidIntValueException invalidValue(@Cause RuntimeException cause, @Param int value);
+ </pre>
+ </code>
+ </p></div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:jperkins at redhat.com">James R. Perkins</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.required.element.summary">
+<!--   -->
+</a>
+<h3>Required Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Required Element Summary table, listing required elements, and an explanation">
+<caption><span>Required Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Required Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?>[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Signature.html#value--">value</a></span></code>
+<div class="block">An array of types matching the exact signature to use for the exception being created.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.optional.element.summary">
+<!--   -->
+</a>
+<h3>Optional Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Optional Element Summary table, listing optional elements, and an explanation">
+<caption><span>Optional Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Optional Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Signature.html#causeIndex--">causeIndex</a></span></code>
+<div class="block">The index for the <a href="../../../../org/jboss/logging/annotations/Cause.html" title="annotation in org.jboss.logging.annotations">cause</a> of the exception being created.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Signature.html#messageIndex--">messageIndex</a></span></code>
+<div class="block">The index for the message.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.element.detail">
+<!--   -->
+</a>
+<h3>Element Detail</h3>
+<a name="value--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>value</h4>
+<pre>public abstract <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?>[] value</pre>
+<div class="block">An array of types matching the exact signature to use for the exception being created.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>an array of types used to find the signature</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="causeIndex--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>causeIndex</h4>
+<pre>public abstract int causeIndex</pre>
+<div class="block">The index for the <a href="../../../../org/jboss/logging/annotations/Cause.html" title="annotation in org.jboss.logging.annotations">cause</a> of the exception being created. A value of less than zero assumes
+ there is no cause parameter in the constructor. A <a href="../../../../org/jboss/logging/annotations/Cause.html" title="annotation in org.jboss.logging.annotations"><code>Cause</code></a> annotation can still be used and the
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#initCause-java.lang.Throwable-" title="class or interface in java.lang"><code>Throwable.initCause(Throwable)</code></a> will be used to initialize the cause of the exception.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the index for the cause parameter</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>-1</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="messageIndex--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>messageIndex</h4>
+<pre>public abstract int messageIndex</pre>
+<div class="block">The index for the message. This is the formatted messaged from the <a href="../../../../org/jboss/logging/annotations/Message.html#value--"><code>Message.value()</code></a>. This is a required
+ value defaulting to 0 which would be the first parameter.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the index for the message parameter</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>0</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Signature.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Suppressed.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Signature.html" target="_top">Frames</a></li>
+<li><a href="Signature.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/Suppressed.html b/docs/apidocs/org/jboss/logging/annotations/Suppressed.html
new file mode 100644
index 0000000..af6e468
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/Suppressed.html
@@ -0,0 +1,179 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Suppressed (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Suppressed (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Suppressed.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Signature.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Transform.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Suppressed.html" target="_top">Frames</a></li>
+<li><a href="Suppressed.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li>Element</li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type Suppressed" class="title">Annotation Type Suppressed</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#PARAMETER" title="class or interface in java.lang.an [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">Suppressed</span></pre>
+<div class="block">Indicates the parameter should be added as a <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#addSuppressed-java.lang.Throwable-" title="class or interface in java.lang">suppressed</a> exception to
+ the returned exception.
+ <p>
+ The annotated parameter can be a single <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">throwable type</a>, an array of
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">throwable types</a> or a <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">collection</a> of
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">throwable types</a>. Note this is only allowed on message bundle methods that return a
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">throwable type</a>.
+ </p></div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:jperkins at redhat.com">James R. Perkins</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Suppressed.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Signature.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Transform.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Suppressed.html" target="_top">Frames</a></li>
+<li><a href="Suppressed.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li>Element</li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/Transform.TransformType.html b/docs/apidocs/org/jboss/logging/annotations/Transform.TransformType.html
new file mode 100644
index 0000000..daa2d2b
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/Transform.TransformType.html
@@ -0,0 +1,383 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Transform.TransformType (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Transform.TransformType (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":9,"i1":9};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Transform.TransformType.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Transform.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/ValidIdRange.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Transform.TransformType.html" target="_top">Frames</a></li>
+<li><a href="Transform.TransformType.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li><a href="#enum.constant.summary">Enum Constants</a> | </li>
+<li>Field | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#enum.constant.detail">Enum Constants</a> | </li>
+<li>Field | </li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Enum Transform.TransformType" class="title">Enum Transform.TransformType</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">java.lang.Enum</a><<a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a>></li>
+<li>
+<ul class="inheritance">
+<li>org.jboss.logging.annotations.Transform.TransformType</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><<a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a>></dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../org/jboss/logging/annotations/Transform.html" title="annotation in org.jboss.logging.annotations">Transform</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static enum <span class="typeNameLabel">Transform.TransformType</span>
+extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a><<a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a>></pre>
+<div class="block">The transform type</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ENUM CONSTANT SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum.constant.summary">
+<!--   -->
+</a>
+<h3>Enum Constant Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum Constant Summary table, listing enum constants, and an explanation">
+<caption><span>Enum Constants</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colOne" scope="col">Enum Constant and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html#GET_CLASS">GET_CLASS</a></span></code>
+<div class="block">Gets the class of the object object passed, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang"><code>Object.getClass()</code></a>.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html#HASH_CODE">HASH_CODE</a></span></code>
+<div class="block">Gets the hash code of the object, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang"><code>Object.hashCode()</code></a>.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html#IDENTITY_HASH_CODE">IDENTITY_HASH_CODE</a></span></code>
+<div class="block">Gets the identity hash code of the object, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/System.html?is-external=true#identityHashCode-java.lang.Object-" title="class or interface in java.lang"><code>System.identityHashCode(Object)</code></a>.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html#SIZE">SIZE</a></span></code>
+<div class="block">Gets the size or length of a <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><code>Collection</code></a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util" [...]
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>static <a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html#valueOf-java.lang.String-">valueOf</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</code>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a>[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html#values--">values</a></span>()</code>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Enum">
+<!--   -->
+</a>
+<h3>Methods inherited from class java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a></h3>
+<code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#compareTo-E-" title="class or interface in java.lang">compareTo</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#getDeclaringClass--" title="class or interface in java.lang">getDeclaringClass [...]
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.or [...]
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ENUM CONSTANT DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum.constant.detail">
+<!--   -->
+</a>
+<h3>Enum Constant Detail</h3>
+<a name="GET_CLASS">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>GET_CLASS</h4>
+<pre>public static final <a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a> GET_CLASS</pre>
+<div class="block">Gets the class of the object object passed, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang"><code>Object.getClass()</code></a>.</div>
+</li>
+</ul>
+<a name="HASH_CODE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>HASH_CODE</h4>
+<pre>public static final <a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a> HASH_CODE</pre>
+<div class="block">Gets the hash code of the object, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang"><code>Object.hashCode()</code></a>.</div>
+</li>
+</ul>
+<a name="IDENTITY_HASH_CODE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>IDENTITY_HASH_CODE</h4>
+<pre>public static final <a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a> IDENTITY_HASH_CODE</pre>
+<div class="block">Gets the identity hash code of the object, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/System.html?is-external=true#identityHashCode-java.lang.Object-" title="class or interface in java.lang"><code>System.identityHashCode(Object)</code></a>.</div>
+</li>
+</ul>
+<a name="SIZE">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>SIZE</h4>
+<pre>public static final <a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a> SIZE</pre>
+<div class="block">Gets the size or length of a <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><code>Collection</code></a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util" [...]
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="values--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>values</h4>
+<pre>public static <a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a>[] values()</pre>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.  This method may be used to iterate
+over the constants as follows:
+<pre>
+for (Transform.TransformType c : Transform.TransformType.values())
+    System.out.println(c);
+</pre></div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>an array containing the constants of this enum type, in the order they are declared</dd>
+</dl>
+</li>
+</ul>
+<a name="valueOf-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>valueOf</h4>
+<pre>public static <a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a> valueOf(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</pre>
+<div class="block">Returns the enum constant of this type with the specified name.
+The string must match <i>exactly</i> an identifier used to declare an
+enum constant in this type.  (Extraneous whitespace characters are 
+not permitted.)</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>name</code> - the name of the enum constant to be returned.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the enum constant with the specified name</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if this enum type has no constant with the specified name</dd>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</a></code> - if the argument is null</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Transform.TransformType.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Transform.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/ValidIdRange.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Transform.TransformType.html" target="_top">Frames</a></li>
+<li><a href="Transform.TransformType.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li><a href="#enum.constant.summary">Enum Constants</a> | </li>
+<li>Field | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#enum.constant.detail">Enum Constants</a> | </li>
+<li>Field | </li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/Transform.html b/docs/apidocs/org/jboss/logging/annotations/Transform.html
new file mode 100644
index 0000000..da3eb05
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/Transform.html
@@ -0,0 +1,245 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Transform (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Transform (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Transform.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Suppressed.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Transform.html" target="_top">Frames</a></li>
+<li><a href="Transform.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type Transform" class="title">Annotation Type Transform</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#PARAMETER" title="class or interface in java.lang.an [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">Transform</span></pre>
+<div class="block">Indicate the given parameter should be transformed in each of the <a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations"><code>transform types</code></a>
+ provided. The parameter cannot be a primitive type.
+ <p/>
+ For the <a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html#SIZE"><code>Transform.TransformType.SIZE</code></a> type, the object must be a <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a>, a <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><code>Collection</code></a>, a
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><code>Map</code></a> or an array.
+ <p/>
+ The type <a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html#GET_CLASS"><code>Transform.TransformType.GET_CLASS</code></a> can be used with <a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html#HASH_CODE"><code>Transform.TransformType.HASH_CODE</code></a> or <a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html#IDENTITY_HASH_CODE"><code>Transform.TransformType.IDENTITY_HASH_CODE</code></a>. The type <a href= [...]
+<dl>
+<dt><span class="simpleTagLabel">Since:</span></dt>
+<dd>1.1.0</dd>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:jperkins at redhat.com">James R. Perkins</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.required.element.summary">
+<!--   -->
+</a>
+<h3>Required Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Required Element Summary table, listing required elements, and an explanation">
+<caption><span>Required Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Required Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a>[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/Transform.html#value--">value</a></span></code>
+<div class="block">The transform types used on the parameter.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.element.detail">
+<!--   -->
+</a>
+<h3>Element Detail</h3>
+<a name="value--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>value</h4>
+<pre>public abstract <a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a>[] value</pre>
+<div class="block">The transform types used on the parameter.
+ <p/>
+ Valid combinations:
+ <ul>
+ <li><a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html#GET_CLASS"><code>Transform.TransformType.GET_CLASS</code></a></li>
+ <li><a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html#GET_CLASS"><code>Transform.TransformType.GET_CLASS</code></a>, <a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html#HASH_CODE"><code>Transform.TransformType.HASH_CODE</code></a></li>
+ <li><a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html#GET_CLASS"><code>Transform.TransformType.GET_CLASS</code></a>, <a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html#IDENTITY_HASH_CODE"><code>Transform.TransformType.IDENTITY_HASH_CODE</code></a></li>
+ <li><a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html#HASH_CODE"><code>Transform.TransformType.HASH_CODE</code></a></li>
+ <li><a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html#IDENTITY_HASH_CODE"><code>Transform.TransformType.IDENTITY_HASH_CODE</code></a></li>
+ <li><a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html#SIZE"><code>Transform.TransformType.SIZE</code></a></li>
+ </ul></div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>an array of the transform types</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Transform.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Suppressed.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/Transform.html" target="_top">Frames</a></li>
+<li><a href="Transform.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/ValidIdRange.html b/docs/apidocs/org/jboss/logging/annotations/ValidIdRange.html
new file mode 100644
index 0000000..c4f5f7b
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/ValidIdRange.html
@@ -0,0 +1,274 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ValidIdRange (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="ValidIdRange (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/ValidIdRange.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/ValidIdRanges.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/ValidIdRange.html" target="_top">Frames</a></li>
+<li><a href="ValidIdRange.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type ValidIdRange" class="title">Annotation Type ValidIdRange</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#TYPE" title="class or interface in java.lang.ann [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in jav [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">ValidIdRange</span></pre>
+<div class="block">Sets a range of valid id's allowed on the <a href="../../../../org/jboss/logging/annotations/Message.html#id--"><code>message id</code></a>. Both <a href="../../../../org/jboss/logging/annotations/Message.html#INHERIT"><code>Message.INHERIT</code></a> and <a href="../../../../org/jboss/logging/annotations/Message.html#NONE"><code>Message.NONE</code></a> are ignored when validating.
+ <p/>
+ <b>Note:</b> Message id's from inherited interfaces are not validated within the range provided. Super interfaces
+ would need their own annotation for range validation.
+ <p/>
+ <code>
+ <pre>
+          @MessageLogger(projectCode = "EXAMPLE")
+          @ValidIdRange(min = 100, max = 200)
+          public interface ExampleLogger {
+
+              @LogMessage
+              @Message(id = 100, value = "Example message")
+              void example();
+          }
+ </pre>
+ </code></div>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:jperkins at redhat.com">James R. Perkins</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.optional.element.summary">
+<!--   -->
+</a>
+<h3>Optional Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Optional Element Summary table, listing optional elements, and an explanation">
+<caption><span>Optional Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Optional Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/ValidIdRange.html#max--">max</a></span></code>
+<div class="block">The maximum id allowed in the <a href="../../../../org/jboss/logging/annotations/Message.html#id--"><code>message id</code></a>.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/ValidIdRange.html#min--">min</a></span></code>
+<div class="block">The minimum id allowed in the <a href="../../../../org/jboss/logging/annotations/Message.html#id--"><code>message id</code></a>.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.element.detail">
+<!--   -->
+</a>
+<h3>Element Detail</h3>
+<a name="min--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>min</h4>
+<pre>public abstract int min</pre>
+<div class="block">The minimum id allowed in the <a href="../../../../org/jboss/logging/annotations/Message.html#id--"><code>message id</code></a>. Both <a href="../../../../org/jboss/logging/annotations/Message.html#INHERIT"><code>Message.INHERIT</code></a> and <a href="../../../../org/jboss/logging/annotations/Message.html#NONE"><code>Message.NONE</code></a> are ignored when validating.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the minimum id allowed</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>1</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="max--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>max</h4>
+<pre>public abstract int max</pre>
+<div class="block">The maximum id allowed in the <a href="../../../../org/jboss/logging/annotations/Message.html#id--"><code>message id</code></a>. Both <a href="../../../../org/jboss/logging/annotations/Message.html#INHERIT"><code>Message.INHERIT</code></a> and <a href="../../../../org/jboss/logging/annotations/Message.html#NONE"><code>Message.NONE</code></a> are ignored when validating.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the maximum id allowed</dd>
+</dl>
+<dl>
+<dt>Default:</dt>
+<dd>999999</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/ValidIdRange.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../org/jboss/logging/annotations/ValidIdRanges.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/ValidIdRange.html" target="_top">Frames</a></li>
+<li><a href="ValidIdRange.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li>Required | </li>
+<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/ValidIdRanges.html b/docs/apidocs/org/jboss/logging/annotations/ValidIdRanges.html
new file mode 100644
index 0000000..7ab9c41
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/ValidIdRanges.html
@@ -0,0 +1,226 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ValidIdRanges (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="ValidIdRanges (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/ValidIdRanges.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/ValidIdRange.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li>Next Class</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/ValidIdRanges.html" target="_top">Frames</a></li>
+<li><a href="ValidIdRanges.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.jboss.logging.annotations</div>
+<h2 title="Annotation Type ValidIdRanges" class="title">Annotation Type ValidIdRanges</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#TYPE" title="class or interface in java.lang.ann [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in jav [...]
+ <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+public @interface <span class="memberNameLabel">ValidIdRanges</span></pre>
+<dl>
+<dt><span class="simpleTagLabel">Author:</span></dt>
+<dd><a href="mailto:jperkins at redhat.com">James R. Perkins</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.required.element.summary">
+<!--   -->
+</a>
+<h3>Required Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Required Element Summary table, listing required elements, and an explanation">
+<caption><span>Required Elements</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Required Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../org/jboss/logging/annotations/ValidIdRange.html" title="annotation in org.jboss.logging.annotations">ValidIdRange</a>[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/jboss/logging/annotations/ValidIdRanges.html#value--">value</a></span></code>
+<div class="block">An array of valid id ranges.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.element.detail">
+<!--   -->
+</a>
+<h3>Element Detail</h3>
+<a name="value--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>value</h4>
+<pre>public abstract <a href="../../../../org/jboss/logging/annotations/ValidIdRange.html" title="annotation in org.jboss.logging.annotations">ValidIdRange</a>[] value</pre>
+<div class="block">An array of valid id ranges.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>an array of valid id ranges</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/ValidIdRanges.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/jboss/logging/annotations/ValidIdRange.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Prev Class</span></a></li>
+<li>Next Class</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/ValidIdRanges.html" target="_top">Frames</a></li>
+<li><a href="ValidIdRanges.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.required.element.summary">Required</a> | </li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/BaseUrl.html b/docs/apidocs/org/jboss/logging/annotations/class-use/BaseUrl.html
new file mode 100644
index 0000000..e85497d
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/BaseUrl.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.BaseUrl (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.BaseUrl (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/BaseUrl.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/BaseUrl.html" target="_top">Frames</a></li>
+<li><a href="BaseUrl.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.BaseUrl" class="title">Uses of Class<br>org.jboss.logging.annotations.BaseUrl</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.BaseUrl</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/BaseUrl.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/BaseUrl.html" target="_top">Frames</a></li>
+<li><a href="BaseUrl.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/Cause.html b/docs/apidocs/org/jboss/logging/annotations/class-use/Cause.html
new file mode 100644
index 0000000..f204ef2
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/Cause.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.Cause (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.Cause (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Cause.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Cause.html" target="_top">Frames</a></li>
+<li><a href="Cause.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.Cause" class="title">Uses of Class<br>org.jboss.logging.annotations.Cause</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.Cause</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Cause.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Cause.html" target="_top">Frames</a></li>
+<li><a href="Cause.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/ConstructType.html b/docs/apidocs/org/jboss/logging/annotations/class-use/ConstructType.html
new file mode 100644
index 0000000..c436689
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/ConstructType.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.ConstructType (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.ConstructType (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/ConstructType.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/ConstructType.html" target="_top">Frames</a></li>
+<li><a href="ConstructType.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.ConstructType" class="title">Uses of Class<br>org.jboss.logging.annotations.ConstructType</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.ConstructType</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/ConstructType.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/ConstructType.html" target="_top">Frames</a></li>
+<li><a href="ConstructType.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/Field.html b/docs/apidocs/org/jboss/logging/annotations/class-use/Field.html
new file mode 100644
index 0000000..744d48f
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/Field.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.Field (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.Field (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Field.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Field.html" target="_top">Frames</a></li>
+<li><a href="Field.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.Field" class="title">Uses of Class<br>org.jboss.logging.annotations.Field</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.Field</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Field.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Field.html" target="_top">Frames</a></li>
+<li><a href="Field.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/Fields.html b/docs/apidocs/org/jboss/logging/annotations/class-use/Fields.html
new file mode 100644
index 0000000..92ad8df
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/Fields.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.Fields (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.Fields (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Fields.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Fields.html" target="_top">Frames</a></li>
+<li><a href="Fields.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.Fields" class="title">Uses of Class<br>org.jboss.logging.annotations.Fields</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.Fields</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Fields.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Fields.html" target="_top">Frames</a></li>
+<li><a href="Fields.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/FormatWith.html b/docs/apidocs/org/jboss/logging/annotations/class-use/FormatWith.html
new file mode 100644
index 0000000..0f624bc
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/FormatWith.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.FormatWith (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.FormatWith (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/FormatWith.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/FormatWith.html" target="_top">Frames</a></li>
+<li><a href="FormatWith.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.FormatWith" class="title">Uses of Class<br>org.jboss.logging.annotations.FormatWith</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.FormatWith</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/FormatWith.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/FormatWith.html" target="_top">Frames</a></li>
+<li><a href="FormatWith.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/LogMessage.html b/docs/apidocs/org/jboss/logging/annotations/class-use/LogMessage.html
new file mode 100644
index 0000000..7d380a9
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/LogMessage.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.LogMessage (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.LogMessage (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/LogMessage.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/LogMessage.html" target="_top">Frames</a></li>
+<li><a href="LogMessage.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.LogMessage" class="title">Uses of Class<br>org.jboss.logging.annotations.LogMessage</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.LogMessage</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/LogMessage.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/LogMessage.html" target="_top">Frames</a></li>
+<li><a href="LogMessage.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/LoggingClass.html b/docs/apidocs/org/jboss/logging/annotations/class-use/LoggingClass.html
new file mode 100644
index 0000000..7ba0d5f
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/LoggingClass.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.LoggingClass (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.LoggingClass (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/LoggingClass.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/LoggingClass.html" target="_top">Frames</a></li>
+<li><a href="LoggingClass.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.LoggingClass" class="title">Uses of Class<br>org.jboss.logging.annotations.LoggingClass</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.LoggingClass</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/LoggingClass.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/LoggingClass.html" target="_top">Frames</a></li>
+<li><a href="LoggingClass.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/Message.Format.html b/docs/apidocs/org/jboss/logging/annotations/class-use/Message.Format.html
new file mode 100644
index 0000000..eca62f4
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/Message.Format.html
@@ -0,0 +1,159 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.Message.Format (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.Message.Format (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Message.Format.html" target="_top">Frames</a></li>
+<li><a href="Message.Format.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.Message.Format" class="title">Uses of Class<br>org.jboss.logging.annotations.Message.Format</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.jboss.logging.annotations">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Message.Format</a> in <a href="../../../../../org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a> that return <a href="../../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Message.Format</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Message.Format</a></code></td>
+<td class="colLast"><span class="typeNameLabel">Message.Format.</span><code><span class="memberNameLink"><a href="../../../../../org/jboss/logging/annotations/Message.Format.html#valueOf-java.lang.String-">valueOf</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</code>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Message.Format</a>[]</code></td>
+<td class="colLast"><span class="typeNameLabel">Message.Format.</span><code><span class="memberNameLink"><a href="../../../../../org/jboss/logging/annotations/Message.Format.html#values--">values</a></span>()</code>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Message.Format.html" target="_top">Frames</a></li>
+<li><a href="Message.Format.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/Message.html b/docs/apidocs/org/jboss/logging/annotations/class-use/Message.html
new file mode 100644
index 0000000..9e5083b
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/Message.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.Message (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.Message (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Message.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Message.html" target="_top">Frames</a></li>
+<li><a href="Message.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.Message" class="title">Uses of Class<br>org.jboss.logging.annotations.Message</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.Message</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Message.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Message.html" target="_top">Frames</a></li>
+<li><a href="Message.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/MessageBundle.html b/docs/apidocs/org/jboss/logging/annotations/class-use/MessageBundle.html
new file mode 100644
index 0000000..f9f985b
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/MessageBundle.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.MessageBundle (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.MessageBundle (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/MessageBundle.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/MessageBundle.html" target="_top">Frames</a></li>
+<li><a href="MessageBundle.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.MessageBundle" class="title">Uses of Class<br>org.jboss.logging.annotations.MessageBundle</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.MessageBundle</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/MessageBundle.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/MessageBundle.html" target="_top">Frames</a></li>
+<li><a href="MessageBundle.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/MessageLogger.html b/docs/apidocs/org/jboss/logging/annotations/class-use/MessageLogger.html
new file mode 100644
index 0000000..3393ea8
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/MessageLogger.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.MessageLogger (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.MessageLogger (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/MessageLogger.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/MessageLogger.html" target="_top">Frames</a></li>
+<li><a href="MessageLogger.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.MessageLogger" class="title">Uses of Class<br>org.jboss.logging.annotations.MessageLogger</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.MessageLogger</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/MessageLogger.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/MessageLogger.html" target="_top">Frames</a></li>
+<li><a href="MessageLogger.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/Once.html b/docs/apidocs/org/jboss/logging/annotations/class-use/Once.html
new file mode 100644
index 0000000..b8bc5bc
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/Once.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.Once (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.Once (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Once.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Once.html" target="_top">Frames</a></li>
+<li><a href="Once.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.Once" class="title">Uses of Class<br>org.jboss.logging.annotations.Once</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.Once</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Once.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Once.html" target="_top">Frames</a></li>
+<li><a href="Once.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/Param.html b/docs/apidocs/org/jboss/logging/annotations/class-use/Param.html
new file mode 100644
index 0000000..2c1b32d
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/Param.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.Param (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.Param (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Param.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Param.html" target="_top">Frames</a></li>
+<li><a href="Param.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.Param" class="title">Uses of Class<br>org.jboss.logging.annotations.Param</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.Param</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Param.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Param.html" target="_top">Frames</a></li>
+<li><a href="Param.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/Pos.html b/docs/apidocs/org/jboss/logging/annotations/class-use/Pos.html
new file mode 100644
index 0000000..804fab6
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/Pos.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.Pos (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.Pos (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Pos.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Pos.html" target="_top">Frames</a></li>
+<li><a href="Pos.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.Pos" class="title">Uses of Class<br>org.jboss.logging.annotations.Pos</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.Pos</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Pos.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Pos.html" target="_top">Frames</a></li>
+<li><a href="Pos.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/Producer.html b/docs/apidocs/org/jboss/logging/annotations/class-use/Producer.html
new file mode 100644
index 0000000..fca78b4
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/Producer.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.Producer (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.Producer (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Producer.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Producer.html" target="_top">Frames</a></li>
+<li><a href="Producer.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.Producer" class="title">Uses of Class<br>org.jboss.logging.annotations.Producer</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.Producer</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Producer.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Producer.html" target="_top">Frames</a></li>
+<li><a href="Producer.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/Properties.html b/docs/apidocs/org/jboss/logging/annotations/class-use/Properties.html
new file mode 100644
index 0000000..d1f3568
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/Properties.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.Properties (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.Properties (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Properties.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Properties.html" target="_top">Frames</a></li>
+<li><a href="Properties.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.Properties" class="title">Uses of Class<br>org.jboss.logging.annotations.Properties</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.Properties</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Properties.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Properties.html" target="_top">Frames</a></li>
+<li><a href="Properties.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/Property.html b/docs/apidocs/org/jboss/logging/annotations/class-use/Property.html
new file mode 100644
index 0000000..d5ce4d7
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/Property.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.Property (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.Property (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Property.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Property.html" target="_top">Frames</a></li>
+<li><a href="Property.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.Property" class="title">Uses of Class<br>org.jboss.logging.annotations.Property</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.Property</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Property.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Property.html" target="_top">Frames</a></li>
+<li><a href="Property.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/ResolutionDoc.html b/docs/apidocs/org/jboss/logging/annotations/class-use/ResolutionDoc.html
new file mode 100644
index 0000000..8efdc02
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/ResolutionDoc.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.ResolutionDoc (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.ResolutionDoc (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/ResolutionDoc.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/ResolutionDoc.html" target="_top">Frames</a></li>
+<li><a href="ResolutionDoc.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.ResolutionDoc" class="title">Uses of Class<br>org.jboss.logging.annotations.ResolutionDoc</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.ResolutionDoc</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/ResolutionDoc.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/ResolutionDoc.html" target="_top">Frames</a></li>
+<li><a href="ResolutionDoc.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/Signature.html b/docs/apidocs/org/jboss/logging/annotations/class-use/Signature.html
new file mode 100644
index 0000000..9e8b4b8
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/Signature.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.Signature (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.Signature (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Signature.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Signature.html" target="_top">Frames</a></li>
+<li><a href="Signature.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.Signature" class="title">Uses of Class<br>org.jboss.logging.annotations.Signature</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.Signature</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Signature.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Signature.html" target="_top">Frames</a></li>
+<li><a href="Signature.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/Suppressed.html b/docs/apidocs/org/jboss/logging/annotations/class-use/Suppressed.html
new file mode 100644
index 0000000..0ec426a
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/Suppressed.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.Suppressed (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.Suppressed (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Suppressed.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Suppressed.html" target="_top">Frames</a></li>
+<li><a href="Suppressed.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.Suppressed" class="title">Uses of Class<br>org.jboss.logging.annotations.Suppressed</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.Suppressed</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Suppressed.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Suppressed.html" target="_top">Frames</a></li>
+<li><a href="Suppressed.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/Transform.TransformType.html b/docs/apidocs/org/jboss/logging/annotations/class-use/Transform.TransformType.html
new file mode 100644
index 0000000..fdfbc26
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/Transform.TransformType.html
@@ -0,0 +1,159 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.Transform.TransformType (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.Transform.TransformType (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Transform.TransformType.html" target="_top">Frames</a></li>
+<li><a href="Transform.TransformType.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.Transform.TransformType" class="title">Uses of Class<br>org.jboss.logging.annotations.Transform.TransformType</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.jboss.logging.annotations">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a> in <a href="../../../../../org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a> that return <a href="../../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a></code></td>
+<td class="colLast"><span class="typeNameLabel">Transform.TransformType.</span><code><span class="memberNameLink"><a href="../../../../../org/jboss/logging/annotations/Transform.TransformType.html#valueOf-java.lang.String-">valueOf</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</code>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a>[]</code></td>
+<td class="colLast"><span class="typeNameLabel">Transform.TransformType.</span><code><span class="memberNameLink"><a href="../../../../../org/jboss/logging/annotations/Transform.TransformType.html#values--">values</a></span>()</code>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Transform.TransformType.html" target="_top">Frames</a></li>
+<li><a href="Transform.TransformType.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/Transform.html b/docs/apidocs/org/jboss/logging/annotations/class-use/Transform.html
new file mode 100644
index 0000000..4f6f0c1
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/Transform.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.Transform (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.Transform (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Transform.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Transform.html" target="_top">Frames</a></li>
+<li><a href="Transform.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.Transform" class="title">Uses of Class<br>org.jboss.logging.annotations.Transform</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.Transform</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/Transform.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/Transform.html" target="_top">Frames</a></li>
+<li><a href="Transform.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/ValidIdRange.html b/docs/apidocs/org/jboss/logging/annotations/class-use/ValidIdRange.html
new file mode 100644
index 0000000..96b2d84
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/ValidIdRange.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.ValidIdRange (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.ValidIdRange (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/ValidIdRange.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/ValidIdRange.html" target="_top">Frames</a></li>
+<li><a href="ValidIdRange.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.ValidIdRange" class="title">Uses of Class<br>org.jboss.logging.annotations.ValidIdRange</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.ValidIdRange</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/ValidIdRange.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/ValidIdRange.html" target="_top">Frames</a></li>
+<li><a href="ValidIdRange.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/class-use/ValidIdRanges.html b/docs/apidocs/org/jboss/logging/annotations/class-use/ValidIdRanges.html
new file mode 100644
index 0000000..5833734
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/class-use/ValidIdRanges.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.jboss.logging.annotations.ValidIdRanges (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.jboss.logging.annotations.ValidIdRanges (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/ValidIdRanges.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/ValidIdRanges.html" target="_top">Frames</a></li>
+<li><a href="ValidIdRanges.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.jboss.logging.annotations.ValidIdRanges" class="title">Uses of Class<br>org.jboss.logging.annotations.ValidIdRanges</h2>
+</div>
+<div class="classUseContainer">No usage of org.jboss.logging.annotations.ValidIdRanges</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li><a href="../../../../../org/jboss/logging/annotations/ValidIdRanges.html" title="annotation in org.jboss.logging.annotations">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/jboss/logging/annotations/class-use/ValidIdRanges.html" target="_top">Frames</a></li>
+<li><a href="ValidIdRanges.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/package-frame.html b/docs/apidocs/org/jboss/logging/annotations/package-frame.html
new file mode 100644
index 0000000..f119b7f
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/package-frame.html
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>org.jboss.logging.annotations (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<h1 class="bar"><a href="../../../../org/jboss/logging/annotations/package-summary.html" target="classFrame">org.jboss.logging.annotations</a></h1>
+<div class="indexContainer">
+<h2 title="Enums">Enums</h2>
+<ul title="Enums">
+<li><a href="Message.Format.html" title="enum in org.jboss.logging.annotations" target="classFrame">Message.Format</a></li>
+<li><a href="Transform.TransformType.html" title="enum in org.jboss.logging.annotations" target="classFrame">Transform.TransformType</a></li>
+</ul>
+<h2 title="Annotation Types">Annotation Types</h2>
+<ul title="Annotation Types">
+<li><a href="BaseUrl.html" title="annotation in org.jboss.logging.annotations" target="classFrame">BaseUrl</a></li>
+<li><a href="Cause.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Cause</a></li>
+<li><a href="ConstructType.html" title="annotation in org.jboss.logging.annotations" target="classFrame">ConstructType</a></li>
+<li><a href="Field.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Field</a></li>
+<li><a href="Fields.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Fields</a></li>
+<li><a href="FormatWith.html" title="annotation in org.jboss.logging.annotations" target="classFrame">FormatWith</a></li>
+<li><a href="LoggingClass.html" title="annotation in org.jboss.logging.annotations" target="classFrame">LoggingClass</a></li>
+<li><a href="LogMessage.html" title="annotation in org.jboss.logging.annotations" target="classFrame">LogMessage</a></li>
+<li><a href="Message.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Message</a></li>
+<li><a href="MessageBundle.html" title="annotation in org.jboss.logging.annotations" target="classFrame">MessageBundle</a></li>
+<li><a href="MessageLogger.html" title="annotation in org.jboss.logging.annotations" target="classFrame">MessageLogger</a></li>
+<li><a href="Once.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Once</a></li>
+<li><a href="Param.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Param</a></li>
+<li><a href="Pos.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Pos</a></li>
+<li><a href="Producer.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Producer</a></li>
+<li><a href="Properties.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Properties</a></li>
+<li><a href="Property.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Property</a></li>
+<li><a href="ResolutionDoc.html" title="annotation in org.jboss.logging.annotations" target="classFrame">ResolutionDoc</a></li>
+<li><a href="Signature.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Signature</a></li>
+<li><a href="Suppressed.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Suppressed</a></li>
+<li><a href="Transform.html" title="annotation in org.jboss.logging.annotations" target="classFrame">Transform</a></li>
+<li><a href="ValidIdRange.html" title="annotation in org.jboss.logging.annotations" target="classFrame">ValidIdRange</a></li>
+<li><a href="ValidIdRanges.html" title="annotation in org.jboss.logging.annotations" target="classFrame">ValidIdRanges</a></li>
+</ul>
+</div>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/package-summary.html b/docs/apidocs/org/jboss/logging/annotations/package-summary.html
new file mode 100644
index 0000000..46e7951
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/package-summary.html
@@ -0,0 +1,299 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>org.jboss.logging.annotations (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="org.jboss.logging.annotations (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li>Class</li>
+<li><a href="package-use.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev Package</li>
+<li>Next Package</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/package-summary.html" target="_top">Frames</a></li>
+<li><a href="package-summary.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 title="Package" class="title">Package org.jboss.logging.annotations</h1>
+</div>
+<div class="contentContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum Summary table, listing enums, and an explanation">
+<caption><span>Enum Summary</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Enum</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations">Message.Format</a></td>
+<td class="colLast">
+<div class="block">The possible format types.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations">Transform.TransformType</a></td>
+<td class="colLast">
+<div class="block">The transform type</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Annotation Types Summary table, listing annotation types, and an explanation">
+<caption><span>Annotation Types Summary</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Annotation Type</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/BaseUrl.html" title="annotation in org.jboss.logging.annotations">BaseUrl</a></td>
+<td class="colLast">
+<div class="block">Messages on reports can have a link to a <a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html" title="annotation in org.jboss.logging.annotations">resolution document</a>.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/Cause.html" title="annotation in org.jboss.logging.annotations">Cause</a></td>
+<td class="colLast">
+<div class="block">Mark a parameter as being the "exception cause" parameter rather than a positional format parameter.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/ConstructType.html" title="annotation in org.jboss.logging.annotations">ConstructType</a></td>
+<td class="colLast">
+<div class="block">Indicates the value of this annotation should be constructed and returned.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/Field.html" title="annotation in org.jboss.logging.annotations">Field</a></td>
+<td class="colLast">
+<div class="block">Indicate that a method parameter value should be applied to a field on the resultant exception object.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/Fields.html" title="annotation in org.jboss.logging.annotations">Fields</a></td>
+<td class="colLast">
+<div class="block">Defines the default field properties to use on the resultant exception object.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/FormatWith.html" title="annotation in org.jboss.logging.annotations">FormatWith</a></td>
+<td class="colLast">
+<div class="block">Indicate that the given parameter should be wrapped with a formatting object of the given class.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/LoggingClass.html" title="annotation in org.jboss.logging.annotations">LoggingClass</a></td>
+<td class="colLast">
+<div class="block">Mark a parameter as specifying the name of the logging class to use.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/LogMessage.html" title="annotation in org.jboss.logging.annotations">LogMessage</a></td>
+<td class="colLast">
+<div class="block">A typed logger method.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/Message.html" title="annotation in org.jboss.logging.annotations">Message</a></td>
+<td class="colLast">
+<div class="block">Assigns a message string to a resource method.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/MessageBundle.html" title="annotation in org.jboss.logging.annotations">MessageBundle</a></td>
+<td class="colLast">
+<div class="block">Signify that an interface is a message bundle interface.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/MessageLogger.html" title="annotation in org.jboss.logging.annotations">MessageLogger</a></td>
+<td class="colLast">
+<div class="block">Signify that an interface is a typed logger interface.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/Once.html" title="annotation in org.jboss.logging.annotations">Once</a></td>
+<td class="colLast">
+<div class="block">Indicates a message should only be logged once.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/Param.html" title="annotation in org.jboss.logging.annotations">Param</a></td>
+<td class="colLast">
+<div class="block">Identifies a parameter is to be used for constructing an exception and excluded from the formatting of the message.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/Pos.html" title="annotation in org.jboss.logging.annotations">Pos</a></td>
+<td class="colLast"> </td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/Producer.html" title="annotation in org.jboss.logging.annotations">Producer</a></td>
+<td class="colLast">
+<div class="block">Identifies a parameter has the ability to produce a <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><code>Throwable</code></a> or a super type of a <code>Throwable</code>.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/Properties.html" title="annotation in org.jboss.logging.annotations">Properties</a></td>
+<td class="colLast">
+<div class="block">Defines the default properties to use on the resultant exception object.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/Property.html" title="annotation in org.jboss.logging.annotations">Property</a></td>
+<td class="colLast">
+<div class="block">Indicate that a method parameter value should be applied to a property (with a setter method) on the resultant
+ exception object.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html" title="annotation in org.jboss.logging.annotations">ResolutionDoc</a></td>
+<td class="colLast">
+<div class="block">Allows a link to be created for messages on a report which contain a possible resolution to the issue reported .</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/Signature.html" title="annotation in org.jboss.logging.annotations">Signature</a></td>
+<td class="colLast">
+<div class="block">Specifies the exact signature to use when creating a <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><code>Throwable</code></a> return type.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/Suppressed.html" title="annotation in org.jboss.logging.annotations">Suppressed</a></td>
+<td class="colLast">
+<div class="block">Indicates the parameter should be added as a <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#addSuppressed-java.lang.Throwable-" title="class or interface in java.lang">suppressed</a> exception to
+ the returned exception.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/Transform.html" title="annotation in org.jboss.logging.annotations">Transform</a></td>
+<td class="colLast">
+<div class="block">Indicate the given parameter should be transformed in each of the <a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations"><code>transform types</code></a>
+ provided.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/ValidIdRange.html" title="annotation in org.jboss.logging.annotations">ValidIdRange</a></td>
+<td class="colLast">
+<div class="block">Sets a range of valid id's allowed on the <a href="../../../../org/jboss/logging/annotations/Message.html#id--"><code>message id</code></a>.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../org/jboss/logging/annotations/ValidIdRanges.html" title="annotation in org.jboss.logging.annotations">ValidIdRanges</a></td>
+<td class="colLast"> </td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li>Class</li>
+<li><a href="package-use.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev Package</li>
+<li>Next Package</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/package-summary.html" target="_top">Frames</a></li>
+<li><a href="package-summary.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/package-tree.html b/docs/apidocs/org/jboss/logging/annotations/package-tree.html
new file mode 100644
index 0000000..2ff0ee5
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/package-tree.html
@@ -0,0 +1,165 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>org.jboss.logging.annotations Class Hierarchy (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="org.jboss.logging.annotations Class Hierarchy (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li>Class</li>
+<li>Use</li>
+<li class="navBarCell1Rev">Tree</li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/package-tree.html" target="_top">Frames</a></li>
+<li><a href="package-tree.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 class="title">Hierarchy For Package org.jboss.logging.annotations</h1>
+</div>
+<div class="contentContainer">
+<h2 title="Annotation Type Hierarchy">Annotation Type Hierarchy</h2>
+<ul>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/ValidIdRanges.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">ValidIdRanges</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/ValidIdRange.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">ValidIdRange</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/Transform.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Transform</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/Suppressed.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Suppressed</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/Signature.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Signature</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/ResolutionDoc.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">ResolutionDoc</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/Property.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Property</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/Properties.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Properties</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/Producer.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Producer</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/Pos.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Pos</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/Param.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Param</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/Once.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Once</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/MessageLogger.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">MessageLogger</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/MessageBundle.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">MessageBundle</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/Message.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Message</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/LoggingClass.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">LoggingClass</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/LogMessage.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">LogMessage</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/FormatWith.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">FormatWith</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/Fields.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Fields</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/Field.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Field</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/ConstructType.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">ConstructType</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/Cause.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Cause</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/BaseUrl.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">BaseUrl</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+</ul>
+<h2 title="Enum Hierarchy">Enum Hierarchy</h2>
+<ul>
+<li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Object</span></a>
+<ul>
+<li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" t [...]
+<ul>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations"><span class="typeNameLink">Transform.TransformType</span></a></li>
+<li type="circle">org.jboss.logging.annotations.<a href="../../../../org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations"><span class="typeNameLink">Message.Format</span></a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li>Class</li>
+<li>Use</li>
+<li class="navBarCell1Rev">Tree</li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/package-tree.html" target="_top">Frames</a></li>
+<li><a href="package-tree.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/org/jboss/logging/annotations/package-use.html b/docs/apidocs/org/jboss/logging/annotations/package-use.html
new file mode 100644
index 0000000..d247c6f
--- /dev/null
+++ b/docs/apidocs/org/jboss/logging/annotations/package-use.html
@@ -0,0 +1,150 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Package org.jboss.logging.annotations (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Package org.jboss.logging.annotations (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li>Class</li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/package-use.html" target="_top">Frames</a></li>
+<li><a href="package-use.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 title="Uses of Package org.jboss.logging.annotations" class="title">Uses of Package<br>org.jboss.logging.annotations</h1>
+</div>
+<div class="contentContainer">
+<ul class="blockList">
+<li class="blockList"><a name="org.jboss.logging.annotations">
+<!--   -->
+</a>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
+<caption><span>Classes in <a href="../../../../org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a> used by <a href="../../../../org/jboss/logging/annotations/package-summary.html">org.jboss.logging.annotations</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colOne" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colOne"><a href="../../../../org/jboss/logging/annotations/class-use/Message.Format.html#org.jboss.logging.annotations">Message.Format</a>
+<div class="block">The possible format types.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><a href="../../../../org/jboss/logging/annotations/class-use/Transform.TransformType.html#org.jboss.logging.annotations">Transform.TransformType</a>
+<div class="block">The transform type</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li>Class</li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/jboss/logging/annotations/package-use.html" target="_top">Frames</a></li>
+<li><a href="package-use.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/overview-tree.html b/docs/apidocs/overview-tree.html
new file mode 100644
index 0000000..10ba291
--- /dev/null
+++ b/docs/apidocs/overview-tree.html
@@ -0,0 +1,169 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Class Hierarchy (JBoss Logging I18n Documentation 2.1.0.Final API)</title>
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
+<script type="text/javascript" src="script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Class Hierarchy (JBoss Logging I18n Documentation 2.1.0.Final API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li>Class</li>
+<li>Use</li>
+<li class="navBarCell1Rev">Tree</li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?overview-tree.html" target="_top">Frames</a></li>
+<li><a href="overview-tree.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 class="title">Hierarchy For All Packages</h1>
+<span class="packageHierarchyLabel">Package Hierarchies:</span>
+<ul class="horizontal">
+<li><a href="org/jboss/logging/annotations/package-tree.html">org.jboss.logging.annotations</a></li>
+</ul>
+</div>
+<div class="contentContainer">
+<h2 title="Annotation Type Hierarchy">Annotation Type Hierarchy</h2>
+<ul>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/ValidIdRanges.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">ValidIdRanges</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/ValidIdRange.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">ValidIdRange</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Transform.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Transform</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Suppressed.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Suppressed</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Signature.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Signature</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/ResolutionDoc.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">ResolutionDoc</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Property.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Property</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Properties.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Properties</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Producer.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Producer</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Pos.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Pos</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Param.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Param</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Once.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Once</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/MessageLogger.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">MessageLogger</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/MessageBundle.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">MessageBundle</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Message.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Message</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/LoggingClass.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">LoggingClass</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/LogMessage.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">LogMessage</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/FormatWith.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">FormatWith</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Fields.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Fields</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Field.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Field</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/ConstructType.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">ConstructType</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Cause.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">Cause</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/BaseUrl.html" title="annotation in org.jboss.logging.annotations"><span class="typeNameLink">BaseUrl</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+</ul>
+<h2 title="Enum Hierarchy">Enum Hierarchy</h2>
+<ul>
+<li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Object</span></a>
+<ul>
+<li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" t [...]
+<ul>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Transform.TransformType.html" title="enum in org.jboss.logging.annotations"><span class="typeNameLink">Transform.TransformType</span></a></li>
+<li type="circle">org.jboss.logging.annotations.<a href="org/jboss/logging/annotations/Message.Format.html" title="enum in org.jboss.logging.annotations"><span class="typeNameLink">Message.Format</span></a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="org/jboss/logging/annotations/package-summary.html">Package</a></li>
+<li>Class</li>
+<li>Use</li>
+<li class="navBarCell1Rev">Tree</li>
+<li><a href="deprecated-list.html">Deprecated</a></li>
+<li><a href="index-all.html">Index</a></li>
+<li><a href="help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage">JBoss Logging Tools, 2.1.0.Final</div>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="index.html?overview-tree.html" target="_top">Frames</a></li>
+<li><a href="overview-tree.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2017 <a href="http://www.jboss.org">JBoss by Red Hat</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/docs/apidocs/package-list b/docs/apidocs/package-list
new file mode 100644
index 0000000..31b2b69
--- /dev/null
+++ b/docs/apidocs/package-list
@@ -0,0 +1 @@
+org.jboss.logging.annotations
diff --git a/docs/apidocs/script.js b/docs/apidocs/script.js
new file mode 100644
index 0000000..b346356
--- /dev/null
+++ b/docs/apidocs/script.js
@@ -0,0 +1,30 @@
+function show(type)
+{
+    count = 0;
+    for (var key in methods) {
+        var row = document.getElementById(key);
+        if ((methods[key] &  type) != 0) {
+            row.style.display = '';
+            row.className = (count++ % 2) ? rowColor : altColor;
+        }
+        else
+            row.style.display = 'none';
+    }
+    updateTabs(type);
+}
+
+function updateTabs(type)
+{
+    for (var value in tabs) {
+        var sNode = document.getElementById(tabs[value][0]);
+        var spanNode = sNode.firstChild;
+        if (value == type) {
+            sNode.className = activeTableTab;
+            spanNode.innerHTML = tabs[value][1];
+        }
+        else {
+            sNode.className = tableTab;
+            spanNode.innerHTML = "<a href=\"javascript:show("+ value + ");\">" + tabs[value][1] + "</a>";
+        }
+    }
+}
diff --git a/docs/apidocs/stylesheet.css b/docs/apidocs/stylesheet.css
new file mode 100644
index 0000000..98055b2
--- /dev/null
+++ b/docs/apidocs/stylesheet.css
@@ -0,0 +1,574 @@
+/* Javadoc style sheet */
+/*
+Overall document style
+*/
+
+ at import url('resources/fonts/dejavu.css');
+
+body {
+    background-color:#ffffff;
+    color:#353833;
+    font-family:'DejaVu Sans', Arial, Helvetica, sans-serif;
+    font-size:14px;
+    margin:0;
+}
+a:link, a:visited {
+    text-decoration:none;
+    color:#4A6782;
+}
+a:hover, a:focus {
+    text-decoration:none;
+    color:#bb7a2a;
+}
+a:active {
+    text-decoration:none;
+    color:#4A6782;
+}
+a[name] {
+    color:#353833;
+}
+a[name]:hover {
+    text-decoration:none;
+    color:#353833;
+}
+pre {
+    font-family:'DejaVu Sans Mono', monospace;
+    font-size:14px;
+}
+h1 {
+    font-size:20px;
+}
+h2 {
+    font-size:18px;
+}
+h3 {
+    font-size:16px;
+    font-style:italic;
+}
+h4 {
+    font-size:13px;
+}
+h5 {
+    font-size:12px;
+}
+h6 {
+    font-size:11px;
+}
+ul {
+    list-style-type:disc;
+}
+code, tt {
+    font-family:'DejaVu Sans Mono', monospace;
+    font-size:14px;
+    padding-top:4px;
+    margin-top:8px;
+    line-height:1.4em;
+}
+dt code {
+    font-family:'DejaVu Sans Mono', monospace;
+    font-size:14px;
+    padding-top:4px;
+}
+table tr td dt code {
+    font-family:'DejaVu Sans Mono', monospace;
+    font-size:14px;
+    vertical-align:top;
+    padding-top:4px;
+}
+sup {
+    font-size:8px;
+}
+/*
+Document title and Copyright styles
+*/
+.clear {
+    clear:both;
+    height:0px;
+    overflow:hidden;
+}
+.aboutLanguage {
+    float:right;
+    padding:0px 21px;
+    font-size:11px;
+    z-index:200;
+    margin-top:-9px;
+}
+.legalCopy {
+    margin-left:.5em;
+}
+.bar a, .bar a:link, .bar a:visited, .bar a:active {
+    color:#FFFFFF;
+    text-decoration:none;
+}
+.bar a:hover, .bar a:focus {
+    color:#bb7a2a;
+}
+.tab {
+    background-color:#0066FF;
+    color:#ffffff;
+    padding:8px;
+    width:5em;
+    font-weight:bold;
+}
+/*
+Navigation bar styles
+*/
+.bar {
+    background-color:#4D7A97;
+    color:#FFFFFF;
+    padding:.8em .5em .4em .8em;
+    height:auto;/*height:1.8em;*/
+    font-size:11px;
+    margin:0;
+}
+.topNav {
+    background-color:#4D7A97;
+    color:#FFFFFF;
+    float:left;
+    padding:0;
+    width:100%;
+    clear:right;
+    height:2.8em;
+    padding-top:10px;
+    overflow:hidden;
+    font-size:12px; 
+}
+.bottomNav {
+    margin-top:10px;
+    background-color:#4D7A97;
+    color:#FFFFFF;
+    float:left;
+    padding:0;
+    width:100%;
+    clear:right;
+    height:2.8em;
+    padding-top:10px;
+    overflow:hidden;
+    font-size:12px;
+}
+.subNav {
+    background-color:#dee3e9;
+    float:left;
+    width:100%;
+    overflow:hidden;
+    font-size:12px;
+}
+.subNav div {
+    clear:left;
+    float:left;
+    padding:0 0 5px 6px;
+    text-transform:uppercase;
+}
+ul.navList, ul.subNavList {
+    float:left;
+    margin:0 25px 0 0;
+    padding:0;
+}
+ul.navList li{
+    list-style:none;
+    float:left;
+    padding: 5px 6px;
+    text-transform:uppercase;
+}
+ul.subNavList li{
+    list-style:none;
+    float:left;
+}
+.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited {
+    color:#FFFFFF;
+    text-decoration:none;
+    text-transform:uppercase;
+}
+.topNav a:hover, .bottomNav a:hover {
+    text-decoration:none;
+    color:#bb7a2a;
+    text-transform:uppercase;
+}
+.navBarCell1Rev {
+    background-color:#F8981D;
+    color:#253441;
+    margin: auto 5px;
+}
+.skipNav {
+    position:absolute;
+    top:auto;
+    left:-9999px;
+    overflow:hidden;
+}
+/*
+Page header and footer styles
+*/
+.header, .footer {
+    clear:both;
+    margin:0 20px;
+    padding:5px 0 0 0;
+}
+.indexHeader {
+    margin:10px;
+    position:relative;
+}
+.indexHeader span{
+    margin-right:15px;
+}
+.indexHeader h1 {
+    font-size:13px;
+}
+.title {
+    color:#2c4557;
+    margin:10px 0;
+}
+.subTitle {
+    margin:5px 0 0 0;
+}
+.header ul {
+    margin:0 0 15px 0;
+    padding:0;
+}
+.footer ul {
+    margin:20px 0 5px 0;
+}
+.header ul li, .footer ul li {
+    list-style:none;
+    font-size:13px;
+}
+/*
+Heading styles
+*/
+div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 {
+    background-color:#dee3e9;
+    border:1px solid #d0d9e0;
+    margin:0 0 6px -8px;
+    padding:7px 5px;
+}
+ul.blockList ul.blockList ul.blockList li.blockList h3 {
+    background-color:#dee3e9;
+    border:1px solid #d0d9e0;
+    margin:0 0 6px -8px;
+    padding:7px 5px;
+}
+ul.blockList ul.blockList li.blockList h3 {
+    padding:0;
+    margin:15px 0;
+}
+ul.blockList li.blockList h2 {
+    padding:0px 0 20px 0;
+}
+/*
+Page layout container styles
+*/
+.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer {
+    clear:both;
+    padding:10px 20px;
+    position:relative;
+}
+.indexContainer {
+    margin:10px;
+    position:relative;
+    font-size:12px;
+}
+.indexContainer h2 {
+    font-size:13px;
+    padding:0 0 3px 0;
+}
+.indexContainer ul {
+    margin:0;
+    padding:0;
+}
+.indexContainer ul li {
+    list-style:none;
+    padding-top:2px;
+}
+.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt {
+    font-size:12px;
+    font-weight:bold;
+    margin:10px 0 0 0;
+    color:#4E4E4E;
+}
+.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd {
+    margin:5px 0 10px 0px;
+    font-size:14px;
+    font-family:'DejaVu Sans Mono',monospace;
+}
+.serializedFormContainer dl.nameValue dt {
+    margin-left:1px;
+    font-size:1.1em;
+    display:inline;
+    font-weight:bold;
+}
+.serializedFormContainer dl.nameValue dd {
+    margin:0 0 0 1px;
+    font-size:1.1em;
+    display:inline;
+}
+/*
+List styles
+*/
+ul.horizontal li {
+    display:inline;
+    font-size:0.9em;
+}
+ul.inheritance {
+    margin:0;
+    padding:0;
+}
+ul.inheritance li {
+    display:inline;
+    list-style:none;
+}
+ul.inheritance li ul.inheritance {
+    margin-left:15px;
+    padding-left:15px;
+    padding-top:1px;
+}
+ul.blockList, ul.blockListLast {
+    margin:10px 0 10px 0;
+    padding:0;
+}
+ul.blockList li.blockList, ul.blockListLast li.blockList {
+    list-style:none;
+    margin-bottom:15px;
+    line-height:1.4;
+}
+ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList {
+    padding:0px 20px 5px 10px;
+    border:1px solid #ededed; 
+    background-color:#f8f8f8;
+}
+ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList {
+    padding:0 0 5px 8px;
+    background-color:#ffffff;
+    border:none;
+}
+ul.blockList ul.blockList ul.blockList ul.blockList li.blockList {
+    margin-left:0;
+    padding-left:0;
+    padding-bottom:15px;
+    border:none;
+}
+ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast {
+    list-style:none;
+    border-bottom:none;
+    padding-bottom:0;
+}
+table tr td dl, table tr td dl dt, table tr td dl dd {
+    margin-top:0;
+    margin-bottom:1px;
+}
+/*
+Table styles
+*/
+.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary {
+    width:100%;
+    border-left:1px solid #EEE; 
+    border-right:1px solid #EEE; 
+    border-bottom:1px solid #EEE; 
+}
+.overviewSummary, .memberSummary  {
+    padding:0px;
+}
+.overviewSummary caption, .memberSummary caption, .typeSummary caption,
+.useSummary caption, .constantsSummary caption, .deprecatedSummary caption {
+    position:relative;
+    text-align:left;
+    background-repeat:no-repeat;
+    color:#253441;
+    font-weight:bold;
+    clear:none;
+    overflow:hidden;
+    padding:0px;
+    padding-top:10px;
+    padding-left:1px;
+    margin:0px;
+    white-space:pre;
+}
+.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link,
+.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link,
+.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover,
+.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover,
+.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active,
+.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active,
+.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited,
+.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited {
+    color:#FFFFFF;
+}
+.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span,
+.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span {
+    white-space:nowrap;
+    padding-top:5px;
+    padding-left:12px;
+    padding-right:12px;
+    padding-bottom:7px;
+    display:inline-block;
+    float:left;
+    background-color:#F8981D;
+    border: none;
+    height:16px;
+}
+.memberSummary caption span.activeTableTab span {
+    white-space:nowrap;
+    padding-top:5px;
+    padding-left:12px;
+    padding-right:12px;
+    margin-right:3px;
+    display:inline-block;
+    float:left;
+    background-color:#F8981D;
+    height:16px;
+}
+.memberSummary caption span.tableTab span {
+    white-space:nowrap;
+    padding-top:5px;
+    padding-left:12px;
+    padding-right:12px;
+    margin-right:3px;
+    display:inline-block;
+    float:left;
+    background-color:#4D7A97;
+    height:16px;
+}
+.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab {
+    padding-top:0px;
+    padding-left:0px;
+    padding-right:0px;
+    background-image:none;
+    float:none;
+    display:inline;
+}
+.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd,
+.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd {
+    display:none;
+    width:5px;
+    position:relative;
+    float:left;
+    background-color:#F8981D;
+}
+.memberSummary .activeTableTab .tabEnd {
+    display:none;
+    width:5px;
+    margin-right:3px;
+    position:relative; 
+    float:left;
+    background-color:#F8981D;
+}
+.memberSummary .tableTab .tabEnd {
+    display:none;
+    width:5px;
+    margin-right:3px;
+    position:relative;
+    background-color:#4D7A97;
+    float:left;
+
+}
+.overviewSummary td, .memberSummary td, .typeSummary td,
+.useSummary td, .constantsSummary td, .deprecatedSummary td {
+    text-align:left;
+    padding:0px 0px 12px 10px;
+}
+th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th,
+td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{
+    vertical-align:top;
+    padding-right:0px;
+    padding-top:8px;
+    padding-bottom:3px;
+}
+th.colFirst, th.colLast, th.colOne, .constantsSummary th {
+    background:#dee3e9;
+    text-align:left;
+    padding:8px 3px 3px 7px;
+}
+td.colFirst, th.colFirst {
+    white-space:nowrap;
+    font-size:13px;
+}
+td.colLast, th.colLast {
+    font-size:13px;
+}
+td.colOne, th.colOne {
+    font-size:13px;
+}
+.overviewSummary td.colFirst, .overviewSummary th.colFirst,
+.useSummary td.colFirst, .useSummary th.colFirst,
+.overviewSummary td.colOne, .overviewSummary th.colOne,
+.memberSummary td.colFirst, .memberSummary th.colFirst,
+.memberSummary td.colOne, .memberSummary th.colOne,
+.typeSummary td.colFirst{
+    width:25%;
+    vertical-align:top;
+}
+td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover {
+    font-weight:bold;
+}
+.tableSubHeadingColor {
+    background-color:#EEEEFF;
+}
+.altColor {
+    background-color:#FFFFFF;
+}
+.rowColor {
+    background-color:#EEEEEF;
+}
+/*
+Content styles
+*/
+.description pre {
+    margin-top:0;
+}
+.deprecatedContent {
+    margin:0;
+    padding:10px 0;
+}
+.docSummary {
+    padding:0;
+}
+
+ul.blockList ul.blockList ul.blockList li.blockList h3 {
+    font-style:normal;
+}
+
+div.block {
+    font-size:14px;
+    font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif;
+}
+
+td.colLast div {
+    padding-top:0px;
+}
+
+
+td.colLast a {
+    padding-bottom:3px;
+}
+/*
+Formatting effect styles
+*/
+.sourceLineNo {
+    color:green;
+    padding:0 30px 0 0;
+}
+h1.hidden {
+    visibility:hidden;
+    overflow:hidden;
+    font-size:10px;
+}
+.block {
+    display:block;
+    margin:3px 10px 2px 0px;
+    color:#474747;
+}
+.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink,
+.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel,
+.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink {
+    font-weight:bold;
+}
+.deprecationComment, .emphasizedPhrase, .interfaceName {
+    font-style:italic;
+}
+
+div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase,
+div.block div.block span.interfaceName {
+    font-style:normal;
+}
+
+div.contentContainer ul.blockList li.blockList h2{
+    padding-bottom:0px;
+}
diff --git a/docs/default-notes.html b/docs/default-notes.html
new file mode 100644
index 0000000..7d9d008
--- /dev/null
+++ b/docs/default-notes.html
@@ -0,0 +1,547 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 1.5.5">
+<title>Untitled</title>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
+<style>
+/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
+/* Remove comment around @import statement below when using as a custom stylesheet */
+/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
+audio,canvas,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+[hidden],template{display:none}
+script{display:none!important}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+a{background:transparent}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
+input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.center{margin-left:auto;margin-right:auto}
+.spread{width:100%}
+p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:none}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ul.no-bullet{list-style:none}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite:before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+ at media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
+table thead,table tfoot{background:#f7f8f7;font-weight:bold}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table}
+.clearfix:after,.float-group:after{clear:both}
+*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
+*:not(pre)>code.nobreak{word-wrap:normal}
+*:not(pre)>code.nowrap{white-space:nowrap}
+pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menu{color:rgba(0,0,0,.8)}
+b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}
+b.button:before{content:"[";padding:0 3px 0 2px}
+b.button:after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table}
+#header:after,#content:after,#footnotes:after,#footer:after{clear:both}
+#content{margin-top:1.25em}
+#content:before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
+#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span:before{content:"\00a0\2013\00a0"}
+#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark:before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber:after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{text-decoration:none}
+#toc a:active{text-decoration:underline}
+#toctitle{color:#7a2518;font-size:1.2em}
+ at media only screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
+ at media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{font-size:1.375em}
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+.sect1{padding-bottom:.625em}
+ at media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}
+.sect1+.sect1{border-top:1px solid #efefed}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}
+.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
+.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
+.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
+.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
+ at media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
+ at media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
+.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
+.listingblock:hover code[data-lang]:before{display:block}
+.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999}
+.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}
+table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
+table.pyhltable td.code{padding-left:.75em;padding-right:0}
+pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
+pre.pygments .lineno{display:inline-block;margin-right:.25em}
+table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
+.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
+.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
+.quoteblock .quoteblock blockquote:before{display:none}
+.verseblock{margin:0 1em 1.25em 1em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract{margin:0 0 1.25em 0;display:block}
+.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0}
+.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none}
+table.tableblock{max-width:100%;border-collapse:separate}
+table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0}
+table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0}
+table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0}
+table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0}
+table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0}
+table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0}
+table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot{border-width:1px 0}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+td>div.verse{white-space:pre}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none}
+ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em}
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px}
+ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}
+ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}
+ul.inline>li>*{display:block}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1}
+.colist>table tr>td:last-of-type{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
+.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background-color:#00fafa}
+.black{color:#000}
+.black-background{background-color:#000}
+.blue{color:#0000bf}
+.blue-background{background-color:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background-color:#fa00fa}
+.gray{color:#606060}
+.gray-background{background-color:#7d7d7d}
+.green{color:#006000}
+.green-background{background-color:#007d00}
+.lime{color:#00bf00}
+.lime-background{background-color:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background-color:#7d0000}
+.navy{color:#000060}
+.navy-background{background-color:#00007d}
+.olive{color:#606000}
+.olive-background{background-color:#7d7d00}
+.purple{color:#600060}
+.purple-background{background-color:#7d007d}
+.red{color:#bf0000}
+.red-background{background-color:#fa0000}
+.silver{color:#909090}
+.silver-background{background-color:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background-color:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background-color:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background-color:#fafa00}
+span.icon>.fa{cursor:default}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]:after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+ at media print{@page{margin:1.25cm .75cm}
+*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]:after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
+.sect1{padding-bottom:0!important}
+.sect1+.sect1{border:0!important}
+#header>h1:first-child{margin-top:1.25rem}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span:before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]:before{display:block}
+#footer{background:none!important;padding:0 .9375em}
+#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<style>
+/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*pre.CodeRay {background-color:#f7f7f8;}*/
+.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
+.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
+.CodeRay .line-numbers strong{color:rgba(0,0,0,.4)}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top;line-height:1.45}
+table.CodeRay td.line-numbers{text-align:right}
+table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
+table.CodeRay td.code{padding:0 0 0 .5em}
+table.CodeRay td.code>pre{padding:0}
+.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .annotation{color:#007}
+.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-value{color:#700}
+.CodeRay .binary{color:#509}
+.CodeRay .comment{color:#998;font-style:italic}
+.CodeRay .char{color:#04d}
+.CodeRay .char .content{color:#04d}
+.CodeRay .char .delimiter{color:#039}
+.CodeRay .class{color:#458;font-weight:bold}
+.CodeRay .complex{color:#a08}
+.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .color{color:#099}
+.CodeRay .class-variable{color:#369}
+.CodeRay .decorator{color:#b0b}
+.CodeRay .definition{color:#099}
+.CodeRay .delimiter{color:#000}
+.CodeRay .doc{color:#970}
+.CodeRay .doctype{color:#34b}
+.CodeRay .doc-string{color:#d42}
+.CodeRay .escape{color:#666}
+.CodeRay .entity{color:#800}
+.CodeRay .error{color:#808}
+.CodeRay .exception{color:inherit}
+.CodeRay .filename{color:#099}
+.CodeRay .function{color:#900;font-weight:bold}
+.CodeRay .global-variable{color:#008080}
+.CodeRay .hex{color:#058}
+.CodeRay .integer,.CodeRay .float{color:#099}
+.CodeRay .include{color:#555}
+.CodeRay .inline{color:#000}
+.CodeRay .inline .inline{background:#ccc}
+.CodeRay .inline .inline .inline{background:#bbb}
+.CodeRay .inline .inline-delimiter{color:#d14}
+.CodeRay .inline-delimiter{color:#d14}
+.CodeRay .important{color:#555;font-weight:bold}
+.CodeRay .interpreted{color:#b2b}
+.CodeRay .instance-variable{color:#008080}
+.CodeRay .label{color:#970}
+.CodeRay .local-variable{color:#963}
+.CodeRay .octal{color:#40e}
+.CodeRay .predefined{color:#369}
+.CodeRay .preprocessor{color:#579}
+.CodeRay .pseudo-class{color:#555}
+.CodeRay .directive{font-weight:bold}
+.CodeRay .type{font-weight:bold}
+.CodeRay .predefined-type{color:inherit}
+.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .key{color:#808}
+.CodeRay .key .delimiter{color:#606}
+.CodeRay .key .char{color:#80f}
+.CodeRay .value{color:#088}
+.CodeRay .regexp .delimiter{color:#808}
+.CodeRay .regexp .content{color:#808}
+.CodeRay .regexp .modifier{color:#808}
+.CodeRay .regexp .char{color:#d14}
+.CodeRay .regexp .function{color:#404;font-weight:bold}
+.CodeRay .string{color:#d20}
+.CodeRay .string .string .string{background:#ffd0d0}
+.CodeRay .string .content{color:#d14}
+.CodeRay .string .char{color:#d14}
+.CodeRay .string .delimiter{color:#d14}
+.CodeRay .shell{color:#d14}
+.CodeRay .shell .delimiter{color:#d14}
+.CodeRay .symbol{color:#990073}
+.CodeRay .symbol .content{color:#a60}
+.CodeRay .symbol .delimiter{color:#630}
+.CodeRay .tag{color:#008080}
+.CodeRay .tag-special{color:#d70}
+.CodeRay .variable{color:#036}
+.CodeRay .insert{background:#afa}
+.CodeRay .delete{background:#faa}
+.CodeRay .change{color:#aaf;background:#007}
+.CodeRay .head{color:#f8f;background:#505}
+.CodeRay .insert .insert{color:#080}
+.CodeRay .delete .delete{color:#800}
+.CodeRay .change .change{color:#66f}
+.CodeRay .head .head{color:#f4f}
+</style>
+</head>
+<body class="article">
+<div id="header">
+</div>
+<div id="content">
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+A message is inheritable if the two methods have the same name and same number of format parameters.
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+A format parameter is a parameter that has no annotations or is annotated with one of the following annotations; <a href="apidocs"><code>@FormatWith</code></a>, <a href="apidocs"><code>@Pos</code></a> or <a href="apidocs"><code>@Transform</code></a>.
+</td>
+</tr>
+</table>
+</div>
+</div>
+<script src="js/links.js"></script>
+<script>
+    window.onload=annotationLinks;
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/examples.html b/docs/examples.html
new file mode 100644
index 0000000..70c93f5
--- /dev/null
+++ b/docs/examples.html
@@ -0,0 +1,622 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 1.5.5">
+<title>Example Use Cases</title>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
+<style>
+/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
+/* Remove comment around @import statement below when using as a custom stylesheet */
+/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
+audio,canvas,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+[hidden],template{display:none}
+script{display:none!important}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+a{background:transparent}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
+input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.center{margin-left:auto;margin-right:auto}
+.spread{width:100%}
+p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:none}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ul.no-bullet{list-style:none}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite:before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+ at media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
+table thead,table tfoot{background:#f7f8f7;font-weight:bold}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table}
+.clearfix:after,.float-group:after{clear:both}
+*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
+*:not(pre)>code.nobreak{word-wrap:normal}
+*:not(pre)>code.nowrap{white-space:nowrap}
+pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menu{color:rgba(0,0,0,.8)}
+b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}
+b.button:before{content:"[";padding:0 3px 0 2px}
+b.button:after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table}
+#header:after,#content:after,#footnotes:after,#footer:after{clear:both}
+#content{margin-top:1.25em}
+#content:before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
+#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span:before{content:"\00a0\2013\00a0"}
+#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark:before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber:after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{text-decoration:none}
+#toc a:active{text-decoration:underline}
+#toctitle{color:#7a2518;font-size:1.2em}
+ at media only screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
+ at media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{font-size:1.375em}
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+.sect1{padding-bottom:.625em}
+ at media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}
+.sect1+.sect1{border-top:1px solid #efefed}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}
+.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
+.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
+.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
+.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
+ at media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
+ at media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
+.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
+.listingblock:hover code[data-lang]:before{display:block}
+.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999}
+.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}
+table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
+table.pyhltable td.code{padding-left:.75em;padding-right:0}
+pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
+pre.pygments .lineno{display:inline-block;margin-right:.25em}
+table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
+.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
+.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
+.quoteblock .quoteblock blockquote:before{display:none}
+.verseblock{margin:0 1em 1.25em 1em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract{margin:0 0 1.25em 0;display:block}
+.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0}
+.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none}
+table.tableblock{max-width:100%;border-collapse:separate}
+table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0}
+table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0}
+table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0}
+table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0}
+table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0}
+table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0}
+table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot{border-width:1px 0}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+td>div.verse{white-space:pre}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none}
+ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em}
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px}
+ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}
+ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}
+ul.inline>li>*{display:block}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1}
+.colist>table tr>td:last-of-type{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
+.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background-color:#00fafa}
+.black{color:#000}
+.black-background{background-color:#000}
+.blue{color:#0000bf}
+.blue-background{background-color:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background-color:#fa00fa}
+.gray{color:#606060}
+.gray-background{background-color:#7d7d7d}
+.green{color:#006000}
+.green-background{background-color:#007d00}
+.lime{color:#00bf00}
+.lime-background{background-color:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background-color:#7d0000}
+.navy{color:#000060}
+.navy-background{background-color:#00007d}
+.olive{color:#606000}
+.olive-background{background-color:#7d7d00}
+.purple{color:#600060}
+.purple-background{background-color:#7d007d}
+.red{color:#bf0000}
+.red-background{background-color:#fa0000}
+.silver{color:#909090}
+.silver-background{background-color:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background-color:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background-color:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background-color:#fafa00}
+span.icon>.fa{cursor:default}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]:after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+ at media print{@page{margin:1.25cm .75cm}
+*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]:after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
+.sect1{padding-bottom:0!important}
+.sect1+.sect1{border:0!important}
+#header>h1:first-child{margin-top:1.25rem}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span:before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]:before{display:block}
+#footer{background:none!important;padding:0 .9375em}
+#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<style>
+/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*pre.CodeRay {background-color:#f7f7f8;}*/
+.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
+.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
+.CodeRay .line-numbers strong{color:rgba(0,0,0,.4)}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top;line-height:1.45}
+table.CodeRay td.line-numbers{text-align:right}
+table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
+table.CodeRay td.code{padding:0 0 0 .5em}
+table.CodeRay td.code>pre{padding:0}
+.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .annotation{color:#007}
+.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-value{color:#700}
+.CodeRay .binary{color:#509}
+.CodeRay .comment{color:#998;font-style:italic}
+.CodeRay .char{color:#04d}
+.CodeRay .char .content{color:#04d}
+.CodeRay .char .delimiter{color:#039}
+.CodeRay .class{color:#458;font-weight:bold}
+.CodeRay .complex{color:#a08}
+.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .color{color:#099}
+.CodeRay .class-variable{color:#369}
+.CodeRay .decorator{color:#b0b}
+.CodeRay .definition{color:#099}
+.CodeRay .delimiter{color:#000}
+.CodeRay .doc{color:#970}
+.CodeRay .doctype{color:#34b}
+.CodeRay .doc-string{color:#d42}
+.CodeRay .escape{color:#666}
+.CodeRay .entity{color:#800}
+.CodeRay .error{color:#808}
+.CodeRay .exception{color:inherit}
+.CodeRay .filename{color:#099}
+.CodeRay .function{color:#900;font-weight:bold}
+.CodeRay .global-variable{color:#008080}
+.CodeRay .hex{color:#058}
+.CodeRay .integer,.CodeRay .float{color:#099}
+.CodeRay .include{color:#555}
+.CodeRay .inline{color:#000}
+.CodeRay .inline .inline{background:#ccc}
+.CodeRay .inline .inline .inline{background:#bbb}
+.CodeRay .inline .inline-delimiter{color:#d14}
+.CodeRay .inline-delimiter{color:#d14}
+.CodeRay .important{color:#555;font-weight:bold}
+.CodeRay .interpreted{color:#b2b}
+.CodeRay .instance-variable{color:#008080}
+.CodeRay .label{color:#970}
+.CodeRay .local-variable{color:#963}
+.CodeRay .octal{color:#40e}
+.CodeRay .predefined{color:#369}
+.CodeRay .preprocessor{color:#579}
+.CodeRay .pseudo-class{color:#555}
+.CodeRay .directive{font-weight:bold}
+.CodeRay .type{font-weight:bold}
+.CodeRay .predefined-type{color:inherit}
+.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .key{color:#808}
+.CodeRay .key .delimiter{color:#606}
+.CodeRay .key .char{color:#80f}
+.CodeRay .value{color:#088}
+.CodeRay .regexp .delimiter{color:#808}
+.CodeRay .regexp .content{color:#808}
+.CodeRay .regexp .modifier{color:#808}
+.CodeRay .regexp .char{color:#d14}
+.CodeRay .regexp .function{color:#404;font-weight:bold}
+.CodeRay .string{color:#d20}
+.CodeRay .string .string .string{background:#ffd0d0}
+.CodeRay .string .content{color:#d14}
+.CodeRay .string .char{color:#d14}
+.CodeRay .string .delimiter{color:#d14}
+.CodeRay .shell{color:#d14}
+.CodeRay .shell .delimiter{color:#d14}
+.CodeRay .symbol{color:#990073}
+.CodeRay .symbol .content{color:#a60}
+.CodeRay .symbol .delimiter{color:#630}
+.CodeRay .tag{color:#008080}
+.CodeRay .tag-special{color:#d70}
+.CodeRay .variable{color:#036}
+.CodeRay .insert{background:#afa}
+.CodeRay .delete{background:#faa}
+.CodeRay .change{color:#aaf;background:#007}
+.CodeRay .head{color:#f8f;background:#505}
+.CodeRay .insert .insert{color:#080}
+.CodeRay .delete .delete{color:#800}
+.CodeRay .change .change{color:#66f}
+.CodeRay .head .head{color:#f4f}
+</style>
+</head>
+<body class="article">
+<div id="header">
+</div>
+<div id="content">
+<div class="sect1">
+<h2 id="example-use-cases"><a class="anchor" href="#example-use-cases"></a>Example Use Cases</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Below are some example use case snippets from the <a href="https://github.com/jboss-logging/jboss-logging-tools/docs/src/main/java/org/jboss/logging/tools/examples">examples</a>.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">/**
+ * Writes the value of the object to the file.
+ *
+ * @param value the value to write, cannot be {@code null}
+ *
+ * @throws UncheckedIOException if an error occurs writing the data
+ */</span>
+<span class="directive">public</span> <span class="type">void</span> write(<span class="directive">final</span> <span class="predefined-type">Object</span> value) {
+    AppLogger.LOGGER.appVersion(<span class="string"><span class="delimiter">"</span><span class="content">ContentWriter</span><span class="delimiter">"</span></span>, <span class="integer">1</span>, <span class="integer">0</span>, <span class="integer">0</span>, <span class="string"><span class="delimiter">"</span><span class="content">Beta1</span><span class="delimiter">"</span></span>); <i class="conum" data-value="1"></i><b>(1)</b>
+    Objects.requireNonNull(value, ErrorMessages.MESSAGES.nullParam(<span class="string"><span class="delimiter">"</span><span class="content">value</span><span class="delimiter">"</span></span>)); <i class="conum" data-value="2"></i><b>(2)</b>
+    write(Objects.requireNonNull(value, ErrorMessages.MESSAGES.nullParam(<span class="string"><span class="delimiter">"</span><span class="content">value</span><span class="delimiter">"</span></span>)).toString());
+}
+
+<span class="comment">/**
+ * Writes the value to the file.
+ *
+ * @param value the value to write, cannot be {@code null} or an {@linkplain String#isEmpty() empty string}.
+ *
+ * @throws UncheckedIOException if an error occurs writing the data
+ */</span>
+<span class="directive">public</span> <span class="type">void</span> write(<span class="directive">final</span> <span class="predefined-type">String</span> value) {
+    AppLogger.LOGGER.appVersion(<span class="string"><span class="delimiter">"</span><span class="content">ContentWriter</span><span class="delimiter">"</span></span>, <span class="integer">1</span>, <span class="integer">0</span>, <span class="integer">0</span>, <span class="string"><span class="delimiter">"</span><span class="content">Beta1</span><span class="delimiter">"</span></span>);
+    <span class="keyword">if</span> (Objects.requireNonNull(value, ErrorMessages.MESSAGES.nullParam(<span class="string"><span class="delimiter">"</span><span class="content">value</span><span class="delimiter">"</span></span>)).isEmpty()) {
+        <span class="keyword">throw</span> ErrorMessages.MESSAGES.invalidValue(value); <i class="conum" data-value="3"></i><b>(3)</b>
+    }
+    <span class="keyword">try</span> {
+        <span class="directive">synchronized</span> (outputLock) {
+            writer.write(value);
+            writer.newLine();
+            <span class="keyword">if</span> (autoFlush) {
+                flush();
+            }
+        }
+    } <span class="keyword">catch</span> (<span class="exception">IOException</span> e) {
+        <span class="keyword">throw</span> ErrorMessages.MESSAGES.operationFailed(UncheckedIOException::<span class="keyword">new</span>, e, <span class="string"><span class="delimiter">"</span><span class="content">write</span><span class="delimiter">"</span></span>); <i class="conum" data-value="4"></i><b>(4)</b>
+    }
+}
+
+<span class="annotation">@Override</span>
+<span class="directive">public</span> <span class="type">void</span> close() {
+    <span class="keyword">try</span> {
+        <span class="directive">synchronized</span> (outputLock) {
+            writer.close();
+        }
+        AppLogger.LOGGER.tracef(<span class="string"><span class="delimiter">"</span><span class="content">ContentWriter %s was successfully closed.</span><span class="delimiter">"</span></span>, <span class="local-variable">this</span>);
+    } <span class="keyword">catch</span> (<span class="exception">Exception</span> e) {
+        <span class="keyword">throw</span> ErrorMessages.MESSAGES.closeFailure(e, <span class="local-variable">this</span>);
+    }
+}
+
+<span class="comment">/**
+ * Safely close this writer logging any errors that occur during closing.
+ */</span>
+<span class="directive">public</span> <span class="type">void</span> safeClose() {
+    <span class="keyword">try</span> {
+        <span class="directive">synchronized</span> (outputLock) {
+            writer.close();
+        }
+        AppLogger.LOGGER.tracef(<span class="string"><span class="delimiter">"</span><span class="content">ContentWriter %s was successfully closed.</span><span class="delimiter">"</span></span>, <span class="local-variable">this</span>);
+    } <span class="keyword">catch</span> (<span class="exception">Exception</span> e) {
+        AppLogger.LOGGER.closeFailure(e, <span class="local-variable">this</span>); <i class="conum" data-value="5"></i><b>(5)</b>
+    }
+}</code></pre>
+</div>
+</div>
+<div class="colist arabic">
+<table>
+<tr>
+<td><i class="conum" data-value="1"></i><b>1</b></td>
+<td>Logs the application version. Note this uses the <a href="apidocs">@Once</a> annotation to indicate this should only be logged once regardless of which <code>write</code> method is used.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="2"></i><b>2</b></td>
+<td>The <code>ErrorMessages.nullParam()</code> returns a <code>java.lang.function.Supplier</code>. This allows the message to be lazily formatted only if the <code>value</code> is <code>null</code>.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="3"></i><b>3</b></td>
+<td>Throws a message if the <code>value</code> is an empty string.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="4"></i><b>4</b></td>
+<td>Uses a <code>java.lang.function.BiFunction</code> to create a new <code>UncheckedIOException</code> with the caught exception set as the cause.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="5"></i><b>5</b></td>
+<td>Logs the caught exception instead of throwing a new exception.</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+</div>
+<script src="js/links.js"></script>
+<script>
+    window.onload=annotationLinks;
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/examples/AppLogger.html b/docs/examples/AppLogger.html
new file mode 100644
index 0000000..e78931e
--- /dev/null
+++ b/docs/examples/AppLogger.html
@@ -0,0 +1,566 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 1.5.5">
+<title>Example Messages</title>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
+<style>
+/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
+/* Remove comment around @import statement below when using as a custom stylesheet */
+/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
+audio,canvas,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+[hidden],template{display:none}
+script{display:none!important}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+a{background:transparent}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
+input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.center{margin-left:auto;margin-right:auto}
+.spread{width:100%}
+p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:none}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ul.no-bullet{list-style:none}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite:before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+ at media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
+table thead,table tfoot{background:#f7f8f7;font-weight:bold}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table}
+.clearfix:after,.float-group:after{clear:both}
+*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
+*:not(pre)>code.nobreak{word-wrap:normal}
+*:not(pre)>code.nowrap{white-space:nowrap}
+pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menu{color:rgba(0,0,0,.8)}
+b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}
+b.button:before{content:"[";padding:0 3px 0 2px}
+b.button:after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table}
+#header:after,#content:after,#footnotes:after,#footer:after{clear:both}
+#content{margin-top:1.25em}
+#content:before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
+#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span:before{content:"\00a0\2013\00a0"}
+#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark:before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber:after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{text-decoration:none}
+#toc a:active{text-decoration:underline}
+#toctitle{color:#7a2518;font-size:1.2em}
+ at media only screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
+ at media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{font-size:1.375em}
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+.sect1{padding-bottom:.625em}
+ at media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}
+.sect1+.sect1{border-top:1px solid #efefed}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}
+.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
+.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
+.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
+.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
+ at media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
+ at media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
+.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
+.listingblock:hover code[data-lang]:before{display:block}
+.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999}
+.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}
+table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
+table.pyhltable td.code{padding-left:.75em;padding-right:0}
+pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
+pre.pygments .lineno{display:inline-block;margin-right:.25em}
+table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
+.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
+.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
+.quoteblock .quoteblock blockquote:before{display:none}
+.verseblock{margin:0 1em 1.25em 1em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract{margin:0 0 1.25em 0;display:block}
+.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0}
+.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none}
+table.tableblock{max-width:100%;border-collapse:separate}
+table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0}
+table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0}
+table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0}
+table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0}
+table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0}
+table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0}
+table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot{border-width:1px 0}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+td>div.verse{white-space:pre}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none}
+ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em}
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px}
+ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}
+ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}
+ul.inline>li>*{display:block}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1}
+.colist>table tr>td:last-of-type{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
+.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background-color:#00fafa}
+.black{color:#000}
+.black-background{background-color:#000}
+.blue{color:#0000bf}
+.blue-background{background-color:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background-color:#fa00fa}
+.gray{color:#606060}
+.gray-background{background-color:#7d7d7d}
+.green{color:#006000}
+.green-background{background-color:#007d00}
+.lime{color:#00bf00}
+.lime-background{background-color:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background-color:#7d0000}
+.navy{color:#000060}
+.navy-background{background-color:#00007d}
+.olive{color:#606000}
+.olive-background{background-color:#7d7d00}
+.purple{color:#600060}
+.purple-background{background-color:#7d007d}
+.red{color:#bf0000}
+.red-background{background-color:#fa0000}
+.silver{color:#909090}
+.silver-background{background-color:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background-color:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background-color:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background-color:#fafa00}
+span.icon>.fa{cursor:default}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]:after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+ at media print{@page{margin:1.25cm .75cm}
+*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]:after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
+.sect1{padding-bottom:0!important}
+.sect1+.sect1{border:0!important}
+#header>h1:first-child{margin-top:1.25rem}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span:before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]:before{display:block}
+#footer{background:none!important;padding:0 .9375em}
+#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<style>
+/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*pre.CodeRay {background-color:#f7f7f8;}*/
+.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
+.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
+.CodeRay .line-numbers strong{color:rgba(0,0,0,.4)}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top;line-height:1.45}
+table.CodeRay td.line-numbers{text-align:right}
+table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
+table.CodeRay td.code{padding:0 0 0 .5em}
+table.CodeRay td.code>pre{padding:0}
+.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .annotation{color:#007}
+.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-value{color:#700}
+.CodeRay .binary{color:#509}
+.CodeRay .comment{color:#998;font-style:italic}
+.CodeRay .char{color:#04d}
+.CodeRay .char .content{color:#04d}
+.CodeRay .char .delimiter{color:#039}
+.CodeRay .class{color:#458;font-weight:bold}
+.CodeRay .complex{color:#a08}
+.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .color{color:#099}
+.CodeRay .class-variable{color:#369}
+.CodeRay .decorator{color:#b0b}
+.CodeRay .definition{color:#099}
+.CodeRay .delimiter{color:#000}
+.CodeRay .doc{color:#970}
+.CodeRay .doctype{color:#34b}
+.CodeRay .doc-string{color:#d42}
+.CodeRay .escape{color:#666}
+.CodeRay .entity{color:#800}
+.CodeRay .error{color:#808}
+.CodeRay .exception{color:inherit}
+.CodeRay .filename{color:#099}
+.CodeRay .function{color:#900;font-weight:bold}
+.CodeRay .global-variable{color:#008080}
+.CodeRay .hex{color:#058}
+.CodeRay .integer,.CodeRay .float{color:#099}
+.CodeRay .include{color:#555}
+.CodeRay .inline{color:#000}
+.CodeRay .inline .inline{background:#ccc}
+.CodeRay .inline .inline .inline{background:#bbb}
+.CodeRay .inline .inline-delimiter{color:#d14}
+.CodeRay .inline-delimiter{color:#d14}
+.CodeRay .important{color:#555;font-weight:bold}
+.CodeRay .interpreted{color:#b2b}
+.CodeRay .instance-variable{color:#008080}
+.CodeRay .label{color:#970}
+.CodeRay .local-variable{color:#963}
+.CodeRay .octal{color:#40e}
+.CodeRay .predefined{color:#369}
+.CodeRay .preprocessor{color:#579}
+.CodeRay .pseudo-class{color:#555}
+.CodeRay .directive{font-weight:bold}
+.CodeRay .type{font-weight:bold}
+.CodeRay .predefined-type{color:inherit}
+.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .key{color:#808}
+.CodeRay .key .delimiter{color:#606}
+.CodeRay .key .char{color:#80f}
+.CodeRay .value{color:#088}
+.CodeRay .regexp .delimiter{color:#808}
+.CodeRay .regexp .content{color:#808}
+.CodeRay .regexp .modifier{color:#808}
+.CodeRay .regexp .char{color:#d14}
+.CodeRay .regexp .function{color:#404;font-weight:bold}
+.CodeRay .string{color:#d20}
+.CodeRay .string .string .string{background:#ffd0d0}
+.CodeRay .string .content{color:#d14}
+.CodeRay .string .char{color:#d14}
+.CodeRay .string .delimiter{color:#d14}
+.CodeRay .shell{color:#d14}
+.CodeRay .shell .delimiter{color:#d14}
+.CodeRay .symbol{color:#990073}
+.CodeRay .symbol .content{color:#a60}
+.CodeRay .symbol .delimiter{color:#630}
+.CodeRay .tag{color:#008080}
+.CodeRay .tag-special{color:#d70}
+.CodeRay .variable{color:#036}
+.CodeRay .insert{background:#afa}
+.CodeRay .delete{background:#faa}
+.CodeRay .change{color:#aaf;background:#007}
+.CodeRay .head{color:#f8f;background:#505}
+.CodeRay .insert .insert{color:#080}
+.CodeRay .delete .delete{color:#800}
+.CodeRay .change .change{color:#66f}
+.CodeRay .head .head{color:#f4f}
+</style>
+</head>
+<body class="article">
+<div id="header">
+<h1>Example Messages</h1>
+<div class="details">
+<span id="revnumber">version 2.1.0.Final</span>
+</div>
+</div>
+<div id="content">
+<table class="tableblock frame-all grid-all spread">
+<caption class="title">Table 1. org.jboss.logging.tools.examples.AppLogger</caption>
+<colgroup>
+<col style="width: 11.1111%;">
+<col style="width: 55.5555%;">
+<col style="width: 11.1111%;">
+<col style="width: 22.2223%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Message Id</th>
+<th class="tableblock halign-left valign-top">Message</th>
+<th class="tableblock halign-center valign-top">Log Level</th>
+<th class="tableblock halign-left valign-top">Return Type</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"> — </p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">%s version %d.%d.%d.%s</p></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock">INFO</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>void</code></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="errors/CW000100.html">CW000100</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Failure while closing %s</p></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock">ERROR</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>void</code></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="errors/CW000101.html">CW000101</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Encoding %s could not be found. Defaulting to %s.</p></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock">WARN</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>void</code></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">CW000102</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Cache size changed to <em>%d</em></p></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock">INFO</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>void</code></p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/examples/ErrorMessages.html b/docs/examples/ErrorMessages.html
new file mode 100644
index 0000000..1b6a405
--- /dev/null
+++ b/docs/examples/ErrorMessages.html
@@ -0,0 +1,572 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 1.5.5">
+<title>Example Messages</title>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
+<style>
+/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
+/* Remove comment around @import statement below when using as a custom stylesheet */
+/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
+audio,canvas,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+[hidden],template{display:none}
+script{display:none!important}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+a{background:transparent}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
+input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.center{margin-left:auto;margin-right:auto}
+.spread{width:100%}
+p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:none}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ul.no-bullet{list-style:none}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite:before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+ at media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
+table thead,table tfoot{background:#f7f8f7;font-weight:bold}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table}
+.clearfix:after,.float-group:after{clear:both}
+*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
+*:not(pre)>code.nobreak{word-wrap:normal}
+*:not(pre)>code.nowrap{white-space:nowrap}
+pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menu{color:rgba(0,0,0,.8)}
+b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}
+b.button:before{content:"[";padding:0 3px 0 2px}
+b.button:after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table}
+#header:after,#content:after,#footnotes:after,#footer:after{clear:both}
+#content{margin-top:1.25em}
+#content:before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
+#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span:before{content:"\00a0\2013\00a0"}
+#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark:before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber:after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{text-decoration:none}
+#toc a:active{text-decoration:underline}
+#toctitle{color:#7a2518;font-size:1.2em}
+ at media only screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
+ at media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{font-size:1.375em}
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+.sect1{padding-bottom:.625em}
+ at media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}
+.sect1+.sect1{border-top:1px solid #efefed}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}
+.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
+.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
+.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
+.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
+ at media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
+ at media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
+.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
+.listingblock:hover code[data-lang]:before{display:block}
+.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999}
+.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}
+table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
+table.pyhltable td.code{padding-left:.75em;padding-right:0}
+pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
+pre.pygments .lineno{display:inline-block;margin-right:.25em}
+table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
+.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
+.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
+.quoteblock .quoteblock blockquote:before{display:none}
+.verseblock{margin:0 1em 1.25em 1em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract{margin:0 0 1.25em 0;display:block}
+.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0}
+.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none}
+table.tableblock{max-width:100%;border-collapse:separate}
+table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0}
+table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0}
+table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0}
+table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0}
+table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0}
+table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0}
+table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot{border-width:1px 0}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+td>div.verse{white-space:pre}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none}
+ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em}
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px}
+ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}
+ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}
+ul.inline>li>*{display:block}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1}
+.colist>table tr>td:last-of-type{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
+.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background-color:#00fafa}
+.black{color:#000}
+.black-background{background-color:#000}
+.blue{color:#0000bf}
+.blue-background{background-color:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background-color:#fa00fa}
+.gray{color:#606060}
+.gray-background{background-color:#7d7d7d}
+.green{color:#006000}
+.green-background{background-color:#007d00}
+.lime{color:#00bf00}
+.lime-background{background-color:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background-color:#7d0000}
+.navy{color:#000060}
+.navy-background{background-color:#00007d}
+.olive{color:#606000}
+.olive-background{background-color:#7d7d00}
+.purple{color:#600060}
+.purple-background{background-color:#7d007d}
+.red{color:#bf0000}
+.red-background{background-color:#fa0000}
+.silver{color:#909090}
+.silver-background{background-color:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background-color:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background-color:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background-color:#fafa00}
+span.icon>.fa{cursor:default}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]:after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+ at media print{@page{margin:1.25cm .75cm}
+*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]:after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
+.sect1{padding-bottom:0!important}
+.sect1+.sect1{border:0!important}
+#header>h1:first-child{margin-top:1.25rem}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span:before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]:before{display:block}
+#footer{background:none!important;padding:0 .9375em}
+#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<style>
+/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*pre.CodeRay {background-color:#f7f7f8;}*/
+.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
+.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
+.CodeRay .line-numbers strong{color:rgba(0,0,0,.4)}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top;line-height:1.45}
+table.CodeRay td.line-numbers{text-align:right}
+table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
+table.CodeRay td.code{padding:0 0 0 .5em}
+table.CodeRay td.code>pre{padding:0}
+.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .annotation{color:#007}
+.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-value{color:#700}
+.CodeRay .binary{color:#509}
+.CodeRay .comment{color:#998;font-style:italic}
+.CodeRay .char{color:#04d}
+.CodeRay .char .content{color:#04d}
+.CodeRay .char .delimiter{color:#039}
+.CodeRay .class{color:#458;font-weight:bold}
+.CodeRay .complex{color:#a08}
+.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .color{color:#099}
+.CodeRay .class-variable{color:#369}
+.CodeRay .decorator{color:#b0b}
+.CodeRay .definition{color:#099}
+.CodeRay .delimiter{color:#000}
+.CodeRay .doc{color:#970}
+.CodeRay .doctype{color:#34b}
+.CodeRay .doc-string{color:#d42}
+.CodeRay .escape{color:#666}
+.CodeRay .entity{color:#800}
+.CodeRay .error{color:#808}
+.CodeRay .exception{color:inherit}
+.CodeRay .filename{color:#099}
+.CodeRay .function{color:#900;font-weight:bold}
+.CodeRay .global-variable{color:#008080}
+.CodeRay .hex{color:#058}
+.CodeRay .integer,.CodeRay .float{color:#099}
+.CodeRay .include{color:#555}
+.CodeRay .inline{color:#000}
+.CodeRay .inline .inline{background:#ccc}
+.CodeRay .inline .inline .inline{background:#bbb}
+.CodeRay .inline .inline-delimiter{color:#d14}
+.CodeRay .inline-delimiter{color:#d14}
+.CodeRay .important{color:#555;font-weight:bold}
+.CodeRay .interpreted{color:#b2b}
+.CodeRay .instance-variable{color:#008080}
+.CodeRay .label{color:#970}
+.CodeRay .local-variable{color:#963}
+.CodeRay .octal{color:#40e}
+.CodeRay .predefined{color:#369}
+.CodeRay .preprocessor{color:#579}
+.CodeRay .pseudo-class{color:#555}
+.CodeRay .directive{font-weight:bold}
+.CodeRay .type{font-weight:bold}
+.CodeRay .predefined-type{color:inherit}
+.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .key{color:#808}
+.CodeRay .key .delimiter{color:#606}
+.CodeRay .key .char{color:#80f}
+.CodeRay .value{color:#088}
+.CodeRay .regexp .delimiter{color:#808}
+.CodeRay .regexp .content{color:#808}
+.CodeRay .regexp .modifier{color:#808}
+.CodeRay .regexp .char{color:#d14}
+.CodeRay .regexp .function{color:#404;font-weight:bold}
+.CodeRay .string{color:#d20}
+.CodeRay .string .string .string{background:#ffd0d0}
+.CodeRay .string .content{color:#d14}
+.CodeRay .string .char{color:#d14}
+.CodeRay .string .delimiter{color:#d14}
+.CodeRay .shell{color:#d14}
+.CodeRay .shell .delimiter{color:#d14}
+.CodeRay .symbol{color:#990073}
+.CodeRay .symbol .content{color:#a60}
+.CodeRay .symbol .delimiter{color:#630}
+.CodeRay .tag{color:#008080}
+.CodeRay .tag-special{color:#d70}
+.CodeRay .variable{color:#036}
+.CodeRay .insert{background:#afa}
+.CodeRay .delete{background:#faa}
+.CodeRay .change{color:#aaf;background:#007}
+.CodeRay .head{color:#f8f;background:#505}
+.CodeRay .insert .insert{color:#080}
+.CodeRay .delete .delete{color:#800}
+.CodeRay .change .change{color:#66f}
+.CodeRay .head .head{color:#f4f}
+</style>
+</head>
+<body class="article">
+<div id="header">
+<h1>Example Messages</h1>
+<div class="details">
+<span id="revnumber">version 2.1.0.Final</span>
+</div>
+</div>
+<div id="content">
+<table class="tableblock frame-all grid-all spread">
+<caption class="title">Table 1. org.jboss.logging.tools.examples.ErrorMessages</caption>
+<colgroup>
+<col style="width: 11.1111%;">
+<col style="width: 55.5555%;">
+<col style="width: 11.1111%;">
+<col style="width: 22.2223%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Message Id</th>
+<th class="tableblock halign-left valign-top">Message</th>
+<th class="tableblock halign-center valign-top">Log Level</th>
+<th class="tableblock halign-left valign-top">Return Type</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"> — </p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Version %d.%d.%d.%s</p></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock"> — </p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.lang.String</code></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">CW000001</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Value <em>%s</em> is invalid</p></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock"> — </p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.lang.IllegalArgumentException</code></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">CW000002</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Failure closing %s</p></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock"> — </p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>org.jboss.logging.tools.examples.CloseException</code></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="errors/CW000003.html">CW000003</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Parameter %s cannot be null</p></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock"> — </p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.util.function.Supplier</code></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">CW000004</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Operation %s failed.</p></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock"> — </p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.lang.RuntimeException</code></p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/examples/errors/CW000003.html b/docs/examples/errors/CW000003.html
new file mode 100644
index 0000000..e81f580
--- /dev/null
+++ b/docs/examples/errors/CW000003.html
@@ -0,0 +1,532 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 1.5.5">
+<title>CW000003: Null Parameter</title>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
+<style>
+/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
+/* Remove comment around @import statement below when using as a custom stylesheet */
+/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
+audio,canvas,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+[hidden],template{display:none}
+script{display:none!important}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+a{background:transparent}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
+input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.center{margin-left:auto;margin-right:auto}
+.spread{width:100%}
+p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:none}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ul.no-bullet{list-style:none}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite:before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+ at media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
+table thead,table tfoot{background:#f7f8f7;font-weight:bold}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table}
+.clearfix:after,.float-group:after{clear:both}
+*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
+*:not(pre)>code.nobreak{word-wrap:normal}
+*:not(pre)>code.nowrap{white-space:nowrap}
+pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menu{color:rgba(0,0,0,.8)}
+b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}
+b.button:before{content:"[";padding:0 3px 0 2px}
+b.button:after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table}
+#header:after,#content:after,#footnotes:after,#footer:after{clear:both}
+#content{margin-top:1.25em}
+#content:before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
+#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span:before{content:"\00a0\2013\00a0"}
+#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark:before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber:after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{text-decoration:none}
+#toc a:active{text-decoration:underline}
+#toctitle{color:#7a2518;font-size:1.2em}
+ at media only screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
+ at media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{font-size:1.375em}
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+.sect1{padding-bottom:.625em}
+ at media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}
+.sect1+.sect1{border-top:1px solid #efefed}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}
+.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
+.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
+.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
+.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
+ at media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
+ at media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
+.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
+.listingblock:hover code[data-lang]:before{display:block}
+.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999}
+.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}
+table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
+table.pyhltable td.code{padding-left:.75em;padding-right:0}
+pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
+pre.pygments .lineno{display:inline-block;margin-right:.25em}
+table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
+.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
+.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
+.quoteblock .quoteblock blockquote:before{display:none}
+.verseblock{margin:0 1em 1.25em 1em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract{margin:0 0 1.25em 0;display:block}
+.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0}
+.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none}
+table.tableblock{max-width:100%;border-collapse:separate}
+table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0}
+table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0}
+table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0}
+table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0}
+table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0}
+table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0}
+table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot{border-width:1px 0}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+td>div.verse{white-space:pre}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none}
+ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em}
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px}
+ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}
+ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}
+ul.inline>li>*{display:block}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1}
+.colist>table tr>td:last-of-type{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
+.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background-color:#00fafa}
+.black{color:#000}
+.black-background{background-color:#000}
+.blue{color:#0000bf}
+.blue-background{background-color:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background-color:#fa00fa}
+.gray{color:#606060}
+.gray-background{background-color:#7d7d7d}
+.green{color:#006000}
+.green-background{background-color:#007d00}
+.lime{color:#00bf00}
+.lime-background{background-color:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background-color:#7d0000}
+.navy{color:#000060}
+.navy-background{background-color:#00007d}
+.olive{color:#606000}
+.olive-background{background-color:#7d7d00}
+.purple{color:#600060}
+.purple-background{background-color:#7d007d}
+.red{color:#bf0000}
+.red-background{background-color:#fa0000}
+.silver{color:#909090}
+.silver-background{background-color:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background-color:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background-color:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background-color:#fafa00}
+span.icon>.fa{cursor:default}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]:after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+ at media print{@page{margin:1.25cm .75cm}
+*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]:after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
+.sect1{padding-bottom:0!important}
+.sect1+.sect1{border:0!important}
+#header>h1:first-child{margin-top:1.25rem}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span:before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]:before{display:block}
+#footer{background:none!important;padding:0 .9375em}
+#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<style>
+/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*pre.CodeRay {background-color:#f7f7f8;}*/
+.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
+.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
+.CodeRay .line-numbers strong{color:rgba(0,0,0,.4)}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top;line-height:1.45}
+table.CodeRay td.line-numbers{text-align:right}
+table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
+table.CodeRay td.code{padding:0 0 0 .5em}
+table.CodeRay td.code>pre{padding:0}
+.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .annotation{color:#007}
+.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-value{color:#700}
+.CodeRay .binary{color:#509}
+.CodeRay .comment{color:#998;font-style:italic}
+.CodeRay .char{color:#04d}
+.CodeRay .char .content{color:#04d}
+.CodeRay .char .delimiter{color:#039}
+.CodeRay .class{color:#458;font-weight:bold}
+.CodeRay .complex{color:#a08}
+.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .color{color:#099}
+.CodeRay .class-variable{color:#369}
+.CodeRay .decorator{color:#b0b}
+.CodeRay .definition{color:#099}
+.CodeRay .delimiter{color:#000}
+.CodeRay .doc{color:#970}
+.CodeRay .doctype{color:#34b}
+.CodeRay .doc-string{color:#d42}
+.CodeRay .escape{color:#666}
+.CodeRay .entity{color:#800}
+.CodeRay .error{color:#808}
+.CodeRay .exception{color:inherit}
+.CodeRay .filename{color:#099}
+.CodeRay .function{color:#900;font-weight:bold}
+.CodeRay .global-variable{color:#008080}
+.CodeRay .hex{color:#058}
+.CodeRay .integer,.CodeRay .float{color:#099}
+.CodeRay .include{color:#555}
+.CodeRay .inline{color:#000}
+.CodeRay .inline .inline{background:#ccc}
+.CodeRay .inline .inline .inline{background:#bbb}
+.CodeRay .inline .inline-delimiter{color:#d14}
+.CodeRay .inline-delimiter{color:#d14}
+.CodeRay .important{color:#555;font-weight:bold}
+.CodeRay .interpreted{color:#b2b}
+.CodeRay .instance-variable{color:#008080}
+.CodeRay .label{color:#970}
+.CodeRay .local-variable{color:#963}
+.CodeRay .octal{color:#40e}
+.CodeRay .predefined{color:#369}
+.CodeRay .preprocessor{color:#579}
+.CodeRay .pseudo-class{color:#555}
+.CodeRay .directive{font-weight:bold}
+.CodeRay .type{font-weight:bold}
+.CodeRay .predefined-type{color:inherit}
+.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .key{color:#808}
+.CodeRay .key .delimiter{color:#606}
+.CodeRay .key .char{color:#80f}
+.CodeRay .value{color:#088}
+.CodeRay .regexp .delimiter{color:#808}
+.CodeRay .regexp .content{color:#808}
+.CodeRay .regexp .modifier{color:#808}
+.CodeRay .regexp .char{color:#d14}
+.CodeRay .regexp .function{color:#404;font-weight:bold}
+.CodeRay .string{color:#d20}
+.CodeRay .string .string .string{background:#ffd0d0}
+.CodeRay .string .content{color:#d14}
+.CodeRay .string .char{color:#d14}
+.CodeRay .string .delimiter{color:#d14}
+.CodeRay .shell{color:#d14}
+.CodeRay .shell .delimiter{color:#d14}
+.CodeRay .symbol{color:#990073}
+.CodeRay .symbol .content{color:#a60}
+.CodeRay .symbol .delimiter{color:#630}
+.CodeRay .tag{color:#008080}
+.CodeRay .tag-special{color:#d70}
+.CodeRay .variable{color:#036}
+.CodeRay .insert{background:#afa}
+.CodeRay .delete{background:#faa}
+.CodeRay .change{color:#aaf;background:#007}
+.CodeRay .head{color:#f8f;background:#505}
+.CodeRay .insert .insert{color:#080}
+.CodeRay .delete .delete{color:#800}
+.CodeRay .change .change{color:#66f}
+.CodeRay .head .head{color:#f4f}
+</style>
+</head>
+<body class="article">
+<div id="header">
+</div>
+<div id="content">
+<div class="sect1">
+<h2 id="cw000003-null-parameter"><a class="anchor" href="#cw000003-null-parameter"></a>CW000003: Null Parameter</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>This error indicates you’ve passed a <code>null</code> parameter where a <code>non-null</code> value
+is required.</p>
+</div>
+</div>
+</div>
+</div>
+<script src="js/links.js"></script>
+<script>
+    window.onload=annotationLinks;
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/examples/errors/CW000100.html b/docs/examples/errors/CW000100.html
new file mode 100644
index 0000000..587dd5c
--- /dev/null
+++ b/docs/examples/errors/CW000100.html
@@ -0,0 +1,532 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 1.5.5">
+<title>CW000100: Close Failure</title>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
+<style>
+/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
+/* Remove comment around @import statement below when using as a custom stylesheet */
+/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
+audio,canvas,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+[hidden],template{display:none}
+script{display:none!important}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+a{background:transparent}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
+input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.center{margin-left:auto;margin-right:auto}
+.spread{width:100%}
+p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:none}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ul.no-bullet{list-style:none}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite:before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+ at media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
+table thead,table tfoot{background:#f7f8f7;font-weight:bold}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table}
+.clearfix:after,.float-group:after{clear:both}
+*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
+*:not(pre)>code.nobreak{word-wrap:normal}
+*:not(pre)>code.nowrap{white-space:nowrap}
+pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menu{color:rgba(0,0,0,.8)}
+b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}
+b.button:before{content:"[";padding:0 3px 0 2px}
+b.button:after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table}
+#header:after,#content:after,#footnotes:after,#footer:after{clear:both}
+#content{margin-top:1.25em}
+#content:before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
+#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span:before{content:"\00a0\2013\00a0"}
+#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark:before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber:after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{text-decoration:none}
+#toc a:active{text-decoration:underline}
+#toctitle{color:#7a2518;font-size:1.2em}
+ at media only screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
+ at media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{font-size:1.375em}
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+.sect1{padding-bottom:.625em}
+ at media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}
+.sect1+.sect1{border-top:1px solid #efefed}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}
+.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
+.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
+.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
+.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
+ at media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
+ at media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
+.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
+.listingblock:hover code[data-lang]:before{display:block}
+.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999}
+.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}
+table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
+table.pyhltable td.code{padding-left:.75em;padding-right:0}
+pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
+pre.pygments .lineno{display:inline-block;margin-right:.25em}
+table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
+.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
+.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
+.quoteblock .quoteblock blockquote:before{display:none}
+.verseblock{margin:0 1em 1.25em 1em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract{margin:0 0 1.25em 0;display:block}
+.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0}
+.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none}
+table.tableblock{max-width:100%;border-collapse:separate}
+table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0}
+table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0}
+table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0}
+table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0}
+table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0}
+table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0}
+table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot{border-width:1px 0}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+td>div.verse{white-space:pre}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none}
+ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em}
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px}
+ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}
+ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}
+ul.inline>li>*{display:block}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1}
+.colist>table tr>td:last-of-type{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
+.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background-color:#00fafa}
+.black{color:#000}
+.black-background{background-color:#000}
+.blue{color:#0000bf}
+.blue-background{background-color:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background-color:#fa00fa}
+.gray{color:#606060}
+.gray-background{background-color:#7d7d7d}
+.green{color:#006000}
+.green-background{background-color:#007d00}
+.lime{color:#00bf00}
+.lime-background{background-color:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background-color:#7d0000}
+.navy{color:#000060}
+.navy-background{background-color:#00007d}
+.olive{color:#606000}
+.olive-background{background-color:#7d7d00}
+.purple{color:#600060}
+.purple-background{background-color:#7d007d}
+.red{color:#bf0000}
+.red-background{background-color:#fa0000}
+.silver{color:#909090}
+.silver-background{background-color:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background-color:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background-color:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background-color:#fafa00}
+span.icon>.fa{cursor:default}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]:after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+ at media print{@page{margin:1.25cm .75cm}
+*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]:after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
+.sect1{padding-bottom:0!important}
+.sect1+.sect1{border:0!important}
+#header>h1:first-child{margin-top:1.25rem}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span:before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]:before{display:block}
+#footer{background:none!important;padding:0 .9375em}
+#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<style>
+/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*pre.CodeRay {background-color:#f7f7f8;}*/
+.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
+.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
+.CodeRay .line-numbers strong{color:rgba(0,0,0,.4)}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top;line-height:1.45}
+table.CodeRay td.line-numbers{text-align:right}
+table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
+table.CodeRay td.code{padding:0 0 0 .5em}
+table.CodeRay td.code>pre{padding:0}
+.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .annotation{color:#007}
+.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-value{color:#700}
+.CodeRay .binary{color:#509}
+.CodeRay .comment{color:#998;font-style:italic}
+.CodeRay .char{color:#04d}
+.CodeRay .char .content{color:#04d}
+.CodeRay .char .delimiter{color:#039}
+.CodeRay .class{color:#458;font-weight:bold}
+.CodeRay .complex{color:#a08}
+.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .color{color:#099}
+.CodeRay .class-variable{color:#369}
+.CodeRay .decorator{color:#b0b}
+.CodeRay .definition{color:#099}
+.CodeRay .delimiter{color:#000}
+.CodeRay .doc{color:#970}
+.CodeRay .doctype{color:#34b}
+.CodeRay .doc-string{color:#d42}
+.CodeRay .escape{color:#666}
+.CodeRay .entity{color:#800}
+.CodeRay .error{color:#808}
+.CodeRay .exception{color:inherit}
+.CodeRay .filename{color:#099}
+.CodeRay .function{color:#900;font-weight:bold}
+.CodeRay .global-variable{color:#008080}
+.CodeRay .hex{color:#058}
+.CodeRay .integer,.CodeRay .float{color:#099}
+.CodeRay .include{color:#555}
+.CodeRay .inline{color:#000}
+.CodeRay .inline .inline{background:#ccc}
+.CodeRay .inline .inline .inline{background:#bbb}
+.CodeRay .inline .inline-delimiter{color:#d14}
+.CodeRay .inline-delimiter{color:#d14}
+.CodeRay .important{color:#555;font-weight:bold}
+.CodeRay .interpreted{color:#b2b}
+.CodeRay .instance-variable{color:#008080}
+.CodeRay .label{color:#970}
+.CodeRay .local-variable{color:#963}
+.CodeRay .octal{color:#40e}
+.CodeRay .predefined{color:#369}
+.CodeRay .preprocessor{color:#579}
+.CodeRay .pseudo-class{color:#555}
+.CodeRay .directive{font-weight:bold}
+.CodeRay .type{font-weight:bold}
+.CodeRay .predefined-type{color:inherit}
+.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .key{color:#808}
+.CodeRay .key .delimiter{color:#606}
+.CodeRay .key .char{color:#80f}
+.CodeRay .value{color:#088}
+.CodeRay .regexp .delimiter{color:#808}
+.CodeRay .regexp .content{color:#808}
+.CodeRay .regexp .modifier{color:#808}
+.CodeRay .regexp .char{color:#d14}
+.CodeRay .regexp .function{color:#404;font-weight:bold}
+.CodeRay .string{color:#d20}
+.CodeRay .string .string .string{background:#ffd0d0}
+.CodeRay .string .content{color:#d14}
+.CodeRay .string .char{color:#d14}
+.CodeRay .string .delimiter{color:#d14}
+.CodeRay .shell{color:#d14}
+.CodeRay .shell .delimiter{color:#d14}
+.CodeRay .symbol{color:#990073}
+.CodeRay .symbol .content{color:#a60}
+.CodeRay .symbol .delimiter{color:#630}
+.CodeRay .tag{color:#008080}
+.CodeRay .tag-special{color:#d70}
+.CodeRay .variable{color:#036}
+.CodeRay .insert{background:#afa}
+.CodeRay .delete{background:#faa}
+.CodeRay .change{color:#aaf;background:#007}
+.CodeRay .head{color:#f8f;background:#505}
+.CodeRay .insert .insert{color:#080}
+.CodeRay .delete .delete{color:#800}
+.CodeRay .change .change{color:#66f}
+.CodeRay .head .head{color:#f4f}
+</style>
+</head>
+<body class="article">
+<div id="header">
+</div>
+<div id="content">
+<div class="sect1">
+<h2 id="cw000100-close-failure"><a class="anchor" href="#cw000100-close-failure"></a>CW000100: Close Failure</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>This error indicates there was a failure closing a resource. Please see previous error messages and contact support if
+required.</p>
+</div>
+</div>
+</div>
+</div>
+<script src="js/links.js"></script>
+<script>
+    window.onload=annotationLinks;
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/examples/errors/CW000101.html b/docs/examples/errors/CW000101.html
new file mode 100644
index 0000000..f539cab
--- /dev/null
+++ b/docs/examples/errors/CW000101.html
@@ -0,0 +1,532 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 1.5.5">
+<title>CW000101: Encoding Error</title>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
+<style>
+/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
+/* Remove comment around @import statement below when using as a custom stylesheet */
+/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
+audio,canvas,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+[hidden],template{display:none}
+script{display:none!important}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+a{background:transparent}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
+input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.center{margin-left:auto;margin-right:auto}
+.spread{width:100%}
+p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:none}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ul.no-bullet{list-style:none}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite:before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+ at media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
+table thead,table tfoot{background:#f7f8f7;font-weight:bold}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table}
+.clearfix:after,.float-group:after{clear:both}
+*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
+*:not(pre)>code.nobreak{word-wrap:normal}
+*:not(pre)>code.nowrap{white-space:nowrap}
+pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menu{color:rgba(0,0,0,.8)}
+b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}
+b.button:before{content:"[";padding:0 3px 0 2px}
+b.button:after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table}
+#header:after,#content:after,#footnotes:after,#footer:after{clear:both}
+#content{margin-top:1.25em}
+#content:before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
+#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span:before{content:"\00a0\2013\00a0"}
+#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark:before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber:after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{text-decoration:none}
+#toc a:active{text-decoration:underline}
+#toctitle{color:#7a2518;font-size:1.2em}
+ at media only screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
+ at media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{font-size:1.375em}
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+.sect1{padding-bottom:.625em}
+ at media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}
+.sect1+.sect1{border-top:1px solid #efefed}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}
+.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
+.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
+.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
+.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
+ at media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
+ at media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
+.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
+.listingblock:hover code[data-lang]:before{display:block}
+.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999}
+.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}
+table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
+table.pyhltable td.code{padding-left:.75em;padding-right:0}
+pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
+pre.pygments .lineno{display:inline-block;margin-right:.25em}
+table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
+.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
+.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
+.quoteblock .quoteblock blockquote:before{display:none}
+.verseblock{margin:0 1em 1.25em 1em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract{margin:0 0 1.25em 0;display:block}
+.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0}
+.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none}
+table.tableblock{max-width:100%;border-collapse:separate}
+table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0}
+table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0}
+table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0}
+table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0}
+table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0}
+table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0}
+table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot{border-width:1px 0}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+td>div.verse{white-space:pre}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none}
+ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em}
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px}
+ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}
+ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}
+ul.inline>li>*{display:block}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1}
+.colist>table tr>td:last-of-type{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
+.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background-color:#00fafa}
+.black{color:#000}
+.black-background{background-color:#000}
+.blue{color:#0000bf}
+.blue-background{background-color:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background-color:#fa00fa}
+.gray{color:#606060}
+.gray-background{background-color:#7d7d7d}
+.green{color:#006000}
+.green-background{background-color:#007d00}
+.lime{color:#00bf00}
+.lime-background{background-color:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background-color:#7d0000}
+.navy{color:#000060}
+.navy-background{background-color:#00007d}
+.olive{color:#606000}
+.olive-background{background-color:#7d7d00}
+.purple{color:#600060}
+.purple-background{background-color:#7d007d}
+.red{color:#bf0000}
+.red-background{background-color:#fa0000}
+.silver{color:#909090}
+.silver-background{background-color:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background-color:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background-color:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background-color:#fafa00}
+span.icon>.fa{cursor:default}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]:after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+ at media print{@page{margin:1.25cm .75cm}
+*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]:after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
+.sect1{padding-bottom:0!important}
+.sect1+.sect1{border:0!important}
+#header>h1:first-child{margin-top:1.25rem}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span:before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]:before{display:block}
+#footer{background:none!important;padding:0 .9375em}
+#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<style>
+/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*pre.CodeRay {background-color:#f7f7f8;}*/
+.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
+.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
+.CodeRay .line-numbers strong{color:rgba(0,0,0,.4)}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top;line-height:1.45}
+table.CodeRay td.line-numbers{text-align:right}
+table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
+table.CodeRay td.code{padding:0 0 0 .5em}
+table.CodeRay td.code>pre{padding:0}
+.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .annotation{color:#007}
+.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-value{color:#700}
+.CodeRay .binary{color:#509}
+.CodeRay .comment{color:#998;font-style:italic}
+.CodeRay .char{color:#04d}
+.CodeRay .char .content{color:#04d}
+.CodeRay .char .delimiter{color:#039}
+.CodeRay .class{color:#458;font-weight:bold}
+.CodeRay .complex{color:#a08}
+.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .color{color:#099}
+.CodeRay .class-variable{color:#369}
+.CodeRay .decorator{color:#b0b}
+.CodeRay .definition{color:#099}
+.CodeRay .delimiter{color:#000}
+.CodeRay .doc{color:#970}
+.CodeRay .doctype{color:#34b}
+.CodeRay .doc-string{color:#d42}
+.CodeRay .escape{color:#666}
+.CodeRay .entity{color:#800}
+.CodeRay .error{color:#808}
+.CodeRay .exception{color:inherit}
+.CodeRay .filename{color:#099}
+.CodeRay .function{color:#900;font-weight:bold}
+.CodeRay .global-variable{color:#008080}
+.CodeRay .hex{color:#058}
+.CodeRay .integer,.CodeRay .float{color:#099}
+.CodeRay .include{color:#555}
+.CodeRay .inline{color:#000}
+.CodeRay .inline .inline{background:#ccc}
+.CodeRay .inline .inline .inline{background:#bbb}
+.CodeRay .inline .inline-delimiter{color:#d14}
+.CodeRay .inline-delimiter{color:#d14}
+.CodeRay .important{color:#555;font-weight:bold}
+.CodeRay .interpreted{color:#b2b}
+.CodeRay .instance-variable{color:#008080}
+.CodeRay .label{color:#970}
+.CodeRay .local-variable{color:#963}
+.CodeRay .octal{color:#40e}
+.CodeRay .predefined{color:#369}
+.CodeRay .preprocessor{color:#579}
+.CodeRay .pseudo-class{color:#555}
+.CodeRay .directive{font-weight:bold}
+.CodeRay .type{font-weight:bold}
+.CodeRay .predefined-type{color:inherit}
+.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .key{color:#808}
+.CodeRay .key .delimiter{color:#606}
+.CodeRay .key .char{color:#80f}
+.CodeRay .value{color:#088}
+.CodeRay .regexp .delimiter{color:#808}
+.CodeRay .regexp .content{color:#808}
+.CodeRay .regexp .modifier{color:#808}
+.CodeRay .regexp .char{color:#d14}
+.CodeRay .regexp .function{color:#404;font-weight:bold}
+.CodeRay .string{color:#d20}
+.CodeRay .string .string .string{background:#ffd0d0}
+.CodeRay .string .content{color:#d14}
+.CodeRay .string .char{color:#d14}
+.CodeRay .string .delimiter{color:#d14}
+.CodeRay .shell{color:#d14}
+.CodeRay .shell .delimiter{color:#d14}
+.CodeRay .symbol{color:#990073}
+.CodeRay .symbol .content{color:#a60}
+.CodeRay .symbol .delimiter{color:#630}
+.CodeRay .tag{color:#008080}
+.CodeRay .tag-special{color:#d70}
+.CodeRay .variable{color:#036}
+.CodeRay .insert{background:#afa}
+.CodeRay .delete{background:#faa}
+.CodeRay .change{color:#aaf;background:#007}
+.CodeRay .head{color:#f8f;background:#505}
+.CodeRay .insert .insert{color:#080}
+.CodeRay .delete .delete{color:#800}
+.CodeRay .change .change{color:#66f}
+.CodeRay .head .head{color:#f4f}
+</style>
+</head>
+<body class="article">
+<div id="header">
+</div>
+<div id="content">
+<div class="sect1">
+<h2 id="cw000101-encoding-error"><a class="anchor" href="#cw000101-encoding-error"></a>CW000101: Encoding Error</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>This error indicates an invalid encoding is attempting to be used and a default encoding of UTF-8 will be used. You can
+fix this by setting a valid encoding value.</p>
+</div>
+</div>
+</div>
+</div>
+<script src="js/links.js"></script>
+<script>
+    window.onload=annotationLinks;
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/expressions.html b/docs/expressions.html
new file mode 100644
index 0000000..ccc6db6
--- /dev/null
+++ b/docs/expressions.html
@@ -0,0 +1,550 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 1.5.5">
+<title>Untitled</title>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
+<style>
+/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
+/* Remove comment around @import statement below when using as a custom stylesheet */
+/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
+audio,canvas,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+[hidden],template{display:none}
+script{display:none!important}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+a{background:transparent}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
+input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.center{margin-left:auto;margin-right:auto}
+.spread{width:100%}
+p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:none}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ul.no-bullet{list-style:none}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite:before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+ at media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
+table thead,table tfoot{background:#f7f8f7;font-weight:bold}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table}
+.clearfix:after,.float-group:after{clear:both}
+*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
+*:not(pre)>code.nobreak{word-wrap:normal}
+*:not(pre)>code.nowrap{white-space:nowrap}
+pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menu{color:rgba(0,0,0,.8)}
+b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}
+b.button:before{content:"[";padding:0 3px 0 2px}
+b.button:after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table}
+#header:after,#content:after,#footnotes:after,#footer:after{clear:both}
+#content{margin-top:1.25em}
+#content:before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
+#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span:before{content:"\00a0\2013\00a0"}
+#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark:before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber:after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{text-decoration:none}
+#toc a:active{text-decoration:underline}
+#toctitle{color:#7a2518;font-size:1.2em}
+ at media only screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
+ at media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{font-size:1.375em}
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+.sect1{padding-bottom:.625em}
+ at media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}
+.sect1+.sect1{border-top:1px solid #efefed}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}
+.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
+.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
+.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
+.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
+ at media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
+ at media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
+.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
+.listingblock:hover code[data-lang]:before{display:block}
+.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999}
+.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}
+table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
+table.pyhltable td.code{padding-left:.75em;padding-right:0}
+pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
+pre.pygments .lineno{display:inline-block;margin-right:.25em}
+table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
+.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
+.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
+.quoteblock .quoteblock blockquote:before{display:none}
+.verseblock{margin:0 1em 1.25em 1em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract{margin:0 0 1.25em 0;display:block}
+.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0}
+.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none}
+table.tableblock{max-width:100%;border-collapse:separate}
+table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0}
+table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0}
+table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0}
+table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0}
+table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0}
+table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0}
+table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot{border-width:1px 0}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+td>div.verse{white-space:pre}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none}
+ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em}
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px}
+ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}
+ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}
+ul.inline>li>*{display:block}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1}
+.colist>table tr>td:last-of-type{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
+.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background-color:#00fafa}
+.black{color:#000}
+.black-background{background-color:#000}
+.blue{color:#0000bf}
+.blue-background{background-color:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background-color:#fa00fa}
+.gray{color:#606060}
+.gray-background{background-color:#7d7d7d}
+.green{color:#006000}
+.green-background{background-color:#007d00}
+.lime{color:#00bf00}
+.lime-background{background-color:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background-color:#7d0000}
+.navy{color:#000060}
+.navy-background{background-color:#00007d}
+.olive{color:#606000}
+.olive-background{background-color:#7d7d00}
+.purple{color:#600060}
+.purple-background{background-color:#7d007d}
+.red{color:#bf0000}
+.red-background{background-color:#fa0000}
+.silver{color:#909090}
+.silver-background{background-color:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background-color:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background-color:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background-color:#fafa00}
+span.icon>.fa{cursor:default}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]:after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+ at media print{@page{margin:1.25cm .75cm}
+*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]:after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
+.sect1{padding-bottom:0!important}
+.sect1+.sect1{border:0!important}
+#header>h1:first-child{margin-top:1.25rem}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span:before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]:before{display:block}
+#footer{background:none!important;padding:0 .9375em}
+#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<style>
+/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*pre.CodeRay {background-color:#f7f7f8;}*/
+.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
+.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
+.CodeRay .line-numbers strong{color:rgba(0,0,0,.4)}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top;line-height:1.45}
+table.CodeRay td.line-numbers{text-align:right}
+table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
+table.CodeRay td.code{padding:0 0 0 .5em}
+table.CodeRay td.code>pre{padding:0}
+.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .annotation{color:#007}
+.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-value{color:#700}
+.CodeRay .binary{color:#509}
+.CodeRay .comment{color:#998;font-style:italic}
+.CodeRay .char{color:#04d}
+.CodeRay .char .content{color:#04d}
+.CodeRay .char .delimiter{color:#039}
+.CodeRay .class{color:#458;font-weight:bold}
+.CodeRay .complex{color:#a08}
+.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .color{color:#099}
+.CodeRay .class-variable{color:#369}
+.CodeRay .decorator{color:#b0b}
+.CodeRay .definition{color:#099}
+.CodeRay .delimiter{color:#000}
+.CodeRay .doc{color:#970}
+.CodeRay .doctype{color:#34b}
+.CodeRay .doc-string{color:#d42}
+.CodeRay .escape{color:#666}
+.CodeRay .entity{color:#800}
+.CodeRay .error{color:#808}
+.CodeRay .exception{color:inherit}
+.CodeRay .filename{color:#099}
+.CodeRay .function{color:#900;font-weight:bold}
+.CodeRay .global-variable{color:#008080}
+.CodeRay .hex{color:#058}
+.CodeRay .integer,.CodeRay .float{color:#099}
+.CodeRay .include{color:#555}
+.CodeRay .inline{color:#000}
+.CodeRay .inline .inline{background:#ccc}
+.CodeRay .inline .inline .inline{background:#bbb}
+.CodeRay .inline .inline-delimiter{color:#d14}
+.CodeRay .inline-delimiter{color:#d14}
+.CodeRay .important{color:#555;font-weight:bold}
+.CodeRay .interpreted{color:#b2b}
+.CodeRay .instance-variable{color:#008080}
+.CodeRay .label{color:#970}
+.CodeRay .local-variable{color:#963}
+.CodeRay .octal{color:#40e}
+.CodeRay .predefined{color:#369}
+.CodeRay .preprocessor{color:#579}
+.CodeRay .pseudo-class{color:#555}
+.CodeRay .directive{font-weight:bold}
+.CodeRay .type{font-weight:bold}
+.CodeRay .predefined-type{color:inherit}
+.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .key{color:#808}
+.CodeRay .key .delimiter{color:#606}
+.CodeRay .key .char{color:#80f}
+.CodeRay .value{color:#088}
+.CodeRay .regexp .delimiter{color:#808}
+.CodeRay .regexp .content{color:#808}
+.CodeRay .regexp .modifier{color:#808}
+.CodeRay .regexp .char{color:#d14}
+.CodeRay .regexp .function{color:#404;font-weight:bold}
+.CodeRay .string{color:#d20}
+.CodeRay .string .string .string{background:#ffd0d0}
+.CodeRay .string .content{color:#d14}
+.CodeRay .string .char{color:#d14}
+.CodeRay .string .delimiter{color:#d14}
+.CodeRay .shell{color:#d14}
+.CodeRay .shell .delimiter{color:#d14}
+.CodeRay .symbol{color:#990073}
+.CodeRay .symbol .content{color:#a60}
+.CodeRay .symbol .delimiter{color:#630}
+.CodeRay .tag{color:#008080}
+.CodeRay .tag-special{color:#d70}
+.CodeRay .variable{color:#036}
+.CodeRay .insert{background:#afa}
+.CodeRay .delete{background:#faa}
+.CodeRay .change{color:#aaf;background:#007}
+.CodeRay .head{color:#f8f;background:#505}
+.CodeRay .insert .insert{color:#080}
+.CodeRay .delete .delete{color:#800}
+.CodeRay .change .change{color:#66f}
+.CodeRay .head .head{color:#f4f}
+</style>
+</head>
+<body class="article">
+<div id="header">
+</div>
+<div id="content">
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+Expressions are in the form of <code>${key:defaultValue}</code>. If the key is prefixed with <code>sys.</code> a system property is
+used. If the key is prefixed with <code>env.</code> an environment variable is used. In all other cases the properties are resolved
+from the <code>org.jboss.logging.tools.expressionProperties</code> path. If the key is not found in the properties the default
+value will be used.
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+Expressions are processed at compile time. The values will be hard-coded in the generated source files.
+</td>
+</tr>
+</table>
+</div>
+</div>
+<script src="js/links.js"></script>
+<script>
+    window.onload=annotationLinks;
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/getting-started.html b/docs/getting-started.html
new file mode 100644
index 0000000..ee2db84
--- /dev/null
+++ b/docs/getting-started.html
@@ -0,0 +1,588 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 1.5.5">
+<title>Getting Started</title>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
+<style>
+/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
+/* Remove comment around @import statement below when using as a custom stylesheet */
+/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
+audio,canvas,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+[hidden],template{display:none}
+script{display:none!important}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+a{background:transparent}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
+input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.center{margin-left:auto;margin-right:auto}
+.spread{width:100%}
+p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:none}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ul.no-bullet{list-style:none}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite:before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+ at media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
+table thead,table tfoot{background:#f7f8f7;font-weight:bold}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table}
+.clearfix:after,.float-group:after{clear:both}
+*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
+*:not(pre)>code.nobreak{word-wrap:normal}
+*:not(pre)>code.nowrap{white-space:nowrap}
+pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menu{color:rgba(0,0,0,.8)}
+b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}
+b.button:before{content:"[";padding:0 3px 0 2px}
+b.button:after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table}
+#header:after,#content:after,#footnotes:after,#footer:after{clear:both}
+#content{margin-top:1.25em}
+#content:before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
+#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span:before{content:"\00a0\2013\00a0"}
+#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark:before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber:after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{text-decoration:none}
+#toc a:active{text-decoration:underline}
+#toctitle{color:#7a2518;font-size:1.2em}
+ at media only screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
+ at media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{font-size:1.375em}
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+.sect1{padding-bottom:.625em}
+ at media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}
+.sect1+.sect1{border-top:1px solid #efefed}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}
+.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
+.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
+.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
+.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
+ at media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
+ at media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
+.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
+.listingblock:hover code[data-lang]:before{display:block}
+.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999}
+.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}
+table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
+table.pyhltable td.code{padding-left:.75em;padding-right:0}
+pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
+pre.pygments .lineno{display:inline-block;margin-right:.25em}
+table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
+.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
+.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
+.quoteblock .quoteblock blockquote:before{display:none}
+.verseblock{margin:0 1em 1.25em 1em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract{margin:0 0 1.25em 0;display:block}
+.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0}
+.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none}
+table.tableblock{max-width:100%;border-collapse:separate}
+table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0}
+table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0}
+table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0}
+table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0}
+table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0}
+table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0}
+table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot{border-width:1px 0}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+td>div.verse{white-space:pre}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none}
+ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em}
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px}
+ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}
+ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}
+ul.inline>li>*{display:block}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1}
+.colist>table tr>td:last-of-type{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
+.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background-color:#00fafa}
+.black{color:#000}
+.black-background{background-color:#000}
+.blue{color:#0000bf}
+.blue-background{background-color:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background-color:#fa00fa}
+.gray{color:#606060}
+.gray-background{background-color:#7d7d7d}
+.green{color:#006000}
+.green-background{background-color:#007d00}
+.lime{color:#00bf00}
+.lime-background{background-color:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background-color:#7d0000}
+.navy{color:#000060}
+.navy-background{background-color:#00007d}
+.olive{color:#606000}
+.olive-background{background-color:#7d7d00}
+.purple{color:#600060}
+.purple-background{background-color:#7d007d}
+.red{color:#bf0000}
+.red-background{background-color:#fa0000}
+.silver{color:#909090}
+.silver-background{background-color:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background-color:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background-color:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background-color:#fafa00}
+span.icon>.fa{cursor:default}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]:after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+ at media print{@page{margin:1.25cm .75cm}
+*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]:after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
+.sect1{padding-bottom:0!important}
+.sect1+.sect1{border:0!important}
+#header>h1:first-child{margin-top:1.25rem}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span:before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]:before{display:block}
+#footer{background:none!important;padding:0 .9375em}
+#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<style>
+/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*pre.CodeRay {background-color:#f7f7f8;}*/
+.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
+.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
+.CodeRay .line-numbers strong{color:rgba(0,0,0,.4)}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top;line-height:1.45}
+table.CodeRay td.line-numbers{text-align:right}
+table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
+table.CodeRay td.code{padding:0 0 0 .5em}
+table.CodeRay td.code>pre{padding:0}
+.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .annotation{color:#007}
+.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-value{color:#700}
+.CodeRay .binary{color:#509}
+.CodeRay .comment{color:#998;font-style:italic}
+.CodeRay .char{color:#04d}
+.CodeRay .char .content{color:#04d}
+.CodeRay .char .delimiter{color:#039}
+.CodeRay .class{color:#458;font-weight:bold}
+.CodeRay .complex{color:#a08}
+.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .color{color:#099}
+.CodeRay .class-variable{color:#369}
+.CodeRay .decorator{color:#b0b}
+.CodeRay .definition{color:#099}
+.CodeRay .delimiter{color:#000}
+.CodeRay .doc{color:#970}
+.CodeRay .doctype{color:#34b}
+.CodeRay .doc-string{color:#d42}
+.CodeRay .escape{color:#666}
+.CodeRay .entity{color:#800}
+.CodeRay .error{color:#808}
+.CodeRay .exception{color:inherit}
+.CodeRay .filename{color:#099}
+.CodeRay .function{color:#900;font-weight:bold}
+.CodeRay .global-variable{color:#008080}
+.CodeRay .hex{color:#058}
+.CodeRay .integer,.CodeRay .float{color:#099}
+.CodeRay .include{color:#555}
+.CodeRay .inline{color:#000}
+.CodeRay .inline .inline{background:#ccc}
+.CodeRay .inline .inline .inline{background:#bbb}
+.CodeRay .inline .inline-delimiter{color:#d14}
+.CodeRay .inline-delimiter{color:#d14}
+.CodeRay .important{color:#555;font-weight:bold}
+.CodeRay .interpreted{color:#b2b}
+.CodeRay .instance-variable{color:#008080}
+.CodeRay .label{color:#970}
+.CodeRay .local-variable{color:#963}
+.CodeRay .octal{color:#40e}
+.CodeRay .predefined{color:#369}
+.CodeRay .preprocessor{color:#579}
+.CodeRay .pseudo-class{color:#555}
+.CodeRay .directive{font-weight:bold}
+.CodeRay .type{font-weight:bold}
+.CodeRay .predefined-type{color:inherit}
+.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .key{color:#808}
+.CodeRay .key .delimiter{color:#606}
+.CodeRay .key .char{color:#80f}
+.CodeRay .value{color:#088}
+.CodeRay .regexp .delimiter{color:#808}
+.CodeRay .regexp .content{color:#808}
+.CodeRay .regexp .modifier{color:#808}
+.CodeRay .regexp .char{color:#d14}
+.CodeRay .regexp .function{color:#404;font-weight:bold}
+.CodeRay .string{color:#d20}
+.CodeRay .string .string .string{background:#ffd0d0}
+.CodeRay .string .content{color:#d14}
+.CodeRay .string .char{color:#d14}
+.CodeRay .string .delimiter{color:#d14}
+.CodeRay .shell{color:#d14}
+.CodeRay .shell .delimiter{color:#d14}
+.CodeRay .symbol{color:#990073}
+.CodeRay .symbol .content{color:#a60}
+.CodeRay .symbol .delimiter{color:#630}
+.CodeRay .tag{color:#008080}
+.CodeRay .tag-special{color:#d70}
+.CodeRay .variable{color:#036}
+.CodeRay .insert{background:#afa}
+.CodeRay .delete{background:#faa}
+.CodeRay .change{color:#aaf;background:#007}
+.CodeRay .head{color:#f8f;background:#505}
+.CodeRay .insert .insert{color:#080}
+.CodeRay .delete .delete{color:#800}
+.CodeRay .change .change{color:#66f}
+.CodeRay .head .head{color:#f4f}
+</style>
+</head>
+<body class="article">
+<div id="header">
+</div>
+<div id="content">
+<div class="sect1">
+<h2 id="getting-started"><a class="anchor" href="#getting-started"></a>Getting Started</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>To get started you need to include three dependencies in your project.</p>
+</div>
+<table class="tableblock frame-none grid-none spread">
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://repository.jboss.org/org/jboss/logging/jboss-logging/">JBoss Logging</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Required at compile time and runtime.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://repository.jboss.org/org/jboss/logging/jboss-logging-annotations/">JBoss Logging Annotations</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Required at compile time only.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://repository.jboss.org/org/jboss/logging/jboss-logging-processor/">JBoss Logging Processor</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Required at compile time only.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>If you’re using maven here is an example <code>pom.xml</code> snippet:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag"><dependencies></span>
+    <span class="comment"><!-- Required by the annotation processor and will be used at runtime --></span>
+    <span class="tag"><dependency></span>
+        <span class="tag"><groupId></span>org.jboss.logging<span class="tag"></groupId></span>
+        <span class="tag"><artifactId></span>jboss-logging<span class="tag"></artifactId></span>
+    <span class="tag"></dependency></span>
+
+    <span class="tag"><dependency></span>
+        <span class="tag"><groupId></span>org.jboss.logging<span class="tag"></groupId></span>
+        <span class="tag"><artifactId></span>jboss-logging-annotations<span class="tag"></artifactId></span>
+        <span class="tag"><version></span>2.1.0.Final<span class="tag"></version></span>
+        <span class="comment"><!-- This is a compile-time dependency of this project, but is not needed at compile or runtime by other
+              projects that depend on this project.--></span>
+        <span class="tag"><scope></span>provided<span class="tag"></scope></span>
+        <span class="tag"><optional></span>true<span class="tag"></optional></span>
+    <span class="tag"></dependency></span>
+
+    <span class="tag"><dependency></span>
+        <span class="tag"><groupId></span>org.jboss.logging<span class="tag"></groupId></span>
+        <span class="tag"><artifactId></span>jboss-logging-processor<span class="tag"></artifactId></span>
+        <span class="tag"><version></span>2.1.0.Final<span class="tag"></version></span>
+        <span class="comment"><!-- This is a compile-time dependency of this project, but is not needed at compile or runtime by other
+              projects that depend on this project.--></span>
+        <span class="tag"><scope></span>provided<span class="tag"></scope></span>
+        <span class="tag"><optional></span>true<span class="tag"></optional></span>
+    <span class="tag"></dependency></span>
+<span class="tag"></dependencies></span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Once your project is configured you can create either a <a href="#Message Bundle Interfaces">message bundle interface</a> or a <a href="#Message Logger Interfaces">message logger interface</a>. For detailed information see the <a href="apidocs/index.html">JavaDocs</a> for the annotations.</p>
+</div>
+</div>
+</div>
+</div>
+<script src="js/links.js"></script>
+<script>
+    window.onload=annotationLinks;
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/index.html b/docs/index.html
new file mode 100644
index 0000000..5486a5d
--- /dev/null
+++ b/docs/index.html
@@ -0,0 +1,1242 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 1.5.5">
+<meta name="author" content="James R. Perkins">
+<title>JBoss Logging Tools</title>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
+<style>
+/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
+/* Remove comment around @import statement below when using as a custom stylesheet */
+/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
+audio,canvas,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+[hidden],template{display:none}
+script{display:none!important}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+a{background:transparent}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
+input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.center{margin-left:auto;margin-right:auto}
+.spread{width:100%}
+p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:none}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ul.no-bullet{list-style:none}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite:before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+ at media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
+table thead,table tfoot{background:#f7f8f7;font-weight:bold}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table}
+.clearfix:after,.float-group:after{clear:both}
+*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
+*:not(pre)>code.nobreak{word-wrap:normal}
+*:not(pre)>code.nowrap{white-space:nowrap}
+pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menu{color:rgba(0,0,0,.8)}
+b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}
+b.button:before{content:"[";padding:0 3px 0 2px}
+b.button:after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table}
+#header:after,#content:after,#footnotes:after,#footer:after{clear:both}
+#content{margin-top:1.25em}
+#content:before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
+#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span:before{content:"\00a0\2013\00a0"}
+#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark:before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber:after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{text-decoration:none}
+#toc a:active{text-decoration:underline}
+#toctitle{color:#7a2518;font-size:1.2em}
+ at media only screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
+ at media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{font-size:1.375em}
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+.sect1{padding-bottom:.625em}
+ at media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}
+.sect1+.sect1{border-top:1px solid #efefed}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}
+.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
+.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
+.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
+.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
+ at media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
+ at media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
+.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
+.listingblock:hover code[data-lang]:before{display:block}
+.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999}
+.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}
+table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
+table.pyhltable td.code{padding-left:.75em;padding-right:0}
+pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
+pre.pygments .lineno{display:inline-block;margin-right:.25em}
+table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
+.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
+.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
+.quoteblock .quoteblock blockquote:before{display:none}
+.verseblock{margin:0 1em 1.25em 1em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract{margin:0 0 1.25em 0;display:block}
+.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0}
+.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none}
+table.tableblock{max-width:100%;border-collapse:separate}
+table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0}
+table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0}
+table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0}
+table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0}
+table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0}
+table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0}
+table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot{border-width:1px 0}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+td>div.verse{white-space:pre}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none}
+ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em}
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px}
+ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}
+ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}
+ul.inline>li>*{display:block}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1}
+.colist>table tr>td:last-of-type{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
+.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background-color:#00fafa}
+.black{color:#000}
+.black-background{background-color:#000}
+.blue{color:#0000bf}
+.blue-background{background-color:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background-color:#fa00fa}
+.gray{color:#606060}
+.gray-background{background-color:#7d7d7d}
+.green{color:#006000}
+.green-background{background-color:#007d00}
+.lime{color:#00bf00}
+.lime-background{background-color:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background-color:#7d0000}
+.navy{color:#000060}
+.navy-background{background-color:#00007d}
+.olive{color:#606000}
+.olive-background{background-color:#7d7d00}
+.purple{color:#600060}
+.purple-background{background-color:#7d007d}
+.red{color:#bf0000}
+.red-background{background-color:#fa0000}
+.silver{color:#909090}
+.silver-background{background-color:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background-color:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background-color:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background-color:#fafa00}
+span.icon>.fa{cursor:default}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]:after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+ at media print{@page{margin:1.25cm .75cm}
+*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]:after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
+.sect1{padding-bottom:0!important}
+.sect1+.sect1{border:0!important}
+#header>h1:first-child{margin-top:1.25rem}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span:before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]:before{display:block}
+#footer{background:none!important;padding:0 .9375em}
+#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<style>
+/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*pre.CodeRay {background-color:#f7f7f8;}*/
+.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
+.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
+.CodeRay .line-numbers strong{color:rgba(0,0,0,.4)}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top;line-height:1.45}
+table.CodeRay td.line-numbers{text-align:right}
+table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
+table.CodeRay td.code{padding:0 0 0 .5em}
+table.CodeRay td.code>pre{padding:0}
+.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .annotation{color:#007}
+.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-value{color:#700}
+.CodeRay .binary{color:#509}
+.CodeRay .comment{color:#998;font-style:italic}
+.CodeRay .char{color:#04d}
+.CodeRay .char .content{color:#04d}
+.CodeRay .char .delimiter{color:#039}
+.CodeRay .class{color:#458;font-weight:bold}
+.CodeRay .complex{color:#a08}
+.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .color{color:#099}
+.CodeRay .class-variable{color:#369}
+.CodeRay .decorator{color:#b0b}
+.CodeRay .definition{color:#099}
+.CodeRay .delimiter{color:#000}
+.CodeRay .doc{color:#970}
+.CodeRay .doctype{color:#34b}
+.CodeRay .doc-string{color:#d42}
+.CodeRay .escape{color:#666}
+.CodeRay .entity{color:#800}
+.CodeRay .error{color:#808}
+.CodeRay .exception{color:inherit}
+.CodeRay .filename{color:#099}
+.CodeRay .function{color:#900;font-weight:bold}
+.CodeRay .global-variable{color:#008080}
+.CodeRay .hex{color:#058}
+.CodeRay .integer,.CodeRay .float{color:#099}
+.CodeRay .include{color:#555}
+.CodeRay .inline{color:#000}
+.CodeRay .inline .inline{background:#ccc}
+.CodeRay .inline .inline .inline{background:#bbb}
+.CodeRay .inline .inline-delimiter{color:#d14}
+.CodeRay .inline-delimiter{color:#d14}
+.CodeRay .important{color:#555;font-weight:bold}
+.CodeRay .interpreted{color:#b2b}
+.CodeRay .instance-variable{color:#008080}
+.CodeRay .label{color:#970}
+.CodeRay .local-variable{color:#963}
+.CodeRay .octal{color:#40e}
+.CodeRay .predefined{color:#369}
+.CodeRay .preprocessor{color:#579}
+.CodeRay .pseudo-class{color:#555}
+.CodeRay .directive{font-weight:bold}
+.CodeRay .type{font-weight:bold}
+.CodeRay .predefined-type{color:inherit}
+.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .key{color:#808}
+.CodeRay .key .delimiter{color:#606}
+.CodeRay .key .char{color:#80f}
+.CodeRay .value{color:#088}
+.CodeRay .regexp .delimiter{color:#808}
+.CodeRay .regexp .content{color:#808}
+.CodeRay .regexp .modifier{color:#808}
+.CodeRay .regexp .char{color:#d14}
+.CodeRay .regexp .function{color:#404;font-weight:bold}
+.CodeRay .string{color:#d20}
+.CodeRay .string .string .string{background:#ffd0d0}
+.CodeRay .string .content{color:#d14}
+.CodeRay .string .char{color:#d14}
+.CodeRay .string .delimiter{color:#d14}
+.CodeRay .shell{color:#d14}
+.CodeRay .shell .delimiter{color:#d14}
+.CodeRay .symbol{color:#990073}
+.CodeRay .symbol .content{color:#a60}
+.CodeRay .symbol .delimiter{color:#630}
+.CodeRay .tag{color:#008080}
+.CodeRay .tag-special{color:#d70}
+.CodeRay .variable{color:#036}
+.CodeRay .insert{background:#afa}
+.CodeRay .delete{background:#faa}
+.CodeRay .change{color:#aaf;background:#007}
+.CodeRay .head{color:#f8f;background:#505}
+.CodeRay .insert .insert{color:#080}
+.CodeRay .delete .delete{color:#800}
+.CodeRay .change .change{color:#66f}
+.CodeRay .head .head{color:#f4f}
+</style>
+</head>
+<body class="article toc2 toc-left">
+<div id="header">
+<h1>JBoss Logging Tools</h1>
+<div class="details">
+<span id="author" class="author">James R. Perkins</span><br>
+<span id="email" class="email"><<a href="mailto:jperkins at redhat.com">jperkins at redhat.com</a>></span><br>
+<span id="revnumber">version 2.1.0.Final</span>
+</div>
+<div id="toc" class="toc2">
+<div id="toctitle">Table of Contents</div>
+<ul class="sectlevel1">
+<li><a href="#introduction">Introduction</a></li>
+<li><a href="#getting-started">Getting Started</a></li>
+<li><a href="#message-bundle-interfaces">Message Bundle Interfaces</a>
+<ul class="sectlevel2">
+<li><a href="#example-message-bundle">Example Message Bundle</a></li>
+</ul>
+</li>
+<li><a href="#message-logger-interfaces">Message Logger Interfaces</a>
+<ul class="sectlevel2">
+<li><a href="#example-message-logger">Example Message Logger</a></li>
+</ul>
+</li>
+<li><a href="#reports">Reports</a>
+<ul class="sectlevel2">
+<li><a href="#annotations">Annotations</a></li>
+</ul>
+</li>
+<li><a href="#example-use-cases">Example Use Cases</a></li>
+<li><a href="#translation-property-files">Translation Property Files</a></li>
+<li><a href="#annotation-processor-options">Annotation Processor Options</a>
+<ul class="sectlevel2">
+<li><a href="#general">General</a></li>
+<li><a href="#translation-options">Translation Options</a></li>
+<li><a href="#report-options">Report Options</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div id="content">
+<div class="sect1">
+<h2 id="introduction"><a class="anchor" href="#introduction"></a>Introduction</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The JBoss logging tools are used to create internationalized log statements and exceptions.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="getting-started"><a class="anchor" href="#getting-started"></a>Getting Started</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>To get started you need to include three dependencies in your project.</p>
+</div>
+<table class="tableblock frame-none grid-none spread">
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://repository.jboss.org/org/jboss/logging/jboss-logging/">JBoss Logging</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Required at compile time and runtime.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://repository.jboss.org/org/jboss/logging/jboss-logging-annotations/">JBoss Logging Annotations</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Required at compile time only.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://repository.jboss.org/org/jboss/logging/jboss-logging-processor/">JBoss Logging Processor</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Required at compile time only.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>If you’re using maven here is an example <code>pom.xml</code> snippet:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag"><dependencies></span>
+    <span class="comment"><!-- Required by the annotation processor and will be used at runtime --></span>
+    <span class="tag"><dependency></span>
+        <span class="tag"><groupId></span>org.jboss.logging<span class="tag"></groupId></span>
+        <span class="tag"><artifactId></span>jboss-logging<span class="tag"></artifactId></span>
+    <span class="tag"></dependency></span>
+
+    <span class="tag"><dependency></span>
+        <span class="tag"><groupId></span>org.jboss.logging<span class="tag"></groupId></span>
+        <span class="tag"><artifactId></span>jboss-logging-annotations<span class="tag"></artifactId></span>
+        <span class="tag"><version></span>2.1.0.Final<span class="tag"></version></span>
+        <span class="comment"><!-- This is a compile-time dependency of this project, but is not needed at compile or runtime by other
+              projects that depend on this project.--></span>
+        <span class="tag"><scope></span>provided<span class="tag"></scope></span>
+        <span class="tag"><optional></span>true<span class="tag"></optional></span>
+    <span class="tag"></dependency></span>
+
+    <span class="tag"><dependency></span>
+        <span class="tag"><groupId></span>org.jboss.logging<span class="tag"></groupId></span>
+        <span class="tag"><artifactId></span>jboss-logging-processor<span class="tag"></artifactId></span>
+        <span class="tag"><version></span>2.1.0.Final<span class="tag"></version></span>
+        <span class="comment"><!-- This is a compile-time dependency of this project, but is not needed at compile or runtime by other
+              projects that depend on this project.--></span>
+        <span class="tag"><scope></span>provided<span class="tag"></scope></span>
+        <span class="tag"><optional></span>true<span class="tag"></optional></span>
+    <span class="tag"></dependency></span>
+<span class="tag"></dependencies></span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Once your project is configured you can create either a <a href="#message-bundle-interfaces">message bundle interface</a> or a <a href="#message-logger-interfaces">message logger interface</a>. For detailed information see the <a href="apidocs/index.html">JavaDocs</a> for the annotations.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="message-bundle-interfaces"><a class="anchor" href="#message-bundle-interfaces"></a>Message Bundle Interfaces</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Message bundle interfaces provide a way to internationalize exceptions or strings. A message bundle interface is
+annotated with <a href="apidocs"><code>@MessageBundle</code></a>. Each method in must be annotated with <a href="apidocs"><code>@Message</code></a>
+which will be used to determine the String used for either the return type or the message for the exception being
+returned.</p>
+</div>
+<div class="paragraph">
+<p>The value for a <a href="apidocs"><code>@Message</code></a> may contain an expression.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+Expressions are in the form of <code>${key:defaultValue}</code>. If the key is prefixed with <code>sys.</code> a system property is
+used. If the key is prefixed with <code>env.</code> an environment variable is used. In all other cases the properties are resolved
+from the <code>org.jboss.logging.tools.expressionProperties</code> path. If the key is not found in the properties the default
+value will be used.
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+Expressions are processed at compile time. The values will be hard-coded in the generated source files.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>The following constraints are placed on methods in a message bundle:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>The return type must be one of the follow</p>
+<div class="ulist">
+<ul>
+<li>
+<p>A <code>java.lang.String</code></p>
+</li>
+<li>
+<p>A <code>java.lang.Throwable</code> or a subtype of <code>java.lang.Throwable</code></p>
+</li>
+<li>
+<p>A <code>java.lang.function.Supplier</code> who’s return type fits one of the other two constraints above.</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>The method must be annotated with <a href="apidocs"><code>@Message</code></a> or a message must be inheritable.</p>
+</li>
+<li>
+<p>A method can have only one <a href="apidocs"><code>@Cause</code></a> parameter.</p>
+</li>
+<li>
+<p>A method can only have one <a href="apidocs"><code>@Producer</code></a> parameter.</p>
+</li>
+</ul>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+A message is inheritable if the two methods have the same name and same number of format parameters.
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+A format parameter is a parameter that has no annotations or is annotated with one of the following annotations; <a href="apidocs"><code>@FormatWith</code></a>, <a href="apidocs"><code>@Pos</code></a> or <a href="apidocs"><code>@Transform</code></a>.
+</td>
+</tr>
+</table>
+</div>
+<div class="sect2">
+<h3 id="example-message-bundle"><a class="anchor" href="#example-message-bundle"></a>Example Message Bundle</h3>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@MessageBundle</span>(projectCode = <span class="string"><span class="delimiter">"</span><span class="content">CW</span><span class="delimiter">"</span></span>) <i class="conum" data-value="1"></i><b>(1)</b>
+<span class="directive">public</span> <span class="type">interface</span> <span class="class">ErrorMessages</span> {
+    ErrorMessages MESSAGES = Messages.getBundle(ErrorMessages.class);
+
+    <span class="annotation">@Message</span>(<span class="string"><span class="delimiter">"</span><span class="content">Version %d.%d.%d.%s</span><span class="delimiter">"</span></span>) <i class="conum" data-value="2"></i><b>(2)</b>
+    <span class="predefined-type">String</span> version(<span class="type">int</span> major, <span class="type">int</span> minor, <span class="type">int</span> macro, <span class="predefined-type">String</span> rel);
+
+    <span class="annotation">@Message</span>(id = <span class="integer">1</span>, value = <span class="string"><span class="delimiter">"</span><span class="content">Value '%s' is invalid</span><span class="delimiter">"</span></span>)
+    <span class="exception">IllegalArgumentException</span> invalidValue(<span class="predefined-type">Object</span> value);
+
+    <span class="annotation">@Message</span>(id = <span class="integer">2</span>, value = <span class="string"><span class="delimiter">"</span><span class="content">Failure closing %s</span><span class="delimiter">"</span></span>) <i class="conum" data-value="3"></i><b>(3)</b>
+    CloseException closeFailure(<span class="annotation">@Cause</span> <span class="predefined-type">Throwable</span> cause, <span class="annotation">@Param</span> <span class="annotation">@Pos</span>(<span class="integer">1</span>) <span class="predefined-type">Closeable</span> c);
+
+    CloseException closeFailure(<span class="annotation">@Cause</span> <span class="predefined-type">Throwable</span> cause, <span class="annotation">@Param</span> <span class="annotation">@Pos</span>(<span class="integer">1</span>) <span class="predefined-type">Closeable</span> c, <span class="annotation">@Suppressed</span> <span class="predefined-type">Throwable</span>... errors);
+
+    <span class="annotation">@Message</span>(id = <span class="integer">3</span>, value = <span class="string"><span class="delimiter">"</span><span class="content">Parameter %s cannot be null</span><span class="delimiter">"</span></span>)
+    Supplier<<span class="predefined-type">String</span>> nullParam(<span class="predefined-type">String</span> name);
+
+    <span class="annotation">@Message</span>(id = <span class="integer">4</span>, value = <span class="string"><span class="delimiter">"</span><span class="content">Operation %s failed.</span><span class="delimiter">"</span></span>)
+    <T <span class="directive">extends</span> <span class="exception">RuntimeException</span>> T operationFailed(<span class="annotation">@Producer</span> Function<<span class="predefined-type">String</span>, T> fn, <span class="predefined-type">String</span> name); <i class="conum" data-value="4"></i><b>(4)</b>
+
+    <T <span class="directive">extends</span> <span class="exception">RuntimeException</span>> T operationFailed(<span class="annotation">@Producer</span> BiFunction<<span class="predefined-type">String</span>, <span class="exception">IOException</span>, T> fn, <span class="annotation">@Cause</span> <span class="exception">IOException</span> cause, <span class="predefined-type">String</span> name);
+}</code></pre>
+</div>
+</div>
+<div class="colist arabic">
+<table>
+<tr>
+<td><i class="conum" data-value="1"></i><b>1</b></td>
+<td>The <code>projectCode</code> will be prepended to messages which have an <code>id</code> specified. For example with <code>id = 1</code> the message will be prepended with <code>CW000001</code>. You can control the number padding with the <code>length</code> property on the annotation.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="2"></i><b>2</b></td>
+<td>No <code>id</code> is specified for this message which means no id will be prepended on this message.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="3"></i><b>3</b></td>
+<td>The <code>@Param</code> annotation tells the generator that the parameter should be used to construct the <code>CloseException</code>. The <code>@Pos(1)</code> annotation indicates the parameter should also be used when formatting the message.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="4"></i><b>4</b></td>
+<td>The <code>@Producer</code> annotation indicates that the <code>Function</code> should be used to create the exception being returned.</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock tip">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-tip" title="Tip"></i>
+</td>
+<td class="content">
+Message bundle interfaces can also contain valid <a href="#message-logger-interfaces">message logger methods</a>.
+</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="message-logger-interfaces"><a class="anchor" href="#message-logger-interfaces"></a>Message Logger Interfaces</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Logger interfaces provide a way to internationalize log messages. A logger interface is an interface annotated with
+<a href="apidocs"><code>@MessageLogger</code></a>. Each method in must be annotated with <a href="apidocs"><code>@Message</code></a> which will
+be used to determine the message to be logged.</p>
+</div>
+<div class="paragraph">
+<p>The value for a <a href="apidocs"><code>@Message</code></a> may contain an expression.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+Expressions are in the form of <code>${key:defaultValue}</code>. If the key is prefixed with <code>sys.</code> a system property is
+used. If the key is prefixed with <code>env.</code> an environment variable is used. In all other cases the properties are resolved
+from the <code>org.jboss.logging.tools.expressionProperties</code> path. If the key is not found in the properties the default
+value will be used.
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+Expressions are processed at compile time. The values will be hard-coded in the generated source files.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>The following constraints are placed on methods in a message logger:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>The method must have a <code>void</code> return type</p>
+</li>
+<li>
+<p>The method must be annotated with <a href="apidocs"><code>@LogMessage</code></a></p>
+</li>
+<li>
+<p>The method must be annotated with <a href="apidocs"><code>@Message</code></a> or a message must be inheritable.</p>
+</li>
+<li>
+<p>A method can have only one <a href="apidocs"><code>@Cause</code></a> parameter.</p>
+</li>
+</ul>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+A message is inheritable if the two methods have the same name and same number of format parameters.
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+A format parameter is a parameter that has no annotations or is annotated with one of the following annotations; <a href="apidocs"><code>@FormatWith</code></a>, <a href="apidocs"><code>@Pos</code></a> or <a href="apidocs"><code>@Transform</code></a>.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>A message logger interface may also extend the <code>org.jboss.logging.BasicLogger</code>. This allows the logging interface to be usable for standard logging. For example <code>AppLogger.LOGGER.debugf("Initializing %s", this);</code></p>
+</div>
+<div class="sect2">
+<h3 id="example-message-logger"><a class="anchor" href="#example-message-logger"></a>Example Message Logger</h3>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@MessageLogger</span>(projectCode = <span class="string"><span class="delimiter">"</span><span class="content">CW</span><span class="delimiter">"</span></span>) <i class="conum" data-value="1"></i><b>(1)</b>
+<span class="directive">public</span> <span class="type">interface</span> <span class="class">AppLogger</span> <span class="directive">extends</span> BasicLogger {
+
+    AppLogger LOGGER = <span class="predefined-type">Logger</span>.getMessageLogger(AppLogger.class, AppLogger.class.getPackage().getName());
+
+    <span class="annotation">@LogMessage</span>
+    <span class="annotation">@Once</span> <i class="conum" data-value="2"></i><b>(2)</b>
+    <span class="annotation">@Message</span>(<span class="string"><span class="delimiter">"</span><span class="content">%s version %d.%d.%d.%s</span><span class="delimiter">"</span></span>) <i class="conum" data-value="3"></i><b>(3)</b>
+    <span class="type">void</span> appVersion(<span class="predefined-type">CharSequence</span> name, <span class="type">int</span> major, <span class="type">int</span> minor, <span class="type">int</span> macro, <span class="predefined-type">String</span> rel);
+
+    <span class="annotation">@LogMessage</span>(level = <span class="predefined-type">Logger</span>.Level.ERROR) <i class="conum" data-value="4"></i><b>(4)</b>
+    <span class="annotation">@Message</span>(id = <span class="integer">100</span>, value = <span class="string"><span class="delimiter">"</span><span class="content">Failure while closing %s</span><span class="delimiter">"</span></span>)
+    <span class="type">void</span> closeFailure(<span class="annotation">@Cause</span> <span class="predefined-type">Throwable</span> cause, <span class="predefined-type">Object</span> obj);
+
+    <span class="annotation">@LogMessage</span>(level = <span class="predefined-type">Logger</span>.Level.WARN)
+    <span class="annotation">@Message</span>(id = <span class="integer">101</span>, value = <span class="string"><span class="delimiter">"</span><span class="content">Encoding %s could not be found. Defaulting to %s.</span><span class="delimiter">"</span></span>)
+    <span class="type">void</span> encodingNotFound(<span class="predefined-type">String</span> encoding, <span class="predefined-type">Charset</span> dft);
+
+    <span class="annotation">@LogMessage</span>
+    <span class="annotation">@Message</span>(id = <span class="integer">102</span>, value = <span class="string"><span class="delimiter">"</span><span class="content">Cache size changed to '%d'</span><span class="delimiter">"</span></span>)
+    <span class="type">void</span> cacheSizeChanged(<span class="annotation">@Transform</span>(Transform.TransformType.SIZE) <span class="predefined-type">Collection</span><<span class="predefined-type">String</span>> c);
+
+    <span class="annotation">@LogMessage</span>
+    <span class="type">void</span> cacheSizeChanged(<span class="annotation">@Transform</span>(Transform.TransformType.SIZE) <span class="predefined-type">String</span>... array);
+
+    <span class="annotation">@LogMessage</span>
+    <span class="type">void</span> cacheSizeChanged(<span class="annotation">@Transform</span>(Transform.TransformType.SIZE) <span class="predefined-type">Map</span><<span class="predefined-type">String</span>, <span class="predefined-type">Object</span>> map);
+}</code></pre>
+</div>
+</div>
+<div class="colist arabic">
+<table>
+<tr>
+<td><i class="conum" data-value="1"></i><b>1</b></td>
+<td>The <code>projectCode</code> will be prepended to messages which have an <code>id</code> specified. For example with <code>id = 100</code> the message will be prepended with <code>CW000100</code>. You can control the number padding with the <code>length</code> property on the annotation.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="2"></i><b>2</b></td>
+<td>Ensures the log message is only written once.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="3"></i><b>3</b></td>
+<td>No <code>id</code> is specified for this message which means no id will be prepended on this message.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="4"></i><b>4</b></td>
+<td>Overrides the default level to <code>ERROR</code> to indicate an error message should be logged.</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="reports"><a class="anchor" href="#reports"></a>Reports</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>There are currently two types of reports that can be generated. The options are <code>adoc</code> or <code>asciidoc</code> for asciidoc and <code>xml</code> for XML.</p>
+</div>
+<div class="paragraph">
+<p>The reports contain the following data:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>The formatted message id.</p>
+</li>
+<li>
+<p>A possible link to a resolution document for the error.</p>
+</li>
+<li>
+<p>The unformatted message.</p>
+</li>
+<li>
+<p>The log level, if applicable.</p>
+</li>
+<li>
+<p>The return type, if applicable.</p>
+</li>
+</ul>
+</div>
+<div class="sect2">
+<h3 id="annotations"><a class="anchor" href="#annotations"></a>Annotations</h3>
+<div class="paragraph">
+<p>Two annotations can be used to assist withing linking resolution documents for messages.</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="apidocs"><code>@BaseUrl</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>This annotation can be used on a type to define the base URL for linking resolution documents. This annotation is
+not required for links to be created on reports.</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="apidocs"><code>@ResolutionDoc</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>This annotation is used to define information about the resolution document for creating links. If placed on an
+interface all methods that have a defined id will have a link generated. This can also be placed individually on
+the method to only generate links for specific id’s.</p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="example-use-cases"><a class="anchor" href="#example-use-cases"></a>Example Use Cases</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Below are some example use case snippets from the <a href="https://github.com/jboss-logging/jboss-logging-tools/docs/src/main/java/org/jboss/logging/tools/examples">examples</a>.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="comment">/**
+ * Writes the value of the object to the file.
+ *
+ * @param value the value to write, cannot be {@code null}
+ *
+ * @throws UncheckedIOException if an error occurs writing the data
+ */</span>
+<span class="directive">public</span> <span class="type">void</span> write(<span class="directive">final</span> <span class="predefined-type">Object</span> value) {
+    AppLogger.LOGGER.appVersion(<span class="string"><span class="delimiter">"</span><span class="content">ContentWriter</span><span class="delimiter">"</span></span>, <span class="integer">1</span>, <span class="integer">0</span>, <span class="integer">0</span>, <span class="string"><span class="delimiter">"</span><span class="content">Beta1</span><span class="delimiter">"</span></span>); <i class="conum" data-value="1"></i><b>(1)</b>
+    Objects.requireNonNull(value, ErrorMessages.MESSAGES.nullParam(<span class="string"><span class="delimiter">"</span><span class="content">value</span><span class="delimiter">"</span></span>)); <i class="conum" data-value="2"></i><b>(2)</b>
+    write(Objects.requireNonNull(value, ErrorMessages.MESSAGES.nullParam(<span class="string"><span class="delimiter">"</span><span class="content">value</span><span class="delimiter">"</span></span>)).toString());
+}
+
+<span class="comment">/**
+ * Writes the value to the file.
+ *
+ * @param value the value to write, cannot be {@code null} or an {@linkplain String#isEmpty() empty string}.
+ *
+ * @throws UncheckedIOException if an error occurs writing the data
+ */</span>
+<span class="directive">public</span> <span class="type">void</span> write(<span class="directive">final</span> <span class="predefined-type">String</span> value) {
+    AppLogger.LOGGER.appVersion(<span class="string"><span class="delimiter">"</span><span class="content">ContentWriter</span><span class="delimiter">"</span></span>, <span class="integer">1</span>, <span class="integer">0</span>, <span class="integer">0</span>, <span class="string"><span class="delimiter">"</span><span class="content">Beta1</span><span class="delimiter">"</span></span>);
+    <span class="keyword">if</span> (Objects.requireNonNull(value, ErrorMessages.MESSAGES.nullParam(<span class="string"><span class="delimiter">"</span><span class="content">value</span><span class="delimiter">"</span></span>)).isEmpty()) {
+        <span class="keyword">throw</span> ErrorMessages.MESSAGES.invalidValue(value); <i class="conum" data-value="3"></i><b>(3)</b>
+    }
+    <span class="keyword">try</span> {
+        <span class="directive">synchronized</span> (outputLock) {
+            writer.write(value);
+            writer.newLine();
+            <span class="keyword">if</span> (autoFlush) {
+                flush();
+            }
+        }
+    } <span class="keyword">catch</span> (<span class="exception">IOException</span> e) {
+        <span class="keyword">throw</span> ErrorMessages.MESSAGES.operationFailed(UncheckedIOException::<span class="keyword">new</span>, e, <span class="string"><span class="delimiter">"</span><span class="content">write</span><span class="delimiter">"</span></span>); <i class="conum" data-value="4"></i><b>(4)</b>
+    }
+}
+
+<span class="annotation">@Override</span>
+<span class="directive">public</span> <span class="type">void</span> close() {
+    <span class="keyword">try</span> {
+        <span class="directive">synchronized</span> (outputLock) {
+            writer.close();
+        }
+        AppLogger.LOGGER.tracef(<span class="string"><span class="delimiter">"</span><span class="content">ContentWriter %s was successfully closed.</span><span class="delimiter">"</span></span>, <span class="local-variable">this</span>);
+    } <span class="keyword">catch</span> (<span class="exception">Exception</span> e) {
+        <span class="keyword">throw</span> ErrorMessages.MESSAGES.closeFailure(e, <span class="local-variable">this</span>);
+    }
+}
+
+<span class="comment">/**
+ * Safely close this writer logging any errors that occur during closing.
+ */</span>
+<span class="directive">public</span> <span class="type">void</span> safeClose() {
+    <span class="keyword">try</span> {
+        <span class="directive">synchronized</span> (outputLock) {
+            writer.close();
+        }
+        AppLogger.LOGGER.tracef(<span class="string"><span class="delimiter">"</span><span class="content">ContentWriter %s was successfully closed.</span><span class="delimiter">"</span></span>, <span class="local-variable">this</span>);
+    } <span class="keyword">catch</span> (<span class="exception">Exception</span> e) {
+        AppLogger.LOGGER.closeFailure(e, <span class="local-variable">this</span>); <i class="conum" data-value="5"></i><b>(5)</b>
+    }
+}</code></pre>
+</div>
+</div>
+<div class="colist arabic">
+<table>
+<tr>
+<td><i class="conum" data-value="1"></i><b>1</b></td>
+<td>Logs the application version. Note this uses the <a href="apidocs">@Once</a> annotation to indicate this should only be logged once regardless of which <code>write</code> method is used.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="2"></i><b>2</b></td>
+<td>The <code>ErrorMessages.nullParam()</code> returns a <code>java.lang.function.Supplier</code>. This allows the message to be lazily formatted only if the <code>value</code> is <code>null</code>.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="3"></i><b>3</b></td>
+<td>Throws a message if the <code>value</code> is an empty string.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="4"></i><b>4</b></td>
+<td>Uses a <code>java.lang.function.BiFunction</code> to create a new <code>UncheckedIOException</code> with the caught exception set as the cause.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="5"></i><b>5</b></td>
+<td>Logs the caught exception instead of throwing a new exception.</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="translation-property-files"><a class="anchor" href="#translation-property-files"></a>Translation Property Files</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The translation properties files must exist in the same directory structure as the interface. The name of the properties file <code>InterfaceName.i18n_language_country_variant.properties</code>. For example if you have a class named <code>org.jboss.logging.tools.examples.ErrorMessages</code> and you want to translate this into French you create a properties file called <code>ErrorMessages.i18n_fr.properties</code> in a directory <code>org/jboss/logging/tools/examples</code>.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="annotation-processor-options"><a class="anchor" href="#annotation-processor-options"></a>Annotation Processor Options</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>You can pass options to an annotation processor with the <code>-A</code> compiler option. For example to disable generating the <code>@Generated</code> annotation from being placed on the generated source files you would pass <code>-Aorg.jboss.logging.tools.addGeneratedAnnotation=false</code> to the compiler command.</p>
+</div>
+<div class="sect2">
+<h3 id="general"><a class="anchor" href="#general"></a>General</h3>
+<table class="tableblock frame-none grid-none spread">
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Option</th>
+<th class="tableblock halign-left valign-top">Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>debug</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">This option turns on debug logging for the processor</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>org.jboss.logging.tools.expressionProperties</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">This option allows you to define a path where, at compile-time, expressions in messages can be resolved.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>org.jboss.logging.tools.addGeneratedAnnotation</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If set to <code>false</code> the <code>@Generated</code> annotation will not be placed on the generated source files. The default is <code>true</code>.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+In Java 9 the <code>@javax.annotation.Generated</code> was moved to <code>@javax.annotation.processor.Generated</code>. The processor attempts to determine which annotation to use by attempting to find the <code>@javax.annotation.Generated</code> first. If it fails the <code>@javax.annotation.processor.Generated</code> is attempted. If neither can be found no annotation will be placed on the generated implementations.
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+Expressions are in the form of <code>${key:defaultValue}</code>. If the key is prefixed with <code>sys.</code> a system property is
+used. If the key is prefixed with <code>env.</code> an environment variable is used. In all other cases the properties are resolved
+from the <code>org.jboss.logging.tools.expressionProperties</code> path. If the key is not found in the properties the default
+value will be used.
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+Expressions are processed at compile time. The values will be hard-coded in the generated source files.
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect2">
+<h3 id="translation-options"><a class="anchor" href="#translation-options"></a>Translation Options</h3>
+<table class="tableblock frame-none grid-none spread">
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Option</th>
+<th class="tableblock halign-left valign-top">Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>translationsFilesPath</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The base path for the translated properties files. This defaults to the location where new class files are placed.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>skipTranslations</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If set to <code>true</code> source files with the translated tet will not be generated. The default is <code>false</code>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>generatedTranslationFilesPath</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If defined this indicates the path a skeleton file should be generated for the interface. The generated skeleton file will be placed in a directory that matches the package with a name that matches the interface with a <code>.i18n_locale_COUNTRY_VARIANT.properties</code> suffix.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>org.jboss.logging.tools.level</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Sets the maximum level to include in the generated skeleton files. For example if set to <code>INFO</code> the skeleton files will not contain any properties where the log level was set to <code>DEBUG</code> or <code>TRACE</code>.</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="sect2">
+<h3 id="report-options"><a class="anchor" href="#report-options"></a>Report Options</h3>
+<table class="tableblock frame-none grid-none spread">
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Option</th>
+<th class="tableblock halign-left valign-top">Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>org.jboss.logging.tools.report.type</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Indicates the type of report that should be generated. The current report types are <code>adoc</code> for asciidoc or <code>xml</code> for XML.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>org.jboss.logging.tools.report.path</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The path where the generated reports should be placed. This defaults to the location where new class files are placed.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>org.jboss.logging.tools.report.title</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">An optional title for the report. For asciidoc this defaults to <code>Messages</code>. For XML the <code><title></code> element is left off.</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+</div>
+</div>
+<script src="js/links.js"></script>
+<script>
+    window.onload=annotationLinks;
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/js/links.js b/docs/js/links.js
new file mode 100644
index 0000000..d5d4f46
--- /dev/null
+++ b/docs/js/links.js
@@ -0,0 +1,9 @@
+function annotationLinks() {
+    var links = document.getElementsByTagName("a");
+    for(var i = 0, max = links.length; i < max; i++) {
+        var l = links[i];
+        if (l.text.startsWith("@")) {
+            l.href = l.href + "/org/jboss/logging/annotations/" + l.text.substring(1) + ".html";
+        }
+    }
+}
\ No newline at end of file
diff --git a/docs/message-bundle.html b/docs/message-bundle.html
new file mode 100644
index 0000000..aa461d2
--- /dev/null
+++ b/docs/message-bundle.html
@@ -0,0 +1,682 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 1.5.5">
+<title>Message Bundle Interfaces</title>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
+<style>
+/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
+/* Remove comment around @import statement below when using as a custom stylesheet */
+/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
+audio,canvas,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+[hidden],template{display:none}
+script{display:none!important}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+a{background:transparent}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
+input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.center{margin-left:auto;margin-right:auto}
+.spread{width:100%}
+p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:none}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ul.no-bullet{list-style:none}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite:before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+ at media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
+table thead,table tfoot{background:#f7f8f7;font-weight:bold}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table}
+.clearfix:after,.float-group:after{clear:both}
+*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
+*:not(pre)>code.nobreak{word-wrap:normal}
+*:not(pre)>code.nowrap{white-space:nowrap}
+pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menu{color:rgba(0,0,0,.8)}
+b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}
+b.button:before{content:"[";padding:0 3px 0 2px}
+b.button:after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table}
+#header:after,#content:after,#footnotes:after,#footer:after{clear:both}
+#content{margin-top:1.25em}
+#content:before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
+#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span:before{content:"\00a0\2013\00a0"}
+#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark:before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber:after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{text-decoration:none}
+#toc a:active{text-decoration:underline}
+#toctitle{color:#7a2518;font-size:1.2em}
+ at media only screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
+ at media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{font-size:1.375em}
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+.sect1{padding-bottom:.625em}
+ at media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}
+.sect1+.sect1{border-top:1px solid #efefed}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}
+.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
+.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
+.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
+.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
+ at media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
+ at media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
+.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
+.listingblock:hover code[data-lang]:before{display:block}
+.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999}
+.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}
+table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
+table.pyhltable td.code{padding-left:.75em;padding-right:0}
+pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
+pre.pygments .lineno{display:inline-block;margin-right:.25em}
+table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
+.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
+.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
+.quoteblock .quoteblock blockquote:before{display:none}
+.verseblock{margin:0 1em 1.25em 1em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract{margin:0 0 1.25em 0;display:block}
+.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0}
+.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none}
+table.tableblock{max-width:100%;border-collapse:separate}
+table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0}
+table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0}
+table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0}
+table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0}
+table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0}
+table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0}
+table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot{border-width:1px 0}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+td>div.verse{white-space:pre}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none}
+ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em}
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px}
+ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}
+ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}
+ul.inline>li>*{display:block}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1}
+.colist>table tr>td:last-of-type{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
+.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background-color:#00fafa}
+.black{color:#000}
+.black-background{background-color:#000}
+.blue{color:#0000bf}
+.blue-background{background-color:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background-color:#fa00fa}
+.gray{color:#606060}
+.gray-background{background-color:#7d7d7d}
+.green{color:#006000}
+.green-background{background-color:#007d00}
+.lime{color:#00bf00}
+.lime-background{background-color:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background-color:#7d0000}
+.navy{color:#000060}
+.navy-background{background-color:#00007d}
+.olive{color:#606000}
+.olive-background{background-color:#7d7d00}
+.purple{color:#600060}
+.purple-background{background-color:#7d007d}
+.red{color:#bf0000}
+.red-background{background-color:#fa0000}
+.silver{color:#909090}
+.silver-background{background-color:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background-color:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background-color:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background-color:#fafa00}
+span.icon>.fa{cursor:default}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]:after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+ at media print{@page{margin:1.25cm .75cm}
+*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]:after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
+.sect1{padding-bottom:0!important}
+.sect1+.sect1{border:0!important}
+#header>h1:first-child{margin-top:1.25rem}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span:before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]:before{display:block}
+#footer{background:none!important;padding:0 .9375em}
+#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<style>
+/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*pre.CodeRay {background-color:#f7f7f8;}*/
+.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
+.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
+.CodeRay .line-numbers strong{color:rgba(0,0,0,.4)}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top;line-height:1.45}
+table.CodeRay td.line-numbers{text-align:right}
+table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
+table.CodeRay td.code{padding:0 0 0 .5em}
+table.CodeRay td.code>pre{padding:0}
+.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .annotation{color:#007}
+.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-value{color:#700}
+.CodeRay .binary{color:#509}
+.CodeRay .comment{color:#998;font-style:italic}
+.CodeRay .char{color:#04d}
+.CodeRay .char .content{color:#04d}
+.CodeRay .char .delimiter{color:#039}
+.CodeRay .class{color:#458;font-weight:bold}
+.CodeRay .complex{color:#a08}
+.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .color{color:#099}
+.CodeRay .class-variable{color:#369}
+.CodeRay .decorator{color:#b0b}
+.CodeRay .definition{color:#099}
+.CodeRay .delimiter{color:#000}
+.CodeRay .doc{color:#970}
+.CodeRay .doctype{color:#34b}
+.CodeRay .doc-string{color:#d42}
+.CodeRay .escape{color:#666}
+.CodeRay .entity{color:#800}
+.CodeRay .error{color:#808}
+.CodeRay .exception{color:inherit}
+.CodeRay .filename{color:#099}
+.CodeRay .function{color:#900;font-weight:bold}
+.CodeRay .global-variable{color:#008080}
+.CodeRay .hex{color:#058}
+.CodeRay .integer,.CodeRay .float{color:#099}
+.CodeRay .include{color:#555}
+.CodeRay .inline{color:#000}
+.CodeRay .inline .inline{background:#ccc}
+.CodeRay .inline .inline .inline{background:#bbb}
+.CodeRay .inline .inline-delimiter{color:#d14}
+.CodeRay .inline-delimiter{color:#d14}
+.CodeRay .important{color:#555;font-weight:bold}
+.CodeRay .interpreted{color:#b2b}
+.CodeRay .instance-variable{color:#008080}
+.CodeRay .label{color:#970}
+.CodeRay .local-variable{color:#963}
+.CodeRay .octal{color:#40e}
+.CodeRay .predefined{color:#369}
+.CodeRay .preprocessor{color:#579}
+.CodeRay .pseudo-class{color:#555}
+.CodeRay .directive{font-weight:bold}
+.CodeRay .type{font-weight:bold}
+.CodeRay .predefined-type{color:inherit}
+.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .key{color:#808}
+.CodeRay .key .delimiter{color:#606}
+.CodeRay .key .char{color:#80f}
+.CodeRay .value{color:#088}
+.CodeRay .regexp .delimiter{color:#808}
+.CodeRay .regexp .content{color:#808}
+.CodeRay .regexp .modifier{color:#808}
+.CodeRay .regexp .char{color:#d14}
+.CodeRay .regexp .function{color:#404;font-weight:bold}
+.CodeRay .string{color:#d20}
+.CodeRay .string .string .string{background:#ffd0d0}
+.CodeRay .string .content{color:#d14}
+.CodeRay .string .char{color:#d14}
+.CodeRay .string .delimiter{color:#d14}
+.CodeRay .shell{color:#d14}
+.CodeRay .shell .delimiter{color:#d14}
+.CodeRay .symbol{color:#990073}
+.CodeRay .symbol .content{color:#a60}
+.CodeRay .symbol .delimiter{color:#630}
+.CodeRay .tag{color:#008080}
+.CodeRay .tag-special{color:#d70}
+.CodeRay .variable{color:#036}
+.CodeRay .insert{background:#afa}
+.CodeRay .delete{background:#faa}
+.CodeRay .change{color:#aaf;background:#007}
+.CodeRay .head{color:#f8f;background:#505}
+.CodeRay .insert .insert{color:#080}
+.CodeRay .delete .delete{color:#800}
+.CodeRay .change .change{color:#66f}
+.CodeRay .head .head{color:#f4f}
+</style>
+</head>
+<body class="article">
+<div id="header">
+</div>
+<div id="content">
+<div class="sect1">
+<h2 id="message-bundle-interfaces"><a class="anchor" href="#message-bundle-interfaces"></a>Message Bundle Interfaces</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Message bundle interfaces provide a way to internationalize exceptions or strings. A message bundle interface is
+annotated with <a href="apidocs"><code>@MessageBundle</code></a>. Each method in must be annotated with <a href="apidocs"><code>@Message</code></a>
+which will be used to determine the String used for either the return type or the message for the exception being
+returned.</p>
+</div>
+<div class="paragraph">
+<p>The value for a <a href="apidocs"><code>@Message</code></a> may contain an expression.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+Expressions are in the form of <code>${key:defaultValue}</code>. If the key is prefixed with <code>sys.</code> a system property is
+used. If the key is prefixed with <code>env.</code> an environment variable is used. In all other cases the properties are resolved
+from the <code>org.jboss.logging.tools.expressionProperties</code> path. If the key is not found in the properties the default
+value will be used.
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+Expressions are processed at compile time. The values will be hard-coded in the generated source files.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>The following constraints are placed on methods in a message bundle:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>The return type must be one of the follow</p>
+<div class="ulist">
+<ul>
+<li>
+<p>A <code>java.lang.String</code></p>
+</li>
+<li>
+<p>A <code>java.lang.Throwable</code> or a subtype of <code>java.lang.Throwable</code></p>
+</li>
+<li>
+<p>A <code>java.lang.function.Supplier</code> who’s return type fits one of the other two constraints above.</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>The method must be annotated with <a href="apidocs"><code>@Message</code></a> or a message must be inheritable.</p>
+</li>
+<li>
+<p>A method can have only one <a href="apidocs"><code>@Cause</code></a> parameter.</p>
+</li>
+<li>
+<p>A method can only have one <a href="apidocs"><code>@Producer</code></a> parameter.</p>
+</li>
+</ul>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+A message is inheritable if the two methods have the same name and same number of format parameters.
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+A format parameter is a parameter that has no annotations or is annotated with one of the following annotations; <a href="apidocs"><code>@FormatWith</code></a>, <a href="apidocs"><code>@Pos</code></a> or <a href="apidocs"><code>@Transform</code></a>.
+</td>
+</tr>
+</table>
+</div>
+<div class="sect2">
+<h3 id="example-message-bundle"><a class="anchor" href="#example-message-bundle"></a>Example Message Bundle</h3>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@MessageBundle</span>(projectCode = <span class="string"><span class="delimiter">"</span><span class="content">CW</span><span class="delimiter">"</span></span>) <i class="conum" data-value="1"></i><b>(1)</b>
+<span class="directive">public</span> <span class="type">interface</span> <span class="class">ErrorMessages</span> {
+    ErrorMessages MESSAGES = Messages.getBundle(ErrorMessages.class);
+
+    <span class="annotation">@Message</span>(<span class="string"><span class="delimiter">"</span><span class="content">Version %d.%d.%d.%s</span><span class="delimiter">"</span></span>) <i class="conum" data-value="2"></i><b>(2)</b>
+    <span class="predefined-type">String</span> version(<span class="type">int</span> major, <span class="type">int</span> minor, <span class="type">int</span> macro, <span class="predefined-type">String</span> rel);
+
+    <span class="annotation">@Message</span>(id = <span class="integer">1</span>, value = <span class="string"><span class="delimiter">"</span><span class="content">Value '%s' is invalid</span><span class="delimiter">"</span></span>)
+    <span class="exception">IllegalArgumentException</span> invalidValue(<span class="predefined-type">Object</span> value);
+
+    <span class="annotation">@Message</span>(id = <span class="integer">2</span>, value = <span class="string"><span class="delimiter">"</span><span class="content">Failure closing %s</span><span class="delimiter">"</span></span>) <i class="conum" data-value="3"></i><b>(3)</b>
+    CloseException closeFailure(<span class="annotation">@Cause</span> <span class="predefined-type">Throwable</span> cause, <span class="annotation">@Param</span> <span class="annotation">@Pos</span>(<span class="integer">1</span>) <span class="predefined-type">Closeable</span> c);
+
+    CloseException closeFailure(<span class="annotation">@Cause</span> <span class="predefined-type">Throwable</span> cause, <span class="annotation">@Param</span> <span class="annotation">@Pos</span>(<span class="integer">1</span>) <span class="predefined-type">Closeable</span> c, <span class="annotation">@Suppressed</span> <span class="predefined-type">Throwable</span>... errors);
+
+    <span class="annotation">@Message</span>(id = <span class="integer">3</span>, value = <span class="string"><span class="delimiter">"</span><span class="content">Parameter %s cannot be null</span><span class="delimiter">"</span></span>)
+    Supplier<<span class="predefined-type">String</span>> nullParam(<span class="predefined-type">String</span> name);
+
+    <span class="annotation">@Message</span>(id = <span class="integer">4</span>, value = <span class="string"><span class="delimiter">"</span><span class="content">Operation %s failed.</span><span class="delimiter">"</span></span>)
+    <T <span class="directive">extends</span> <span class="exception">RuntimeException</span>> T operationFailed(<span class="annotation">@Producer</span> Function<<span class="predefined-type">String</span>, T> fn, <span class="predefined-type">String</span> name); <i class="conum" data-value="4"></i><b>(4)</b>
+
+    <T <span class="directive">extends</span> <span class="exception">RuntimeException</span>> T operationFailed(<span class="annotation">@Producer</span> BiFunction<<span class="predefined-type">String</span>, <span class="exception">IOException</span>, T> fn, <span class="annotation">@Cause</span> <span class="exception">IOException</span> cause, <span class="predefined-type">String</span> name);
+}</code></pre>
+</div>
+</div>
+<div class="colist arabic">
+<table>
+<tr>
+<td><i class="conum" data-value="1"></i><b>1</b></td>
+<td>The <code>projectCode</code> will be prepended to messages which have an <code>id</code> specified. For example with <code>id = 1</code> the message will be prepended with <code>CW000001</code>. You can control the number padding with the <code>length</code> property on the annotation.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="2"></i><b>2</b></td>
+<td>No <code>id</code> is specified for this message which means no id will be prepended on this message.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="3"></i><b>3</b></td>
+<td>The <code>@Param</code> annotation tells the generator that the parameter should be used to construct the <code>CloseException</code>. The <code>@Pos(1)</code> annotation indicates the parameter should also be used when formatting the message.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="4"></i><b>4</b></td>
+<td>The <code>@Producer</code> annotation indicates that the <code>Function</code> should be used to create the exception being returned.</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock tip">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-tip" title="Tip"></i>
+</td>
+<td class="content">
+Message bundle interfaces can also contain valid <a href="#Message Logger Interfaces">message logger methods</a>.
+</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+</div>
+</div>
+<script src="js/links.js"></script>
+<script>
+    window.onload=annotationLinks;
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/message-logger.html b/docs/message-logger.html
new file mode 100644
index 0000000..28ccfe8
--- /dev/null
+++ b/docs/message-logger.html
@@ -0,0 +1,664 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 1.5.5">
+<title>Message Logger Interfaces</title>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
+<style>
+/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
+/* Remove comment around @import statement below when using as a custom stylesheet */
+/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
+audio,canvas,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+[hidden],template{display:none}
+script{display:none!important}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+a{background:transparent}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
+input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.center{margin-left:auto;margin-right:auto}
+.spread{width:100%}
+p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:none}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ul.no-bullet{list-style:none}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite:before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+ at media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
+table thead,table tfoot{background:#f7f8f7;font-weight:bold}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table}
+.clearfix:after,.float-group:after{clear:both}
+*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
+*:not(pre)>code.nobreak{word-wrap:normal}
+*:not(pre)>code.nowrap{white-space:nowrap}
+pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menu{color:rgba(0,0,0,.8)}
+b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}
+b.button:before{content:"[";padding:0 3px 0 2px}
+b.button:after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table}
+#header:after,#content:after,#footnotes:after,#footer:after{clear:both}
+#content{margin-top:1.25em}
+#content:before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
+#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span:before{content:"\00a0\2013\00a0"}
+#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark:before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber:after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{text-decoration:none}
+#toc a:active{text-decoration:underline}
+#toctitle{color:#7a2518;font-size:1.2em}
+ at media only screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
+ at media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{font-size:1.375em}
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+.sect1{padding-bottom:.625em}
+ at media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}
+.sect1+.sect1{border-top:1px solid #efefed}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}
+.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
+.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
+.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
+.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
+ at media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
+ at media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
+.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
+.listingblock:hover code[data-lang]:before{display:block}
+.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999}
+.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}
+table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
+table.pyhltable td.code{padding-left:.75em;padding-right:0}
+pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
+pre.pygments .lineno{display:inline-block;margin-right:.25em}
+table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
+.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
+.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
+.quoteblock .quoteblock blockquote:before{display:none}
+.verseblock{margin:0 1em 1.25em 1em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract{margin:0 0 1.25em 0;display:block}
+.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0}
+.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none}
+table.tableblock{max-width:100%;border-collapse:separate}
+table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0}
+table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0}
+table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0}
+table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0}
+table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0}
+table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0}
+table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot{border-width:1px 0}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+td>div.verse{white-space:pre}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none}
+ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em}
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px}
+ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}
+ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}
+ul.inline>li>*{display:block}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1}
+.colist>table tr>td:last-of-type{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
+.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background-color:#00fafa}
+.black{color:#000}
+.black-background{background-color:#000}
+.blue{color:#0000bf}
+.blue-background{background-color:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background-color:#fa00fa}
+.gray{color:#606060}
+.gray-background{background-color:#7d7d7d}
+.green{color:#006000}
+.green-background{background-color:#007d00}
+.lime{color:#00bf00}
+.lime-background{background-color:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background-color:#7d0000}
+.navy{color:#000060}
+.navy-background{background-color:#00007d}
+.olive{color:#606000}
+.olive-background{background-color:#7d7d00}
+.purple{color:#600060}
+.purple-background{background-color:#7d007d}
+.red{color:#bf0000}
+.red-background{background-color:#fa0000}
+.silver{color:#909090}
+.silver-background{background-color:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background-color:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background-color:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background-color:#fafa00}
+span.icon>.fa{cursor:default}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]:after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+ at media print{@page{margin:1.25cm .75cm}
+*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]:after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
+.sect1{padding-bottom:0!important}
+.sect1+.sect1{border:0!important}
+#header>h1:first-child{margin-top:1.25rem}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span:before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]:before{display:block}
+#footer{background:none!important;padding:0 .9375em}
+#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<style>
+/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*pre.CodeRay {background-color:#f7f7f8;}*/
+.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
+.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
+.CodeRay .line-numbers strong{color:rgba(0,0,0,.4)}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top;line-height:1.45}
+table.CodeRay td.line-numbers{text-align:right}
+table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
+table.CodeRay td.code{padding:0 0 0 .5em}
+table.CodeRay td.code>pre{padding:0}
+.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .annotation{color:#007}
+.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-value{color:#700}
+.CodeRay .binary{color:#509}
+.CodeRay .comment{color:#998;font-style:italic}
+.CodeRay .char{color:#04d}
+.CodeRay .char .content{color:#04d}
+.CodeRay .char .delimiter{color:#039}
+.CodeRay .class{color:#458;font-weight:bold}
+.CodeRay .complex{color:#a08}
+.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .color{color:#099}
+.CodeRay .class-variable{color:#369}
+.CodeRay .decorator{color:#b0b}
+.CodeRay .definition{color:#099}
+.CodeRay .delimiter{color:#000}
+.CodeRay .doc{color:#970}
+.CodeRay .doctype{color:#34b}
+.CodeRay .doc-string{color:#d42}
+.CodeRay .escape{color:#666}
+.CodeRay .entity{color:#800}
+.CodeRay .error{color:#808}
+.CodeRay .exception{color:inherit}
+.CodeRay .filename{color:#099}
+.CodeRay .function{color:#900;font-weight:bold}
+.CodeRay .global-variable{color:#008080}
+.CodeRay .hex{color:#058}
+.CodeRay .integer,.CodeRay .float{color:#099}
+.CodeRay .include{color:#555}
+.CodeRay .inline{color:#000}
+.CodeRay .inline .inline{background:#ccc}
+.CodeRay .inline .inline .inline{background:#bbb}
+.CodeRay .inline .inline-delimiter{color:#d14}
+.CodeRay .inline-delimiter{color:#d14}
+.CodeRay .important{color:#555;font-weight:bold}
+.CodeRay .interpreted{color:#b2b}
+.CodeRay .instance-variable{color:#008080}
+.CodeRay .label{color:#970}
+.CodeRay .local-variable{color:#963}
+.CodeRay .octal{color:#40e}
+.CodeRay .predefined{color:#369}
+.CodeRay .preprocessor{color:#579}
+.CodeRay .pseudo-class{color:#555}
+.CodeRay .directive{font-weight:bold}
+.CodeRay .type{font-weight:bold}
+.CodeRay .predefined-type{color:inherit}
+.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .key{color:#808}
+.CodeRay .key .delimiter{color:#606}
+.CodeRay .key .char{color:#80f}
+.CodeRay .value{color:#088}
+.CodeRay .regexp .delimiter{color:#808}
+.CodeRay .regexp .content{color:#808}
+.CodeRay .regexp .modifier{color:#808}
+.CodeRay .regexp .char{color:#d14}
+.CodeRay .regexp .function{color:#404;font-weight:bold}
+.CodeRay .string{color:#d20}
+.CodeRay .string .string .string{background:#ffd0d0}
+.CodeRay .string .content{color:#d14}
+.CodeRay .string .char{color:#d14}
+.CodeRay .string .delimiter{color:#d14}
+.CodeRay .shell{color:#d14}
+.CodeRay .shell .delimiter{color:#d14}
+.CodeRay .symbol{color:#990073}
+.CodeRay .symbol .content{color:#a60}
+.CodeRay .symbol .delimiter{color:#630}
+.CodeRay .tag{color:#008080}
+.CodeRay .tag-special{color:#d70}
+.CodeRay .variable{color:#036}
+.CodeRay .insert{background:#afa}
+.CodeRay .delete{background:#faa}
+.CodeRay .change{color:#aaf;background:#007}
+.CodeRay .head{color:#f8f;background:#505}
+.CodeRay .insert .insert{color:#080}
+.CodeRay .delete .delete{color:#800}
+.CodeRay .change .change{color:#66f}
+.CodeRay .head .head{color:#f4f}
+</style>
+</head>
+<body class="article">
+<div id="header">
+</div>
+<div id="content">
+<div class="sect1">
+<h2 id="message-logger-interfaces"><a class="anchor" href="#message-logger-interfaces"></a>Message Logger Interfaces</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Logger interfaces provide a way to internationalize log messages. A logger interface is an interface annotated with
+<a href="apidocs"><code>@MessageLogger</code></a>. Each method in must be annotated with <a href="apidocs"><code>@Message</code></a> which will
+be used to determine the message to be logged.</p>
+</div>
+<div class="paragraph">
+<p>The value for a <a href="apidocs"><code>@Message</code></a> may contain an expression.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+Expressions are in the form of <code>${key:defaultValue}</code>. If the key is prefixed with <code>sys.</code> a system property is
+used. If the key is prefixed with <code>env.</code> an environment variable is used. In all other cases the properties are resolved
+from the <code>org.jboss.logging.tools.expressionProperties</code> path. If the key is not found in the properties the default
+value will be used.
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+Expressions are processed at compile time. The values will be hard-coded in the generated source files.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>The following constraints are placed on methods in a message logger:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>The method must have a <code>void</code> return type</p>
+</li>
+<li>
+<p>The method must be annotated with <a href="apidocs"><code>@LogMessage</code></a></p>
+</li>
+<li>
+<p>The method must be annotated with <a href="apidocs"><code>@Message</code></a> or a message must be inheritable.</p>
+</li>
+<li>
+<p>A method can have only one <a href="apidocs"><code>@Cause</code></a> parameter.</p>
+</li>
+</ul>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+A message is inheritable if the two methods have the same name and same number of format parameters.
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+A format parameter is a parameter that has no annotations or is annotated with one of the following annotations; <a href="apidocs"><code>@FormatWith</code></a>, <a href="apidocs"><code>@Pos</code></a> or <a href="apidocs"><code>@Transform</code></a>.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>A message logger interface may also extend the <code>org.jboss.logging.BasicLogger</code>. This allows the logging interface to be usable for standard logging. For example <code>AppLogger.LOGGER.debugf("Initializing %s", this);</code></p>
+</div>
+<div class="sect2">
+<h3 id="example-message-logger"><a class="anchor" href="#example-message-logger"></a>Example Message Logger</h3>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@MessageLogger</span>(projectCode = <span class="string"><span class="delimiter">"</span><span class="content">CW</span><span class="delimiter">"</span></span>) <i class="conum" data-value="1"></i><b>(1)</b>
+<span class="directive">public</span> <span class="type">interface</span> <span class="class">AppLogger</span> <span class="directive">extends</span> BasicLogger {
+
+    AppLogger LOGGER = <span class="predefined-type">Logger</span>.getMessageLogger(AppLogger.class, AppLogger.class.getPackage().getName());
+
+    <span class="annotation">@LogMessage</span>
+    <span class="annotation">@Once</span> <i class="conum" data-value="2"></i><b>(2)</b>
+    <span class="annotation">@Message</span>(<span class="string"><span class="delimiter">"</span><span class="content">%s version %d.%d.%d.%s</span><span class="delimiter">"</span></span>) <i class="conum" data-value="3"></i><b>(3)</b>
+    <span class="type">void</span> appVersion(<span class="predefined-type">CharSequence</span> name, <span class="type">int</span> major, <span class="type">int</span> minor, <span class="type">int</span> macro, <span class="predefined-type">String</span> rel);
+
+    <span class="annotation">@LogMessage</span>(level = <span class="predefined-type">Logger</span>.Level.ERROR) <i class="conum" data-value="4"></i><b>(4)</b>
+    <span class="annotation">@Message</span>(id = <span class="integer">100</span>, value = <span class="string"><span class="delimiter">"</span><span class="content">Failure while closing %s</span><span class="delimiter">"</span></span>)
+    <span class="type">void</span> closeFailure(<span class="annotation">@Cause</span> <span class="predefined-type">Throwable</span> cause, <span class="predefined-type">Object</span> obj);
+
+    <span class="annotation">@LogMessage</span>(level = <span class="predefined-type">Logger</span>.Level.WARN)
+    <span class="annotation">@Message</span>(id = <span class="integer">101</span>, value = <span class="string"><span class="delimiter">"</span><span class="content">Encoding %s could not be found. Defaulting to %s.</span><span class="delimiter">"</span></span>)
+    <span class="type">void</span> encodingNotFound(<span class="predefined-type">String</span> encoding, <span class="predefined-type">Charset</span> dft);
+
+    <span class="annotation">@LogMessage</span>
+    <span class="annotation">@Message</span>(id = <span class="integer">102</span>, value = <span class="string"><span class="delimiter">"</span><span class="content">Cache size changed to '%d'</span><span class="delimiter">"</span></span>)
+    <span class="type">void</span> cacheSizeChanged(<span class="annotation">@Transform</span>(Transform.TransformType.SIZE) <span class="predefined-type">Collection</span><<span class="predefined-type">String</span>> c);
+
+    <span class="annotation">@LogMessage</span>
+    <span class="type">void</span> cacheSizeChanged(<span class="annotation">@Transform</span>(Transform.TransformType.SIZE) <span class="predefined-type">String</span>... array);
+
+    <span class="annotation">@LogMessage</span>
+    <span class="type">void</span> cacheSizeChanged(<span class="annotation">@Transform</span>(Transform.TransformType.SIZE) <span class="predefined-type">Map</span><<span class="predefined-type">String</span>, <span class="predefined-type">Object</span>> map);
+}</code></pre>
+</div>
+</div>
+<div class="colist arabic">
+<table>
+<tr>
+<td><i class="conum" data-value="1"></i><b>1</b></td>
+<td>The <code>projectCode</code> will be prepended to messages which have an <code>id</code> specified. For example with <code>id = 100</code> the message will be prepended with <code>CW000100</code>. You can control the number padding with the <code>length</code> property on the annotation.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="2"></i><b>2</b></td>
+<td>Ensures the log message is only written once.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="3"></i><b>3</b></td>
+<td>No <code>id</code> is specified for this message which means no id will be prepended on this message.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="4"></i><b>4</b></td>
+<td>Overrides the default level to <code>ERROR</code> to indicate an error message should be logged.</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+</div>
+</div>
+<script src="js/links.js"></script>
+<script>
+    window.onload=annotationLinks;
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/pom.xml b/docs/pom.xml
new file mode 100644
index 0000000..6a3fcd1
--- /dev/null
+++ b/docs/pom.xml
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ JBoss, Home of Professional Open Source.
+  ~
+  ~ Copyright 2015 Red Hat, Inc., and individual contributors
+  ~ as indicated by the @author tags.
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.jboss.logging</groupId>
+        <artifactId>jboss-logging-tools-parent</artifactId>
+        <version>2.1.0.Final</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>jboss-logging-tools-docs</artifactId>
+    <packaging>jar</packaging>
+
+    <name>JBoss Logging I18n Documentation</name>
+
+    <licenses>
+        <license>
+            <name>Apache License, version 2.0</name>
+            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+            <distribution>repo</distribution>
+        </license>
+    </licenses>
+
+    <properties>
+        <version.asciidoctor>1.5.5</version.asciidoctor>
+        <java.docs.dir>apidocs</java.docs.dir>
+        <java.docs.output.directory>${project.build.directory}/site/${java.docs.dir}</java.docs.output.directory>
+    </properties>
+
+    <dependencies>
+        <!-- Logging dependencies used for the examples -->
+        <dependency>
+            <groupId>org.jboss.logging</groupId>
+            <artifactId>jboss-logging</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.logging</groupId>
+            <artifactId>jboss-logging-annotations</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.logging</groupId>
+            <artifactId>jboss-logging-processor</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+            <optional>true</optional>
+        </dependency>
+    </dependencies>
+
+    <profiles>
+        <profile>
+            <id>generate-site</id>
+            <activation>
+                <property>
+                    <name>generate-site</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-clean-plugin</artifactId>
+                        <configuration>
+                            <filesets>
+                                <fileset>
+                                    <directory>${java.docs.dir}/</directory>
+                                </fileset>
+                                <fileset>
+                                    <directory>examples/</directory>
+                                </fileset>
+                                <fileset>
+                                    <directory>${project.basedir}</directory>
+                                    <includes>
+                                        <include>*.html</include>
+                                    </includes>
+                                </fileset>
+                            </filesets>
+                        </configuration>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-compiler-plugin</artifactId>
+                        <configuration>
+                            <compilerArgs>
+                                <arg>-Aorg.jboss.logging.tools.report.type=adoc</arg>
+                                <arg>-Aorg.jboss.logging.tools.report.path=${project.reporting.outputDirectory}/adoc</arg>
+                                <arg>-Aorg.jboss.logging.tools.report.title=Example Messages</arg>
+                            </compilerArgs>
+                        </configuration>
+                    </plugin>
+                    <plugin>
+                        <artifactId>maven-javadoc-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>create-javadoc</id>
+                                <phase>generate-resources</phase>
+                                <goals>
+                                    <goal>javadoc</goal>
+                                </goals>
+                                <configuration>
+                                    <failOnError>true</failOnError>
+                                    <reportOutputDirectory>${project.reporting.outputDirectory}/${java.docs.dir}</reportOutputDirectory>
+                                    <excludePackageNames>*.examples.*</excludePackageNames>
+                                    <includeDependencySources>true</includeDependencySources>
+                                    <dependencySourceIncludes>
+                                        <dependencySourceInclude>org.jboss.logging:jboss-logging-annotations:*</dependencySourceInclude>
+                                    </dependencySourceIncludes>
+                                    <notimestamp>true</notimestamp>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <!-- Copy the generated JavaDoc's -->
+                    <plugin>
+                        <artifactId>maven-resources-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>copy-javadoc</id>
+                                <phase>process-resources</phase>
+                                <goals>
+                                    <goal>copy-resources</goal>
+                                </goals>
+                                <configuration>
+                                    <outputDirectory>${project.basedir}/${java.docs.dir}</outputDirectory>
+                                    <resources>
+                                        <resource>
+                                            <directory>${project.reporting.outputDirectory}/${java.docs.dir}</directory>
+                                        </resource>
+                                    </resources>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.asciidoctor</groupId>
+                        <artifactId>asciidoctor-maven-plugin</artifactId>
+                        <version>${version.asciidoctor}</version>
+                        <configuration>
+                            <backend>html5</backend>
+                            <sourceHighlighter>coderay</sourceHighlighter>
+                            <attributes>
+                                <icons>font</icons>
+                                <sectanchors>true</sectanchors>
+                                <!-- set the idprefix to blank -->
+                                <idprefix/>
+                                <idseparator>-</idseparator>
+                                <docinfo1>true</docinfo1>
+                                <javadocsdir>${java.docs.dir}</javadocsdir>
+                                <version>${project.version}</version>
+                                <nofooter/>
+                                <revnumber>${project.version}</revnumber>
+                                <organization>${project.organization.name}</organization>
+                            </attributes>
+                            <outputDirectory>${project.basedir}</outputDirectory>
+                        </configuration>
+                        <executions>
+                            <execution>
+                                <id>output-html</id>
+                                <phase>generate-resources</phase>
+                                <goals>
+                                    <goal>process-asciidoc</goal>
+                                </goals>
+                                <configuration>
+                                    <preserveDirectories>true</preserveDirectories>
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>output-report-html</id>
+                                <phase>process-classes</phase>
+                                <goals>
+                                    <goal>process-asciidoc</goal>
+                                </goals>
+                                <configuration>
+                                    <sourceDirectory>${project.reporting.outputDirectory}/adoc/</sourceDirectory>
+                                    <outputDirectory>${project.basedir}/examples/</outputDirectory>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+</project>
diff --git a/docs/processor-options.html b/docs/processor-options.html
new file mode 100644
index 0000000..cafb3f5
--- /dev/null
+++ b/docs/processor-options.html
@@ -0,0 +1,661 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 1.5.5">
+<title>Annotation Processor Options</title>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
+<style>
+/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
+/* Remove comment around @import statement below when using as a custom stylesheet */
+/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
+audio,canvas,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+[hidden],template{display:none}
+script{display:none!important}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+a{background:transparent}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
+input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.center{margin-left:auto;margin-right:auto}
+.spread{width:100%}
+p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:none}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ul.no-bullet{list-style:none}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite:before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+ at media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
+table thead,table tfoot{background:#f7f8f7;font-weight:bold}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table}
+.clearfix:after,.float-group:after{clear:both}
+*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
+*:not(pre)>code.nobreak{word-wrap:normal}
+*:not(pre)>code.nowrap{white-space:nowrap}
+pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menu{color:rgba(0,0,0,.8)}
+b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}
+b.button:before{content:"[";padding:0 3px 0 2px}
+b.button:after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table}
+#header:after,#content:after,#footnotes:after,#footer:after{clear:both}
+#content{margin-top:1.25em}
+#content:before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
+#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span:before{content:"\00a0\2013\00a0"}
+#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark:before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber:after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{text-decoration:none}
+#toc a:active{text-decoration:underline}
+#toctitle{color:#7a2518;font-size:1.2em}
+ at media only screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
+ at media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{font-size:1.375em}
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+.sect1{padding-bottom:.625em}
+ at media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}
+.sect1+.sect1{border-top:1px solid #efefed}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}
+.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
+.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
+.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
+.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
+ at media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
+ at media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
+.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
+.listingblock:hover code[data-lang]:before{display:block}
+.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999}
+.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}
+table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
+table.pyhltable td.code{padding-left:.75em;padding-right:0}
+pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
+pre.pygments .lineno{display:inline-block;margin-right:.25em}
+table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
+.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
+.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
+.quoteblock .quoteblock blockquote:before{display:none}
+.verseblock{margin:0 1em 1.25em 1em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract{margin:0 0 1.25em 0;display:block}
+.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0}
+.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none}
+table.tableblock{max-width:100%;border-collapse:separate}
+table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0}
+table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0}
+table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0}
+table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0}
+table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0}
+table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0}
+table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot{border-width:1px 0}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+td>div.verse{white-space:pre}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none}
+ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em}
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px}
+ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}
+ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}
+ul.inline>li>*{display:block}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1}
+.colist>table tr>td:last-of-type{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
+.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background-color:#00fafa}
+.black{color:#000}
+.black-background{background-color:#000}
+.blue{color:#0000bf}
+.blue-background{background-color:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background-color:#fa00fa}
+.gray{color:#606060}
+.gray-background{background-color:#7d7d7d}
+.green{color:#006000}
+.green-background{background-color:#007d00}
+.lime{color:#00bf00}
+.lime-background{background-color:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background-color:#7d0000}
+.navy{color:#000060}
+.navy-background{background-color:#00007d}
+.olive{color:#606000}
+.olive-background{background-color:#7d7d00}
+.purple{color:#600060}
+.purple-background{background-color:#7d007d}
+.red{color:#bf0000}
+.red-background{background-color:#fa0000}
+.silver{color:#909090}
+.silver-background{background-color:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background-color:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background-color:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background-color:#fafa00}
+span.icon>.fa{cursor:default}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]:after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+ at media print{@page{margin:1.25cm .75cm}
+*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]:after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
+.sect1{padding-bottom:0!important}
+.sect1+.sect1{border:0!important}
+#header>h1:first-child{margin-top:1.25rem}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span:before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]:before{display:block}
+#footer{background:none!important;padding:0 .9375em}
+#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<style>
+/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*pre.CodeRay {background-color:#f7f7f8;}*/
+.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
+.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
+.CodeRay .line-numbers strong{color:rgba(0,0,0,.4)}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top;line-height:1.45}
+table.CodeRay td.line-numbers{text-align:right}
+table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
+table.CodeRay td.code{padding:0 0 0 .5em}
+table.CodeRay td.code>pre{padding:0}
+.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .annotation{color:#007}
+.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-value{color:#700}
+.CodeRay .binary{color:#509}
+.CodeRay .comment{color:#998;font-style:italic}
+.CodeRay .char{color:#04d}
+.CodeRay .char .content{color:#04d}
+.CodeRay .char .delimiter{color:#039}
+.CodeRay .class{color:#458;font-weight:bold}
+.CodeRay .complex{color:#a08}
+.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .color{color:#099}
+.CodeRay .class-variable{color:#369}
+.CodeRay .decorator{color:#b0b}
+.CodeRay .definition{color:#099}
+.CodeRay .delimiter{color:#000}
+.CodeRay .doc{color:#970}
+.CodeRay .doctype{color:#34b}
+.CodeRay .doc-string{color:#d42}
+.CodeRay .escape{color:#666}
+.CodeRay .entity{color:#800}
+.CodeRay .error{color:#808}
+.CodeRay .exception{color:inherit}
+.CodeRay .filename{color:#099}
+.CodeRay .function{color:#900;font-weight:bold}
+.CodeRay .global-variable{color:#008080}
+.CodeRay .hex{color:#058}
+.CodeRay .integer,.CodeRay .float{color:#099}
+.CodeRay .include{color:#555}
+.CodeRay .inline{color:#000}
+.CodeRay .inline .inline{background:#ccc}
+.CodeRay .inline .inline .inline{background:#bbb}
+.CodeRay .inline .inline-delimiter{color:#d14}
+.CodeRay .inline-delimiter{color:#d14}
+.CodeRay .important{color:#555;font-weight:bold}
+.CodeRay .interpreted{color:#b2b}
+.CodeRay .instance-variable{color:#008080}
+.CodeRay .label{color:#970}
+.CodeRay .local-variable{color:#963}
+.CodeRay .octal{color:#40e}
+.CodeRay .predefined{color:#369}
+.CodeRay .preprocessor{color:#579}
+.CodeRay .pseudo-class{color:#555}
+.CodeRay .directive{font-weight:bold}
+.CodeRay .type{font-weight:bold}
+.CodeRay .predefined-type{color:inherit}
+.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .key{color:#808}
+.CodeRay .key .delimiter{color:#606}
+.CodeRay .key .char{color:#80f}
+.CodeRay .value{color:#088}
+.CodeRay .regexp .delimiter{color:#808}
+.CodeRay .regexp .content{color:#808}
+.CodeRay .regexp .modifier{color:#808}
+.CodeRay .regexp .char{color:#d14}
+.CodeRay .regexp .function{color:#404;font-weight:bold}
+.CodeRay .string{color:#d20}
+.CodeRay .string .string .string{background:#ffd0d0}
+.CodeRay .string .content{color:#d14}
+.CodeRay .string .char{color:#d14}
+.CodeRay .string .delimiter{color:#d14}
+.CodeRay .shell{color:#d14}
+.CodeRay .shell .delimiter{color:#d14}
+.CodeRay .symbol{color:#990073}
+.CodeRay .symbol .content{color:#a60}
+.CodeRay .symbol .delimiter{color:#630}
+.CodeRay .tag{color:#008080}
+.CodeRay .tag-special{color:#d70}
+.CodeRay .variable{color:#036}
+.CodeRay .insert{background:#afa}
+.CodeRay .delete{background:#faa}
+.CodeRay .change{color:#aaf;background:#007}
+.CodeRay .head{color:#f8f;background:#505}
+.CodeRay .insert .insert{color:#080}
+.CodeRay .delete .delete{color:#800}
+.CodeRay .change .change{color:#66f}
+.CodeRay .head .head{color:#f4f}
+</style>
+</head>
+<body class="article">
+<div id="header">
+</div>
+<div id="content">
+<div class="sect1">
+<h2 id="annotation-processor-options"><a class="anchor" href="#annotation-processor-options"></a>Annotation Processor Options</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>You can pass options to an annotation processor with the <code>-A</code> compiler option. For example to disable generating the <code>@Generated</code> annotation from being placed on the generated source files you would pass <code>-Aorg.jboss.logging.tools.addGeneratedAnnotation=false</code> to the compiler command.</p>
+</div>
+<div class="sect2">
+<h3 id="general"><a class="anchor" href="#general"></a>General</h3>
+<table class="tableblock frame-none grid-none spread">
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Option</th>
+<th class="tableblock halign-left valign-top">Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>debug</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">This option turns on debug logging for the processor</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>org.jboss.logging.tools.expressionProperties</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">This option allows you to define a path where, at compile-time, expressions in messages can be resolved.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>org.jboss.logging.tools.addGeneratedAnnotation</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If set to <code>false</code> the <code>@Generated</code> annotation will not be placed on the generated source files. The default is <code>true</code>.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+In Java 9 the <code>@javax.annotation.Generated</code> was moved to <code>@javax.annotation.processor.Generated</code>. The processor attempts to determine which annotation to use by attempting to find the <code>@javax.annotation.Generated</code> first. If it fails the <code>@javax.annotation.processor.Generated</code> is attempted. If neither can be found no annotation will be placed on the generated implementations.
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+Expressions are in the form of <code>${key:defaultValue}</code>. If the key is prefixed with <code>sys.</code> a system property is
+used. If the key is prefixed with <code>env.</code> an environment variable is used. In all other cases the properties are resolved
+from the <code>org.jboss.logging.tools.expressionProperties</code> path. If the key is not found in the properties the default
+value will be used.
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+Expressions are processed at compile time. The values will be hard-coded in the generated source files.
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect2">
+<h3 id="translation-options"><a class="anchor" href="#translation-options"></a>Translation Options</h3>
+<table class="tableblock frame-none grid-none spread">
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Option</th>
+<th class="tableblock halign-left valign-top">Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>translationsFilesPath</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The base path for the translated properties files. This defaults to the location where new class files are placed.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>skipTranslations</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If set to <code>true</code> source files with the translated tet will not be generated. The default is <code>false</code>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>generatedTranslationFilesPath</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If defined this indicates the path a skeleton file should be generated for the interface. The generated skeleton file will be placed in a directory that matches the package with a name that matches the interface with a <code>.i18n_locale_COUNTRY_VARIANT.properties</code> suffix.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>org.jboss.logging.tools.level</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Sets the maximum level to include in the generated skeleton files. For example if set to <code>INFO</code> the skeleton files will not contain any properties where the log level was set to <code>DEBUG</code> or <code>TRACE</code>.</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="sect2">
+<h3 id="report-options"><a class="anchor" href="#report-options"></a>Report Options</h3>
+<table class="tableblock frame-none grid-none spread">
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Option</th>
+<th class="tableblock halign-left valign-top">Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>org.jboss.logging.tools.report.type</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Indicates the type of report that should be generated. The current report types are <code>adoc</code> for asciidoc or <code>xml</code> for XML.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>org.jboss.logging.tools.report.path</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The path where the generated reports should be placed. This defaults to the location where new class files are placed.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>org.jboss.logging.tools.report.title</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">An optional title for the report. For asciidoc this defaults to <code>Messages</code>. For XML the <code><title></code> element is left off.</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+</div>
+</div>
+<script src="js/links.js"></script>
+<script>
+    window.onload=annotationLinks;
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/reports.html b/docs/reports.html
new file mode 100644
index 0000000..0a26985
--- /dev/null
+++ b/docs/reports.html
@@ -0,0 +1,586 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 1.5.5">
+<title>Reports</title>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
+<style>
+/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
+/* Remove comment around @import statement below when using as a custom stylesheet */
+/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
+audio,canvas,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+[hidden],template{display:none}
+script{display:none!important}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+a{background:transparent}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
+input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.center{margin-left:auto;margin-right:auto}
+.spread{width:100%}
+p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:none}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ul.no-bullet{list-style:none}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite:before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+ at media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
+table thead,table tfoot{background:#f7f8f7;font-weight:bold}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table}
+.clearfix:after,.float-group:after{clear:both}
+*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
+*:not(pre)>code.nobreak{word-wrap:normal}
+*:not(pre)>code.nowrap{white-space:nowrap}
+pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menu{color:rgba(0,0,0,.8)}
+b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}
+b.button:before{content:"[";padding:0 3px 0 2px}
+b.button:after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table}
+#header:after,#content:after,#footnotes:after,#footer:after{clear:both}
+#content{margin-top:1.25em}
+#content:before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
+#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span:before{content:"\00a0\2013\00a0"}
+#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark:before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber:after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{text-decoration:none}
+#toc a:active{text-decoration:underline}
+#toctitle{color:#7a2518;font-size:1.2em}
+ at media only screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
+ at media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{font-size:1.375em}
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+.sect1{padding-bottom:.625em}
+ at media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}
+.sect1+.sect1{border-top:1px solid #efefed}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}
+.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
+.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
+.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
+.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
+ at media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
+ at media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
+.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
+.listingblock:hover code[data-lang]:before{display:block}
+.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999}
+.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}
+table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
+table.pyhltable td.code{padding-left:.75em;padding-right:0}
+pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
+pre.pygments .lineno{display:inline-block;margin-right:.25em}
+table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
+.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
+.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
+.quoteblock .quoteblock blockquote:before{display:none}
+.verseblock{margin:0 1em 1.25em 1em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract{margin:0 0 1.25em 0;display:block}
+.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0}
+.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none}
+table.tableblock{max-width:100%;border-collapse:separate}
+table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0}
+table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0}
+table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0}
+table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0}
+table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0}
+table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0}
+table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot{border-width:1px 0}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+td>div.verse{white-space:pre}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none}
+ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em}
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px}
+ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}
+ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}
+ul.inline>li>*{display:block}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1}
+.colist>table tr>td:last-of-type{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
+.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background-color:#00fafa}
+.black{color:#000}
+.black-background{background-color:#000}
+.blue{color:#0000bf}
+.blue-background{background-color:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background-color:#fa00fa}
+.gray{color:#606060}
+.gray-background{background-color:#7d7d7d}
+.green{color:#006000}
+.green-background{background-color:#007d00}
+.lime{color:#00bf00}
+.lime-background{background-color:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background-color:#7d0000}
+.navy{color:#000060}
+.navy-background{background-color:#00007d}
+.olive{color:#606000}
+.olive-background{background-color:#7d7d00}
+.purple{color:#600060}
+.purple-background{background-color:#7d007d}
+.red{color:#bf0000}
+.red-background{background-color:#fa0000}
+.silver{color:#909090}
+.silver-background{background-color:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background-color:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background-color:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background-color:#fafa00}
+span.icon>.fa{cursor:default}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]:after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+ at media print{@page{margin:1.25cm .75cm}
+*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]:after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
+.sect1{padding-bottom:0!important}
+.sect1+.sect1{border:0!important}
+#header>h1:first-child{margin-top:1.25rem}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span:before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]:before{display:block}
+#footer{background:none!important;padding:0 .9375em}
+#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<style>
+/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*pre.CodeRay {background-color:#f7f7f8;}*/
+.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
+.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
+.CodeRay .line-numbers strong{color:rgba(0,0,0,.4)}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top;line-height:1.45}
+table.CodeRay td.line-numbers{text-align:right}
+table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
+table.CodeRay td.code{padding:0 0 0 .5em}
+table.CodeRay td.code>pre{padding:0}
+.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .annotation{color:#007}
+.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-value{color:#700}
+.CodeRay .binary{color:#509}
+.CodeRay .comment{color:#998;font-style:italic}
+.CodeRay .char{color:#04d}
+.CodeRay .char .content{color:#04d}
+.CodeRay .char .delimiter{color:#039}
+.CodeRay .class{color:#458;font-weight:bold}
+.CodeRay .complex{color:#a08}
+.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .color{color:#099}
+.CodeRay .class-variable{color:#369}
+.CodeRay .decorator{color:#b0b}
+.CodeRay .definition{color:#099}
+.CodeRay .delimiter{color:#000}
+.CodeRay .doc{color:#970}
+.CodeRay .doctype{color:#34b}
+.CodeRay .doc-string{color:#d42}
+.CodeRay .escape{color:#666}
+.CodeRay .entity{color:#800}
+.CodeRay .error{color:#808}
+.CodeRay .exception{color:inherit}
+.CodeRay .filename{color:#099}
+.CodeRay .function{color:#900;font-weight:bold}
+.CodeRay .global-variable{color:#008080}
+.CodeRay .hex{color:#058}
+.CodeRay .integer,.CodeRay .float{color:#099}
+.CodeRay .include{color:#555}
+.CodeRay .inline{color:#000}
+.CodeRay .inline .inline{background:#ccc}
+.CodeRay .inline .inline .inline{background:#bbb}
+.CodeRay .inline .inline-delimiter{color:#d14}
+.CodeRay .inline-delimiter{color:#d14}
+.CodeRay .important{color:#555;font-weight:bold}
+.CodeRay .interpreted{color:#b2b}
+.CodeRay .instance-variable{color:#008080}
+.CodeRay .label{color:#970}
+.CodeRay .local-variable{color:#963}
+.CodeRay .octal{color:#40e}
+.CodeRay .predefined{color:#369}
+.CodeRay .preprocessor{color:#579}
+.CodeRay .pseudo-class{color:#555}
+.CodeRay .directive{font-weight:bold}
+.CodeRay .type{font-weight:bold}
+.CodeRay .predefined-type{color:inherit}
+.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .key{color:#808}
+.CodeRay .key .delimiter{color:#606}
+.CodeRay .key .char{color:#80f}
+.CodeRay .value{color:#088}
+.CodeRay .regexp .delimiter{color:#808}
+.CodeRay .regexp .content{color:#808}
+.CodeRay .regexp .modifier{color:#808}
+.CodeRay .regexp .char{color:#d14}
+.CodeRay .regexp .function{color:#404;font-weight:bold}
+.CodeRay .string{color:#d20}
+.CodeRay .string .string .string{background:#ffd0d0}
+.CodeRay .string .content{color:#d14}
+.CodeRay .string .char{color:#d14}
+.CodeRay .string .delimiter{color:#d14}
+.CodeRay .shell{color:#d14}
+.CodeRay .shell .delimiter{color:#d14}
+.CodeRay .symbol{color:#990073}
+.CodeRay .symbol .content{color:#a60}
+.CodeRay .symbol .delimiter{color:#630}
+.CodeRay .tag{color:#008080}
+.CodeRay .tag-special{color:#d70}
+.CodeRay .variable{color:#036}
+.CodeRay .insert{background:#afa}
+.CodeRay .delete{background:#faa}
+.CodeRay .change{color:#aaf;background:#007}
+.CodeRay .head{color:#f8f;background:#505}
+.CodeRay .insert .insert{color:#080}
+.CodeRay .delete .delete{color:#800}
+.CodeRay .change .change{color:#66f}
+.CodeRay .head .head{color:#f4f}
+</style>
+</head>
+<body class="article">
+<div id="header">
+</div>
+<div id="content">
+<div class="sect1">
+<h2 id="reports"><a class="anchor" href="#reports"></a>Reports</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>There are currently two types of reports that can be generated. The options are <code>adoc</code> or <code>asciidoc</code> for asciidoc and <code>xml</code> for XML.</p>
+</div>
+<div class="paragraph">
+<p>The reports contain the following data:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>The formatted message id.</p>
+</li>
+<li>
+<p>A possible link to a resolution document for the error.</p>
+</li>
+<li>
+<p>The unformatted message.</p>
+</li>
+<li>
+<p>The log level, if applicable.</p>
+</li>
+<li>
+<p>The return type, if applicable.</p>
+</li>
+</ul>
+</div>
+<div class="sect2">
+<h3 id="annotations"><a class="anchor" href="#annotations"></a>Annotations</h3>
+<div class="paragraph">
+<p>Two annotations can be used to assist withing linking resolution documents for messages.</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="apidocs"><code>@BaseUrl</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>This annotation can be used on a type to define the base URL for linking resolution documents. This annotation is
+not required for links to be created on reports.</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><a href="apidocs"><code>@ResolutionDoc</code></a></p>
+<div class="ulist">
+<ul>
+<li>
+<p>This annotation is used to define information about the resolution document for creating links. If placed on an
+interface all methods that have a defined id will have a link generated. This can also be placed individually on
+the method to only generate links for specific id’s.</p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</div>
+<script src="js/links.js"></script>
+<script>
+    window.onload=annotationLinks;
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/src/main/asciidoc/default-notes.adoc b/docs/src/main/asciidoc/default-notes.adoc
new file mode 100644
index 0000000..21e3a92
--- /dev/null
+++ b/docs/src/main/asciidoc/default-notes.adoc
@@ -0,0 +1,3 @@
+NOTE: A message is inheritable if the two methods have the same name and same number of format parameters.
+
+NOTE: A format parameter is a parameter that has no annotations or is annotated with one of the following annotations; link:{javadocsdir}[`@FormatWith`], link:{javadocsdir}[`@Pos`] or link:{javadocsdir}[`@Transform`].
\ No newline at end of file
diff --git a/docs/src/main/asciidoc/docinfo-footer.html b/docs/src/main/asciidoc/docinfo-footer.html
new file mode 100644
index 0000000..bea4394
--- /dev/null
+++ b/docs/src/main/asciidoc/docinfo-footer.html
@@ -0,0 +1,4 @@
+<script src="js/links.js"></script>
+<script>
+    window.onload=annotationLinks;
+</script>
\ No newline at end of file
diff --git a/docs/src/main/asciidoc/examples.adoc b/docs/src/main/asciidoc/examples.adoc
new file mode 100644
index 0000000..7e25de5
--- /dev/null
+++ b/docs/src/main/asciidoc/examples.adoc
@@ -0,0 +1,17 @@
+
+:sourcedir: java/org/jboss/logging/tools/examples
+:projecturl: https://github.com/jboss-logging/jboss-logging-tools/docs/src/main
+
+== Example Use Cases
+
+Below are some example use case snippets from the link:{projecturl}/{sourcedir}[examples].
+
+[source,java,indent=0]
+----
+include::../{sourcedir}/ContentWriter.java[tags=write;close]
+----
+<1> Logs the application version. Note this uses the link:{javadocsdir}[@Once] annotation to indicate this should only be logged once regardless of which `write` method is used.
+<2> The `ErrorMessages.nullParam()` returns a `java.lang.function.Supplier`. This allows the message to be lazily formatted only if the `value` is `null`.
+<3> Throws a message if the `value` is an empty string.
+<4> Uses a `java.lang.function.BiFunction` to create a new `UncheckedIOException` with the caught exception set as the cause.
+<5> Logs the caught exception instead of throwing a new exception.
\ No newline at end of file
diff --git a/docs/src/main/asciidoc/examples/errors/CW000003.adoc b/docs/src/main/asciidoc/examples/errors/CW000003.adoc
new file mode 100644
index 0000000..9c82a80
--- /dev/null
+++ b/docs/src/main/asciidoc/examples/errors/CW000003.adoc
@@ -0,0 +1,4 @@
+== CW000003: Null Parameter
+
+This error indicates you've passed a `null` parameter where a `non-null` value
+is required.
\ No newline at end of file
diff --git a/docs/src/main/asciidoc/examples/errors/CW000100.adoc b/docs/src/main/asciidoc/examples/errors/CW000100.adoc
new file mode 100644
index 0000000..8d924cb
--- /dev/null
+++ b/docs/src/main/asciidoc/examples/errors/CW000100.adoc
@@ -0,0 +1,4 @@
+== CW000100: Close Failure
+
+This error indicates there was a failure closing a resource. Please see previous error messages and contact support if
+required.
\ No newline at end of file
diff --git a/docs/src/main/asciidoc/examples/errors/CW000101.adoc b/docs/src/main/asciidoc/examples/errors/CW000101.adoc
new file mode 100644
index 0000000..b769656
--- /dev/null
+++ b/docs/src/main/asciidoc/examples/errors/CW000101.adoc
@@ -0,0 +1,4 @@
+== CW000101: Encoding Error
+
+This error indicates an invalid encoding is attempting to be used and a default encoding of UTF-8 will be used. You can
+fix this by setting a valid encoding value.
\ No newline at end of file
diff --git a/docs/src/main/asciidoc/expressions.adoc b/docs/src/main/asciidoc/expressions.adoc
new file mode 100644
index 0000000..1192613
--- /dev/null
+++ b/docs/src/main/asciidoc/expressions.adoc
@@ -0,0 +1,7 @@
+
+NOTE: Expressions are in the form of `${key:defaultValue}`. If the key is prefixed with `sys.` a system property is
+used. If the key is prefixed with `env.` an environment variable is used. In all other cases the properties are resolved
+from the `org.jboss.logging.tools.expressionProperties` path. If the key is not found in the properties the default
+value will be used.
+
+IMPORTANT: Expressions are processed at compile time. The values will be hard-coded in the generated source files.
\ No newline at end of file
diff --git a/docs/src/main/asciidoc/getting-started.adoc b/docs/src/main/asciidoc/getting-started.adoc
new file mode 100644
index 0000000..1bb83bc
--- /dev/null
+++ b/docs/src/main/asciidoc/getting-started.adoc
@@ -0,0 +1,47 @@
+:repourl:   https://repository.jboss.org/org/jboss/logging
+
+== Getting Started
+
+To get started you need to include three dependencies in your project.
+
+[frame=none,grid=none,options="noheader"]
+|===
+| link:{repourl}/jboss-logging/[JBoss Logging] | Required at compile time and runtime.
+| link:{repourl}/jboss-logging-annotations/[JBoss Logging Annotations] | Required at compile time only.
+| link:{repourl}/jboss-logging-processor/[JBoss Logging Processor] | Required at compile time only.
+|===
+
+If you're using maven here is an example `pom.xml` snippet:
+
+[source,xml,subs="attributes+"]
+----
+<dependencies>
+    <!-- Required by the annotation processor and will be used at runtime -->
+    <dependency>
+        <groupId>org.jboss.logging</groupId>
+        <artifactId>jboss-logging</artifactId>
+    </dependency>
+
+    <dependency>
+        <groupId>org.jboss.logging</groupId>
+        <artifactId>jboss-logging-annotations</artifactId>
+        <version>{version}</version>
+        <!-- This is a compile-time dependency of this project, but is not needed at compile or runtime by other
+              projects that depend on this project.-->
+        <scope>provided</scope>
+        <optional>true</optional>
+    </dependency>
+
+    <dependency>
+        <groupId>org.jboss.logging</groupId>
+        <artifactId>jboss-logging-processor</artifactId>
+        <version>{version}</version>
+        <!-- This is a compile-time dependency of this project, but is not needed at compile or runtime by other
+              projects that depend on this project.-->
+        <scope>provided</scope>
+        <optional>true</optional>
+    </dependency>
+</dependencies>
+----
+
+Once your project is configured you can create either a <<Message Bundle Interfaces,message bundle interface>> or a <<Message Logger Interfaces,message logger interface>>. For detailed information see the link:{javadocsdir}/index.html[JavaDocs] for the annotations.
\ No newline at end of file
diff --git a/docs/src/main/asciidoc/index.adoc b/docs/src/main/asciidoc/index.adoc
new file mode 100644
index 0000000..9817a3f
--- /dev/null
+++ b/docs/src/main/asciidoc/index.adoc
@@ -0,0 +1,24 @@
+= JBoss Logging Tools
+:Author:        James R. Perkins
+:Email:         <jperkins at redhat.com>
+:docinfo:       shared
+:toc: left
+:scriptsdir:    ./js
+
+== Introduction
+
+The JBoss logging tools are used to create internationalized log statements and exceptions.
+
+include::getting-started.adoc[]
+
+include::message-bundle.adoc[]
+
+include::message-logger.adoc[]
+
+include::reports.adoc[]
+
+include::examples.adoc[]
+
+include::translation-property-files.adoc[]
+
+include::processor-options.adoc[]
\ No newline at end of file
diff --git a/docs/src/main/asciidoc/js/links.js b/docs/src/main/asciidoc/js/links.js
new file mode 100644
index 0000000..d5d4f46
--- /dev/null
+++ b/docs/src/main/asciidoc/js/links.js
@@ -0,0 +1,9 @@
+function annotationLinks() {
+    var links = document.getElementsByTagName("a");
+    for(var i = 0, max = links.length; i < max; i++) {
+        var l = links[i];
+        if (l.text.startsWith("@")) {
+            l.href = l.href + "/org/jboss/logging/annotations/" + l.text.substring(1) + ".html";
+        }
+    }
+}
\ No newline at end of file
diff --git a/docs/src/main/asciidoc/message-bundle.adoc b/docs/src/main/asciidoc/message-bundle.adoc
new file mode 100644
index 0000000..5586e6a
--- /dev/null
+++ b/docs/src/main/asciidoc/message-bundle.adoc
@@ -0,0 +1,58 @@
+
+== Message Bundle Interfaces
+
+Message bundle interfaces provide a way to internationalize exceptions or strings. A message bundle interface is
+annotated with link:{javadocsdir}[`@MessageBundle`]. Each method in must be annotated with link:{javadocsdir}[`@Message`]
+which will be used to determine the String used for either the return type or the message for the exception being
+returned.
+
+The value for a link:{javadocsdir}[`@Message`] may contain an expression.
+
+include::expressions.adoc[]
+
+The following constraints are placed on methods in a message bundle:
+
+- The return type must be one of the follow
+  * A `java.lang.String`
+  * A `java.lang.Throwable` or a subtype of `java.lang.Throwable`
+  * A `java.lang.function.Supplier` who's return type fits one of the other two constraints above.
+- The method must be annotated with link:{javadocsdir}[`@Message`] or a message must be inheritable.
+- A method can have only one link:{javadocsdir}[`@Cause`] parameter.
+- A method can only have one link:{javadocsdir}[`@Producer`] parameter.
+
+include::default-notes.adoc[]
+
+=== Example Message Bundle
+
+[source,java]
+----
+ at MessageBundle(projectCode = "CW") <1>
+public interface ErrorMessages {
+    ErrorMessages MESSAGES = Messages.getBundle(ErrorMessages.class);
+
+    @Message("Version %d.%d.%d.%s") <2>
+    String version(int major, int minor, int macro, String rel);
+
+    @Message(id = 1, value = "Value '%s' is invalid")
+    IllegalArgumentException invalidValue(Object value);
+
+    @Message(id = 2, value = "Failure closing %s") <3>
+    CloseException closeFailure(@Cause Throwable cause, @Param @Pos(1) Closeable c);
+
+    CloseException closeFailure(@Cause Throwable cause, @Param @Pos(1) Closeable c, @Suppressed Throwable... errors);
+
+    @Message(id = 3, value = "Parameter %s cannot be null")
+    Supplier<String> nullParam(String name);
+
+    @Message(id = 4, value = "Operation %s failed.")
+    <T extends RuntimeException> T operationFailed(@Producer Function<String, T> fn, String name); <4>
+
+    <T extends RuntimeException> T operationFailed(@Producer BiFunction<String, IOException, T> fn, @Cause IOException cause, String name);
+}
+----
+<1> The `projectCode` will be prepended to messages which have an `id` specified. For example with `id = 1` the message will be prepended with `CW000001`. You can control the number padding with the `length` property on the annotation.
+<2> No `id` is specified for this message which means no id will be prepended on this message.
+<3> The `@Param` annotation tells the generator that the parameter should be used to construct the `CloseException`. The `@Pos(1)` annotation indicates the parameter should also be used when formatting the message.
+<4> The `@Producer` annotation indicates that the `Function` should be used to create the exception being returned.
+
+TIP: Message bundle interfaces can also contain valid <<Message Logger Interfaces,message logger methods>>.
\ No newline at end of file
diff --git a/docs/src/main/asciidoc/message-logger.adoc b/docs/src/main/asciidoc/message-logger.adoc
new file mode 100644
index 0000000..2ac591b
--- /dev/null
+++ b/docs/src/main/asciidoc/message-logger.adoc
@@ -0,0 +1,59 @@
+
+== Message Logger Interfaces
+
+Logger interfaces provide a way to internationalize log messages. A logger interface is an interface annotated with
+link:{javadocsdir}[`@MessageLogger`]. Each method in must be annotated with link:{javadocsdir}[`@Message`] which will
+be used to determine the message to be logged.
+
+The value for a link:{javadocsdir}[`@Message`] may contain an expression.
+
+include::expressions.adoc[]
+
+The following constraints are placed on methods in a message logger:
+
+- The method must have a `void` return type
+- The method must be annotated with link:{javadocsdir}[`@LogMessage`]
+- The method must be annotated with link:{javadocsdir}[`@Message`] or a message must be inheritable.
+- A method can have only one link:{javadocsdir}[`@Cause`] parameter.
+
+include::default-notes.adoc[]
+
+A message logger interface may also extend the `org.jboss.logging.BasicLogger`. This allows the logging interface to be usable for standard logging. For example `AppLogger.LOGGER.debugf("Initializing %s", this);`
+
+=== Example Message Logger
+
+[source,java]
+----
+ at MessageLogger(projectCode = "CW") <1>
+public interface AppLogger extends BasicLogger {
+
+    AppLogger LOGGER = Logger.getMessageLogger(AppLogger.class, AppLogger.class.getPackage().getName());
+
+    @LogMessage
+    @Once <2>
+    @Message("%s version %d.%d.%d.%s") <3>
+    void appVersion(CharSequence name, int major, int minor, int macro, String rel);
+
+    @LogMessage(level = Logger.Level.ERROR) <4>
+    @Message(id = 100, value = "Failure while closing %s")
+    void closeFailure(@Cause Throwable cause, Object obj);
+
+    @LogMessage(level = Logger.Level.WARN)
+    @Message(id = 101, value = "Encoding %s could not be found. Defaulting to %s.")
+    void encodingNotFound(String encoding, Charset dft);
+
+    @LogMessage
+    @Message(id = 102, value = "Cache size changed to '%d'")
+    void cacheSizeChanged(@Transform(Transform.TransformType.SIZE) Collection<String> c);
+
+    @LogMessage
+    void cacheSizeChanged(@Transform(Transform.TransformType.SIZE) String... array);
+
+    @LogMessage
+    void cacheSizeChanged(@Transform(Transform.TransformType.SIZE) Map<String, Object> map);
+}
+----
+<1> The `projectCode` will be prepended to messages which have an `id` specified. For example with `id = 100` the message will be prepended with `CW000100`. You can control the number padding with the `length` property on the annotation.
+<2> Ensures the log message is only written once.
+<3> No `id` is specified for this message which means no id will be prepended on this message.
+<4> Overrides the default level to `ERROR` to indicate an error message should be logged.
\ No newline at end of file
diff --git a/docs/src/main/asciidoc/processor-options.adoc b/docs/src/main/asciidoc/processor-options.adoc
new file mode 100644
index 0000000..7cef0ac
--- /dev/null
+++ b/docs/src/main/asciidoc/processor-options.adoc
@@ -0,0 +1,44 @@
+
+== Annotation Processor Options
+
+You can pass options to an annotation processor with the `-A` compiler option. For example to disable generating the `@Generated` annotation from being placed on the generated source files you would pass `-Aorg.jboss.logging.tools.addGeneratedAnnotation=false` to the compiler command.
+
+=== General
+
+[frame=none,grid=none]
+|===
+| Option | Description
+
+| `debug` | This option turns on debug logging for the processor
+| `org.jboss.logging.tools.expressionProperties` | This option allows you to define a path where, at compile-time, expressions in messages can be resolved.
+| `org.jboss.logging.tools.addGeneratedAnnotation` | If set to `false` the `@Generated` annotation will not be placed on the generated source files. The default is `true`.
+|===
+
+NOTE: In Java 9 the `@javax.annotation.Generated` was moved to `@javax.annotation.processor.Generated`. The processor attempts to determine which annotation to use by attempting to find the `@javax.annotation.Generated` first. If it fails the `@javax.annotation.processor.Generated` is attempted. If neither can be found no annotation will be placed on the generated implementations.
+
+include::expressions.adoc[]
+
+=== Translation Options
+
+[frame=none,grid=none]
+|===
+| Option | Description
+
+| `translationsFilesPath` | The base path for the translated properties files. This defaults to the location where new class files are placed.
+| `skipTranslations` | If set to `true` source files with the translated tet will not be generated. The default is `false`.
+| `generatedTranslationFilesPath` | If defined this indicates the path a skeleton file should be generated for the interface. The generated skeleton file will be placed in a directory that matches the package with a name that matches the interface with a `.i18n_locale_COUNTRY_VARIANT.properties` suffix.
+| `org.jboss.logging.tools.level` | Sets the maximum level to include in the generated skeleton files. For example if set to `INFO` the skeleton files will not contain any properties where the log level was set to `DEBUG` or `TRACE`.
+
+|===
+
+=== Report Options
+
+[frame=none,grid=none]
+|===
+| Option | Description
+
+| `org.jboss.logging.tools.report.type` | Indicates the type of report that should be generated. The current report types are `adoc` for asciidoc or `xml` for XML.
+| `org.jboss.logging.tools.report.path` | The path where the generated reports should be placed. This defaults to the location where new class files are placed.
+| `org.jboss.logging.tools.report.title` | An optional title for the report. For asciidoc this defaults to `Messages`. For XML the `<title>` element is left off.
+
+|===
\ No newline at end of file
diff --git a/docs/src/main/asciidoc/reports.adoc b/docs/src/main/asciidoc/reports.adoc
new file mode 100644
index 0000000..9423731
--- /dev/null
+++ b/docs/src/main/asciidoc/reports.adoc
@@ -0,0 +1,24 @@
+
+== Reports
+
+There are currently two types of reports that can be generated. The options are `adoc` or `asciidoc` for asciidoc and `xml` for XML.
+
+The reports contain the following data:
+
+* The formatted message id.
+* A possible link to a resolution document for the error.
+* The unformatted message.
+* The log level, if applicable.
+* The return type, if applicable.
+
+=== Annotations
+
+Two annotations can be used to assist withing linking resolution documents for messages.
+
+* link:{javadocsdir}[`@BaseUrl`]
+  - This annotation can be used on a type to define the base URL for linking resolution documents. This annotation is
+    not required for links to be created on reports.
+* link:{javadocsdir}[`@ResolutionDoc`]
+  - This annotation is used to define information about the resolution document for creating links. If placed on an
+    interface all methods that have a defined id will have a link generated. This can also be placed individually on
+    the method to only generate links for specific id's.
\ No newline at end of file
diff --git a/docs/src/main/asciidoc/translation-property-files.adoc b/docs/src/main/asciidoc/translation-property-files.adoc
new file mode 100644
index 0000000..c894e5e
--- /dev/null
+++ b/docs/src/main/asciidoc/translation-property-files.adoc
@@ -0,0 +1,4 @@
+
+== Translation Property Files
+
+The translation properties files must exist in the same directory structure as the interface. The name of the properties file `InterfaceName.i18n_language_country_variant.properties`. For example if you have a class named `org.jboss.logging.tools.examples.ErrorMessages` and you want to translate this into French you create a properties file called `ErrorMessages.i18n_fr.properties` in a directory `org/jboss/logging/tools/examples`.
\ No newline at end of file
diff --git a/docs/src/main/java/org/jboss/logging/tools/examples/AppLogger.java b/docs/src/main/java/org/jboss/logging/tools/examples/AppLogger.java
new file mode 100644
index 0000000..dcc3b60
--- /dev/null
+++ b/docs/src/main/java/org/jboss/logging/tools/examples/AppLogger.java
@@ -0,0 +1,109 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ *
+ * Copyright 2017 Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.jboss.logging.tools.examples;
+
+import java.nio.charset.Charset;
+import java.util.Collection;
+import java.util.Map;
+
+import org.jboss.logging.BasicLogger;
+import org.jboss.logging.Logger;
+import org.jboss.logging.annotations.Cause;
+import org.jboss.logging.annotations.LogMessage;
+import org.jboss.logging.annotations.Message;
+import org.jboss.logging.annotations.MessageLogger;
+import org.jboss.logging.annotations.Once;
+import org.jboss.logging.annotations.ResolutionDoc;
+import org.jboss.logging.annotations.Transform;
+
+/**
+ * A common logger for the application.
+ *
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+ at SuppressWarnings({"unused", "SameParameterValue"})
+ at MessageLogger(projectCode = "CW")
+ at ResolutionDoc(url = "errors", suffix = ".html")
+public interface AppLogger extends BasicLogger {
+
+    AppLogger LOGGER = Logger.getMessageLogger(AppLogger.class, AppLogger.class.getPackage().getName());
+
+    /**
+     * Logs an informational message, once, indicating the applications version.
+     *
+     * @param name  the name of the application
+     * @param major the major version
+     * @param minor the minor version
+     * @param macro the macro version
+     * @param rel   the release suffix, e.g. {@code Beta1}, {@code Final}
+     */
+    @LogMessage
+    @Once
+    @Message("%s version %d.%d.%d.%s")
+    void appVersion(CharSequence name, int major, int minor, int macro, String rel);
+
+    /**
+     * Logs an error message indicating a failure to close the object.
+     *
+     * @param cause the cause of the error
+     * @param obj   the object that failed closing
+     */
+    @LogMessage(level = Logger.Level.ERROR)
+    @Message(id = 100, value = "Failure while closing %s")
+    void closeFailure(@Cause Throwable cause, Object obj);
+
+    /**
+     * Logs a warning message indicating the encoding is invalid and a default encoding will be used.
+     *
+     * @param encoding the invalid encoding
+     * @param dft      the default encoding
+     */
+    @LogMessage(level = Logger.Level.WARN)
+    @Message(id = 101, value = "Encoding %s could not be found. Defaulting to %s.")
+    void encodingNotFound(String encoding, Charset dft);
+
+    /**
+     * Logs an informational message indicating the cache size has changed and the size the cache is now.
+     *
+     * @param c the collection holding the cache
+     */
+    @LogMessage
+    @Message(id = 102, value = "Cache size changed to '%d'")
+    @ResolutionDoc(skip = true)
+    void cacheSizeChanged(@Transform(Transform.TransformType.SIZE) Collection<String> c);
+
+    /**
+     * Logs an informational message indicating the cache size has changed and the size the cache is now.
+     *
+     * @param array the cache arracy
+     */
+    @LogMessage
+    @ResolutionDoc(skip = true)
+    void cacheSizeChanged(@Transform(Transform.TransformType.SIZE) String... array);
+
+    /**
+     * Logs an informational message indicating the cache size has changed and the size the cache is now.
+     *
+     * @param map the map holding the cache
+     */
+    @LogMessage
+    @ResolutionDoc(skip = true)
+    void cacheSizeChanged(@Transform(Transform.TransformType.SIZE) Map<String, Object> map);
+}
diff --git a/docs/src/main/java/org/jboss/logging/tools/examples/CloseException.java b/docs/src/main/java/org/jboss/logging/tools/examples/CloseException.java
new file mode 100644
index 0000000..072fc8b
--- /dev/null
+++ b/docs/src/main/java/org/jboss/logging/tools/examples/CloseException.java
@@ -0,0 +1,64 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ *
+ * Copyright 2017 Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.jboss.logging.tools.examples;
+
+import java.io.Closeable;
+
+/**
+ * An error with access to the failing {@link Closeable}.
+ *
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+ at SuppressWarnings("unused")
+public class CloseException extends RuntimeException {
+    private final Closeable closeable;
+
+    /**
+     * Creates a new error.
+     *
+     * @param msg       the message for the error
+     * @param closeable the failed closeable
+     */
+    public CloseException(final String msg, final Closeable closeable) {
+        super(msg);
+        this.closeable = closeable;
+    }
+
+    /**
+     * Creates a new error.
+     *
+     * @param msg       the message for the error
+     * @param cause     the cause of the error
+     * @param closeable the failed closeable
+     */
+    public CloseException(final String msg, final Throwable cause, final Closeable closeable) {
+        super(msg, cause);
+        this.closeable = closeable;
+    }
+
+    /**
+     * Returns the failed closeable.
+     *
+     * @return the failed closeable
+     */
+    public Closeable getCloseable() {
+        return closeable;
+    }
+}
diff --git a/docs/src/main/java/org/jboss/logging/tools/examples/ContentWriter.java b/docs/src/main/java/org/jboss/logging/tools/examples/ContentWriter.java
new file mode 100644
index 0000000..d775dcb
--- /dev/null
+++ b/docs/src/main/java/org/jboss/logging/tools/examples/ContentWriter.java
@@ -0,0 +1,164 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ *
+ * Copyright 2017 Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.jboss.logging.tools.examples;
+
+import java.io.BufferedWriter;
+import java.io.Closeable;
+import java.io.Flushable;
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.nio.file.Path;
+import java.util.Objects;
+
+/**
+ * A writer for writing content to a file.
+ *
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+ at SuppressWarnings({"unused", "WeakerAccess"})
+public class ContentWriter implements Closeable, Flushable {
+
+    private final Object outputLock = new Object();
+
+    private final Path contentPath;
+    private final BufferedWriter writer;
+    private volatile boolean autoFlush = true;
+
+    ContentWriter(final Path contentPath, final BufferedWriter writer) {
+        this.contentPath = Objects.requireNonNull(contentPath, ErrorMessages.MESSAGES.nullParam("contentPath"));
+        this.writer = Objects.requireNonNull(writer, ErrorMessages.MESSAGES.nullParam("writer"));
+    }
+
+    // tag::write[]
+
+    /**
+     * Writes the value of the object to the file.
+     *
+     * @param value the value to write, cannot be {@code null}
+     *
+     * @throws UncheckedIOException if an error occurs writing the data
+     */
+    public void write(final Object value) {
+        AppLogger.LOGGER.appVersion("ContentWriter", 1, 0, 0, "Beta1"); // <1>
+        Objects.requireNonNull(value, ErrorMessages.MESSAGES.nullParam("value")); // <2>
+        write(Objects.requireNonNull(value, ErrorMessages.MESSAGES.nullParam("value")).toString());
+    }
+
+    /**
+     * Writes the value to the file.
+     *
+     * @param value the value to write, cannot be {@code null} or an {@linkplain String#isEmpty() empty string}.
+     *
+     * @throws UncheckedIOException if an error occurs writing the data
+     */
+    public void write(final String value) {
+        AppLogger.LOGGER.appVersion("ContentWriter", 1, 0, 0, "Beta1");
+        if (Objects.requireNonNull(value, ErrorMessages.MESSAGES.nullParam("value")).isEmpty()) {
+            throw ErrorMessages.MESSAGES.invalidValue(value); // <3>
+        }
+        try {
+            synchronized (outputLock) {
+                writer.write(value);
+                writer.newLine();
+                if (autoFlush) {
+                    flush();
+                }
+            }
+        } catch (IOException e) {
+            throw ErrorMessages.MESSAGES.operationFailed(UncheckedIOException::new, e, "write"); // <4>
+        }
+    }
+    // end::write[]
+
+    /**
+     * Set the value to {@code false} if the buffer should not automatically {@linkplain #flush() flush} on each write.
+     * <p>
+     * Defaults to {@code true}.
+     * </p>
+     *
+     * @param autoFlush {@code true} to {@linkplain #flush() flush} on each write, otherwise {@code false} to flush
+     *                  when the buffer determines it should be flushed
+     */
+    public void setAutoFlush(final boolean autoFlush) {
+        this.autoFlush = autoFlush;
+    }
+
+    // tag::close[]
+
+    @Override
+    public void close() {
+        try {
+            synchronized (outputLock) {
+                writer.close();
+            }
+            AppLogger.LOGGER.tracef("ContentWriter %s was successfully closed.", this);
+        } catch (Exception e) {
+            throw ErrorMessages.MESSAGES.closeFailure(e, this);
+        }
+    }
+
+    /**
+     * Safely close this writer logging any errors that occur during closing.
+     */
+    public void safeClose() {
+        try {
+            synchronized (outputLock) {
+                writer.close();
+            }
+            AppLogger.LOGGER.tracef("ContentWriter %s was successfully closed.", this);
+        } catch (Exception e) {
+            AppLogger.LOGGER.closeFailure(e, this); // <5>
+        }
+    }
+    // end::close[]
+
+    @Override
+    public void flush() {
+        try {
+            synchronized (outputLock) {
+                writer.flush();
+            }
+        } catch (IOException e) {
+            throw ErrorMessages.MESSAGES.operationFailed(UncheckedIOException::new, e, "flush");
+        }
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(contentPath);
+    }
+
+    @Override
+    public boolean equals(final Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (!(obj instanceof ContentWriter)) {
+            return false;
+        }
+        final ContentWriter other = (ContentWriter) obj;
+        return Objects.equals(contentPath, other.contentPath);
+    }
+
+    @Override
+    public String toString() {
+        return "ContentWriter[" + contentPath.toAbsolutePath() + "]";
+    }
+}
diff --git a/docs/src/main/java/org/jboss/logging/tools/examples/ContentWriterBuilder.java b/docs/src/main/java/org/jboss/logging/tools/examples/ContentWriterBuilder.java
new file mode 100644
index 0000000..d2fd596
--- /dev/null
+++ b/docs/src/main/java/org/jboss/logging/tools/examples/ContentWriterBuilder.java
@@ -0,0 +1,113 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ *
+ * Copyright 2017 Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.jboss.logging.tools.examples;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.nio.charset.UnsupportedCharsetException;
+import java.nio.file.Files;
+import java.nio.file.OpenOption;
+import java.nio.file.Path;
+import java.nio.file.StandardOpenOption;
+import java.util.Objects;
+
+/**
+ * Builds a {@link ContentWriter}.
+ *
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+ at SuppressWarnings("unused")
+public class ContentWriterBuilder {
+    private final Path path;
+    private boolean append = true;
+    private String encoding = null;
+
+
+    private ContentWriterBuilder(final Path path) {
+        this.path = path;
+    }
+
+    /**
+     * Creates a new builder.
+     *
+     * @param path the path where the content should be written to, cannot be {@code null}
+     *
+     * @return the new content writer
+     */
+    public static ContentWriterBuilder of(final Path path) {
+        Objects.requireNonNull(path, ErrorMessages.MESSAGES.nullParam("path"));
+        return new ContentWriterBuilder(path);
+    }
+
+    /**
+     * Set the encoding of for the content. If the encoding is not a valid {@link Charset} a default encoding of
+     * {@link StandardCharsets#UTF_8} will be used.
+     *
+     * @param encoding the encoding to use
+     *
+     * @return this builder
+     */
+    public ContentWriterBuilder setEncoding(final String encoding) {
+        this.encoding = encoding;
+        return this;
+    }
+
+    /**
+     * Indicates whether or not the content should be appended to any previous content already written. The default
+     * value is {@link true}.
+     *
+     * @param append {@code false} if the created writer should overwrite previously written content, otherwise
+     *               {@code true}
+     *
+     * @return this builder
+     */
+    public ContentWriterBuilder setAppend(final boolean append) {
+        this.append = append;
+        return this;
+    }
+
+    /**
+     * Creates the {@link ContentWriter}.
+     *
+     * @return the created writer
+     *
+     * @throws IOException if a failure creating the writer occurs
+     */
+    public ContentWriter build() throws IOException {
+        final OpenOption[] options;
+        if (append) {
+            options = new OpenOption[] {StandardOpenOption.CREATE, StandardOpenOption.APPEND};
+        } else {
+            options = new OpenOption[] {StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING};
+        }
+        Charset charset = StandardCharsets.UTF_8;
+        if (encoding != null) {
+            try {
+                charset = Charset.forName(encoding);
+            } catch (UnsupportedCharsetException e) {
+                AppLogger.LOGGER.encodingNotFound(encoding, charset);
+            }
+        }
+        final BufferedWriter writer = Files.newBufferedWriter(path, charset, options);
+        return new ContentWriter(path, writer);
+    }
+}
diff --git a/docs/src/main/java/org/jboss/logging/tools/examples/ErrorMessages.java b/docs/src/main/java/org/jboss/logging/tools/examples/ErrorMessages.java
new file mode 100644
index 0000000..a6ab8b5
--- /dev/null
+++ b/docs/src/main/java/org/jboss/logging/tools/examples/ErrorMessages.java
@@ -0,0 +1,145 @@
+
+/*
+ * JBoss, Home of Professional Open Source.
+ *
+ * Copyright 2017 Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.jboss.logging.tools.examples;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.util.function.BiFunction;
+import java.util.function.Function;
+import java.util.function.Supplier;
+
+import org.jboss.logging.Messages;
+import org.jboss.logging.annotations.BaseUrl;
+import org.jboss.logging.annotations.Cause;
+import org.jboss.logging.annotations.Message;
+import org.jboss.logging.annotations.MessageBundle;
+import org.jboss.logging.annotations.Param;
+import org.jboss.logging.annotations.Pos;
+import org.jboss.logging.annotations.Producer;
+import org.jboss.logging.annotations.ResolutionDoc;
+import org.jboss.logging.annotations.Suppressed;
+
+/**
+ * Common error messages for the application.
+ *
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+ at SuppressWarnings("unused")
+ at MessageBundle(projectCode = "CW")
+ at BaseUrl("errors/")
+public interface ErrorMessages {
+    /**
+     * The static message instance.
+     */
+    ErrorMessages MESSAGES = Messages.getBundle(ErrorMessages.class);
+
+    /**
+     * Returns the internationalized version message.
+     *
+     * @param major the major version
+     * @param minor the minor version
+     * @param macro the macro version
+     * @param rel   the release suffix, e.g. {@code Beta1}, {@code Final}
+     *
+     * @return the formatted version
+     */
+    @Message("Version %d.%d.%d.%s")
+    String version(int major, int minor, int macro, String rel);
+
+    /**
+     * Creates an exception indicating the value is invalid.
+     *
+     * @param value the invalid value
+     *
+     * @return an {@link IllegalStateException} for the error
+     */
+    @Message(id = 1, value = "Value '%s' is invalid")
+    IllegalArgumentException invalidValue(Object value);
+
+    /**
+     * Creates an exception indicating a failure to close the {@link Closeable}
+     *
+     * @param cause the cause of the error
+     * @param c     the closeable that failed
+     *
+     * @return a {@link CloseException} for the error
+     */
+    @Message(id = 2, value = "Failure closing %s")
+    CloseException closeFailure(@Cause Throwable cause, @Param @Pos(1) Closeable c);
+
+    /**
+     * Creates an exception indicating a failure to close the {@link Closeable}
+     *
+     * @param cause  the cause of the error
+     * @param c      the closeable that failed
+     * @param errors errors that should be added as {@linkplain Throwable#getSuppressed() suppressed exceptions}.
+     *
+     * @return a {@link CloseException} for the error
+     */
+    CloseException closeFailure(@Cause Throwable cause, @Param @Pos(1) Closeable c, @Suppressed Throwable... errors);
+
+    /**
+     * Creates a message indicating the parameter is {@code null}.
+     * <p>
+     * This can be used to lazily format the message for {@code null} checks like
+     * {@link java.util.Objects#requireNonNull(Object, Supplier)}.
+     * </p>
+     *
+     * @param name the name of the parameter
+     *
+     * @return a supplier for the message
+     */
+    @Message(id = 3, value = "Parameter %s cannot be null")
+    @ResolutionDoc(suffix = ".html")
+    Supplier<String> nullParam(String name);
+
+    /**
+     * Uses the producer function to create the returned exception indicating the operation has failed.
+     * <p>
+     * The formatted value of the message will be the parameter for the functions
+     * {@linkplain Function#apply(Object) apply} method.
+     * </p>
+     *
+     * @param fn   the function to produce the returned exception
+     * @param name the name of the operation that failed
+     * @param <T>  the type of the exception to return, must be assignable to a {@link RuntimeException}
+     *
+     * @return the produced exception for the error
+     */
+    @Message(id = 4, value = "Operation %s failed.")
+    <T extends RuntimeException> T operationFailed(@Producer Function<String, T> fn, String name);
+
+    /**
+     * Uses the producer function to create the returned exception indicating the operation has failed.
+     * <p>
+     * The formatted value of the message will be the first parameter for the functions
+     * {@linkplain BiFunction#apply(Object, Object)}  apply} method. The second parameter will be the cause.
+     * </p>
+     *
+     * @param fn    the function to produce the returned exception
+     * @param cause the cause of the exception to pass to the function
+     * @param name  the name of the operation that failed
+     * @param <T>   the type of the exception to return, must be assignable to a {@link RuntimeException}
+     *
+     * @return the produced exception for the error
+     */
+    <T extends RuntimeException> T operationFailed(@Producer BiFunction<String, IOException, T> fn, @Cause IOException cause, String name);
+}
diff --git a/docs/translation-property-files.html b/docs/translation-property-files.html
new file mode 100644
index 0000000..5084624
--- /dev/null
+++ b/docs/translation-property-files.html
@@ -0,0 +1,531 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 1.5.5">
+<title>Translation Property Files</title>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
+<style>
+/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
+/* Remove comment around @import statement below when using as a custom stylesheet */
+/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
+audio,canvas,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+[hidden],template{display:none}
+script{display:none!important}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+a{background:transparent}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
+input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.center{margin-left:auto;margin-right:auto}
+.spread{width:100%}
+p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:none}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ul.no-bullet{list-style:none}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite:before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+ at media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
+table thead,table tfoot{background:#f7f8f7;font-weight:bold}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table}
+.clearfix:after,.float-group:after{clear:both}
+*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
+*:not(pre)>code.nobreak{word-wrap:normal}
+*:not(pre)>code.nowrap{white-space:nowrap}
+pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menu{color:rgba(0,0,0,.8)}
+b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}
+b.button:before{content:"[";padding:0 3px 0 2px}
+b.button:after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table}
+#header:after,#content:after,#footnotes:after,#footer:after{clear:both}
+#content{margin-top:1.25em}
+#content:before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
+#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span:before{content:"\00a0\2013\00a0"}
+#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark:before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber:after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{text-decoration:none}
+#toc a:active{text-decoration:underline}
+#toctitle{color:#7a2518;font-size:1.2em}
+ at media only screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
+ at media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{font-size:1.375em}
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+.sect1{padding-bottom:.625em}
+ at media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}
+.sect1+.sect1{border-top:1px solid #efefed}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}
+.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
+.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
+.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
+.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
+ at media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
+ at media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
+.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
+.listingblock:hover code[data-lang]:before{display:block}
+.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999}
+.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}
+table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
+table.pyhltable td.code{padding-left:.75em;padding-right:0}
+pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
+pre.pygments .lineno{display:inline-block;margin-right:.25em}
+table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
+.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
+.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
+.quoteblock .quoteblock blockquote:before{display:none}
+.verseblock{margin:0 1em 1.25em 1em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract{margin:0 0 1.25em 0;display:block}
+.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0}
+.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none}
+table.tableblock{max-width:100%;border-collapse:separate}
+table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0}
+table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0}
+table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0}
+table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0}
+table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0}
+table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0}
+table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot{border-width:1px 0}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+td>div.verse{white-space:pre}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none}
+ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em}
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px}
+ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}
+ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}
+ul.inline>li>*{display:block}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1}
+.colist>table tr>td:last-of-type{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
+.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background-color:#00fafa}
+.black{color:#000}
+.black-background{background-color:#000}
+.blue{color:#0000bf}
+.blue-background{background-color:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background-color:#fa00fa}
+.gray{color:#606060}
+.gray-background{background-color:#7d7d7d}
+.green{color:#006000}
+.green-background{background-color:#007d00}
+.lime{color:#00bf00}
+.lime-background{background-color:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background-color:#7d0000}
+.navy{color:#000060}
+.navy-background{background-color:#00007d}
+.olive{color:#606000}
+.olive-background{background-color:#7d7d00}
+.purple{color:#600060}
+.purple-background{background-color:#7d007d}
+.red{color:#bf0000}
+.red-background{background-color:#fa0000}
+.silver{color:#909090}
+.silver-background{background-color:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background-color:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background-color:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background-color:#fafa00}
+span.icon>.fa{cursor:default}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]:after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+ at media print{@page{margin:1.25cm .75cm}
+*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]:after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
+.sect1{padding-bottom:0!important}
+.sect1+.sect1{border:0!important}
+#header>h1:first-child{margin-top:1.25rem}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span:before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]:before{display:block}
+#footer{background:none!important;padding:0 .9375em}
+#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<style>
+/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*pre.CodeRay {background-color:#f7f7f8;}*/
+.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
+.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
+.CodeRay .line-numbers strong{color:rgba(0,0,0,.4)}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top;line-height:1.45}
+table.CodeRay td.line-numbers{text-align:right}
+table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
+table.CodeRay td.code{padding:0 0 0 .5em}
+table.CodeRay td.code>pre{padding:0}
+.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .annotation{color:#007}
+.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-value{color:#700}
+.CodeRay .binary{color:#509}
+.CodeRay .comment{color:#998;font-style:italic}
+.CodeRay .char{color:#04d}
+.CodeRay .char .content{color:#04d}
+.CodeRay .char .delimiter{color:#039}
+.CodeRay .class{color:#458;font-weight:bold}
+.CodeRay .complex{color:#a08}
+.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .color{color:#099}
+.CodeRay .class-variable{color:#369}
+.CodeRay .decorator{color:#b0b}
+.CodeRay .definition{color:#099}
+.CodeRay .delimiter{color:#000}
+.CodeRay .doc{color:#970}
+.CodeRay .doctype{color:#34b}
+.CodeRay .doc-string{color:#d42}
+.CodeRay .escape{color:#666}
+.CodeRay .entity{color:#800}
+.CodeRay .error{color:#808}
+.CodeRay .exception{color:inherit}
+.CodeRay .filename{color:#099}
+.CodeRay .function{color:#900;font-weight:bold}
+.CodeRay .global-variable{color:#008080}
+.CodeRay .hex{color:#058}
+.CodeRay .integer,.CodeRay .float{color:#099}
+.CodeRay .include{color:#555}
+.CodeRay .inline{color:#000}
+.CodeRay .inline .inline{background:#ccc}
+.CodeRay .inline .inline .inline{background:#bbb}
+.CodeRay .inline .inline-delimiter{color:#d14}
+.CodeRay .inline-delimiter{color:#d14}
+.CodeRay .important{color:#555;font-weight:bold}
+.CodeRay .interpreted{color:#b2b}
+.CodeRay .instance-variable{color:#008080}
+.CodeRay .label{color:#970}
+.CodeRay .local-variable{color:#963}
+.CodeRay .octal{color:#40e}
+.CodeRay .predefined{color:#369}
+.CodeRay .preprocessor{color:#579}
+.CodeRay .pseudo-class{color:#555}
+.CodeRay .directive{font-weight:bold}
+.CodeRay .type{font-weight:bold}
+.CodeRay .predefined-type{color:inherit}
+.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .key{color:#808}
+.CodeRay .key .delimiter{color:#606}
+.CodeRay .key .char{color:#80f}
+.CodeRay .value{color:#088}
+.CodeRay .regexp .delimiter{color:#808}
+.CodeRay .regexp .content{color:#808}
+.CodeRay .regexp .modifier{color:#808}
+.CodeRay .regexp .char{color:#d14}
+.CodeRay .regexp .function{color:#404;font-weight:bold}
+.CodeRay .string{color:#d20}
+.CodeRay .string .string .string{background:#ffd0d0}
+.CodeRay .string .content{color:#d14}
+.CodeRay .string .char{color:#d14}
+.CodeRay .string .delimiter{color:#d14}
+.CodeRay .shell{color:#d14}
+.CodeRay .shell .delimiter{color:#d14}
+.CodeRay .symbol{color:#990073}
+.CodeRay .symbol .content{color:#a60}
+.CodeRay .symbol .delimiter{color:#630}
+.CodeRay .tag{color:#008080}
+.CodeRay .tag-special{color:#d70}
+.CodeRay .variable{color:#036}
+.CodeRay .insert{background:#afa}
+.CodeRay .delete{background:#faa}
+.CodeRay .change{color:#aaf;background:#007}
+.CodeRay .head{color:#f8f;background:#505}
+.CodeRay .insert .insert{color:#080}
+.CodeRay .delete .delete{color:#800}
+.CodeRay .change .change{color:#66f}
+.CodeRay .head .head{color:#f4f}
+</style>
+</head>
+<body class="article">
+<div id="header">
+</div>
+<div id="content">
+<div class="sect1">
+<h2 id="translation-property-files"><a class="anchor" href="#translation-property-files"></a>Translation Property Files</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The translation properties files must exist in the same directory structure as the interface. The name of the properties file <code>InterfaceName.i18n_language_country_variant.properties</code>. For example if you have a class named <code>org.jboss.logging.tools.examples.ErrorMessages</code> and you want to translate this into French you create a properties file called <code>ErrorMessages.i18n_fr.properties</code> in a directory <code>org/jboss/logging/tools/examples</code>.</p>
+</div>
+</div>
+</div>
+</div>
+<script src="js/links.js"></script>
+<script>
+    window.onload=annotationLinks;
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index ef572bf..34a2822 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,12 +28,12 @@
     <parent>
         <groupId>org.jboss</groupId>
         <artifactId>jboss-parent</artifactId>
-        <version>14</version>
+        <version>20</version>
     </parent>
 
     <groupId>org.jboss.logging</groupId>
     <artifactId>jboss-logging-tools-parent</artifactId>
-    <version>2.0.1.Final</version>
+    <version>2.1.0.Final</version>
     <packaging>pom</packaging>
 
     <name>JBoss Logging Tools Parent</name>
@@ -49,12 +49,19 @@
         </developer>
     </developers>
 
+    <scm>
+        <connection>scm:git:git at github.com:jboss-logging/jboss-logging-tools.git</connection>
+        <developerConnection>scm:git:git at github.com:jboss-logging/jboss-logging-tools.git</developerConnection>
+        <url>http://github.com/jboss-logging/jboss-logging-tools</url>
+    </scm>
+
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <version.org.jboss.jdeparser>2.0.0.Final</version.org.jboss.jdeparser>
+        <version.org.jboss.jdeparser>2.0.2.Final</version.org.jboss.jdeparser>
         <version.org.jboss.logging>3.1.2.GA</version.org.jboss.logging>
-        <version.org.jboss.logmanager>1.3.2.Final</version.org.jboss.logmanager>
-        <version.org.testng>6.3.1</version.org.testng>
+        <version.org.jboss.logmanager>2.0.3.Final</version.org.jboss.logmanager>
+        <verion.org.jboss.forge.roaster>2.19.2.Final</verion.org.jboss.forge.roaster>
+        <version.junit>4.12</version.junit>
     </properties>
 
     <licenses>
@@ -92,16 +99,48 @@
             </dependency>
 
             <dependency>
-                <groupId>org.testng</groupId>
-                <artifactId>testng</artifactId>
-                <version>${version.org.testng}</version>
+                <groupId>org.jboss.forge.roaster</groupId>
+                <artifactId>roaster-api</artifactId>
+                <version>${verion.org.jboss.forge.roaster}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.jboss.forge.roaster</groupId>
+                <artifactId>roaster-jdt</artifactId>
+                <version>${verion.org.jboss.forge.roaster}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>junit</groupId>
+                <artifactId>junit</artifactId>
+                <version>${version.junit}</version>
+                <scope>test</scope>
             </dependency>
         </dependencies>
     </dependencyManagement>
 
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <artifactId>maven-javadoc-plugin</artifactId>
+                    <configuration>
+                        <links>
+                            <link>http://docs.oracle.com/javase/8/docs/api</link>
+                        </links>
+                        <show>public</show>
+                        <header>JBoss Logging Tools, ${project.version}</header>
+                        <footer>JBoss Logging Tools, ${project.version}</footer>
+                        <doctitle>JBoss Logging Tools, ${project.version}</doctitle>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+
     <modules>
         <module>annotations</module>
         <module>processor</module>
         <module>processor-tests</module>
+        <module>docs</module>
     </modules>
 </project>
diff --git a/processor-tests/pom.xml b/processor-tests/pom.xml
index 4c0923c..e176ee9 100644
--- a/processor-tests/pom.xml
+++ b/processor-tests/pom.xml
@@ -28,7 +28,7 @@
     <parent>
         <groupId>org.jboss.logging</groupId>
         <artifactId>jboss-logging-tools-parent</artifactId>
-        <version>2.0.1.Final</version>
+        <version>2.1.0.Final</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
@@ -64,8 +64,8 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
@@ -97,11 +97,14 @@
                 <artifactId>maven-compiler-plugin</artifactId>
                 <configuration>
                     <testExcludes>
+                        <exclude>**/ExpressionMessagesTest.java</exclude>
+                        <exclude>**/ExpressionsTest.java</exclude>
                         <exclude>**/LegacyLogger.java</exclude>
                         <exclude>**/LegacyLoggerTest.java</exclude>
                         <exclude>**/LegacyMessages.java</exclude>
                         <exclude>**/LegacyMessagesTest.java</exclude>
                         <exclude>**/GeneratedSourceAnalysisTest.java</exclude>
+                        <exclude>**/ReportGenerationTest.java</exclude>
                     </testExcludes>
                 </configuration>
             </plugin>
@@ -138,4 +141,4 @@
             </build>
         </profile>
     </profiles>
-</project>
\ No newline at end of file
+</project>
diff --git a/processor/pom.xml b/processor/pom.xml
index 46ddccd..21bc971 100644
--- a/processor/pom.xml
+++ b/processor/pom.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ JBoss, Home of Professional Open Source.
-  ~ Copyright 2010, Red Hat Inc., and individual contributors
+  ~ Copyright 2016, Red Hat, Inc., and individual contributors
   ~ as indicated by the @author tags. See the copyright.txt file in the
   ~ distribution for a full listing of individual contributors.
   ~
@@ -28,7 +28,7 @@
     <parent>
         <groupId>org.jboss.logging</groupId>
         <artifactId>jboss-logging-tools-parent</artifactId>
-        <version>2.0.1.Final</version>
+        <version>2.1.0.Final</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
@@ -37,6 +37,11 @@
 
     <name>JBoss Logging I18n Annotation Processor</name>
 
+    <properties>
+        <test.report.path>${project.build.testOutputDirectory}</test.report.path>
+        <expression.properties.path>${basedir}/src/test/resources/expression.properties</expression.properties.path>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>org.jboss.logging</groupId>
@@ -63,8 +68,18 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
+            <groupId>org.jboss.forge.roaster</groupId>
+            <artifactId>roaster-api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.forge.roaster</groupId>
+            <artifactId>roaster-jdt</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
@@ -89,19 +104,57 @@
                             <compilerArgument>-proc:none</compilerArgument>
                         </configuration>
                     </execution>
+                    <!-- Define that asciidoc reports should be generated -->
+                    <execution>
+                        <id>test-compile-adoc</id>
+                        <phase>test-compile</phase>
+                        <goals>
+                            <goal>testCompile</goal>
+                        </goals>
+                        <configuration>
+                            <compilerArgs>
+                                <arg>-Aorg.jboss.logging.tools.report.type=adoc</arg>
+                                <arg>-Aorg.jboss.logging.tools.report.path=${test.report.path}</arg>
+                                <arg>-Aorg.jboss.logging.tools.report.title=Test Title</arg>
+                                <arg>-Aorg.jboss.logging.tools.expressionProperties=${expression.properties.path}</arg>
+                            </compilerArgs>
+                        </configuration>
+                    </execution>
+                    <!-- Define that XML reports should be generated -->
+                    <execution>
+                        <id>test-compile-xml</id>
+                        <phase>test-compile</phase>
+                        <goals>
+                            <goal>testCompile</goal>
+                        </goals>
+                        <configuration>
+                            <compilerArgs>
+                                <arg>-Aorg.jboss.logging.tools.report.type=xml</arg>
+                                <arg>-Aorg.jboss.logging.tools.report.path=${test.report.path}</arg>
+                                <arg>-Aorg.jboss.logging.tools.report.title=Test Title</arg>
+                                <arg>-Aorg.jboss.logging.tools.expressionProperties=${expression.properties.path}</arg>
+                            </compilerArgs>
+                        </configuration>
+                    </execution>
                 </executions>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
                 <configuration>
+                    <environmentVariables>
+                        <JBOSS_LOGGING_TEST_VAR>envValue</JBOSS_LOGGING_TEST_VAR>
+                    </environmentVariables>
                     <systemPropertyVariables>
                         <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
                         <test.src.path>${project.build.testSourceDirectory}</test.src.path>
                         <test.generated.src.path>${project.build.directory}/generated-test-sources/test-annotations</test.generated.src.path>
+                        <test.report.path>${test.report.path}</test.report.path>
+                        <test.property>sysValue</test.property>
+                        <expressionPropertiesPath>${expression.properties.path}</expressionPropertiesPath>
                     </systemPropertyVariables>
                 </configuration>
             </plugin>
         </plugins>
     </build>
-</project>
\ No newline at end of file
+</project>
diff --git a/processor/src/main/java/org/jboss/logging/processor/apt/AbstractClassType.java b/processor/src/main/java/org/jboss/logging/processor/apt/AbstractClassType.java
new file mode 100644
index 0000000..f934ee3
--- /dev/null
+++ b/processor/src/main/java/org/jboss/logging/processor/apt/AbstractClassType.java
@@ -0,0 +1,82 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2016, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging.processor.apt;
+
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.Element;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.Elements;
+import javax.lang.model.util.Types;
+
+import org.jboss.logging.processor.model.ClassType;
+import org.jboss.logging.processor.util.ElementHelper;
+
+/**
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+abstract class AbstractClassType implements ClassType {
+    protected final ProcessingEnvironment processingEnv;
+    protected final Elements elements;
+    protected final Types types;
+    protected final TypeMirror typeMirror;
+
+    AbstractClassType(final ProcessingEnvironment processingEnv, final TypeMirror typeMirror) {
+        this.processingEnv = processingEnv;
+        this.elements = processingEnv.getElementUtils();
+        this.types = processingEnv.getTypeUtils();
+        this.typeMirror = typeMirror;
+    }
+
+    AbstractClassType(final ProcessingEnvironment processingEnv, final Element element) {
+        this.processingEnv = processingEnv;
+        this.elements = processingEnv.getElementUtils();
+        this.types = processingEnv.getTypeUtils();
+        this.typeMirror = element.asType();
+    }
+
+    @Override
+    public final boolean isAssignableFrom(final Class<?> type) {
+        return types.isAssignable(types.erasure(toType(type)), types.erasure(this.typeMirror));
+    }
+
+    @Override
+    public final boolean isSubtypeOf(final Class<?> type) {
+        return types.isSubtype(types.erasure(this.typeMirror), toType(type));
+    }
+
+    @Override
+    public final boolean isSameAs(final Class<?> type) {
+        return types.isSameType(types.erasure(this.typeMirror), toType(type));
+    }
+
+    /**
+     * Creates a {@link TypeMirror} from a class type.
+     *
+     * @param type the type to create the {@link TypeMirror} for
+     *
+     * @return the {@code TypeMirror} to represent the type
+     */
+    private TypeMirror toType(final Class<?> type) {
+        return types.erasure(ElementHelper.toType(elements, type));
+    }
+}
diff --git a/processor/src/main/java/org/jboss/logging/processor/apt/AbstractGenerator.java b/processor/src/main/java/org/jboss/logging/processor/apt/AbstractGenerator.java
index 76b1f4a..31876ac 100644
--- a/processor/src/main/java/org/jboss/logging/processor/apt/AbstractGenerator.java
+++ b/processor/src/main/java/org/jboss/logging/processor/apt/AbstractGenerator.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -21,17 +21,28 @@
  */
 package org.jboss.logging.processor.apt;
 
+import java.io.Writer;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import javax.annotation.processing.Filer;
 import javax.annotation.processing.ProcessingEnvironment;
 import javax.annotation.processing.SupportedOptions;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.PackageElement;
 import javax.lang.model.element.TypeElement;
 import javax.lang.model.util.Elements;
 import javax.lang.model.util.Types;
 
+import org.jboss.logging.processor.model.DelegatingElement;
+import org.jboss.logging.processor.model.DelegatingTypeElement;
 import org.jboss.logging.processor.model.MessageInterface;
 
 /**
@@ -44,7 +55,7 @@ public abstract class AbstractGenerator {
 
     private final ToolLogger logger;
 
-    private final ProcessingEnvironment processingEnv;
+    final ProcessingEnvironment processingEnv;
 
     /**
      * Constructs a new processor.
@@ -76,42 +87,6 @@ public abstract class AbstractGenerator {
     }
 
     /**
-     * Returns the filer.
-     *
-     * @return the filer
-     */
-    final Filer filer() {
-        return processingEnv.getFiler();
-    }
-
-    /**
-     * Returns the element utils.
-     *
-     * @return the utils
-     */
-    final Elements elementUtils() {
-        return processingEnv.getElementUtils();
-    }
-
-    /**
-     * Returns the type utils.
-     *
-     * @return the utils
-     */
-    public final Types typeUtils() {
-        return processingEnv.getTypeUtils();
-    }
-
-    /**
-     * Returns the processing environment.
-     *
-     * @return the processing environment being used.
-     */
-    public final ProcessingEnvironment processingEnv() {
-        return processingEnv;
-    }
-
-    /**
      * Returns the name of the processor.
      *
      * @return the name of the processor.
@@ -128,7 +103,7 @@ public abstract class AbstractGenerator {
     public final Set<String> getSupportedOptions() {
         SupportedOptions options = this.getClass().getAnnotation(SupportedOptions.class);
         if (options != null) {
-            return new HashSet<String>(Arrays.asList(options.value()));
+            return new HashSet<>(Arrays.asList(options.value()));
         }
 
         return Collections.emptySet();
diff --git a/processor/src/main/java/org/jboss/logging/processor/apt/AbstractMessageObjectType.java b/processor/src/main/java/org/jboss/logging/processor/apt/AbstractMessageObjectType.java
deleted file mode 100644
index 5537efa..0000000
--- a/processor/src/main/java/org/jboss/logging/processor/apt/AbstractMessageObjectType.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package org.jboss.logging.processor.apt;
-
-import static org.jboss.logging.processor.util.ElementHelper.typeToString;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import javax.lang.model.element.Element;
-import javax.lang.model.element.TypeParameterElement;
-import javax.lang.model.type.DeclaredType;
-import javax.lang.model.type.TypeMirror;
-import javax.lang.model.type.WildcardType;
-import javax.lang.model.util.ElementFilter;
-import javax.lang.model.util.Elements;
-import javax.lang.model.util.Types;
-
-import org.jboss.logging.processor.model.MessageObjectType;
-
-/**
- * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
- */
-abstract class AbstractMessageObjectType implements MessageObjectType {
-    protected final Elements elements;
-    protected final Types types;
-    protected final TypeMirror typeMirror;
-
-    protected AbstractMessageObjectType(final Elements elements, final Types types, final TypeMirror typeMirror) {
-        this.elements = elements;
-        this.types = types;
-        this.typeMirror = typeMirror;
-    }
-
-    protected AbstractMessageObjectType(final Elements elements, final Types types, final Element element) {
-        this.elements = elements;
-        this.types = types;
-        this.typeMirror = element.asType();
-    }
-
-    @Override
-    public String type() {
-        return name();
-    }
-
-    @Override
-    public final boolean isAssignableFrom(final Class<?> type) {
-        final TypeMirror typeMirror = elements.getTypeElement(typeToString(type)).asType();
-        return types.isAssignable(types.erasure(typeMirror), types.erasure(this.typeMirror));
-    }
-
-    @Override
-    public final boolean isSubtypeOf(final Class<?> type) {
-        final TypeMirror typeMirror = elements.getTypeElement(typeToString(type)).asType();
-        return types.isSubtype(types.erasure(this.typeMirror), types.erasure(typeMirror));
-    }
-
-    @Override
-    public final boolean isSameAs(final Class<?> type) {
-        return type().equals(typeToString(type));
-    }
-}
diff --git a/processor/src/main/java/org/jboss/logging/processor/apt/ImplementationClassGenerator.java b/processor/src/main/java/org/jboss/logging/processor/apt/ImplementationClassGenerator.java
index 7859883..7e9616c 100644
--- a/processor/src/main/java/org/jboss/logging/processor/apt/ImplementationClassGenerator.java
+++ b/processor/src/main/java/org/jboss/logging/processor/apt/ImplementationClassGenerator.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -19,6 +19,7 @@
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
+
 package org.jboss.logging.processor.apt;
 
 import java.io.IOException;
@@ -59,7 +60,7 @@ final class ImplementationClassGenerator extends AbstractGenerator {
     @Override
     public void processTypeElement(final TypeElement annotation, final TypeElement element, final MessageInterface messageInterface) {
         try {
-            final ClassModel classModel = ClassModelFactory.implementation(filer(), messageInterface, useLogging31);
+            final ClassModel classModel = ClassModelFactory.implementation(processingEnv, messageInterface, useLogging31);
             classModel.generateAndWrite();
         } catch (IllegalStateException | IOException e) {
             logger().error(element, e);
diff --git a/processor/src/main/java/org/jboss/logging/processor/apt/LoggingToolsProcessor.java b/processor/src/main/java/org/jboss/logging/processor/apt/LoggingToolsProcessor.java
index 13d9d5a..4f4a5df 100644
--- a/processor/src/main/java/org/jboss/logging/processor/apt/LoggingToolsProcessor.java
+++ b/processor/src/main/java/org/jboss/logging/processor/apt/LoggingToolsProcessor.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -19,27 +19,40 @@
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
+
 package org.jboss.logging.processor.apt;
 
 import static javax.lang.model.util.ElementFilter.typesIn;
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.lang.annotation.Annotation;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Properties;
 import java.util.Set;
 import javax.annotation.processing.AbstractProcessor;
 import javax.annotation.processing.ProcessingEnvironment;
 import javax.annotation.processing.RoundEnvironment;
 import javax.annotation.processing.SupportedOptions;
 import javax.lang.model.SourceVersion;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
 import javax.lang.model.element.Element;
 import javax.lang.model.element.Modifier;
 import javax.lang.model.element.TypeElement;
+import javax.tools.Diagnostic;
 
 import org.jboss.logging.annotations.Cause;
+import org.jboss.logging.annotations.ConstructType;
 import org.jboss.logging.annotations.Field;
 import org.jboss.logging.annotations.FormatWith;
 import org.jboss.logging.annotations.LogMessage;
@@ -47,14 +60,16 @@ import org.jboss.logging.annotations.LoggingClass;
 import org.jboss.logging.annotations.Message;
 import org.jboss.logging.annotations.MessageBundle;
 import org.jboss.logging.annotations.MessageLogger;
+import org.jboss.logging.annotations.Once;
 import org.jboss.logging.annotations.Param;
 import org.jboss.logging.annotations.Pos;
 import org.jboss.logging.annotations.Property;
+import org.jboss.logging.annotations.Signature;
 import org.jboss.logging.annotations.Transform;
 import org.jboss.logging.annotations.ValidIdRange;
 import org.jboss.logging.annotations.ValidIdRanges;
+import org.jboss.logging.processor.model.DelegatingElement;
 import org.jboss.logging.processor.model.MessageInterface;
-import org.jboss.logging.processor.util.ElementHelper;
 import org.jboss.logging.processor.validation.ValidationMessage;
 import org.jboss.logging.processor.validation.Validator;
 
@@ -65,11 +80,15 @@ import org.jboss.logging.processor.validation.Validator;
  * @author Kevin Pollet - SERLI - (kevin.pollet at serli.com)
  */
 @SupportedOptions({
-        LoggingToolsProcessor.DEBUG_OPTION
+        LoggingToolsProcessor.DEBUG_OPTION,
+        LoggingToolsProcessor.EXPRESSION_PROPERTIES,
+        LoggingToolsProcessor.ADD_GENERATED_ANNOTATION,
 })
 public class LoggingToolsProcessor extends AbstractProcessor {
 
     public static final String DEBUG_OPTION = "debug";
+    static final String EXPRESSION_PROPERTIES = "org.jboss.logging.tools.expressionProperties";
+    static final String ADD_GENERATED_ANNOTATION = "org.jboss.logging.tools.addGeneratedAnnotation";
     private final List<String> interfaceAnnotations = Arrays.asList(MessageBundle.class.getName(), MessageLogger.class.getName());
     private final List<AbstractGenerator> generators;
     private final Set<String> supportedAnnotations;
@@ -80,28 +99,30 @@ public class LoggingToolsProcessor extends AbstractProcessor {
      */
     public LoggingToolsProcessor() {
         this.generators = new ArrayList<>();
-        final Set<String> annotations = new HashSet<>();
-        // Interface annotations
-        annotations.addAll(interfaceAnnotations);
-        // Other annotations
-        annotations.add(Cause.class.getName());
-        annotations.add(Field.class.getName());
-        annotations.add(FormatWith.class.getName());
-        annotations.add(LoggingClass.class.getName());
-        annotations.add(LogMessage.class.getName());
-        annotations.add(Message.class.getName());
-        annotations.add(Param.class.getName());
-        annotations.add(Pos.class.getName());
-        annotations.add(Property.class.getName());
-        annotations.add(Transform.class.getName());
-        annotations.add(ValidIdRange.class.getName());
-        annotations.add(ValidIdRanges.class.getName());
-        this.supportedAnnotations = Collections.unmodifiableSet(annotations);
+        this.supportedAnnotations = createSupportedAnnotations(
+                Cause.class,
+                ConstructType.class,
+                Field.class,
+                FormatWith.class,
+                LoggingClass.class,
+                LogMessage.class,
+                Message.class,
+                MessageBundle.class,
+                MessageLogger.class,
+                Once.class,
+                Param.class,
+                Pos.class,
+                Property.class,
+                Signature.class,
+                Transform.class,
+                ValidIdRange.class,
+                ValidIdRanges.class
+        );
     }
 
     @Override
     public Set<String> getSupportedOptions() {
-        Set<String> supportedOptions = new HashSet<String>();
+        Set<String> supportedOptions = new HashSet<>();
 
         //Add global options
         SupportedOptions globalOptions = this.getClass().getAnnotation(SupportedOptions.class);
@@ -137,12 +158,37 @@ public class LoggingToolsProcessor extends AbstractProcessor {
         generators.add(new ImplementationClassGenerator(processingEnv));
         generators.add(new TranslationClassGenerator(processingEnv));
         generators.add(new TranslationFileGenerator(processingEnv));
+        generators.add(new ReportFileGenerator(processingEnv));
     }
 
     @Override
     public boolean process(final Set<? extends TypeElement> annotations, final RoundEnvironment roundEnv) {
-        boolean process = true;
-        final Validator validator = new Validator();
+        if (!roundEnv.processingOver() && !annotations.isEmpty()) {
+            doProcess(annotations, roundEnv);
+        }
+        return true;
+    }
+
+    private void doProcess(final Set<? extends TypeElement> annotations, final RoundEnvironment roundEnv) {
+        final String propertiesPath = processingEnv.getOptions().getOrDefault(EXPRESSION_PROPERTIES, "");
+        final Properties expressionProperties = new Properties();
+        if (!propertiesPath.isEmpty()) {
+            final Path path = Paths.get(propertiesPath);
+            if (Files.notExists(path)) {
+                logger.error("Expression properties file %s does not exist.", propertiesPath);
+                return;
+            } else {
+                try (final BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) {
+                    expressionProperties.load(reader);
+                } catch (IOException e) {
+                    logger.error(e, "Error reading expression properties file %s", propertiesPath);
+                    return;
+                }
+            }
+        }
+        final boolean addGeneratedAnnotation = Boolean.parseBoolean(processingEnv.getOptions().getOrDefault(ADD_GENERATED_ANNOTATION, "true"));
+        boolean generate = true;
+        final Validator validator = new Validator(processingEnv);
 
         //Call jboss logging tools
         for (TypeElement annotation : annotations) {
@@ -152,26 +198,14 @@ public class LoggingToolsProcessor extends AbstractProcessor {
                     final Set<? extends TypeElement> interfaces = typesIn(roundEnv.getElementsAnnotatedWith(annotation));
                     for (TypeElement interfaceElement : interfaces) {
                         try {
-                            final MessageInterface messageInterface = MessageInterfaceFactory.of(processingEnv, interfaceElement);
+                            final MessageInterface messageInterface = MessageInterfaceFactory.of(processingEnv, interfaceElement, expressionProperties, addGeneratedAnnotation);
                             final Collection<ValidationMessage> validationMessages = validator.validate(messageInterface);
                             for (ValidationMessage message : validationMessages) {
-                                final Element element = ElementHelper.fromMessageObject(message.getMessageObject());
-                                switch (message.type()) {
-                                    case ERROR: {
-                                        logger.error(element, message.getMessage());
-                                        process = false;
-                                        break;
-                                    }
-                                    case WARN: {
-                                        logger.warn(element, message.getMessage());
-                                        break;
-                                    }
-                                    default: {
-                                        logger.note(element, message.getMessage());
-                                    }
+                                if (message.printMessage(processingEnv.getMessager())) {
+                                    generate = false;
                                 }
                             }
-                            if (process) {
+                            if (generate) {
                                 if (interfaceElement.getKind().isInterface()
                                         && !interfaceElement.getModifiers().contains(Modifier.PRIVATE)) {
                                     for (AbstractGenerator processor : generators) {
@@ -181,7 +215,16 @@ public class LoggingToolsProcessor extends AbstractProcessor {
                                 }
                             }
                         } catch (ProcessingException e) {
-                            logger.error(e.getElement(), e.getMessage());
+                            final AnnotationMirror a = e.getAnnotation();
+                            final AnnotationValue value = e.getAnnotationValue();
+                            final Element element = resolveElement(e.getElement());
+                            if (a == null) {
+                                processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, e.getMessage(), element);
+                            } else if (value == null) {
+                                processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, e.getMessage(), element, a);
+                            } else {
+                                processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, e.getMessage(), element, a, value);
+                            }
                         }
                     }
                 } catch (Throwable t) {
@@ -189,6 +232,21 @@ public class LoggingToolsProcessor extends AbstractProcessor {
                 }
             }
         }
-        return process;
+    }
+
+    @SafeVarargs
+    private static Set<String> createSupportedAnnotations(final Class<? extends Annotation>... annotations) {
+        final Set<String> supportedAnnotations = new HashSet<>(annotations.length);
+        for (Class<?> c : annotations) {
+            supportedAnnotations.add(c.getName());
+        }
+        return Collections.unmodifiableSet(supportedAnnotations);
+    }
+
+    private static Element resolveElement(final Element element) {
+        if (element instanceof DelegatingElement) {
+            return ((DelegatingElement) element).getDelegate();
+        }
+        return element;
     }
 }
diff --git a/processor/src/main/java/org/jboss/logging/processor/apt/MessageInterfaceFactory.java b/processor/src/main/java/org/jboss/logging/processor/apt/MessageInterfaceFactory.java
index 68e2216..f19d03b 100644
--- a/processor/src/main/java/org/jboss/logging/processor/apt/MessageInterfaceFactory.java
+++ b/processor/src/main/java/org/jboss/logging/processor/apt/MessageInterfaceFactory.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -32,13 +32,16 @@ import java.util.Collections;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Objects;
+import java.util.Properties;
 import java.util.Set;
+import java.util.stream.Collectors;
 import javax.annotation.processing.ProcessingEnvironment;
 import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
 import javax.lang.model.element.TypeElement;
 import javax.lang.model.type.TypeMirror;
 import javax.lang.model.util.ElementFilter;
-import javax.lang.model.util.Elements;
 import javax.lang.model.util.Types;
 
 import org.jboss.logging.BasicLogger;
@@ -69,31 +72,33 @@ public final class MessageInterfaceFactory {
      * Creates a message interface from the {@link javax.lang.model.element.TypeElement} specified by the {@code
      * interfaceElement} parameter.
      *
-     * @param processingEnvironment the annotation processing environment.
-     * @param interfaceElement      the interface element to parse.
+     * @param processingEnv        the annotation processing environment.
+     * @param interfaceElement     the interface element to parse.
+     * @param expressionProperties the properties used to resolve expressions
      *
      * @return a message interface for the interface element.
      */
-    public static MessageInterface of(final ProcessingEnvironment processingEnvironment, final TypeElement interfaceElement) {
-        final Types types = processingEnvironment.getTypeUtils();
-        final Elements elements = processingEnvironment.getElementUtils();
-        if (types.isSameType(interfaceElement.asType(), elements.getTypeElement(BasicLogger.class.getName()).asType())) {
+    public static MessageInterface of(final ProcessingEnvironment processingEnv, final TypeElement interfaceElement,
+                                      final Properties expressionProperties, final boolean addGeneratedAnnotation) {
+        final Types types = processingEnv.getTypeUtils();
+        if (types.isSameType(interfaceElement.asType(), ElementHelper.toType(processingEnv.getElementUtils(), BasicLogger.class))) {
             MessageInterface result = LOGGER_INTERFACE;
             if (result == null) {
                 synchronized (LOCK) {
                     result = LOGGER_INTERFACE;
                     if (result == null) {
-                        LOGGER_INTERFACE = LoggerInterface.of(elements, types);
+                        LOGGER_INTERFACE = LoggerInterface.of(processingEnv);
                         result = LOGGER_INTERFACE;
                     }
                 }
             }
             return result;
         }
-        final AptMessageInterface result = new AptMessageInterface(interfaceElement, types, elements);
+        final AptMessageInterface result = new AptMessageInterface(interfaceElement, processingEnv, expressionProperties, addGeneratedAnnotation);
         result.init();
         for (TypeMirror typeMirror : interfaceElement.getInterfaces()) {
-            final MessageInterface extended = MessageInterfaceFactory.of(processingEnvironment, (TypeElement) types.asElement(typeMirror));
+            final MessageInterface extended = MessageInterfaceFactory.of(processingEnv, (TypeElement) types.asElement(typeMirror),
+                    expressionProperties, addGeneratedAnnotation);
             result.extendedInterfaces.add(extended);
             result.extendedInterfaces.addAll(extended.extendedInterfaces());
         }
@@ -103,11 +108,13 @@ public final class MessageInterfaceFactory {
     /**
      * Message interface implementation.
      */
-    private static class AptMessageInterface extends AbstractMessageObjectType implements MessageInterface {
+    private static class AptMessageInterface extends AbstractClassType implements MessageInterface {
         private final TypeElement interfaceElement;
         private final Set<MessageInterface> extendedInterfaces;
         private final List<MessageMethod> messageMethods;
         private final List<ValidIdRange> validIdRanges;
+        private final Properties expressionProperties;
+        private final TypeElement generatedAnnotation;
         private String projectCode;
         private String packageName;
         private String simpleName;
@@ -115,18 +122,30 @@ public final class MessageInterfaceFactory {
         private String fqcn;
         private int idLen;
 
-        private AptMessageInterface(final TypeElement interfaceElement, final Types types, final Elements elements) {
-            super(elements, types, interfaceElement);
+        private AptMessageInterface(final TypeElement interfaceElement, final ProcessingEnvironment processingEnv,
+                                    final Properties expressionProperties, final boolean addGeneratedAnnotation) {
+            super(processingEnv, interfaceElement);
             this.interfaceElement = interfaceElement;
-            this.messageMethods = new LinkedList<MessageMethod>();
-            this.extendedInterfaces = new LinkedHashSet<MessageInterface>();
+            this.expressionProperties = expressionProperties;
+            this.messageMethods = new LinkedList<>();
+            this.extendedInterfaces = new LinkedHashSet<>();
             if (ElementHelper.isAnnotatedWith(interfaceElement, ValidIdRanges.class)) {
                 validIdRanges = Arrays.asList(interfaceElement.getAnnotation(ValidIdRanges.class).value());
             } else if (ElementHelper.isAnnotatedWith(interfaceElement, ValidIdRange.class)) {
-                validIdRanges = Arrays.asList(interfaceElement.getAnnotation(ValidIdRange.class));
+                validIdRanges = Collections.singletonList(interfaceElement.getAnnotation(ValidIdRange.class));
             } else {
                 validIdRanges = Collections.emptyList();
             }
+            // Determine the type for the generated annotation
+            TypeElement generatedAnnotation = null;
+            if (addGeneratedAnnotation) {
+                generatedAnnotation = processingEnv.getElementUtils().getTypeElement("javax.annotation.Generated");
+                if (generatedAnnotation == null) {
+                    // As of Java 9 the annotation has been moved to the javax.annotation.processing package
+                    generatedAnnotation = processingEnv.getElementUtils().getTypeElement("javax.annotation.processing.Generated");
+                }
+            }
+            this.generatedAnnotation = generatedAnnotation;
         }
 
         @Override
@@ -146,7 +165,7 @@ public final class MessageInterfaceFactory {
 
         @Override
         public int hashCode() {
-            return HashCodeBuilder.builder().add(name()).toHashCode();
+            return Objects.hash(qualifiedName);
         }
 
         @Override
@@ -165,15 +184,10 @@ public final class MessageInterfaceFactory {
         }
 
         private void init() {
-            // Keeping below for now
-            final Collection<ExecutableElement> methods = ElementFilter.methodsIn(interfaceElement.getEnclosedElements());
-            final MessageMethodBuilder builder = MessageMethodBuilder.create(elements, types);
-            for (ExecutableElement param : methods) {
-                builder.add(param);
-            }
+            final MessageMethodBuilder builder = MessageMethodBuilder.create(processingEnv, expressionProperties)
+                    .add(getMessageMethods(interfaceElement));
             final Collection<MessageMethod> m = builder.build();
-            if (m != null)
-                this.messageMethods.addAll(m);
+            this.messageMethods.addAll(m);
             final MessageBundle messageBundle = interfaceElement.getAnnotation(MessageBundle.class);
             final MessageLogger messageLogger = interfaceElement.getAnnotation(MessageLogger.class);
             if (messageBundle != null) {
@@ -182,7 +196,9 @@ public final class MessageInterfaceFactory {
             } else if (messageLogger != null) {
                 projectCode = messageLogger.projectCode();
                 idLen = messageLogger.length();
-            } // TODO (jrp) this should cause an error
+            } else {
+                throw new ProcessingException(interfaceElement, "Interface is not annotated with @MessageBundle or @MessageLogger");
+            }
             qualifiedName = elements.getBinaryName(interfaceElement).toString();
             final int lastDot = qualifiedName.lastIndexOf(".");
             if (lastDot > 0) {
@@ -203,11 +219,6 @@ public final class MessageInterfaceFactory {
         }
 
         @Override
-        public String type() {
-            return name();
-        }
-
-        @Override
         public String packageName() {
             return packageName;
         }
@@ -228,16 +239,6 @@ public final class MessageInterfaceFactory {
         }
 
         @Override
-        public AnnotatedType getAnnotatedType() {
-            if (ElementHelper.isAnnotatedWith(interfaceElement, MessageLogger.class)) {
-                return AnnotatedType.MESSAGE_LOGGER;
-            } else if (ElementHelper.isAnnotatedWith(interfaceElement, MessageBundle.class)) {
-                return AnnotatedType.MESSAGE_BUNDLE;
-            }
-            return AnnotatedType.NONE;
-        }
-
-        @Override
         public List<ValidIdRange> validIdRanges() {
             return validIdRanges;
         }
@@ -249,6 +250,21 @@ public final class MessageInterfaceFactory {
 
 
         @Override
+        public TypeElement getDelegate() {
+            return interfaceElement;
+        }
+
+        @Override
+        public TypeElement generatedAnnotation() {
+            return generatedAnnotation;
+        }
+
+        @Override
+        public Properties expressionProperties() {
+            return expressionProperties;
+        }
+
+        @Override
         public boolean equals(final Object obj) {
             if (obj == this) {
                 return true;
@@ -267,37 +283,27 @@ public final class MessageInterfaceFactory {
         }
 
 
-        @Override
-        public TypeElement reference() {
-            return interfaceElement;
-        }
-
-
     }
 
-    private static class LoggerInterface extends AbstractMessageObjectType implements MessageInterface {
+    private static class LoggerInterface extends AbstractClassType implements MessageInterface {
         private final TypeElement loggerInterface;
         private final Set<MessageMethod> messageMethods;
 
-        private LoggerInterface(final Elements elements, final Types types) {
-            // TODO (jrp) BasicLogger type can likely be initialized once
-            super(elements, types, elements.getTypeElement(BasicLogger.class.getName()));
-            messageMethods = new LinkedHashSet<MessageMethod>();
-            this.loggerInterface = elements.getTypeElement(BasicLogger.class.getName());
+        private LoggerInterface(final ProcessingEnvironment processingEnv, final TypeElement loggerInterface) {
+            super(processingEnv, loggerInterface.asType());
+            messageMethods = new LinkedHashSet<>();
+            this.loggerInterface = loggerInterface;
         }
 
         private void init() {
-            final MessageMethodBuilder builder = MessageMethodBuilder.create(elements, types);
-            List<ExecutableElement> methods = ElementFilter.methodsIn(loggerInterface.getEnclosedElements());
-            for (ExecutableElement method : methods) {
-                builder.add(method);
-            }
+            final MessageMethodBuilder builder = MessageMethodBuilder.create(processingEnv)
+                    .add(getMessageMethods(loggerInterface));
             final Collection<MessageMethod> m = builder.build();
             this.messageMethods.addAll(m);
         }
 
-        static LoggerInterface of(final Elements elements, final Types types) {
-            final LoggerInterface result = new LoggerInterface(elements, types);
+        static LoggerInterface of(final ProcessingEnvironment processingEnv) {
+            final LoggerInterface result = new LoggerInterface(processingEnv, ElementHelper.toTypeElement(processingEnv, BasicLogger.class));
             result.init();
             return result;
         }
@@ -343,11 +349,6 @@ public final class MessageInterfaceFactory {
         }
 
         @Override
-        public AnnotatedType getAnnotatedType() {
-            return AnnotatedType.NONE;
-        }
-
-        @Override
         public List<ValidIdRange> validIdRanges() {
             return Collections.emptyList();
         }
@@ -358,11 +359,6 @@ public final class MessageInterfaceFactory {
         }
 
         @Override
-        public TypeElement reference() {
-            return loggerInterface;
-        }
-
-        @Override
         public int hashCode() {
             return HashCodeBuilder.builder().add(name()).toHashCode();
         }
@@ -393,5 +389,17 @@ public final class MessageInterfaceFactory {
         public String getComment() {
             return elements.getDocComment(loggerInterface);
         }
+
+        @Override
+        public TypeElement getDelegate() {
+            return loggerInterface;
+        }
+    }
+
+    private static Collection<ExecutableElement> getMessageMethods(final TypeElement intf) {
+        return ElementFilter.methodsIn(intf.getEnclosedElements())
+                .stream()
+                .filter(method -> !method.isDefault() && !method.getModifiers().contains(Modifier.STATIC))
+                .collect(Collectors.toList());
     }
 }
diff --git a/processor/src/main/java/org/jboss/logging/processor/apt/MessageMethodBuilder.java b/processor/src/main/java/org/jboss/logging/processor/apt/MessageMethodBuilder.java
index 247c4d8..f33abfe 100644
--- a/processor/src/main/java/org/jboss/logging/processor/apt/MessageMethodBuilder.java
+++ b/processor/src/main/java/org/jboss/logging/processor/apt/MessageMethodBuilder.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -22,40 +22,49 @@
 
 package org.jboss.logging.processor.apt;
 
-import static java.util.Collections.unmodifiableSet;
-import static org.jboss.logging.processor.util.ElementHelper.findByName;
-import static org.jboss.logging.processor.util.ElementHelper.inheritsMessage;
-import static org.jboss.logging.processor.util.ElementHelper.isOverloaded;
-import static org.jboss.logging.processor.util.ElementHelper.parameterCount;
+import static org.jboss.logging.processor.util.ElementHelper.isAnnotatedWith;
 import static org.jboss.logging.processor.util.Objects.HashCodeBuilder;
 import static org.jboss.logging.processor.util.Objects.ToStringBuilder;
 import static org.jboss.logging.processor.util.Objects.areEqual;
 
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.EnumMap;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 import java.util.Set;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.AnnotationMirror;
 import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.VariableElement;
 import javax.lang.model.type.TypeMirror;
 import javax.lang.model.util.Elements;
-import javax.lang.model.util.Types;
 
 import org.jboss.logging.Logger;
+import org.jboss.logging.annotations.Cause;
+import org.jboss.logging.annotations.Field;
 import org.jboss.logging.annotations.LogMessage;
 import org.jboss.logging.annotations.Message;
 import org.jboss.logging.annotations.Message.Format;
+import org.jboss.logging.annotations.Param;
+import org.jboss.logging.annotations.Pos;
+import org.jboss.logging.annotations.Property;
+import org.jboss.logging.annotations.Suppressed;
 import org.jboss.logging.processor.model.MessageMethod;
 import org.jboss.logging.processor.model.Parameter;
-import org.jboss.logging.processor.model.Parameter.ParameterType;
 import org.jboss.logging.processor.model.ReturnType;
 import org.jboss.logging.processor.model.ThrowableType;
 import org.jboss.logging.processor.util.Comparison;
 import org.jboss.logging.processor.util.ElementHelper;
+import org.jboss.logging.processor.util.Expressions;
 
 /**
  * Date: 29.07.2011
@@ -66,21 +75,22 @@ final class MessageMethodBuilder {
 
     private static final String MESSAGE_METHOD_SUFFIX = "$str";
     private final List<ExecutableElement> methods;
-    private final Elements elements;
-    private final Types types;
+    private final ProcessingEnvironment processingEnv;
+    private final Properties expressionProperties;
 
-    private MessageMethodBuilder(final Elements elements, final Types types) {
-        this.elements = elements;
-        this.types = types;
+    private MessageMethodBuilder(final ProcessingEnvironment processingEnv, final Properties expressionProperties) {
+        this.processingEnv = processingEnv;
+        this.expressionProperties = expressionProperties;
         methods = new LinkedList<>();
     }
 
-    MessageMethodBuilder add(final ExecutableElement method) {
-        methods.add(method);
+    MessageMethodBuilder add(final Collection<ExecutableElement> methods) {
+        this.methods.addAll(methods);
         return this;
     }
 
     Set<MessageMethod> build() {
+        final Elements elements = processingEnv.getElementUtils();
         final Set<MessageMethod> result = new LinkedHashSet<>();
         for (ExecutableElement elementMethod : methods) {
             final AptMessageMethod resultMethod = new AptMessageMethod(elements, elementMethod);
@@ -88,11 +98,11 @@ final class MessageMethodBuilder {
             resultMethod.message = findMessage(methods, elementMethod);
             resultMethod.isOverloaded = isOverloaded(methods, elementMethod);
             for (TypeMirror thrownType : elementMethod.getThrownTypes()) {
-                resultMethod.thrownTypes.add(ThrowableTypeFactory.of(elements, types, thrownType));
+                resultMethod.thrownTypes.add(ThrowableTypeFactory.of(processingEnv, thrownType));
             }
 
             // Create a list of parameters
-            for (Parameter parameter : ParameterFactory.of(elements, types, resultMethod.method)) {
+            for (Parameter parameter : ParameterFactory.of(processingEnv, resultMethod.method)) {
                 resultMethod.add(parameter);
             }
             // Check to see if the method is overloaded
@@ -104,7 +114,7 @@ final class MessageMethodBuilder {
                 resultMethod.translationKey = resultMethod.name();
             }
             // Set the return type
-            resultMethod.returnType = ReturnTypeFactory.of(elements, types, elementMethod.getReturnType(), resultMethod);
+            resultMethod.returnType = ReturnTypeFactory.of(processingEnv, elementMethod.getReturnType(), resultMethod);
             result.add(resultMethod);
         }
         return Collections.unmodifiableSet(result);
@@ -114,7 +124,7 @@ final class MessageMethodBuilder {
         AptMessage result = null;
         Message message = method.getAnnotation(Message.class);
         if (message != null) {
-            result = new AptMessage(message);
+            result = new AptMessage(message, expressionProperties);
             result.hasId = hasMessageId(message);
             result.inheritsId = message.id() == Message.INHERIT;
             if (result.inheritsId()) {
@@ -126,11 +136,11 @@ final class MessageMethodBuilder {
                 result.id = message.id();
             }
         } else {
-            final Collection<ExecutableElement> allMethods = findByName(methods, method.getSimpleName(), parameterCount(method.getParameters()));
+            final Collection<ExecutableElement> allMethods = findByName(methods, method);
             for (ExecutableElement m : allMethods) {
                 message = m.getAnnotation(Message.class);
                 if (message != null) {
-                    result = new AptMessage(message);
+                    result = new AptMessage(message, expressionProperties);
                     result.hasId = hasMessageId(message);
                     result.inheritsId = message.id() == Message.INHERIT;
                     if (result.inheritsId()) {
@@ -166,8 +176,110 @@ final class MessageMethodBuilder {
         return message != null && (message.id() != Message.NONE && message.id() != Message.INHERIT);
     }
 
-    static MessageMethodBuilder create(final Elements elements, final Types types) {
-        return new MessageMethodBuilder(elements, types);
+    private Collection<ExecutableElement> findByName(final Collection<ExecutableElement> methods, final ExecutableElement method) {
+        final Name methodName = method.getSimpleName();
+        final List<ExecutableElement> result = new ArrayList<>();
+        final int paramCount = parameterCount(method.getParameters());
+        for (ExecutableElement m : methods) {
+            if (methodName.equals(m.getSimpleName()) && parameterCount(m.getParameters()) == paramCount) {
+                result.add(m);
+            }
+        }
+        return result;
+    }
+
+
+    /**
+     * Returns a collection of methods with the same name.
+     *
+     * @param methods    the methods to process.
+     * @param methodName the method name to findByName.
+     *
+     * @return a collection of methods with the same name.
+     */
+    private Collection<ExecutableElement> findByName(final Collection<ExecutableElement> methods, final Name methodName) {
+        final List<ExecutableElement> result = new ArrayList<>();
+        for (ExecutableElement method : methods) {
+            if (methodName.equals(method.getSimpleName())) {
+                result.add(method);
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Checks to see if the method has or inherits a {@link org.jboss.logging.annotations.Message}
+     * annotation.
+     *
+     * @param methods the method to search.
+     * @param method  the method to check.
+     *
+     * @return {@code true} if the method has or inherits a message annotation, otherwise {@code false}.
+     */
+
+    private boolean inheritsMessage(final Collection<ExecutableElement> methods, final ExecutableElement method) {
+        if (isAnnotatedWith(method, Message.class)) {
+            return false;
+        }
+        final Collection<ExecutableElement> allMethods = findByName(methods, method.getSimpleName());
+        for (ExecutableElement m : allMethods) {
+            if (isAnnotatedWith(m, Message.class)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Checks to see if the method is overloaded. An overloaded method has a different parameter count based on the
+     * format parameters only. Parameters annotated with {@link org.jboss.logging.annotations.Cause} or
+     * {@link org.jboss.logging.annotations.Param}
+     * are not counted.
+     *
+     * @param methods the method to search.
+     * @param method  the method to check.
+     *
+     * @return {@code true} if the method is overloaded, otherwise {@code false}.
+     */
+    private boolean isOverloaded(final Collection<ExecutableElement> methods, final ExecutableElement method) {
+        final Collection<ExecutableElement> allMethods = findByName(methods, method.getSimpleName());
+        for (ExecutableElement m : allMethods) {
+            if (method.getSimpleName().equals(m.getSimpleName()) && parameterCount(method.getParameters()) != parameterCount(m.getParameters())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Returns the number of parameters excluding the {@link org.jboss.logging.annotations.Cause} parameter
+     * and any {@link org.jboss.logging.annotations.Param} parameters if found.
+     *
+     * @param params the parameters to get the count for.
+     *
+     * @return the number of parameters.
+     */
+    private int parameterCount(final Collection<? extends VariableElement> params) {
+        int result = params.size();
+        boolean hasCause = false;
+        for (VariableElement param : params) {
+            if (isAnnotatedWith(param, Param.class) || isAnnotatedWith(param, Field.class) ||
+                    isAnnotatedWith(param, Property.class) || isAnnotatedWith(param, Suppressed.class)) {
+                --result;
+            }
+            if (isAnnotatedWith(param, Cause.class)) {
+                hasCause = true;
+            }
+        }
+        return (result - (hasCause ? 1 : 0));
+    }
+
+    static MessageMethodBuilder create(final ProcessingEnvironment processingEnv) {
+        return create(processingEnv, new Properties());
+    }
+
+    static MessageMethodBuilder create(final ProcessingEnvironment processingEnv, final Properties expressionProperties) {
+        return new MessageMethodBuilder(processingEnv, expressionProperties);
     }
 
     /**
@@ -176,7 +288,7 @@ final class MessageMethodBuilder {
     private static class AptMessageMethod implements MessageMethod {
 
         private final Elements elements;
-        private final Map<ParameterType, Set<Parameter>> parameters;
+        private final Map<TypeMirror, Set<Parameter>> parameters;
         private final Set<ThrowableType> thrownTypes;
         private final ExecutableElement method;
         private ReturnType returnType;
@@ -186,6 +298,7 @@ final class MessageMethodBuilder {
         private Message message;
         private String messageMethodName;
         private String translationKey;
+        private int formatParameterCount;
 
         /**
          * Private constructor for the
@@ -198,26 +311,36 @@ final class MessageMethodBuilder {
             this.method = method;
             inheritsMessage = false;
             isOverloaded = false;
-            parameters = new EnumMap<>(ParameterType.class);
+            parameters = new HashMap<>();
             thrownTypes = new LinkedHashSet<>();
+            formatParameterCount = 0;
         }
 
         void add(final Parameter parameter) {
-            if (parameters.containsKey(ParameterType.ANY)) {
-                parameters.get(ParameterType.ANY).add(parameter);
+            if (parameter.isFormatParameter()) {
+                if (parameter.isAnnotatedWith(Pos.class)) {
+                    formatParameterCount += parameter.getAnnotation(Pos.class).value().length;
+                } else {
+                    formatParameterCount++;
+                }
+            }
+            if (parameters.containsKey(null)) {
+                parameters.get(null).add(parameter);
             } else {
                 final Set<Parameter> any = new LinkedHashSet<>();
                 any.add(parameter);
-                parameters.put(ParameterType.ANY, any);
+                parameters.put(null, any);
             }
-            if (parameters.containsKey(parameter.parameterType())) {
-                parameters.get(parameter.parameterType()).add(parameter);
-            } else {
-                final Set<Parameter> set = new LinkedHashSet<>();
-                set.add(parameter);
-                parameters.put(parameter.parameterType(), set);
+            for (AnnotationMirror a : parameter.getAnnotationMirrors()) {
+                if (parameters.containsKey(a.getAnnotationType())) {
+                    parameters.get(a.getAnnotationType()).add(parameter);
+                } else {
+                    final Set<Parameter> set = new LinkedHashSet<>();
+                    set.add(parameter);
+                    parameters.put(a.getAnnotationType(), set);
+                }
             }
-            if (parameter.parameterType() == ParameterType.CAUSE) {
+            if (parameter.isAnnotatedWith(Cause.class)) {
                 cause = parameter;
             }
         }
@@ -228,25 +351,17 @@ final class MessageMethodBuilder {
         }
 
         @Override
-        public Set<Parameter> parameters(final ParameterType parameterType) {
-            if (parameters.containsKey(parameterType)) {
-                return parameters.get(parameterType);
+        public Set<Parameter> parameters() {
+            if (parameters.containsKey(null)) {
+                return Collections.unmodifiableSet(parameters.get(null));
             }
             return Collections.emptySet();
         }
 
         @Override
-        public Set<Parameter> parameters(final ParameterType parameterType, final ParameterType... parameterTypes) {
-            final Set<Parameter> result = new LinkedHashSet<Parameter>();
-            if (parameters.containsKey(parameterType)) {
-                result.addAll(parameters.get(parameterType));
-            }
-            for (ParameterType pt : parameterTypes) {
-                if (parameters.containsKey(pt)) {
-                    result.addAll(parameters.get(pt));
-                }
-            }
-            return result;
+        public Set<Parameter> parametersAnnotatedWith(final Class<? extends Annotation> annotation) {
+            final TypeElement type = ElementHelper.toTypeElement(elements, annotation);
+            return parameters.containsKey(type.asType()) ? Collections.unmodifiableSet(parameters.get(type.asType())) : Collections.emptySet();
         }
 
         @Override
@@ -256,7 +371,7 @@ final class MessageMethodBuilder {
 
         @Override
         public Set<ThrowableType> thrownTypes() {
-            return unmodifiableSet(thrownTypes);
+            return Collections.unmodifiableSet(thrownTypes);
         }
 
         @Override
@@ -311,35 +426,34 @@ final class MessageMethodBuilder {
 
         @Override
         public String logLevel() {
-            // TODO (jrp) possibly return the actual level
             final LogMessage logMessage = method.getAnnotation(LogMessage.class);
-            final Logger.Level logLevel = (logMessage.level() == null ? Logger.Level.INFO : logMessage.level());
-            return String.format("%s.%s.%s", Logger.class.getName(), Logger.Level.class.getSimpleName(), logLevel.name());
+            return (logMessage.level() == null ? Logger.Level.INFO.name() : logMessage.level().name());
         }
 
         @Override
         public int formatParameterCount() {
-            int result = parameters(ParameterType.FORMAT, ParameterType.TRANSFORM).size();
-            for (Parameter params : parameters(ParameterType.POS)) {
-                result += params.pos().value().length;
-            }
-            return result;
+            return formatParameterCount;
         }
 
         @Override
         public boolean isLoggerMethod() {
-            return ElementHelper.isAnnotatedWith(method, LogMessage.class);
+            return isAnnotatedWith(LogMessage.class);
         }
 
         @Override
         public int hashCode() {
             return HashCodeBuilder.builder()
                     .add(name())
-                    .add(parameters(ParameterType.ANY))
+                    .add(parameters())
                     .add(returnType()).toHashCode();
         }
 
         @Override
+        public ExecutableElement getDelegate() {
+            return method;
+        }
+
+        @Override
         public boolean equals(final Object obj) {
             if (obj == this) {
                 return true;
@@ -358,25 +472,20 @@ final class MessageMethodBuilder {
             return ToStringBuilder.of(this)
                     .add("name", name())
                     .add("returnType", returnType())
-                    .add("parameters", parameters(ParameterType.ANY))
+                    .add("parameters", parameters())
                     .add("loggerMethod", loggerMethod()).toString();
         }
 
         @Override
-        public ExecutableElement reference() {
-            return method;
-        }
-
-        @Override
         public int compareTo(final MessageMethod o) {
             int result = name().compareTo(o.name());
             result = (result != Comparison.EQUAL) ? result : returnType.name().compareTo(o.returnType().name());
             // Size does matter
-            result = (result != Comparison.EQUAL) ? result : parameters(ParameterType.ANY).size() - o.parameters(ParameterType.ANY).size();
+            result = (result != Comparison.EQUAL) ? result : parameters().size() - o.parameters().size();
             if (result == Comparison.EQUAL) {
                 // Check element by element
-                final Iterator<Parameter> params1 = parameters(ParameterType.ANY).iterator();
-                final Iterator<Parameter> params2 = o.parameters(ParameterType.ANY).iterator();
+                final Iterator<Parameter> params1 = parameters().iterator();
+                final Iterator<Parameter> params2 = o.parameters().iterator();
                 while (params1.hasNext()) {
                     if (params2.hasNext()) {
                         final Parameter param1 = params1.next();
@@ -401,12 +510,18 @@ final class MessageMethodBuilder {
     private static class AptMessage implements MessageMethod.Message {
 
         private final Message message;
+        private final String messageValue;
         private int id;
         private boolean hasId;
         private boolean inheritsId;
 
-        private AptMessage(final Message message) {
+        private AptMessage(final Message message, final Properties expressionProperties) {
             this.message = message;
+            if (expressionProperties.isEmpty()) {
+                this.messageValue = message.value();
+            } else {
+                this.messageValue = Expressions.resolve(expressionProperties, message.value());
+            }
         }
 
         @Override
@@ -426,7 +541,7 @@ final class MessageMethodBuilder {
 
         @Override
         public String value() {
-            return message.value();
+            return messageValue;
         }
 
         @Override
diff --git a/processor/src/main/java/org/jboss/logging/processor/apt/ParameterFactory.java b/processor/src/main/java/org/jboss/logging/processor/apt/ParameterFactory.java
index 7a4209e..f6fa918 100644
--- a/processor/src/main/java/org/jboss/logging/processor/apt/ParameterFactory.java
+++ b/processor/src/main/java/org/jboss/logging/processor/apt/ParameterFactory.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -28,19 +28,18 @@ import static org.jboss.logging.processor.util.Objects.areEqual;
 
 import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.Element;
 import javax.lang.model.element.ExecutableElement;
 import javax.lang.model.element.TypeElement;
 import javax.lang.model.element.VariableElement;
 import javax.lang.model.type.TypeKind;
-import javax.lang.model.util.Elements;
 import javax.lang.model.util.Types;
 
-import org.jboss.logging.annotations.Cause;
 import org.jboss.logging.annotations.Field;
 import org.jboss.logging.annotations.FormatWith;
-import org.jboss.logging.annotations.LoggingClass;
-import org.jboss.logging.annotations.Param;
 import org.jboss.logging.annotations.Pos;
 import org.jboss.logging.annotations.Property;
 import org.jboss.logging.annotations.Transform;
@@ -60,8 +59,9 @@ final class ParameterFactory {
     private ParameterFactory() {
     }
 
-    public static Set<Parameter> of(final Elements elements, final Types types, final ExecutableElement method) {
-        final Set<Parameter> result = new LinkedHashSet<Parameter>();
+    public static Set<Parameter> of(final ProcessingEnvironment processingEnv, final ExecutableElement method) {
+        final Types types = processingEnv.getTypeUtils();
+        final Set<Parameter> result = new LinkedHashSet<>();
         final List<? extends VariableElement> params = method.getParameters();
         int index = 0;
         for (VariableElement param : params) {
@@ -81,200 +81,45 @@ final class ParameterFactory {
                 }
             }
             if (method.isVarArgs()) {
-                result.add(new AptParameter(elements, types, qualifiedType, param, formatClass, (++index == params.size())));
+                result.add(new AptParameter(processingEnv, qualifiedType, param, formatClass, (++index == params.size())));
             } else {
-                result.add(new AptParameter(elements, types, qualifiedType, param, formatClass, false));
+                result.add(new AptParameter(processingEnv, qualifiedType, param, formatClass, false));
             }
         }
         return result;
     }
 
     public static Parameter forMessageMethod(final MessageMethod messageMethod) {
-        return new Parameter() {
-
-            @Override
-            public String formatterClass() {
-                return null;
-            }
-
-            @Override
-            public Class<?> paramClass() {
-                return null;
-            }
-
-            @Override
-            public String targetName() {
-                return "";
-            }
-
-            @Override
-            public Transform transform() {
-                return null;
-            }
-
-            @Override
-            public Pos pos() {
-                return null;
-            }
-
-            @Override
-            public String type() {
-                return String.class.getName();
-            }
-
-            @Override
-            public String name() {
-                return messageMethod.messageMethodName();
-            }
-
-            @Override
-            public boolean isArray() {
-                return false;
-            }
-
-            @Override
-            public boolean isPrimitive() {
-                return false;
-            }
-
-            @Override
-            public boolean isVarArgs() {
-                return false;
-            }
-
-            @Override
-            public ParameterType parameterType() {
-                return ParameterType.MESSAGE;
-            }
-
-            @Override
-            public int hashCode() {
-                return HashCodeBuilder.builder()
-                        .add(type())
-                        .add(name()).toHashCode();
-            }
-
-            @Override
-            public boolean equals(final Object obj) {
-                if (obj == this) {
-                    return true;
-                }
-                if (!(obj instanceof AptParameter)) {
-                    return false;
-                }
-                final AptParameter other = (AptParameter) obj;
-                return areEqual(type(), other.type()) && areEqual(name(), other.name());
-            }
-
-            @Override
-            public int compareTo(final Parameter other) {
-                return Comparison.begin()
-                        .compare(this.type(), other.type())
-                        .compare(this.name(), other.name()).result();
-            }
-
-            @Override
-            public String toString() {
-                return ToStringBuilder.of(this)
-                        .add("name", name())
-                        .add("type", type()).toString();
-            }
-
-            @Override
-            public MessageMethod reference() {
-                return messageMethod;
-            }
-
-            @Override
-            public boolean isAssignableFrom(final Class<?> type) {
-                return String.class.isAssignableFrom(type);
-            }
-
-            @Override
-            public boolean isSubtypeOf(final Class<?> type) {
-                return type.isAssignableFrom(String.class);
-            }
-
-            @Override
-            public boolean isSameAs(final Class<?> type) {
-                return type().equals(type.getName());
-            }
-        };
+        return new MessageMethodParameter(messageMethod);
     }
 
-    private static class AptParameter extends AbstractMessageObjectType implements Parameter {
+    private static class AptParameter extends AbstractClassType implements Parameter {
 
         private final VariableElement param;
         private final String qualifiedType;
         private final String formatterClass;
-        private final Class<?> paramClass;
         private final boolean isVarArgs;
-        private final ParameterType parameterType;
-        private final Transform transform;
-        private final Pos pos;
+        private final boolean isFormatArg;
 
         /**
          * Only allow construction from within the parent class.
          *
-         * @param elements       the element utilities from the annotation processor.
-         * @param types          the type utilities from the annotation processor.
-         * @param qualifiedType  the qualified type name of the parameter.
-         * @param param          the parameter.
-         * @param formatterClass the formatter class, or {@code null} if none
-         * @param isVarArgs      {@code true} if this is a vararg parameter, otherwise {@code false}.
+         * @param processingEnv the annotation processing environment.
+         * @param qualifiedType         the qualified type name of the parameter.
+         * @param param                 the parameter.
+         * @param formatterClass        the formatter class, or {@code null} if none
+         * @param isVarArgs             {@code true} if this is a vararg parameter, otherwise {@code false}.
          */
-        AptParameter(final Elements elements, final Types types, final String qualifiedType, final VariableElement param, final String formatterClass, final boolean isVarArgs) {
-            super(elements, types, param);
+        AptParameter(final ProcessingEnvironment processingEnv, final String qualifiedType, final VariableElement param, final String formatterClass, final boolean isVarArgs) {
+            super(processingEnv, param);
             this.qualifiedType = qualifiedType;
             this.param = param;
             this.formatterClass = formatterClass;
-            if (ElementHelper.isAnnotatedWith(param, Param.class)) {
-                paramClass = Object.class;
-                parameterType = ParameterType.CONSTRUCTION;
-                transform = null;
-                pos = null;
-            } else if (ElementHelper.isAnnotatedWith(param, Cause.class)) {
-                paramClass = null;
-                parameterType = ParameterType.CAUSE;
-                transform = null;
-                pos = null;
-            } else if (ElementHelper.isAnnotatedWith(param, Field.class)) {
-                paramClass = null;
-                parameterType = ParameterType.FIELD;
-                transform = null;
-                pos = null;
-            } else if (ElementHelper.isAnnotatedWith(param, Property.class)) {
-                paramClass = null;
-                parameterType = ParameterType.PROPERTY;
-                transform = null;
-                pos = null;
-            } else if (ElementHelper.isAnnotatedWith(param, LoggingClass.class)) {
-                paramClass = null;
-                parameterType = ParameterType.FQCN;
-                transform = null;
-                pos = null;
-            } else if (ElementHelper.isAnnotatedWith(param, Transform.class)) {
-                paramClass = null;
-                parameterType = ParameterType.TRANSFORM;
-                transform = param.getAnnotation(Transform.class);
-                pos = null;
-            } else if (ElementHelper.isAnnotatedWith(param, Pos.class)) {
-                paramClass = null;
-                parameterType = ParameterType.POS;
-                transform = null;
-                pos = param.getAnnotation(Pos.class);
-            } else {
-                parameterType = ParameterType.FORMAT;
-                paramClass = null;
-                transform = null;
-                pos = null;
-            }
             this.isVarArgs = isVarArgs;
-        }
-
-        @Override
-        public String type() {
-            return qualifiedType;
+            isFormatArg = param.getAnnotationMirrors().isEmpty() ||
+                    ElementHelper.isAnnotatedWith(param, FormatWith.class) ||
+                    ElementHelper.isAnnotatedWith(param, Transform.class) ||
+                    ElementHelper.isAnnotatedWith(param, Pos.class);
         }
 
         @Override
@@ -303,13 +148,8 @@ final class ParameterFactory {
         }
 
         @Override
-        public ParameterType parameterType() {
-            return parameterType;
-        }
-
-        @Override
-        public Class<?> paramClass() {
-            return paramClass;
+        public boolean isFormatParameter() {
+            return isFormatArg;
         }
 
         @Override
@@ -337,16 +177,6 @@ final class ParameterFactory {
         }
 
         @Override
-        public Transform transform() {
-            return transform;
-        }
-
-        @Override
-        public Pos pos() {
-            return pos;
-        }
-
-        @Override
         public int hashCode() {
             return HashCodeBuilder.builder()
                     .add(qualifiedType)
@@ -368,7 +198,7 @@ final class ParameterFactory {
         @Override
         public int compareTo(final Parameter other) {
             return Comparison.begin()
-                    .compare(this.type(), other.type())
+                    .compare(asType().toString(), other.asType().toString())
                     .compare(this.name(), other.name()).result();
         }
 
@@ -376,12 +206,112 @@ final class ParameterFactory {
         public String toString() {
             return ToStringBuilder.of(this)
                     .add("name", name())
-                    .add("type", type()).toString();
+                    .add("type", asType()).toString();
         }
 
         @Override
-        public VariableElement reference() {
+        public Element getDelegate() {
             return param;
         }
     }
+
+    private static class MessageMethodParameter implements Parameter {
+        private final MessageMethod messageMethod;
+
+        private MessageMethodParameter(final MessageMethod messageMethod) {
+            this.messageMethod = messageMethod;
+        }
+
+        @Override
+        public Element getDelegate() {
+            return messageMethod;
+        }
+
+        @Override
+        public String formatterClass() {
+            return null;
+        }
+
+        @Override
+        public String targetName() {
+            return "";
+        }
+
+        @Override
+        public String name() {
+            return messageMethod.messageMethodName();
+        }
+
+        @Override
+        public boolean isArray() {
+            return false;
+        }
+
+        @Override
+        public boolean isPrimitive() {
+            return false;
+        }
+
+        @Override
+        public boolean isVarArgs() {
+            return false;
+        }
+
+        @Override
+        public boolean isMessageMethod() {
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(messageMethod);
+        }
+
+        @Override
+        public boolean equals(final Object obj) {
+            if (obj == this) {
+                return true;
+            }
+            if (!(obj instanceof MessageMethodParameter)) {
+                return false;
+            }
+            final MessageMethodParameter other = (MessageMethodParameter) obj;
+            return Objects.equals(messageMethod, other.messageMethod);
+        }
+
+        @Override
+        public int compareTo(final Parameter other) {
+            if (other instanceof MessageMethodParameter) {
+                final MessageMethodParameter otherParameter = (MessageMethodParameter) other;
+                return messageMethod.compareTo(otherParameter.messageMethod);
+            }
+            // A little odd, but some kind of comparison should be done by default
+            return Comparison.begin()
+                    .compare(asType().toString(), other.asType().toString())
+                    .compare(name(), other.name())
+                    .result();
+        }
+
+        @Override
+        public String toString() {
+            return ToStringBuilder.of(this)
+                    .add("name", name())
+                    .add("type", asType()).toString();
+        }
+
+        @Override
+        public boolean isAssignableFrom(final Class<?> type) {
+            return false;
+        }
+
+        @Override
+        public boolean isSubtypeOf(final Class<?> type) {
+            return false;
+        }
+
+        @Override
+        public boolean isSameAs(final Class<?> type) {
+            return false;
+        }
+    }
 }
diff --git a/processor/src/main/java/org/jboss/logging/processor/apt/ProcessingException.java b/processor/src/main/java/org/jboss/logging/processor/apt/ProcessingException.java
index 1823e2e..0937809 100644
--- a/processor/src/main/java/org/jboss/logging/processor/apt/ProcessingException.java
+++ b/processor/src/main/java/org/jboss/logging/processor/apt/ProcessingException.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2015, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -22,6 +22,8 @@
 
 package org.jboss.logging.processor.apt;
 
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
 import javax.lang.model.element.Element;
 
 /**
@@ -29,8 +31,10 @@ import javax.lang.model.element.Element;
  *
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
-class ProcessingException extends RuntimeException {
+public class ProcessingException extends RuntimeException {
     private final Element element;
+    private final AnnotationMirror annotation;
+    private final AnnotationValue annotationValue;
 
     /**
      * Creates a new exception.
@@ -39,8 +43,33 @@ class ProcessingException extends RuntimeException {
      * @param message the message
      */
     public ProcessingException(final Element element, final String message) {
+        this(element, null, null, message);
+    }
+
+    /**
+     * Creates a new exception.
+     *
+     * @param element    the element the error occurs on
+     * @param annotation the annotation the error occurred on
+     * @param message    the message
+     */
+    public ProcessingException(final Element element, final AnnotationMirror annotation, final String message) {
+        this(element, annotation, null, message);
+    }
+
+    /**
+     * Creates a new exception.
+     *
+     * @param element         the element the error occurs on
+     * @param annotation      the annotation the error occurred on
+     * @param annotationValue the annotation value
+     * @param message         the message
+     */
+    public ProcessingException(final Element element, final AnnotationMirror annotation, final AnnotationValue annotationValue, final String message) {
         super(message);
         this.element = element;
+        this.annotation = annotation;
+        this.annotationValue = annotationValue;
     }
 
     /**
@@ -51,8 +80,35 @@ class ProcessingException extends RuntimeException {
      * @param args    the arguments for the format
      */
     public ProcessingException(final Element element, final String format, final Object... args) {
+        this(element, null, null, format, args);
+    }
+
+    /**
+     * Creates a new exception.
+     *
+     * @param element    the element the error occurs on
+     * @param annotation the annotation the error occurred on
+     * @param format     the format for the message
+     * @param args       the arguments for the format
+     */
+    public ProcessingException(final Element element, final AnnotationMirror annotation, final String format, final Object... args) {
+        this(element, annotation, null, format, args);
+    }
+
+    /**
+     * Creates a new exception.
+     *
+     * @param element         the element the error occurs on
+     * @param annotation      the annotation the error occurred on
+     * @param annotationValue the annotation value
+     * @param format          the format for the message
+     * @param args            the arguments for the format
+     */
+    public ProcessingException(final Element element, final AnnotationMirror annotation, final AnnotationValue annotationValue, final String format, final Object... args) {
         super(String.format(format, args));
         this.element = element;
+        this.annotation = annotation;
+        this.annotationValue = annotationValue;
     }
 
     /**
@@ -63,4 +119,22 @@ class ProcessingException extends RuntimeException {
     public Element getElement() {
         return element;
     }
+
+    /**
+     * The annotation where the error occurred.
+     *
+     * @return the annotation or {@code null} if the error did not occur on an annotation
+     */
+    public AnnotationMirror getAnnotation() {
+        return annotation;
+    }
+
+    /**
+     * The value for the annotation that is invalid.
+     *
+     * @return the annotation value or {@code null}
+     */
+    public AnnotationValue getAnnotationValue() {
+        return annotationValue;
+    }
 }
diff --git a/processor/src/main/java/org/jboss/logging/processor/apt/ReportFileGenerator.java b/processor/src/main/java/org/jboss/logging/processor/apt/ReportFileGenerator.java
new file mode 100644
index 0000000..f85a7ac
--- /dev/null
+++ b/processor/src/main/java/org/jboss/logging/processor/apt/ReportFileGenerator.java
@@ -0,0 +1,153 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2016, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging.processor.apt;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Locale;
+import java.util.Map;
+import java.util.TreeSet;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.annotation.processing.SupportedOptions;
+import javax.lang.model.element.TypeElement;
+import javax.tools.StandardLocation;
+
+import org.jboss.logging.processor.apt.report.ReportType;
+import org.jboss.logging.processor.apt.report.ReportWriter;
+import org.jboss.logging.processor.model.MessageInterface;
+import org.jboss.logging.processor.model.MessageMethod;
+
+/**
+ * Generates reports for logging interfaces and message bundles.
+ *
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+ at SupportedOptions({
+        ReportFileGenerator.REPORT_TYPE,
+        ReportFileGenerator.REPORT_PATH,
+        ReportFileGenerator.REPORT_TITLE
+})
+public class ReportFileGenerator extends AbstractGenerator {
+    static final String REPORT_TYPE = "org.jboss.logging.tools.report.type";
+    static final String REPORT_PATH = "org.jboss.logging.tools.report.path";
+    static final String REPORT_TITLE = "org.jboss.logging.tools.report.title";
+
+    private final ReportType reportType;
+    private final String reportPath;
+    private final String reportTitle;
+
+    ReportFileGenerator(final ProcessingEnvironment processingEnv) {
+        super(processingEnv);
+        Map<String, String> options = processingEnv.getOptions();
+        final String reportType = options.get(REPORT_TYPE);
+        reportPath = options.get(REPORT_PATH);
+        reportTitle = options.get(REPORT_TITLE);
+        if (reportType == null) {
+            this.reportType = null;
+        } else {
+            final String s = reportType.toLowerCase(Locale.ROOT);
+            if ("adoc".equals(s) || "asciidoc".equals(s)) {
+                this.reportType = ReportType.ASCIIDOC;
+            } else if ("xml".equals(s)) {
+                this.reportType = ReportType.XML;
+            } else {
+                this.reportType = null;
+                logger().warn(null, "Report type %s is invalid. No reports will be generated.", reportType);
+            }
+        }
+
+    }
+
+    @Override
+    public void processTypeElement(final TypeElement annotation, final TypeElement element, final MessageInterface messageInterface) {
+        if (reportType != null) {
+            try {
+                // Don't generate empty interfaces
+                if (messageInterface.methods().isEmpty()) {
+                    logger().debug(element, "Skipping reports for interface %s with no methods.", messageInterface.name());
+                    return;
+                }
+                logger().debug(element, "Writing reports for interface %s.", messageInterface.name());
+
+                final String fileName = messageInterface.simpleName() + reportType.getExtension();
+                try (
+                        final BufferedWriter writer = createWriter(messageInterface.packageName(), fileName);
+                        final ReportWriter reportWriter = ReportWriter.of(reportType, messageInterface, writer)
+                ) {
+                    reportWriter.writeHeader(reportTitle);
+                    // Process the methods
+                    for (MessageMethod messageMethod : getSortedMessageMethods(messageInterface)) {
+                        reportWriter.writeDetail(messageMethod);
+                    }
+                    reportWriter.writeFooter();
+                }
+            } catch (IOException e) {
+                logger().error(element, e, "Failed to generate %s report", reportType);
+            }
+        }
+    }
+
+    private BufferedWriter createWriter(final String packageName, final String fileName) throws IOException {
+        if (reportPath == null) {
+            return new BufferedWriter(processingEnv.getFiler().createResource(StandardLocation.SOURCE_OUTPUT, packageName, fileName).openWriter());
+        }
+        final Path outputPath = Paths.get(reportPath, packageName.replace(".", FileSystems.getDefault().getSeparator()), fileName);
+        Files.createDirectories(outputPath.getParent());
+        return Files.newBufferedWriter(outputPath, StandardCharsets.UTF_8, StandardOpenOption.CREATE);
+    }
+
+    /**
+     * Returns a sorted collection of the message methods on the interface. The methods are sorted by the message id.
+     *
+     * @param messageInterface the message interface to get the methods for
+     *
+     * @return a sorted collection of message methods
+     */
+    private static Collection<MessageMethod> getSortedMessageMethods(final MessageInterface messageInterface) {
+        final Collection<MessageMethod> messageMethods = new TreeSet<>(MessageMethodSortComparator.INSTANCE);
+        messageMethods.addAll(messageInterface.methods());
+        return messageMethods;
+    }
+
+    private static class MessageMethodSortComparator implements Comparator<MessageMethod> {
+        static final MessageMethodSortComparator INSTANCE = new MessageMethodSortComparator();
+
+        @Override
+        public int compare(final MessageMethod o1, final MessageMethod o2) {
+            // First sort by message id, then message to ensure uniqueness
+            int result = Integer.compare(o1.message().id(), o2.message().id());
+            if (result == 0) {
+                result = o1.message().value().compareTo(o2.message().value());
+            }
+            return result;
+        }
+    }
+}
diff --git a/processor/src/main/java/org/jboss/logging/processor/apt/ReturnTypeFactory.java b/processor/src/main/java/org/jboss/logging/processor/apt/ReturnTypeFactory.java
index 4f54c7c..ba15930 100644
--- a/processor/src/main/java/org/jboss/logging/processor/apt/ReturnTypeFactory.java
+++ b/processor/src/main/java/org/jboss/logging/processor/apt/ReturnTypeFactory.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -25,23 +25,18 @@ package org.jboss.logging.processor.apt;
 import static org.jboss.logging.processor.util.Objects.HashCodeBuilder;
 import static org.jboss.logging.processor.util.Objects.areEqual;
 
-import java.util.LinkedHashMap;
 import java.util.List;
-import java.util.Map;
+import java.util.function.Supplier;
+import javax.annotation.processing.ProcessingEnvironment;
 import javax.lang.model.element.Element;
-import javax.lang.model.element.ExecutableElement;
-import javax.lang.model.element.Modifier;
 import javax.lang.model.element.TypeElement;
-import javax.lang.model.type.PrimitiveType;
+import javax.lang.model.type.NoType;
 import javax.lang.model.type.TypeKind;
 import javax.lang.model.type.TypeMirror;
-import javax.lang.model.util.ElementFilter;
-import javax.lang.model.util.Elements;
 import javax.lang.model.util.Types;
 
 import org.jboss.logging.annotations.ConstructType;
 import org.jboss.logging.processor.model.MessageMethod;
-import org.jboss.logging.processor.model.Parameter;
 import org.jboss.logging.processor.model.ReturnType;
 import org.jboss.logging.processor.model.ThrowableType;
 import org.jboss.logging.processor.util.ElementHelper;
@@ -60,11 +55,11 @@ final class ReturnTypeFactory {
     }
 
 
-    public static ReturnType of(final Elements elements, final Types types, final TypeMirror returnType, final MessageMethod method) {
+    public static ReturnType of(final ProcessingEnvironment processingEnv, final TypeMirror returnType, final MessageMethod method) {
         if (returnType.getKind() == TypeKind.VOID) {
-            return ReturnType.VOID;
+            return VoidReturnType.getInstance(processingEnv.getTypeUtils());
         }
-        final AptReturnType result = new AptReturnType(elements, types, returnType, method);
+        final AptReturnType result = new AptReturnType(processingEnv, returnType, method);
         result.init();
         return result;
     }
@@ -72,45 +67,51 @@ final class ReturnTypeFactory {
     /**
      * Implementation of return type.
      */
-    private static class AptReturnType extends AbstractMessageObjectType implements ReturnType {
-        private final Map<String, TypeMirror> fields;
-        private final Map<String, TypeMirror> methods;
+    private static class AptReturnType extends AbstractClassType implements ReturnType {
         private final TypeMirror returnType;
         private final MessageMethod method;
+        private final Element delegate;
+        private final TypeMirror resolvedType;
+        private final boolean isThrowable;
         private ThrowableType throwableType;
 
-        AptReturnType(final Elements elements, final Types types, final TypeMirror returnType, final MessageMethod method) {
-            super(elements, types, returnType);
+        AptReturnType(final ProcessingEnvironment processingEnv, final TypeMirror returnType, final MessageMethod method) {
+            super(processingEnv, returnType);
             this.returnType = returnType;
             this.method = method;
+            delegate = types.asElement(returnType);
             throwableType = null;
-            fields = new LinkedHashMap<String, TypeMirror>();
-            methods = new LinkedHashMap<String, TypeMirror>();
+            if (types.isSubtype(types.erasure(returnType), types.erasure(ElementHelper.toType(elements, Supplier.class)))) {
+                final List<? extends TypeMirror> typeArgs = ElementHelper.getTypeArguments(returnType);
+                if (typeArgs.isEmpty()) {
+                    resolvedType = elements.getTypeElement(Object.class.getCanonicalName()).asType();
+                } else {
+                    resolvedType = typeArgs.get(0);
+                }
+            } else {
+                resolvedType = returnType;
+            }
+            isThrowable = types.isSubtype(types.erasure(resolvedType), ElementHelper.toType(elements, Throwable.class));
         }
 
         @Override
-        public boolean hasFieldFor(final Parameter parameter) {
-            return fields.containsKey(parameter.targetName()) && checkType(parameter, fields.get(parameter.targetName()));
+        public Element getDelegate() {
+            return delegate;
         }
 
         @Override
-        public boolean hasMethodFor(final Parameter parameter) {
-            return methods.containsKey(parameter.targetName()) && checkType(parameter, methods.get(parameter.targetName()));
+        public TypeMirror asType() {
+            return returnType;
         }
 
         @Override
         public boolean isThrowable() {
-            return isSubtypeOf(Throwable.class);
-        }
-
-        @Override
-        public boolean isPrimitive() {
-            return returnType.getKind().isPrimitive();
+            return isThrowable;
         }
 
         @Override
         public String name() {
-            return returnType.toString();
+            return types.erasure(returnType).toString();
         }
 
         @Override
@@ -118,35 +119,27 @@ final class ReturnTypeFactory {
             return throwableType;
         }
 
+        @Override
+        public TypeMirror resolvedType() {
+            return resolvedType;
+        }
+
         private void init() {
             if (isThrowable()) {
-                TypeMirror returnType = this.returnType;
-                if (ElementHelper.isAnnotatedWith(method.reference(), ConstructType.class)) {
-                    final TypeElement constructTypeValue = ElementHelper.getClassAnnotationValue(method.reference(), ConstructType.class);
+                // The resolved type needs to be used in cases where a Supplier is being returned
+                TypeMirror throwableReturnType = resolvedType;
+                if (method.isAnnotatedWith(ConstructType.class)) {
+                    final TypeElement constructTypeValue = ElementHelper.getClassAnnotationValue(method, ConstructType.class);
                     // Shouldn't be null
                     if (constructTypeValue == null) {
-                        throw new ProcessingException(method.reference(), "Class not defined for the ConstructType");
-                    }
-                    returnType = constructTypeValue.asType();
-                    if (!types.isAssignable(returnType, this.returnType)) {
-                        throw new ProcessingException(method.reference(), "The requested type %s can not be assigned to %s.", returnType, this.returnType);
-                    }
-                }
-                throwableType = ThrowableTypeFactory.forReturnType(elements, types, returnType, method);
-            }
-            final Element e = types.asElement(returnType);
-            if (e instanceof TypeElement) {
-                final List<ExecutableElement> returnTypeMethods = ElementFilter.methodsIn(elements.getAllMembers((TypeElement) e));
-                for (ExecutableElement executableElement : returnTypeMethods) {
-                    if (executableElement.getModifiers().contains(Modifier.PUBLIC) && executableElement.getParameters().size() == 1) {
-                        methods.put(executableElement.getSimpleName().toString(), executableElement.getParameters().get(0).asType());
+                        throw new ProcessingException(method, "Class not defined for the ConstructType");
                     }
-                }
-                for (Element element : ElementFilter.fieldsIn(elements.getAllMembers((TypeElement) e))) {
-                    if (element.getModifiers().contains(Modifier.PUBLIC) && !element.getModifiers().contains(Modifier.FINAL)) {
-                        fields.put(element.getSimpleName().toString(), element.asType());
+                    throwableReturnType = constructTypeValue.asType();
+                    if (!types.isAssignable(throwableReturnType, resolvedType)) {
+                        throw new ProcessingException(method, "The requested type %s can not be assigned to %s.", throwableReturnType, resolvedType);
                     }
                 }
+                throwableType = ThrowableTypeFactory.forReturnType(processingEnv, throwableReturnType, method);
             }
         }
 
@@ -171,42 +164,83 @@ final class ReturnTypeFactory {
         public String toString() {
             return Objects.ToStringBuilder.of(this)
                     .add("name", name())
-                    .add("primitive", isPrimitive())
                     .add("throwable", isThrowable())
                     .add("throwableType", throwableType).toString();
         }
+    }
 
-        @Override
-        public TypeMirror reference() {
-            return returnType;
+    private static class VoidReturnType implements ReturnType {
+        private static VoidReturnType INSTANCE = null;
+        private final Element voidElement;
+        private final NoType voidType;
+        private final int hash;
+
+        private VoidReturnType(final Types types) {
+            voidType = types.getNoType(TypeKind.VOID);
+            voidElement = types.asElement(voidType);
+            hash = "void".hashCode();
         }
 
-        private boolean checkType(final Parameter parameter, final TypeMirror type) {
-            if (parameter.isPrimitive()) {
-                if (type.getKind().isPrimitive()) {
-                    return parameter.type().equalsIgnoreCase(type.getKind().name());
-                }
-                return types.isAssignable(elements.getTypeElement(unbox(parameter)).asType(), type);
+        private static synchronized VoidReturnType getInstance(final Types types) {
+            if (INSTANCE == null) {
+                INSTANCE = new VoidReturnType(types);
             }
-            if (type.getKind().isPrimitive()) {
-                final TypeElement primitiveType = types.boxedClass((PrimitiveType) type);
-                return types.isAssignable(elements.getTypeElement(parameter.type()).asType(), primitiveType.asType());
-            }
-            return types.isAssignable(elements.getTypeElement(parameter.type()).asType(), type);
+            return INSTANCE;
         }
 
-        private String unbox(final Parameter parameter) {
-            String result = parameter.type();
-            if (parameter.isPrimitive()) {
-                if ("int".equals(result)) {
-                    result = Integer.class.getName();
-                } else if ("char".equals(result)) {
-                    result = Character.class.getName();
-                } else {
-                    result = "java.lang." + Character.toUpperCase(result.charAt(0)) + result.substring(1);
-                }
-            }
-            return result;
+        @Override
+        public TypeMirror asType() {
+            return voidType;
+        }
+
+        @Override
+        public boolean isThrowable() {
+            return false;
+        }
+
+        @Override
+        public String name() {
+            return "void";
+        }
+
+        @Override
+        public ThrowableType throwableReturnType() {
+            return null;
+        }
+
+        @Override
+        public int hashCode() {
+            return hash;
+        }
+
+        @Override
+        public boolean equals(final Object obj) {
+            return obj == this || obj instanceof VoidReturnType;
+        }
+
+        @Override
+        public String toString() {
+            return "void";
+        }
+
+        @Override
+        public boolean isAssignableFrom(final Class<?> type) {
+            return type == Void.class || type == void.class;
+        }
+
+        @Override
+        public boolean isSubtypeOf(final Class<?> type) {
+            return false;
+        }
+
+        @Override
+        public boolean isSameAs(final Class<?> type) {
+            return type == Void.class || type == void.class;
+        }
+
+        @Override
+        public Element getDelegate() {
+            return voidElement;
         }
     }
 }
diff --git a/processor/src/main/java/org/jboss/logging/processor/apt/ThrowableTypeFactory.java b/processor/src/main/java/org/jboss/logging/processor/apt/ThrowableTypeFactory.java
index d099c67..5c95f5c 100644
--- a/processor/src/main/java/org/jboss/logging/processor/apt/ThrowableTypeFactory.java
+++ b/processor/src/main/java/org/jboss/logging/processor/apt/ThrowableTypeFactory.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -22,15 +22,16 @@
 
 package org.jboss.logging.processor.apt;
 
-import static org.jboss.logging.processor.model.Parameter.ParameterType;
 import static org.jboss.logging.processor.util.Objects.HashCodeBuilder;
 import static org.jboss.logging.processor.util.Objects.areEqual;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
+import javax.annotation.processing.ProcessingEnvironment;
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ExecutableElement;
 import javax.lang.model.element.Modifier;
@@ -38,12 +39,13 @@ import javax.lang.model.element.VariableElement;
 import javax.lang.model.type.TypeKind;
 import javax.lang.model.type.TypeMirror;
 import javax.lang.model.util.ElementFilter;
-import javax.lang.model.util.Elements;
-import javax.lang.model.util.Types;
 
+import org.jboss.logging.annotations.Param;
+import org.jboss.logging.annotations.Signature;
 import org.jboss.logging.processor.model.MessageMethod;
 import org.jboss.logging.processor.model.Parameter;
 import org.jboss.logging.processor.model.ThrowableType;
+import org.jboss.logging.processor.util.ElementHelper;
 import org.jboss.logging.processor.util.Objects;
 
 /**
@@ -58,15 +60,14 @@ final class ThrowableTypeFactory {
     /**
      * Creates a new descriptor that is not primitive.
      *
-     * @param elements      the element utilities from the annotation processor.
-     * @param types         the type utilities from the annotation process.
-     * @param type          the class name of the return type.
-     * @param messageMethod the message method.
+     * @param processingEnv the annotation processing environment.
+     * @param type                  the class name of the return type.
+     * @param messageMethod         the message method.
      *
      * @return the return type descriptor.
      */
-    public static ThrowableType forReturnType(final Elements elements, final Types types, final TypeMirror type, final MessageMethod messageMethod) {
-        final AptReturnThrowableType result = new AptReturnThrowableType(elements, types, messageMethod, type);
+    public static ThrowableType forReturnType(final ProcessingEnvironment processingEnv, final TypeMirror type, final MessageMethod messageMethod) {
+        final AptReturnThrowableType result = new AptReturnThrowableType(processingEnv, messageMethod, type);
         result.init();
         return result;
     }
@@ -74,22 +75,22 @@ final class ThrowableTypeFactory {
     /**
      * Creates a new descriptor that is not primitive.
      *
-     * @param elements the element utilities from the annotation processor.
-     * @param types    the type utilities from the annotation process.
-     * @param type     the class name of the return type.
+     * @param processingEnv the annotation processing environment.
+     * @param type                  the class name of the return type.
      *
      * @return the return type descriptor.
      */
-    public static ThrowableType of(final Elements elements, final Types types, final TypeMirror type) {
-        final AptThrowableType result = new AptThrowableType(elements, types, type);
+    public static ThrowableType of(final ProcessingEnvironment processingEnv, final TypeMirror type) {
+        final AptThrowableType result = new AptThrowableType(processingEnv, type);
         result.init();
         return result;
     }
 
-    private static class AptThrowableType extends AbstractMessageObjectType implements ThrowableType {
+    private static class AptThrowableType extends AbstractClassType implements ThrowableType {
 
         private final TypeMirror type;
         private final boolean isChecked;
+        private final Element delegate;
         private boolean defaultConstructor = false;
         private boolean stringConstructor = false;
         private boolean throwableConstructor = false;
@@ -101,24 +102,24 @@ final class ThrowableTypeFactory {
         /**
          * Creates a new descriptor that is not primitive.
          *
-         * @param types    the type utilities from the annotation processor.
-         * @param elements the element utilities from the annotation processor.
-         * @param type     the class name of the return type.
+         * @param processingEnv the annotation processing environment.
+         * @param type                  the class name of the return type.
          */
-        private AptThrowableType(final Elements elements, final Types types, final TypeMirror type) {
-            super(elements, types, type);
+        private AptThrowableType(final ProcessingEnvironment processingEnv, final TypeMirror type) {
+            super(processingEnv, type);
             this.type = type;
-            stringType = elements.getTypeElement(String.class.getName()).asType();
-            throwableType = elements.getTypeElement(Throwable.class.getName()).asType();
-            final TypeMirror runtimeException = elements.getTypeElement(RuntimeException.class.getName()).asType();
-            final TypeMirror error = elements.getTypeElement(Error.class.getName()).asType();
+            this.delegate = types.asElement(type);
+            stringType = ElementHelper.toType(elements, String.class);
+            throwableType = ElementHelper.toType(elements, Throwable.class);
+            final TypeMirror runtimeException = ElementHelper.toType(elements, RuntimeException.class);
+            final TypeMirror error = ElementHelper.toType(elements, Error.class);
             isChecked = !(types.isAssignable(runtimeException, type) && types.isAssignable(error, type));
         }
 
         /**
          * Initializes the object.
          */
-        protected final void init() {
+        protected void init() {
             if (!type.getKind().isPrimitive() && type.getKind() != TypeKind.VOID) {
                 final Element element = types.asElement(type);
                 final List<ExecutableElement> constructors = ElementFilter.constructorsIn(element.getEnclosedElements());
@@ -164,6 +165,16 @@ final class ThrowableTypeFactory {
         }
 
         @Override
+        public Element getDelegate() {
+            return delegate;
+        }
+
+        @Override
+        public TypeMirror asType() {
+            return type;
+        }
+
+        @Override
         public boolean hasDefaultConstructor() {
             return defaultConstructor;
         }
@@ -236,11 +247,6 @@ final class ThrowableTypeFactory {
         }
 
         @Override
-        public TypeMirror reference() {
-            return type;
-        }
-
-        @Override
         public int compareTo(final ThrowableType o) {
             return name().compareTo(o.name());
         }
@@ -253,24 +259,67 @@ final class ThrowableTypeFactory {
         private final Set<Parameter> constructionParameters;
 
         private boolean useConstructionParameters = false;
+        private boolean causeSet = false;
 
         /**
          * Creates a new descriptor that is not primitive.
          *
-         * @param types         the type utilities from the annotation processor.
-         * @param elements      the element utilities from the annotation processor.
-         * @param messageMethod the message method.
-         * @param type          the class name of the return type.
+         * @param processingEnv the annotation processing environment.
+         * @param messageMethod         the message method.
+         * @param type                  the class name of the return type.
          */
-        private AptReturnThrowableType(final Elements elements, final Types types, final MessageMethod messageMethod, final TypeMirror type) {
-            super(elements, types, type);
+        private AptReturnThrowableType(final ProcessingEnvironment processingEnv, final MessageMethod messageMethod, final TypeMirror type) {
+            super(processingEnv, type);
             this.messageMethod = messageMethod;
-            constructionParameters = new LinkedHashSet<Parameter>();
+            constructionParameters = new LinkedHashSet<>();
+        }
+
+        @Override
+        protected void init() {
+            final ExecutableElement method = messageMethod;
+            final Signature signature = method.getAnnotation(Signature.class);
+            // If using the @Signature annotation we're attempting to use an exact constructor.
+            if (signature != null) {
+                final List<TypeMirror> args = ElementHelper.getClassArrayAnnotationValue(method, Signature.class, "value");
+                // Validate the constructor exists
+                if (!ElementHelper.hasConstructor(types, this, args)) {
+                    throw new ProcessingException(method, "Constructor of type %s could not be found with arguments %s", this.asType(), args);
+                }
+                final int causeIndex = signature.causeIndex();
+                final int messageIndex = signature.messageIndex();
+                // Note that the messageIndex is required and must be 0 or greater
+                if (messageIndex < 0) {
+                    throw new ProcessingException(method, "A messageIndex of 0 or greater is required. Value %d is invalid.", messageIndex);
+                }
+                final List<Parameter> methodConstructorParameters = new ArrayList<>(messageMethod.parametersAnnotatedWith(Param.class));
+
+                constructionParameters.clear();
+                useConstructionParameters = true;
+                causeSet = !messageMethod.hasCause();
+                // The required length is the number of parameters plus the message and optional cause.
+                final int len = methodConstructorParameters.size() + (causeIndex < 0 ? 1 : 2);
+                int offset = 0;
+                for (int i = 0; i < len; i++) {
+                    if (causeIndex == i) {
+                        causeSet = true;
+                        constructionParameters.add(messageMethod.cause());
+                        offset++;
+                    } else if (messageIndex == i) {
+                        constructionParameters.add(ParameterFactory.forMessageMethod(messageMethod));
+                        offset++;
+                    } else {
+                        constructionParameters.add(methodConstructorParameters.get(i - offset));
+                    }
+                }
+
+            } else {
+                super.init();
+            }
         }
 
         @Override
         protected void init(final List<? extends VariableElement> params) {
-            final Set<Parameter> methodConstructorParameters = messageMethod.parameters(ParameterType.CONSTRUCTION);
+            final Set<Parameter> methodConstructorParameters = messageMethod.parametersAnnotatedWith(Param.class);
             // If there are no construction parameters or a constructor was already found, no need to process
             if (methodConstructorParameters.isEmpty() || useConstructionParameters) {
                 return;
@@ -281,7 +330,7 @@ final class ThrowableTypeFactory {
                 // Checks for the first constructor that can be used. The compiler will end-up determining the constructor
                 // to use, so a best guess should work.
                 final Iterator<Parameter> methodParameterIterator = methodConstructorParameters.iterator();
-                final Set<Parameter> matchedParams = new LinkedHashSet<Parameter>();
+                final Set<Parameter> matchedParams = new LinkedHashSet<>();
                 boolean match = false;
                 boolean causeFound = false;
                 boolean messageFound = false;
@@ -299,10 +348,7 @@ final class ThrowableTypeFactory {
 
                     if (methodParameterIterator.hasNext()) {
                         final Parameter parameter = methodParameterIterator.next();
-                        if (parameter.reference() instanceof VariableElement) {
-                            final VariableElement refType = (VariableElement) parameter.reference();
-                            match = types.isAssignable(refType.asType(), param.asType());
-                        }
+                        match = types.isAssignable(parameter.asType(), param.asType());
                         if (match) {
                             matchedParams.add(parameter);
                         }
@@ -315,6 +361,7 @@ final class ThrowableTypeFactory {
                     constructionParameters.clear();
                     useConstructionParameters = true;
                     constructionParameters.addAll(matchedParams);
+                    causeSet = causeFound;
                 }
             }
         }
@@ -325,6 +372,11 @@ final class ThrowableTypeFactory {
         }
 
         @Override
+        public boolean causeSetInConstructor() {
+            return causeSet;
+        }
+
+        @Override
         public Set<Parameter> constructionParameters() {
             return constructionParameters;
         }
diff --git a/processor/src/main/java/org/jboss/logging/processor/apt/ToolLogger.java b/processor/src/main/java/org/jboss/logging/processor/apt/ToolLogger.java
index eb45c18..2a144e3 100644
--- a/processor/src/main/java/org/jboss/logging/processor/apt/ToolLogger.java
+++ b/processor/src/main/java/org/jboss/logging/processor/apt/ToolLogger.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -33,6 +33,8 @@ import javax.annotation.processing.ProcessingEnvironment;
 import javax.lang.model.element.Element;
 import javax.tools.Diagnostic.Kind;
 
+import org.jboss.logging.processor.model.DelegatingElement;
+
 /**
  * A logger for logging messages for annotation processors.
  *
@@ -287,7 +289,7 @@ public final class ToolLogger {
         if (element == null) {
             messager.printMessage(kind, message);
         } else {
-            messager.printMessage(kind, message, element);
+            messager.printMessage(kind, message, getElement(element));
         }
     }
 
@@ -299,14 +301,14 @@ public final class ToolLogger {
             if (element == null) {
                 messager.printMessage(kind, message);
             } else {
-                messager.printMessage(kind, message, element);
+                messager.printMessage(kind, message, getElement(element));
             }
             // Fail gracefully
         } catch (Throwable t) {
             if (element == null) {
                 messager.printMessage(Kind.ERROR, "Error logging original message: " + messageFormat);
             } else {
-                messager.printMessage(Kind.ERROR, "Error logging original message: " + messageFormat, element);
+                messager.printMessage(Kind.ERROR, "Error logging original message: " + messageFormat, getElement(element));
             }
         }
     }
@@ -319,7 +321,7 @@ public final class ToolLogger {
             log(kind, element, stringCause);
         } else {
             String messageWithCause = messageFormat.concat(", cause : %s");
-            List<Object> newArgs = new ArrayList<Object>();
+            List<Object> newArgs = new ArrayList<>();
             newArgs.addAll(Arrays.asList(args));
             newArgs.add(stringCause);
 
@@ -365,4 +367,9 @@ public final class ToolLogger {
         return stringWriter.toString();
     }
 
+    private static Element getElement(final Element element) {
+        // We need to the delegate element as some implementations rely on private types
+        return (element instanceof DelegatingElement ? ((DelegatingElement) element).getDelegate() : element);
+    }
+
 }
diff --git a/processor/src/main/java/org/jboss/logging/processor/apt/TranslationClassGenerator.java b/processor/src/main/java/org/jboss/logging/processor/apt/TranslationClassGenerator.java
index c9ef442..8b54e75 100644
--- a/processor/src/main/java/org/jboss/logging/processor/apt/TranslationClassGenerator.java
+++ b/processor/src/main/java/org/jboss/logging/processor/apt/TranslationClassGenerator.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -42,18 +42,17 @@ import java.util.Set;
 import java.util.regex.Pattern;
 import javax.annotation.processing.ProcessingEnvironment;
 import javax.annotation.processing.SupportedOptions;
-import javax.lang.model.element.Element;
 import javax.lang.model.element.TypeElement;
 import javax.tools.FileObject;
 import javax.tools.StandardLocation;
 
 import org.jboss.logging.annotations.Message;
+import org.jboss.logging.annotations.MessageBundle;
+import org.jboss.logging.annotations.MessageLogger;
 import org.jboss.logging.processor.generator.model.ClassModel;
 import org.jboss.logging.processor.generator.model.ClassModelFactory;
 import org.jboss.logging.processor.model.MessageInterface;
-import org.jboss.logging.processor.model.MessageInterface.AnnotatedType;
 import org.jboss.logging.processor.model.MessageMethod;
-import org.jboss.logging.processor.util.ElementHelper;
 import org.jboss.logging.processor.validation.FormatValidator;
 import org.jboss.logging.processor.validation.FormatValidatorFactory;
 import org.jboss.logging.processor.validation.StringFormatValidator;
@@ -126,7 +125,7 @@ final class TranslationClassGenerator extends AbstractGenerator {
     }
 
     private Map<File, Map<MessageMethod, String>> allInterfaceTranslations(final MessageInterface messageInterface, final List<File> files) throws IOException {
-        final Map<File, Map<MessageMethod, String>> validTranslations = new LinkedHashMap<File, Map<MessageMethod, String>>();
+        final Map<File, Map<MessageMethod, String>> validTranslations = new LinkedHashMap<>();
         for (MessageInterface superInterface : messageInterface.extendedInterfaces()) {
             validTranslations.putAll(allInterfaceTranslations(superInterface, findTranslationFiles(superInterface)));
         }
@@ -150,7 +149,7 @@ final class TranslationClassGenerator extends AbstractGenerator {
 
             //By default use the class output folder
         } else {
-            FileObject fObj = filer().getResource(StandardLocation.CLASS_OUTPUT, packageName, interfaceName);
+            FileObject fObj = processingEnv.getFiler().getResource(StandardLocation.CLASS_OUTPUT, packageName, interfaceName);
             classTranslationFilesPath = fObj.toUri().getPath().replace(interfaceName, "");
         }
         final List<File> result;
@@ -183,25 +182,22 @@ final class TranslationClassGenerator extends AbstractGenerator {
      * @return the valid translations messages
      */
     private Map<MessageMethod, String> validateTranslationMessages(final MessageInterface messageInterface, final File file) {
-        Map<MessageMethod, String> validTranslations = new LinkedHashMap<MessageMethod, String>();
+        Map<MessageMethod, String> validTranslations = new LinkedHashMap<>();
 
         try {
 
             //Load translations
             Properties translations = new Properties();
             translations.load(new InputStreamReader(new FileInputStream(file), "utf-8"));
-            final Set<MessageMethod> messageMethods = new LinkedHashSet<MessageMethod>();
+            final Set<MessageMethod> messageMethods = new LinkedHashSet<>();
             messageMethods.addAll(messageInterface.methods());
             for (MessageInterface msgIntf : messageInterface.extendedInterfaces()) {
-                // Handle logger interface
-                if (msgIntf.getAnnotatedType() == AnnotatedType.NONE) {
-                    continue;
+                if (msgIntf.isAnnotatedWith(MessageBundle.class) || msgIntf.isAnnotatedWith(MessageLogger.class)) {
+                    messageMethods.addAll(msgIntf.methods());
                 }
-                messageMethods.addAll(msgIntf.methods());
             }
             for (MessageMethod messageMethod : messageMethods) {
                 final String key = messageMethod.translationKey();
-                final Element methodElement = ElementHelper.fromMessageObject(messageMethod);
                 if (translations.containsKey(key)) {
                     final String translationMessage = translations.getProperty(key);
                     if (!translationMessage.trim().isEmpty()) {
@@ -210,19 +206,19 @@ final class TranslationClassGenerator extends AbstractGenerator {
                             if (validator.argumentCount() == messageMethod.formatParameterCount()) {
                                 validTranslations.put(messageMethod, translationMessage);
                             } else {
-                                logger().warn(methodElement,
+                                logger().warn(messageMethod,
                                         "The parameter count for the format (%d) and the number of format parameters (%d) do not match.",
                                         validator.argumentCount(), messageMethod.formatParameterCount());
                             }
                         } else {
-                            logger().warn(methodElement, "%s Resource Bundle: %s", validator.summaryMessage(), file.getAbsolutePath());
+                            logger().warn(messageMethod, "%s Resource Bundle: %s", validator.summaryMessage(), file.getAbsolutePath());
                         }
                     } else {
-                        logger().warn(methodElement, "The translation message with key %s is ignored because value is empty or contains only whitespace", key);
+                        logger().warn(messageMethod, "The translation message with key %s is ignored because value is empty or contains only whitespace", key);
                     }
 
                 } else {
-                    logger().warn(methodElement, "The translation message with key %s have no corresponding messageMethod.", key);
+                    logger().warn(messageMethod, "The translation message with key %s have no corresponding messageMethod.", key);
                 }
             }
 
@@ -251,7 +247,7 @@ final class TranslationClassGenerator extends AbstractGenerator {
         }
 
         //Create source file
-        final ClassModel classModel = ClassModelFactory.translation(filer(), messageInterface, getTranslationClassNameSuffix(translationFile.getName()), translations);
+        final ClassModel classModel = ClassModelFactory.translation(processingEnv, messageInterface, getTranslationClassNameSuffix(translationFile.getName()), translations);
 
         try {
             classModel.generateAndWrite();
diff --git a/processor/src/main/java/org/jboss/logging/processor/apt/TranslationFileGenerator.java b/processor/src/main/java/org/jboss/logging/processor/apt/TranslationFileGenerator.java
index dad57be..1d665ea 100644
--- a/processor/src/main/java/org/jboss/logging/processor/apt/TranslationFileGenerator.java
+++ b/processor/src/main/java/org/jboss/logging/processor/apt/TranslationFileGenerator.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -22,8 +22,6 @@
 
 package org.jboss.logging.processor.apt;
 
-import static org.jboss.logging.processor.util.ElementHelper.getPrimaryClassNamePrefix;
-
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileOutputStream;
@@ -43,16 +41,16 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import javax.annotation.processing.ProcessingEnvironment;
 import javax.annotation.processing.SupportedOptions;
+import javax.lang.model.element.Element;
 import javax.lang.model.element.TypeElement;
 import javax.tools.FileObject;
 import javax.tools.StandardLocation;
 
+import org.jboss.logging.annotations.Transform;
 import org.jboss.logging.annotations.Transform.TransformType;
 import org.jboss.logging.processor.model.MessageInterface;
 import org.jboss.logging.processor.model.MessageMethod;
 import org.jboss.logging.processor.model.Parameter;
-import org.jboss.logging.processor.model.Parameter.ParameterType;
-import org.jboss.logging.processor.util.Strings;
 
 /**
  * The generator of skeletal
@@ -61,24 +59,25 @@ import org.jboss.logging.processor.util.Strings;
  * @author Kevin Pollet - SERLI - (kevin.pollet at serli.com)
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
- at SupportedOptions(TranslationFileGenerator.GENERATED_FILES_PATH_OPTION)
+ at SuppressWarnings("MagicNumber")
+ at SupportedOptions({TranslationFileGenerator.GENERATED_FILES_PATH_OPTION, TranslationFileGenerator.LEVEL_OPTION})
 final class TranslationFileGenerator extends AbstractGenerator {
-    private static final Map<String, Integer> levels = new HashMap<String, Integer>();
+    private static final Map<String, Integer> levels = new HashMap<>();
 
     private static final Pattern PATTERN = Pattern.compile("((@[a-zA-Z_0-9]+)\\s+([a-zA-Z_][a-zA-Z_0-9]*)\\s+([a-zA-Z_][a-zA-Z_0-9].*)\\s*)");
 
-    public static final String EMPTY_STRING = "";
-    public static final String JAVA_DOC_PARAM = "@param";
+    private static final String EMPTY_STRING = "";
+    private static final String JAVA_DOC_PARAM = "@param";
 
-    public static final String GENERATED_FILES_PATH_OPTION = "generatedTranslationFilesPath";
+    private static final String DEFAULT_FILE_EXTENSION = ".i18n.properties";
 
-    public static final String LEVEL_OPTION = "org.jboss.logging.tools.level";
+    private static final String DEFAULT_FILE_COMMENT = "# This file is for reference only, changes have no effect on the generated interface implementations.";
 
-    public static final String GENERATED_FILE_EXTENSION = ".i18n_locale_COUNTRY_VARIANT.properties";
+    static final String GENERATED_FILES_PATH_OPTION = "generatedTranslationFilesPath";
 
-    public static final String DEFAULT_FILE_EXTENSION = ".i18n.properties";
+    static final String GENERATED_FILE_EXTENSION = ".i18n_locale_COUNTRY_VARIANT.properties";
 
-    private static final String DEFAULT_FILE_COMMENT = "# This file is for reference only, changes have no effect on the generated interface implementations.";
+    static final String LEVEL_OPTION = "org.jboss.logging.tools.level";
 
     static {
 
@@ -106,7 +105,7 @@ final class TranslationFileGenerator extends AbstractGenerator {
      *
      * @param processingEnv the processing env
      */
-    public TranslationFileGenerator(final ProcessingEnvironment processingEnv) {
+    TranslationFileGenerator(final ProcessingEnvironment processingEnv) {
         super(processingEnv);
         Map<String, String> options = processingEnv.getOptions();
         this.generatedFilesPath = options.get(GENERATED_FILES_PATH_OPTION);
@@ -133,7 +132,7 @@ final class TranslationFileGenerator extends AbstractGenerator {
     public void processTypeElement(final TypeElement annotation, final TypeElement element, final MessageInterface messageInterface) {
         if (generatedFilesPath != null) {
             if (element.getKind().isInterface()) {
-                String packageName = elementUtils().getPackageOf(element).getQualifiedName().toString();
+                String packageName = processingEnv.getElementUtils().getPackageOf(element).getQualifiedName().toString();
                 String relativePath = packageName.replace('.', File.separatorChar);
                 String fileName = getPrimaryClassNamePrefix(element) + GENERATED_FILE_EXTENSION;
 
@@ -152,7 +151,7 @@ final class TranslationFileGenerator extends AbstractGenerator {
      * @param fileName         the file name
      * @param messageInterface the message interface
      */
-    void generateSkeletalTranslationFile(final String relativePath, final String fileName, final MessageInterface messageInterface) {
+    private void generateSkeletalTranslationFile(final String relativePath, final String fileName, final MessageInterface messageInterface) {
         if (messageInterface == null) {
             throw new IllegalArgumentException("The translations parameter cannot be null");
         }
@@ -166,7 +165,7 @@ final class TranslationFileGenerator extends AbstractGenerator {
         try {
 
             writer = new BufferedWriter(new FileWriter(file));
-            final Set<String> processed = new HashSet<String>();
+            final Set<String> processed = new HashSet<>();
 
             for (MessageMethod messageMethod : messageInterface.methods()) {
                 if (isMethodWritable(messageMethod)) {
@@ -202,7 +201,7 @@ final class TranslationFileGenerator extends AbstractGenerator {
 
         try {
             if (generatedFilesPath == null) {
-                final FileObject fileObject = filer().createResource(StandardLocation.CLASS_OUTPUT, messageInterface.packageName(), fileName);
+                final FileObject fileObject = processingEnv.getFiler().createResource(StandardLocation.CLASS_OUTPUT, messageInterface.packageName(), fileName);
                 // Note the FileObject#openWriter() is used here. The FileObject#openOutputStream() returns an output stream
                 // that writes each byte separately which results in poor performance.
                 writer = new BufferedWriter(fileObject.openWriter());
@@ -214,18 +213,16 @@ final class TranslationFileGenerator extends AbstractGenerator {
                 writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "utf-8"));
             }
             // Write comments
-            writer.write(Strings.fill("#", DEFAULT_FILE_COMMENT.length()));
-            writer.newLine();
+            writeSeparatorLine(writer);
             writer.write("#");
             writer.newLine();
             writer.write(DEFAULT_FILE_COMMENT);
             writer.newLine();
             writer.write("#");
             writer.newLine();
-            writer.write(Strings.fill("#", DEFAULT_FILE_COMMENT.length()));
-            writer.newLine();
+            writeSeparatorLine(writer);
             writer.newLine();
-            final Set<String> processed = new HashSet<String>();
+            final Set<String> processed = new HashSet<>();
 
             for (MessageMethod messageMethod : messageInterface.methods()) {
                 if (isMethodWritable(messageMethod)) {
@@ -261,13 +258,12 @@ final class TranslationFileGenerator extends AbstractGenerator {
         writer.write(String.format("# Message: %s", msg.value()));
         writer.newLine();
         final Map<String, String> parameterComments = parseParameterComments(messageMethod);
-        final Set<Parameter> parameters = messageMethod.parameters(ParameterType.FORMAT, ParameterType.TRANSFORM);
         int i = 0;
-        for (Parameter parameter : parameters) {
+        for (Parameter parameter : messageMethod.parameters()) {
             final String name = parameter.name();
             final String comment = (parameterComments.containsKey(name) ? parameterComments.get(name) : EMPTY_STRING);
-            if (parameter.parameterType() == ParameterType.TRANSFORM) {
-                final List<TransformType> transformTypes = Arrays.asList(parameter.transform().value());
+            if (parameter.isAnnotatedWith(Transform.class)) {
+                final List<TransformType> transformTypes = Arrays.asList(parameter.getAnnotation(Transform.class).value());
                 if (transformTypes.contains(TransformType.GET_CLASS)) {
                     if (transformTypes.size() == 1) {
                         writer.write(String.format("# @param class of %s - %s", name, comment));
@@ -288,7 +284,7 @@ final class TranslationFileGenerator extends AbstractGenerator {
                     }
                 }
                 writer.newLine();
-            } else {
+            } else if (parameter.isFormatParameter()) {
                 writer.write(String.format("# @param %d: %s - %s", ++i, name, comment));
                 writer.newLine();
             }
@@ -299,7 +295,7 @@ final class TranslationFileGenerator extends AbstractGenerator {
     }
 
     private Map<String, String> parseParameterComments(final MessageMethod messageMethod) throws IOException {
-        final Map<String, String> result = new LinkedHashMap<String, String>();
+        final Map<String, String> result = new LinkedHashMap<>();
         final String comment = messageMethod.getComment();
         if (comment != null) {
             final Matcher matcher = PATTERN.matcher(comment);
@@ -318,6 +314,44 @@ final class TranslationFileGenerator extends AbstractGenerator {
         return !(comparator != null && method.isLoggerMethod()) || (comparator.compareTo(method.logLevel()) >= 0);
     }
 
+    private static void writeSeparatorLine(final BufferedWriter writer) throws IOException {
+        final int len = DEFAULT_FILE_COMMENT.length();
+        for (int i = 0; i < len; i++) {
+            writer.append('#');
+        }
+        writer.newLine();
+    }
+
+    /**
+     * Returns the primary class simple name prefix for an element
+     * who represents a MessageBundle or MessageLogger interface.
+     *
+     * @param element the element
+     *
+     * @return the translation file name prefix
+     *
+     * @throws IllegalArgumentException if element is null or the element is not an interface
+     */
+    private static String getPrimaryClassNamePrefix(final TypeElement element) {
+        if (element == null) {
+            throw new IllegalArgumentException("The element parameter cannot be null");
+        }
+        if (!element.getKind().isInterface()) {
+            throw new IllegalArgumentException("The element parameter is not an interface");
+        }
+
+        String translationFileName = element.getSimpleName().toString();
+
+        //Check if it's an inner interface
+        Element enclosingElt = element.getEnclosingElement();
+        while (enclosingElt != null && enclosingElt instanceof TypeElement) {
+            translationFileName = String.format("%s$%s", enclosingElt.getSimpleName().toString(), translationFileName);
+            enclosingElt = enclosingElt.getEnclosingElement();
+        }
+
+        return translationFileName;
+    }
+
     private static final class LevelComparator implements Comparable<String> {
         private final Integer levelIntValue;
 
diff --git a/processor/src/main/java/org/jboss/logging/processor/apt/report/AsciidocReportWriter.java b/processor/src/main/java/org/jboss/logging/processor/apt/report/AsciidocReportWriter.java
new file mode 100644
index 0000000..bdd91ee
--- /dev/null
+++ b/processor/src/main/java/org/jboss/logging/processor/apt/report/AsciidocReportWriter.java
@@ -0,0 +1,147 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2016, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging.processor.apt.report;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+
+import org.jboss.logging.processor.model.MessageInterface;
+import org.jboss.logging.processor.model.MessageMethod;
+
+/**
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+class AsciidocReportWriter extends ReportWriter {
+
+    private final BufferedWriter writer;
+
+    AsciidocReportWriter(final MessageInterface messageInterface, final BufferedWriter writer) {
+        super(messageInterface);
+        this.writer = writer;
+    }
+
+    @Override
+    public void writeHeader(final String title) throws IOException {
+        // Write the title for the document
+        final String escapedTitle;
+        if (title != null) {
+            escapedTitle = escape(title).toString();
+        } else {
+            escapedTitle = "Messages";
+        }
+        writer.write(escapedTitle);
+        writer.newLine();
+        for (int i = 0; i < escapedTitle.length(); i++) {
+            writer.append('=');
+        }
+        writer.newLine();
+        writer.newLine();
+
+        // Write the table title
+        writer.append('.').append(messageInterface.name());
+        writer.newLine();
+        // Write the table configuration, 4 columns
+        writer.write("[cols=\"1,5,^1,2m\"]");
+        writer.newLine();
+        // Write the table header
+        writer.write("|===");
+        writer.newLine();
+        writer.write("|Message Id |Message |Log Level |Return Type");
+        writer.newLine();
+        writer.newLine();
+    }
+
+    @Override
+    public void writeDetail(final MessageMethod messageMethod) throws IOException {
+        final MessageMethod.Message msg = messageMethod.message();
+        final String id = (msg.hasId() ? String.format(messageIdFormat, msg.id()) : DEFAULT_ID);
+        final String url = getUrl(messageMethod, id);
+        if (url.isEmpty()) {
+            writer.append('|').append(escape(id));
+        } else {
+            writer.append("|link:").append(url).append('[').append(id).append(']');
+        }
+        writer.newLine();
+        writer.append('|').append(escape(msg.value()));
+        writer.newLine();
+        if (messageMethod.isLoggerMethod()) {
+            writer.append('|').append(getLogLevel(messageMethod));
+            writer.newLine();
+            writer.append("|void");
+        } else {
+            writer.append("|--");
+            writer.newLine();
+            writer.append('|').append(messageMethod.returnType().name());
+        }
+        writer.newLine();
+        writer.newLine();
+    }
+
+    @Override
+    public void writeFooter() throws IOException {
+        // End the table
+        writer.write("|===");
+        writer.newLine();
+    }
+
+    @Override
+    public void close() throws IOException {
+        writer.close();
+    }
+
+    @Override
+    ReportType getReportType() {
+        return ReportType.ASCIIDOC;
+    }
+
+    private CharSequence escape(final CharSequence s) {
+        final StringBuilder sb = new StringBuilder();
+        final int len = s.length();
+        int aPos = -1;
+        int offset = 0;
+        char previous = 0x00;
+        for (int i = 0; i < len; i++) {
+            final char c = s.charAt(i);
+            switch (c) {
+                // Asterisks around text make it bold, unless there is a space after a beginning asterisk or a space
+                // before an ending asterisk
+                case '*':
+                    if (aPos >= 0) {
+                        if (previous != ' ') {
+                            sb.insert(aPos + offset++, '\\');
+                        }
+                        aPos = -1;
+                    } else if ((i + 1) < len) {
+                        final char next = s.charAt(i + 1);
+                        if (next != ' ') {
+                            aPos = i;
+                        }
+                    }
+                    break;
+            }
+            previous = c;
+            sb.append(c);
+        }
+        return sb;
+    }
+}
diff --git a/processor/src/main/java/org/jboss/logging/processor/apt/report/IndentingXmlWriter.java b/processor/src/main/java/org/jboss/logging/processor/apt/report/IndentingXmlWriter.java
new file mode 100644
index 0000000..d7f797a
--- /dev/null
+++ b/processor/src/main/java/org/jboss/logging/processor/apt/report/IndentingXmlWriter.java
@@ -0,0 +1,293 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2016, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging.processor.apt.report;
+
+import java.util.Iterator;
+import java.util.stream.Stream;
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
+/**
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+class IndentingXmlWriter implements XMLStreamWriter, XMLStreamConstants {
+
+    private static final String SPACES = "    ";
+
+    private final XMLStreamWriter delegate;
+    private int index;
+    private int state = START_DOCUMENT;
+    private boolean indentEnd;
+
+    public IndentingXmlWriter(final XMLStreamWriter delegate) {
+        this.delegate = delegate;
+        index = 0;
+        indentEnd = false;
+    }
+
+    private void indent() throws XMLStreamException {
+        final int index = this.index;
+        if (index > 0) {
+            for (int i = 0; i < index; i++) {
+                delegate.writeCharacters(SPACES);
+            }
+        }
+
+    }
+
+    private void newline() throws XMLStreamException {
+        delegate.writeCharacters(System.lineSeparator());
+    }
+
+    @Override
+    public void writeStartElement(final String localName) throws XMLStreamException {
+        newline();
+        indent();
+        delegate.writeStartElement(localName);
+        indentEnd = false;
+        state = START_ELEMENT;
+        index++;
+    }
+
+    @Override
+    public void writeStartElement(final String namespaceURI, final String localName) throws XMLStreamException {
+        newline();
+        indent();
+        delegate.writeStartElement(namespaceURI, localName);
+        indentEnd = false;
+        state = START_ELEMENT;
+        index++;
+    }
+
+    @Override
+    public void writeStartElement(final String prefix, final String localName, final String namespaceURI) throws XMLStreamException {
+        newline();
+        indent();
+        delegate.writeStartElement(prefix, localName, namespaceURI);
+        indentEnd = false;
+        state = START_ELEMENT;
+        index++;
+    }
+
+    @Override
+    public void writeEmptyElement(final String namespaceURI, final String localName) throws XMLStreamException {
+        newline();
+        indent();
+        delegate.writeEmptyElement(namespaceURI, localName);
+        state = END_ELEMENT;
+    }
+
+    @Override
+    public void writeEmptyElement(final String prefix, final String localName, final String namespaceURI) throws XMLStreamException {
+        newline();
+        indent();
+        delegate.writeEmptyElement(prefix, localName, namespaceURI);
+        state = END_ELEMENT;
+    }
+
+    @Override
+    public void writeEmptyElement(final String localName) throws XMLStreamException {
+        newline();
+        indent();
+        delegate.writeEmptyElement(localName);
+        state = END_ELEMENT;
+    }
+
+    @Override
+    public void writeEndElement() throws XMLStreamException {
+        index--;
+        if (state != CHARACTERS || indentEnd) {
+            newline();
+            indent();
+            indentEnd = false;
+        }
+        delegate.writeEndElement();
+        state = END_ELEMENT;
+    }
+
+    @Override
+    public void writeEndDocument() throws XMLStreamException {
+        delegate.writeEndDocument();
+        state = END_DOCUMENT;
+    }
+
+    @Override
+    public void close() throws XMLStreamException {
+        delegate.close();
+    }
+
+    @Override
+    public void flush() throws XMLStreamException {
+        delegate.flush();
+    }
+
+    @Override
+    public void writeAttribute(final String localName, final String value) throws XMLStreamException {
+        delegate.writeAttribute(localName, value);
+    }
+
+    @Override
+    public void writeAttribute(final String prefix, final String namespaceURI, final String localName, final String value) throws XMLStreamException {
+        delegate.writeAttribute(prefix, namespaceURI, localName, value);
+    }
+
+    @Override
+    public void writeAttribute(final String namespaceURI, final String localName, final String value) throws XMLStreamException {
+        delegate.writeAttribute(namespaceURI, localName, value);
+    }
+
+    @Override
+    public void writeNamespace(final String prefix, final String namespaceURI) throws XMLStreamException {
+        delegate.writeNamespace(prefix, namespaceURI);
+    }
+
+    @Override
+    public void writeDefaultNamespace(final String namespaceURI) throws XMLStreamException {
+        delegate.writeDefaultNamespace(namespaceURI);
+    }
+
+    @Override
+    public void writeComment(final String data) throws XMLStreamException {
+        newline();
+        indent();
+        delegate.writeComment(data);
+        state = COMMENT;
+    }
+
+    @Override
+    public void writeProcessingInstruction(final String target) throws XMLStreamException {
+        newline();
+        indent();
+        delegate.writeProcessingInstruction(target);
+        state = PROCESSING_INSTRUCTION;
+    }
+
+    @Override
+    public void writeProcessingInstruction(final String target, final String data) throws XMLStreamException {
+        newline();
+        indent();
+        delegate.writeProcessingInstruction(target, data);
+        state = PROCESSING_INSTRUCTION;
+    }
+
+    @Override
+    public void writeCData(final String data) throws XMLStreamException {
+        delegate.writeCData(data);
+        state = CDATA;
+    }
+
+    @Override
+    public void writeDTD(final String dtd) throws XMLStreamException {
+        newline();
+        indent();
+        delegate.writeDTD(dtd);
+        state = DTD;
+    }
+
+    @Override
+    public void writeEntityRef(final String name) throws XMLStreamException {
+        delegate.writeEntityRef(name);
+        state = ENTITY_REFERENCE;
+    }
+
+    @Override
+    public void writeStartDocument() throws XMLStreamException {
+        delegate.writeStartDocument();
+        newline();
+        state = START_DOCUMENT;
+    }
+
+    @Override
+    public void writeStartDocument(final String version) throws XMLStreamException {
+        delegate.writeStartDocument(version);
+        newline();
+        state = START_DOCUMENT;
+    }
+
+    @Override
+    public void writeStartDocument(final String encoding, final String version) throws XMLStreamException {
+        delegate.writeStartDocument(encoding, version);
+        newline();
+        state = START_DOCUMENT;
+    }
+
+    @Override
+    public void writeCharacters(final String text) throws XMLStreamException {
+        indentEnd = false;
+        boolean first = true;
+        final Iterator<String> iterator = Stream.of(text.split("\n")).iterator();
+        while (iterator.hasNext()) {
+            final String t = iterator.next();
+            // On first iteration if more than one line is required, skip to a new line and indent
+            if (first && iterator.hasNext()) {
+                first = false;
+                newline();
+                indent();
+            }
+            delegate.writeCharacters(t);
+            if (iterator.hasNext()) {
+                newline();
+                indent();
+                indentEnd = true;
+            }
+        }
+        state = CHARACTERS;
+    }
+
+    @Override
+    public void writeCharacters(final char[] text, final int start, final int len) throws XMLStreamException {
+        delegate.writeCharacters(text, start, len);
+    }
+
+    @Override
+    public String getPrefix(final String uri) throws XMLStreamException {
+        return delegate.getPrefix(uri);
+    }
+
+    @Override
+    public void setPrefix(final String prefix, final String uri) throws XMLStreamException {
+        delegate.setPrefix(prefix, uri);
+    }
+
+    @Override
+    public void setDefaultNamespace(final String uri) throws XMLStreamException {
+        delegate.setDefaultNamespace(uri);
+    }
+
+    @Override
+    public void setNamespaceContext(final NamespaceContext context) throws XMLStreamException {
+        delegate.setNamespaceContext(context);
+    }
+
+    @Override
+    public NamespaceContext getNamespaceContext() {
+        return delegate.getNamespaceContext();
+    }
+
+    @Override
+    public Object getProperty(final String name) throws IllegalArgumentException {
+        return delegate.getProperty(name);
+    }
+}
diff --git a/processor/src/main/java/org/jboss/logging/processor/model/JavaDocComment.java b/processor/src/main/java/org/jboss/logging/processor/apt/report/ReportType.java
similarity index 68%
copy from processor/src/main/java/org/jboss/logging/processor/model/JavaDocComment.java
copy to processor/src/main/java/org/jboss/logging/processor/apt/report/ReportType.java
index 58cbe9a..a9934a8 100644
--- a/processor/src/main/java/org/jboss/logging/processor/model/JavaDocComment.java
+++ b/processor/src/main/java/org/jboss/logging/processor/apt/report/ReportType.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -20,19 +20,28 @@
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
 
-package org.jboss.logging.processor.model;
+package org.jboss.logging.processor.apt.report;
 
 /**
- * Represents the {@code JavaDoc's} documentation.
+ * Defines the report type for generating reports.
  *
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
-public interface JavaDocComment {
+public enum ReportType {
+    ASCIIDOC(".adoc"),
+    XML(".xml");
+    private final String extension;
+
+    ReportType(final String extension) {
+        this.extension = extension;
+    }
 
     /**
-     * The JavaDoc comments if available or {@code null} if there are no JavaDoc's present.
+     * Returns the extension used for the file.
      *
-     * @return the JavaDoc comments or {@code null}.
+     * @return the extension
      */
-    String getComment();
+    public String getExtension() {
+        return extension;
+    }
 }
diff --git a/processor/src/main/java/org/jboss/logging/processor/apt/report/ReportWriter.java b/processor/src/main/java/org/jboss/logging/processor/apt/report/ReportWriter.java
new file mode 100644
index 0000000..2785b7e
--- /dev/null
+++ b/processor/src/main/java/org/jboss/logging/processor/apt/report/ReportWriter.java
@@ -0,0 +1,183 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2016, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging.processor.apt.report;
+
+import java.io.BufferedWriter;
+import java.io.Closeable;
+import java.io.IOException;
+import javax.xml.stream.XMLStreamException;
+
+import org.jboss.logging.annotations.BaseUrl;
+import org.jboss.logging.annotations.ResolutionDoc;
+import org.jboss.logging.processor.model.MessageInterface;
+import org.jboss.logging.processor.model.MessageMethod;
+import org.jboss.logging.processor.util.Expressions;
+
+/**
+ * Writes reports based on a {@link MessageInterface}. These reports could be used for documented messages from logging
+ * or message bundle interfaces.
+ *
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+public abstract class ReportWriter implements Closeable {
+    static final String DEFAULT_ID = "--";
+
+    private final String baseUrl;
+    final MessageInterface messageInterface;
+    final String messageIdFormat;
+
+    ReportWriter(final MessageInterface messageInterface) {
+        this.messageInterface = messageInterface;
+        final int idLen = messageInterface.getIdLength();
+        if (idLen > 0) {
+            messageIdFormat = messageInterface.projectCode() + "%0" + messageInterface.getIdLength() + "d";
+        } else {
+            messageIdFormat = messageInterface.projectCode() + "%d";
+        }
+        if (messageInterface.isAnnotatedWith(BaseUrl.class)) {
+            baseUrl = messageInterface.getAnnotation(BaseUrl.class).value();
+        } else {
+            baseUrl = null;
+        }
+    }
+
+    /**
+     * Creates a new report writer based on the report type.
+     *
+     * @param reportType the report type to create the writer for
+     * @param writer     the used to write the contents to
+     *
+     * @return the report writer to use
+     *
+     * @throws IllegalStateException    if there was an error creating the report writer
+     * @throws IllegalArgumentException if the {@code reportType} is invalid
+     */
+    public static ReportWriter of(final ReportType reportType, final MessageInterface messageInterface, final BufferedWriter writer) {
+        if (reportType == ReportType.ASCIIDOC) {
+            return new AsciidocReportWriter(messageInterface, writer);
+        } else if (reportType == ReportType.XML) {
+            try {
+                return new XmlReportWriter(messageInterface, writer);
+            } catch (XMLStreamException e) {
+                throw new IllegalStateException("Failed to create XML report writer.", e);
+            }
+        }
+        throw new IllegalArgumentException("Type " + reportType + " is not a known report type.");
+    }
+
+    /**
+     * Writes the header for the report.
+     *
+     * @param title the title of the header
+     *
+     * @throws IOException if an I/O error occurs
+     */
+    public abstract void writeHeader(String title) throws IOException;
+
+    /**
+     * Writes a detail line for the report.
+     *
+     * @param messageMethod the method to write the details for
+     *
+     * @throws IOException if an I/O error occurs
+     */
+    public abstract void writeDetail(MessageMethod messageMethod) throws IOException;
+
+    /**
+     * Writes the footer for the report.
+     *
+     * @throws IOException if an I/O error occurs
+     */
+    public abstract void writeFooter() throws IOException;
+
+    /**
+     * The report type for this writer.
+     *
+     * @return the report type
+     */
+    abstract ReportType getReportType();
+
+    /**
+     * Gets the log level from the {@code @Message} annotation.
+     *
+     * @param method the method to get the log level from
+     *
+     * @return the log level or an empty string
+     */
+    String getLogLevel(final MessageMethod method) {
+        if (method.isLoggerMethod()) {
+            final String logLevel = method.logLevel();
+            final int index = logLevel.lastIndexOf('.');
+            if (index > 0) {
+                return logLevel.substring(index + 1);
+            }
+            return logLevel;
+        }
+        return "";
+    }
+
+    String getUrl(final MessageMethod messageMethod, final String id) {
+        final ResolutionDoc resolutionDoc = getResolutionDoc(messageMethod);
+        if (resolutionDoc == null || resolutionDoc.skip() || DEFAULT_ID.equals(id)) {
+            return "";
+        }
+
+        final StringBuilder result = new StringBuilder();
+
+        String base = baseUrl == null ? "" : baseUrl;
+        final String path = resolutionDoc.path();
+        final String suffix = resolutionDoc.suffix();
+        final String url = resolutionDoc.url();
+        if (!url.isEmpty()) {
+            base = url;
+        }
+
+        if (!base.isEmpty()) {
+            result.append(base);
+            if (!base.endsWith("/") && !base.endsWith("#")) {
+                result.append('/');
+            }
+        }
+
+        if (path.isEmpty()) {
+            result.append(id);
+        } else {
+            result.append(path);
+        }
+
+        if (suffix.isEmpty()) {
+            result.append(getReportType().getExtension());
+        } else {
+            result.append(suffix);
+        }
+
+        return Expressions.resolve(messageInterface.expressionProperties(), result.toString());
+    }
+
+    private ResolutionDoc getResolutionDoc(final MessageMethod messageMethod) {
+        if (messageMethod.isAnnotatedWith(ResolutionDoc.class)) {
+            return messageMethod.getAnnotation(ResolutionDoc.class);
+        }
+        return messageInterface.getAnnotation(ResolutionDoc.class);
+    }
+}
diff --git a/processor/src/main/java/org/jboss/logging/processor/apt/report/XmlReportWriter.java b/processor/src/main/java/org/jboss/logging/processor/apt/report/XmlReportWriter.java
new file mode 100644
index 0000000..77e5edc
--- /dev/null
+++ b/processor/src/main/java/org/jboss/logging/processor/apt/report/XmlReportWriter.java
@@ -0,0 +1,115 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2016, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging.processor.apt.report;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.jboss.logging.processor.model.MessageInterface;
+import org.jboss.logging.processor.model.MessageMethod;
+
+/**
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+class XmlReportWriter extends ReportWriter {
+    private static final String NAMESPACE = "urn:jboss:logging:report:1.0";
+    private final XMLStreamWriter xmlWriter;
+
+    XmlReportWriter(final MessageInterface messageInterface, final BufferedWriter writer) throws XMLStreamException {
+        super(messageInterface);
+        final XMLOutputFactory factory = XMLOutputFactory.newInstance();
+        xmlWriter = new IndentingXmlWriter(factory.createXMLStreamWriter(writer));
+    }
+
+    @Override
+    public void writeHeader(final String title) throws IOException {
+        try {
+            xmlWriter.writeStartDocument();
+            xmlWriter.setDefaultNamespace(NAMESPACE);
+            xmlWriter.writeStartElement("report");
+            xmlWriter.writeNamespace(null, NAMESPACE);
+            if (title != null) {
+                xmlWriter.writeAttribute("title", title);
+            }
+            xmlWriter.writeStartElement("messages");
+            xmlWriter.writeAttribute("interface", messageInterface.name());
+        } catch (XMLStreamException e) {
+            throw new IOException(e);
+        }
+    }
+
+    @Override
+    public void writeDetail(final MessageMethod messageMethod) throws IOException {
+        try {
+            xmlWriter.writeStartElement("message");
+            final MessageMethod.Message msg = messageMethod.message();
+            final String url;
+            if (msg.hasId()) {
+                final String id = String.format(messageIdFormat, msg.id());
+                xmlWriter.writeAttribute("id", id);
+                url = getUrl(messageMethod, id);
+            } else {
+                url = getUrl(messageMethod, DEFAULT_ID);
+            }
+            if (!url.isEmpty()) {
+                xmlWriter.writeAttribute("resolutionUrl", url);
+            }
+            if (messageMethod.isLoggerMethod()) {
+                xmlWriter.writeAttribute("logLevel", getLogLevel(messageMethod));
+            } else {
+                xmlWriter.writeAttribute("returnType", messageMethod.returnType().name());
+            }
+            xmlWriter.writeCharacters(msg.value());
+            xmlWriter.writeEndElement();
+        } catch (XMLStreamException e) {
+            throw new IOException(e);
+        }
+    }
+
+    @Override
+    public void writeFooter() throws IOException {
+        try {
+            xmlWriter.writeEndElement(); // end <messages/>
+            xmlWriter.writeEndElement(); // end <report/>
+            xmlWriter.writeEndDocument();
+        } catch (XMLStreamException e) {
+            throw new IOException(e);
+        }
+    }
+
+    @Override
+    public void close() throws IOException {
+        try {
+            if (xmlWriter != null) xmlWriter.close();
+        } catch (XMLStreamException ignore) {
+        }
+    }
+
+    @Override
+    ReportType getReportType() {
+        return ReportType.XML;
+    }
+}
diff --git a/processor/src/main/java/org/jboss/logging/processor/generator/model/ClassModel.java b/processor/src/main/java/org/jboss/logging/processor/generator/model/ClassModel.java
index 194b038..8f42564 100644
--- a/processor/src/main/java/org/jboss/logging/processor/generator/model/ClassModel.java
+++ b/processor/src/main/java/org/jboss/logging/processor/generator/model/ClassModel.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -25,19 +25,22 @@ package org.jboss.logging.processor.generator.model;
 import static org.jboss.jdeparser.JExprs.$v;
 import static org.jboss.jdeparser.JMod.FINAL;
 import static org.jboss.jdeparser.JTypes.$t;
-import static org.jboss.logging.processor.util.ElementHelper.typeToString;
+import static org.jboss.jdeparser.JTypes.typeOf;
 
 import java.io.IOException;
 import java.io.Serializable;
 import java.util.HashMap;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Properties;
-import javax.annotation.Generated;
-import javax.annotation.processing.Filer;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.TypeElement;
 
 import org.jboss.jdeparser.FormatPreferences;
+import org.jboss.jdeparser.JCall;
 import org.jboss.jdeparser.JClassDef;
 import org.jboss.jdeparser.JDeparser;
+import org.jboss.jdeparser.JExpr;
 import org.jboss.jdeparser.JExprs;
 import org.jboss.jdeparser.JFiler;
 import org.jboss.jdeparser.JMethodDef;
@@ -45,8 +48,10 @@ import org.jboss.jdeparser.JMod;
 import org.jboss.jdeparser.JSourceFile;
 import org.jboss.jdeparser.JSources;
 import org.jboss.jdeparser.JType;
-import org.jboss.jdeparser.JTypes;
 import org.jboss.jdeparser.JVarDeclaration;
+import org.jboss.logging.annotations.MessageBundle;
+import org.jboss.logging.annotations.MessageLogger;
+import org.jboss.logging.processor.apt.ProcessingException;
 import org.jboss.logging.processor.model.MessageInterface;
 import org.jboss.logging.processor.model.MessageMethod;
 
@@ -65,7 +70,6 @@ public abstract class ClassModel {
     private final JSources sources;
 
     private final JClassDef classDef;
-    protected final JSourceFile sourceFile;
 
     private final MessageInterface messageInterface;
 
@@ -77,18 +81,23 @@ public abstract class ClassModel {
     private final Map<String, JMethodDef> messageMethods;
     private final Map<String, JVarDeclaration> messageFields;
 
+
+    final JSourceFile sourceFile;
+    final ProcessingEnvironment processingEnv;
+
     /**
      * Construct a class model.
      *
-     * @param filer            the filer used to create the source file
+     * @param processingEnv    the processing environment
      * @param messageInterface the message interface to implement.
      * @param superClassName   the super class used for the translation implementations.
      */
-    ClassModel(final Filer filer, final MessageInterface messageInterface, final String className, final String superClassName) {
+    ClassModel(final ProcessingEnvironment processingEnv, final MessageInterface messageInterface, final String className, final String superClassName) {
+        this.processingEnv = processingEnv;
         this.messageInterface = messageInterface;
         this.className = messageInterface.packageName() + "." + className;
         this.superClassName = superClassName;
-        sources = JDeparser.createSources(JFiler.newInstance(filer), new FormatPreferences(new Properties()));
+        sources = JDeparser.createSources(JFiler.newInstance(processingEnv.getFiler()), new FormatPreferences(new Properties()));
         sourceFile = sources.createSourceFile(messageInterface.packageName(), className);
         classDef = sourceFile._class(JMod.PUBLIC, className);
         final int idLen = messageInterface.getIdLength();
@@ -130,12 +139,15 @@ public abstract class ClassModel {
      * @throws IllegalStateException if the class has already been defined.
      */
     JClassDef generateModel() throws IllegalStateException {
-        // Add generated annotation
-        final JType generatedType = $t(Generated.class);
-        sourceFile._import(generatedType);
-        classDef.annotate(generatedType)
-                .value("value", getClass().getName())
-                .value("date", JExprs.str(ClassModelHelper.generatedDateValue()));
+        // Add generated annotation if required
+        final TypeElement generatedAnnotation = messageInterface.generatedAnnotation();
+        if (generatedAnnotation != null) {
+            final JType generatedType = typeOf(generatedAnnotation.asType());
+            sourceFile._import(generatedType);
+            classDef.annotate(generatedType)
+                    .value("value", getClass().getName())
+                    .value("date", JExprs.str(ClassModelHelper.generatedDateValue()));
+        }
 
         // Create the default JavaDoc
         classDef.docComment().text("Warning this class consists of generated code.");
@@ -146,14 +158,12 @@ public abstract class ClassModel {
         }
 
         // Always implement the interface
-        // TODO - Temporary fix for implementing nested interfaces.
-        classDef._implements(typeToString(messageInterface.name()));
+        classDef._implements(typeOf(messageInterface.asType()));
 
         //Add implements
         if (!messageInterface.extendedInterfaces().isEmpty()) {
             for (MessageInterface intf : messageInterface.extendedInterfaces()) {
-                // TODO - Temporary fix for implementing nested interfaces.
-                final JType interfaceName = $t(typeToString(intf.name()));
+                final JType interfaceName = typeOf(intf.asType());
                 sourceFile._import(interfaceName);
                 classDef._implements(interfaceName);
             }
@@ -255,10 +265,111 @@ public abstract class ClassModel {
      * @return the read resolve method.
      */
     protected JMethodDef createReadResolveMethod() {
-        final JType type = JTypes.typeOf(classDef);
+        final JType type = typeOf(classDef);
         final JVarDeclaration instance = classDef.field(JMod.PUBLIC | JMod.STATIC | JMod.FINAL, type, INSTANCE_FIELD_NAME, type._new());
         final JMethodDef readResolveMethod = classDef.method(JMod.PROTECTED, Object.class, GET_INSTANCE_METHOD_NAME);
         readResolveMethod.body()._return($v(instance));
         return readResolveMethod;
     }
+
+    /**
+     * Creates the method used to get the locale for formatting messages.
+     * <p>
+     * If the {@code locale} parameter is {@code null} the {@link MessageLogger#rootLocale()} or
+     * {@link MessageBundle#rootLocale()} will be used to determine the {@linkplain Locale locale} to use.
+     * </p>
+     *
+     * @param locale   the locale to use
+     * @param override {@code true} if the {@link Override} annotation should be added to the method
+     *
+     * @return the call to the locale getter
+     */
+    JCall createLocaleGetter(final String locale, final boolean override) {
+        final String methodName = "getLoggingLocale";
+        // Create the type and import it
+        final JType localeType = typeOf(Locale.class);
+        sourceFile._import(localeType);
+        final JVarDeclaration defaultInstance = classDef.field(JMod.PRIVATE | JMod.STATIC | JMod.FINAL, localeType, "LOCALE", determineLocale(locale, localeType));
+
+        // Create the method
+        final JMethodDef method = classDef.method(JMod.PROTECTED, localeType, methodName);
+        if (override) {
+            method.annotate(Override.class);
+        }
+        method.body()._return($v(defaultInstance));
+        return JExprs.call(methodName);
+    }
+
+    private JExpr determineLocale(final String locale, final JType localeType) {
+        final JExpr initializer;
+
+        if (locale == null) {
+            // Create a static instance field for the default locale
+            final String bcp47Value;
+            if (messageInterface.isAnnotatedWith(MessageBundle.class)) {
+                bcp47Value = messageInterface.getAnnotation(MessageBundle.class).rootLocale();
+            } else if (messageInterface.isAnnotatedWith(MessageLogger.class)) {
+                bcp47Value = messageInterface.getAnnotation(MessageLogger.class).rootLocale();
+            } else {
+                bcp47Value = "";
+            }
+
+            if (bcp47Value.isEmpty()) {
+                initializer = localeType.$v("ROOT");
+            } else {
+                initializer = localeType.call("forLanguageTag").arg(JExprs.str(bcp47Value));
+            }
+        } else {
+            if ("en_CA".equals(locale)) {
+                initializer = localeType.$v("CANADA");
+            } else if ("fr_CA".equals(locale)) {
+                initializer = localeType.$v("CANADA_FRENCH");
+            } else if ("zh".equals(locale)) {
+                initializer = localeType.$v("CHINESE");
+            } else if ("en".equals(locale)) {
+                initializer = localeType.$v("ENGLISH");
+            } else if ("fr_FR".equals(locale)) {
+                initializer = localeType.$v("FRANCE");
+            } else if ("fr".equals(locale)) {
+                initializer = localeType.$v("FRENCH");
+            } else if ("de".equals(locale)) {
+                initializer = localeType.$v("GERMAN");
+            } else if ("de_DE".equals(locale)) {
+                initializer = localeType.$v("GERMANY");
+            } else if ("it".equals(locale)) {
+                initializer = localeType.$v("ITALIAN");
+            } else if ("it_IT".equals(locale)) {
+                initializer = localeType.$v("ITALY");
+            } else if ("ja_JP".equals(locale)) {
+                initializer = localeType.$v("JAPAN");
+            } else if ("ja".equals(locale)) {
+                initializer = localeType.$v("JAPANESE");
+            } else if ("ko_KR".equals(locale)) {
+                initializer = localeType.$v("KOREA");
+            } else if ("ko".equals(locale)) {
+                initializer = localeType.$v("KOREAN");
+            } else if ("zh_CN".equals(locale)) {
+                initializer = localeType.$v("SIMPLIFIED_CHINESE");
+            } else if ("zh_TW".equals(locale)) {
+                initializer = localeType.$v("TRADITIONAL_CHINESE");
+            } else if ("en_UK".equals(locale)) {
+                initializer = localeType.$v("UK");
+            } else if ("en_US".equals(locale)) {
+                initializer = localeType.$v("US");
+            } else {
+                final JCall newInstance = localeType._new();
+                // Split the locale
+                final String[] parts = locale.split("_");
+                if (parts.length > 3) {
+                    throw new ProcessingException(messageInterface, "Failed to parse %s to a Locale.", locale);
+                }
+                for (String arg : parts) {
+                    newInstance.arg(JExprs.str(arg));
+                }
+                initializer = newInstance;
+            }
+        }
+
+        return initializer;
+    }
 }
diff --git a/processor/src/main/java/org/jboss/logging/processor/generator/model/ClassModelFactory.java b/processor/src/main/java/org/jboss/logging/processor/generator/model/ClassModelFactory.java
index ef7e997..2cbb8cd 100644
--- a/processor/src/main/java/org/jboss/logging/processor/generator/model/ClassModelFactory.java
+++ b/processor/src/main/java/org/jboss/logging/processor/generator/model/ClassModelFactory.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -26,8 +26,10 @@ import static org.jboss.logging.processor.generator.model.ClassModelHelper.imple
 import static org.jboss.logging.processor.util.TranslationHelper.getEnclosingTranslationClassName;
 
 import java.util.Map;
-import javax.annotation.processing.Filer;
+import javax.annotation.processing.ProcessingEnvironment;
 
+import org.jboss.logging.annotations.MessageBundle;
+import org.jboss.logging.annotations.MessageLogger;
 import org.jboss.logging.processor.model.MessageInterface;
 import org.jboss.logging.processor.model.MessageMethod;
 
@@ -48,21 +50,20 @@ public class ClassModelFactory {
     /**
      * Creates an implementation code model from the message interface.
      *
-     * @param filer            the filer used to create the source file
+     * @param processingEnv    the processing environment
      * @param messageInterface the message interface to implement
      * @param useLogging31     whether or not jboss-logging 3.1 or higher is used
      *
      * @return the class model used to implement the interface.
      *
-     * @throws IllegalArgumentException if {@link org.jboss.logging.processor.model.MessageInterface#getAnnotatedType()}
-     *                                  returns {@link org.jboss.logging.processor.model.MessageInterface.AnnotatedType#NONE}
+     * @throws IllegalArgumentException if interface is not annotated with {@link MessageBundle @MessageBundle} or {@link MessageLogger @MessageLogger}
      */
-    public static ClassModel implementation(final Filer filer, final MessageInterface messageInterface, final boolean useLogging31) throws IllegalArgumentException {
-        switch (messageInterface.getAnnotatedType()) {
-            case MESSAGE_BUNDLE:
-                return new MessageBundleImplementor(filer, messageInterface);
-            case MESSAGE_LOGGER:
-                return new MessageLoggerImplementor(filer, messageInterface, useLogging31);
+    public static ClassModel implementation(final ProcessingEnvironment processingEnv, final MessageInterface messageInterface, final boolean useLogging31) throws IllegalArgumentException {
+        if (messageInterface.isAnnotatedWith(MessageBundle.class)) {
+            return new MessageBundleImplementor(processingEnv, messageInterface);
+        }
+        if (messageInterface.isAnnotatedWith(MessageLogger.class)) {
+            return new MessageLoggerImplementor(processingEnv, messageInterface, useLogging31);
         }
         throw new IllegalArgumentException(String.format("Message interface %s is not a valid message logger or message bundle.", messageInterface));
     }
@@ -72,24 +73,25 @@ public class ClassModelFactory {
      * <p/>
      * <b>Note:</b> The implementation class must exist before the translation implementations can be created.
      *
-     * @param filer             the filer used to create the source file
+     * @param processingEnv     the processing environment
      * @param messageInterface  the message interface to implement.
      * @param translationSuffix the translation locale suffix.
      * @param translations      a map of the translations for the methods.
      *
      * @return the class model used to create translation implementations of the interface.
      *
-     * @throws IllegalArgumentException if {@link org.jboss.logging.processor.model.MessageInterface#getAnnotatedType()}
-     *                                  returns {@link org.jboss.logging.processor.model.MessageInterface.AnnotatedType#NONE}
+     * @throws IllegalArgumentException if interface is not annotated with {@link MessageBundle @MessageBundle} or {@link MessageLogger @MessageLogger}
      */
-    public static ClassModel translation(final Filer filer, final MessageInterface messageInterface, final String translationSuffix, final Map<MessageMethod, String> translations) throws IllegalArgumentException {
+    public static ClassModel translation(final ProcessingEnvironment processingEnv, final MessageInterface messageInterface, final String translationSuffix, final Map<MessageMethod, String> translations) throws IllegalArgumentException {
         final String generatedClassName = implementationClassName(messageInterface, translationSuffix);
         final String superClassName = getEnclosingTranslationClassName(generatedClassName);
-        switch (messageInterface.getAnnotatedType()) {
-            case MESSAGE_BUNDLE:
-                return new MessageBundleTranslator(filer, messageInterface, generatedClassName, superClassName, translations);
-            case MESSAGE_LOGGER:
-                return new MessageLoggerTranslator(filer, messageInterface, generatedClassName, superClassName, translations);
+        // The locale should be the same as the translationsSuffix minus the leading _
+        final String locale = translationSuffix.substring(1);
+        if (messageInterface.isAnnotatedWith(MessageBundle.class)) {
+            return new MessageBundleTranslator(processingEnv, messageInterface, generatedClassName, superClassName, locale, translations);
+        }
+        if (messageInterface.isAnnotatedWith(MessageLogger.class)) {
+            return new MessageLoggerTranslator(processingEnv, messageInterface, generatedClassName, superClassName, locale, translations);
         }
         throw new IllegalArgumentException(String.format("Message interface %s is not a valid message logger or message bundle.", messageInterface));
     }
diff --git a/processor/src/main/java/org/jboss/logging/processor/generator/model/ClassModelHelper.java b/processor/src/main/java/org/jboss/logging/processor/generator/model/ClassModelHelper.java
index 0994942..758319f 100644
--- a/processor/src/main/java/org/jboss/logging/processor/generator/model/ClassModelHelper.java
+++ b/processor/src/main/java/org/jboss/logging/processor/generator/model/ClassModelHelper.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -25,7 +25,10 @@ package org.jboss.logging.processor.generator.model;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
+import org.jboss.logging.annotations.MessageBundle;
+import org.jboss.logging.annotations.MessageLogger;
 import org.jboss.logging.processor.model.MessageInterface;
+import org.jboss.logging.processor.util.ElementHelper;
 
 /**
  * Utilities for the code model.
@@ -75,15 +78,12 @@ public final class ClassModelHelper {
      */
     public static String implementationClassName(final MessageInterface messageInterface) throws IllegalArgumentException {
         final StringBuilder result = new StringBuilder(messageInterface.simpleName());
-        switch (messageInterface.getAnnotatedType()) {
-            case MESSAGE_BUNDLE:
-                result.append("_$bundle");
-                break;
-            case MESSAGE_LOGGER:
-                result.append("_$logger");
-                break;
-            default:
-                throw new IllegalArgumentException(String.format("Message interface %s is not a message bundle or message logger.", messageInterface));
+        if (messageInterface.isAnnotatedWith(MessageBundle.class)) {
+            result.append("_$bundle");
+        } else if (messageInterface.isAnnotatedWith(MessageLogger.class)) {
+            result.append("_$logger");
+        } else {
+            throw new IllegalArgumentException(String.format("Message interface %s is not a message bundle or message logger.", messageInterface));
         }
         return result.toString();
     }
diff --git a/processor/src/main/java/org/jboss/logging/processor/generator/model/ImplementationClassModel.java b/processor/src/main/java/org/jboss/logging/processor/generator/model/ImplementationClassModel.java
index 33c8d86..faaa766 100644
--- a/processor/src/main/java/org/jboss/logging/processor/generator/model/ImplementationClassModel.java
+++ b/processor/src/main/java/org/jboss/logging/processor/generator/model/ImplementationClassModel.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -27,8 +27,8 @@ import static org.jboss.jdeparser.JExprs.$v;
 import static org.jboss.jdeparser.JMod.FINAL;
 import static org.jboss.jdeparser.JTypes.$t;
 import static org.jboss.logging.processor.generator.model.ClassModelHelper.implementationClassName;
-import static org.jboss.logging.processor.model.Parameter.ParameterType;
 
+import java.text.FieldPosition;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -37,10 +37,18 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import javax.annotation.processing.Filer;
-import javax.lang.model.element.Element;
-import javax.lang.model.type.DeclaredType;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.BiFunction;
+import java.util.function.Supplier;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.type.ArrayType;
+import javax.lang.model.type.TypeKind;
 import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.SimpleAnnotationValueVisitor8;
+import javax.lang.model.util.Types;
 
 import org.jboss.jdeparser.JAssignableExpr;
 import org.jboss.jdeparser.JBlock;
@@ -50,19 +58,28 @@ import org.jboss.jdeparser.JClassDef;
 import org.jboss.jdeparser.JExpr;
 import org.jboss.jdeparser.JExprs;
 import org.jboss.jdeparser.JIf;
+import org.jboss.jdeparser.JLambda;
 import org.jboss.jdeparser.JMethodDef;
 import org.jboss.jdeparser.JMod;
 import org.jboss.jdeparser.JParamDeclaration;
 import org.jboss.jdeparser.JType;
 import org.jboss.jdeparser.JTypes;
 import org.jboss.jdeparser.JVarDeclaration;
+import org.jboss.logging.annotations.Field;
+import org.jboss.logging.annotations.Fields;
 import org.jboss.logging.annotations.Pos;
+import org.jboss.logging.annotations.Producer;
+import org.jboss.logging.annotations.Properties;
+import org.jboss.logging.annotations.Property;
+import org.jboss.logging.annotations.Suppressed;
 import org.jboss.logging.annotations.Transform;
 import org.jboss.logging.annotations.Transform.TransformType;
+import org.jboss.logging.processor.apt.ProcessingException;
 import org.jboss.logging.processor.model.MessageInterface;
 import org.jboss.logging.processor.model.MessageMethod;
 import org.jboss.logging.processor.model.Parameter;
 import org.jboss.logging.processor.model.ThrowableType;
+import org.jboss.logging.processor.util.ElementHelper;
 
 /**
  * An abstract code model to create the source file that implements the
@@ -78,14 +95,18 @@ import org.jboss.logging.processor.model.ThrowableType;
  */
 abstract class ImplementationClassModel extends ClassModel {
 
+    private final AtomicBoolean messageFormatMethodGenerated = new AtomicBoolean(false);
+    private final TypeMirror stringType;
+
     /**
      * Class constructor.
      *
-     * @param filer            the filer used to create the source file
+     * @param processingEnv    the processing environment
      * @param messageInterface the message interface to implement.
      */
-    ImplementationClassModel(final Filer filer, final MessageInterface messageInterface) {
-        super(filer, messageInterface, implementationClassName(messageInterface), null);
+    ImplementationClassModel(final ProcessingEnvironment processingEnv, final MessageInterface messageInterface) {
+        super(processingEnv, messageInterface, implementationClassName(messageInterface), null);
+        stringType = ElementHelper.toType(processingEnv, String.class);
     }
 
     /**
@@ -94,34 +115,39 @@ abstract class ImplementationClassModel extends ClassModel {
      * @param classDef      the class definition
      * @param messageMethod the message method.
      */
-    void createBundleMethod(final JClassDef classDef, final MessageMethod messageMethod) {
+    void createBundleMethod(final JClassDef classDef, final JCall localeGetter, final MessageMethod messageMethod) {
         // Add the message messageMethod.
         addMessageMethod(messageMethod);
-        final JType returnType = $t(messageMethod.returnType().name());
-        sourceFile._import(returnType);
+        final TypeMirror returnTypeMirror = messageMethod.returnType().asType();
+        final JType returnType = JTypes.typeOf(returnTypeMirror);
         final JMethodDef method = classDef.method(JMod.PUBLIC | FINAL, returnType, messageMethod.name());
         method.annotate(Override.class);
         addThrownTypes(messageMethod, method);
+        addMethodTypeParameters(method, returnTypeMirror);
+
+        // If this a declared type we should import it
+        if (returnTypeMirror.getKind() == TypeKind.DECLARED) {
+            sourceFile._import(returnType);
+        }
+
         // Create the body of the method and add the text
         final JBlock body = method.body();
         final MessageMethod.Message message = messageMethod.message();
         final JCall formatterCall;
-        final boolean noFormatParameters = messageMethod.parameters(ParameterType.FORMAT).isEmpty();
 
         switch (message.format()) {
             case MESSAGE_FORMAT: {
-                if (noFormatParameters) {
-                    formatterCall = JExprs.call(messageMethod.messageMethodName());
-                } else {
-                    final JType formatter = $t(MessageFormat.class);
-                    formatterCall = formatter.call("format");
+                if (messageMethod.formatParameterCount() > 0) {
+                    formatterCall = getFormatMethod(classDef, localeGetter);
                     formatterCall.arg(JExprs.call(messageMethod.messageMethodName()));
+                } else {
+                    formatterCall = JExprs.call(messageMethod.messageMethodName());
                 }
                 break;
             }
             case PRINTF: {
                 final JType formatter = $t(String.class);
-                formatterCall = formatter.call("format").arg(JExprs.call(messageMethod.messageMethodName()));
+                formatterCall = formatter.call("format").arg(localeGetter).arg(JExprs.call(messageMethod.messageMethodName()));
                 break;
             }
             default:
@@ -131,7 +157,7 @@ abstract class ImplementationClassModel extends ClassModel {
 
         // Create maps for the fields and properties. Key is the field or setter method, value is the parameter to set
         // the value to.
-        final Set<Parameter> allParameters = messageMethod.parameters(ParameterType.ANY);
+        final Set<Parameter> allParameters = messageMethod.parameters();
         final Map<String, JParamDeclaration> fields = new LinkedHashMap<>();
         final Map<String, JParamDeclaration> properties = new LinkedHashMap<>();
 
@@ -145,27 +171,9 @@ abstract class ImplementationClassModel extends ClassModel {
         for (Parameter param : allParameters) {
             final JParamDeclaration var = addMethodParameter(method, param);
             final String formatterClass = param.formatterClass();
-            switch (param.parameterType()) {
-                case FORMAT: {
-                    if (formatterCall == null) {
-                        // This should never happen, but let's safe guard against it
-                        throw new IllegalStateException("No format parameters are allowed when NO_FORMAT is specified.");
-                    } else {
-                        if (formatterClass == null) {
-                            if (param.isArray() || param.isVarArgs()) {
-                                final JType arrays = $t(Arrays.class);
-                                sourceFile._import(arrays);
-                                args.add(arrays.call("toString").arg($v(var)));
-                            } else {
-                                args.add($v(var));
-                            }
-                        } else {
-                            args.add($t(formatterClass)._new().arg($v(var)));
-                        }
-                    }
-                    break;
-                }
-                case TRANSFORM: {
+            if (param.isFormatParameter()) {
+                boolean added = false;
+                if (param.isAnnotatedWith(Transform.class)) {
                     if (formatterCall == null) {
                         // This should never happen, but let's safe guard against it
                         throw new IllegalStateException("No format parameters are allowed when NO_FORMAT is specified.");
@@ -177,14 +185,14 @@ abstract class ImplementationClassModel extends ClassModel {
                             args.add($t(formatterClass)._new().arg(transformVar));
                         }
                     }
-                    break;
+                    added = true;
                 }
-                case POS: {
+                if (param.isAnnotatedWith(Pos.class)) {
                     if (formatterCall == null) {
                         // This should never happen, but let's safe guard against it
                         throw new IllegalStateException("No format parameters are allowed when NO_FORMAT is specified.");
                     } else {
-                        final Pos pos = param.pos();
+                        final Pos pos = param.getAnnotation(Pos.class);
                         final int[] positions = pos.value();
                         final Transform[] transform = pos.transform();
                         for (int i = 0; i < positions.length; i++) {
@@ -205,41 +213,64 @@ abstract class ImplementationClassModel extends ClassModel {
                             }
                         }
                     }
-                    break;
+                    added = true;
                 }
-                case FIELD: {
-                    fields.put(param.targetName(), var);
-                    break;
-                }
-                case PROPERTY: {
-                    properties.put(param.targetName(), var);
-                    break;
+                if (!added) {
+                    if (formatterCall == null) {
+                        // This should never happen, but let's safe guard against it
+                        throw new ProcessingException(messageMethod, "No format parameters are allowed when NO_FORMAT is specified.");
+                    } else {
+                        if (formatterClass == null) {
+                            if (param.isArray() || param.isVarArgs()) {
+                                final JType arrays = $t(Arrays.class);
+                                sourceFile._import(arrays);
+                                args.add(arrays.call("toString").arg($v(var)));
+                            } else {
+                                args.add($v(var));
+                            }
+                        } else {
+                            args.add($t(formatterClass)._new().arg($v(var)));
+                        }
+                    }
                 }
             }
+            if (param.isAnnotatedWith(Field.class)) {
+                fields.put(param.targetName(), var);
+            }
+            if (param.isAnnotatedWith(Property.class)) {
+                properties.put(param.targetName(), var);
+            }
         }
         // If a format method, add the arguments
         for (JExpr arg : args) {
             formatterCall.arg(arg);
         }
+        final boolean isSupplier = messageMethod.returnType().isSubtypeOf(Supplier.class);
         // Setup the return type
         final JExpr result;
         if (messageMethod.returnType().isThrowable()) {
-            result = $v(createReturnType(messageMethod, body, formatterCall));
+            if (isSupplier) {
+                final JLambda lambda = JExprs.lambda();
+                final JBlock lambdaBody = lambda.body();
+                lambdaBody._return(createReturnType(messageMethod, lambdaBody, formatterCall, fields, properties));
+                result = lambda;
+            } else {
+                result = createReturnType(messageMethod, body, formatterCall, fields, properties);
+            }
         } else {
-            result = formatterCall;
-        }
-        // Set the fields and properties of the return type
-        for (Map.Entry<String, JParamDeclaration> entry : fields.entrySet()) {
-            body.assign(result.field(entry.getKey()), $v(entry.getValue()));
-        }
-        for (Map.Entry<String, JParamDeclaration> entry : properties.entrySet()) {
-            body.add(result.call(entry.getKey()).arg($v(entry.getValue())));
+            if (isSupplier) {
+                final JLambda lambda = JExprs.lambda();
+                lambda.body()._return(formatterCall);
+                result = lambda;
+            } else {
+                result = formatterCall;
+            }
         }
         body._return(result);
     }
 
     JAssignableExpr createTransformVar(final List<String> parameterNames, final JBlock methodBody, final Parameter param, final JExpr var) {
-        return createTransformVar(parameterNames, methodBody, param, param.transform(), var);
+        return createTransformVar(parameterNames, methodBody, param, param.getAnnotation(Transform.class), var);
     }
 
     JAssignableExpr createTransformVar(final List<String> parameterNames, final JBlock methodBody, final Parameter param, final Transform transform, final JExpr var) {
@@ -333,55 +364,140 @@ abstract class ImplementationClassModel extends ClassModel {
         return result;
     }
 
-    private JVarDeclaration createReturnType(final MessageMethod messageMethod, final JBlock body, final JCall format) {
+    private void addMethodTypeParameters(final JMethodDef method, final TypeMirror type) {
+        final Types types = processingEnv.getTypeUtils();
+        if (type.getKind() == TypeKind.TYPEVAR) {
+            // Determine the extended type
+            final TypeMirror resolved = types.erasure(type);
+            final JType resolvedType = JTypes.typeOf(resolved);
+            sourceFile._import(resolvedType);
+            method.typeParam(type.toString())._extends(resolvedType);
+        } else if (type.getKind() == TypeKind.DECLARED) {
+            final List<? extends TypeMirror> typeArgs = ElementHelper.getTypeArguments(type);
+            for (TypeMirror typeArg : typeArgs) {
+                addMethodTypeParameters(method, typeArg);
+            }
+        }
+    }
+
+    private JExpr createReturnType(final MessageMethod messageMethod, final JBlock body, final JCall format, final Map<String, JParamDeclaration> fields, final Map<String, JParamDeclaration> properties) {
         boolean callInitCause = false;
-        final ThrowableType returnType = messageMethod.returnType().throwableReturnType();
-        final JType type = $t(returnType.name());
-        // Import once more as the throwable return type may be different than the actual return type
-        sourceFile._import(type);
-        final JCall result = type._new();
-        final JVarDeclaration resultField = body.var(FINAL, type, "result", result);
-        if (returnType.useConstructionParameters()) {
-            for (Parameter param : returnType.constructionParameters()) {
-                switch (param.parameterType()) {
-                    case MESSAGE:
+        final Set<Parameter> producers = messageMethod.parametersAnnotatedWith(Producer.class);
+        final JType type;
+        final JVarDeclaration resultField;
+
+        // If there are no producers we need to construct a new return type
+        if (producers.isEmpty()) {
+            final ThrowableType returnType = messageMethod.returnType().throwableReturnType();
+            type = JTypes.typeOf(returnType.asType());
+            // Import once more as the throwable return type may be different than the actual return type
+            sourceFile._import(type);
+            final JCall result = type._new();
+            resultField = body.var(FINAL, type, "result", result);
+            if (returnType.useConstructionParameters()) {
+                for (Parameter param : returnType.constructionParameters()) {
+                    if (param.isMessageMethod()) {
                         result.arg(format);
-                        break;
-                    default:
+                    } else {
                         result.arg($v(param.name()));
-                        break;
-
+                    }
                 }
-            }
-        } else if (returnType.hasStringAndThrowableConstructor() && messageMethod.hasCause()) {
-            result.arg(format).arg($v(messageMethod.cause().name()));
-        } else if (returnType.hasThrowableAndStringConstructor() && messageMethod.hasCause()) {
-            result.arg($v(messageMethod.cause().name())).arg(format);
-        } else if (returnType.hasStringConstructor()) {
-            result.arg(format);
-            if (messageMethod.hasCause()) {
+                callInitCause = messageMethod.hasCause() && !returnType.causeSetInConstructor();
+            } else if (returnType.hasStringAndThrowableConstructor() && messageMethod.hasCause()) {
+                result.arg(format).arg($v(messageMethod.cause().name()));
+            } else if (returnType.hasThrowableAndStringConstructor() && messageMethod.hasCause()) {
+                result.arg($v(messageMethod.cause().name())).arg(format);
+            } else if (returnType.hasStringConstructor()) {
+                result.arg(format);
+                if (messageMethod.hasCause()) {
+                    callInitCause = true;
+                }
+            } else if (returnType.hasThrowableConstructor() && messageMethod.hasCause()) {
+                result.arg($v(messageMethod.cause().name()));
+            } else if (returnType.hasStringAndThrowableConstructor() && !messageMethod.hasCause()) {
+                result.arg(format).arg(NULL);
+            } else if (returnType.hasThrowableAndStringConstructor() && !messageMethod.hasCause()) {
+                result.arg(NULL).arg(format);
+            } else if (messageMethod.hasCause()) {
                 callInitCause = true;
             }
-        } else if (returnType.hasThrowableConstructor() && messageMethod.hasCause()) {
-            result.arg($v(messageMethod.cause().name()));
-        } else if (returnType.hasStringAndThrowableConstructor() && !messageMethod.hasCause()) {
-            result.arg(format).arg(NULL);
-        } else if (returnType.hasThrowableAndStringConstructor() && !messageMethod.hasCause()) {
-            result.arg(NULL).arg(format);
-        } else if (messageMethod.hasCause()) {
-            callInitCause = true;
+        } else {
+            final TypeMirror returnType = messageMethod.returnType().resolvedType();
+            // Should only be one producer
+            final Parameter producer = producers.iterator().next();
+            type = JTypes.typeOf(returnType);
+            JCall result = $v(producer.name()).call("apply");
+
+            // For a BiFunction we pass both the cause, even if null, and the message
+            if (producer.isSubtypeOf(BiFunction.class)) {
+                // Get the type arguments of the BiFunction to determine the order to pass parameters
+                final List<? extends TypeMirror> typeArguments = ElementHelper.getTypeArguments(producer);
+                // If we don't have any type arguments assume String, Throwable
+                if (typeArguments.isEmpty()) {
+                    result = result.arg(format);
+                    result = result.arg($v(messageMethod.cause().name()));
+                } else {
+                    // Just get the first type argument an decide the order based on it
+                    final TypeMirror typeArg = typeArguments.get(0);
+                    if (processingEnv.getTypeUtils().isAssignable(typeArg, stringType)) {
+                        result = result.arg(format);
+                        if (messageMethod.hasCause()) {
+                            result = result.arg($v(messageMethod.cause().name()));
+                        } else {
+                            result = result.arg(JExpr.NULL);
+                        }
+                    } else {
+                        if (messageMethod.hasCause()) {
+                            result = result.arg($v(messageMethod.cause().name()));
+                        } else {
+                            result = result.arg(JExpr.NULL);
+                        }
+                        result = result.arg(format);
+                    }
+                }
+            } else { // Assume this must be a Function
+                // Pass the message as the argument to the function
+                result = result.arg(format);
+                callInitCause = messageMethod.hasCause();
+            }
+            resultField = body.var(FINAL, type, "result", result);
         }
         // Assign the result field the result value
         if (callInitCause) {
             body.add($v(resultField).call("initCause").arg($v(messageMethod.cause().name())));
         }
 
+        // Get the @Property or @Properties annotation values
+        addDefultProperties(messageMethod, ElementHelper.getAnnotations(messageMethod, Properties.class, Property.class), body, $v(resultField), false);
+        addDefultProperties(messageMethod, ElementHelper.getAnnotations(messageMethod, Fields.class, Field.class), body, $v(resultField), true);
+
         // Remove this caller from the stack trace
         final JType arrays = $t(Arrays.class);
         sourceFile._import(arrays);
         final JVarDeclaration st = body.var(FINAL, $t(StackTraceElement.class).array(), "st", $v(resultField).call("getStackTrace"));
         body.add($v(resultField).call("setStackTrace").arg(arrays.call("copyOfRange").arg($v(st)).arg(JExpr.ONE).arg($v(st).field("length"))));
-        return resultField;
+
+        // Add any suppressed messages
+        final Set<Parameter> suppressed = messageMethod.parametersAnnotatedWith(Suppressed.class);
+        for (Parameter p : suppressed) {
+            if (p.isArray() || p.isVarArgs()) {
+                final String name = String.format("$%sVar", p.name());
+                // TODO (jrp) the " " can be removed after an upgrade to JDeparser2; this is a workaround for a formatting bug
+                body.forEach(0, JTypes.typeOf(((ArrayType) p.asType()).getComponentType()), " " + name, $v(p.name()))
+                        .block(Braces.REQUIRED)
+                        .add($v(resultField).call("addSuppressed").arg($v(name)));
+            } else if (p.isAssignableFrom(Collection.class)) {
+                final String name = String.format("$%sVar", p.name());
+                body.add($v(p.name()).call("forEach").arg(JExprs.lambda().param(name).body($v(resultField).call("addSuppressed").arg($v(name)))));
+            } else {
+                body.add($v(resultField).call("addSuppressed").arg($v(p.name())));
+            }
+        }
+        // Add the possible fields and properties to be set on the returned exception
+        final JExpr resultExpr = $v(resultField);
+        fields.forEach((key, value) -> body.assign(resultExpr.field(key), $v(value)));
+        properties.forEach((key, value) -> body.add(resultExpr.call(key).arg($v(value))));
+        return resultExpr;
     }
 
     protected final void addThrownTypes(final MessageMethod messageMethod, final JMethodDef jMethod) {
@@ -399,27 +515,153 @@ abstract class ImplementationClassModel extends ClassModel {
      * @return the reference to the parameter on the method
      */
     protected JParamDeclaration addMethodParameter(final JMethodDef method, final Parameter param) {
-        final JParamDeclaration var;
-        JType paramType = $t(param.type());
+        final JType paramType = JTypes.typeOf(param.asType());
         if (!param.isPrimitive()) {
             sourceFile._import(paramType);
         }
         if (param.isVarArgs()) {
-            var = method.varargParam(FINAL, paramType, param.name());
-        } else if (param.isArray()) {
-            var = method.param(JMod.FINAL, paramType.array(), param.name());
-        } else {
-            final TypeMirror t = ((Element) param.reference()).asType();
-            if (t instanceof DeclaredType) {
-                final Collection<? extends TypeMirror> genericTypes = ((DeclaredType) t).getTypeArguments();
-                for (TypeMirror tm : genericTypes) {
-                    final JType gt = JTypes.typeOf(tm);
-                    sourceFile._import(gt);
-                    paramType = paramType.typeArg(gt);
+            return method.varargParam(FINAL, paramType.elementType(), param.name());
+        }
+        return method.param(FINAL, paramType, param.name());
+    }
+
+    private void addDefultProperties(final MessageMethod messageMethod, final Collection<AnnotationMirror> annotations, final JBlock body, final JAssignableExpr resultField, final boolean field) {
+        for (AnnotationMirror propertyAnnotation : annotations) {
+            String name = null;
+            AnnotationValue annotationValue = null;
+            for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry : propertyAnnotation.getElementValues().entrySet()) {
+                final ExecutableElement attribute = entry.getKey();
+                final AnnotationValue attributeValue = entry.getValue();
+                if ("name".contentEquals(attribute.getSimpleName())) {
+                    name = String.valueOf(attributeValue.getValue());
+                } else {
+                    annotationValue = attributeValue;
                 }
             }
-            var = method.param(FINAL, paramType, param.name());
+            if (name == null) {
+                throw new ProcessingException(messageMethod, propertyAnnotation, "The name attribute is required for the annotation.");
+            }
+            if (annotationValue == null || annotationValue.getValue() == null) {
+                throw new ProcessingException(messageMethod, propertyAnnotation, "A value for one of the default attributes is required.");
+            }
+            final JExpr resultValue = annotationValue.accept(JExprAnnotationValueVisitor.INSTANCE, null);
+            if (resultValue == null) {
+                final Object value = annotationValue.getValue();
+                throw new ProcessingException(messageMethod, propertyAnnotation, annotationValue, "Could not resolve value type for %s (%s)", value, value.getClass());
+            }
+            if (field) {
+                body.add(resultField.field(name).assign(resultValue));
+            } else {
+                body.add(resultField.call("set" + Character.toUpperCase(name.charAt(0)) + name.substring(1)).arg(resultValue));
+            }
+        }
+    }
+
+    /**
+     * Creates a method for formatting {@link MessageFormat} messages. The method should look something like:
+     * <pre>
+     *     <code>
+     *
+     * private String _formatMessage(final String format, final Object... args) {
+     *     final java.text.MessageFormat formatter = new java.text.MessageFormat(format, getLoggingLocale());
+     *     return formatter.format(args, new StringBuffer(), new java.text.FieldPosition(0)).toString();
+     * }
+     *     </code>
+     * </pre>
+     * <p>
+     * This can be invoked multiple times resulting in only a single method being created in the source.
+     * </p>
+     *
+     * @param classDef     the class to add the method to
+     * @param localeGetter the getter for the locale
+     *
+     * @return a method call representation of the {@code _formatMessage(String, Object...)} method
+     */
+    private JCall getFormatMethod(final JClassDef classDef, final JCall localeGetter) {
+        final String methodName = "_formatMessage";
+        // Create the method if it does not exist yet
+        if (messageFormatMethodGenerated.compareAndSet(false, true)) {
+            // Create the method
+            final JMethodDef method = classDef.method(JMod.PRIVATE, String.class, methodName);
+            final JParamDeclaration format = method.param(JMod.FINAL, String.class, "format");
+            final JParamDeclaration args = method.varargParam(JMod.FINAL, Object.class, "args");
+
+            // Generate the body of the method
+            final JBlock body = method.body();
+            final JType formatterType = $t(MessageFormat.class);
+            final JCall initializer = formatterType._new()
+                    .arg($v(format))
+                    .arg(localeGetter);
+            final JVarDeclaration formatter = body.var(JMod.FINAL, formatterType, "formatter", initializer);
+            // Invoke the formatter and return the toString() value of the StringBuffer result
+            body._return(
+                    $v(formatter)
+                            .call("format")
+                            .arg($v(args))
+                            .arg($t(StringBuffer.class)._new())
+                            .arg($t(FieldPosition.class)._new()
+                                    .arg(JExpr.ZERO)
+                            )
+                            .call("toString")
+            );
+        }
+
+        return JExprs.call(methodName);
+    }
+
+    private static class JExprAnnotationValueVisitor extends SimpleAnnotationValueVisitor8<JExpr, Void> {
+        private static final JExprAnnotationValueVisitor INSTANCE = new JExprAnnotationValueVisitor();
+
+        @Override
+        public JExpr visitBoolean(final boolean b, final Void v) {
+            return b ? JExpr.TRUE : JExpr.FALSE;
+        }
+
+        @Override
+        public JExpr visitByte(final byte b, final Void v) {
+            return JExprs.decimal(b).cast(JType.BYTE);
+        }
+
+        @Override
+        public JExpr visitChar(final char c, final Void v) {
+            return JExprs.ch(c);
+        }
+
+        @Override
+        public JExpr visitDouble(final double d, final Void v) {
+            // TODO (jrp) this is fixed in upstream JDeparser, but for now we need to use this
+            // setterValue = JExprs.hex(d);
+            return JExprs.$v(String.format("%ad", d));
+        }
+
+        @Override
+        public JExpr visitFloat(final float f, final Void v) {
+            return JExprs.hex(f);
+        }
+
+        @Override
+        public JExpr visitInt(final int i, final Void v) {
+            return JExprs.decimal(i);
+        }
+
+        @Override
+        public JExpr visitLong(final long i, final Void v) {
+            return JExprs.decimal(i);
+        }
+
+        @Override
+        public JExpr visitShort(final short s, final Void v) {
+            return JExprs.decimal((int) s).cast(JType.SHORT);
+        }
+
+        @Override
+        public JExpr visitString(final String s, final Void v) {
+            return JExprs.str(s);
+        }
+
+        @Override
+        public JExpr visitType(final TypeMirror t, final Void v) {
+            return JExprs.$v(t.toString() + ".class");
         }
-        return var;
     }
 }
diff --git a/processor/src/main/java/org/jboss/logging/processor/generator/model/MessageBundleImplementor.java b/processor/src/main/java/org/jboss/logging/processor/generator/model/MessageBundleImplementor.java
index 6d4a963..6c9c351 100644
--- a/processor/src/main/java/org/jboss/logging/processor/generator/model/MessageBundleImplementor.java
+++ b/processor/src/main/java/org/jboss/logging/processor/generator/model/MessageBundleImplementor.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -24,13 +24,16 @@ package org.jboss.logging.processor.generator.model;
 
 import java.util.LinkedHashSet;
 import java.util.Set;
-import javax.annotation.processing.Filer;
+import javax.annotation.processing.ProcessingEnvironment;
 
+import org.jboss.jdeparser.JCall;
 import org.jboss.jdeparser.JClassDef;
 import org.jboss.jdeparser.JMod;
+import org.jboss.logging.annotations.MessageBundle;
+import org.jboss.logging.annotations.MessageLogger;
 import org.jboss.logging.processor.model.MessageInterface;
-import org.jboss.logging.processor.model.MessageInterface.AnnotatedType;
 import org.jboss.logging.processor.model.MessageMethod;
+import org.jboss.logging.processor.util.ElementHelper;
 
 /**
  * Used to generate a message bundle implementation.
@@ -46,11 +49,11 @@ class MessageBundleImplementor extends ImplementationClassModel {
     /**
      * Creates a new message bundle code model.
      *
-     * @param filer            the filer used to create the source file
+     * @param processingEnv    the processing environment
      * @param messageInterface the message interface to implement.
      */
-    public MessageBundleImplementor(final Filer filer, final MessageInterface messageInterface) {
-        super(filer, messageInterface);
+    public MessageBundleImplementor(final ProcessingEnvironment processingEnv, final MessageInterface messageInterface) {
+        super(processingEnv, messageInterface);
     }
 
     @Override
@@ -59,19 +62,18 @@ class MessageBundleImplementor extends ImplementationClassModel {
         // Add default constructor
         classDef.constructor(JMod.PROTECTED);
         createReadResolveMethod();
-        final Set<MessageMethod> messageMethods = new LinkedHashSet<MessageMethod>();
+        final JCall localeGetter = createLocaleGetter(null, false);
+        final Set<MessageMethod> messageMethods = new LinkedHashSet<>();
         messageMethods.addAll(messageInterface().methods());
         for (MessageInterface messageInterface : messageInterface().extendedInterfaces()) {
-            // Handle logger interface
-            if (messageInterface.getAnnotatedType() == AnnotatedType.NONE) {
-                continue;
+            if (messageInterface.isAnnotatedWith(MessageBundle.class) || messageInterface.isAnnotatedWith(MessageLogger.class)) {
+                messageMethods.addAll(messageInterface.methods());
             }
-            messageMethods.addAll(messageInterface.methods());
         }
         // Process the method descriptors and add to the model before
         // writing.
         for (MessageMethod messageMethod : messageMethods) {
-            createBundleMethod(classDef, messageMethod);
+            createBundleMethod(classDef, localeGetter, messageMethod);
         }
         return classDef;
     }
diff --git a/processor/src/main/java/org/jboss/logging/processor/generator/model/MessageBundleTranslator.java b/processor/src/main/java/org/jboss/logging/processor/generator/model/MessageBundleTranslator.java
index d70b7c2..6462d20 100644
--- a/processor/src/main/java/org/jboss/logging/processor/generator/model/MessageBundleTranslator.java
+++ b/processor/src/main/java/org/jboss/logging/processor/generator/model/MessageBundleTranslator.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -26,7 +26,7 @@ import java.util.Collections;
 import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
-import javax.annotation.processing.Filer;
+import javax.annotation.processing.ProcessingEnvironment;
 
 import org.jboss.jdeparser.JClassDef;
 import org.jboss.jdeparser.JMethodDef;
@@ -45,19 +45,21 @@ class MessageBundleTranslator extends ClassModel {
      * The translation map.
      */
     private final Map<MessageMethod, String> translations;
+    private final String locale;
 
     /**
      * Create a MessageBundle with super class and interface.
      *
-     * @param filer            the filer used to create the source file
+     * @param processingEnv    the processing environment
      * @param messageInterface the message interface to implement.
      * @param className        the implementation class name.
      * @param superClassName   the super class name
+     * @param locale           the locale used to override the default locale
      * @param translations     the translation map.
      */
-    public MessageBundleTranslator(final Filer filer, final MessageInterface messageInterface, final String className, final String superClassName, final Map<MessageMethod, String> translations) {
-        super(filer, messageInterface, className, superClassName);
-
+    public MessageBundleTranslator(final ProcessingEnvironment processingEnv, final MessageInterface messageInterface, final String className, final String superClassName, final String locale, final Map<MessageMethod, String> translations) {
+        super(processingEnv, messageInterface, className, superClassName);
+        this.locale = locale;
         if (translations != null) {
             this.translations = translations;
         } else {
@@ -75,6 +77,9 @@ class MessageBundleTranslator extends ClassModel {
         JMethodDef readResolve = createReadResolveMethod();
         readResolve.annotate(Override.class);
 
+        // Override the locale getter
+        createLocaleGetter(locale, true);
+
         final Set<Map.Entry<MessageMethod, String>> entries = translations.entrySet();
         final Set<JMethodDef> methodNames = new LinkedHashSet<>();
         for (Map.Entry<MessageMethod, String> entry : entries) {
diff --git a/processor/src/main/java/org/jboss/logging/processor/generator/model/MessageLoggerImplementor.java b/processor/src/main/java/org/jboss/logging/processor/generator/model/MessageLoggerImplementor.java
index 4702a8f..5556ef6 100644
--- a/processor/src/main/java/org/jboss/logging/processor/generator/model/MessageLoggerImplementor.java
+++ b/processor/src/main/java/org/jboss/logging/processor/generator/model/MessageLoggerImplementor.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -26,7 +26,6 @@ import static org.jboss.jdeparser.JExpr.NULL;
 import static org.jboss.jdeparser.JExpr.THIS;
 import static org.jboss.jdeparser.JExprs.$v;
 import static org.jboss.jdeparser.JTypes.$t;
-import static org.jboss.logging.processor.model.Parameter.ParameterType;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -38,7 +37,7 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
-import javax.annotation.processing.Filer;
+import javax.annotation.processing.ProcessingEnvironment;
 
 import org.jboss.jdeparser.JAssignableExpr;
 import org.jboss.jdeparser.JBlock;
@@ -54,13 +53,14 @@ import org.jboss.jdeparser.JType;
 import org.jboss.jdeparser.JVarDeclaration;
 import org.jboss.logging.DelegatingBasicLogger;
 import org.jboss.logging.Logger;
-import org.jboss.logging.Logger.Level;
+import org.jboss.logging.annotations.LoggingClass;
 import org.jboss.logging.annotations.Message.Format;
+import org.jboss.logging.annotations.MessageBundle;
+import org.jboss.logging.annotations.MessageLogger;
 import org.jboss.logging.annotations.Once;
 import org.jboss.logging.annotations.Pos;
 import org.jboss.logging.annotations.Transform;
 import org.jboss.logging.processor.model.MessageInterface;
-import org.jboss.logging.processor.model.MessageInterface.AnnotatedType;
 import org.jboss.logging.processor.model.MessageMethod;
 import org.jboss.logging.processor.model.Parameter;
 import org.jboss.logging.processor.util.ElementHelper;
@@ -85,12 +85,12 @@ final class MessageLoggerImplementor extends ImplementationClassModel {
     /**
      * Creates a new message logger code model.
      *
-     * @param filer            the filer used to create the source file
+     * @param processingEnv    the processing environment
      * @param messageInterface the message interface to implement.
      * @param useLogging31     {@code true} to use logging 3.1, {@code false} to remain compatible with 3.0
      */
-    public MessageLoggerImplementor(final Filer filer, final MessageInterface messageInterface, final boolean useLogging31) {
-        super(filer, messageInterface);
+    public MessageLoggerImplementor(final ProcessingEnvironment processingEnv, final MessageInterface messageInterface, final boolean useLogging31) {
+        super(processingEnv, messageInterface);
         this.useLogging31 = useLogging31;
     }
 
@@ -120,7 +120,6 @@ final class MessageLoggerImplementor extends ImplementationClassModel {
         final JType loggerType = $t(Logger.class);
         // Import the logger type and the level type
         sourceFile._import(loggerType);
-        sourceFile._import(Logger.Level.class);
         final JParamDeclaration constructorParam = constructor.param(JMod.FINAL, loggerType, LOG_FIELD_NAME);
         final JBlock constructorBody = constructor.body();
         final JAssignableExpr logger;
@@ -131,9 +130,14 @@ final class MessageLoggerImplementor extends ImplementationClassModel {
                 constructorBody.callSuper().arg($v(constructorParam));
                 logger = $v("super").field("log");
             } else {
+                sourceFile._import(Logger.Level.class);
                 JVarDeclaration logVar = classDef.field(JMod.PROTECTED | JMod.FINAL, loggerType, LOG_FIELD_NAME);
                 constructorBody.assign(THIS.field(logVar.name()), $v(constructorParam));
                 logger = $v(logVar);
+                // Add static imports for all the log levels
+                for (Logger.Level level : Logger.Level.values()) {
+                    sourceFile.importStatic(Logger.Level.class, level.name());
+                }
                 generateDelegatingLoggerMethods(classDef, logger, fqcn);
             }
         } else {
@@ -141,16 +145,15 @@ final class MessageLoggerImplementor extends ImplementationClassModel {
             constructorBody.assign(THIS.field(logVar.name()), $v(constructorParam));
             logger = $v(logVar);
         }
+        final JCall localeGetter = createLocaleGetter(null, false);
 
         // Process the method descriptors and add to the model before writing.
-        final Set<MessageMethod> messageMethods = new LinkedHashSet<MessageMethod>();
+        final Set<MessageMethod> messageMethods = new LinkedHashSet<>();
         messageMethods.addAll(messageInterface().methods());
         for (MessageInterface messageInterface : messageInterface().extendedInterfaces()) {
-            // Handle logger interface
-            if (messageInterface.getAnnotatedType() == AnnotatedType.NONE) {
-                continue;
+            if (messageInterface.isAnnotatedWith(MessageBundle.class) || messageInterface.isAnnotatedWith(MessageLogger.class)) {
+                messageMethods.addAll(messageInterface.methods());
             }
-            messageMethods.addAll(messageInterface.methods());
         }
         for (MessageMethod messageMethod : messageMethods) {
 
@@ -158,7 +161,7 @@ final class MessageLoggerImplementor extends ImplementationClassModel {
             if (messageMethod.isLoggerMethod()) {
                 createLoggerMethod(messageMethod, classDef, logger);
             } else {
-                createBundleMethod(classDef, messageMethod);
+                createBundleMethod(classDef, localeGetter, messageMethod);
             }
         }
         return classDef;
@@ -243,7 +246,7 @@ final class MessageLoggerImplementor extends ImplementationClassModel {
                     xxx1x.body().add(
                             logVar.call(target)
                                     .arg($v(fqcn))
-                                    .arg(logLevelClass.$v(level))
+                                    .arg($v(level))
                                     .arg(renderThr ? $v(thr) : NULL)
                                     .arg($v(xxx1xFormat))
                                     .arg($v(xxx1xParams))
@@ -261,7 +264,7 @@ final class MessageLoggerImplementor extends ImplementationClassModel {
                         }
                         final JCall xxx2xCaller = logVar.call(target);
                         xxx2xCaller.arg($v(fqcn))
-                                .arg(logLevelClass.$v(level))
+                                .arg($v(level))
                                 .arg(renderThr ? $v(thr) : NULL)
                                 .arg($v(xxx2xFormat));
                         for (int j = 0; j < i; j++) {
@@ -419,7 +422,7 @@ final class MessageLoggerImplementor extends ImplementationClassModel {
 
         // Check for the @Once annotation
         final JBlock body;
-        if (ElementHelper.isAnnotatedWith(messageMethod.reference(), Once.class) && messageMethod.isLoggerMethod()) {
+        if (messageMethod.isAnnotatedWith(Once.class) && messageMethod.isLoggerMethod()) {
             final JType atomicBoolean = $t(AtomicBoolean.class);
             sourceFile._import(atomicBoolean);
             // The variable will be shared with overloaded methods
@@ -433,9 +436,9 @@ final class MessageLoggerImplementor extends ImplementationClassModel {
             }
             body = method.body()._if(
                     logger.call("isEnabled").arg($v(messageMethod.logLevel())).and(
-                    $v(var).call("compareAndSet").arg(JExpr.FALSE).arg(JExpr.TRUE)))
+                            $v(var).call("compareAndSet").arg(JExpr.FALSE).arg(JExpr.TRUE)))
                     .block(Braces.REQUIRED);
-        } else if (!messageMethod.parameters(ParameterType.TRANSFORM).isEmpty()) {
+        } else if (!messageMethod.parametersAnnotatedWith(Transform.class).isEmpty()) {
             body = method.body()._if(logger.call("isEnabled").arg($v(messageMethod.logLevel()))).block(Braces.REQUIRED);
         } else {
             body = method.body();
@@ -443,12 +446,16 @@ final class MessageLoggerImplementor extends ImplementationClassModel {
 
         // Determine which logger method to invoke
         final JCall logCaller = logger.call(messageMethod.loggerMethod());
-        if (messageMethod.parameters(ParameterType.FQCN).isEmpty()) {
+        final Set<Parameter> fqcnParameters = messageMethod.parametersAnnotatedWith(LoggingClass.class);
+        if (fqcnParameters.isEmpty()) {
             logCaller.arg($v(FQCN_FIELD_NAME));
         } else {
-            logCaller.arg($v(params.get(messageMethod.parameters(ParameterType.FQCN).iterator().next())).call("getName"));
+            logCaller.arg($v(params.get(fqcnParameters.iterator().next())).call("getName"));
         }
-        logCaller.arg($v(messageMethod.logLevel()));
+        // Use static imports for the levels
+        final String levelName = messageMethod.logLevel();
+        sourceFile.importStatic(Logger.Level.class, levelName);
+        logCaller.arg($v(levelName));
 
 
         final MessageMethod.Message message = messageMethod.message();
@@ -479,28 +486,20 @@ final class MessageLoggerImplementor extends ImplementationClassModel {
                 final Parameter param = entry.getKey();
                 final String formatterClass = param.formatterClass();
                 final JParamDeclaration var = entry.getValue();
-                switch (param.parameterType()) {
-                    case FORMAT:
-                        if (formatterClass == null) {
-                            if (param.isArray() || param.isVarArgs()) {
-                                args.add($t(Arrays.class).call("toString").arg($v(var)));
-                            } else {
-                                args.add($v(var));
-                            }
-                        } else {
-                            args.add($t(formatterClass)._new().arg($v(var)));
-                        }
-                        break;
-                    case TRANSFORM:
+
+                boolean added = false;
+                if (param.isFormatParameter()) {
+                    if (param.isAnnotatedWith(Transform.class)) {
                         final JAssignableExpr transformVar = createTransformVar(parameterNames, body, param, $v(var));
                         if (formatterClass == null) {
                             args.add(transformVar);
                         } else {
                             args.add($t(formatterClass)._new().arg(transformVar));
                         }
-                        break;
-                    case POS:
-                        final Pos pos = param.pos();
+                        added = true;
+                    }
+                    if (param.isAnnotatedWith(Pos.class)) {
+                        final Pos pos = param.getAnnotation(Pos.class);
                         final int[] positions = pos.value();
                         final Transform[] transform = pos.transform();
                         for (int i = 0; i < positions.length; i++) {
@@ -520,7 +519,20 @@ final class MessageLoggerImplementor extends ImplementationClassModel {
                                 }
                             }
                         }
-                        break;
+                        added = true;
+                    }
+
+                    if (!added) {
+                        if (formatterClass == null) {
+                            if (param.isArray() || param.isVarArgs()) {
+                                args.add($t(Arrays.class).call("toString").arg($v(var)));
+                            } else {
+                                args.add($v(var));
+                            }
+                        } else {
+                            args.add($t(formatterClass)._new().arg($v(var)));
+                        }
+                    }
                 }
             }
             for (JExpr arg : args) {
@@ -533,7 +545,7 @@ final class MessageLoggerImplementor extends ImplementationClassModel {
     private Map<Parameter, JParamDeclaration> createParameters(final MessageMethod messageMethod, final JMethodDef method) {
         final Map<Parameter, JParamDeclaration> result = new LinkedHashMap<>();
         // Create the parameters
-        for (Parameter param : messageMethod.parameters(ParameterType.ANY)) {
+        for (Parameter param : messageMethod.parameters()) {
             final JParamDeclaration var = addMethodParameter(method, param);
             result.put(param, var);
         }
diff --git a/processor/src/main/java/org/jboss/logging/processor/generator/model/MessageLoggerTranslator.java b/processor/src/main/java/org/jboss/logging/processor/generator/model/MessageLoggerTranslator.java
index 4412f99..c83d942 100644
--- a/processor/src/main/java/org/jboss/logging/processor/generator/model/MessageLoggerTranslator.java
+++ b/processor/src/main/java/org/jboss/logging/processor/generator/model/MessageLoggerTranslator.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -29,7 +29,7 @@ import java.util.Collections;
 import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
-import javax.annotation.processing.Filer;
+import javax.annotation.processing.ProcessingEnvironment;
 
 import org.jboss.jdeparser.JBlock;
 import org.jboss.jdeparser.JClassDef;
@@ -56,19 +56,21 @@ class MessageLoggerTranslator extends ClassModel {
      * The translation map.
      */
     private final Map<MessageMethod, String> translations;
+    private final String locale;
 
     /**
      * Create a MessageLogger with super class and interface.
      *
-     * @param filer            the filer used to create the source file
+     * @param processingEnv    the processing environment
      * @param messageInterface the message interface to implement.
      * @param className        the implementation class name.
      * @param superClassName   the super class name
+     * @param locale           the locale used to override the default locale
      * @param translations     the translation map.
      */
-    public MessageLoggerTranslator(final Filer filer, final MessageInterface messageInterface, final String className, final String superClassName, final Map<MessageMethod, String> translations) {
-        super(filer, messageInterface, className, superClassName);
-
+    public MessageLoggerTranslator(final ProcessingEnvironment processingEnv, final MessageInterface messageInterface, final String className, final String superClassName, final String locale, final Map<MessageMethod, String> translations) {
+        super(processingEnv, messageInterface, className, superClassName);
+        this.locale = locale;
         if (translations != null) {
             this.translations = translations;
         } else {
@@ -86,6 +88,9 @@ class MessageLoggerTranslator extends ClassModel {
         JBlock constructorBody = constructor.body();
         constructorBody.callSuper().arg($v(LOGGER_PARAMETER_NAME));
 
+        // Override the locale getter
+        createLocaleGetter(locale, true);
+
         final Set<Map.Entry<MessageMethod, String>> entries = this.translations.entrySet();
         final Set<JMethodDef> methodNames = new LinkedHashSet<>();
         for (Map.Entry<MessageMethod, String> entry : entries) {
diff --git a/processor/src/main/java/org/jboss/logging/processor/model/MessageObjectType.java b/processor/src/main/java/org/jboss/logging/processor/model/ClassType.java
similarity index 88%
rename from processor/src/main/java/org/jboss/logging/processor/model/MessageObjectType.java
rename to processor/src/main/java/org/jboss/logging/processor/model/ClassType.java
index a675585..0d89bc3 100644
--- a/processor/src/main/java/org/jboss/logging/processor/model/MessageObjectType.java
+++ b/processor/src/main/java/org/jboss/logging/processor/model/ClassType.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -22,21 +22,14 @@
 
 package org.jboss.logging.processor.model;
 
+import javax.lang.model.AnnotatedConstruct;
+
 /**
  * Date: 23.08.2011
  *
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
-public interface MessageObjectType extends MessageObject {
-
-    /**
-     * Returns the qualified type name of the object.
-     * <p/>
-     * Equivalent to {@code Object.class.getName()}
-     *
-     * @return the qualified class name.
-     */
-    String type();
+public interface ClassType extends AnnotatedConstruct {
 
     /**
      * Determines if this type is either the same as, or is a supertype of, the class represented by the {@code type}
diff --git a/processor/src/main/java/org/jboss/logging/processor/model/DelegatingElement.java b/processor/src/main/java/org/jboss/logging/processor/model/DelegatingElement.java
new file mode 100644
index 0000000..f002f9e
--- /dev/null
+++ b/processor/src/main/java/org/jboss/logging/processor/model/DelegatingElement.java
@@ -0,0 +1,111 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2016, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging.processor.model;
+
+import java.lang.annotation.Annotation;
+import java.util.List;
+import java.util.Set;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ElementVisitor;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.Name;
+import javax.lang.model.type.TypeMirror;
+
+/**
+ * A delegating {@link Element} interface. All methods are invoked on the {@linkplain #getDelegate() delegate element}
+ * by default.
+ *
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+public interface DelegatingElement extends Element {
+
+    /**
+     * The element to delegate the default methods to.
+     *
+     * @return the delegate
+     */
+    Element getDelegate();
+
+    @Override
+    default TypeMirror asType() {
+        return getDelegate().asType();
+    }
+
+    @Override
+    default ElementKind getKind() {
+        return getDelegate().getKind();
+    }
+
+    @Override
+    default Set<Modifier> getModifiers() {
+        return getDelegate().getModifiers();
+    }
+
+    @Override
+    default Name getSimpleName() {
+        return getDelegate().getSimpleName();
+    }
+
+    @Override
+    default Element getEnclosingElement() {
+        return getDelegate().getEnclosingElement();
+    }
+
+    @Override
+    default List<? extends Element> getEnclosedElements() {
+        return getDelegate().getEnclosedElements();
+    }
+
+    @Override
+    default <A extends Annotation> A getAnnotation(final Class<A> annotationType) {
+        return getDelegate().getAnnotation(annotationType);
+    }
+
+    @Override
+    default List<? extends AnnotationMirror> getAnnotationMirrors() {
+        return getDelegate().getAnnotationMirrors();
+    }
+
+    @Override
+    default <R, P> R accept(final ElementVisitor<R, P> v, final P p) {
+        return getDelegate().accept(v, p);
+    }
+
+    @Override
+    default <A extends Annotation> A[] getAnnotationsByType(final Class<A> annotationType) {
+        return getDelegate().getAnnotationsByType(annotationType);
+    }
+
+    /**
+     * Checks whether or not the annotation is present on the element.
+     *
+     * @param annotation the annotation to check for
+     *
+     * @return {@code true} if the annotation is present, otherwise {@code false}
+     */
+    default boolean isAnnotatedWith(Class<? extends Annotation> annotation) {
+        return getAnnotation(annotation) != null;
+    }
+}
diff --git a/processor/src/main/java/org/jboss/logging/processor/model/DelegatingExecutableElement.java b/processor/src/main/java/org/jboss/logging/processor/model/DelegatingExecutableElement.java
new file mode 100644
index 0000000..eaec775
--- /dev/null
+++ b/processor/src/main/java/org/jboss/logging/processor/model/DelegatingExecutableElement.java
@@ -0,0 +1,88 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2016, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging.processor.model;
+
+import java.util.List;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.TypeParameterElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.TypeMirror;
+
+/**
+ * A delegating {@link ExecutableElement} interface. All methods are invoked on the {@linkplain #getDelegate() delegate element}
+ * by default.
+ *
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+public interface DelegatingExecutableElement extends ExecutableElement, DelegatingElement {
+
+    @Override
+    ExecutableElement getDelegate();
+
+    @Override
+    default List<? extends TypeParameterElement> getTypeParameters() {
+        return getDelegate().getTypeParameters();
+    }
+
+    @Override
+    default TypeMirror getReturnType() {
+        return getDelegate().getReturnType();
+    }
+
+    @Override
+    default List<? extends VariableElement> getParameters() {
+        return getDelegate().getParameters();
+    }
+
+    @Override
+    default TypeMirror getReceiverType() {
+        return getDelegate().getReceiverType();
+    }
+
+    @Override
+    default boolean isVarArgs() {
+        return getDelegate().isVarArgs();
+    }
+
+    @Override
+    default boolean isDefault() {
+        return getDelegate().isDefault();
+    }
+
+    @Override
+    default List<? extends TypeMirror> getThrownTypes() {
+        return getDelegate().getThrownTypes();
+    }
+
+    @Override
+    default AnnotationValue getDefaultValue() {
+        return getDelegate().getDefaultValue();
+    }
+
+    @Override
+    default Name getSimpleName() {
+        return getDelegate().getSimpleName();
+    }
+}
diff --git a/processor/src/main/java/org/jboss/logging/processor/model/DelegatingTypeElement.java b/processor/src/main/java/org/jboss/logging/processor/model/DelegatingTypeElement.java
new file mode 100644
index 0000000..2d83a0a
--- /dev/null
+++ b/processor/src/main/java/org/jboss/logging/processor/model/DelegatingTypeElement.java
@@ -0,0 +1,83 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2016, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging.processor.model;
+
+import java.util.List;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.NestingKind;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.TypeParameterElement;
+import javax.lang.model.type.TypeMirror;
+
+/**
+ * A delegating {@link TypeElement} interface. All methods are invoked on the {@linkplain #getDelegate() delegate element}
+ * by default.
+ *
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+public interface DelegatingTypeElement extends TypeElement, DelegatingElement {
+
+    @Override
+    TypeElement getDelegate();
+
+    @Override
+    default List<? extends Element> getEnclosedElements() {
+        return getDelegate().getEnclosedElements();
+    }
+
+    @Override
+    default NestingKind getNestingKind() {
+        return getDelegate().getNestingKind();
+    }
+
+    @Override
+    default Name getQualifiedName() {
+        return getDelegate().getQualifiedName();
+    }
+
+    @Override
+    default Name getSimpleName() {
+        return getDelegate().getSimpleName();
+    }
+
+    @Override
+    default TypeMirror getSuperclass() {
+        return getDelegate().getSuperclass();
+    }
+
+    @Override
+    default List<? extends TypeMirror> getInterfaces() {
+        return getDelegate().getInterfaces();
+    }
+
+    @Override
+    default List<? extends TypeParameterElement> getTypeParameters() {
+        return getDelegate().getTypeParameters();
+    }
+
+    @Override
+    default Element getEnclosingElement() {
+        return getDelegate().getEnclosingElement();
+    }
+}
diff --git a/processor/src/main/java/org/jboss/logging/processor/model/JavaDocComment.java b/processor/src/main/java/org/jboss/logging/processor/model/JavaDocComment.java
index 58cbe9a..9b5623b 100644
--- a/processor/src/main/java/org/jboss/logging/processor/model/JavaDocComment.java
+++ b/processor/src/main/java/org/jboss/logging/processor/model/JavaDocComment.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
diff --git a/processor/src/main/java/org/jboss/logging/processor/model/MessageInterface.java b/processor/src/main/java/org/jboss/logging/processor/model/MessageInterface.java
index ea9ec0c..eeaf48f 100644
--- a/processor/src/main/java/org/jboss/logging/processor/model/MessageInterface.java
+++ b/processor/src/main/java/org/jboss/logging/processor/model/MessageInterface.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -24,8 +24,12 @@ package org.jboss.logging.processor.model;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Properties;
 import java.util.Set;
+import javax.lang.model.element.TypeElement;
 
+import org.jboss.logging.annotations.MessageBundle;
+import org.jboss.logging.annotations.MessageLogger;
 import org.jboss.logging.annotations.ValidIdRange;
 
 /**
@@ -33,22 +37,7 @@ import org.jboss.logging.annotations.ValidIdRange;
  *
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
-public interface MessageInterface extends Comparable<MessageInterface>, MessageObject, MessageObjectType, JavaDocComment {
-
-    public enum AnnotatedType {
-        /**
-         * Indicates the interface is annotated with {@code @MessageBundle}
-         */
-        MESSAGE_BUNDLE,
-        /**
-         * Indicates the interface is annotated with {@code @MessageLogger}
-         */
-        MESSAGE_LOGGER,
-        /**
-         * Indicates the interface is not annotated with {@code MessageBundle} or {@code @MessageLogger}
-         */
-        NONE,
-    }
+public interface MessageInterface extends Comparable<MessageInterface>, ClassType, JavaDocComment, DelegatingTypeElement {
 
     /**
      * Checks the interface to see if the {@link org.jboss.logging.BasicLogger logger interface} is being extended in
@@ -73,10 +62,11 @@ public interface MessageInterface extends Comparable<MessageInterface>, MessageO
     Collection<MessageMethod> methods();
 
     /**
-     * The project code for the message interface or {@code null} if {@link #getAnnotatedType()} returns {@link
-     * AnnotatedType#NONE}.
+     * The project code for the message interface or {@code null} if not annotated with
+     * {@link MessageBundle @MessageBundle} or {@link MessageLogger @MessageLogger}.
      *
-     * @return the project code or {@code null} if {@link #getAnnotatedType()} returns {@link AnnotatedType#NONE}
+     * @return the project code or {@code null} if not annotated with
+     * {@link MessageBundle @MessageBundle} or {@link MessageLogger @MessageLogger}
      */
     String projectCode();
 
@@ -85,7 +75,6 @@ public interface MessageInterface extends Comparable<MessageInterface>, MessageO
      *
      * @return the qualified name.
      */
-    @Override
     String name();
 
     /**
@@ -111,13 +100,6 @@ public interface MessageInterface extends Comparable<MessageInterface>, MessageO
     String loggingFQCN();
 
     /**
-     * Returns the annotation type on the interface.
-     *
-     * @return the annotated type
-     */
-    AnnotatedType getAnnotatedType();
-
-    /**
      * Returns a list of {@link ValidIdRange valid id ranges}.
      *
      * @return a list of valid id ranges or an empty list
@@ -130,4 +112,23 @@ public interface MessageInterface extends Comparable<MessageInterface>, MessageO
      * @return the length to pad the id with
      */
     int getIdLength();
+
+    /**
+     * Returns the type to use for the {@code @Generated} annotation. This may return {@code null} of the implementation
+     * should not be annotated.
+     *
+     * @return the type for the generated annotation or {@code null} if no annotation is wanted
+     */
+    default TypeElement generatedAnnotation() {
+        return null;
+    }
+
+    /**
+     * The properties used to resolve expressions.
+     *
+     * @return the properties used to resolve expressions
+     */
+    default Properties expressionProperties() {
+        return new Properties();
+    }
 }
diff --git a/processor/src/main/java/org/jboss/logging/processor/model/MessageMethod.java b/processor/src/main/java/org/jboss/logging/processor/model/MessageMethod.java
index cbd1fc0..83a73c0 100644
--- a/processor/src/main/java/org/jboss/logging/processor/model/MessageMethod.java
+++ b/processor/src/main/java/org/jboss/logging/processor/model/MessageMethod.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -22,46 +22,40 @@
 
 package org.jboss.logging.processor.model;
 
+import java.lang.annotation.Annotation;
 import java.util.Set;
 
-import javax.lang.model.element.ExecutableElement;
-
 import org.jboss.logging.annotations.Message.Format;
-import org.jboss.logging.processor.model.Parameter.ParameterType;
 
 /**
  * Date: 29.07.2011
  *
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
-public interface MessageMethod extends Comparable<MessageMethod>, MessageObject, JavaDocComment {
+public interface MessageMethod extends Comparable<MessageMethod>, JavaDocComment, DelegatingExecutableElement {
 
     /**
      * Returns the method name.
      *
      * @return the method name.
      */
-    @Override
     String name();
 
     /**
-     * Returns an unmodifiable collection of the parameters specified by the parameter type or an empty set.
-     *
-     * @param parameterType the parameter type to look-up the parameters for.
+     * Returns the parameters for the method.
      *
-     * @return a collection of the parameters or an empty set.
+     * @return the parameters for the method
      */
-    Set<Parameter> parameters(ParameterType parameterType);
+    Set<Parameter> parameters();
 
     /**
      * Returns an unmodifiable collection of the parameters specified by the parameter type or an empty set.
      *
-     * @param parameterType  the parameter type to look-up the parameters for.
-     * @param parameterTypes an array of types to look-up parameters for.
+     * @param annotation the annotation to get the parameters for
      *
      * @return a collection of the parameters or an empty set.
      */
-    Set<Parameter> parameters(ParameterType parameterType, ParameterType... parameterTypes);
+    Set<Parameter> parametersAnnotatedWith(Class<? extends Annotation> annotation);
 
     /**
      * Returns the return type for the method.
@@ -144,7 +138,7 @@ public interface MessageMethod extends Comparable<MessageMethod>, MessageObject,
      * Returns the log level parameter associated with the method only if {@link #isLoggerMethod()} returns
      * {@code true}.
      *
-     * @return the log level annotation
+     * @return the enum name of the {@linkplain org.jboss.logging.Logger.Level log level}
      */
     String logLevel();
 
@@ -162,13 +156,10 @@ public interface MessageMethod extends Comparable<MessageMethod>, MessageObject,
      */
     boolean isLoggerMethod();
 
-    @Override
-    ExecutableElement reference();
-
     /**
      * Represents a {@link org.jboss.logging.annotations.Message} annotation on a method.
      */
-    public interface Message {
+    interface Message {
 
         /**
          * The message id for the message to use. Any id less than 0 will be ignored.
diff --git a/processor/src/main/java/org/jboss/logging/processor/model/MessageObject.java b/processor/src/main/java/org/jboss/logging/processor/model/MessageObject.java
deleted file mode 100644
index 7d84b9c..0000000
--- a/processor/src/main/java/org/jboss/logging/processor/model/MessageObject.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.jboss.logging.processor.model;
-
-/**
- * A generic interface for returning basic information about parts of a message bundle or message logger interface.
- *
- * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
- */
-public interface MessageObject {
-
-    /**
-     * Returns a name for the object.
-     * <p/>
-     * For an interface or class this will return the qualified class name. For a method this will return the name of
-     * the method. For a parameter the name of the parameter will be returned.
-     *
-     * @return the name of the object.
-     */
-    String name();
-
-    /**
-     * The object used to extract information for the message logger or message bundle, if applicable. The reference is
-     * not used for the implementation and is provided for convenience.
-     * <p/>
-     * For example, in an annotation processor implementation a {@link javax.lang.model.element.ExecutableElement}
-     * might be returned.
-     *
-     * @return the reference object used to extract information.
-     */
-    Object reference();
-}
diff --git a/processor/src/main/java/org/jboss/logging/processor/model/Parameter.java b/processor/src/main/java/org/jboss/logging/processor/model/Parameter.java
index c1c6950..d748536 100644
--- a/processor/src/main/java/org/jboss/logging/processor/model/Parameter.java
+++ b/processor/src/main/java/org/jboss/logging/processor/model/Parameter.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -22,82 +22,16 @@
 
 package org.jboss.logging.processor.model;
 
-import org.jboss.logging.annotations.Pos;
-import org.jboss.logging.annotations.Transform;
-
 /**
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a> - 20.Feb.2011
  */
-public interface Parameter extends Comparable<Parameter>, MessageObjectType {
-
-    /**
-     * The types of parameters.
-     */
-    public enum ParameterType {
-        /**
-         * Indicates the parameter can be any other type. All parameters fall under this category.
-         */
-        ANY,
-        /**
-         * Indicates the parameter is a cause parameter and needs to be set in the {@link Throwable throwable} return
-         * type.
-         */
-        CAUSE,
-        /**
-         * Indicates the parameter should be used as a format parameter.
-         */
-        FORMAT,
-        /**
-         * Indicates the parameter should be used as the fully qualified class name for the logger.
-         */
-        FQCN,
-        /**
-         * Indicates the parameter is the message.
-         */
-        MESSAGE,
-        /**
-         * Indicates the parameter should be used in the construction of a {@link Throwable throwable} return type.
-         */
-        CONSTRUCTION,
-        /**
-         * Indicates the parameter is a instance field that should be set in the {@link Throwable throwable} return
-         * type.
-         */
-        FIELD,
-        /**
-         * Indicates the parameter is a property and should be set via its setter in the {@link Throwable throwable}
-         * return type.
-         */
-        PROPERTY,
-
-        /**
-         * Transforms the parameter using the {@link org.jboss.logging.annotations.Transform.TransformType transform
-         * type}.
-         */
-        TRANSFORM,
-
-        /**
-         * Indicates the parameter is a positional parameter.
-         */
-        POS,
-    }
-
-    /**
-     * The full type name of the parameter. For example
-     * {@code java.lang.String} if the parameter is a string. If the
-     * parameter is a primitive, the primitive name is returned.
-     *
-     * @return the qualified type of the parameter.
-     */
-    @Override
-    String type();
+public interface Parameter extends Comparable<Parameter>, ClassType, DelegatingElement {
 
     /**
      * The variable name of the parameter.
      *
      * @return the variable name of the parameter.
      */
-    @Override
     String name();
 
     /**
@@ -122,58 +56,37 @@ public interface Parameter extends Comparable<Parameter>, MessageObjectType {
     boolean isVarArgs();
 
     /**
-     * Returns the {@link ParameterType parameter type} of the parameter.
+     * Indicates whether or not the parameter is used a format parameter for the message.
      *
-     * @return the parameter type of the parameter.
+     * @return {@code true} if this parameter that should used as a format parameter for the message
      */
-    ParameterType parameterType();
+    default boolean isFormatParameter() {
+        return true;
+    }
 
     /**
-     * The formatter class, or {@code null} if there is none.
+     * Indicates whether or not this parameter represents the message method.
      *
-     * @return the formatter class
+     * @return {@code true} if this is the message method parameter
      */
-    String formatterClass();
+    default boolean isMessageMethod() {
+        return false;
+    }
 
     /**
-     * Returns the class if the parameter is annotated with {@link org.jboss.logging.annotations.Param}.
-     * If the annotation is not present, {@code null} is returned.
+     * The formatter class, or {@code null} if there is none.
      *
-     * @return the parameter class or {@code null}.
+     * @return the formatter class
      */
-    Class<?> paramClass();
+    String formatterClass();
 
     /**
-     * Returns the name of the target field or method. For example if the {@link #parameterType()} returns
-     * {@link ParameterType#FIELD}, the target name is the name of the field to set on the
+     * Returns the name of the target field or method. For example if the parameter is annotated with
+     * {@link org.jboss.logging.annotations.Field @Field} the target name is the name of the field to set on the
      * {@link org.jboss.logging.processor.model.ReturnType return type}. If no target name is defined an empty String
-     * is
-     * returned.
+     * is returned.
      *
      * @return the target field name, method name or an empty string.
      */
     String targetName();
-
-    /**
-     * The transform type if this the {@link #parameterType()} is {@link ParameterType#TRANSFORM}.
-     *
-     * @return the transform annotation or {@code null} if not a transform parameter
-     */
-    Transform transform();
-
-    /**
-     * The position annotation if this the {@link #parameterType()} is {@link ParameterType#POS}.
-     * <p/>
-     * This works the same way the {@link java.util.Formatter formatter} positional characters work.
-     * <p/>
-     * <pre>
-     *      String.format("Numeric value %1$d (%1$x)");
-     *
-     *      @Message(""Numeric value %d (%x)"")
-     *      void logNumericValue(@Pos(1) int value);
-     * </pre>
-     *
-     * @return the position annotation or {@code null} if not a position parameter
-     */
-    Pos pos();
 }
diff --git a/processor/src/main/java/org/jboss/logging/processor/model/ReturnType.java b/processor/src/main/java/org/jboss/logging/processor/model/ReturnType.java
index 64e23be..ca052c6 100644
--- a/processor/src/main/java/org/jboss/logging/processor/model/ReturnType.java
+++ b/processor/src/main/java/org/jboss/logging/processor/model/ReturnType.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -22,62 +22,34 @@
 
 package org.jboss.logging.processor.model;
 
-import static org.jboss.logging.processor.util.Objects.HashCodeBuilder;
-import static org.jboss.logging.processor.util.Objects.ToStringBuilder;
-import static org.jboss.logging.processor.util.Objects.areEqual;
+import java.util.List;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.TypeMirror;
+
+import org.jboss.logging.processor.util.ElementHelper;
 
 /**
  * Date: 29.07.2011
  *
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
-public interface ReturnType extends MessageObject, MessageObjectType {
-
-    public static final ReturnType VOID = new VoidReturnType();
-
-    /**
-     * Checks to see if the return type has a field with the name with the same name and type as the
-     * {@link Parameter parameter}.
-     *
-     * @param parameter the parameter to check.
-     *
-     * @return {@code true} if the field exists, is accessible,  mutable and is assignable from the type otherwise
-     *         {@code false}.
-     */
-    boolean hasFieldFor(final Parameter parameter);
+public interface ReturnType extends ClassType, DelegatingElement {
 
     /**
-     * Checks to see if the return type has a method with the name with the same name and parameter type as the
-     * {@link Parameter parameter}.
-     *
-     * @param parameter the parameter to check.
+     * Checks to see if the return type is an exception, extends Throwable or the value of a
+     * {@link java.util.function.Supplier} is a Throwable type.
      *
-     * @return {@code true} if the method exists, is accessible and its parameter is assignable from the type, otherwise
-     *         {@code false}.
-     */
-    boolean hasMethodFor(final Parameter parameter);
-
-    /**
-     * Checks to see if the return type is an exception, extends Throwable.
+     * @return {@code true} if the return type is an exception, otherwise {@code false}.
      *
-     * @return {@code true} if the return type is an exception, otherwise
-     *         {@code false}.
+     * @see #resolvedType()
      */
     boolean isThrowable();
 
     /**
-     * Indicates whether or not the return type is a primitive.
-     *
-     * @return {@code true} if a primitive, otherwise {@code false}.
-     */
-    boolean isPrimitive();
-
-    /**
      * Returns the qualified class name of the return type.
      *
      * @return the qualified class name fo the return type.
      */
-    @Override
     String name();
 
     /**
@@ -89,88 +61,22 @@ public interface ReturnType extends MessageObject, MessageObjectType {
     ThrowableType throwableReturnType();
 
     /**
-     * Default type if the return type is void.
+     * Checks this {@linkplain #asType() type} to see if there are any
+     * {@linkplain DeclaredType#getTypeArguments() type arguments}. If any type arguments are found the first type is
+     * returned and assumed to be the resolved type. Otherwise this {@linkplain #asType() type} is returned.
+     * <p>
+     * This is useful for the {@link java.util.function.Supplier Supplier} return type.
+     * </p>
+     *
+     * @return the resolved return type
      */
-    final static class VoidReturnType implements ReturnType {
-
-        private VoidReturnType() {
-        }
-
-        @Override
-        public boolean hasFieldFor(final Parameter parameter) {
-            return false;
-        }
-
-        @Override
-        public boolean hasMethodFor(final Parameter parameter) {
-            return false;
-        }
-
-        @Override
-        public boolean isThrowable() {
-            return false;
-        }
-
-        @Override
-        public boolean isPrimitive() {
-            return false;
-        }
-
-        @Override
-        public String name() {
-            return "void";
-        }
-
-        @Override
-        public ThrowableType throwableReturnType() {
-            return null;
-        }
-
-        @Override
-        public int hashCode() {
-            return HashCodeBuilder.builder().add(name()).toHashCode();
-        }
-
-        @Override
-        public boolean equals(final Object obj) {
-            if (obj == this) {
-                return true;
-            }
-            if (!(obj instanceof VoidReturnType)) {
-                return false;
-            }
-            final VoidReturnType other = (VoidReturnType) obj;
-            return areEqual(this.name(), other.name());
-        }
-
-        @Override
-        public String toString() {
-            return ToStringBuilder.of(this).add(name()).toString();
-        }
-
-        @Override
-        public Class<Void> reference() {
-            return Void.TYPE;
-        }
-
-        @Override
-        public String type() {
-            return "void";
-        }
-
-        @Override
-        public boolean isAssignableFrom(final Class<?> type) {
-            return type.equals(Void.TYPE);
-        }
-
-        @Override
-        public boolean isSubtypeOf(final Class<?> type) {
-            return false;
-        }
-
-        @Override
-        public boolean isSameAs(final Class<?> type) {
-            return type.equals(Void.TYPE);
+    default TypeMirror resolvedType() {
+        final TypeMirror type = asType();
+        final List<? extends TypeMirror> typeArgs = ElementHelper.getTypeArguments(type);
+        if (typeArgs.isEmpty()) {
+            return type;
         }
+        // Assume the first type only
+        return typeArgs.get(0);
     }
 }
diff --git a/processor/src/main/java/org/jboss/logging/processor/model/ThrowableType.java b/processor/src/main/java/org/jboss/logging/processor/model/ThrowableType.java
index 97c4ca5..fe72ee7 100644
--- a/processor/src/main/java/org/jboss/logging/processor/model/ThrowableType.java
+++ b/processor/src/main/java/org/jboss/logging/processor/model/ThrowableType.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -29,7 +29,7 @@ import java.util.Set;
  *
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
-public interface ThrowableType extends MessageObject, MessageObjectType, Comparable<ThrowableType> {
+public interface ThrowableType extends ClassType, Comparable<ThrowableType>, DelegatingElement {
 
     /**
      * Checks to see the throwable has a default constructor.
@@ -78,6 +78,16 @@ public interface ThrowableType extends MessageObject, MessageObjectType, Compara
     boolean useConstructionParameters();
 
     /**
+     * Indicates whether or not the {@linkplain org.jboss.logging.annotations.Cause cause} was set in the constructor.
+     *
+     * @return {@code true} if the cause was set in the constructor, {@code false} if the
+     * {@link Throwable#initCause(Throwable)} should be executed
+     */
+    default boolean causeSetInConstructor() {
+        return false;
+    }
+
+    /**
      * The parameters needed to construct the throwable, if not using the default constructor. If the default
      * constructor should be used an empty set should be returned.
      * <p/>
@@ -100,6 +110,5 @@ public interface ThrowableType extends MessageObject, MessageObjectType, Compara
      *
      * @return the qualified class name fo the return type.
      */
-    @Override
     String name();
 }
diff --git a/processor/src/main/java/org/jboss/logging/processor/util/Comparison.java b/processor/src/main/java/org/jboss/logging/processor/util/Comparison.java
index 9f337c9..81b4b14 100644
--- a/processor/src/main/java/org/jboss/logging/processor/util/Comparison.java
+++ b/processor/src/main/java/org/jboss/logging/processor/util/Comparison.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
diff --git a/processor/src/main/java/org/jboss/logging/processor/util/ElementHelper.java b/processor/src/main/java/org/jboss/logging/processor/util/ElementHelper.java
index c40f424..def94a5 100644
--- a/processor/src/main/java/org/jboss/logging/processor/util/ElementHelper.java
+++ b/processor/src/main/java/org/jboss/logging/processor/util/ElementHelper.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -28,21 +28,19 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.AnnotatedConstruct;
 import javax.lang.model.element.AnnotationMirror;
 import javax.lang.model.element.AnnotationValue;
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ExecutableElement;
-import javax.lang.model.element.Name;
 import javax.lang.model.element.TypeElement;
 import javax.lang.model.element.VariableElement;
 import javax.lang.model.type.DeclaredType;
-
-import org.jboss.logging.annotations.Cause;
-import org.jboss.logging.annotations.Field;
-import org.jboss.logging.annotations.Message;
-import org.jboss.logging.annotations.Param;
-import org.jboss.logging.annotations.Property;
-import org.jboss.logging.processor.model.MessageObject;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.ElementFilter;
+import javax.lang.model.util.Elements;
+import javax.lang.model.util.Types;
 
 /**
  * An utility class to work with element.
@@ -59,211 +57,49 @@ public final class ElementHelper {
     }
 
     /**
-     * Check if an element is annotated with the given annotation.
-     *
-     * @param element the element to look for the annotation on.
-     * @param clazz   the annotation class
-     *
-     * @return {@code true} if the element is annotated, otherwise {@code false}
-     *
-     * @throws IllegalArgumentException if element parameter is null
-     */
-    public static boolean isAnnotatedWith(final Element element, final Class<? extends Annotation> clazz) {
-        if (element == null) {
-            throw new IllegalArgumentException("The element parameter is null");
-        }
-
-        Annotation annotation = element.getAnnotation(clazz);
-        return (annotation != null);
-    }
-
-    /**
-     * Returns the primary class simple name prefix for an element
-     * who represents a MessageBundle or MessageLogger interface.
-     *
-     * @param element the element
-     *
-     * @return the translation file name prefix
-     *
-     * @throws IllegalArgumentException if element is null or the element is not an interface
-     */
-    public static String getPrimaryClassNamePrefix(final TypeElement element) {
-        if (element == null) {
-            throw new IllegalArgumentException("The element parameter cannot be null");
-        }
-        if (!element.getKind().isInterface()) {
-            throw new IllegalArgumentException("The element parameter is not an interface");
-        }
-
-        String translationFileName = element.getSimpleName().toString();
-
-        //Check if it's an inner interface
-        Element enclosingElt = element.getEnclosingElement();
-        while (enclosingElt != null && enclosingElt instanceof TypeElement) {
-            translationFileName = String.format("%s$%s", enclosingElt.getSimpleName().toString(), translationFileName);
-            enclosingElt = enclosingElt.getEnclosingElement();
-        }
-
-        return translationFileName;
-    }
-
-
-    /**
-     * Returns a collection of methods with the same name.
+     * Returns the type arguments for the element. If the elements {@linkplain Element#asType() type} is not a
+     * {@link DeclaredType} or the element does not have any type arguments an empty list is returned.
      *
-     * @param methods    the methods to process.
-     * @param methodName the method name to find.
+     * @param element the element to get the type arguments for
      *
-     * @return a collection of methods with the same name.
+     * @return the type arguments or an empty list
      */
-    public static Collection<ExecutableElement> findByName(final Collection<ExecutableElement> methods, final Name methodName) {
-        final List<ExecutableElement> result = new ArrayList<ExecutableElement>();
-        for (ExecutableElement method : methods) {
-            if (methodName.equals(method.getSimpleName())) {
-                result.add(method);
-            }
-        }
-        return result;
+    public static List<? extends TypeMirror> getTypeArguments(final Element element) {
+        return getTypeArguments(element.asType());
     }
 
-
     /**
-     * Returns a collection of methods with the same name.
+     * Returns the type arguments for the type. If the type is not a {@link DeclaredType} or the type does not have any
+     * type arguments an empty list is returned.
      *
-     * @param methods    the methods to process.
-     * @param methodName the method name to find.
-     * @param paramCount the number of parameters the method must have.
+     * @param type the type to get the type arguments for
      *
-     * @return a collection of methods with the same name.
+     * @return the type arguments or an empty list
      */
-    public static Collection<ExecutableElement> findByName(final Collection<ExecutableElement> methods, final Name methodName, final int paramCount) {
-        final List<ExecutableElement> result = new ArrayList<ExecutableElement>();
-        for (ExecutableElement method : methods) {
-            if (methodName.equals(method.getSimpleName()) && parameterCount(method.getParameters()) == paramCount) {
-                result.add(method);
-            }
+    public static List<? extends TypeMirror> getTypeArguments(final TypeMirror type) {
+        if (type instanceof DeclaredType) {
+            return ((DeclaredType) type).getTypeArguments();
         }
-        return result;
-    }
-
-    /**
-     * Checks to see if there is a cause parameter.
-     *
-     * @param params the parameters to check.
-     *
-     * @return {@code true} if there is a cause, otherwise {@code false}.
-     */
-    public static boolean hasCause(final Collection<? extends VariableElement> params) {
-        // Look for cause
-        for (VariableElement param : params) {
-            if (isAnnotatedWith(param, Cause.class)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Returns the number of parameters excluding the {@link org.jboss.logging.annotations.Cause} parameter
-     * and any {@link org.jboss.logging.annotations.Param} parameters if found.
-     *
-     * @param params the parameters to get the count for.
-     *
-     * @return the number of parameters.
-     */
-    public static int parameterCount(final Collection<? extends VariableElement> params) {
-        int result = params.size();
-        for (VariableElement param : params) {
-            if (isAnnotatedWith(param, Param.class) || isAnnotatedWith(param, Field.class) ||
-                    isAnnotatedWith(param, Property.class)) {
-                --result;
-            }
-        }
-        return (result - (hasCause(params) ? 1 : 0));
+        return Collections.emptyList();
     }
 
     /**
-     * Checks to see if the method has or inherits a {@link org.jboss.logging.annotations.Message}
-     * annotation.
-     *
-     * @param methods the method to search.
-     * @param method  the method to check.
+     * Check if an element is annotated with the given annotation.
      *
-     * @return {@code true} if the method has or inherits a message annotation, otherwise {@code false}.
-     */
-    public static boolean inheritsMessage(final Collection<ExecutableElement> methods, final ExecutableElement method) {
-        if (isAnnotatedWith(method, Message.class)) {
-            return false;
-        }
-        final Collection<ExecutableElement> allMethods = findByName(methods, method.getSimpleName());
-        for (ExecutableElement m : allMethods) {
-            if (isAnnotatedWith(m, Message.class)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Checks to see if the method is overloaded. An overloaded method has a different parameter count based on the
-     * format parameters only. Parameters annotated with {@link org.jboss.logging.annotations.Cause} or
-     * {@link org.jboss.logging.annotations.Param}
-     * are not counted.
+     * @param annotatedConstruct the object to look for the annotation on.
+     * @param clazz              the annotation class
      *
-     * @param methods the method to search.
-     * @param method  the method to check.
+     * @return {@code true} if the element is annotated, otherwise {@code false}
      *
-     * @return {@code true} if the method is overloaded, otherwise {@code false}.
+     * @throws IllegalArgumentException if element parameter is null
      */
-    public static boolean isOverloaded(final Collection<ExecutableElement> methods, final ExecutableElement method) {
-        final Collection<ExecutableElement> allMethods = findByName(methods, method.getSimpleName());
-        for (ExecutableElement m : allMethods) {
-            if (method.getSimpleName().equals(m.getSimpleName()) && parameterCount(method.getParameters()) != parameterCount(m.getParameters())) {
-                return true;
-            }
+    public static boolean isAnnotatedWith(final AnnotatedConstruct annotatedConstruct, final Class<? extends Annotation> clazz) {
+        if (annotatedConstruct == null) {
+            throw new IllegalArgumentException("The element parameter is null");
         }
-        return false;
-    }
-
-    /**
-     * Converts a class type to a string recognizable by the
-     * {@link javax.lang.model.util.Elements#getTypeElement(CharSequence)}. Essentially replaces any {@literal $}'s to
-     * {@literal .} (dots).
-     *
-     * @param type the type to convert.
-     *
-     * @return the qualified name of the type.
-     */
-    public static String typeToString(final Class<?> type) {
-        return typeToString(type.getName());
-    }
-
-    /**
-     * Converts a qualified type name to a string recognizable by the
-     * {@link javax.lang.model.util.Elements#getTypeElement(CharSequence)}. Essentially replaces any {@literal $}'s to
-     * {@literal .} (dots).
-     *
-     * @param qualifiedType the qualified type name.
-     *
-     * @return the qualified name of the type.
-     */
-    public static String typeToString(final String qualifiedType) {
-        return qualifiedType.replace("$", ".");
-    }
 
-    /**
-     * If the {@link org.jboss.logging.processor.model.MessageObject#reference()} is an instance of {@link
-     * Element}, then the value is returned, otherwise {@code null} is returned.
-     *
-     * @param object the object to check the reference on
-     *
-     * @return the element reference or {@code null}
-     */
-    public static Element fromMessageObject(final MessageObject object) {
-        if (object.reference() instanceof Element) {
-            return (Element) object.reference();
-        }
-        return null;
+        Annotation annotation = annotatedConstruct.getAnnotation(clazz);
+        return (annotation != null);
     }
 
     /**
@@ -296,6 +132,7 @@ public final class ElementHelper {
      * @return a {@link TypeElement} representing the value for the annotation attribute or {@code null} if the
      * attribute was not found
      */
+    @SuppressWarnings({"StaticMethodOnlyUsedInOneClass", "SameParameterValue"})
     public static TypeElement getClassAnnotationValue(final Element element, final Class<? extends Annotation> annotation, final String attributeName) {
         for (AnnotationMirror mirror : element.getAnnotationMirrors()) {
             final DeclaredType annotationType = mirror.getAnnotationType();
@@ -318,9 +155,9 @@ public final class ElementHelper {
      * @param annotation    the annotation to get the value from
      * @param attributeName the name of the attribute to retrieve the class value array for
      *
-     * @return a list of {@link TypeElement} representing the value for the annotation attribute or an empty list
+     * @return a list of {@link TypeMirror} representing the value for the annotation attribute or an empty list
      */
-    public static List<TypeElement> getClassArrayAnnotationValue(final Element element, final Class<? extends Annotation> annotation, final String attributeName) {
+    public static List<TypeMirror> getClassArrayAnnotationValue(final Element element, final Class<? extends Annotation> annotation, @SuppressWarnings("SameParameterValue") final String attributeName) {
         for (AnnotationMirror mirror : element.getAnnotationMirrors()) {
             final DeclaredType annotationType = mirror.getAnnotationType();
             if (annotationType.toString().equals(annotation.getName())) {
@@ -329,9 +166,9 @@ public final class ElementHelper {
                     if (key.getSimpleName().contentEquals(attributeName)) {
                         @SuppressWarnings("unchecked")
                         final List<AnnotationValue> annotationValues = (List<AnnotationValue>) map.get(key).getValue();
-                        final List<TypeElement> result = new ArrayList<>(annotationValues.size());
+                        final List<TypeMirror> result = new ArrayList<>(annotationValues.size());
                         for (AnnotationValue value : annotationValues) {
-                            result.add((TypeElement) ((DeclaredType) value.getValue()).asElement());
+                            result.add((TypeMirror) value.getValue());
                         }
                         return result;
                     }
@@ -340,4 +177,141 @@ public final class ElementHelper {
         }
         return Collections.emptyList();
     }
+
+    /**
+     * Returns annotations that are associated with the element that match the {@code annotation} parameter type. If the
+     * {@code groupedAnnotation} is not {@code null} then any repeated annotations that math the {@code annotation}
+     * parameter type are also returned.
+     * <p>
+     * <p>
+     * The {@code groupedAnnotation} must have a value attribute that includes an array of annotations that math the
+     * {@code annotation} parameter type.
+     * </p>
+     *
+     * @param element           the element to search for annotations
+     * @param groupedAnnotation the grouped annotation, e.g. collector for repeatable annotations, or {@code null} if not a repeatable annotation
+     * @param annotation        the annotation to search for
+     *
+     * @return a collection matched annotations
+     */
+    public static Collection<AnnotationMirror> getAnnotations(final Element element, final Class<? extends Annotation> groupedAnnotation, final Class<? extends Annotation> annotation) {
+        final Collection<AnnotationMirror> result = new ArrayList<>();
+        final List<? extends AnnotationMirror> annotations = element.getAnnotationMirrors();
+        for (AnnotationMirror annotationMirror : annotations) {
+            if (isSameType(groupedAnnotation, annotationMirror.getAnnotationType())) {
+                result.addAll(getContainingAnnotations(annotationMirror));
+            } else if (isSameType(annotation, annotationMirror.getAnnotationType())) {
+                result.add(annotationMirror);
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Checks whether or not a constructor matching the parameters exists.
+     *
+     * @param types   the type utility used to compare the type arguments
+     * @param element the element that contains the constructors
+     * @param args    the arguments the constructor should match
+     *
+     * @return {@code true} if a matching constructor was found otherwise {@code false}
+     */
+    public static boolean hasConstructor(final Types types, final Element element, final List<TypeMirror> args) {
+        final int len = args.size();
+        final List<ExecutableElement> constructors = ElementFilter.constructorsIn(element.getEnclosedElements());
+        for (ExecutableElement constructor : constructors) {
+            final List<? extends VariableElement> parameters = constructor.getParameters();
+            if (len == parameters.size()) {
+                boolean match = false;
+                for (int i = 0; i < len; i++) {
+                    final TypeMirror type = args.get(i);
+                    final VariableElement parameter = parameters.get(i);
+                    if (types.isSameType(type, parameter.asType())) {
+                        match = true;
+                    } else {
+                        match = false;
+                        break;
+                    }
+                }
+                if (match) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Returns the type as a {@link TypeMirror}.
+     *
+     * @param processingEnv the processing environment to get the elements utility
+     * @param type          the type to create the {@link TypeMirror} for
+     *
+     * @return the type
+     */
+    public static TypeElement toTypeElement(final ProcessingEnvironment processingEnv, final Class<?> type) {
+        return toTypeElement(processingEnv.getElementUtils(), type);
+    }
+
+    /**
+     * Returns the type as a {@link TypeMirror}.
+     *
+     * @param elements the element utility used to generate the tye type
+     * @param type     the type to create the {@link TypeMirror} for
+     *
+     * @return the type
+     */
+    public static TypeElement toTypeElement(final Elements elements, final Class<?> type) {
+        return elements.getTypeElement(type.getCanonicalName());
+    }
+
+    /**
+     * Returns the type as a {@link TypeMirror}.
+     *
+     * @param processingEnv the processing environment to get the elements utility
+     * @param type          the type to create the {@link TypeMirror} for
+     *
+     * @return the type
+     */
+    public static TypeMirror toType(final ProcessingEnvironment processingEnv, final Class<?> type) {
+        return toType(processingEnv.getElementUtils(), type);
+    }
+
+    /**
+     * Returns the type as a {@link TypeMirror}.
+     *
+     * @param elements the element utility used to generate the tye type
+     * @param type     the type to create the {@link TypeMirror} for
+     *
+     * @return the type
+     */
+    public static TypeMirror toType(final Elements elements, final Class<?> type) {
+        return toTypeElement(elements, type).asType();
+    }
+
+    private static boolean isSameType(final Class<?> c, final TypeMirror type) {
+        return c != null && c.getCanonicalName().equals(type.toString());
+    }
+
+    @SuppressWarnings("unchecked")
+    private static Collection<AnnotationMirror> getContainingAnnotations(final AnnotationMirror annotation) {
+        final Collection<AnnotationMirror> result = new ArrayList<>();
+        // Return any child annotations
+        final Map<? extends ExecutableElement, ? extends AnnotationValue> childAnnotations = annotation.getElementValues();
+        childAnnotations.entrySet().stream().filter(entry -> entry.getKey().getSimpleName().contentEquals("value")).forEach(entry -> {
+            final Object value = entry.getValue().getValue();
+            if (value instanceof List) {
+                final List<? extends AnnotationValue> values = (List<? extends AnnotationValue>) value;
+                for (AnnotationValue subValue : values) {
+                    if (subValue instanceof AnnotationMirror) {
+                        result.add((AnnotationMirror) subValue);
+                    } else {
+                        result.add((AnnotationMirror) subValue.getValue());
+                    }
+                }
+            }
+        });
+
+        return result;
+    }
 }
diff --git a/processor/src/main/java/org/jboss/logging/processor/util/Expressions.java b/processor/src/main/java/org/jboss/logging/processor/util/Expressions.java
new file mode 100644
index 0000000..2d2320a
--- /dev/null
+++ b/processor/src/main/java/org/jboss/logging/processor/util/Expressions.java
@@ -0,0 +1,151 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2016, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging.processor.util;
+
+import java.util.Properties;
+
+/**
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+public class Expressions {
+
+    private static final int INITIAL = 0;
+    private static final int GOT_DOLLAR = 1;
+    private static final int GOT_OPEN_BRACE = 2;
+    private static final int RESOLVED = 3;
+    private static final int DEFAULT = 4;
+
+    public static String resolve(final Properties props, final String expression) {
+        if (expression == null) return null;
+        final StringBuilder builder = new StringBuilder();
+        final char[] chars = expression.toCharArray();
+        final int len = chars.length;
+        int state = 0;
+        int start = -1;
+        int nameStart = -1;
+        for (int i = 0; i < len; i++) {
+            char ch = chars[i];
+            switch (state) {
+                case INITIAL: {
+                    switch (ch) {
+                        case '$': {
+                            state = GOT_DOLLAR;
+                            continue;
+                        }
+                        default: {
+                            builder.append(ch);
+                            continue;
+                        }
+                    }
+                    // not reachable
+                }
+                case GOT_DOLLAR: {
+                    switch (ch) {
+                        case '$': {
+                            builder.append(ch);
+                            state = INITIAL;
+                            continue;
+                        }
+                        case '{': {
+                            start = i + 1;
+                            nameStart = start;
+                            state = GOT_OPEN_BRACE;
+                            continue;
+                        }
+                        default: {
+                            // invalid; emit and resume
+                            builder.append('$').append(ch);
+                            state = INITIAL;
+                            continue;
+                        }
+                    }
+                    // not reachable
+                }
+                case GOT_OPEN_BRACE: {
+                    switch (ch) {
+                        case ':':
+                        case '}':
+                        case ',': {
+                            final String name = expression.substring(nameStart, i).trim();
+                            final String val;
+                            if (name.startsWith("env.")) {
+                                val = System.getenv(name.substring(4));
+                            } else if (name.startsWith("sys.")) {
+                                val = System.getProperty(name.substring(4));
+                            } else {
+                                val = props.getProperty(name);
+                            }
+                            if (val != null) {
+                                builder.append(val);
+                                state = ch == '}' ? INITIAL : RESOLVED;
+                                continue;
+                            } else if (ch == ',') {
+                                nameStart = i + 1;
+                                continue;
+                            } else if (ch == ':') {
+                                start = i + 1;
+                                state = DEFAULT;
+                                continue;
+                            } else {
+                                builder.append(expression.substring(start - 2, i + 1));
+                                state = INITIAL;
+                                continue;
+                            }
+                        }
+                        default: {
+                            continue;
+                        }
+                    }
+                    // not reachable
+                }
+                case RESOLVED: {
+                    if (ch == '}') {
+                        state = INITIAL;
+                    }
+                    continue;
+                }
+                case DEFAULT: {
+                    if (ch == '}') {
+                        state = INITIAL;
+                        builder.append(expression.substring(start, i));
+                    }
+                    continue;
+                }
+                default:
+                    throw new IllegalStateException();
+            }
+        }
+        switch (state) {
+            case GOT_DOLLAR: {
+                builder.append('$');
+                break;
+            }
+            case DEFAULT:
+            case GOT_OPEN_BRACE: {
+                builder.append(expression.substring(start - 2));
+                break;
+            }
+        }
+        return builder.toString();
+    }
+}
diff --git a/processor/src/main/java/org/jboss/logging/processor/util/Objects.java b/processor/src/main/java/org/jboss/logging/processor/util/Objects.java
index afdc69f..aa14934 100644
--- a/processor/src/main/java/org/jboss/logging/processor/util/Objects.java
+++ b/processor/src/main/java/org/jboss/logging/processor/util/Objects.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -369,7 +369,7 @@ public final class Objects {
      */
     public static class ToStringBuilder {
 
-        private final List<String> fieldValue = new ArrayList<String>();
+        private final List<String> fieldValue = new ArrayList<>();
 
         private final String className;
 
diff --git a/processor/src/main/java/org/jboss/logging/processor/util/Strings.java b/processor/src/main/java/org/jboss/logging/processor/util/Strings.java
deleted file mode 100644
index 061ad5b..0000000
--- a/processor/src/main/java/org/jboss/logging/processor/util/Strings.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.jboss.logging.processor.util;
-
-/**
- * Date: 19.09.2011
- *
- * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
- */
-public class Strings {
-    private Strings() {
-    }
-
-    /**
-     * Creates a string filled with the with the value of the {@code filler} parameter with a length defined by the
-     * {@code len} parameter.
-     *
-     * @param filler the filler character.
-     * @param len    the length to fill.
-     *
-     * @return the generated string.
-     */
-    public static String fill(final char filler, final int len) {
-        final StringBuilder result = new StringBuilder(len);
-        for (int i = 0; i < len; i++) {
-            result.append(filler);
-        }
-        return result.toString();
-    }
-
-
-    /**
-     * Creates a string filled with the with the value of the {@code filler} parameter with a length defined by the
-     * {@code len} parameter.
-     *
-     * @param filler the filler sequence.
-     * @param len    the length to fill.
-     *
-     * @return the generated string.
-     */
-    public static String fill(final CharSequence filler, final int len) {
-        final StringBuilder result = new StringBuilder((filler.length() * len));
-        for (int i = 0; i < len; i++) {
-            result.append(filler);
-        }
-        return result.toString();
-    }
-}
diff --git a/processor/src/main/java/org/jboss/logging/processor/util/TranslationHelper.java b/processor/src/main/java/org/jboss/logging/processor/util/TranslationHelper.java
index 5607387..73f7f79 100644
--- a/processor/src/main/java/org/jboss/logging/processor/util/TranslationHelper.java
+++ b/processor/src/main/java/org/jboss/logging/processor/util/TranslationHelper.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -19,6 +19,7 @@
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
+
 package org.jboss.logging.processor.util;
 
 import java.io.File;
diff --git a/processor/src/main/java/org/jboss/logging/processor/util/VersionComparator.java b/processor/src/main/java/org/jboss/logging/processor/util/VersionComparator.java
index 4ac5b50..cc210f5 100644
--- a/processor/src/main/java/org/jboss/logging/processor/util/VersionComparator.java
+++ b/processor/src/main/java/org/jboss/logging/processor/util/VersionComparator.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -77,7 +77,7 @@ public class VersionComparator implements Comparator<String> {
     }
 
     private static List<Integer> convert(final String[] version, final int len) {
-        final List<Integer> result = new ArrayList<Integer>(len);
+        final List<Integer> result = new ArrayList<>(len);
         for (int i = 0; i < len; i++) {
             if (i < version.length) {
                 final String s = version[i];
diff --git a/processor/src/main/java/org/jboss/logging/processor/validation/AbstractFormatPart.java b/processor/src/main/java/org/jboss/logging/processor/validation/AbstractFormatPart.java
index 9fdb36a..80bcaa1 100644
--- a/processor/src/main/java/org/jboss/logging/processor/validation/AbstractFormatPart.java
+++ b/processor/src/main/java/org/jboss/logging/processor/validation/AbstractFormatPart.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
diff --git a/processor/src/main/java/org/jboss/logging/processor/validation/AbstractFormatValidator.java b/processor/src/main/java/org/jboss/logging/processor/validation/AbstractFormatValidator.java
index 4e49181..24b7a3b 100644
--- a/processor/src/main/java/org/jboss/logging/processor/validation/AbstractFormatValidator.java
+++ b/processor/src/main/java/org/jboss/logging/processor/validation/AbstractFormatValidator.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
diff --git a/processor/src/main/java/org/jboss/logging/processor/validation/FormatPart.java b/processor/src/main/java/org/jboss/logging/processor/validation/FormatPart.java
index 6702f42..0eaa5d8 100644
--- a/processor/src/main/java/org/jboss/logging/processor/validation/FormatPart.java
+++ b/processor/src/main/java/org/jboss/logging/processor/validation/FormatPart.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
diff --git a/processor/src/main/java/org/jboss/logging/processor/validation/FormatValidator.java b/processor/src/main/java/org/jboss/logging/processor/validation/FormatValidator.java
index 7c85e8a..28ba8da 100644
--- a/processor/src/main/java/org/jboss/logging/processor/validation/FormatValidator.java
+++ b/processor/src/main/java/org/jboss/logging/processor/validation/FormatValidator.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
diff --git a/processor/src/main/java/org/jboss/logging/processor/validation/FormatValidatorFactory.java b/processor/src/main/java/org/jboss/logging/processor/validation/FormatValidatorFactory.java
index 5a89ee9..bea11f7 100644
--- a/processor/src/main/java/org/jboss/logging/processor/validation/FormatValidatorFactory.java
+++ b/processor/src/main/java/org/jboss/logging/processor/validation/FormatValidatorFactory.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
diff --git a/processor/src/main/java/org/jboss/logging/processor/validation/IdLengthValidator.java b/processor/src/main/java/org/jboss/logging/processor/validation/IdLengthValidator.java
index 0a65b1b..6f8f1fb 100644
--- a/processor/src/main/java/org/jboss/logging/processor/validation/IdLengthValidator.java
+++ b/processor/src/main/java/org/jboss/logging/processor/validation/IdLengthValidator.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2013, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -36,10 +36,10 @@ import org.jboss.logging.processor.model.MessageInterface;
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
 public class IdLengthValidator {
-    private final Map<String, Integer> lengths = new HashMap<String, Integer>();
+    private final Map<String, Integer> lengths = new HashMap<>();
 
     public Collection<ValidationMessage> validate(final MessageInterface messageInterface) {
-        final List<ValidationMessage> messages = new LinkedList<ValidationMessage>();
+        final List<ValidationMessage> messages = new LinkedList<>();
         final String projectCode = messageInterface.projectCode();
         final int idLength = messageInterface.getIdLength();
         if ((idLength > 0 && idLength < 3) || idLength > 8) {
diff --git a/processor/src/main/java/org/jboss/logging/processor/validation/IdRangeValidator.java b/processor/src/main/java/org/jboss/logging/processor/validation/IdRangeValidator.java
index a74da87..915ce27 100644
--- a/processor/src/main/java/org/jboss/logging/processor/validation/IdRangeValidator.java
+++ b/processor/src/main/java/org/jboss/logging/processor/validation/IdRangeValidator.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2013, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -41,10 +41,10 @@ import org.jboss.logging.processor.model.MessageInterface;
  */
 public class IdRangeValidator {
 
-    private final Map<String, Map<ValidIdRange, MessageInterface>> processed = new HashMap<String, Map<ValidIdRange, MessageInterface>>();
+    private final Map<String, Map<ValidIdRange, MessageInterface>> processed = new HashMap<>();
 
     public Collection<ValidationMessage> validate(final MessageInterface messageInterface) {
-        final List<ValidationMessage> messages = new LinkedList<ValidationMessage>();
+        final List<ValidationMessage> messages = new LinkedList<>();
         for (ValidIdRange validIdRange : messageInterface.validIdRanges()) {
             if (validIdRange.min() > validIdRange.max()) {
                 messages.add(createError(messageInterface, "Minimum id value (%d) cannot be greater than the maximum value (%d).",
@@ -75,7 +75,7 @@ public class IdRangeValidator {
     }
 
     private Map<ValidIdRange, MessageInterface> findAll(final MessageInterface messageInterface) {
-        final Map<ValidIdRange, MessageInterface> result = new HashMap<ValidIdRange, MessageInterface>();
+        final Map<ValidIdRange, MessageInterface> result = new HashMap<>();
         for (ValidIdRange validIdRange : messageInterface.validIdRanges()) {
             result.put(validIdRange, messageInterface);
         }
@@ -93,7 +93,7 @@ public class IdRangeValidator {
         if (processed.containsKey(projectCode)) {
             return processed.get(projectCode);
         }
-        final Map<ValidIdRange, MessageInterface> result = new HashMap<ValidIdRange, MessageInterface>();
+        final Map<ValidIdRange, MessageInterface> result = new HashMap<>();
         processed.put(projectCode, result);
         return result;
     }
diff --git a/processor/src/main/java/org/jboss/logging/processor/validation/MessageFormatPart.java b/processor/src/main/java/org/jboss/logging/processor/validation/MessageFormatPart.java
index 402ba64..78ef393 100644
--- a/processor/src/main/java/org/jboss/logging/processor/validation/MessageFormatPart.java
+++ b/processor/src/main/java/org/jboss/logging/processor/validation/MessageFormatPart.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
diff --git a/processor/src/main/java/org/jboss/logging/processor/validation/MessageFormatValidator.java b/processor/src/main/java/org/jboss/logging/processor/validation/MessageFormatValidator.java
index eaf6d87..ab36c3c 100644
--- a/processor/src/main/java/org/jboss/logging/processor/validation/MessageFormatValidator.java
+++ b/processor/src/main/java/org/jboss/logging/processor/validation/MessageFormatValidator.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -40,8 +40,8 @@ import java.util.regex.Pattern;
 class MessageFormatValidator extends AbstractFormatValidator {
     public static final Pattern PATTERN = Pattern.compile("\\{}|\\{.+?}");
 
-    private final Set<FormatPart> formatParts = new TreeSet<FormatPart>();
-    private final Set<MessageFormatPart> formats = new TreeSet<MessageFormatPart>();
+    private final Set<FormatPart> formatParts = new TreeSet<>();
+    private final Set<MessageFormatPart> formats = new TreeSet<>();
     private int argumentCount;
     private boolean valid;
     private final String format;
@@ -145,7 +145,7 @@ class MessageFormatValidator extends AbstractFormatValidator {
                 break;
             }
         }
-        final Set<Integer> counted = new HashSet<Integer>();
+        final Set<Integer> counted = new HashSet<>();
         // Initialize the argument count
         for (MessageFormatPart messageFormatPart : formats) {
             if (messageFormatPart.index() >= 0) {
diff --git a/processor/src/main/java/org/jboss/logging/processor/validation/MessageIdValidator.java b/processor/src/main/java/org/jboss/logging/processor/validation/MessageIdValidator.java
index 2e0dbae..46bf86b 100644
--- a/processor/src/main/java/org/jboss/logging/processor/validation/MessageIdValidator.java
+++ b/processor/src/main/java/org/jboss/logging/processor/validation/MessageIdValidator.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -44,13 +44,13 @@ import org.jboss.logging.processor.util.Comparison;
  */
 public final class MessageIdValidator {
 
-    private final Map<MessageKey, MessageMethod> usedMessageIds = new HashMap<MessageKey, MessageMethod>();
+    private final Map<MessageKey, MessageMethod> usedMessageIds = new HashMap<>();
 
     MessageIdValidator() {
     }
 
     public Collection<ValidationMessage> validate(final MessageInterface messageInterface, final MessageMethod messageMethod) {
-        final List<ValidationMessage> messages = new LinkedList<ValidationMessage>();
+        final List<ValidationMessage> messages = new LinkedList<>();
         final MessageMethod.Message message = messageMethod.message();
         if (message == null) {
             messages.add(createError(messageMethod, "No message annotation found."));
diff --git a/processor/src/main/java/org/jboss/logging/processor/validation/NoFormatValidator.java b/processor/src/main/java/org/jboss/logging/processor/validation/NoFormatValidator.java
index 1ea0360..d81d8b7 100644
--- a/processor/src/main/java/org/jboss/logging/processor/validation/NoFormatValidator.java
+++ b/processor/src/main/java/org/jboss/logging/processor/validation/NoFormatValidator.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
diff --git a/processor/src/main/java/org/jboss/logging/processor/validation/PropertyValidator.java b/processor/src/main/java/org/jboss/logging/processor/validation/PropertyValidator.java
new file mode 100644
index 0000000..6a4f48d
--- /dev/null
+++ b/processor/src/main/java/org/jboss/logging/processor/validation/PropertyValidator.java
@@ -0,0 +1,280 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2016, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging.processor.validation;
+
+import static org.jboss.logging.processor.validation.ValidationMessageFactory.createError;
+
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.ElementFilter;
+import javax.lang.model.util.Elements;
+import javax.lang.model.util.SimpleAnnotationValueVisitor8;
+import javax.lang.model.util.Types;
+
+import org.jboss.logging.annotations.Field;
+import org.jboss.logging.annotations.Fields;
+import org.jboss.logging.annotations.Properties;
+import org.jboss.logging.annotations.Property;
+import org.jboss.logging.processor.model.MessageMethod;
+import org.jboss.logging.processor.model.Parameter;
+import org.jboss.logging.processor.util.ElementHelper;
+
+/**
+ * Validates property annotations on methods.
+ * <p>
+ * Valid property annotations are:
+ * <ul>
+ * <li>{@link Properties}</li>
+ * <li>{@link Property}</li>
+ * <li>{@link Fields}</li>
+ * <li>{@link Field}</li>
+ * </ul>
+ * </p>
+ *
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+class PropertyValidator {
+    private static final List<Class<? extends Annotation>> VALIDATING_ANNOTATIONS = Arrays.asList(Properties.class, Property.class, Fields.class, Field.class);
+    private final Elements elements;
+    private final Types types;
+    private final MessageMethod method;
+    private final TypeMirror resultType;
+    private final Collection<ValidationMessage> messages;
+
+    private PropertyValidator(final ProcessingEnvironment processingEnv, final MessageMethod method, final TypeMirror resultType, final Collection<ValidationMessage> messages) {
+        elements = processingEnv.getElementUtils();
+        types = processingEnv.getTypeUtils();
+        this.method = method;
+        this.resultType = resultType;
+        this.messages = messages;
+    }
+
+    /**
+     * Validates the message method property annotations.
+     *
+     * @param processingEnv the annotation processing environment
+     * @param messageMethod the method to validate
+     *
+     * @return a collection of validation messages
+     */
+    static Collection<ValidationMessage> validate(final ProcessingEnvironment processingEnv, final MessageMethod messageMethod) {
+        boolean continueValidation = !(messageMethod.parametersAnnotatedWith(Field.class).isEmpty() && messageMethod.parametersAnnotatedWith(Property.class).isEmpty());
+        for (Class<? extends Annotation> annotation : VALIDATING_ANNOTATIONS) {
+            if (messageMethod.isAnnotatedWith(annotation)) {
+                continueValidation = true;
+                break;
+            }
+        }
+        if (continueValidation) {
+            // Use the resolved return type to validate if parameters can be assigned to the type
+            final TypeMirror returnType = processingEnv.getTypeUtils().erasure(messageMethod.returnType().resolvedType());
+            final List<ValidationMessage> result = new ArrayList<>();
+            if (returnType.getKind() == TypeKind.DECLARED) {
+                final PropertyValidator validator = new PropertyValidator(processingEnv, messageMethod, returnType, result);
+                validator.validate();
+            } else {
+                result.add(createError(messageMethod, "The return type is invalid for property annotations."));
+            }
+            return result;
+        }
+        return Collections.emptyList();
+    }
+
+    private void validate() {
+        final Map<String, Set<TypeMirror>> fields = new HashMap<>();
+        final Map<String, Set<TypeMirror>> methods = new HashMap<>();
+        final TypeElement e = (TypeElement) types.asElement(resultType);
+        for (ExecutableElement executableElement : ElementFilter.methodsIn(elements.getAllMembers(e))) {
+            if (executableElement.getModifiers().contains(Modifier.PUBLIC) && executableElement.getParameters().size() == 1) {
+                final String methodName = executableElement.getSimpleName().toString();
+                // Only add setters and use a property style name
+                if (methodName.startsWith("set")) {
+                    final String name = Character.toLowerCase(methodName.charAt(3)) + methodName.substring(4);
+                    final Set<TypeMirror> types = methods.computeIfAbsent(name, (key -> new HashSet<>()));
+                    types.add(executableElement.getParameters().get(0).asType());
+                }
+            }
+        }
+        for (Element element : ElementFilter.fieldsIn(elements.getAllMembers(e))) {
+            if (element.getModifiers().contains(Modifier.PUBLIC) && !element.getModifiers().contains(Modifier.FINAL)) {
+                final Set<TypeMirror> types = fields.computeIfAbsent(element.getSimpleName().toString(), (key -> new HashSet<>()));
+                types.add(element.asType());
+            }
+        }
+        // Validate default properties
+        ElementHelper.getAnnotations(method, Fields.class, Field.class).forEach(a -> validateAnnotation(a, fields));
+        ElementHelper.getAnnotations(method, Properties.class, Property.class).forEach(a -> validateAnnotation(a, methods));
+
+        // Validate fields
+        for (Parameter parameter : method.parametersAnnotatedWith(Field.class)) {
+            final Set<TypeMirror> propertyTypes = fields.get(resolveFieldName(parameter));
+            final TypeMirror valueType = parameter.asType();
+            if (!assignablePropertyFound(valueType, propertyTypes)) {
+                messages.add(createError(parameter, "No target field found in %s with name %s with type %s.", resultType, parameter.targetName(), valueType));
+            }
+            validateCommonAnnotation(parameter, Field.class);
+        }
+        // Validate properties
+        for (Parameter parameter : method.parametersAnnotatedWith(Property.class)) {
+            final Set<TypeMirror> propertyTypes = methods.get(resolveSetterName(parameter));
+            final TypeMirror valueType = parameter.asType();
+            if (!assignablePropertyFound(valueType, propertyTypes)) {
+                messages.add(createError(parameter, "No method found in %s with signature %s(%s).", resultType, parameter.targetName(), valueType));
+            }
+            validateCommonAnnotation(parameter, Property.class);
+        }
+    }
+
+    private void validateCommonAnnotation(final Parameter parameter, final Class<? extends Annotation> annotation) {
+        final Collection<AnnotationMirror> annotations = ElementHelper.getAnnotations(parameter, null, annotation);
+        // There should only be one annotation
+        if (annotations.size() != 1) {
+            messages.add(createError(parameter, "Parameters can contain only a single @%s annotation.", annotation.getName()));
+        } else {
+            // We should have a name value and one other value
+            final AnnotationMirror annotationMirror = annotations.iterator().next();
+            final Map<? extends ExecutableElement, ? extends AnnotationValue> map = annotationMirror.getElementValues();
+            if (!map.isEmpty()) {
+                // Look for the name attribute and a single value
+                for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry : map.entrySet()) {
+                    final ExecutableElement attribute = entry.getKey();
+                    final AnnotationValue attributeValue = entry.getValue();
+                    if (!"name".contentEquals(attribute.getSimpleName())) {
+                        messages.add(createError(parameter, annotationMirror, attributeValue,
+                                "Default values are not allowed for parameters annotated with @%s. %s", annotation.getName(), annotationMirror));
+                    }
+                }
+            }
+        }
+    }
+
+    private void validateAnnotation(final AnnotationMirror annotationMirror, final Map<String, Set<TypeMirror>> properties) {
+        // We should have a name value and one other value
+        final Map<? extends ExecutableElement, ? extends AnnotationValue> map = annotationMirror.getElementValues();
+        final int size = map.size();
+        if (size < 2) {
+            messages.add(createError(method, annotationMirror, "The name attribute and at least one default value are required: %s", annotationMirror));
+        } else if (size > 2) {
+            messages.add(createError(method, annotationMirror, "Only the name attribute and one default attribute are allowed to be defined: %s", annotationMirror));
+        } else {
+            // Look for the name attribute and a single value
+            String name = null;
+            AnnotationValue value = null;
+            for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry : map.entrySet()) {
+                final ExecutableElement attribute = entry.getKey();
+                final AnnotationValue attributeValue = entry.getValue();
+                if ("name".contentEquals(attribute.getSimpleName())) {
+                    name = String.valueOf(attributeValue.getValue());
+                } else {
+                    value = attributeValue;
+                }
+            }
+            if (name == null) {
+                messages.add(createError(method, annotationMirror, "The name attribute is required on %s", annotationMirror));
+            } else if (value == null) {
+                messages.add(createError(method, annotationMirror, "No value could be determined for %s", annotationMirror));
+            } else {
+                final Set<TypeMirror> propertyTypes = properties.get(name);
+                if (propertyTypes == null) {
+                    messages.add(createError(method, annotationMirror, value, "Could not find property %s on %s.", name, resultType));
+                } else {
+                    final TypeMirror defaultValueType = value.accept(ValueTypeAnnotationValueVisitor.INSTANCE, elements);
+                    if (!assignablePropertyFound(defaultValueType, propertyTypes)) {
+                        messages.add(createError(method, annotationMirror, value, "Expected property with type %s found with type %s",
+                                defaultValueType, propertyTypes));
+                    }
+                }
+            }
+        }
+    }
+
+    private boolean assignablePropertyFound(final TypeMirror valueType, final Set<TypeMirror> propertyTypes) {
+        if (propertyTypes != null) {
+            for (TypeMirror propertyType : propertyTypes) {
+                if (types.isAssignable(types.erasure(valueType), types.erasure(propertyType))) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    private String resolveFieldName(final Parameter parameter) {
+        String result = "";
+        final Field field = parameter.getAnnotation(Field.class);
+        if (field != null) {
+            final String name = field.name();
+            if (name.isEmpty()) {
+                result = parameter.getSimpleName().toString();
+            } else {
+                result = name;
+            }
+        }
+        return result;
+    }
+
+    private String resolveSetterName(final Parameter parameter) {
+        String result = "";
+        final Property property = parameter.getAnnotation(Property.class);
+        if (property != null) {
+            final String name = property.name();
+            if (name.isEmpty()) {
+                result = parameter.getSimpleName().toString();
+            } else {
+                result = name;
+            }
+        }
+        return result;
+    }
+
+    private static class ValueTypeAnnotationValueVisitor extends SimpleAnnotationValueVisitor8<TypeMirror, Elements> {
+        private static final ValueTypeAnnotationValueVisitor INSTANCE = new ValueTypeAnnotationValueVisitor();
+
+        @Override
+        protected TypeMirror defaultAction(final Object o, final Elements elements) {
+            return ElementHelper.toType(elements, o.getClass());
+        }
+
+        @Override
+        public TypeMirror visitType(final TypeMirror t, final Elements elements) {
+            return ElementHelper.toType(elements, Class.class);
+        }
+    }
+}
diff --git a/processor/src/main/java/org/jboss/logging/processor/validation/StringFormatPart.java b/processor/src/main/java/org/jboss/logging/processor/validation/StringFormatPart.java
index 22363bd..72c36c0 100644
--- a/processor/src/main/java/org/jboss/logging/processor/validation/StringFormatPart.java
+++ b/processor/src/main/java/org/jboss/logging/processor/validation/StringFormatPart.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -56,7 +56,7 @@ class StringFormatPart extends AbstractFormatPart {
      * @param position the position in the string format.
      */
     private StringFormatPart(final int position) {
-        this.flags = new LinkedHashSet<Flag>();
+        this.flags = new LinkedHashSet<>();
         this.position = position;
     }
 
diff --git a/processor/src/main/java/org/jboss/logging/processor/validation/StringFormatValidator.java b/processor/src/main/java/org/jboss/logging/processor/validation/StringFormatValidator.java
index b826278..d61ccd7 100644
--- a/processor/src/main/java/org/jboss/logging/processor/validation/StringFormatValidator.java
+++ b/processor/src/main/java/org/jboss/logging/processor/validation/StringFormatValidator.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -25,6 +25,7 @@ package org.jboss.logging.processor.validation;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.IllegalFormatException;
@@ -52,8 +53,8 @@ public final class StringFormatValidator extends AbstractFormatValidator {
 
     public static final Pattern PATTERN = Pattern.compile("%(\\d+\\$)?([-#+ 0,(\\<]*)?(\\d+)?(\\.\\d+)?([tT])?([a-zA-Z%])");
 
-    private final Set<FormatPart> formatParts = new TreeSet<FormatPart>();
-    private final Set<StringFormatPart> formats = new TreeSet<StringFormatPart>();
+    private final Set<FormatPart> formatParts = new TreeSet<>();
+    private final Set<StringFormatPart> formats = new TreeSet<>();
     private int argumentCount;
     private boolean valid;
     private final String format;
@@ -143,14 +144,14 @@ public final class StringFormatValidator extends AbstractFormatValidator {
                 if (initPart.conversion() != translationPart.conversion()) {
                     translationResult.valid = false;
                     translationResult.setDetailMessage("The translated message format (%s) does not match the initial message format (%s).", translationFormat, format);
-                    translationResult.setSummaryMessage("The translated message format does not match the initial message format.");
+                    translationResult.setSummaryMessage("The translated message format (%s) does not match the initial message format (%s).", translationFormat, format);
                     break;
                 }
             }
         } else {
             translationResult.valid = false;
             translationResult.setDetailMessage("The translated message format (%s) does not match the initial message format (%s).", translationFormat, format);
-            translationResult.setSummaryMessage("The translated message format does not match the initial message format.");
+            translationResult.setSummaryMessage("The translated message format (%s) does not match the initial message format (%s).", translationFormat, format);
         }
 
         return translationResult;
@@ -179,10 +180,22 @@ public final class StringFormatValidator extends AbstractFormatValidator {
     }
 
     static List<StringFormatPart> sortParts(final Collection<StringFormatPart> parts) {
-        final TreeMap<Integer, StringFormatPart> paramMap = new TreeMap<Integer, StringFormatPart>();
+        final TreeMap<Integer, Set<StringFormatPart>> paramMap = new TreeMap<>();
+        final int newLineIndex = Integer.MAX_VALUE - 1;
+        final int percentageIndex = Integer.MAX_VALUE;
         int index = 0;
         int count = 0;
         for (StringFormatPart part : parts) {
+            // Line separators and percentage constants need to be handled specially
+            if (part.conversion().isLineSeparator()) {
+                final Set<StringFormatPart> set = getOrAdd(paramMap, newLineIndex);
+                set.add(part);
+                continue;
+            } else if (part.conversion().isPercent()) {
+                final Set<StringFormatPart> set = getOrAdd(paramMap, percentageIndex);
+                set.add(part);
+                continue;
+            }
             // Check the index and set appropriately
             if (part.index() > 0) {
                 index = part.index();
@@ -190,10 +203,14 @@ public final class StringFormatValidator extends AbstractFormatValidator {
                 index = ++count;
             }
             if (!paramMap.containsKey(index)) {
-                paramMap.put(index, part);
+                paramMap.put(index, Collections.singleton(part));
             }
         }
-        return new ArrayList<StringFormatPart>(paramMap.values());
+        final List<StringFormatPart> result = new ArrayList<>();
+        for (Set<StringFormatPart> p : paramMap.values()) {
+            result.addAll(p);
+        }
+        return result;
     }
 
     /**
@@ -206,7 +223,7 @@ public final class StringFormatValidator extends AbstractFormatValidator {
             setDetailMessage("The original is '%s' and the reconstructed format is '%s'. This is likely an internal error and should be reported.", format, asFormat());
         } else {
             // Create a multimap to hold the parameter values for sorting
-            final Map<Integer, List<Object>> paramMap = new TreeMap<Integer, List<Object>>();
+            final Map<Integer, List<Object>> paramMap = new TreeMap<>();
             int counter = 0;
             int index = 0;
             // Initialize the argument count
@@ -229,7 +246,7 @@ public final class StringFormatValidator extends AbstractFormatValidator {
                         continue;
                     }
                 } else {
-                    params = new ArrayList<Object>();
+                    params = new ArrayList<>();
                     paramMap.put(index, params);
                 }
                 counter++;
@@ -273,7 +290,7 @@ public final class StringFormatValidator extends AbstractFormatValidator {
             if (valid) {
                 try {
                     // Copy the results in order to a new list.
-                    final List<Object> params = new ArrayList<Object>();
+                    final List<Object> params = new ArrayList<>();
                     for (Map.Entry<Integer, List<Object>> entry : paramMap.entrySet()) {
                         params.addAll(entry.getValue());
                     }
@@ -303,8 +320,8 @@ public final class StringFormatValidator extends AbstractFormatValidator {
                 String.format(format, parameters);
             } catch (final IllegalFormatException e) {
                 valid = false;
-                setSummaryMessage("Invalid format for '%s' with parameters '%s'. java.util.Formatter Error: %s", format, Arrays.asList(parameters), e.getMessage());
-                setDetailMessage("Format '%s' with parameters '%s' is invalid. StringFormatValidator: %s", format, Arrays.asList(parameters), this);
+                setSummaryMessage("Invalid format for '%s' with parameters '%s'. java.util.Formatter Error: %s", format, Arrays.toString(parameters), e.getMessage());
+                setDetailMessage("Format '%s' with parameters '%s' is invalid. StringFormatValidator: %s", format, Arrays.toString(parameters), this);
             }
         }
     }
@@ -376,7 +393,7 @@ public final class StringFormatValidator extends AbstractFormatValidator {
                 break;
             }
         }
-        final Set<Integer> counted = new HashSet<Integer>();
+        final Set<Integer> counted = new HashSet<>();
         int count = 1;
         // Initialize the argument count
         for (StringFormatPart stringFormatPart : formats) {
@@ -411,4 +428,13 @@ public final class StringFormatValidator extends AbstractFormatValidator {
             throw new UnknownFormatConversionException(String.valueOf(c));
         }
     }
+
+    private static <K, V extends Comparable<? super V>> Set<V> getOrAdd(final Map<K, Set<V>> map, final K key) {
+        Set<V> set = map.get(key);
+        if (set == null) {
+            set = new TreeSet<>();
+            map.put(key, set);
+        }
+        return set;
+    }
 }
diff --git a/processor/src/main/java/org/jboss/logging/processor/validation/StringPart.java b/processor/src/main/java/org/jboss/logging/processor/validation/StringPart.java
index 6c20b75..b02310b 100644
--- a/processor/src/main/java/org/jboss/logging/processor/validation/StringPart.java
+++ b/processor/src/main/java/org/jboss/logging/processor/validation/StringPart.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
diff --git a/processor/src/main/java/org/jboss/logging/processor/validation/ValidationMessage.java b/processor/src/main/java/org/jboss/logging/processor/validation/ValidationMessage.java
index 7f64c71..e2ffe84 100644
--- a/processor/src/main/java/org/jboss/logging/processor/validation/ValidationMessage.java
+++ b/processor/src/main/java/org/jboss/logging/processor/validation/ValidationMessage.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -22,7 +22,13 @@
 
 package org.jboss.logging.processor.validation;
 
-import org.jboss.logging.processor.model.MessageObject;
+import javax.annotation.processing.Messager;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
+import javax.tools.Diagnostic;
+
+import org.jboss.logging.processor.model.DelegatingElement;
 
 /**
  * Date: 12.08.2011
@@ -34,7 +40,7 @@ public interface ValidationMessage {
     /**
      * Validation message type enum.
      */
-    public enum Type {
+    enum Type {
         ERROR,
         WARN
     }
@@ -47,11 +53,25 @@ public interface ValidationMessage {
     Type type();
 
     /**
-     * Returns the message object that caused the error.
+     * Returns the element that caused the error.
+     *
+     * @return the element that caused the error.
+     */
+    Element getElement();
+
+    /**
+     * The annotation the error occurred on.
      *
-     * @return the message object that caused the error.
+     * @return the annotation the error occurred on or {@code null} if this was not an annotation error
      */
-    MessageObject getMessageObject();
+    AnnotationMirror getAnnotationMirror();
+
+    /**
+     * The value of the annotation which caused the error.
+     *
+     * @return the value of the annotation or {@code null}
+     */
+    AnnotationValue getAnnotationValue();
 
     /**
      * Returns the error message.
@@ -59,4 +79,34 @@ public interface ValidationMessage {
      * @return the error message.
      */
     String getMessage();
+
+    /**
+     * Prints the message and returns {@code true} if the message was an error message.
+     *
+     * @param messager the messager used to print the message
+     *
+     * @return {@code true} if this was an error message otherwise {@code false}
+     */
+    default boolean printMessage(final Messager messager) {
+        boolean error = false;
+        Element element = getElement();
+        element = (element instanceof DelegatingElement ? ((DelegatingElement) element).getDelegate() : element);
+        final AnnotationMirror annotationMirror = getAnnotationMirror();
+        final AnnotationValue annotationValue = getAnnotationValue();
+        final Diagnostic.Kind kind;
+        if (type() == Type.ERROR) {
+            kind = Diagnostic.Kind.ERROR;
+            error = true;
+        } else {
+            kind = Diagnostic.Kind.WARNING;
+        }
+        if (annotationMirror == null) {
+            messager.printMessage(kind, getMessage(), element);
+        } else if (annotationValue == null) {
+            messager.printMessage(kind, getMessage(), element, annotationMirror);
+        } else {
+            messager.printMessage(kind, getMessage(), element, annotationMirror, annotationValue);
+        }
+        return error;
+    }
 }
diff --git a/processor/src/main/java/org/jboss/logging/processor/validation/ValidationMessageFactory.java b/processor/src/main/java/org/jboss/logging/processor/validation/ValidationMessageFactory.java
index 822980f..0dd8901 100644
--- a/processor/src/main/java/org/jboss/logging/processor/validation/ValidationMessageFactory.java
+++ b/processor/src/main/java/org/jboss/logging/processor/validation/ValidationMessageFactory.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -22,7 +22,9 @@
 
 package org.jboss.logging.processor.validation;
 
-import org.jboss.logging.processor.model.MessageObject;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
 
 /**
  * Date: 12.08.2011
@@ -38,46 +40,76 @@ public final class ValidationMessageFactory {
 
     }
 
-    public static ValidationMessage createError(final MessageObject messageObject, final String message) {
-        return new ValidationErrorMessage(messageObject, message);
+    public static ValidationMessage createError(final Element element, final String message) {
+        return new ValidationErrorMessage(element, message, null, null);
     }
 
-    public static ValidationMessage createError(final MessageObject messageObject, final String format, final Object... args) {
-        return new ValidationErrorMessage(messageObject, String.format(format, args));
+    public static ValidationMessage createError(final Element element, final String format, final Object... args) {
+        return new ValidationErrorMessage(element, String.format(format, args), null, null);
     }
 
-    public static ValidationMessage createWarning(final MessageObject messageObject, final String message) {
-        return new ValidationWarningMessage(messageObject, message);
+    public static ValidationMessage createError(final Element element, final AnnotationMirror annotationMirror, final String message) {
+        return new ValidationErrorMessage(element, message, annotationMirror, null);
     }
 
-    public static ValidationMessage createWarning(final MessageObject messageObject, final String format, final Object... args) {
-        return new ValidationWarningMessage(messageObject, String.format(format, args));
+    public static ValidationMessage createError(final Element element, final AnnotationMirror annotationMirror, final String format, final Object... args) {
+        return new ValidationErrorMessage(element, String.format(format, args), annotationMirror, null);
+    }
+
+    public static ValidationMessage createError(final Element element, final AnnotationMirror annotationMirror, final AnnotationValue annotationValue, final String message) {
+        return new ValidationErrorMessage(element, message, annotationMirror, annotationValue);
+    }
+
+    public static ValidationMessage createError(final Element element, final AnnotationMirror annotationMirror, final AnnotationValue annotationValue, final String format, final Object... args) {
+        return new ValidationErrorMessage(element, String.format(format, args), annotationMirror, annotationValue);
+    }
+
+    public static ValidationMessage createWarning(final Element element, final String message) {
+        return new ValidationWarningMessage(element, message, null, null);
+    }
+
+    public static ValidationMessage createWarning(final Element element, final String format, final Object... args) {
+        return new ValidationWarningMessage(element, String.format(format, args), null, null);
     }
 
     private static abstract class AbstractValidationMessage implements ValidationMessage {
-        private final MessageObject messageObject;
+        private final Element element;
         private final String message;
+        private final AnnotationMirror annotationMirror;
+        private final AnnotationValue annotationValue;
 
-        AbstractValidationMessage(final MessageObject messageObject, final String message) {
-            this.messageObject = messageObject;
+        AbstractValidationMessage(final Element element, final String message, final AnnotationMirror annotationMirror, final AnnotationValue annotationValue) {
+            this.element = element;
             this.message = message;
+            this.annotationMirror = annotationMirror;
+            this.annotationValue = annotationValue;
         }
 
         @Override
-        public final MessageObject getMessageObject() {
-            return messageObject;
+        public final Element getElement() {
+            return element;
         }
 
         @Override
         public final String getMessage() {
             return message;
         }
+
+        @Override
+        public AnnotationMirror getAnnotationMirror() {
+            return annotationMirror;
+        }
+
+        @Override
+        public AnnotationValue getAnnotationValue() {
+            return annotationValue;
+        }
     }
 
     private static class ValidationErrorMessage extends AbstractValidationMessage {
 
-        private ValidationErrorMessage(final MessageObject messageObject, final String message) {
-            super(messageObject, message);
+        private ValidationErrorMessage(final Element element, final String message, final AnnotationMirror annotationMirror, final AnnotationValue annotationValue) {
+            super(element, message, annotationMirror, annotationValue);
         }
 
         @Override
@@ -88,8 +120,8 @@ public final class ValidationMessageFactory {
 
     private static class ValidationWarningMessage extends AbstractValidationMessage {
 
-        private ValidationWarningMessage(final MessageObject messageObject, final String message) {
-            super(messageObject, message);
+        private ValidationWarningMessage(final Element element, final String message, final AnnotationMirror annotationMirror, final AnnotationValue annotationValue) {
+            super(element, message, annotationMirror, annotationValue);
         }
 
         @Override
diff --git a/processor/src/main/java/org/jboss/logging/processor/validation/Validator.java b/processor/src/main/java/org/jboss/logging/processor/validation/Validator.java
index 0877256..c310ba2 100644
--- a/processor/src/main/java/org/jboss/logging/processor/validation/Validator.java
+++ b/processor/src/main/java/org/jboss/logging/processor/validation/Validator.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -22,7 +22,6 @@
 
 package org.jboss.logging.processor.validation;
 
-import static org.jboss.logging.processor.model.Parameter.ParameterType;
 import static org.jboss.logging.processor.validation.ValidationMessageFactory.createError;
 import static org.jboss.logging.processor.validation.ValidationMessageFactory.createWarning;
 
@@ -34,17 +33,35 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
+import java.util.function.BiFunction;
+import java.util.function.Function;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.ArrayType;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.Elements;
+import javax.lang.model.util.Types;
 
+import org.jboss.logging.annotations.Cause;
 import org.jboss.logging.annotations.ConstructType;
+import org.jboss.logging.annotations.LoggingClass;
+import org.jboss.logging.annotations.MessageBundle;
+import org.jboss.logging.annotations.MessageLogger;
 import org.jboss.logging.annotations.Once;
+import org.jboss.logging.annotations.Param;
 import org.jboss.logging.annotations.Pos;
+import org.jboss.logging.annotations.Producer;
+import org.jboss.logging.annotations.Signature;
+import org.jboss.logging.annotations.Suppressed;
 import org.jboss.logging.annotations.Transform;
 import org.jboss.logging.annotations.Transform.TransformType;
 import org.jboss.logging.processor.model.MessageInterface;
-import org.jboss.logging.processor.model.MessageInterface.AnnotatedType;
 import org.jboss.logging.processor.model.MessageMethod;
 import org.jboss.logging.processor.model.Parameter;
 import org.jboss.logging.processor.model.ReturnType;
@@ -58,14 +75,22 @@ import org.jboss.logging.processor.util.ElementHelper;
  */
 public final class Validator {
 
+    private static final Collection<String> AVAILABLE_LANGUAGES = new HashSet<>(Arrays.asList(Locale.getISOLanguages()));
+
     private final MessageIdValidator messageIdValidator;
     private final IdLengthValidator idLengthValidator;
     private final IdRangeValidator idRangeValidator;
+    private final ProcessingEnvironment processingEnv;
+    private final Elements elements;
+    private final Types types;
 
-    public Validator() {
+    public Validator(final ProcessingEnvironment processingEnv) {
         messageIdValidator = new MessageIdValidator();
         idLengthValidator = new IdLengthValidator();
         idRangeValidator = new IdRangeValidator();
+        this.processingEnv = processingEnv;
+        this.elements = processingEnv.getElementUtils();
+        this.types = processingEnv.getTypeUtils();
     }
 
     /**
@@ -76,24 +101,29 @@ public final class Validator {
      * @return a collection of validation messages or an empty collection.
      */
     public final Collection<ValidationMessage> validate(final MessageInterface messageInterface) {
-        final List<ValidationMessage> messages = new ArrayList<ValidationMessage>();
-        switch (messageInterface.getAnnotatedType()) {
-            case MESSAGE_BUNDLE: {
-                // Get all messageMethods except logger interface messageMethods
-                final Set<MessageMethod> messageMethods = getAllMethods(messageInterface);
-                messages.addAll(validateCommon(messageInterface, messageMethods));
-                messages.addAll(validateBundle(messageMethods));
-                break;
-            }
-            case MESSAGE_LOGGER: {
-                // Get all messageMethods except logger interface messageMethods
-                final Set<MessageMethod> messageMethods = getAllMethods(messageInterface);
-                messages.addAll(validateCommon(messageInterface, messageMethods));
-                messages.addAll(validateLogger(messageMethods));
-                break;
-            }
-            default:
-                messages.add(createError(messageInterface, "Message interface %s is not a message bundle or message logger.", messageInterface.name()));
+        final List<ValidationMessage> messages = new ArrayList<>();
+        String locale = null;
+        if (messageInterface.isAnnotatedWith(MessageBundle.class)) {
+            // Get all messageMethods except logger interface messageMethods
+            final Set<MessageMethod> messageMethods = getAllMethods(messageInterface);
+            messages.addAll(validateCommon(messageInterface, messageMethods));
+            messages.addAll(validateBundle(messageMethods));
+            locale = messageInterface.getAnnotation(MessageBundle.class).rootLocale();
+        } else if (messageInterface.isAnnotatedWith(MessageLogger.class)) {
+            // Get all messageMethods except logger interface messageMethods
+            final Set<MessageMethod> messageMethods = getAllMethods(messageInterface);
+            messages.addAll(validateCommon(messageInterface, messageMethods));
+            messages.addAll(validateLogger(messageMethods));
+            locale = messageInterface.getAnnotation(MessageLogger.class).rootLocale();
+        } else {
+            messages.add(createError(messageInterface, "Message interface %s is not a message bundle or message logger.", messageInterface.name()));
+        }
+
+        // Check the locale is in the list of available locales
+        if (locale != null && !locale.isEmpty() && !AVAILABLE_LANGUAGES.contains(Locale.forLanguageTag(locale).getLanguage())) {
+            // Only warn as there may be a change the locale exists on the target runtime
+            messages.add(createWarning(messageInterface, "The locale '%s' may be invalid. The target runtime must " +
+                    "include this locale to ensure formatting is handled correctly.", locale));
         }
         return messages;
     }
@@ -107,8 +137,8 @@ public final class Validator {
      * @return a collection of validation messages.
      */
     private Collection<ValidationMessage> validateCommon(final MessageInterface messageInterface, final Set<MessageMethod> messageMethods) {
-        final List<ValidationMessage> messages = new ArrayList<ValidationMessage>();
-        final Map<String, MessageMethod> methodNames = new HashMap<String, MessageMethod>();
+        final List<ValidationMessage> messages = new ArrayList<>();
+        final Map<String, MessageMethod> methodNames = new HashMap<>();
 
         messages.addAll(idLengthValidator.validate(messageInterface));
         messages.addAll(idRangeValidator.validate(messageInterface));
@@ -140,21 +170,17 @@ public final class Validator {
                 if (messageMethod.formatParameterCount() != formatValidator.argumentCount()) {
                     messages.add(createError(messageMethod, "Parameter count does not match for format '%s'. Required: %d Provided: %d", formatValidator.format(), formatValidator.argumentCount(), paramCount));
                 }
-                // Validate the transform parameter
-                if (!messageMethod.parameters(ParameterType.TRANSFORM).isEmpty()) {
-                    final Set<Parameter> parameters = messageMethod.parameters(ParameterType.TRANSFORM);
-                    // Validate each parameter
-                    for (Parameter parameter : parameters) {
-                        validateTransform(messages, parameter, parameter.transform());
+                final Map<Integer, Parameter> positions = new TreeMap<>();
+                boolean validatePositions = false;
+                for (Parameter parameter : messageMethod.parameters()) {
+                    // Validate the transform parameter
+                    if (parameter.isAnnotatedWith(Transform.class)) {
+                        validateTransform(messages, parameter, parameter.getAnnotation(Transform.class));
                     }
-                }
-                // Validate the POS annotated parameters
-                if (!messageMethod.parameters(ParameterType.POS).isEmpty()) {
-                    final Map<Integer, Parameter> positions = new TreeMap<Integer, Parameter>();
-                    final Set<Parameter> parameters = messageMethod.parameters(ParameterType.POS);
-                    // Validate each parameter
-                    for (Parameter parameter : parameters) {
-                        final Pos pos = parameter.pos();
+                    // Validate the POS annotated parameters
+                    if (parameter.isAnnotatedWith(Pos.class)) {
+                        validatePositions = true;
+                        final Pos pos = parameter.getAnnotation(Pos.class);
                         final Transform[] transforms = pos.transform();
                         if (transforms != null && transforms.length > 0) {
                             if (pos.value().length != transforms.length) {
@@ -166,7 +192,7 @@ public final class Validator {
                             }
                         }
                         // Validate the positions
-                        final Set<Integer> usedPositions = new HashSet<Integer>();
+                        final Set<Integer> usedPositions = new HashSet<>();
                         for (int position : pos.value()) {
                             if (usedPositions.contains(position)) {
                                 messages.add(createError(parameter, "Position '%d' already used for this parameter.", position));
@@ -180,7 +206,19 @@ public final class Validator {
                             }
                         }
                     }
-                    // Check for missing indexed parameters
+
+                    // Validate the @Suppressed parameter is on a message bundle, the return type is an exception and the parameter is an exception
+                    if (parameter.isAnnotatedWith(Suppressed.class)) {
+                        if (!messageMethod.returnType().isThrowable()) {
+                            messages.add(createError(messageMethod, "The @Suppressed parameter annotation can only be used with message bundle methods that return an exception."));
+                        }
+                        if (!isTypeAssignableFrom(parameter, Throwable.class)) {
+                            messages.add(createError(parameter, "The parameter annotated with @Suppressed must be assignable to a Throwable type."));
+                        }
+                    }
+                }
+                // Check for missing indexed parameters
+                if (validatePositions) {
                     for (int i = 0; i < messageMethod.formatParameterCount(); i++) {
                         final int positionIndex = i + 1;
                         if (!positions.containsKey(positionIndex)) {
@@ -204,6 +242,8 @@ public final class Validator {
             }
             // Validate the parameters
             messages.addAll(validateParameters(messageMethod));
+            // Validate property annotations
+            messages.addAll(PropertyValidator.validate(processingEnv, messageMethod));
         }
         return messages;
     }
@@ -224,46 +264,104 @@ public final class Validator {
         } else if (transformTypes.contains(TransformType.SIZE)) {
             if (!(parameter.isArray() || parameter.isVarArgs() || parameter.isSubtypeOf(Map.class) ||
                     parameter.isSubtypeOf(Collection.class) || parameter.isSubtypeOf(CharSequence.class))) {
-                messages.add(createError(parameter, "Invalid type (%s) for %s. Must be an array, %s, %s or %s.", parameter.type(),
+                messages.add(createError(parameter, "Invalid type (%s) for %s. Must be an array, %s, %s or %s.", parameter.asType(),
                         TransformType.SIZE, Collection.class.getName(), Map.class.getName(), CharSequence.class.getName()));
             }
         }
     }
 
     private Collection<ValidationMessage> validateParameters(final MessageMethod messageMethod) {
-        final List<ValidationMessage> messages = new ArrayList<ValidationMessage>();
+        final List<ValidationMessage> messages = new ArrayList<>();
         boolean foundCause = false;
-        final ReturnType returnType = messageMethod.returnType();
-        for (Parameter parameter : messageMethod.parameters(ParameterType.ANY)) {
-            switch (parameter.parameterType()) {
-                case CAUSE: {
-                    if (foundCause) {
-                        messages.add(createError(messageMethod, "Only one cause parameter is allowed."));
-                    } else {
-                        foundCause = true;
-                    }
-                    break;
+        boolean producerFound = false;
+        for (Parameter parameter : messageMethod.parameters()) {
+            if (parameter.isAnnotatedWith(Cause.class)) {
+                if (foundCause) {
+                    messages.add(createError(messageMethod, "Only one cause parameter is allowed."));
+                } else {
+                    foundCause = true;
                 }
-                case FQCN:
-                    if (!parameter.type().equals(Class.class.getName())) {
-                        messages.add(createError(parameter, "Parameter %s annotated with @LoggingClass on method %s must be of type %s.", parameter.name(), messageMethod.name(), Class.class.getName()));
+            }
+            if (parameter.isAnnotatedWith(LoggingClass.class)) {
+                if (!parameter.isSameAs(Class.class)) {
+                    messages.add(createError(parameter, "Parameter %s annotated with @LoggingClass on method %s must be of type %s.", parameter.name(), messageMethod.name(), Class.class.getName()));
+                }
+            }
+            if (parameter.isAnnotatedWith(Producer.class)) {
+                final boolean isFunction = parameter.isSubtypeOf(Function.class);
+                final boolean isBiFunction = parameter.isSubtypeOf(BiFunction.class);
+
+                // Check the type arguments
+                final TypeMirror requiredReturnType = messageMethod.returnType().resolvedType();
+                final List<? extends TypeMirror> typeArgs = ElementHelper.getTypeArguments(parameter);
+                final int size = typeArgs.size();
+                if (isFunction) {
+                    if (size == 2) {
+                        final TypeMirror message = typeArgs.get(0);
+                        final TypeMirror returnType = typeArgs.get(1);
+                        if (!isTypeAssignableFrom(message, String.class)) {
+                            messages.add(createError(parameter, "The type %s must be assignable to a String.",
+                                    message));
+                        }
+                        if (!isTypeAssignableFrom(returnType, requiredReturnType)) {
+                            messages.add(createError(parameter, "The return type parameter of the function " +
+                                    "must be assignable from %s", requiredReturnType));
+                        }
+                    } else {
+                        messages.add(createError(parameter, "The type parameters could not be validated for the " +
+                                "function. The first type argument of the function must be a String and the second type " +
+                                "parameter must be the same as or a super type of %s.", requiredReturnType));
                     }
-                    break;
-                case FIELD: {
-                    if (!returnType.hasFieldFor(parameter)) {
-                        messages.add(createError(parameter, "No target field found in %s with name %s with type %s.", returnType.type(), parameter.targetName(), parameter.type()));
+                } else if (isBiFunction) {
+                    if (size == 3) {
+                        final TypeMirror returnType = typeArgs.get(2);
+                        final TypeMirror first = typeArgs.get(0);
+                        final TypeMirror second = typeArgs.get(1);
+                        if (!isTypeAssignableFrom(first, String.class) && !types.isSubtype(first, ElementHelper.toType(elements, Throwable.class))) {
+                            messages.add(createError(parameter, "The first type type parameter for %s " +
+                                    "must be assignable to a String or a super type of a Throwable.", parameter.asType()));
+                        }
+                        if (!isTypeAssignableFrom(second, String.class) && !types.isSubtype(second, ElementHelper.toType(elements, Throwable.class))) {
+                            messages.add(createError(parameter, "The second type parameter for %s " +
+                                    "must be assignable to a String or a super type of a Throwable.", parameter.asType()));
+                        }
+                        if (!isTypeAssignableFrom(returnType, requiredReturnType)) {
+                            messages.add(createError(parameter, "The return type parameter of the function " +
+                                    "must be assignable from %s", requiredReturnType));
+                        }
+                        if (messageMethod.hasCause()) {
+                            // Make sure the cause parameter can be assigned to the cause parameter for the BiFunction
+                            if (types.isSubtype(first, ElementHelper.toType(elements, Throwable.class)) && !isTypeAssignableFrom(messageMethod.cause().asType(), first)) {
+                                messages.add(createError(parameter, "The first parameter type, %s, of the BiFunction must be assignable to the cause %s.",
+                                        first, messageMethod.cause().asType()));
+                            }
+                            if (types.isSubtype(second, ElementHelper.toType(elements, Throwable.class)) && !isTypeAssignableFrom(messageMethod.cause().asType(), second)) {
+                                messages.add(createError(parameter, "The second parameter type, %s, of the BiFunction must be assignable to the cause %s.",
+                                        second, messageMethod.cause().asType()));
+                            }
+                        } else {
+                            messages.add(createWarning(messageMethod, "No @Cause parameter was found on the method. " +
+                                    "A null value will always be passed as the cause parameter to the BiFunction."));
+                        }
+                    } else {
+                        messages.add(createError(parameter, "The type parameters could not be validated for the " +
+                                        "function. The first and second type arguments of the function must be a String " +
+                                        "or a super type of Throwable. The third type parameter must be the same as or " +
+                                        "a super type of %s.",
+                                requiredReturnType));
                     }
-                    break;
+                } else {
+                    messages.add(createError(parameter, "Parameter annotated with %s must be a %s or %s type",
+                            Producer.class.getName(), Function.class.getName(), BiFunction.class.getName()));
                 }
-                case PROPERTY: {
-                    if (!returnType.hasMethodFor(parameter)) {
-                        messages.add(createError(parameter, "No method found in %s with signature %s(%s).", returnType.type(), parameter.targetName(), parameter.type()));
-                    }
-                    break;
+
+                if (producerFound) {
+                    messages.add(createError(messageMethod,
+                            "Only one parameter is allowed to be annotated with %s.", Producer.class.getName()));
                 }
+                producerFound = true;
             }
         }
-        // TODO - Check all parameter counts
         return messages;
     }
 
@@ -275,7 +373,7 @@ public final class Validator {
      * @return a collection of the validation messages.
      */
     private Collection<ValidationMessage> validateBundle(final Set<MessageMethod> messageMethods) {
-        final List<ValidationMessage> messages = new ArrayList<ValidationMessage>();
+        final List<ValidationMessage> messages = new ArrayList<>();
         for (MessageMethod messageMethod : messageMethods) {
             messages.addAll(validateBundleMethod(messageMethod));
         }
@@ -283,34 +381,72 @@ public final class Validator {
     }
 
     private Collection<ValidationMessage> validateBundleMethod(final MessageMethod messageMethod) {
-        final List<ValidationMessage> messages = new ArrayList<ValidationMessage>();
-        // The return type must be a Throwable or String
+        final List<ValidationMessage> messages = new ArrayList<>();
+        // The return type must be a Throwable, String or a Supplier that returns a Throwable or String
         final ReturnType returnType = messageMethod.returnType();
-        if (returnType.equals(ReturnType.VOID) || returnType.isPrimitive()) {
+        final TypeMirror returnTypeMirror = returnType.asType();
+        final TypeMirror resolvedReturnType = returnType.resolvedType();
+        if (returnTypeMirror.getKind() == TypeKind.VOID || returnTypeMirror.getKind().isPrimitive()) {
             messages.add(createError(messageMethod, "Message bundle messageMethod %s has an invalid return type. Cannot be void or a primitive.", messageMethod.name()));
         } else if (returnType.isThrowable()) {
             final ThrowableType throwableReturnType = returnType.throwableReturnType();
             if (throwableReturnType.useConstructionParameters()) {
-                // TODO - Check the return type constructor. Currently handled via the ThrowableReturnTypeFactory.
-            } else if (!throwableReturnType.useConstructionParameters() && !messageMethod.parameters(ParameterType.CONSTRUCTION).isEmpty()) {
+                // Check for a matching constructor
+                final Signature signature = messageMethod.getAnnotation(Signature.class);
+                if (signature != null) {
+                    final List<TypeMirror> args = ElementHelper.getClassArrayAnnotationValue(messageMethod, Signature.class, "value");
+                    // Validate the constructor exists
+                    if (!ElementHelper.hasConstructor(types, returnType, args)) {
+                        messages.add(createError(messageMethod, "Could not find constructor for %s with arguments %s", messageMethod.asType(), args));
+                    }
+                    final int messageIndex = signature.messageIndex();
+                    // Note that the messageIndex is required and must be 0 or greater
+                    if (messageIndex < 0) {
+                        messages.add(createError(messageMethod, "A messageIndex of 0 or greater is required. Value %d is invalid.", messageIndex));
+                    }
+                }
+                // Validate the construct type is valid
+                if (messageMethod.isAnnotatedWith(ConstructType.class)) {
+                    final TypeElement constructTypeValue = ElementHelper.getClassAnnotationValue(messageMethod, ConstructType.class);
+                    // Shouldn't be null
+                    if (constructTypeValue == null) {
+                        messages.add(createError(messageMethod, "Class not defined for the ConstructType"));
+                    } else {
+                        if (!types.isAssignable(constructTypeValue.asType(), returnType.asType())) {
+                            messages.add(createError(messageMethod, "The requested type %s can not be assigned to %s.", constructTypeValue.asType(), returnType.asType()));
+                        }
+                    }
+                }
+            } else if (!throwableReturnType.useConstructionParameters() && !messageMethod.parametersAnnotatedWith(Param.class).isEmpty()) {
                 messages.add(createError(messageMethod, "MessageMethod does not have an usable constructor for the return type %s.", returnType.name()));
             } else {
                 final boolean hasMessageConstructor = (throwableReturnType.hasStringAndThrowableConstructor() || throwableReturnType.hasThrowableAndStringConstructor() ||
                         throwableReturnType.hasStringConstructor());
                 final boolean usableConstructor = (throwableReturnType.hasDefaultConstructor() || throwableReturnType.hasStringAndThrowableConstructor() ||
                         throwableReturnType.hasStringConstructor() || throwableReturnType.hasThrowableAndStringConstructor() || throwableReturnType.hasThrowableConstructor());
-                if (!usableConstructor) {
+                if (!messageMethod.parametersAnnotatedWith(Producer.class).isEmpty()) {
+                    if (messageMethod.isAnnotatedWith(ConstructType.class)) {
+                        messages.add(createError(messageMethod, "Method annotated with %s cannot have a parameter annotated with %s.",
+                                ConstructType.class.getName(), Producer.class.getName()));
+                    }
+                    final TypeMirror erasure = types.erasure(resolvedReturnType);
+                    if (!isTypeAssignableFrom(erasure, Throwable.class)) {
+                        messages.add(createError(messageMethod, "The return type must be a subclass of a java.lang.Throwable"));
+                    }
+                } else if (!usableConstructor) {
                     messages.add(createError(messageMethod, "MessageMethod does not have an usable constructor for the return type %s.", returnType.name()));
                 } else if (!hasMessageConstructor) { // Check to see if there is no message constructor
                     messages.add(createWarning(messageMethod, "The message cannot be set via the throwable constructor and will be ignored."));
                 }
             }
         } else {
-            if (!returnType.isAssignableFrom(String.class)) {
-                messages.add(createError(messageMethod, "Message bundle method (%s) has an invalid return type of %s.", messageMethod.name(), returnType.name()));
+            if (!isTypeAssignableFrom(resolvedReturnType, String.class) && !returnType.isThrowable()) {
+                messages.add(createError(messageMethod, "Message bundle method (%s) has an invalid return type of %s. " +
+                        "Return types must be a String, a subtype of Throwable or a java.util.function.Supplier which " +
+                        "returns a String or a subtype of Throwable.", messageMethod.name(), returnTypeMirror));
             }
-            if (ElementHelper.isAnnotatedWith(messageMethod.reference(), ConstructType.class)) {
-                messages.add(createError(messageMethod, "ConstructType annotation requires a throwable return type"));
+            if (messageMethod.isAnnotatedWith(ConstructType.class)) {
+                messages.add(createError(messageMethod, "ConstructType annotation requires a throwable or supplier which produces a throwable return type"));
             }
         }
         return messages;
@@ -324,13 +460,13 @@ public final class Validator {
      * @return a collection of the validation messages.
      */
     private Collection<ValidationMessage> validateLogger(final Set<MessageMethod> messageMethods) {
-        final List<ValidationMessage> messages = new ArrayList<ValidationMessage>();
+        final List<ValidationMessage> messages = new ArrayList<>();
         for (MessageMethod messageMethod : messageMethods) {
             if (messageMethod.isLoggerMethod()) {
                 messages.addAll(validateLoggerMethod(messageMethod));
             } else {
                 messages.addAll(validateBundleMethod(messageMethod));
-                if (ElementHelper.isAnnotatedWith(messageMethod.reference(), Once.class)) {
+                if (messageMethod.isAnnotatedWith(Once.class)) {
                     messages.add(createError(messageMethod, "Only @LogMessage method can be annoted with @Once"));
                 }
             }
@@ -339,9 +475,9 @@ public final class Validator {
     }
 
     private Collection<ValidationMessage> validateLoggerMethod(final MessageMethod messageMethod) {
-        final List<ValidationMessage> messages = new ArrayList<ValidationMessage>();
+        final List<ValidationMessage> messages = new ArrayList<>();
         // The return type must be void
-        if (!ReturnType.VOID.equals(messageMethod.returnType())) {
+        if (messageMethod.returnType().asType().getKind() != TypeKind.VOID) {
             messages.add(createError(messageMethod, "Message logger methods can only have a void return type."));
         }
         return messages;
@@ -355,16 +491,63 @@ public final class Validator {
      * @return a set of all the methods (exception logger interface methods) the interface must implement.
      */
     private Set<MessageMethod> getAllMethods(final MessageInterface messageInterface) {
-        if (messageInterface.getAnnotatedType() == AnnotatedType.NONE) {
-            return Collections.emptySet();
+        if (messageInterface.isAnnotatedWith(MessageBundle.class) || messageInterface.isAnnotatedWith(MessageLogger.class)) {
+            final Set<MessageMethod> messageMethods = new LinkedHashSet<>();
+            for (MessageMethod messageMethod : messageInterface.methods()) {
+                messageMethods.add(messageMethod);
+            }
+            for (MessageInterface msgInterface : messageInterface.extendedInterfaces()) {
+                messageMethods.addAll(getAllMethods(msgInterface));
+            }
+            return messageMethods;
         }
-        final Set<MessageMethod> messageMethods = new LinkedHashSet<MessageMethod>();
-        for (MessageMethod messageMethod : messageInterface.methods()) {
-            messageMethods.add(messageMethod);
+        return Collections.emptySet();
+    }
+
+    /**
+     * Checks the element type, if an array the type of the array is checked, against the class. If the element type is
+     * assignable to the class type.
+     *
+     * @param element the element to test
+     * @param type    the type the element needs to be assignable to
+     *
+     * @return {@code true} if the element type is assignable to the class type, otherwise {@code false}
+     */
+    private boolean isTypeAssignableFrom(final Element element, final Class<?> type) {
+        return isTypeAssignableFrom(element.asType(), type);
+    }
+
+    /**
+     * Checks the type, if an array the type of the array is checked, against the class. If the element type is
+     * assignable to the class type.
+     *
+     * @param typeMirror the type to test
+     * @param type       the type the element needs to be assignable to
+     *
+     * @return {@code true} if the element type is assignable to the class type, otherwise {@code false}
+     */
+    private boolean isTypeAssignableFrom(final TypeMirror typeMirror, final Class<?> type) {
+        return isTypeAssignableFrom(typeMirror, ElementHelper.toType(elements, type));
+    }
+
+    /**
+     * Checks the type, if an array the type of the array is checked, against the class. If the element type is
+     * assignable to the class type.
+     *
+     * @param typeMirror the type to test
+     * @param type       the type the element needs to be assignable to
+     *
+     * @return {@code true} if the element type is assignable to the class type, otherwise {@code false}
+     */
+    private boolean isTypeAssignableFrom(final TypeMirror typeMirror, final TypeMirror type) {
+        TypeMirror t = typeMirror;
+        if (t.getKind() == TypeKind.ARRAY) {
+            t = ((ArrayType) t).getComponentType();
         }
-        for (MessageInterface msgInterface : messageInterface.extendedInterfaces()) {
-            messageMethods.addAll(getAllMethods(msgInterface));
+        if (types.isAssignable(types.erasure(t), ElementHelper.toType(elements, Collection.class))) {
+            // We only need the first type
+            t = types.erasure(ElementHelper.getTypeArguments(t).iterator().next());
         }
-        return messageMethods;
+        return types.isAssignable(t, type);
     }
 }
diff --git a/processor/src/main/resources/META-INF/LICENSE.txt b/processor/src/main/resources/META-INF/LICENSE.txt
new file mode 100644
index 0000000..4362b49
--- /dev/null
+++ b/processor/src/main/resources/META-INF/LICENSE.txt
@@ -0,0 +1,502 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+

+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+

+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+

+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+

+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+

+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+

+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+

+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+

+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+

+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/processor/src/main/resources/schema/logging-report_1_0.xsd b/processor/src/main/resources/schema/logging-report_1_0.xsd
new file mode 100644
index 0000000..8843209
--- /dev/null
+++ b/processor/src/main/resources/schema/logging-report_1_0.xsd
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  ~ JBoss, Home of Professional Open Source.
+  ~ Copyright 2016, Red Hat, Inc., and individual contributors
+  ~ as indicated by the @author tags. See the copyright.txt file in the
+  ~ distribution for a full listing of individual contributors.
+  ~
+  ~ This is free software; you can redistribute it and/or modify it
+  ~ under the terms of the GNU Lesser General Public License as
+  ~ published by the Free Software Foundation; either version 2.1 of
+  ~ the License, or (at your option) any later version.
+  ~
+  ~ This software is distributed in the hope that it will be useful,
+  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  ~ Lesser General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU Lesser General Public
+  ~ License along with this software; if not, write to the Free
+  ~ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+  ~ 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+  -->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+           targetNamespace="urn:jboss:logging:report:1.0"
+           xmlns="urn:jboss:logging:report:1.0"
+           elementFormDefault="qualified"
+           attributeFormDefault="unqualified"
+           version="1.0">
+
+    <xs:element name="report" type="reportType"/>
+
+    <xs:complexType name="reportType">
+        <xs:sequence>
+            <xs:element name="messages" type="messagesType" maxOccurs="unbounded" minOccurs="1"/>
+        </xs:sequence>
+        <xs:attribute name="title" type="xs:string" use="optional">
+            <xs:annotation>
+                <xs:documentation>
+                    The optional title of the report.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+    </xs:complexType>
+
+    <xs:complexType name="messagesType">
+        <xs:annotation>
+            <xs:documentation>
+                A group of messages for a logger or message bundle interface.
+            </xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element type="messageType" name="message" maxOccurs="unbounded" minOccurs="0"/>
+        </xs:sequence>
+        <xs:attribute type="xs:string" name="interface" use="required">
+            <xs:annotation>
+                <xs:documentation>
+                    The fully qualified class name of the interface.
+                </xs:documentation>
+            </xs:annotation>
+        </xs:attribute>
+    </xs:complexType>
+
+    <xs:complexType name="messageType">
+        <xs:annotation>
+            <xs:documentation>
+                Represents a message from a logger or message bundle interface.
+            </xs:documentation>
+        </xs:annotation>
+        <xs:simpleContent>
+            <xs:extension base="xs:string">
+                <xs:attribute type="xs:string" name="id" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>
+                            The id associated with the message if one is present.
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+                <xs:attribute type="xs:string" name="resolutionUrl" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>
+                            An optional URL to a resolution document for the error.
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+                <xs:attribute type="xs:string" name="logLevel" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>
+                            The log level if this is a logger message.
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+                <xs:attribute type="xs:string" name="returnType" use="optional">
+                    <xs:annotation>
+                        <xs:documentation>
+                            The return type if this is a message bundle message.
+                        </xs:documentation>
+                    </xs:annotation>
+                </xs:attribute>
+            </xs:extension>
+        </xs:simpleContent>
+    </xs:complexType>
+</xs:schema>
\ No newline at end of file
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/AbstractLoggerTest.java b/processor/src/test/java/org/jboss/logging/processor/generated/AbstractLoggerTest.java
index 7ee8edd..39c6a79 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/AbstractLoggerTest.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/AbstractLoggerTest.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -25,8 +25,8 @@ package org.jboss.logging.processor.generated;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 
 /**
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
@@ -34,19 +34,21 @@ import org.testng.annotations.BeforeClass;
 public abstract class AbstractLoggerTest {
 
     static final String PROJECT_CODE = "LOGL";
-    static final MessageListHandler HANDLER = new MessageListHandler();
+    static final QueuedMessageHandler HANDLER = new QueuedMessageHandler();
     static final String CATEGORY = AbstractLoggerTest.class.getPackage().getName();
     static final String LOGGER_ID_PATTERN = "LOG.*[0-9]:\\s";
 
+    private static final org.jboss.logmanager.Logger LOGGER = org.jboss.logmanager.Logger.getLogger(CATEGORY);
+
     @BeforeClass
     public static void installHandler() {
-        org.jboss.logmanager.Logger.getLogger(CATEGORY).addHandler(HANDLER);
+        LOGGER.addHandler(HANDLER);
     }
 
     @AfterClass
     public static void uninstallHandler() {
+        LOGGER.removeHandler(HANDLER);
         HANDLER.close();
-        org.jboss.logmanager.Logger.getLogger(CATEGORY).removeHandler(HANDLER);
     }
 
     protected String parseStringLoggerId(final String message) {
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/DefaultLogger.java b/processor/src/test/java/org/jboss/logging/processor/generated/DefaultLogger.java
index eb2b394..30a1734 100755
--- a/processor/src/test/java/org/jboss/logging/processor/generated/DefaultLogger.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/DefaultLogger.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -53,6 +53,14 @@ interface DefaultLogger extends BasicLogger {
     // Used to test the ambiguous log field in the DelegatingBasicLogger
     DefaultLogger log = Logger.getMessageLogger(DefaultLogger.class, AbstractLoggerTest.CATEGORY);
 
+    static DefaultLogger get(final String category) {
+        return Logger.getMessageLogger(DefaultLogger.class, category);
+    }
+
+    default void initialized() {
+        LOGGER.info("Initialized");
+    }
+
     @LogMessage(level = Level.INFO)
     @Message(id = 100, value = "Hello %s.")
     void hello(String name);
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/DefaultMessages.java b/processor/src/test/java/org/jboss/logging/processor/generated/DefaultMessages.java
index c7bbbea..add65df 100755
--- a/processor/src/test/java/org/jboss/logging/processor/generated/DefaultMessages.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/DefaultMessages.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2013, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/ExtendedLogger.java b/processor/src/test/java/org/jboss/logging/processor/generated/ExpressionLogger.java
similarity index 63%
copy from processor/src/test/java/org/jboss/logging/processor/generated/ExtendedLogger.java
copy to processor/src/test/java/org/jboss/logging/processor/generated/ExpressionLogger.java
index c833e5d..dcaf85f 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/ExtendedLogger.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/ExpressionLogger.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2013, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -22,20 +22,35 @@
 
 package org.jboss.logging.processor.generated;
 
+import org.jboss.logging.Logger;
 import org.jboss.logging.Logger.Level;
+import org.jboss.logging.annotations.Cause;
 import org.jboss.logging.annotations.LogMessage;
 import org.jboss.logging.annotations.Message;
+import org.jboss.logging.annotations.Message.Format;
 import org.jboss.logging.annotations.MessageLogger;
 import org.jboss.logging.annotations.ValidIdRange;
+import org.jboss.logging.annotations.ValidIdRanges;
 
 /**
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
- at ValidIdRange(min = 1000, max = 1500)
 @MessageLogger(projectCode = AbstractLoggerTest.PROJECT_CODE)
-public interface ExtendedLogger extends DefaultLogger {
+public interface ExpressionLogger {
 
-    @LogMessage(level = Level.ERROR)
-    @Message(id = 1000, value = "Extension error")
-    void extensionError();
+    ExpressionLogger LOGGER = Logger.getMessageLogger(ExpressionLogger.class, AbstractLoggerTest.CATEGORY);
+
+    @LogMessage(level = Level.INFO)
+    @Message(value = "${test.property}")
+    void logProperty();
+
+    @LogMessage(level = Level.INFO)
+    @Message(value = "${test.property.nonexistent:default value}")
+    void logPropertyDefault();
+
+    @Message(value = "${test.property}")
+    String property();
+
+    @Message(value = "${test.property.nonexistent:default value}")
+    String propertyDefault();
 }
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/ExtendedLogger.java b/processor/src/test/java/org/jboss/logging/processor/generated/ExpressionMessagesTest.java
similarity index 58%
copy from processor/src/test/java/org/jboss/logging/processor/generated/ExtendedLogger.java
copy to processor/src/test/java/org/jboss/logging/processor/generated/ExpressionMessagesTest.java
index c833e5d..e12bb30 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/ExtendedLogger.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/ExpressionMessagesTest.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2013, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -22,20 +22,29 @@
 
 package org.jboss.logging.processor.generated;
 
-import org.jboss.logging.Logger.Level;
-import org.jboss.logging.annotations.LogMessage;
-import org.jboss.logging.annotations.Message;
-import org.jboss.logging.annotations.MessageLogger;
-import org.jboss.logging.annotations.ValidIdRange;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
- at ValidIdRange(min = 1000, max = 1500)
- at MessageLogger(projectCode = AbstractLoggerTest.PROJECT_CODE)
-public interface ExtendedLogger extends DefaultLogger {
+public class ExpressionMessagesTest extends AbstractLoggerTest {
 
-    @LogMessage(level = Level.ERROR)
-    @Message(id = 1000, value = "Extension error")
-    void extensionError();
+    @After
+    public void clearHandler() {
+        HANDLER.close();
+    }
+
+    @Test
+    public void testExpressions() throws Exception {
+        ExpressionLogger.LOGGER.logProperty();
+        Assert.assertEquals("test property value", HANDLER.getMessage());
+
+        ExpressionLogger.LOGGER.logPropertyDefault();
+        Assert.assertEquals("default value", HANDLER.getMessage());
+
+        Assert.assertEquals("test property value", ExpressionLogger.LOGGER.property());
+        Assert.assertEquals("default value", ExpressionLogger.LOGGER.propertyDefault());
+    }
 }
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/ExtendedLogger.java b/processor/src/test/java/org/jboss/logging/processor/generated/ExtendedLogger.java
index c833e5d..6dcf132 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/ExtendedLogger.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/ExtendedLogger.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2013, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/GeneratedSourceAnalysisTest.java b/processor/src/test/java/org/jboss/logging/processor/generated/GeneratedSourceAnalysisTest.java
index 196abf0..b0b2ebe 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/GeneratedSourceAnalysisTest.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/GeneratedSourceAnalysisTest.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2013, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -22,24 +22,34 @@
 
 package org.jboss.logging.processor.generated;
 
-import java.io.BufferedReader;
-import java.io.Closeable;
 import java.io.File;
 import java.io.FileFilter;
-import java.io.FileReader;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
-import java.util.regex.Matcher;
+import java.util.Optional;
 import java.util.regex.Pattern;
-
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
+import java.util.stream.Collectors;
+
+import org.jboss.forge.roaster.Roaster;
+import org.jboss.forge.roaster.model.Method;
+import org.jboss.forge.roaster.model.Named;
+import org.jboss.forge.roaster.model.Type;
+import org.jboss.forge.roaster.model.source.FieldSource;
+import org.jboss.forge.roaster.model.source.JavaClassSource;
+import org.jboss.forge.roaster.model.source.JavaInterfaceSource;
+import org.jboss.forge.roaster.model.source.MethodSource;
+import org.jboss.forge.roaster.model.source.ParameterSource;
+import org.jboss.logging.DelegatingBasicLogger;
+import org.jboss.logging.Logger;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
 
 /**
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
@@ -49,9 +59,28 @@ public class GeneratedSourceAnalysisTest {
     private static String TEST_SRC_PATH = null;
     private static String TEST_GENERATED_SRC_PATH = null;
 
-    private final Pattern methodNamePattern = Pattern.compile("((?:\\s?|\\s+?)(?:public final)?\\s+)?([\\w\\.]+)\\s+(\\w+)(\\(.*)");
-    private final Pattern fieldNamePattern = Pattern.compile("((?:\\s?|\\s+?)private static final\\s+)([\\w\\.]+String|String)(?:\\s+)(\\w+)(.*)");
-    private final Pattern messageMethodPattern = Pattern.compile("((?:\\s?|\\s+?)protected\\s+)([\\w.]+String|String)(?:\\s+)(\\w+)(\\$str\\(\\))(.*)");
+    private static final Map<Locale, String> LOCALE_CONSTANTS = new LinkedHashMap<>();
+
+    static {
+        LOCALE_CONSTANTS.put(Locale.CANADA, "Locale.CANADA");
+        LOCALE_CONSTANTS.put(Locale.CANADA_FRENCH, "Locale.CANADA_FRENCH");
+        LOCALE_CONSTANTS.put(Locale.CHINESE, "Locale.CHINESE");
+        LOCALE_CONSTANTS.put(Locale.ENGLISH, "Locale.ENGLISH");
+        LOCALE_CONSTANTS.put(Locale.FRANCE, "Locale.FRANCE");
+        LOCALE_CONSTANTS.put(Locale.FRENCH, "Locale.FRENCH");
+        LOCALE_CONSTANTS.put(Locale.GERMAN, "Locale.GERMAN");
+        LOCALE_CONSTANTS.put(Locale.GERMANY, "Locale.GERMANY");
+        LOCALE_CONSTANTS.put(Locale.ITALIAN, "Locale.ITALIAN");
+        LOCALE_CONSTANTS.put(Locale.ITALY, "Locale.ITALY");
+        LOCALE_CONSTANTS.put(Locale.JAPAN, "Locale.JAPAN");
+        LOCALE_CONSTANTS.put(Locale.JAPANESE, "Locale.JAPANESE");
+        LOCALE_CONSTANTS.put(Locale.KOREA, "Locale.KOREA");
+        LOCALE_CONSTANTS.put(Locale.KOREAN, "Locale.KOREAN");
+        LOCALE_CONSTANTS.put(Locale.SIMPLIFIED_CHINESE, "Locale.SIMPLIFIED_CHINESE");
+        LOCALE_CONSTANTS.put(Locale.TRADITIONAL_CHINESE, "Locale.TRADITIONAL_CHINESE");
+        LOCALE_CONSTANTS.put(Locale.UK, "Locale.UK");
+        LOCALE_CONSTANTS.put(Locale.US, "Locale.US");
+    }
 
     @BeforeClass
     public static void setUp() {
@@ -60,224 +89,214 @@ public class GeneratedSourceAnalysisTest {
     }
 
     @Test
-    public void testGeneratedMethodOrder() throws Exception {
-        compare(DefaultLogger.class);
-        compare(DefaultMessages.class);
-        compare(ValidMessages.class);
+    public void testBundles() throws Exception {
+        compareBundle(DefaultMessages.class);
+        compareBundle(ValidMessages.class);
     }
 
-    private void compare(final Class<?> intf) throws Exception {
-        final Descriptor intfDescriptor = parseInterface(intf);
-        final Descriptors implDescriptors = parseGenerated(intf);
-        final List<String> intfMethods = intfDescriptor.get(Descriptor.Type.METHOD);
-        for (Descriptor implDescriptor : implDescriptors) {
-            if (implDescriptor.filterNames) {
-                List<String> l = new ArrayList<String>();
-                // We're only testing order, so only test methods that are in the implementation
-                final List<String> implMessageMethods = implDescriptor.get(Descriptor.Type.MESSAGE_METHOD);
-                Assert.assertFalse(implMessageMethods.isEmpty(), "No methods found in " + implDescriptor.filename);
-                for (String s : intfMethods) {
-                    if (implMessageMethods.contains(s)) {
-                        l.add(s);
-                    }
-                }
-                Result result = compare(l, implMessageMethods);
-                if (result.failed) {
-                    Assert.fail(String.format("Interface %s (%s) failed on %s; %s", intf.getName(), implDescriptor.filename, Descriptor.Type.MESSAGE_METHOD, result.message));
-                }
-
-                l = new ArrayList<String>();
-                // We're only testing order, so only test methods that are in the implementation
-                final List<String> implFields = implDescriptor.get(Descriptor.Type.FIELD);
-                Assert.assertFalse(implFields.isEmpty(), "No fields found in " + implDescriptor.filename);
-                for (String s : intfMethods) {
-                    if (implFields.contains(s)) {
-                        l.add(s);
-                    }
-                }
-                result = compare(l, implFields);
-                if (result.failed) {
-                    Assert.fail(String.format("Interface %s (%s) failed on %s; %s", intf.getName(), implDescriptor.filename, Descriptor.Type.FIELD, result.message));
-                }
-            } else {
-                Result result = compare(intfMethods, implDescriptor.get(Descriptor.Type.METHOD));
-                if (result.failed) {
-                    Assert.fail(String.format("Interface %s (%s) failed on %s; %s", intf.getName(), implDescriptor.filename, Descriptor.Type.METHOD, result.message));
-                }
-                result = compare(intfMethods, implDescriptor.get(Descriptor.Type.FIELD));
-                if (result.failed) {
-                    Assert.fail(String.format("Interface %s (%s) failed on %s; %s", intf.getName(), implDescriptor.filename, Descriptor.Type.FIELD, result.message));
-                }
-                result = compare(intfMethods, implDescriptor.get(Descriptor.Type.MESSAGE_METHOD));
-                if (result.failed) {
-                    Assert.fail(String.format("Interface %s (%s) failed on %s; %s", intf.getName(), implDescriptor.filename, Descriptor.Type.MESSAGE_METHOD, result.message));
-                }
-            }
-        }
+    @Test
+    public void testLoggers() throws Exception {
+        compareLogger(DefaultLogger.class);
+        compareLogger(ExtendedLogger.class);
+        compareLogger(ValidLogger.class);
+        compareLogger(RootLocaleLogger.class);
     }
 
-    private Result compare(final List<String> list1, final List<String> list2) {
-        // If the size is different there's an error... ...in the test
-        if (list1.size() != list2.size()) {
-            return Result.failure("Expected a size of %d but was a size %d%n%s%n%s", list1.size(), list2.size(), list1, list2);
-        }
-        for (int i = 0; i < list1.size(); i++) {
-            final String value1 = list1.get(i);
-            final String value2 = list2.get(i);
-            if (!value1.equals(value2)) {
-                return Result.failure("Values don't match at %d. Expected '%s' found '%s'.", i, value1, value2);
-            }
-        }
-        return Result.SUCCESS;
+    @Test
+    public void testGeneratedTranslations() throws Exception {
+        compareTranslations(DefaultLogger.class);
+        compareTranslations(DefaultMessages.class);
+        compareTranslations(RootLocaleLogger.class);
     }
 
-    private String packageToPath(final Package pkg) {
-        String result = pkg.getName().replace('.', File.separatorChar);
-        return result.endsWith(File.separator) ? result : result + File.separator;
+    @Test
+    public void testRootLocale() throws Exception {
+        JavaClassSource implementationSource = parseGenerated(RootLocaleLogger.class);
+        FieldSource<JavaClassSource> locale = implementationSource.getField("LOCALE");
+        Assert.assertNotNull("Expected a LOCALE field for " + implementationSource.getName(), locale);
+        Assert.assertEquals("Locale.forLanguageTag(\"en-UK\")", locale.getLiteralInitializer());
+
+        implementationSource = parseGenerated(DefaultLogger.class);
+        locale = implementationSource.getField("LOCALE");
+        Assert.assertNotNull("Expected a LOCALE field for " + implementationSource.getName(), locale);
+        Assert.assertEquals("Locale.ROOT", locale.getLiteralInitializer());
     }
 
-    private Descriptors parseGenerated(final Class<?> intf) throws IOException {
-        final Pattern pattern = Pattern.compile(Pattern.quote(intf.getSimpleName()) + ".*\\.java$");
-        // Find all the files that match
-        final FileFilter filter = new FileFilter() {
-            @Override
-            public boolean accept(final File pathname) {
-                return pattern.matcher(pathname.getName()).find();
-            }
-        };
-        final File dir = new File(TEST_GENERATED_SRC_PATH, packageToPath(intf.getPackage()));
-        final File[] files = dir.listFiles(filter);
-        final Descriptors result = new Descriptors();
-        for (File file : files) {
-            result.add(parse(file, true));
+    private void compareLogger(final Class<?> intf) throws IOException {
+        final JavaInterfaceSource interfaceSource = parseInterface(intf);
+        final JavaClassSource implementationSource = parseGenerated(intf);
+        compareCommon(interfaceSource, implementationSource);
+
+        // Logger implementations should have a single constructor which accepts a org.jboss.logging.Logger
+        final List<MethodSource<JavaClassSource>> implementationMethods = implementationSource.getMethods();
+        final Optional<MethodSource<JavaClassSource>> constructor = findConstructor(implementationMethods);
+        Assert.assertTrue("No constructor found for " + implementationSource.getName(), constructor.isPresent());
+        final List<ParameterSource<JavaClassSource>> parameters = constructor.get().getParameters();
+        Assert.assertEquals("Found more than one parameter for " + implementationSource.getName() + ": " + parameters,
+                1, parameters.size());
+        final ParameterSource<JavaClassSource> parameter = parameters.get(0);
+        final Type<JavaClassSource> type = parameter.getType();
+        Assert.assertEquals(Logger.class.getName(), type.getQualifiedName());
+
+        // If the logger is not extending the DelegatingBasicLogger there should be a protected final org.jboss.logging.Logger field
+        if (!DelegatingBasicLogger.class.getName().equals(implementationSource.getSuperType())) {
+            final FieldSource<JavaClassSource> log = implementationSource.getField("log");
+            Assert.assertNotNull("Expected a log field in " + implementationSource.getName(), log);
+            Assert.assertTrue("Expected the log field to be protected and final in " + implementationSource.getName(),
+                    log.isProtected() && log.isFinal());
         }
-        return result;
     }
 
-    private Descriptor parseInterface(final Class<?> intf) throws IOException {
-        final File srcFile = new File(TEST_SRC_PATH, packageToPath(intf.getPackage()) +
-                intf.getSimpleName() + ".java");
-        return parse(srcFile, false);
+    private void compareBundle(final Class<?> intf) throws IOException {
+        final JavaInterfaceSource interfaceSource = parseInterface(intf);
+        final JavaClassSource implementationSource = parseGenerated(intf);
+        compareCommon(interfaceSource, implementationSource);
+
+        // Message bundles should have an INSTANCE field
+        final FieldSource<JavaClassSource> instance = implementationSource.getField("INSTANCE");
+        Assert.assertNotNull("Expected an INSTANCE field in " + implementationSource.getName(), instance);
+        Assert.assertTrue("Expected the instance field to be public, static and final in " + implementationSource.getName(),
+                instance.isStatic() && instance.isFinal() && instance.isPublic());
+
+        // Expect a protected constructor with no parameters
+        final Optional<MethodSource<JavaClassSource>> constructor = findConstructor(implementationSource.getMethods());
+        Assert.assertTrue("No constructor found for " + implementationSource.getName(), constructor.isPresent());
+        final MethodSource<JavaClassSource> c = constructor.get();
+        Assert.assertTrue("Expected the constructor parameters to be empty for " + implementationSource.getName(), c.getParameters().isEmpty());
+        Assert.assertTrue("Expected the constructor to be protected for " + implementationSource.getName(), c.isProtected());
     }
 
-    private Descriptor parse(final File file, final boolean isImpl) throws IOException {
-        final Descriptor result = new Descriptor(file.getName());
-        BufferedReader bufferedReader = null;
-        try {
-            bufferedReader = new BufferedReader(new FileReader(file));
-            String line;
-            while ((line = bufferedReader.readLine()) != null) {
-                if (line.isEmpty()) continue;
-                final Matcher methodNameMatcher = methodNamePattern.matcher(line);
-                if (methodNameMatcher.matches()) {
-                    final String returnType = methodNameMatcher.group(2);
-                    final String methodName = methodNameMatcher.group(3);
-                    if (!"public".equals(returnType) || "private".equals(returnType)) {
-                        result.addMethod(methodName);
-                    }
-                } else if (isImpl) {
-                    final Matcher fieldNameMatcher = fieldNamePattern.matcher(line);
-                    if (fieldNameMatcher.matches()) {
-                        final String fieldName = fieldNameMatcher.group(3);
-                        if (!"FQCN".equals(fieldName)) {
-                            result.addField(fieldName.replaceAll("\\d+$", ""));
-                        }
-                    } else {
-                        final Matcher messageMethodMatcher = messageMethodPattern.matcher(line);
-                        if (messageMethodMatcher.matches()) {
-                            final String methodName = messageMethodMatcher.group(3);
-                            result.addMessageMethod(methodName.replaceAll("\\d+$", ""));
-                        }
-                    }
-                }
-            }
-        } finally {
-            safeClose(bufferedReader);
-        }
-        return result;
+    private void compareCommon(final JavaInterfaceSource interfaceSource, final JavaClassSource implementationSource) {
+        final List<MethodSource<JavaInterfaceSource>> interfaceMethods = interfaceSource.getMethods();
+        final List<MethodSource<JavaClassSource>> implementationMethods = implementationSource.getMethods();
+
+        // Validate the implementation has all the interface methods, note this should be the cause
+        final Collection<String> interfaceMethodNames = toNames(interfaceMethods);
+        final Collection<String> implementationMethodNames = toNames(implementationMethods);
+        Assert.assertTrue(String.format("Implementation is missing methods from the interface:%n\timplementation: %s%n\tinterface:%s", implementationMethodNames, interfaceMethodNames),
+                implementationMethodNames.containsAll(interfaceMethodNames));
+
+        // The generates source files should have a serialVersionUID with a value of one
+        Assert.assertTrue("Expected a serialVersionUID field in " + implementationSource.getName(), implementationSource.hasField("serialVersionUID"));
+        final FieldSource<JavaClassSource> serialVersionUID = implementationSource.getField("serialVersionUID");
+        Assert.assertEquals("Expected serialVersionUID  to be set to 1L in " + implementationSource.getName(), "1L", serialVersionUID.getLiteralInitializer());
+
+        // All bundles should have a getLoggingLocale()
+        final MethodSource<JavaClassSource> getLoggingLocale = implementationSource.getMethod("getLoggingLocale");
+        Assert.assertNotNull("Expected a getLoggingLocale() method in " + implementationSource.getName(), getLoggingLocale);
+        Assert.assertTrue("Expected the getLoggingLocale() to be protected in " + implementationSource.getName(), getLoggingLocale.isProtected());
     }
 
-    static void safeClose(final Closeable closeable) {
-        if (closeable != null) try {
-            closeable.close();
-        } catch (Exception ignore) {
+    private void compareTranslations(final Class<?> intf) throws IOException {
+        final JavaInterfaceSource interfaceSource = parseInterface(intf);
+        final Collection<JavaClassSource> implementations = parseGeneratedTranslations(intf);
+        // Find the default source file
+        final JavaClassSource superImplementationSource = parseGenerated(intf);
+        for (JavaClassSource implementationSource : implementations) {
+            compareTranslations(interfaceSource, superImplementationSource, implementationSource);
         }
     }
 
-    private static class Result {
-        static final Result SUCCESS = new Result(false, "");
-        final boolean failed;
-        final String message;
-
-        private Result(final boolean failed, final String message) {
-            this.failed = failed;
-            this.message = message;
-        }
-
-        static Result failure(final String format, final Object... args) {
-            return new Result(true, String.format(format, args));
+    private void compareTranslations(final JavaInterfaceSource interfaceSource, final JavaClassSource superImplementationSource,
+                                     final JavaClassSource implementationSource) {
+        // The implementations should not contain any methods from the interface
+        final List<String> interfaceMethods = interfaceSource.getMethods()
+                .stream()
+                .map(Named::getName)
+                .collect(Collectors.toList());
+        final Collection<String> found = new ArrayList<>();
+        for (MethodSource<JavaClassSource> method : implementationSource.getMethods()) {
+            if (interfaceMethods.contains(method.getName())) {
+                found.add(method.getName());
+            }
         }
+        Assert.assertTrue("Found methods in implementation that were in the interface " + implementationSource.getName() + " : " + found, found.isEmpty());
+
+        // The getLoggerLocale() should be overridden
+        final MethodSource<JavaClassSource> getLoggerLocale = implementationSource.getMethod("getLoggingLocale");
+        Assert.assertNotNull("Missing overridden getLoggingLocale() method " + implementationSource.getName(), getLoggerLocale);
+
+        // If the file should have a locale constant, validate the constant is one of the Locale constants
+        LOCALE_CONSTANTS.forEach((locale, constant) -> {
+            if (implementationSource.getName().endsWith(locale.toString())) {
+                // Get the LOCALE field
+                final FieldSource<JavaClassSource> localeField = implementationSource.getField("LOCALE");
+                Assert.assertNotNull("Expected a LOCALE field " + implementationSource.getName(), localeField);
+                Assert.assertEquals("Expected the LOCALE to be set to " + constant + " in " + implementationSource.getName(), constant,
+                        localeField.getLiteralInitializer());
+            }
+        });
+
+        // Get all the method names from the super class
+        final List<String> superMethods = superImplementationSource.getMethods()
+                .stream()
+                .filter(method -> !method.isConstructor())
+                .map(Named::getName)
+                .collect(Collectors.toList());
+
+        // All methods in the translation implementation should be overrides of methods in the super class
+        implementationSource.getMethods().forEach(method -> {
+            if (!method.isConstructor()) {
+                Assert.assertTrue(String.format("Expected method %s to be overridden in %s.",
+                        method.getName(), implementationSource.getName()), method.hasAnnotation(Override.class));
+                Assert.assertTrue(String.format("Expected method %s to override the super (%s) method in %s.",
+                        method.getName(), superImplementationSource.getName(), implementationSource.getName()), superMethods.contains(method.getName()));
+            }
+        });
     }
 
-    private static class Descriptors implements Iterable<Descriptor> {
-        private final List<Descriptor> descriptors;
-
-        private Descriptors() {
-            this.descriptors = new ArrayList<Descriptor>();
-        }
-
-        public boolean add(final Descriptor descriptor) {
-            return descriptors.add(descriptor);
-        }
-
-
-        @Override
-        public Iterator<Descriptor> iterator() {
-            return descriptors.iterator();
-        }
+    private Optional<MethodSource<JavaClassSource>> findConstructor(final List<MethodSource<JavaClassSource>> implementationMethods) {
+        return implementationMethods.stream()
+                .filter(Method::isConstructor)
+                .findFirst();
     }
 
-    private static class Descriptor {
-        static enum Type {
-            METHOD,
-            FIELD,
-            MESSAGE_METHOD
-        }
-
-        final String filename;
-        final boolean filterNames;
-        private final Map<Type, List<String>> values;
+    private Collection<String> toNames(final List<? extends MethodSource<?>> methods) {
+        return methods.stream()
+                // Skip default methods, static methods and constructors
+                .filter(m -> !m.isDefault() && !m.isStatic() && !m.isConstructor())
+                .map(Named::getName)
+                .collect(Collectors.toList());
 
-        private Descriptor(final String filename) {
-            this.filename = filename;
-            this.filterNames = filename.matches(".*(\\$[a-z]+)(_\\w+)\\.java$");
-            values = new HashMap<Type, List<String>>();
-        }
-
-        public void addMethod(final String methodName) {
-            getList(Type.METHOD).add(methodName);
-        }
+    }
 
-        public void addField(final String fieldName) {
-            getList(Type.FIELD).add(fieldName);
-        }
+    private String packageToPath(final Package pkg) {
+        String result = pkg.getName().replace('.', File.separatorChar);
+        return result.endsWith(File.separator) ? result : result + File.separator;
+    }
 
-        public void addMessageMethod(final String methodName) {
-            getList(Type.MESSAGE_METHOD).add(methodName);
-        }
+    private JavaClassSource parseGenerated(final Class<?> intf) throws IOException {
+        final Pattern pattern = Pattern.compile(Pattern.quote(intf.getSimpleName()) + "_\\$(logger|bundle)\\.java$");
+        // Find all the files that match
+        final FileFilter filter = pathname -> pattern.matcher(pathname.getName()).find();
+        final File dir = new File(TEST_GENERATED_SRC_PATH, packageToPath(intf.getPackage()));
+        final File[] files = dir.listFiles(filter);
+        // There should only be one file
+        Assert.assertNotNull("Did not find any implementation files for interface " + intf.getName(), files);
+        Assert.assertEquals("Found more than one implementation for interface " + intf.getName() + " " + Arrays.asList(files), 1, files.length);
 
-        public List<String> get(final Type type) {
-            return Collections.unmodifiableList(getList(type));
-        }
+        return Roaster.parse(JavaClassSource.class, files[0]);
+    }
 
-        private List<String> getList(final Type type) {
-            if (values.containsKey(type)) {
-                return values.get(type);
-            }
-            final List<String> result = new ArrayList<String>();
-            values.put(type, result);
-            return result;
+    private Collection<JavaClassSource> parseGeneratedTranslations(final Class<?> intf) throws IOException {
+        final Pattern pattern = Pattern.compile(Pattern.quote(intf.getSimpleName()) + "_\\$(logger|bundle)_.*\\.java$");
+        // Find all the files that match
+        final FileFilter filter = pathname -> pattern.matcher(pathname.getName()).matches();
+        final File dir = new File(TEST_GENERATED_SRC_PATH, packageToPath(intf.getPackage()));
+        final File[] files = dir.listFiles(filter);
+        // There should only be one file
+        Assert.assertNotNull("Did not find any implementation files for interface " + intf.getName(), files);
+        Assert.assertTrue("Did not find any translation implementations for interface " + intf.getName(), files.length > 0);
+        final Collection<JavaClassSource> result = new ArrayList<>();
+        for (final File file : files) {
+            result.add(Roaster.parse(JavaClassSource.class, file));
         }
+        return result;
+    }
 
+    private JavaInterfaceSource parseInterface(final Class<?> intf) throws IOException {
+        final File srcFile = new File(TEST_SRC_PATH, packageToPath(intf.getPackage()) +
+                intf.getSimpleName() + ".java");
+        return Roaster.parse(JavaInterfaceSource.class, srcFile);
     }
 }
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/LevelIdCheckTest.java b/processor/src/test/java/org/jboss/logging/processor/generated/LevelIdCheckTest.java
index c2baf8b..70c9b89 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/LevelIdCheckTest.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/LevelIdCheckTest.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -22,16 +22,16 @@
 
 package org.jboss.logging.processor.generated;
 
-import org.testng.annotations.AfterMethod;
-import org.testng.Assert;
-import org.testng.annotations.Test;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
 public class LevelIdCheckTest extends AbstractLoggerTest {
 
-    @AfterMethod
+    @After
     public void clearHandler() {
         HANDLER.close();
     }
@@ -42,10 +42,10 @@ public class LevelIdCheckTest extends AbstractLoggerTest {
         ValidLogger.LOGGER.processingError(new IllegalArgumentException());
         ValidLogger.LOGGER.processingError(new IllegalArgumentException(), "generated");
         ValidLogger.LOGGER.processingError(this, "invalid reference");
-        Assert.assertEquals(parseLoggerId(HANDLER.getMessage(0)), 203);
-        Assert.assertEquals(parseLoggerId(HANDLER.getMessage(1)), 203);
-        Assert.assertEquals(parseLoggerId(HANDLER.getMessage(2)), 203);
-        Assert.assertEquals(parseLoggerId(HANDLER.getMessage(3)), 203);
+        Assert.assertEquals(203, parseLoggerId(HANDLER.getMessage()));
+        Assert.assertEquals(203, parseLoggerId(HANDLER.getMessage()));
+        Assert.assertEquals(203, parseLoggerId(HANDLER.getMessage()));
+        Assert.assertEquals(203, parseLoggerId(HANDLER.getMessage()));
     }
 
 
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/LogOnceLogger.java b/processor/src/test/java/org/jboss/logging/processor/generated/LogOnceLogger.java
index 4841ec0..eacc7c9 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/LogOnceLogger.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/LogOnceLogger.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2015, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/LogOnceTest.java b/processor/src/test/java/org/jboss/logging/processor/generated/LogOnceTest.java
index 727583a..651196a 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/LogOnceTest.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/LogOnceTest.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2015, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -29,16 +29,19 @@ import java.util.List;
 import java.util.Map;
 
 import org.jboss.logging.Logger;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.Test;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
 
 /**
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
+ at FixMethodOrder(MethodSorters.NAME_ASCENDING)
 public class LogOnceTest extends AbstractLoggerTest {
 
-    @AfterMethod
+    @After
     public void clearHandler() {
         HANDLER.close();
     }
@@ -47,25 +50,25 @@ public class LogOnceTest extends AbstractLoggerTest {
     public void logOnce() throws Exception {
         LogOnceLogger.LOGGER.deprecated("test.property");
         LogOnceLogger.LOGGER.deprecated("test.property");
-        Assert.assertEquals(HANDLER.size(), 1, "Only one message should have been logged");
+        Assert.assertEquals("Only one message should have been logged", 1, HANDLER.size());
 
         LogOnceLogger.LOGGER.deprecated("test.property", "new.test.property");
-        Assert.assertEquals(HANDLER.size(), 1, "Only one message should have been logged");
+        Assert.assertEquals("Only one message should have been logged", 1, HANDLER.size());
 
         final Method method = LogOnceTest.class.getMethod("logOnce");
         LogOnceLogger.LOGGER.deprecated(method);
         LogOnceLogger.LOGGER.deprecated(method);
-        Assert.assertEquals(HANDLER.size(), 3, "The message should have been logged twice");
+        Assert.assertEquals("The message should have been logged three times", 3, HANDLER.size());
     }
 
     @Test
     public void newLogger() throws Exception {
         final LogOnceLogger logger = Logger.getMessageLogger(LogOnceLogger.class, CATEGORY);
         logger.deprecated("test.property");
-        Assert.assertEquals(HANDLER.size(), 0, "No messages should have been logged");
+        Assert.assertEquals("No messages should have been logged", 0, HANDLER.size());
 
         logger.deprecated("test.property", "new.test.property");
-        Assert.assertEquals(HANDLER.size(), 0, "No messages should have been logged");
+        Assert.assertEquals("No messages should have been logged", 0, HANDLER.size());
 
     }
 
@@ -74,17 +77,17 @@ public class LogOnceTest extends AbstractLoggerTest {
         final List<String> listCache = Arrays.asList("item1", "item2", "item3");
         LogOnceLogger.LOGGER.cacheSizeChanged(listCache);
         LogOnceLogger.LOGGER.cacheSizeChanged(listCache);
-        Assert.assertEquals(HANDLER.size(), 1, "Only one message should have been logged");
+        Assert.assertEquals("Only one message should have been logged", 1, HANDLER.size());
 
         final Map<String, Object> mapCache = new HashMap<>();
         for (int i = 0; i < 5; i++) {
             mapCache.put("item" + i, "value " + i);
         }
         LogOnceLogger.LOGGER.cacheSizeChanged(mapCache);
-        Assert.assertEquals(HANDLER.size(), 1, "Only one message should have been logged");
+        Assert.assertEquals("Only one message should have been logged", 1, HANDLER.size());
 
         LogOnceLogger.LOGGER.cacheSizeChanged("item1", "item2", "item3", "item4");
         LogOnceLogger.LOGGER.cacheSizeChanged("item1", "item2", "item3", "item4", "item5", "item6");
-        Assert.assertEquals(HANDLER.size(), 3, "The message should have been logged twice");
+        Assert.assertEquals("The message should have been logged twice", 3, HANDLER.size());
     }
 }
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/LoggerVerificationTest.java b/processor/src/test/java/org/jboss/logging/processor/generated/LoggerVerificationTest.java
index 50bdf8b..e34b25b 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/LoggerVerificationTest.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/LoggerVerificationTest.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -33,9 +33,9 @@ import java.util.Properties;
 
 import org.jboss.logging.Logger;
 import org.jboss.logging.processor.generated.DefaultLogger.CustomFormatter;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.Test;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
@@ -44,33 +44,34 @@ public class LoggerVerificationTest extends AbstractLoggerTest {
     private static final String NAME = System.getProperty("user.name");
     private static final String FILE_NAME_FORMAT = "DefaultLogger.i18n%s.properties";
 
-    @AfterMethod
+    @After
     public void clearHandler() {
         HANDLER.close();
     }
 
     @Test
     public void defaultTest() throws Exception {
-        DefaultLogger.LOGGER.hello(NAME);
-        DefaultLogger.LOGGER.howAreYou(NAME);
-        DefaultLogger.LOGGER.noFormat();
-        DefaultLogger.LOGGER.noFormatWithCause(new IllegalArgumentException("No format cause"));
+        final DefaultLogger logger = getLogger(Locale.ROOT);
+        logger.hello(NAME);
+        logger.howAreYou(NAME);
+        logger.noFormat();
+        logger.noFormatWithCause(new IllegalArgumentException("No format cause"));
         final String msg = "This is a test message";
-        DefaultLogger.LOGGER.formatWith(msg);
+        logger.formatWith(msg);
 
         final String[] values = {"A", "B", "C", "D"};
-        DefaultLogger.LOGGER.invalidSelection("G", values);
-        DefaultLogger.LOGGER.invalidSelection("A", "B", "C", "D");
+        logger.invalidSelection("G", values);
+        logger.invalidSelection("A", "B", "C", "D");
 
         final Properties properties = findFile(String.format(FILE_NAME_FORMAT, ""));
-        Assert.assertEquals(properties.size(), HANDLER.size());
-        compare(0, "hello", properties, NAME);
-        compare(1, "howAreYou", properties, NAME);
-        compare(2, "noFormat", properties);
-        compare(3, "noFormatWithCause", properties);
-        compare(4, "formatWith", properties, new CustomFormatter(msg));
-        compare(5, "invalidSelection.2", properties, "G", Arrays.toString(values));
-        compare(6, "invalidSelection.1", properties, Arrays.toString(values));
+        Assert.assertEquals(HANDLER.size(), properties.size());
+        compare("hello", properties, NAME);
+        compare("howAreYou", properties, NAME);
+        compare("noFormat", properties);
+        compare("noFormatWithCause", properties);
+        compare("formatWith", properties, new CustomFormatter(msg));
+        compare("invalidSelection.2", properties, "G", Arrays.toString(values));
+        compare("invalidSelection.1", properties, Arrays.toString(values));
     }
 
     @Test
@@ -79,9 +80,9 @@ public class LoggerVerificationTest extends AbstractLoggerTest {
         logger.hello(NAME);
         logger.howAreYou(NAME);
         final Properties properties = findFile(String.format(FILE_NAME_FORMAT, "_de"));
-        Assert.assertEquals(properties.size(), HANDLER.size());
-        compare(0, "hello", properties, NAME);
-        compare(1, "howAreYou", properties, NAME);
+        Assert.assertEquals(HANDLER.size(), properties.size());
+        compare("hello", properties, NAME);
+        compare("howAreYou", properties, NAME);
     }
 
     @Test
@@ -90,9 +91,9 @@ public class LoggerVerificationTest extends AbstractLoggerTest {
         logger.hello(NAME);
         logger.howAreYou(NAME);
         final Properties properties = findFile(String.format(FILE_NAME_FORMAT, "_fr"));
-        Assert.assertEquals(properties.size(), HANDLER.size());
-        compare(0, "hello", properties, NAME);
-        compare(1, "howAreYou", properties, NAME);
+        Assert.assertEquals(HANDLER.size(), properties.size());
+        compare("hello", properties, NAME);
+        compare("howAreYou", properties, NAME);
     }
 
     @Test
@@ -101,9 +102,9 @@ public class LoggerVerificationTest extends AbstractLoggerTest {
         logger.hello(NAME);
         logger.howAreYou(NAME);
         final Properties properties = findFile(String.format(FILE_NAME_FORMAT, "_es"));
-        Assert.assertEquals(properties.size(), HANDLER.size());
-        compare(0, "hello", properties, NAME);
-        compare(1, "howAreYou", properties, NAME);
+        Assert.assertEquals(HANDLER.size(), properties.size());
+        compare("hello", properties, NAME);
+        compare("howAreYou", properties, NAME);
     }
 
     @Test
@@ -112,9 +113,9 @@ public class LoggerVerificationTest extends AbstractLoggerTest {
         logger.hello(NAME);
         logger.howAreYou(NAME);
         final Properties properties = findFile(String.format(FILE_NAME_FORMAT, "_ja"));
-        Assert.assertEquals(properties.size(), HANDLER.size());
-        compare(0, "hello", properties, NAME);
-        compare(1, "howAreYou", properties, NAME);
+        Assert.assertEquals(HANDLER.size(), properties.size());
+        compare("hello", properties, NAME);
+        compare("howAreYou", properties, NAME);
     }
 
     @Test
@@ -126,28 +127,28 @@ public class LoggerVerificationTest extends AbstractLoggerTest {
         final Date date = new Date();
         logger.dukesBirthday(date);
         logger.dukesBirthdayFailure(date);
-        compare(0, "dukesBirthday", es, date);
-        compare(1, "dukesBirthdayFailure", en, date);
+        compare("dukesBirthday", es, date);
+        compare("dukesBirthdayFailure", en, date);
 
         logger.stringInt("string", 1);
         logger.stringIntFailure("string", 1);
-        compare(2, "stringInt", es, "string", 1);
-        compare(3, "stringIntFailure", en, "string", 1);
+        compare("stringInt", es, "string", 1);
+        compare("stringIntFailure", en, "string", 1);
 
         logger.repeat("invalid");
         logger.repeatFailure("invalid");
-        compare(4, "repeat", es, "invalid");
-        compare(5, "repeatFailure", en, "invalid");
+        compare("repeat", es, "invalid");
+        compare("repeatFailure", en, "invalid");
     }
 
     private static DefaultLogger getLogger(final Locale locale) {
         return Logger.getMessageLogger(DefaultLogger.class, CATEGORY, locale);
     }
 
-    private void compare(final int handlerIndex, final String key, final Properties properties, final Object... params) {
+    private void compare(final String key, final Properties properties, final Object... params) throws InterruptedException {
         final String expectedMessage = getFormattedProperty(key, properties, params);
-        final String loggedMessage = HANDLER.getMessage(handlerIndex).replaceAll(LOGGER_ID_PATTERN, "");
-        Assert.assertEquals(loggedMessage, expectedMessage);
+        final String loggedMessage = HANDLER.getMessage().replaceAll(LOGGER_ID_PATTERN, "");
+        Assert.assertEquals(expectedMessage, loggedMessage);
     }
 
     private String getFormattedProperty(final String key, final Properties properties, final Object... params) {
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/MessagesTest.java b/processor/src/test/java/org/jboss/logging/processor/generated/MessagesTest.java
index 8b228d9..453524c 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/MessagesTest.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/MessagesTest.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -22,30 +22,234 @@
 
 package org.jboss.logging.processor.generated;
 
+import java.io.IOException;
+import java.text.MessageFormat;
+import java.util.Arrays;
+import java.util.function.Supplier;
+
+import org.jboss.logging.processor.generated.ValidMessages.CustomException;
+import org.jboss.logging.processor.generated.ValidMessages.LoggingException;
 import org.jboss.logging.processor.generated.ValidMessages.StringOnlyException;
-import org.testng.Assert;
-import org.testng.annotations.Test;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
 public class MessagesTest {
 
+    private static final String FORMATTED_TEST_MSG = String.format(ValidMessages.TEST_MSG);
+
     @Test
     public void testFormats() {
-        Assert.assertEquals(ValidMessages.MESSAGES.testWithNewLine(), String.format(ValidMessages.TEST_MSG));
-        Assert.assertEquals(ValidMessages.MESSAGES.noFormat(), ValidMessages.TEST_MSG);
-        Assert.assertEquals(ValidMessages.MESSAGES.noFormatException(new IllegalArgumentException()).getLocalizedMessage(), ValidMessages.TEST_MSG);
+        Assert.assertEquals(FORMATTED_TEST_MSG, ValidMessages.MESSAGES.testWithNewLine());
+        Assert.assertEquals(ValidMessages.TEST_MSG, ValidMessages.MESSAGES.noFormat());
+        Assert.assertEquals(ValidMessages.TEST_MSG, ValidMessages.MESSAGES.noFormatException(new IllegalArgumentException()).getLocalizedMessage());
 
         final int value = 10;
-        Assert.assertEquals(ValidMessages.MESSAGES.fieldMessage(value).value, value);
-        Assert.assertEquals(ValidMessages.MESSAGES.paramMessage(value).value, value);
-        Assert.assertEquals(ValidMessages.MESSAGES.propertyMessage(value).value, value);
+        Assert.assertEquals(value, ValidMessages.MESSAGES.fieldMessage(value).value);
+        Assert.assertEquals(value, ValidMessages.MESSAGES.paramMessage(value).value);
+        Assert.assertEquals(value, ValidMessages.MESSAGES.propertyMessage(value).value);
 
         final StringOnlyException e = ValidMessages.MESSAGES.stringOnlyException(new RuntimeException());
-        Assert.assertEquals(e.getMessage(), String.format(ValidMessages.TEST_MSG));
+        Assert.assertEquals(FORMATTED_TEST_MSG, e.getMessage());
         Assert.assertNotNull(e.getCause());
 
-        Assert.assertTrue(ValidMessages.MESSAGES.invalidCredentials() instanceof IllegalArgumentException, "Incorrect type constructed");
+        Assert.assertTrue("Incorrect type constructed", ValidMessages.MESSAGES.invalidCredentials() instanceof IllegalArgumentException);
+
+        final String arg1 = "value-1";
+        final String arg2 = "value-2";
+        final String messageFormatMessage = MessageFormat.format(ValidMessages.TEST_MESSAGE_FORMAT, arg1, arg2);
+        Assert.assertEquals(messageFormatMessage, ValidMessages.MESSAGES.testMessageFormat(arg1, arg2));
+        Assert.assertEquals(messageFormatMessage, ValidMessages.MESSAGES.testMessageFormatException(arg1, arg2).getMessage());
+    }
+
+    @Test
+    public void testSuppressed() {
+        final IllegalArgumentException e1 = new IllegalArgumentException("First exception");
+        final IllegalStateException e2 = new IllegalStateException("Second exception");
+        final RuntimeException e3 = new RuntimeException("Third exception");
+
+        RuntimeException expected = new RuntimeException(ValidMessages.MULTIPLE_ERRORS);
+        expected.addSuppressed(e1);
+        expected.addSuppressed(e2);
+        expected.addSuppressed(e3);
+
+        RuntimeException actual = ValidMessages.MESSAGES.multipleErrors(e1, e2, e3);
+        compare(expected.getSuppressed(), actual.getSuppressed());
+
+        actual = ValidMessages.MESSAGES.multipleErrorsCollection(Arrays.asList(e1, e2, e3));
+        compare(expected.getSuppressed(), actual.getSuppressed());
+
+        expected = new RuntimeException(ValidMessages.SUPPRESSED_ERROR);
+        expected.addSuppressed(e1);
+
+        actual = ValidMessages.MESSAGES.suppressedError(e1);
+        compare(expected.getSuppressed(), actual.getSuppressed());
+
+        expected = new RuntimeException(ValidMessages.SUPPRESSED_ERRORS);
+        expected.addSuppressed(e1);
+        expected.addSuppressed(e2);
+
+        actual = ValidMessages.MESSAGES.suppressedErrors(e1, e2);
+        compare(expected.getSuppressed(), actual.getSuppressed());
+
+
+    }
+
+    @Test
+    public void testPropertyConstants() {
+        Assert.assertEquals(true, MethodMessageConstants.MESSAGES.booleanProperty().value);
+        Assert.assertEquals("x".getBytes()[0], MethodMessageConstants.MESSAGES.byteProperty().value);
+        Assert.assertEquals(MethodMessageConstants.testChar, MethodMessageConstants.MESSAGES.charProperty().value);
+        Assert.assertEquals(MethodMessageConstants.ValueType.class, MethodMessageConstants.MESSAGES.classProperty().value);
+        Assert.assertEquals(Double.MAX_VALUE, MethodMessageConstants.MESSAGES.douleProperty().value, 0);
+        Assert.assertEquals(Float.MAX_VALUE, MethodMessageConstants.MESSAGES.floatProperty().value, 0);
+        Assert.assertEquals(Integer.MAX_VALUE, MethodMessageConstants.MESSAGES.intProperty().value);
+        Assert.assertEquals(Long.MAX_VALUE, MethodMessageConstants.MESSAGES.longProperty().value);
+        Assert.assertEquals(Short.MAX_VALUE, MethodMessageConstants.MESSAGES.shortProperty().value);
+        Assert.assertEquals(MethodMessageConstants.stringTest, MethodMessageConstants.MESSAGES.stringProperty().value);
+        MethodMessageConstants.TypeException exception = MethodMessageConstants.MESSAGES.multiProperty();
+        Assert.assertEquals(String.class, exception.type);
+        Assert.assertEquals(MethodMessageConstants.stringTest, exception.value);
+        exception = MethodMessageConstants.MESSAGES.repeatableProperty();
+        Assert.assertEquals(String.class, exception.type);
+        Assert.assertEquals(MethodMessageConstants.stringTest, exception.value);
+    }
+
+    @Test
+    public void testFieldConstants() {
+        Assert.assertEquals(true, MethodMessageConstants.MESSAGES.booleanField().value);
+        Assert.assertEquals("x".getBytes()[0], MethodMessageConstants.MESSAGES.byteField().value);
+        Assert.assertEquals(MethodMessageConstants.testChar, MethodMessageConstants.MESSAGES.charField().value);
+        Assert.assertEquals(MethodMessageConstants.ValueType.class, MethodMessageConstants.MESSAGES.classField().value);
+        Assert.assertEquals(Double.MAX_VALUE, MethodMessageConstants.MESSAGES.douleField().value, 0);
+        Assert.assertEquals(Float.MAX_VALUE, MethodMessageConstants.MESSAGES.floatField().value, 0);
+        Assert.assertEquals(Integer.MAX_VALUE, MethodMessageConstants.MESSAGES.intField().value);
+        Assert.assertEquals(Long.MAX_VALUE, MethodMessageConstants.MESSAGES.longField().value);
+        Assert.assertEquals(Short.MAX_VALUE, MethodMessageConstants.MESSAGES.shortField().value);
+        Assert.assertEquals(MethodMessageConstants.stringTest, MethodMessageConstants.MESSAGES.stringField().value);
+        MethodMessageConstants.TypeException exception = MethodMessageConstants.MESSAGES.multiField();
+        Assert.assertEquals(String.class, exception.type);
+        Assert.assertEquals(MethodMessageConstants.stringTest, exception.value);
+        exception = MethodMessageConstants.MESSAGES.repeatableField();
+        Assert.assertEquals(String.class, exception.type);
+        Assert.assertEquals(MethodMessageConstants.stringTest, exception.value);
+    }
+
+    @Test
+    public void testSupplierReturnType() throws Exception {
+        Supplier<RuntimeException> runtimeExceptionSupplier = ValidMessages.MESSAGES.testSupplierRuntimeException();
+        Assert.assertNotNull(runtimeExceptionSupplier);
+        RuntimeException runtimeException = runtimeExceptionSupplier.get();
+        Assert.assertEquals(FORMATTED_TEST_MSG, runtimeException.getMessage());
+        Assert.assertEquals(RuntimeException.class, runtimeException.getClass());
+
+        Assert.assertEquals(ValidMessages.MESSAGES.testSupplierString().get(), FORMATTED_TEST_MSG);
+
+        runtimeExceptionSupplier = ValidMessages.MESSAGES.invalidCredentialsSupplier();
+        Assert.assertNotNull(runtimeExceptionSupplier);
+        runtimeException = runtimeExceptionSupplier.get();
+        Assert.assertEquals(IllegalArgumentException.class, runtimeException.getClass());
+
+        // Test suppliers with fields/properties
+        int value = 5;
+        Supplier<CustomException> customExceptionSupplier = ValidMessages.MESSAGES.fieldMessageSupplier(value);
+        Assert.assertNotNull(customExceptionSupplier);
+        CustomException customException = customExceptionSupplier.get();
+        Assert.assertEquals(FORMATTED_TEST_MSG, customException.getMessage());
+        Assert.assertEquals(CustomException.class, customException.getClass());
+        Assert.assertEquals(value, customException.value);
+
+        value = 20;
+        customExceptionSupplier = ValidMessages.MESSAGES.propertyMessageSupplier(value);
+        Assert.assertNotNull(customExceptionSupplier);
+        customException = customExceptionSupplier.get();
+        Assert.assertEquals(FORMATTED_TEST_MSG, customException.getMessage());
+        Assert.assertEquals(CustomException.class, customException.getClass());
+        Assert.assertEquals(value, customException.value);
+
+    }
+
+    @Test
+    public void testFunctionProducerMessages() throws Exception {
+        RuntimeException runtimeException = ValidMessages.MESSAGES.operationFailed(IllegalArgumentException::new, "start");
+        Assert.assertEquals(IllegalArgumentException.class, runtimeException.getClass());
+        Assert.assertEquals(String.format(ValidMessages.TEST_OP_FAILED_MSG, "start"), runtimeException.getMessage());
+
+        IOException ioException = ValidMessages.MESSAGES.operationFailed(IOException::new, "query");
+        Assert.assertEquals(String.format(ValidMessages.TEST_OP_FAILED_MSG, "query"), ioException.getMessage());
+
+        final Supplier<IllegalStateException> supplier = ValidMessages.MESSAGES.supplierFunction(IllegalStateException::new);
+        runtimeException = supplier.get();
+        Assert.assertEquals(IllegalStateException.class, runtimeException.getClass());
+        Assert.assertEquals(FORMATTED_TEST_MSG, runtimeException.getMessage());
+
+        // Test functions with fields/properties
+        int value = 5;
+        CustomException customException = ValidMessages.MESSAGES.fieldMessageFunction(CustomException::new, value);
+        Assert.assertEquals(FORMATTED_TEST_MSG, customException.getMessage());
+        Assert.assertEquals(CustomException.class, customException.getClass());
+        Assert.assertEquals(customException.value, value);
+
+        value = 20;
+        customException = ValidMessages.MESSAGES.propertyMessageFunction(CustomException::new, value);
+        Assert.assertEquals(FORMATTED_TEST_MSG, customException.getMessage());
+        Assert.assertEquals(CustomException.class, customException.getClass());
+        Assert.assertEquals(value, customException.value);
+    }
+
+    @Test
+    public void testBiFunctionProducerMessages() throws Exception {
+        final RuntimeException cause = new RuntimeException("This is the cause");
+        RuntimeException runtimeException = ValidMessages.MESSAGES.operationFailed(IllegalArgumentException::new, cause, "start");
+        Assert.assertEquals(IllegalArgumentException.class, runtimeException.getClass());
+        Assert.assertEquals(String.format(ValidMessages.TEST_OP_FAILED_MSG, "start"), runtimeException.getMessage());
+        Assert.assertEquals(cause, runtimeException.getCause());
+
+        runtimeException = ValidMessages.MESSAGES.throwableStringBiFunction(LoggingException::new, cause);
+        Assert.assertEquals(LoggingException.class, runtimeException.getClass());
+        Assert.assertEquals(cause, runtimeException.getCause());
+
+        final Supplier<RuntimeException> supplier = ValidMessages.MESSAGES.throwableStringBiFunctionSupplier(IllegalArgumentException::new, cause);
+        runtimeException = supplier.get();
+        Assert.assertEquals(IllegalArgumentException.class, runtimeException.getClass());
+        Assert.assertEquals(FORMATTED_TEST_MSG, runtimeException.getMessage());
+        Assert.assertEquals(cause, runtimeException.getCause());
+
+    }
+
+    private <T> void compare(final T[] a1, final T[] a2) {
+        Assert.assertTrue(String.format("Expected: %s%n Actual: %s", Arrays.toString(a1), Arrays.toString(a2)), equalsIgnoreOrder(a1, a2));
+    }
+
+    private <T> boolean equalsIgnoreOrder(final T[] a1, final T[] a2) {
+        if (a1.length != a2.length) {
+            return false;
+        }
+        final T[] ca2 = Arrays.copyOf(a2, a2.length);
+        boolean found = false;
+        for (T t : a1) {
+            final int i = search(ca2, t);
+            if (i >= 0) {
+                found = true;
+                ca2[i] = null;
+            } else {
+                found = false;
+            }
+            if (!found) {
+                break;
+            }
+        }
+        return found;
+    }
+
+    private <T> int search(final T[] a, final T key) {
+        for (int i = 0; i < a.length; i++) {
+            if (key.equals(a[i])) {
+                return i;
+            }
+        }
+        return -1;
     }
 }
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/MethodMessageConstants.java b/processor/src/test/java/org/jboss/logging/processor/generated/MethodMessageConstants.java
new file mode 100644
index 0000000..eae571e
--- /dev/null
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/MethodMessageConstants.java
@@ -0,0 +1,303 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2016, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging.processor.generated;
+
+import org.jboss.logging.Messages;
+import org.jboss.logging.annotations.Field;
+import org.jboss.logging.annotations.Fields;
+import org.jboss.logging.annotations.Message;
+import org.jboss.logging.annotations.MessageBundle;
+import org.jboss.logging.annotations.Properties;
+import org.jboss.logging.annotations.Property;
+
+/**
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+ at MessageBundle(projectCode = "CONSTANTS")
+public interface MethodMessageConstants {
+    String TEST_MSG = "Test method message constant";
+    MethodMessageConstants MESSAGES = Messages.getBundle(MethodMessageConstants.class);
+
+    // Properties
+
+    @Message(TEST_MSG)
+    @Property(name = "value", intValue = Integer.MAX_VALUE)
+    IntTypeException intProperty();
+
+    @Message(TEST_MSG)
+    @Property(name = "value", longValue = Long.MAX_VALUE)
+    LongTypeException longProperty();
+
+    @Message(TEST_MSG)
+    @Property(name = "value", shortValue = Short.MAX_VALUE)
+    ShortTypeException shortProperty();
+
+    @Message(TEST_MSG)
+    @Property(name = "value", doubleValue = Double.MAX_VALUE)
+    DoubleTypeException douleProperty();
+
+    @Message(TEST_MSG)
+    @Property(name = "value", floatValue = Float.MAX_VALUE)
+    FloatTypeException floatProperty();
+
+    @Message(TEST_MSG)
+    @Property(name = "value", booleanValue = true)
+    BooleanTypeException booleanProperty();
+
+    @Message(TEST_MSG)
+    @Property(name = "value", charValue = testChar)
+    CharTypeException charProperty();
+
+    @Message(TEST_MSG)
+    @Property(name = "value", byteValue = (byte) 'x')
+    ByteTypeException byteProperty();
+
+    @Message(TEST_MSG)
+    @Property(name = "value", classValue = ValueType.class)
+    ClassTypeException classProperty();
+
+    @Message(TEST_MSG)
+    @Property(name = "value", stringValue = stringTest)
+    StringTypeException stringProperty();
+
+    @Message(TEST_MSG)
+    @Property(name = "value", stringValue = stringTest)
+    @Property(name = "type", classValue = String.class)
+    TypeException repeatableProperty();
+
+    @Message(TEST_MSG)
+    @Properties({
+            @Property(name = "value", stringValue = stringTest),
+            @Property(name = "type", classValue = String.class)
+    })
+    TypeException multiProperty();
+
+    // Fields
+
+    @Message(TEST_MSG)
+    @Field(name = "value", intValue = Integer.MAX_VALUE)
+    IntTypeException intField();
+
+    @Message(TEST_MSG)
+    @Field(name = "value", longValue = Long.MAX_VALUE)
+    LongTypeException longField();
+
+    @Message(TEST_MSG)
+    @Field(name = "value", shortValue = Short.MAX_VALUE)
+    ShortTypeException shortField();
+
+    @Message(TEST_MSG)
+    @Field(name = "value", doubleValue = Double.MAX_VALUE)
+    DoubleTypeException douleField();
+
+    @Message(TEST_MSG)
+    @Field(name = "value", floatValue = Float.MAX_VALUE)
+    FloatTypeException floatField();
+
+    @Message(TEST_MSG)
+    @Field(name = "value", booleanValue = true)
+    BooleanTypeException booleanField();
+
+    char testChar = 'c';
+
+    @Message(TEST_MSG)
+    @Field(name = "value", charValue = testChar)
+    CharTypeException charField();
+
+    @Message(TEST_MSG)
+    @Field(name = "value", byteValue = (byte) 'x')
+    ByteTypeException byteField();
+
+    @Message(TEST_MSG)
+    @Field(name = "value", classValue = ValueType.class)
+    ClassTypeException classField();
+
+    String stringTest = "test";
+
+    @Message(TEST_MSG)
+    @Field(name = "value", stringValue = stringTest)
+    StringTypeException stringField();
+
+    @Message(TEST_MSG)
+    @Field(name = "value", stringValue = stringTest)
+    @Field(name = "type", classValue = String.class)
+    TypeException repeatableField();
+
+    @Message(TEST_MSG)
+    @Fields({
+            @Field(name = "value", stringValue = stringTest),
+            @Field(name = "type", classValue = String.class)
+    })
+    TypeException multiField();
+
+    class TypeException extends RuntimeException {
+        public Class<?> type;
+        public Object value;
+
+        public TypeException() {
+        }
+
+        public TypeException(final String msg) {
+            super(msg);
+        }
+
+        public TypeException(final Throwable t) {
+            super(t);
+        }
+
+        public TypeException(final String msg, final Throwable t) {
+            super(msg, t);
+        }
+
+        public void setValue(final Object value) {
+            this.value = value;
+        }
+
+        public void setType(final Class<?> type) {
+            this.type = type;
+        }
+    }
+
+    class IntTypeException extends RuntimeException {
+        public int value;
+
+        public IntTypeException(final String message) {
+            super(message);
+        }
+
+        public void setValue(final Integer value) {
+            this.value = value;
+        }
+    }
+
+    class LongTypeException extends RuntimeException {
+        public long value;
+
+        public LongTypeException(final String message) {
+            super(message);
+        }
+
+        public void setValue(final long value) {
+            this.value = value;
+        }
+    }
+
+    class ShortTypeException extends RuntimeException {
+        public short value;
+
+        public ShortTypeException(final String message) {
+            super(message);
+        }
+
+        public void setValue(final short value) {
+            this.value = value;
+        }
+    }
+
+    class FloatTypeException extends RuntimeException {
+        public float value;
+
+        public FloatTypeException(final String message) {
+            super(message);
+        }
+
+        public void setValue(final float value) {
+            this.value = value;
+        }
+    }
+
+    class DoubleTypeException extends RuntimeException {
+        public double value;
+
+        public DoubleTypeException(final String message) {
+            super(message);
+        }
+
+        public void setValue(final double value) {
+            this.value = value;
+        }
+    }
+
+    class BooleanTypeException extends RuntimeException {
+        public boolean value;
+
+        public BooleanTypeException(final String message) {
+            super(message);
+        }
+
+        public void setValue(final boolean value) {
+            this.value = value;
+        }
+    }
+
+    class ByteTypeException extends RuntimeException {
+        public byte value;
+
+        public ByteTypeException(final String message) {
+            super(message);
+        }
+
+        public void setValue(final byte value) {
+            this.value = value;
+        }
+    }
+
+    class CharTypeException extends RuntimeException {
+        public char value;
+
+        public CharTypeException(final String message) {
+            super(message);
+        }
+
+        public void setValue(final char value) {
+            this.value = value;
+        }
+    }
+
+    class ClassTypeException extends RuntimeException {
+        public Class<?> value;
+
+        public ClassTypeException(final String message) {
+            super(message);
+        }
+
+        public void setValue(final Class<?> value) {
+            this.value = value;
+        }
+    }
+
+    class StringTypeException extends RuntimeException {
+        public String value;
+
+        public StringTypeException(final String message) {
+            super(message);
+        }
+
+        public void setValue(final String value) {
+            this.value = value;
+        }
+    }
+
+    class ValueType {
+    }
+}
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/MessageListHandler.java b/processor/src/test/java/org/jboss/logging/processor/generated/QueuedMessageHandler.java
similarity index 67%
rename from processor/src/test/java/org/jboss/logging/processor/generated/MessageListHandler.java
rename to processor/src/test/java/org/jboss/logging/processor/generated/QueuedMessageHandler.java
index d08b5c2..8148d4e 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/MessageListHandler.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/QueuedMessageHandler.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -22,8 +22,9 @@
 
 package org.jboss.logging.processor.generated;
 
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
 
 import org.jboss.logmanager.ExtHandler;
 import org.jboss.logmanager.ExtLogRecord;
@@ -31,17 +32,24 @@ import org.jboss.logmanager.ExtLogRecord;
 /**
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
-class MessageListHandler extends ExtHandler {
-    private final List<String> messages = new CopyOnWriteArrayList<String>();
+class QueuedMessageHandler extends ExtHandler {
+    //private final List<String> messages = Collections.synchronizedList(new ArrayList<>());
+    private final BlockingQueue<String> messages = new LinkedBlockingQueue<>();
 
     @Override
     protected void doPublish(final ExtLogRecord record) {
-        super.doPublish(record);
         messages.add(record.getFormattedMessage());
     }
 
-    String getMessage(final int index) {
-        return messages.get(index);
+    /**
+     * Polls the message from queue waiting for up to 1 second for the message to appear.
+     *
+     * @return the message
+     *
+     * @throws InterruptedException if the poll was interrupted
+     */
+    String getMessage() throws InterruptedException {
+        return messages.poll(1, TimeUnit.SECONDS);
     }
 
     int size() {
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/ExtendedLogger.java b/processor/src/test/java/org/jboss/logging/processor/generated/RootLocaleLogger.java
similarity index 72%
copy from processor/src/test/java/org/jboss/logging/processor/generated/ExtendedLogger.java
copy to processor/src/test/java/org/jboss/logging/processor/generated/RootLocaleLogger.java
index c833e5d..e8a556c 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/ExtendedLogger.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/RootLocaleLogger.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2013, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -26,16 +26,21 @@ import org.jboss.logging.Logger.Level;
 import org.jboss.logging.annotations.LogMessage;
 import org.jboss.logging.annotations.Message;
 import org.jboss.logging.annotations.MessageLogger;
-import org.jboss.logging.annotations.ValidIdRange;
 
 /**
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
- at ValidIdRange(min = 1000, max = 1500)
- at MessageLogger(projectCode = AbstractLoggerTest.PROJECT_CODE)
-public interface ExtendedLogger extends DefaultLogger {
+ at MessageLogger(projectCode = "LOCALE", rootLocale = "en-UK")
+public interface RootLocaleLogger {
+
+    @LogMessage(level = Level.INFO)
+    @Message(id = 10, value = "Initialised %s")
+    void init(Object object);
 
     @LogMessage(level = Level.ERROR)
-    @Message(id = 1000, value = "Extension error")
-    void extensionError();
+    @Message(id = 20, value = "Initialisation failed, behaviour may be unpredictable.")
+    void initFailed();
+
+    @Message(id = 50, value = "Authorisation failed for %s")
+    RuntimeException authFailed(String user);
 }
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/SignatureMessages.java b/processor/src/test/java/org/jboss/logging/processor/generated/SignatureMessages.java
index b508baa..c0b93d3 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/SignatureMessages.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/SignatureMessages.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2013, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -29,6 +29,7 @@ import org.jboss.logging.annotations.Cause;
 import org.jboss.logging.annotations.Message;
 import org.jboss.logging.annotations.MessageBundle;
 import org.jboss.logging.annotations.Param;
+import org.jboss.logging.annotations.Signature;
 import org.jboss.logging.processor.util.Objects;
 import org.jboss.logging.processor.util.Objects.HashCodeBuilder;
 
@@ -46,6 +47,9 @@ public interface SignatureMessages {
 
     RedirectException redirect(@Cause Throwable cause, @Param int responseCode, @Param String location);
 
+    @Signature({String.class, String.class})
+    RedirectException redirect(@Cause Throwable cause, @Param String location);
+
     @Message(TEST_MSG)
     TestException test();
 
@@ -56,6 +60,9 @@ public interface SignatureMessages {
 
     InvalidTextException invalidText(@Cause Throwable cause, @Param String text);
 
+    @Signature(causeIndex = 1, messageIndex = 3, value = {int.class, Throwable.class, String.class, String.class})
+    InvalidTextException invalidText(@Param int position, @Cause Throwable cause, @Param String text);
+
     @SuppressWarnings("unused")
     static class RedirectException extends RuntimeException {
         final int statusCode;
@@ -81,6 +88,12 @@ public interface SignatureMessages {
             this.location = location;
         }
 
+        public RedirectException(final String msg, final String location) {
+            super(msg);
+            this.statusCode = 301;
+            this.location = location;
+        }
+
         @Override
         public int hashCode() {
             return HashCodeBuilder.builder()
@@ -165,14 +178,17 @@ public interface SignatureMessages {
     @SuppressWarnings("unused")
     static class InvalidTextException extends RuntimeException {
         final String value;
+        final int position;
 
         public InvalidTextException(final String value) {
             this.value = value;
+            position = -1;
         }
 
         public InvalidTextException(final String msg, final String value) {
             super(msg);
             this.value = value;
+            position = -1;
         }
 
         public InvalidTextException(final Throwable cause) {
@@ -186,12 +202,24 @@ public interface SignatureMessages {
         public InvalidTextException(final String msg, final Throwable cause, final String value) {
             super(msg, cause);
             this.value = value;
+            position = -1;
+        }
+
+        public InvalidTextException(final int position, final Throwable cause, final String value, final String msg) {
+            super(msg, cause);
+            this.value = value;
+            this.position = position;
+        }
+
+        public InvalidTextException(final Integer position, final Throwable cause, final String value, final String msg) {
+            throw new IllegalStateException("Should never be chosen");
         }
 
         @Override
         public int hashCode() {
             return HashCodeBuilder.builder()
                     .add(value)
+                    .add(position)
                     .add(getMessage())
                     .add(getCause())
                     .toHashCode();
@@ -207,6 +235,7 @@ public interface SignatureMessages {
             }
             final InvalidTextException other = (InvalidTextException) obj;
             return areEqual(value, other.value) &&
+                    areEqual(position, other.position) &&
                     areEqual(getMessage(), other.getMessage()) &&
                     areEqual(getCause(), other.getCause());
         }
@@ -215,6 +244,7 @@ public interface SignatureMessages {
         public String toString() {
             return Objects.ToStringBuilder.of(this)
                     .add("value", value)
+                    .add("position", position)
                     .add("message", getMessage())
                     .add("cause", getCause())
                     .toString();
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/StringFormatLogger.java b/processor/src/test/java/org/jboss/logging/processor/generated/StringFormatLogger.java
index dd30444..0c61025 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/StringFormatLogger.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/StringFormatLogger.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/ThrowableSignatureTest.java b/processor/src/test/java/org/jboss/logging/processor/generated/ThrowableSignatureTest.java
index 80e1748..21cf83c 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/ThrowableSignatureTest.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/ThrowableSignatureTest.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2013, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -25,8 +25,8 @@ package org.jboss.logging.processor.generated;
 import org.jboss.logging.processor.generated.SignatureMessages.InvalidTextException;
 import org.jboss.logging.processor.generated.SignatureMessages.RedirectException;
 import org.jboss.logging.processor.generated.SignatureMessages.TestException;
-import org.testng.Assert;
-import org.testng.annotations.Test;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
@@ -41,19 +41,24 @@ public class ThrowableSignatureTest {
         final int code = 307;
         final String location = "foo";
         RedirectException redirectExpected = new RedirectException(formattedMessage, code, location);
-        Assert.assertEquals(SignatureMessages.MESSAGES.redirect(code, location), redirectExpected);
+        Assert.assertEquals(redirectExpected, SignatureMessages.MESSAGES.redirect(code, location));
+        redirectExpected = new RedirectException(formattedMessage, location);
+        redirectExpected.initCause(cause);
+        Assert.assertEquals(redirectExpected, SignatureMessages.MESSAGES.redirect(cause, location));
         redirectExpected = new RedirectException(formattedMessage, cause, code, location);
-        Assert.assertEquals(SignatureMessages.MESSAGES.redirect(cause, code, location), redirectExpected);
+        Assert.assertEquals(redirectExpected, SignatureMessages.MESSAGES.redirect(cause, code, location));
 
         TestException testExpected = new TestException(formattedMessage);
-        Assert.assertEquals(SignatureMessages.MESSAGES.test(), testExpected);
+        Assert.assertEquals(testExpected, SignatureMessages.MESSAGES.test());
         testExpected = new TestException(formattedMessage, cause);
-        Assert.assertEquals(SignatureMessages.MESSAGES.test(cause), testExpected);
+        Assert.assertEquals(testExpected, SignatureMessages.MESSAGES.test(cause));
 
         final String invalidText = "invalid";
         InvalidTextException invalidTextExpected = new InvalidTextException(formattedMessage, invalidText);
-        Assert.assertEquals(SignatureMessages.MESSAGES.invalidText(invalidText), invalidTextExpected);
+        Assert.assertEquals(invalidTextExpected, SignatureMessages.MESSAGES.invalidText(invalidText));
         invalidTextExpected = new InvalidTextException(formattedMessage, cause, invalidText);
-        Assert.assertEquals(SignatureMessages.MESSAGES.invalidText(cause, invalidText), invalidTextExpected);
+        Assert.assertEquals(invalidTextExpected, SignatureMessages.MESSAGES.invalidText(cause, invalidText));
+        invalidTextExpected = new InvalidTextException(3, cause, invalidText, formattedMessage);
+        Assert.assertEquals(invalidTextExpected, SignatureMessages.MESSAGES.invalidText(3, cause, invalidText));
     }
 }
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/TransformLogger.java b/processor/src/test/java/org/jboss/logging/processor/generated/TransformLogger.java
index 3ad7d46..d9f43cf 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/TransformLogger.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/TransformLogger.java
@@ -1,3 +1,25 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2016, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
 package org.jboss.logging.processor.generated;
 
 import java.util.Collection;
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/TransformMessages.java b/processor/src/test/java/org/jboss/logging/processor/generated/TransformMessages.java
index 7473424..7d48eea 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/TransformMessages.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/TransformMessages.java
@@ -1,3 +1,25 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2016, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
 package org.jboss.logging.processor.generated;
 
 import java.util.Collection;
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/TransformTest.java b/processor/src/test/java/org/jboss/logging/processor/generated/TransformTest.java
index 823756b..c35ebf2 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/TransformTest.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/TransformTest.java
@@ -1,3 +1,25 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2016, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
 package org.jboss.logging.processor.generated;
 
 import java.util.Arrays;
@@ -5,14 +27,13 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.testng.Assert;
-import org.testng.annotations.Test;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
 public class TransformTest extends AbstractLoggerTest {
-    int pos = 0;
 
     @Test
     public void testLog() throws Exception {
@@ -20,125 +41,125 @@ public class TransformTest extends AbstractLoggerTest {
         // Log strings
         final String s = "This is a test string";
         TransformLogger.LOGGER.logClassHashCode(s);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.HASH_CODE_MSG, s.getClass().hashCode()));
+        Assert.assertEquals(String.format(TransformLogger.HASH_CODE_MSG, s.getClass().hashCode()), HANDLER.getMessage());
         TransformLogger.LOGGER.logClassIdentityHashCode(s);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(s.getClass())));
+        Assert.assertEquals(String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(s.getClass())), HANDLER.getMessage());
         TransformLogger.LOGGER.logObjectClass(s);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.GET_CLASS_MSG, s.getClass()));
+        Assert.assertEquals(String.format(TransformLogger.GET_CLASS_MSG, s.getClass()), HANDLER.getMessage());
         TransformLogger.LOGGER.logObjectHashCode(s);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.HASH_CODE_MSG, s.hashCode()));
+        Assert.assertEquals(String.format(TransformLogger.HASH_CODE_MSG, s.hashCode()), HANDLER.getMessage());
         TransformLogger.LOGGER.logObjectIdentityHashCode(s);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(s)));
+        Assert.assertEquals(String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(s)), HANDLER.getMessage());
         TransformLogger.LOGGER.logSize(s);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.SIZE_MSG, s.length()));
+        Assert.assertEquals(String.format(TransformLogger.SIZE_MSG, s.length()), HANDLER.getMessage());
 
         // Log collections
         final Collection<String> c = Arrays.asList("test");
         TransformLogger.LOGGER.logClassHashCode(c);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.HASH_CODE_MSG, c.getClass().hashCode()));
+        Assert.assertEquals(String.format(TransformLogger.HASH_CODE_MSG, c.getClass().hashCode()), HANDLER.getMessage());
         TransformLogger.LOGGER.logClassIdentityHashCode(c);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(c.getClass())));
+        Assert.assertEquals(String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(c.getClass())), HANDLER.getMessage());
         TransformLogger.LOGGER.logObjectHashCode(c);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.HASH_CODE_MSG, c.hashCode()));
+        Assert.assertEquals(String.format(TransformLogger.HASH_CODE_MSG, c.hashCode()), HANDLER.getMessage());
         TransformLogger.LOGGER.logObjectIdentityHashCode(c);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(c)));
+        Assert.assertEquals(String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(c)), HANDLER.getMessage());
         TransformLogger.LOGGER.logSize(c);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.SIZE_MSG, c.size()));
+        Assert.assertEquals(String.format(TransformLogger.SIZE_MSG, c.size()), HANDLER.getMessage());
 
         // Log an array
         final Object[] array = {"test1", "test2", "test3"};
         TransformLogger.LOGGER.logClassHashCode(array);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.HASH_CODE_MSG, array.getClass().hashCode()));
+        Assert.assertEquals(String.format(TransformLogger.HASH_CODE_MSG, array.getClass().hashCode()), HANDLER.getMessage());
         TransformLogger.LOGGER.logClassIdentityHashCode(array);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(array.getClass())));
+        Assert.assertEquals(String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(array.getClass())), HANDLER.getMessage());
         TransformLogger.LOGGER.logObjectClass(array);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.GET_CLASS_MSG, array.getClass()));
+        Assert.assertEquals(String.format(TransformLogger.GET_CLASS_MSG, array.getClass()), HANDLER.getMessage());
         TransformLogger.LOGGER.logObjectHashCode(array);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.HASH_CODE_MSG, Arrays.hashCode(array)));
+        Assert.assertEquals(String.format(TransformLogger.HASH_CODE_MSG, Arrays.hashCode(array)), HANDLER.getMessage());
         TransformLogger.LOGGER.logObjectIdentityHashCode(array);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(array)));
+        Assert.assertEquals(String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(array)), HANDLER.getMessage());
         TransformLogger.LOGGER.logSize(array);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.SIZE_MSG, array.length));
+        Assert.assertEquals(String.format(TransformLogger.SIZE_MSG, array.length), HANDLER.getMessage());
 
         // Log vararg array
         final String[] sArray = {"test1", "test2", "test3"};
         TransformLogger.LOGGER.logClassHashCode(sArray);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.HASH_CODE_MSG, sArray.getClass().hashCode()));
+        Assert.assertEquals(String.format(TransformLogger.HASH_CODE_MSG, sArray.getClass().hashCode()), HANDLER.getMessage());
         TransformLogger.LOGGER.logClassIdentityHashCode(sArray);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(sArray.getClass())));
+        Assert.assertEquals(String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(sArray.getClass())), HANDLER.getMessage());
         TransformLogger.LOGGER.logObjectClass(sArray);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.GET_CLASS_MSG, sArray.getClass()));
+        Assert.assertEquals(String.format(TransformLogger.GET_CLASS_MSG, sArray.getClass()), HANDLER.getMessage());
         TransformLogger.LOGGER.logObjectHashCode(sArray);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.HASH_CODE_MSG, Arrays.hashCode(sArray)));
+        Assert.assertEquals(String.format(TransformLogger.HASH_CODE_MSG, Arrays.hashCode(sArray)), HANDLER.getMessage());
         TransformLogger.LOGGER.logObjectIdentityHashCode(sArray);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(sArray)));
+        Assert.assertEquals(String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(sArray)), HANDLER.getMessage());
         TransformLogger.LOGGER.logSize(sArray);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.SIZE_MSG, sArray.length));
+        Assert.assertEquals(String.format(TransformLogger.SIZE_MSG, sArray.length), HANDLER.getMessage());
 
         // Log a map
-        final Map<String, String> map = new HashMap<String, String>();
+        final Map<String, String> map = new HashMap<>();
         for (int i = 0; i < 10; i++) {
             map.put("key" + i, "value" + i);
         }
         TransformLogger.LOGGER.logClassHashCode(map);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.HASH_CODE_MSG, map.getClass().hashCode()));
+        Assert.assertEquals(String.format(TransformLogger.HASH_CODE_MSG, map.getClass().hashCode()), HANDLER.getMessage());
         TransformLogger.LOGGER.logClassIdentityHashCode(map);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(map.getClass())));
+        Assert.assertEquals(String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(map.getClass())), HANDLER.getMessage());
         TransformLogger.LOGGER.logObjectHashCode(map);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.HASH_CODE_MSG, map.hashCode()));
+        Assert.assertEquals(String.format(TransformLogger.HASH_CODE_MSG, map.hashCode()), HANDLER.getMessage());
         TransformLogger.LOGGER.logObjectIdentityHashCode(map);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(map)));
+        Assert.assertEquals(String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(map)), HANDLER.getMessage());
         TransformLogger.LOGGER.logSize(map);
-        Assert.assertEquals(HANDLER.getMessage(pos++), String.format(TransformLogger.SIZE_MSG, map.size()));
+        Assert.assertEquals(String.format(TransformLogger.SIZE_MSG, map.size()), HANDLER.getMessage());
     }
 
     @Test
     public void testMessage() throws Exception {
         // Log strings
         final String s = "This is a test string";
-        Assert.assertEquals(TransformMessages.MESSAGES.msgClassHashCode(s), String.format(TransformLogger.HASH_CODE_MSG, s.getClass().hashCode()));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgClassIdentityHashCode(s), String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(s.getClass())));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgObjectClass(s), String.format(TransformLogger.GET_CLASS_MSG, s.getClass()));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgObjectHashCode(s), String.format(TransformLogger.HASH_CODE_MSG, s.hashCode()));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgObjectIdentityHashCode(s), String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(s)));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgSize(s), String.format(TransformLogger.SIZE_MSG, s.length()));
+        Assert.assertEquals(String.format(TransformLogger.HASH_CODE_MSG, s.getClass().hashCode()), TransformMessages.MESSAGES.msgClassHashCode(s));
+        Assert.assertEquals(String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(s.getClass())), TransformMessages.MESSAGES.msgClassIdentityHashCode(s));
+        Assert.assertEquals(String.format(TransformLogger.GET_CLASS_MSG, s.getClass()), TransformMessages.MESSAGES.msgObjectClass(s));
+        Assert.assertEquals(String.format(TransformLogger.HASH_CODE_MSG, s.hashCode()), TransformMessages.MESSAGES.msgObjectHashCode(s));
+        Assert.assertEquals(String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(s)), TransformMessages.MESSAGES.msgObjectIdentityHashCode(s));
+        Assert.assertEquals(String.format(TransformLogger.SIZE_MSG, s.length()), TransformMessages.MESSAGES.msgSize(s));
 
         // Log collections
         final Collection<String> c = Arrays.asList("test");
-        Assert.assertEquals(TransformMessages.MESSAGES.msgClassHashCode(c), String.format(TransformLogger.HASH_CODE_MSG, c.getClass().hashCode()));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgClassIdentityHashCode(c), String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(c.getClass())));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgObjectHashCode(c), String.format(TransformLogger.HASH_CODE_MSG, c.hashCode()));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgObjectIdentityHashCode(c), String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(c)));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgSize(c), String.format(TransformLogger.SIZE_MSG, c.size()));
+        Assert.assertEquals(String.format(TransformLogger.HASH_CODE_MSG, c.getClass().hashCode()), TransformMessages.MESSAGES.msgClassHashCode(c));
+        Assert.assertEquals(String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(c.getClass())), TransformMessages.MESSAGES.msgClassIdentityHashCode(c));
+        Assert.assertEquals(String.format(TransformLogger.HASH_CODE_MSG, c.hashCode()), TransformMessages.MESSAGES.msgObjectHashCode(c));
+        Assert.assertEquals(String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(c)), TransformMessages.MESSAGES.msgObjectIdentityHashCode(c));
+        Assert.assertEquals(String.format(TransformLogger.SIZE_MSG, c.size()), TransformMessages.MESSAGES.msgSize(c));
 
         // Log an array
         final Object[] array = {"test1", "test2", "test3"};
-        Assert.assertEquals(TransformMessages.MESSAGES.msgClassHashCode(array), String.format(TransformLogger.HASH_CODE_MSG, array.getClass().hashCode()));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgClassIdentityHashCode(array), String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(array.getClass())));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgObjectClass(array), String.format(TransformLogger.GET_CLASS_MSG, array.getClass()));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgObjectHashCode(array), String.format(TransformLogger.HASH_CODE_MSG, Arrays.hashCode(array)));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgObjectIdentityHashCode(array), String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(array)));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgSize(array), String.format(TransformLogger.SIZE_MSG, array.length));
+        Assert.assertEquals(String.format(TransformLogger.HASH_CODE_MSG, array.getClass().hashCode()), TransformMessages.MESSAGES.msgClassHashCode(array));
+        Assert.assertEquals(String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(array.getClass())), TransformMessages.MESSAGES.msgClassIdentityHashCode(array));
+        Assert.assertEquals(String.format(TransformLogger.GET_CLASS_MSG, array.getClass()), TransformMessages.MESSAGES.msgObjectClass(array));
+        Assert.assertEquals(String.format(TransformLogger.HASH_CODE_MSG, Arrays.hashCode(array)), TransformMessages.MESSAGES.msgObjectHashCode(array));
+        Assert.assertEquals(String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(array)), TransformMessages.MESSAGES.msgObjectIdentityHashCode(array));
+        Assert.assertEquals(String.format(TransformLogger.SIZE_MSG, array.length), TransformMessages.MESSAGES.msgSize(array));
 
         // Log vararg array
         final String[] sArray = {"test1", "test2", "test3"};
-        Assert.assertEquals(TransformMessages.MESSAGES.msgClassHashCode(sArray), String.format(TransformLogger.HASH_CODE_MSG, sArray.getClass().hashCode()));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgClassIdentityHashCode(sArray), String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(sArray.getClass())));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgObjectClass(sArray), String.format(TransformLogger.GET_CLASS_MSG, sArray.getClass()));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgObjectHashCode(sArray), String.format(TransformLogger.HASH_CODE_MSG, Arrays.hashCode(sArray)));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgObjectIdentityHashCode(sArray), String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(sArray)));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgSize(sArray), String.format(TransformLogger.SIZE_MSG, sArray.length));
+        Assert.assertEquals(String.format(TransformLogger.HASH_CODE_MSG, sArray.getClass().hashCode()), TransformMessages.MESSAGES.msgClassHashCode(sArray));
+        Assert.assertEquals(String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(sArray.getClass())), TransformMessages.MESSAGES.msgClassIdentityHashCode(sArray));
+        Assert.assertEquals(String.format(TransformLogger.GET_CLASS_MSG, sArray.getClass()), TransformMessages.MESSAGES.msgObjectClass(sArray));
+        Assert.assertEquals(String.format(TransformLogger.HASH_CODE_MSG, Arrays.hashCode(sArray)), TransformMessages.MESSAGES.msgObjectHashCode(sArray));
+        Assert.assertEquals(String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(sArray)), TransformMessages.MESSAGES.msgObjectIdentityHashCode(sArray));
+        Assert.assertEquals(String.format(TransformLogger.SIZE_MSG, sArray.length), TransformMessages.MESSAGES.msgSize(sArray));
 
         // Log a map
-        final Map<String, String> map = new HashMap<String, String>();
+        final Map<String, String> map = new HashMap<>();
         for (int i = 0; i < 10; i++) {
             map.put("key" + i, "value" + i);
         }
-        Assert.assertEquals(TransformMessages.MESSAGES.msgClassHashCode(map), String.format(TransformLogger.HASH_CODE_MSG, map.getClass().hashCode()));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgClassIdentityHashCode(map), String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(map.getClass())));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgObjectHashCode(map), String.format(TransformLogger.HASH_CODE_MSG, map.hashCode()));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgObjectIdentityHashCode(map), String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(map)));
-        Assert.assertEquals(TransformMessages.MESSAGES.msgSize(map), String.format(TransformLogger.SIZE_MSG, map.size()));
+        Assert.assertEquals(String.format(TransformLogger.HASH_CODE_MSG, map.getClass().hashCode()), TransformMessages.MESSAGES.msgClassHashCode(map));
+        Assert.assertEquals(String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(map.getClass())), TransformMessages.MESSAGES.msgClassIdentityHashCode(map));
+        Assert.assertEquals(String.format(TransformLogger.HASH_CODE_MSG, map.hashCode()), TransformMessages.MESSAGES.msgObjectHashCode(map));
+        Assert.assertEquals(String.format(TransformLogger.IDENTITY_HASH_CODE_MSG, System.identityHashCode(map)), TransformMessages.MESSAGES.msgObjectIdentityHashCode(map));
+        Assert.assertEquals(String.format(TransformLogger.SIZE_MSG, map.size()), TransformMessages.MESSAGES.msgSize(map));
     }
 
     @Test
@@ -149,8 +170,8 @@ public class TransformTest extends AbstractLoggerTest {
         final String msg2 = "Test message 2";
         String expected = String.format(TransformLogger.POS_MSG_1, msg2.length(), msg1.hashCode(), System.identityHashCode(msg1));
         TransformLogger.LOGGER.posTest1(msg1, msg2);
-        Assert.assertEquals(HANDLER.getMessage(pos++), expected);
-        Assert.assertEquals(TransformMessages.MESSAGES.posTest1(msg1, msg2), expected);
+        Assert.assertEquals(expected, HANDLER.getMessage());
+        Assert.assertEquals(expected, TransformMessages.MESSAGES.posTest1(msg1, msg2));
 
         final Object obj = "Test";
         final String msg = "This is a test message";
@@ -158,7 +179,7 @@ public class TransformTest extends AbstractLoggerTest {
         final String s2 = "s2";
         expected = String.format(TransformLogger.POS_MSG_2, msg.length(), s1, s2, obj.getClass());
         TransformLogger.LOGGER.posTest2(obj, msg, s1, s2);
-        Assert.assertEquals(HANDLER.getMessage(pos++), expected);
-        Assert.assertEquals(TransformMessages.MESSAGES.posTest2(obj, msg, s1, s2), expected);
+        Assert.assertEquals(expected, HANDLER.getMessage());
+        Assert.assertEquals(expected, TransformMessages.MESSAGES.posTest2(obj, msg, s1, s2));
     }
 }
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/ValidLogger.java b/processor/src/test/java/org/jboss/logging/processor/generated/ValidLogger.java
index 8078cee..119b49e 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/ValidLogger.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/ValidLogger.java
@@ -1,3 +1,25 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2016, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
 package org.jboss.logging.processor.generated;
 
 import org.jboss.logging.Logger;
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/ValidMessages.java b/processor/src/test/java/org/jboss/logging/processor/generated/ValidMessages.java
index 7b689ff..4ea9b82 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/ValidMessages.java
+++ b/processor/src/test/java/org/jboss/logging/processor/generated/ValidMessages.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2012, Red Hat, Inc., and individual contributors
+ * Copyright 2016, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -22,6 +22,11 @@
 
 package org.jboss.logging.processor.generated;
 
+import java.util.Collection;
+import java.util.function.BiFunction;
+import java.util.function.Function;
+import java.util.function.Supplier;
+
 import org.jboss.logging.Messages;
 import org.jboss.logging.annotations.Cause;
 import org.jboss.logging.annotations.ConstructType;
@@ -30,7 +35,9 @@ import org.jboss.logging.annotations.Message;
 import org.jboss.logging.annotations.Message.Format;
 import org.jboss.logging.annotations.MessageBundle;
 import org.jboss.logging.annotations.Param;
+import org.jboss.logging.annotations.Producer;
 import org.jboss.logging.annotations.Property;
+import org.jboss.logging.annotations.Suppressed;
 
 /**
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
@@ -69,6 +76,72 @@ public interface ValidMessages {
     @Message("Invalid user id or password")
     RuntimeException invalidCredentials();
 
+    String SUPPRESSED_ERROR = "Single error occurred";
+
+    @Message(SUPPRESSED_ERROR)
+    RuntimeException suppressedError(@Suppressed Throwable t);
+
+    String SUPPRESSED_ERRORS = "Two errors occurred";
+
+    @Message(SUPPRESSED_ERRORS)
+    RuntimeException suppressedErrors(@Suppressed Throwable error1, @Suppressed Throwable error2);
+
+    String MULTIPLE_ERRORS = "Multiple errors occurred";
+
+    @Message(MULTIPLE_ERRORS)
+    RuntimeException multipleErrors(@Suppressed Throwable... errors);
+
+    String MULTIPLE_ERRORS_COLLECTION = "Multiple errors occurred";
+
+    @Message(MULTIPLE_ERRORS_COLLECTION)
+    RuntimeException multipleErrorsCollection(@Suppressed Collection<? extends Throwable> errors);
+
+    String TEST_MESSAGE_FORMAT = "A two argument message format test. Argument 1 is {0} argument 2 is {1}.";
+
+    @Message(format = Format.MESSAGE_FORMAT, value = TEST_MESSAGE_FORMAT)
+    String testMessageFormat(final String arg1, final String arg2);
+
+    @Message(format = Format.MESSAGE_FORMAT, value = TEST_MESSAGE_FORMAT)
+    RuntimeException testMessageFormatException(final String arg1, final String arg2);
+
+    @Message(value = TEST_MSG)
+    Supplier<RuntimeException> testSupplierRuntimeException();
+
+    @Message(TEST_MSG)
+    Supplier<CustomException> fieldMessageSupplier(@Field(name = "value") int value);
+
+    @Message(TEST_MSG)
+    Supplier<CustomException> propertyMessageSupplier(@Property int value);
+
+    @ConstructType(IllegalArgumentException.class)
+    @Message("Invalid user id or password")
+    Supplier<RuntimeException> invalidCredentialsSupplier();
+
+    @Message(value = TEST_MSG)
+    Supplier<String> testSupplierString();
+
+    String TEST_OP_FAILED_MSG = "The operation failed due to %s";
+
+    @Message(TEST_OP_FAILED_MSG)
+    <T extends Throwable> T operationFailed(@Producer Function<String, T> function, String op);
+
+    <T extends Throwable> T operationFailed(@Producer BiFunction<String, Throwable, T> function, @Cause Throwable cause, String op);
+
+    @Message(TEST_MSG)
+    <T extends RuntimeException> Supplier<T> supplierFunction(@Producer Function<String, T> function);
+
+    @Message(TEST_MSG)
+    <T extends CustomException> T fieldMessageFunction(@Producer Function<String, T> function, @Field(name = "value") int value);
+
+    @Message(TEST_MSG)
+    <T extends CustomException> T propertyMessageFunction(@Producer Function<String, T> function, @Property int value);
+
+    @Message(TEST_MSG)
+    LoggingException throwableStringBiFunction(@Producer BiFunction<Exception, String, LoggingException> function, @Cause Exception cause);
+
+    @Message(TEST_MSG)
+    <T extends RuntimeException> Supplier<T> throwableStringBiFunctionSupplier(@Producer BiFunction<String, Exception, T> function, @Cause Exception cause);
+
     class CustomException extends RuntimeException {
         public int value;
 
diff --git a/processor/src/test/java/org/jboss/logging/processor/report/ReportGenerationTest.java b/processor/src/test/java/org/jboss/logging/processor/report/ReportGenerationTest.java
new file mode 100644
index 0000000..ab06ad3
--- /dev/null
+++ b/processor/src/test/java/org/jboss/logging/processor/report/ReportGenerationTest.java
@@ -0,0 +1,127 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2016, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging.processor.report;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.validation.SchemaFactory;
+
+import org.jboss.logging.processor.apt.report.ReportType;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.XMLReader;
+
+/**
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+public class ReportGenerationTest {
+    private static String TEST_REPORT_PATH = null;
+
+    @BeforeClass
+    public static void setUp() {
+        TEST_REPORT_PATH = System.getProperty("test.report.path");
+    }
+
+    @Test
+    public void testAsciidoc() throws Exception {
+        final Collection<Path> paths = findFiles(ReportType.ASCIIDOC);
+        // Just ensure they were generated
+        Assert.assertFalse("No asciidoc files found", paths.isEmpty());
+    }
+
+    @Test
+    public void testXml() throws Exception {
+        final Collection<Path> paths = findFiles(ReportType.XML);
+        Assert.assertFalse("No XML files found", paths.isEmpty());
+        final SAXParserFactory factory = SAXParserFactory.newInstance();
+        factory.setNamespaceAware(true);
+
+        final SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
+        factory.setSchema(schemaFactory.newSchema(getClass().getResource("/schema/logging-report_1_0.xsd")));
+
+        // Crudely test each XML file
+        for (Path path : paths) {
+            final SAXParser parser = factory.newSAXParser();
+
+            final XMLReader reader = parser.getXMLReader();
+            reader.setErrorHandler(new ErrorHandler() {
+                @Override
+                public void warning(final SAXParseException exception) throws SAXException {
+                    // ignore
+                }
+
+                @Override
+                public void error(final SAXParseException exception) throws SAXException {
+                    fail(exception);
+                }
+
+                @Override
+                public void fatalError(final SAXParseException exception) throws SAXException {
+                    fail(exception);
+                }
+
+                private void fail(final SAXParseException exception) {
+                    Assert.fail(String.format("%s - Line: %d Column: %d%nPath: %s", exception.getMessage(), exception.getLineNumber(), exception.getColumnNumber(), path));
+                }
+            });
+            try (final Reader fileReader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) {
+                reader.parse(new InputSource(fileReader));
+            }
+        }
+    }
+
+    private static Collection<Path> findFiles(final ReportType reportType) throws IOException {
+
+        final Path dir = Paths.get(TEST_REPORT_PATH);
+        final List<Path> paths = new ArrayList<>();
+
+        Files.walkFileTree(dir, new SimpleFileVisitor<Path>() {
+
+            @Override
+            public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) throws IOException {
+                if (file.toString().endsWith(reportType.getExtension())) {
+                    paths.add(file);
+                }
+                return FileVisitResult.CONTINUE;
+            }
+        });
+        return paths;
+    }
+}
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/ExtendedLogger.java b/processor/src/test/java/org/jboss/logging/processor/report/TestReportLogger.java
similarity index 64%
copy from processor/src/test/java/org/jboss/logging/processor/generated/ExtendedLogger.java
copy to processor/src/test/java/org/jboss/logging/processor/report/TestReportLogger.java
index c833e5d..07c95cf 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/ExtendedLogger.java
+++ b/processor/src/test/java/org/jboss/logging/processor/report/TestReportLogger.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2013, Red Hat, Inc., and individual contributors
+ * Copyright 2017, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -20,22 +20,33 @@
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
 
-package org.jboss.logging.processor.generated;
+package org.jboss.logging.processor.report;
 
 import org.jboss.logging.Logger.Level;
 import org.jboss.logging.annotations.LogMessage;
 import org.jboss.logging.annotations.Message;
 import org.jboss.logging.annotations.MessageLogger;
-import org.jboss.logging.annotations.ValidIdRange;
+import org.jboss.logging.annotations.ResolutionDoc;
 
 /**
+ * Used for validating the XML for a {@code resolutionUrl} attribute.
+ *
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
- at ValidIdRange(min = 1000, max = 1500)
- at MessageLogger(projectCode = AbstractLoggerTest.PROJECT_CODE)
-public interface ExtendedLogger extends DefaultLogger {
+ at MessageLogger(projectCode = "RPTL", length = 5)
+ at ResolutionDoc
+public interface TestReportLogger {
+
+    @LogMessage(level = Level.INFO)
+    @Message(id = 1, value = "Test message")
+    @ResolutionDoc(suffix = ".html")
+    void containsUrl();
+
+    @LogMessage(level = Level.INFO)
+    @Message("Test message")
+    void noUrl();
 
-    @LogMessage(level = Level.ERROR)
-    @Message(id = 1000, value = "Extension error")
-    void extensionError();
+    @LogMessage(level = Level.INFO)
+    @Message(id = 2, value = "Test message")
+    void defaultResolutionUrl();
 }
diff --git a/processor/src/test/java/org/jboss/logging/processor/generated/ExtendedLogger.java b/processor/src/test/java/org/jboss/logging/processor/report/TestReportMessages.java
similarity index 61%
copy from processor/src/test/java/org/jboss/logging/processor/generated/ExtendedLogger.java
copy to processor/src/test/java/org/jboss/logging/processor/report/TestReportMessages.java
index c833e5d..b062a94 100644
--- a/processor/src/test/java/org/jboss/logging/processor/generated/ExtendedLogger.java
+++ b/processor/src/test/java/org/jboss/logging/processor/report/TestReportMessages.java
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2013, Red Hat, Inc., and individual contributors
+ * Copyright 2017, Red Hat, Inc., and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -20,22 +20,29 @@
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
 
-package org.jboss.logging.processor.generated;
+package org.jboss.logging.processor.report;
 
-import org.jboss.logging.Logger.Level;
-import org.jboss.logging.annotations.LogMessage;
+import org.jboss.logging.annotations.BaseUrl;
 import org.jboss.logging.annotations.Message;
-import org.jboss.logging.annotations.MessageLogger;
-import org.jboss.logging.annotations.ValidIdRange;
+import org.jboss.logging.annotations.MessageBundle;
+import org.jboss.logging.annotations.ResolutionDoc;
 
 /**
+ * Used for validating the XML for a {@code resolutionUrl} attribute.
  * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
  */
- at ValidIdRange(min = 1000, max = 1500)
- at MessageLogger(projectCode = AbstractLoggerTest.PROJECT_CODE)
-public interface ExtendedLogger extends DefaultLogger {
+ at BaseUrl("http://jboss.org/")
+ at MessageBundle(projectCode = "RPTM")
+public interface TestReportMessages {
 
-    @LogMessage(level = Level.ERROR)
-    @Message(id = 1000, value = "Extension error")
-    void extensionError();
+    @Message(id = 1, value = "Test message")
+    @ResolutionDoc
+    RuntimeException defaultUrl();
+
+    @Message("Test message")
+    RuntimeException noUrl();
+
+    @Message(id = 2, value = "Test message")
+    @ResolutionDoc
+    RuntimeException containsUrl();
 }
diff --git a/processor/src/test/java/org/jboss/logging/processor/util/ExpressionsTest.java b/processor/src/test/java/org/jboss/logging/processor/util/ExpressionsTest.java
new file mode 100644
index 0000000..ac3297f
--- /dev/null
+++ b/processor/src/test/java/org/jboss/logging/processor/util/ExpressionsTest.java
@@ -0,0 +1,62 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2017, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging.processor.util;
+
+import java.io.IOException;
+import java.util.Properties;
+
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * @author <a href="mailto:jperkins at redhat.com">James R. Perkins</a>
+ */
+public class ExpressionsTest {
+
+    private static final Properties PROPERTIES = new Properties();
+
+    @BeforeClass
+    public static void configureProperties() throws IOException {
+        PROPERTIES.load(ExpressionsTest.class.getResourceAsStream("/expression.properties"));
+    }
+
+    @Test
+    public void testEnvironmentVariables() throws Exception {
+        Assert.assertEquals("envValue", Expressions.resolve(PROPERTIES, "${env.JBOSS_LOGGING_TEST_VAR}"));
+        Assert.assertEquals("defaultValue", Expressions.resolve(PROPERTIES, "${env.JBOSS_LOGGING_TEST_INVALID:defaultValue}"));
+    }
+
+    @Test
+    public void testSystemProperties() {
+        Assert.assertEquals(System.getProperty("user.home"), Expressions.resolve(PROPERTIES, "${sys.user.home}"));
+        Assert.assertEquals("sysValue", Expressions.resolve(PROPERTIES, "${sys.test.property}"));
+        Assert.assertEquals("defaultValue", Expressions.resolve(PROPERTIES, "${sys.invalid.property:defaultValue}"));
+    }
+
+    @Test
+    public void testProperties() {
+        Assert.assertEquals("test property value", Expressions.resolve(PROPERTIES, "${test.property}"));
+        Assert.assertEquals("defaultValue", Expressions.resolve(PROPERTIES, "${invalid.property:defaultValue}"));
+    }
+}
diff --git a/processor/src/test/java/org/jboss/logging/processor/util/VersionComparatorTest.java b/processor/src/test/java/org/jboss/logging/processor/util/VersionComparatorTest.java
index 64c4505..bc9048a 100644
--- a/processor/src/test/java/org/jboss/logging/processor/util/VersionComparatorTest.java
+++ b/processor/src/test/java/org/jboss/logging/processor/util/VersionComparatorTest.java
@@ -1,7 +1,29 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2016, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
 package org.jboss.logging.processor.util;
 
-import org.testng.Assert;
-import org.testng.annotations.Test;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Date: 09.11.2011
diff --git a/processor/src/test/java/org/jboss/logging/processor/validation/MessageFormatValidatorTest.java b/processor/src/test/java/org/jboss/logging/processor/validation/MessageFormatValidatorTest.java
index 48afc9c..dd7ccec 100644
--- a/processor/src/test/java/org/jboss/logging/processor/validation/MessageFormatValidatorTest.java
+++ b/processor/src/test/java/org/jboss/logging/processor/validation/MessageFormatValidatorTest.java
@@ -1,8 +1,31 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2016, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
 package org.jboss.logging.processor.validation;
 
-import static org.testng.Assert.*;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
-import org.testng.annotations.Test;
+import org.junit.Test;
 
 /**
  * Date: 14.06.2011
@@ -14,10 +37,10 @@ public class MessageFormatValidatorTest {
     @Test
     public void validFormats() {
         MessageFormatValidator validator = MessageFormatValidator.of("Message {} is valid.");
-        assertTrue(validator.isValid(), validator.detailMessage());
+        assertTrue(validator.detailMessage(), validator.isValid());
 
         validator = MessageFormatValidator.of("Parameter {1} is not compatible with {2}.");
-        assertTrue(validator.isValid(), validator.detailMessage());
+        assertTrue(validator.detailMessage(), validator.isValid());
     }
 
     @Test
@@ -29,12 +52,12 @@ public class MessageFormatValidatorTest {
     @Test
     public void validateParameterCount() {
         MessageFormatValidator validator = MessageFormatValidator.of("{}", "Test");
-        assertTrue(validator.isValid(), validator.detailMessage());
+        assertTrue(validator.detailMessage(), validator.isValid());
 
         validator = MessageFormatValidator.of("{1} {0}", "Test", "Test2");
-        assertTrue(validator.isValid(), validator.detailMessage());
+        assertTrue(validator.detailMessage(), validator.isValid());
 
         validator = MessageFormatValidator.of("{0} {0}", "Test");
-        assertTrue(validator.isValid(), validator.detailMessage());
+        assertTrue(validator.detailMessage(), validator.isValid());
     }
 }
diff --git a/processor/src/test/java/org/jboss/logging/processor/validation/StringFormatValidatorTest.java b/processor/src/test/java/org/jboss/logging/processor/validation/StringFormatValidatorTest.java
index 9650eb7..83d66e3 100644
--- a/processor/src/test/java/org/jboss/logging/processor/validation/StringFormatValidatorTest.java
+++ b/processor/src/test/java/org/jboss/logging/processor/validation/StringFormatValidatorTest.java
@@ -1,10 +1,33 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2016, Red Hat, Inc., and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
 package org.jboss.logging.processor.validation;
 
-import static org.testng.Assert.*;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import java.util.Date;
 
-import org.testng.annotations.Test;
+import org.junit.Test;
 
 /**
  * Date: 14.06.2011
@@ -25,7 +48,7 @@ public class StringFormatValidatorTest {
             }
         }
         StringFormatValidator validator = StringFormatValidator.of(sb.toString());
-        assertTrue(validator.isValid(), validator.detailMessage());
+        assertTrue(validator.detailMessage(), validator.isValid());
 
         final String[] validFormats = {
                 "%1$s %1$s %1$s",
@@ -37,7 +60,7 @@ public class StringFormatValidatorTest {
         };
         for (String s : validFormats) {
             validator = StringFormatValidator.of(s);
-            assertTrue(validator.isValid(), validator.detailMessage());
+            assertTrue(validator.detailMessage(), validator.isValid());
         }
     }
 
@@ -50,10 +73,10 @@ public class StringFormatValidatorTest {
     @Test
     public void validateParameterCount() {
         StringFormatValidator validator = StringFormatValidator.of("%1$s %1$s %1$s", "Test");
-        assertTrue(validator.isValid(), validator.detailMessage());
+        assertTrue(validator.detailMessage(), validator.isValid());
 
         validator = StringFormatValidator.of("Duke's Birthday: %1$tm %1$te,%1$tY", new Date());
-        assertTrue(validator.isValid(), validator.detailMessage());
+        assertTrue(validator.detailMessage(), validator.isValid());
 
         validator = StringFormatValidator.of("Duke's Birthday: %1$tm %<te,%<tY", new Date(), new Date());
         assertFalse(validator.isValid());
@@ -62,22 +85,42 @@ public class StringFormatValidatorTest {
     @Test
     public void validateParameterTypePerPosition() {
         StringFormatValidator validator = StringFormatValidator.of("%1$s %2$d %3$s", "Test", 10, "Again");
-        assertTrue(validator.isValid(), validator.detailMessage());
+        assertTrue(validator.detailMessage(), validator.isValid());
 
         validator = StringFormatValidator.of("%3$s %1$d %2$s", "Test", 42, "order");
-        assertFalse(validator.isValid(), validator.detailMessage());
+        assertFalse(validator.detailMessage(), validator.isValid());
 
         validator = StringFormatValidator.of("%2$d %1$s", "Test", 42);
-        assertTrue(validator.isValid(), validator.detailMessage());
+        assertTrue(validator.detailMessage(), validator.isValid());
 
         validator = StringFormatValidator.of("%3$s %1$d %3$s %2$tm", 42, new Date(), "Test");
-        assertTrue(validator.isValid(), validator.detailMessage());
+        assertTrue(validator.detailMessage(), validator.isValid());
 
         validator = StringFormatValidator.of("%2$d %<d %s", "Test", 42);
-        assertTrue(validator.isValid(), validator.detailMessage());
+        assertTrue(validator.detailMessage(), validator.isValid());
 
         validator = StringFormatValidator.of("The error is %s, I repeat %1$s", "invalid");
-        assertTrue(validator.isValid(), validator.detailMessage());
+        assertTrue(validator.detailMessage(), validator.isValid());
+
+    }
 
+    @Test
+    public void translationValidation() {
+        String nonPositional = "Test param 1 %s new line %n param 2 %s%n";
+        String positional = "Test param 2 %2$s new line %n param 1 %1$s%n";
+        // If parameters are specified in the either one of the formats, the validation should pass
+        StringFormatValidator validator = StringFormatValidator.withTranslation(nonPositional, positional);
+        assertTrue(validator.detailMessage(), validator.isValid());
+
+        validator = StringFormatValidator.withTranslation(positional, nonPositional);
+        assertTrue(validator.detailMessage(), validator.isValid());
+
+        nonPositional = "Test param 1 %s percent %% param 2 %s%%%n";
+        positional = "Test param 2 %2$s percent %% param 1 %1$s%%%n";
+        validator = StringFormatValidator.withTranslation(nonPositional, positional);
+        assertTrue(validator.detailMessage(), validator.isValid());
+
+        validator = StringFormatValidator.withTranslation(positional, nonPositional);
+        assertTrue(validator.detailMessage(), validator.isValid());
     }
 }
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties b/processor/src/test/resources/expression.properties
similarity index 90%
copy from processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties
copy to processor/src/test/resources/expression.properties
index 1dc8029..b83ffd1 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties
+++ b/processor/src/test/resources/expression.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2012, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
@@ -19,5 +19,5 @@
 # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 #
-hello=Hallo %s
-howAreYou=Wie gehts %s?
+
+test.property=test property value
\ No newline at end of file
diff --git a/processor/src/test/resources/logging.properties b/processor/src/test/resources/logging.properties
index bec9c51..a73450f 100644
--- a/processor/src/test/resources/logging.properties
+++ b/processor/src/test/resources/logging.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2012, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties
index 1dc8029..058005e 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2012, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de_DE.properties
similarity index 94%
copy from processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties
copy to processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de_DE.properties
index 1dc8029..058005e 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de_DE.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2012, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_en.properties
similarity index 90%
copy from processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties
copy to processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_en.properties
index 1dc8029..9737bff 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_en.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2012, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
@@ -19,5 +19,6 @@
 # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 #
-hello=Hallo %s
-howAreYou=Wie gehts %s?
+
+hello=Hello %s
+howAreYou=How are you %s?
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_en_CA.properties
similarity index 90%
copy from processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties
copy to processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_en_CA.properties
index 1dc8029..9737bff 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_en_CA.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2012, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
@@ -19,5 +19,6 @@
 # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 #
-hello=Hallo %s
-howAreYou=Wie gehts %s?
+
+hello=Hello %s
+howAreYou=How are you %s?
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_en_UK.properties
similarity index 90%
copy from processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties
copy to processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_en_UK.properties
index 1dc8029..9737bff 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_en_UK.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2012, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
@@ -19,5 +19,6 @@
 # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 #
-hello=Hallo %s
-howAreYou=Wie gehts %s?
+
+hello=Hello %s
+howAreYou=How are you %s?
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_en_US.properties
similarity index 90%
copy from processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties
copy to processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_en_US.properties
index 1dc8029..9737bff 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_en_US.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2012, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
@@ -19,5 +19,6 @@
 # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 #
-hello=Hallo %s
-howAreYou=Wie gehts %s?
+
+hello=Hello %s
+howAreYou=How are you %s?
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_es.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_es.properties
index d093c6a..d45c30a 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_es.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_es.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2011, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr.properties
index 052fc74..4ebfa66 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2011, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr_CA.properties
similarity index 94%
copy from processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr.properties
copy to processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr_CA.properties
index 052fc74..9492205 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr_CA.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2011, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
@@ -19,5 +19,6 @@
 # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 #
+
 hello=Bonjour %s
 howAreYou=Comment êtes-vous %s?
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr_FR.properties
similarity index 94%
copy from processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr.properties
copy to processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr_FR.properties
index 052fc74..9492205 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr_FR.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2011, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
@@ -19,5 +19,6 @@
 # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 #
+
 hello=Bonjour %s
 howAreYou=Comment êtes-vous %s?
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_it.properties
similarity index 90%
copy from processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties
copy to processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_it.properties
index 1dc8029..0bdb851 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_it.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2012, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
@@ -19,5 +19,6 @@
 # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 #
-hello=Hallo %s
-howAreYou=Wie gehts %s?
+
+hello=Ciao %s
+howAreYou=Come stai %s?
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_it_IT.properties
similarity index 90%
copy from processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties
copy to processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_it_IT.properties
index 1dc8029..0bdb851 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_de.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_it_IT.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2012, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
@@ -19,5 +19,6 @@
 # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 #
-hello=Hallo %s
-howAreYou=Wie gehts %s?
+
+hello=Ciao %s
+howAreYou=Come stai %s?
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ja.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ja.properties
index 33cd679..0434324 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ja.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ja.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2012, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ja.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ja_JP.properties
similarity index 89%
copy from processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ja.properties
copy to processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ja_JP.properties
index 33cd679..0434324 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ja.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ja_JP.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2012, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ja.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ko.properties
similarity index 87%
copy from processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ja.properties
copy to processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ko.properties
index 33cd679..6916031 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ja.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ko.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2012, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
@@ -20,5 +20,5 @@
 # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 #
 
-hello=こんにちは %s
-howAreYou=\u304a\u5143\u6c17\u3067\u3059\u304b %s
\ No newline at end of file
+hello=\uc5ec\ubcf4\uc138\uc694 %s
+howAreYou=\uc798 \uc788\uc5c8 \ub2c8 %s?
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ja.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ko_KR.properties
similarity index 87%
copy from processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ja.properties
copy to processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ko_KR.properties
index 33cd679..6916031 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ja.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ko_KR.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2012, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
@@ -20,5 +20,5 @@
 # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 #
 
-hello=こんにちは %s
-howAreYou=\u304a\u5143\u6c17\u3067\u3059\u304b %s
\ No newline at end of file
+hello=\uc5ec\ubcf4\uc138\uc694 %s
+howAreYou=\uc798 \uc788\uc5c8 \ub2c8 %s?
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_zh.properties
similarity index 89%
copy from processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr.properties
copy to processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_zh.properties
index 052fc74..e683775 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_zh.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2011, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
@@ -19,5 +19,5 @@
 # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 #
-hello=Bonjour %s
-howAreYou=Comment êtes-vous %s?
+hello=\u4f60\u597d %s
+howAreYou=\u4f60\u597d\u5417 %s?
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_zh_CN.properties
similarity index 89%
copy from processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr.properties
copy to processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_zh_CN.properties
index 052fc74..e683775 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_zh_CN.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2011, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
@@ -19,5 +19,5 @@
 # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 #
-hello=Bonjour %s
-howAreYou=Comment êtes-vous %s?
+hello=\u4f60\u597d %s
+howAreYou=\u4f60\u597d\u5417 %s?
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_zh_TW.properties
similarity index 89%
copy from processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr.properties
copy to processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_zh_TW.properties
index 052fc74..0b33591 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_fr.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_zh_TW.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2011, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
@@ -19,5 +19,5 @@
 # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 #
-hello=Bonjour %s
-howAreYou=Comment êtes-vous %s?
+hello=\u4f60\u597d %s
+howAreYou=\u4f60\u597d\u55ce %s?
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultMessages.i18n_de.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultMessages.i18n_de.properties
index cad0e87..6bb88eb 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultMessages.i18n_de.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultMessages.i18n_de.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2013, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultMessages.i18n_es.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultMessages.i18n_es.properties
index d093c6a..d45c30a 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultMessages.i18n_es.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultMessages.i18n_es.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2011, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultMessages.i18n_fr.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultMessages.i18n_fr.properties
index 052fc74..4ebfa66 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultMessages.i18n_fr.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultMessages.i18n_fr.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2011, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ja.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/RootLocaleLogger.i18n_en_US.properties
similarity index 83%
copy from processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ja.properties
copy to processor/src/test/resources/org/jboss/logging/processor/generated/RootLocaleLogger.i18n_en_US.properties
index 33cd679..9e32139 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/DefaultLogger.i18n_ja.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/RootLocaleLogger.i18n_en_US.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2012, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #
@@ -20,5 +20,6 @@
 # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 #
 
-hello=こんにちは %s
-howAreYou=\u304a\u5143\u6c17\u3067\u3059\u304b %s
\ No newline at end of file
+init=Initialized %s
+initFailed=Initialization failed, behavior may be unpredictable.
+authFailed=Authorization failed for %s
\ No newline at end of file
diff --git a/processor/src/test/resources/org/jboss/logging/processor/generated/StringFormatLogger.i18n_es.properties b/processor/src/test/resources/org/jboss/logging/processor/generated/StringFormatLogger.i18n_es.properties
index cd430c8..883cf63 100644
--- a/processor/src/test/resources/org/jboss/logging/processor/generated/StringFormatLogger.i18n_es.properties
+++ b/processor/src/test/resources/org/jboss/logging/processor/generated/StringFormatLogger.i18n_es.properties
@@ -1,6 +1,6 @@
 #
 # JBoss, Home of Professional Open Source.
-# Copyright 2012, Red Hat, Inc., and individual contributors
+# Copyright 2016, Red Hat, Inc., and individual contributors
 # as indicated by the @author tags. See the copyright.txt file in the
 # distribution for a full listing of individual contributors.
 #

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/jboss-logging-tools.git



More information about the pkg-java-commits mailing list