diff --git a/bundles/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestResultsGenerator.java b/bundles/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestResultsGenerator.java
index 96afb90..88f7d3f 100644
--- a/bundles/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestResultsGenerator.java
+++ b/bundles/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestResultsGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2016 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2000, 2017 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -160,6 +160,7 @@
     private static final String XML_EXTENSION                          = ".xml";
     private static final String WARNING_SEVERITY                       = "WARNING";
     private static final String ERROR_SEVERITY                         = "ERROR";
+    private static final String INFO_SEVERITY                          = "INFO";
     private static final String ForbiddenReferenceID                   = "ForbiddenReference";
     private static final String DiscouragedReferenceID                 = "DiscouragedReference";
 
@@ -418,6 +419,10 @@
         return extractNumber(aString, "Discouraged access:");
     }
 
+    private int countInfos(final String aString) {
+        return extractNumber(aString, "info");
+    }
+
     /*
      * returns number of errors plus number of failures. returns a negative
      * number if the file is missing or something is wrong with the file (such
@@ -541,9 +546,9 @@
     }
 
     private void formatAccessesErrorRow(final String fileName, final int forbiddenAccessesWarningsCount,
-            final int discouragedAccessesWarningsCount, final StringBuffer buffer) {
+            final int discouragedAccessesWarningsCount, final int infoCount, final StringBuffer buffer) {
 
-        if ((forbiddenAccessesWarningsCount == 0) && (discouragedAccessesWarningsCount == 0)) {
+        if ((forbiddenAccessesWarningsCount == 0) && (discouragedAccessesWarningsCount == 0) && (infoCount == 0)) {
             return;
         }
 
@@ -555,7 +560,9 @@
                 .append("<td class=\"cell\" >").append("<a href=").append("\"").append(relativeName).append("#FORBIDDEN_WARNINGS")
                 .append("\">").append(forbiddenAccessesWarningsCount).append("</a>").append("</td>").append(EOL)
                 .append("<td class=\"cell\" >").append("<a href=").append("\"").append(relativeName).append("#DISCOURAGED_WARNINGS")
-                .append("\">").append(discouragedAccessesWarningsCount).append("</a>").append("</td>").append(EOL).append("</tr>")
+                .append("\">").append(discouragedAccessesWarningsCount).append("</a>").append("</td>").append(EOL)
+                .append("<td class=\"cell\" >").append("<a href=").append("\"").append(relativeName).append("#INFO_WARNINGS")
+                .append("\">").append(infoCount).append("</a>").append("</td>").append(EOL).append("</tr>")
                 .append(EOL);
     }
 
@@ -733,6 +740,7 @@
         int warningCount = 0;
         int forbiddenWarningCount = 0;
         int discouragedWarningCount = 0;
+        int infoCount = 0;
 
         final File file = new File(log);
         Document aDocument = null;
@@ -783,6 +791,9 @@
                 } else if (ERROR_SEVERITY.equals(severityNodeValue)) {
                     // this is an error
                     errorCount++;
+                } else if (INFO_SEVERITY.equals(severityNodeValue)) {
+                    // this is an info warning
+                    infoCount++;
                 }
             }
         }
@@ -799,7 +810,7 @@
         // make sure '.xml' extension is "last thing" in string. (bug 490320)
         final String logName = log.replaceAll(XML_EXTENSION + "$", HTML_EXTENSION);
         formatCompileErrorRow(logName, errorCount, warningCount, compilerLog);
-        formatAccessesErrorRow(logName, forbiddenWarningCount, discouragedWarningCount, accessesLog);
+        formatAccessesErrorRow(logName, forbiddenWarningCount, discouragedWarningCount, infoCount, accessesLog);
     }
 
     private void parseCompileLogs() throws IOException {
@@ -843,7 +854,7 @@
             compileLogResults = compileLogResults + "          </table>" + EOL + EOL
                     + "<h3 id=\"AcessErrors\">Plugins containing access errors or warnings</h3>" + EOL + "<table>" + EOL + " <tr>"
                     + EOL + "<th class='cell'>Compile Logs (Jar Files)</th>" + EOL + "   <th class='cell'>Forbidden Access</th>"
-                    + EOL + "   <th class='cell'>Discouraged Access</th>" + EOL + "</tr>" + EOL;
+                    + EOL + "   <th class='cell'>Discouraged Access</th>" + EOL + "   <th class='cell'>Info Warnings</th>" + EOL + "</tr>" + EOL;
 
             compileLogResults = compileLogResults + accessesString.toString();
             compileLogResults = compileLogResults + "</table>" + EOL;
@@ -1178,6 +1189,7 @@
         final int warningCount = countCompileWarnings(fileContents);
         final int forbiddenWarningCount = countForbiddenWarnings(fileContents);
         final int discouragedWarningCount = countDiscouragedWarnings(fileContents);
+        final int infoCount = countInfos(fileContents);
         if (errorCount != 0) {
             // use wildcard in place of version number on directory names
             String logName = log.substring(getCompileLogsDirectoryName().length() + 1);
@@ -1188,7 +1200,7 @@
             anErrorTracker.registerError(logName);
         }
         formatCompileErrorRow(log, errorCount, warningCount, compilerLog);
-        formatAccessesErrorRow(log, forbiddenWarningCount, discouragedWarningCount, accessesLog);
+        formatAccessesErrorRow(log, forbiddenWarningCount, discouragedWarningCount, infoCount, accessesLog);
     }
 
     private String readFile(final String fileName) {
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/Converter.java b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/Converter.java
index fef2296..a17a827 100644
--- a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/Converter.java
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/Converter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2016 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2000, 2017 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -23,6 +23,7 @@
 import org.eclipse.releng.build.tools.convert.dom.IDOMConverter;
 import org.eclipse.releng.build.tools.convert.dom.LogDocumentNode;
 import org.eclipse.releng.build.tools.convert.dom.ProblemNode;
+import org.eclipse.releng.build.tools.convert.dom.SeverityType;
 import org.eclipse.releng.build.tools.convert.dom.ProblemSummaryNode;
 import org.eclipse.releng.build.tools.convert.dom.ProblemsNode;
 import org.w3c.dom.Document;
@@ -289,6 +290,7 @@
             summaryNode.numberOfProblems = Integer.parseInt(problemSummaryMap.getNamedItem("problems").getNodeValue()); //$NON-NLS-1$
             summaryNode.numberOfErrors = Integer.parseInt(problemSummaryMap.getNamedItem("errors").getNodeValue()); //$NON-NLS-1$
             summaryNode.numberOfWarnings = Integer.parseInt(problemSummaryMap.getNamedItem("warnings").getNodeValue()); //$NON-NLS-1$
+            summaryNode.numberOfInfos = Integer.parseInt(problemSummaryMap.getNamedItem("infos").getNodeValue()); //$NON-NLS-1$
         }
 
         nodeList = document.getElementsByTagName("problems"); //$NON-NLS-1$
@@ -310,6 +312,8 @@
             node.numberOfErrors = Integer.parseInt(problemsNodeMap.getNamedItem("errors").getNodeValue());//$NON-NLS-1$
             node.numberOfWarnings = Integer.parseInt(problemsNodeMap.getNamedItem("warnings").getNodeValue());//$NON-NLS-1$
             node.numberOfProblems = Integer.parseInt(problemsNodeMap.getNamedItem("problems").getNodeValue());//$NON-NLS-1$
+            node.numberOfInfos = Integer.parseInt(problemsNodeMap.getNamedItem("infos").getNodeValue());//$NON-NLS-1$
+
 
             final NodeList children = problemsNode.getChildNodes();
             final int childrenLength = children.getLength();
@@ -318,20 +322,29 @@
                 final NamedNodeMap problemNodeMap = problemNode.getAttributes();
                 final String severity = problemNodeMap.getNamedItem("severity").getNodeValue();//$NON-NLS-1$
                 final ProblemNode problem = new ProblemNode();
-                final boolean isError = "ERROR".equals(severity);//$NON-NLS-1$
-                problem.isError = isError;
                 problem.id = problemNodeMap.getNamedItem("id").getNodeValue();//$NON-NLS-1$
-                if (isError) {
+                switch (severity) {
+                  case "ERROR":
+                    problem.severityType = SeverityType.ERROR;
                     node.addError(problem);
-                } else if (AbstractDOMConverter.FILTERED_WARNINGS_IDS.contains(problem.id)) {
-                    if (AbstractDOMConverter.FORBIDDEN_REFERENCE.equals(problem.id)) {
-                        node.addForbiddenWarning(problem);
+                    break;
+                  case "INFO": 
+                    problem.severityType = SeverityType.INFO;
+                    node.addInfo(problem);
+                    break;
+                  case "WARNING":
+                    problem.severityType = SeverityType.WARNING;
+                    if (AbstractDOMConverter.FILTERED_WARNINGS_IDS.contains(problem.id)) {
+                      if (AbstractDOMConverter.FORBIDDEN_REFERENCE.equals(problem.id)) {
+                          node.addForbiddenWarning(problem);
+                      } else {
+                          node.addDiscouragedWarning(problem);
+                      }
                     } else {
-                        node.addDiscouragedWarning(problem);
+                      node.addOtherWarning(problem);
                     }
-                } else {
-                    node.addOtherWarning(problem);
-                }
+                    break;
+                }  
                 problem.charStart = Integer.parseInt(problemNodeMap.getNamedItem("charStart").getNodeValue());//$NON-NLS-1$
                 problem.charEnd = Integer.parseInt(problemNodeMap.getNamedItem("charEnd").getNodeValue());//$NON-NLS-1$
                 problem.line = Integer.parseInt(problemNodeMap.getNamedItem("line").getNodeValue());//$NON-NLS-1$
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/html_messages.properties b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/html_messages.properties
index a4807e9..cc9cd77 100644
--- a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/html_messages.properties
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/html_messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2007 IBM Corporation and others.
+# Copyright (c) 2000, 2017 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -33,6 +33,7 @@
 # {1} number of problems
 # {2} number of errors
 # {3} number of warnings
+# {4} number of infos
 problems.footer=
 
 errors.title_anchor=<a name="ERROR"></a><h1>ERRORS</h1>\n
@@ -61,6 +62,12 @@
 discouraged_warnings.header=<h4>{0} : {1} :</h4>\n<table width="60%" style="border-color: #000000;" border="1" cellpadding="5">\n<caption><b><font color="#CC6633">DISCOURAGED ACCESS WARNINGS</font></b></caption>\n
 discouraged_warnings.footer=</table>\n
 
+infos.title_anchor=<a name="INFO_WARNINGS"></a><h1>INFO WARNINGS</h1>\n
+# {0] source file name
+# {1} number of warnings
+infos.header=<h4>{0} : {1} :</h4>\n<table width="60%" style="border-color: #000000;" border="1" cellpadding="5">\n<caption><b><font color="#CC6633">INFO WARNINGS</font></b></caption>\n
+infos.footer=</table>\n
+
 # {0} source file name
 # {1} global error number
 # {2} error number
@@ -141,10 +148,51 @@
 \	</td>\n\
 \</tr>\n
 
+# {0} source file name
+# {1} global error number
+# {2} error number
+# {3} error id
+# {4} line number of the error
+# {5} error message
+# {6} source code before this error
+# {7} source code corresponding to this error
+# {8} source code after this error
+# {9} complement to underline the problem
+# {10} starting position of the error
+# {11} ending position of the error
+infos.entry.even=<tr>\n\
+\	<td align=left valign=top>{2}.&nbsp;INFO&nbsp;in&nbsp;{0}<br/>\n\
+\		&nbsp;(at line {4})<br/>\n\
+\		{6}<b>{7}</b>{8}<br/>\n\
+\		<i>{5}</i>\n\
+\	</td>\n\
+\</tr>\n
+
+# {0} source file name
+# {1} global error number
+# {2} error number
+# {3} error id
+# {4} line number of the error
+# {5} error message
+# {6} source code before this error
+# {7} source code corresponding to this error
+# {8} source code after this error
+# {9} complement to underline the problem
+# {10} starting position of the error
+# {11} ending position of the error
+infos.entry.odd=<tr>\n\
+\	<td align=left valign=top>{2}.&nbsp;INFO&nbsp;in&nbsp;{0}<br/>\n\
+\		&nbsp;(at line {4})<br/>\n\
+\		{6}<b>{7}</b>{8}<br/>\n\
+\		<i>{5}</i>\n\
+\	</td>\n\
+\</tr>\n
+
 # {0} global number of problems
 # {1} global number of errors
 # {2} global number of warnings
-problem.summary=<h3><u><b>TOTAL</b></u>&nbsp;:&nbsp;ERRORS:&nbsp;{1},&nbsp;WARNINGS:&nbsp;{2}</h3>\n
+# {3} global number of infos
+problem.summary=<h3><u><b>TOTAL</b></u>&nbsp;:&nbsp;ERRORS:&nbsp;{1},&nbsp;WARNINGS:&nbsp;{2},&nbsp;INFOS:&nbsp;{3}</h3>\n
 
 problem.summary.title_anchor=<a name="TOP"></a>\n
 
@@ -153,6 +201,7 @@
 <tr>\n\
 <td><a href="#ERROR">errors</a></td>\n\
 <td><a href="#OTHER_WARNINGS">others warnings</a></td>\n\
+<td><a href="#INFO_WARNINGS">infos</a></td>\n\
 <td><a href="#FORBIDDEN_WARNINGS">forbidden warnings</a></td>\n\
 <td><a href="#DISCOURAGED_WARNINGS">discouraged warnings</a></td>\n\
 </tr>\n\
@@ -163,6 +212,7 @@
 <tr>\n\
 <td><a href="#TOP">top</a></td>\n\
 <td><a href="#OTHER_WARNINGS">others warnings</a></td>\n\
+<td><a href="#INFO_WARNINGS">infos</a></td>\n\
 <td><a href="#FORBIDDEN_WARNINGS">forbidden warnings</a></td>\n\
 <td><a href="#DISCOURAGED_WARNINGS">discouraged warnings</a></td>\n\
 </tr>\n\
@@ -173,6 +223,17 @@
 <tr>\n\
 <td><a href="#TOP">top</a></td>\n\
 <td><a href="#ERROR">errors</a></td>\n\
+<td><a href="#INFO_WARNINGS">infos</a></td>\n\
+<td><a href="#FORBIDDEN_WARNINGS">forbidden warnings</a></td>\n\
+<td><a href="#DISCOURAGED_WARNINGS">discouraged warnings</a></td>\n\
+</tr>\n\
+</table>\n
+
+anchors.references.no_infos=\n\
+<table>\n\
+<tr>\n\
+<td><a href="#ERROR">errors</a></td>\n\
+<td><a href="#OTHER_WARNINGS">others warnings</a></td>\n\
 <td><a href="#FORBIDDEN_WARNINGS">forbidden warnings</a></td>\n\
 <td><a href="#DISCOURAGED_WARNINGS">discouraged warnings</a></td>\n\
 </tr>\n\
@@ -183,6 +244,7 @@
 <tr>\n\
 <td><a href="#TOP">top</a></td>\n\
 <td><a href="#ERROR">errors</a></td>\n\
+<td><a href="#INFO_WARNINGS">infos</a></td>\n\
 <td><a href="#OTHER_WARNINGS">others warnings</a></td>\n\
 <td><a href="#DISCOURAGED_WARNINGS">discouraged warnings</a></td>\n\
 </tr>\n\
@@ -193,6 +255,7 @@
 <tr>\n\
 <td><a href="#TOP">top</a></td>\n\
 <td><a href="#ERROR">errors</a></td>\n\
+<td><a href="#INFO_WARNINGS">infos</a></td>\n\
 <td><a href="#OTHER_WARNINGS">others warnings</a></td>\n\
 <td><a href="#FORBIDDEN_WARNINGS">forbidden warnings</a></td>\n\
 </tr>\n\
@@ -202,4 +265,7 @@
 multiple_warnings={1,number} warnings
 
 one_error=1 error
-multiple_errors={1,number} errors
\ No newline at end of file
+multiple_errors={1,number} errors
+
+one_info=1 info
+multiple_infos={1,number} infos
\ No newline at end of file
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/txt_messages.properties b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/txt_messages.properties
index 99b2974..4786c45 100644
--- a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/txt_messages.properties
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/txt_messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2007 IBM Corporation and others.
+# Copyright (c) 2000, 2017 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -17,13 +17,15 @@
 # {1} number of problems
 # {2} number of errors
 # {3} number of warnings
+# {4} number of infos
 
 problems.header=----------\n
 # {0] source file name
 # {1} number of problems
 # {2} number of errors
 # {3} number of warnings
-problems.footer={1} problem(s) ({2} error(s), {3} warning(s))
+# {4} number of infos
+problems.footer={1} problem(s) ({2} error(s), {3} warning(s), {4} info(s))
 
 errors.header=
 errors.footer=
@@ -103,8 +105,45 @@
 {5}\n\
 ----------\n
 
+# {0} source file name
+# {1} global error number
+# {2} error number
+# {3} error id
+# {4} line number of the error
+# {5} error message
+# {6} source code before this error
+# {7} source code corresponding to this error
+# {8} source code after this error
+# {9} complement to underline the problem
+# {10} starting position of the error
+# {11} ending position of the error
+infos.entry.odd={1}. INFO in {0}\n\
+ (at line {4})\n\
+\	{6}{7}{8}\n\	{9}\n\
+{5}\n\
+----------\n
+
+# {0} source file name
+# {1} global error number
+# {2} error number
+# {3} error id
+# {4} line number of the error
+# {5} error message
+# {6} source code before this error
+# {7} source code corresponding to this error
+# {8} source code after this error
+# {9} complement to underline the problem
+# {10} starting position of the error
+# {11} ending position of the error
+infos.entry.even={1}. INFO in {0}\n\
+ (at line {4})\n\
+\	{6}{7}{8}\n\	{9}\n\
+{5}\n\
+----------\n
+
 # {0} global number of problems
 # {1} global number of errors
 # {2} global number of warnings
-# {3} global number of tasks
-problem_summary={0} problem(s) ({1} error(s), {2} warning(s))
\ No newline at end of file
+# {3} global number of infos
+# {4} global number of tasks
+problem_summary={0} problem(s) ({1} error(s), {2} warning(s), {3} info(s))
\ No newline at end of file
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/AbstractDOMConverter.java b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/AbstractDOMConverter.java
index 2e585d1..4db915c 100644
--- a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/AbstractDOMConverter.java
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/AbstractDOMConverter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2016 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2006, 2017 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -90,7 +90,8 @@
             writeTopAnchor(writer);
             String pattern = messages.getString("problem.summary"); //$NON-NLS-1$
             writer.write(MessageFormat.format(pattern, new Object[] { Integer.toString(problemSummaryNode.numberOfProblems),
-                    Integer.toString(problemSummaryNode.numberOfErrors), Integer.toString(problemSummaryNode.numberOfWarnings) }));
+                    Integer.toString(problemSummaryNode.numberOfErrors), Integer.toString(problemSummaryNode.numberOfWarnings), 
+                    Integer.toString(problemSummaryNode.numberOfInfos)}));
 
             writeAnchorsReferences(writer);
             final ProblemsNode[] problemsNodes = documentNode.getProblems();
@@ -182,6 +183,49 @@
                 writer.write(messages.getString("other_warnings.footer")); //$NON-NLS-1$
             }
 
+            // dump infos
+            writeInfosAnchor(writer);
+            writeAnchorsReferencesInfos(writer);
+            for (int i = 0, max = problemsNodes.length; i < max; i++) {
+                final ProblemsNode problemsNode = problemsNodes[i];
+                final ProblemNode[] problemNodes = problemsNode.getInfos();
+                final int length = problemNodes.length;
+                if (length == 0) {
+                    continue;
+                }
+
+                pattern = messages.getString("infos.header"); //$NON-NLS-1$
+                final MessageFormat form = new MessageFormat(pattern);
+                final double[] warningsLimits = { 1, 2 };
+                final String[] warningParts = { messages.getString("one_info"),//$NON-NLS-1$
+                        messages.getString("multiple_infos") //$NON-NLS-1$
+                };
+                final ChoiceFormat warningForm = new ChoiceFormat(warningsLimits, warningParts);
+                final String sourceFileName = extractRelativePath(problemsNode.sourceFileName, pluginName);
+                form.setFormatByArgumentIndex(1, warningForm);
+                final Object[] arguments = new Object[] { sourceFileName, new Integer(problemsNode.numberOfInfos), };
+                writer.write(form.format(arguments));
+                for (int j = 0; j < length; j++) {
+                    final ProblemNode problemNode = problemNodes[j];
+                    if ((j & 1) != 0) {
+                        pattern = messages.getString("infos.entry.odd"); //$NON-NLS-1$
+                    } else {
+                        pattern = messages.getString("infos.entry.even"); //$NON-NLS-1$
+                    }
+                    problemNode.setSources();
+                    writer.write(MessageFormat.format(
+                            pattern,
+                            new Object[] { sourceFileName, Integer.toString(globalErrorNumber), Integer.toString(j + 1),
+                                    problemNode.id, Integer.toString(problemNode.line), convertToHTML(problemNode.message),
+                                    convertToHTML(problemNode.sourceCodeBefore), convertToHTML(problemNode.sourceCode),
+                                    convertToHTML(problemNode.sourceCodeAfter),
+                                    getUnderLine(problemNode.sourceCodeBefore, problemNode.sourceCodeAfter),
+                                    Integer.toString(problemNode.charStart), Integer.toString(problemNode.charEnd), }));
+                    globalErrorNumber++;
+                }
+                writer.write(messages.getString("infos.footer")); //$NON-NLS-1$
+            }
+
             // dump forbidden accesses warnings
             writeForbiddenRulesWarningsAnchor(writer);
             writeAnchorsReferencesForbiddenRulesWarnings(writer);
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/DOMHtmlConverter.java b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/DOMHtmlConverter.java
index facefb9..80eb279 100644
--- a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/DOMHtmlConverter.java
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/DOMHtmlConverter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2016 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2006, 2017 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -53,6 +53,11 @@
     }
 
     @Override
+    public void writeAnchorsReferencesInfos(final Writer writer) throws IOException {
+        writer.write(messages.getString("anchors.references.no_infos"));//$NON-NLS-1$
+    }
+    
+    @Override
     public void writeDiscouragedRulesWarningsAnchor(final Writer writer) throws IOException {
         writer.write(messages.getString("discouraged_warnings.title_anchor"));//$NON-NLS-1$
     }
@@ -73,6 +78,11 @@
     }
 
     @Override
+    public void writeInfosAnchor(final Writer writer) throws IOException {
+        writer.write(messages.getString("infos.title_anchor"));//$NON-NLS-1$
+    }
+
+    @Override
     public void writeTopAnchor(final Writer writer) throws IOException {
         writer.write(messages.getString("problem.summary.title_anchor"));//$NON-NLS-1$
     }
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/DOMTxtConverter.java b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/DOMTxtConverter.java
index e2c9348..313466c 100644
--- a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/DOMTxtConverter.java
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/DOMTxtConverter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2016 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2006, 2017 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -89,4 +89,16 @@
     public void writeTopAnchor(final Writer writer) throws IOException {
         // do nothing
     }
+
+    @Override
+    public void writeAnchorsReferencesInfos(Writer writer) throws IOException {
+      // do nothing
+      
+    }
+
+    @Override
+    public void writeInfosAnchor(Writer writer) throws IOException {
+      // do nothing
+      
+    }
 }
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/IDOMConverter.java b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/IDOMConverter.java
index 79ef809..057aaab 100644
--- a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/IDOMConverter.java
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/IDOMConverter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2006, 2017 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -38,4 +38,8 @@
     void writeOtherWarningsAnchor(Writer writer) throws IOException;
 
     void writeTopAnchor(Writer writer) throws IOException;
+
+    void writeAnchorsReferencesInfos(Writer writer) throws IOException;
+
+    void writeInfosAnchor(Writer writer) throws IOException;
 }
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemNode.java b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemNode.java
index c41df8a..3a0655b 100644
--- a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemNode.java
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2006, 2017 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -13,7 +13,7 @@
 
     protected static final String EMPTY = "";         //$NON-NLS-1$
 
-    public boolean                isError;
+    public SeverityType           severityType;
     public int                    charStart;
     public int                    charEnd;
     public int                    line;
@@ -58,7 +58,17 @@
     @Override
     public String toString() {
         final StringBuffer buffer = new StringBuffer();
-        buffer.append(isError ? "ERROR " : "WARNING "); //$NON-NLS-1$//$NON-NLS-2$
+        switch (severityType) {
+          case ERROR : 
+            buffer.append("ERROR ");//$NON-NLS-1$
+            break;
+          case WARNING : 
+            buffer.append("WARNING ");//$NON-NLS-1$
+            break;
+          case INFO : 
+            buffer.append("INFO ");//$NON-NLS-1$
+            break;
+        }
         buffer.append("line : ").append(line).append(" message = ").append(message);//$NON-NLS-1$//$NON-NLS-2$
         return buffer.toString();
     }
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemSummaryNode.java b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemSummaryNode.java
index ac77d03..2072cc7 100644
--- a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemSummaryNode.java
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemSummaryNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2006, 2017 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -14,6 +14,7 @@
     public int numberOfProblems;
     public int numberOfErrors;
     public int numberOfWarnings;
+    public int numberOfInfos;
 
     @Override
     public String toString() {
@@ -21,7 +22,8 @@
         buffer.append("problems : ") //$NON-NLS-1$
                 .append(numberOfProblems).append(" errors : ") //$NON-NLS-1$
                 .append(numberOfErrors).append(" warnings : ") //$NON-NLS-1$
-                .append(numberOfWarnings);
+                .append(numberOfWarnings).append(" infos : ") //$NON_NLS-1$
+                .append(numberOfInfos);
         return buffer.toString();
     }
 }
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemsNode.java b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemsNode.java
index 5be9407..5007031 100644
--- a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemsNode.java
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemsNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2016 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2006, 2017 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -19,15 +19,18 @@
     public int                         numberOfProblems;
     public int                         numberOfErrors;
     public int                         numberOfWarnings;
+    public int                         numberOfInfos;
 
     private ArrayList<ProblemNode>     errorNodes;
-    private ArrayList<ProblemNode>                  otherWarningNodes;
+    private ArrayList<ProblemNode>     otherWarningNodes;
     private ArrayList<ProblemNode>     discouragedWarningsNodes;
     private ArrayList<ProblemNode>     forbiddenWarningsNodes;
+    private ArrayList<ProblemNode>     infoNodes;
     private ProblemNode[]              errors;
     private ProblemNode[]              otherWarnings;
     private ProblemNode[]              discouragedWarnings;
     private ProblemNode[]              forbiddenWarnings;
+    private ProblemNode[]              infos;
 
     public void addDiscouragedWarning(final ProblemNode node) {
         if (discouragedWarningsNodes == null) {
@@ -57,6 +60,13 @@
         otherWarningNodes.add(node);
     }
 
+    public void addInfo(final ProblemNode node) {
+      if (infoNodes == null) {
+          infoNodes = new ArrayList<>();
+      }
+      infoNodes.add(node);
+    }
+
     public ProblemNode[] getDiscouragedWarnings() {
         if (discouragedWarnings != null) {
             return discouragedWarnings;
@@ -104,4 +114,16 @@
         otherWarningNodes.toArray(otherWarnings);
         return otherWarnings;
     }
+
+    public ProblemNode[] getInfos() {
+      if (infos != null) {
+          return infos;
+      }
+      if (infoNodes == null) {
+          return infos = EMPTY_NODES;
+      }
+      infos = new ProblemNode[infoNodes.size()];
+      infoNodes.toArray(infos);
+      return infos;
+  }
 }
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/SeverityType.java b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/SeverityType.java
new file mode 100644
index 0000000..03a8dca
--- /dev/null
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/SeverityType.java
@@ -0,0 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2017 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.releng.build.tools.convert.dom;
+
+
+public enum SeverityType {
+
+  ERROR, WARNING, INFO;
+}
\ No newline at end of file
