Merge
authorzmajo
Mon, 14 Mar 2016 17:51:25 +0100
changeset 36605 59b58343d358
parent 36604 e9c073b0c19e (current diff)
parent 36567 03a6f39ebb73 (diff)
child 36606 8167f548e63c
child 36607 dc9021790941
Merge
jaxp/test/javax/xml/jaxp/unittest/transform/Bug4693341.out
jaxp/test/javax/xml/jaxp/unittest/transform/Bug4693341_golden.dtd
jaxp/test/javax/xml/jaxp/unittest/transform/Bug4693341_golden.xml
jaxp/test/javax/xml/jaxp/unittest/transform/Bug6505031.java
jdk/make/lib/Lib-jdk.deploy.osx.gmk
jdk/make/mapfiles/libjfr/mapfile-vers
jdk/src/java.base/share/classes/sun/misc/ASCIICaseInsensitiveComparator.java
jdk/src/jdk.deploy.osx/macosx/classes/com/apple/concurrent/Dispatch.java
jdk/src/jdk.deploy.osx/macosx/classes/com/apple/concurrent/LibDispatchConcurrentQueue.java
jdk/src/jdk.deploy.osx/macosx/classes/com/apple/concurrent/LibDispatchMainQueue.java
jdk/src/jdk.deploy.osx/macosx/classes/com/apple/concurrent/LibDispatchNative.java
jdk/src/jdk.deploy.osx/macosx/classes/com/apple/concurrent/LibDispatchQueue.java
jdk/src/jdk.deploy.osx/macosx/classes/com/apple/concurrent/LibDispatchRetainedResource.java
jdk/src/jdk.deploy.osx/macosx/classes/com/apple/concurrent/LibDispatchSerialQueue.java
jdk/src/jdk.deploy.osx/macosx/classes/com/apple/concurrent/package.html
jdk/src/jdk.deploy.osx/macosx/native/libosx/CFileManager.m
jdk/src/jdk.deploy.osx/macosx/native/libosx/Dispatch.m
jdk/test/javax/swing/JScrollPane/8033000/bug8033000.java
langtools/test/tools/javac/TestIndyStringConcat.java
--- a/.hgtags	Mon Mar 14 12:35:52 2016 +0300
+++ b/.hgtags	Mon Mar 14 17:51:25 2016 +0100
@@ -351,3 +351,4 @@
 6c644cca3f3fc2763e2ff7d669849a75d34543ba jdk-9+106
 1c076468bf7dad5b8f2ee5dcf66e2279caa3e208 jdk-9+107
 257b579d813201682931d6b42f0445ffe5b4210d jdk-9+108
+c870cb782aca71093d2584376f27f0cfbfec0e3a jdk-9+109
--- a/.hgtags-top-repo	Mon Mar 14 12:35:52 2016 +0300
+++ b/.hgtags-top-repo	Mon Mar 14 17:51:25 2016 +0100
@@ -351,3 +351,4 @@
 54575d8783b3a39a2d710c28cda675d44261f9d9 jdk-9+106
 4d65eba233a8730f913734a6804910b842d2cb54 jdk-9+107
 c7be2a78c31b3b6132f2f5e9e4b3d3bb1c20245c jdk-9+108
+1787bdaabb2b6f4193406e25a50cb0419ea8e8f3 jdk-9+109
--- a/common/autoconf/generated-configure.sh	Mon Mar 14 12:35:52 2016 +0300
+++ b/common/autoconf/generated-configure.sh	Mon Mar 14 17:51:25 2016 +0100
@@ -4005,7 +4005,7 @@
     devkit)
       PKGHANDLER_COMMAND="sudo apt-get install build-essential" ;;
     openjdk)
-      PKGHANDLER_COMMAND="sudo apt-get install openjdk-7-jdk" ;;
+      PKGHANDLER_COMMAND="sudo apt-get install openjdk-8-jdk" ;;
     alsa)
       PKGHANDLER_COMMAND="sudo apt-get install libasound2-dev" ;;
     cups)
@@ -4026,7 +4026,7 @@
     devkit)
       PKGHANDLER_COMMAND="sudo yum groupinstall \"Development Tools\"" ;;
     openjdk)
-      PKGHANDLER_COMMAND="sudo yum install java-1.7.0-openjdk" ;;
+      PKGHANDLER_COMMAND="sudo yum install java-1.8.0-openjdk-devel" ;;
     alsa)
       PKGHANDLER_COMMAND="sudo yum install alsa-lib-devel" ;;
     cups)
@@ -4862,7 +4862,7 @@
 #CUSTOM_AUTOCONF_INCLUDE
 
 # Do not change or remove the following line, it is needed for consistency checks:
-DATE_WHEN_GENERATED=1456136781
+DATE_WHEN_GENERATED=1457684806
 
 ###############################################################################
 #
@@ -15118,6 +15118,10 @@
     REQUIRED_OS_NAME=Darwin
     REQUIRED_OS_VERSION=11.2
   fi
+  if test "x$OPENJDK_TARGET_OS" = "xaix"; then
+    REQUIRED_OS_NAME=AIX
+    REQUIRED_OS_VERSION=7.1
+  fi
 
 
 
--- a/common/autoconf/help.m4	Mon Mar 14 12:35:52 2016 +0300
+++ b/common/autoconf/help.m4	Mon Mar 14 17:51:25 2016 +0100
@@ -106,7 +106,7 @@
     devkit)
       PKGHANDLER_COMMAND="sudo apt-get install build-essential" ;;
     openjdk)
-      PKGHANDLER_COMMAND="sudo apt-get install openjdk-7-jdk" ;;
+      PKGHANDLER_COMMAND="sudo apt-get install openjdk-8-jdk" ;;
     alsa)
       PKGHANDLER_COMMAND="sudo apt-get install libasound2-dev" ;;
     cups)
@@ -127,7 +127,7 @@
     devkit)
       PKGHANDLER_COMMAND="sudo yum groupinstall \"Development Tools\"" ;;
     openjdk)
-      PKGHANDLER_COMMAND="sudo yum install java-1.7.0-openjdk" ;;
+      PKGHANDLER_COMMAND="sudo yum install java-1.8.0-openjdk-devel" ;;
     alsa)
       PKGHANDLER_COMMAND="sudo yum install alsa-lib-devel" ;;
     cups)
--- a/common/autoconf/platform.m4	Mon Mar 14 12:35:52 2016 +0300
+++ b/common/autoconf/platform.m4	Mon Mar 14 17:51:25 2016 +0100
@@ -406,6 +406,10 @@
     REQUIRED_OS_NAME=Darwin
     REQUIRED_OS_VERSION=11.2
   fi
+  if test "x$OPENJDK_TARGET_OS" = "xaix"; then
+    REQUIRED_OS_NAME=AIX
+    REQUIRED_OS_VERSION=7.1
+  fi
 
   AC_SUBST(REQUIRED_OS_NAME)
   AC_SUBST(REQUIRED_OS_VERSION)
--- a/common/bin/compare_exceptions.sh.incl	Mon Mar 14 12:35:52 2016 +0300
+++ b/common/bin/compare_exceptions.sh.incl	Mon Mar 14 17:51:25 2016 +0100
@@ -185,7 +185,6 @@
       ./lib/amd64/libjava.so
       ./lib/amd64/libjawt.so
       ./lib/amd64/libjdwp.so
-      ./lib/amd64/libjfr.so
       ./lib/amd64/libjpeg.so
       ./lib/amd64/libjsdt.so
       ./lib/amd64/libjsound.so
@@ -321,7 +320,6 @@
       ./lib/sparcv9/libjava.so
       ./lib/sparcv9/libjawt.so
       ./lib/sparcv9/libjdwp.so
-      ./lib/sparcv9/libjfr.so
       ./lib/sparcv9/libjpeg.so
       ./lib/sparcv9/libjsdt.so
       ./lib/sparcv9/libjsound.so
--- a/common/bin/unshuffle_list.txt	Mon Mar 14 12:35:52 2016 +0300
+++ b/common/bin/unshuffle_list.txt	Mon Mar 14 17:51:25 2016 +0100
@@ -1293,12 +1293,8 @@
 jdk/src/jdk.crypto.pkcs11/windows/native/libj2pkcs11/j2secmod_md.h : jdk/src/windows/native/sun/security/pkcs11/j2secmod_md.h
 jdk/src/jdk.crypto.pkcs11/windows/native/libj2pkcs11/p11_md.c : jdk/src/windows/native/sun/security/pkcs11/wrapper/p11_md.c
 jdk/src/jdk.crypto.pkcs11/windows/native/libj2pkcs11/p11_md.h : jdk/src/windows/native/sun/security/pkcs11/wrapper/p11_md.h
-jdk/src/jdk.deploy.osx/macosx/classes/com/apple/concurrent/package.html : jdk/src/macosx/classes/com/apple/concurrent/package.html
-jdk/src/jdk.deploy.osx/macosx/classes/com/apple/concurrent : jdk/src/macosx/classes/com/apple/concurrent
-jdk/src/jdk.deploy.osx/macosx/native/libosx/CFileManager.m : jdk/src/macosx/native/com/apple/eio/CFileManager.m
-jdk/src/jdk.deploy.osx/macosx/native/libosx/Dispatch.m : jdk/src/macosx/native/com/apple/concurrent/Dispatch.m
-jdk/src/jdk.deploy.osx/macosx/native/libosx/JavaAppLauncher.m : jdk/src/macosx/native/apple/launcher/JavaAppLauncher.m
-jdk/src/jdk.deploy.osx/macosx/native/libosx/KeystoreImpl.m : jdk/src/macosx/native/apple/security/KeystoreImpl.m
+jdk/src/java.desktop/macosx/native/libosx/CFileManager.m : jdk/src/macosx/native/com/apple/eio/CFileManager.m
+jdk/src/java.base/macosx/native/libosxsecurity/KeystoreImpl.m : jdk/src/macosx/native/apple/security/KeystoreImpl.m
 jdk/src/jdk.hprof.agent/share/classes/com/sun/demo/jvmti/hprof : jdk/src/share/classes/com/sun/demo/jvmti/hprof
 jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver : jdk/src/share/classes/com/sun/net/httpserver
 jdk/src/jdk.httpserver/share/classes/sun/net/httpserver : jdk/src/share/classes/sun/net/httpserver
--- a/corba/.hgtags	Mon Mar 14 12:35:52 2016 +0300
+++ b/corba/.hgtags	Mon Mar 14 17:51:25 2016 +0100
@@ -351,3 +351,4 @@
 8ec4f97943fe56f93e4621f622b56b7144c0181a jdk-9+106
 49202432b69445164a42be7cbdf74ed5fce98157 jdk-9+107
 84f2862a25eb3232ff36c376b4e2bf2a83dfced3 jdk-9+108
+b75afa17aefe480c23c616a6a2497063312f7189 jdk-9+109
--- a/hotspot/.hgtags	Mon Mar 14 12:35:52 2016 +0300
+++ b/hotspot/.hgtags	Mon Mar 14 17:51:25 2016 +0100
@@ -511,3 +511,4 @@
 7232de4c17c37f60aecec4f3191090bd3d41d334 jdk-9+106
 c5146d4da417f76edfc43097d2e2ced042a65b4e jdk-9+107
 934f6793f5f7dca44f69b4559d525fa64b31840d jdk-9+108
+7e7e50ac4faf19899fc811569e32cfa478759ebb jdk-9+109
--- a/jaxp/.hgtags	Mon Mar 14 12:35:52 2016 +0300
+++ b/jaxp/.hgtags	Mon Mar 14 17:51:25 2016 +0100
@@ -351,3 +351,4 @@
 65d615f71e81bae46dcb4d053e590582e5705879 jdk-9+106
 781b83dadcae89b8ae7545bb4044ddc62c6fa006 jdk-9+107
 3b9fa8b1491479f7ae18131a34036b58b647493e jdk-9+108
+24e247ee1fffaa625d480b2a4eef2d3a8a59f5cb jdk-9+109
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/DOM.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/DOM.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -17,9 +17,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * $Id: DOM.java,v 1.2.4.1 2005/08/31 10:18:49 pvedula Exp $
- */
 
 package com.sun.org.apache.xalan.internal.xsltc;
 
@@ -102,4 +99,5 @@
     public int getDocument();
     public String getUnparsedEntityURI(String name);
     public Map<String, Integer> getElementsWithIDs();
+    public void release();
 }
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ApplyTemplates.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ApplyTemplates.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -17,9 +17,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * $Id: ApplyTemplates.java,v 1.2.4.1 2005/09/12 09:59:21 pvedula Exp $
- */
 
 package com.sun.org.apache.xalan.internal.xsltc.compiler;
 
@@ -122,12 +119,10 @@
         final int current = methodGen.getLocalIndex("current");
 
         // check if sorting nodes is required
-        final Vector sortObjects = new Vector();
-        final Iterator<SyntaxTreeNode> children = elements();
-        while (children.hasNext()) {
-            final SyntaxTreeNode child = children.next();
+        final Vector<Sort> sortObjects = new Vector<>();
+        for (final SyntaxTreeNode child : getContents()) {
             if (child instanceof Sort) {
-                sortObjects.addElement(child);
+                sortObjects.addElement((Sort)child);
             }
         }
 
@@ -193,6 +188,13 @@
                                                     applyTemplatesSig);
         il.append(new INVOKEVIRTUAL(applyTemplates));
 
+        // unmap parameters to release temporary result trees
+        for (final SyntaxTreeNode child : getContents()) {
+            if (child instanceof WithParam) {
+                ((WithParam)child).releaseResultTree(classGen, methodGen);
+            }
+        }
+
         // Pop parameter frame
         if (stylesheet.hasLocalParams() || hasContents()) {
             il.append(classGen.loadTranslet());
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/CallTemplate.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/CallTemplate.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Copyright 2001-2004 The Apache Software Foundation.
@@ -17,18 +16,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * $Id: CallTemplate.java,v 1.2.4.1 2005/09/12 10:02:41 pvedula Exp $
- */
 
 package com.sun.org.apache.xalan.internal.xsltc.compiler;
 
-import com.sun.org.apache.bcel.internal.generic.ALOAD;
-import com.sun.org.apache.bcel.internal.generic.ASTORE;
 import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen;
 import com.sun.org.apache.bcel.internal.generic.INVOKEVIRTUAL;
 import com.sun.org.apache.bcel.internal.generic.InstructionList;
-import com.sun.org.apache.bcel.internal.generic.LocalVariableGen;
 import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator;
 import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
 import com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator;
@@ -56,7 +49,7 @@
      * this array can be either a WithParam or a Param if no WithParam
      * exists for a particular parameter.
      */
-    private Object[] _parameters = null;
+    private SyntaxTreeNode[] _parameters = null;
 
     /**
      * The corresponding template which this CallTemplate calls.
@@ -147,11 +140,10 @@
 
         // If calling a simply named template, push actual arguments
         if (_calleeTemplate != null) {
-            Vector calleeParams = _calleeTemplate.getParameters();
             int numParams = _parameters.length;
 
             for (int i = 0; i < numParams; i++) {
-                SyntaxTreeNode node = (SyntaxTreeNode)_parameters[i];
+                SyntaxTreeNode node = _parameters[i];
                 methodSig.append(OBJECT_SIG);   // append Object to signature
 
                 // Push 'null' if Param to indicate no actual parameter specified
@@ -170,6 +162,15 @@
                                                      methodName,
                                                      methodSig.toString())));
 
+        // release temporary result trees
+        if (_parameters != null) {
+            for (int i = 0; i < _parameters.length; i++) {
+                if (_parameters[i] instanceof WithParam) {
+                    ((WithParam)_parameters[i]).releaseResultTree(classGen, methodGen);
+                }
+            }
+        }
+
         // Do not need to call Translet.popParamFrame() if we are
         // calling a simple named template.
         if (_calleeTemplate == null && (stylesheet.hasLocalParams() || hasContents())) {
@@ -203,9 +204,9 @@
     private void buildParameterList() {
         // Put the parameters from the called template into the array first.
         // This is to ensure the order of the parameters.
-        Vector defaultParams = _calleeTemplate.getParameters();
+        Vector<Param> defaultParams = _calleeTemplate.getParameters();
         int numParams = defaultParams.size();
-        _parameters = new Object[numParams];
+        _parameters = new SyntaxTreeNode[numParams];
         for (int i = 0; i < numParams; i++) {
             _parameters[i] = defaultParams.elementAt(i);
         }
@@ -222,15 +223,15 @@
 
                 // Search for a Param with the same name
                 for (int k = 0; k < numParams; k++) {
-                    Object object = _parameters[k];
-                    if (object instanceof Param
-                        && ((Param)object).getName().equals(name)) {
+                    SyntaxTreeNode parm = _parameters[k];
+                    if (parm instanceof Param
+                        && ((Param)parm).getName().equals(name)) {
                         withParam.setDoParameterOptimization(true);
                         _parameters[k] = withParam;
                         break;
                     }
-                    else if (object instanceof WithParam
-                        && ((WithParam)object).getName().equals(name)) {
+                    else if (parm instanceof WithParam
+                        && ((WithParam)parm).getName().equals(name)) {
                         withParam.setDoParameterOptimization(true);
                         _parameters[k] = withParam;
                         break;
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Sort.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Sort.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Copyright 2001-2005 The Apache Software Foundation.
@@ -17,32 +16,22 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * $Id: Sort.java,v 1.2.4.1 2005/09/12 11:08:12 pvedula Exp $
- */
 
 package com.sun.org.apache.xalan.internal.xsltc.compiler;
 
-import java.text.Collator;
 import java.util.ArrayList;
-import java.util.NoSuchElementException;
-import java.util.StringTokenizer;
 import java.util.Vector;
 
 import com.sun.org.apache.bcel.internal.classfile.Field;
-import com.sun.org.apache.bcel.internal.classfile.Method;
 import com.sun.org.apache.bcel.internal.generic.ALOAD;
 import com.sun.org.apache.bcel.internal.generic.ANEWARRAY;
 import com.sun.org.apache.bcel.internal.generic.ASTORE;
 import com.sun.org.apache.bcel.internal.generic.CHECKCAST;
 import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen;
 import com.sun.org.apache.bcel.internal.generic.GETFIELD;
-import com.sun.org.apache.bcel.internal.generic.ICONST;
 import com.sun.org.apache.bcel.internal.generic.ILOAD;
 import com.sun.org.apache.bcel.internal.generic.INVOKEINTERFACE;
 import com.sun.org.apache.bcel.internal.generic.INVOKESPECIAL;
-import com.sun.org.apache.bcel.internal.generic.INVOKESTATIC;
-import com.sun.org.apache.bcel.internal.generic.INVOKEVIRTUAL;
 import com.sun.org.apache.bcel.internal.generic.InstructionHandle;
 import com.sun.org.apache.bcel.internal.generic.InstructionList;
 import com.sun.org.apache.bcel.internal.generic.LocalVariableGen;
@@ -76,13 +65,10 @@
     private AttributeValue _order;
     private AttributeValue _caseOrder;
     private AttributeValue _dataType;
-    private String  _lang; // bug! see 26869
-
-    private String         _data = null;
-
+    private String         _lang; // bug! see 26869
 
     private String _className = null;
-    private ArrayList _closureVars = null;
+    private ArrayList<VariableRefBase> _closureVars = null;
     private boolean _needsSortRecordFactory = false;
 
     // -- Begin Closure interface --------------------
@@ -115,7 +101,7 @@
      */
     public void addVariable(VariableRefBase variableRef) {
         if (_closureVars == null) {
-            _closureVars = new ArrayList();
+            _closureVars = new ArrayList<>();
         }
 
         // Only one reference per variable
@@ -246,7 +232,7 @@
     public static void translateSortIterator(ClassGenerator classGen,
                                       MethodGenerator methodGen,
                                       Expression nodeSet,
-                                      Vector sortObjects)
+                                      Vector<Sort> sortObjects)
     {
         final ConstantPoolGen cpg = classGen.getConstantPool();
         final InstructionList il = methodGen.getInstructionList();
@@ -312,7 +298,7 @@
      * Compiles code that instantiates a NodeSortRecordFactory object which
      * will produce NodeSortRecord objects of a specific type.
      */
-    public static void compileSortRecordFactory(Vector sortObjects,
+    public static void compileSortRecordFactory(Vector<Sort> sortObjects,
         ClassGenerator classGen, MethodGenerator methodGen)
     {
         String sortRecordClass =
@@ -321,7 +307,7 @@
         boolean needsSortRecordFactory = false;
         final int nsorts = sortObjects.size();
         for (int i = 0; i < nsorts; i++) {
-            final Sort sort = (Sort) sortObjects.elementAt(i);
+            final Sort sort = sortObjects.elementAt(i);
             needsSortRecordFactory |= sort._needsSortRecordFactory;
         }
 
@@ -429,7 +415,7 @@
                     + "[" + STRING_SIG + ")V")));
 
         // Initialize closure variables in sortRecordFactory
-        final ArrayList dups = new ArrayList();
+        final ArrayList<VariableRefBase> dups = new ArrayList<>();
 
         for (int j = 0; j < nsorts; j++) {
             final Sort sort = (Sort) sortObjects.get(j);
@@ -437,7 +423,7 @@
                 sort._closureVars.size();
 
             for (int i = 0; i < length; i++) {
-                VariableRefBase varRef = (VariableRefBase) sort._closureVars.get(i);
+                VariableRefBase varRef = sort._closureVars.get(i);
 
                 // Discard duplicate variable references
                 if (dups.contains(varRef)) continue;
@@ -455,11 +441,11 @@
         }
     }
 
-    public static String compileSortRecordFactory(Vector sortObjects,
+    public static String compileSortRecordFactory(Vector<Sort> sortObjects,
         ClassGenerator classGen, MethodGenerator methodGen,
         String sortRecordClass)
     {
-        final XSLTC  xsltc = ((Sort)sortObjects.firstElement()).getXSLTC();
+        final XSLTC xsltc = (sortObjects.firstElement()).getXSLTC();
         final String className = xsltc.getHelperClassName();
 
         final NodeSortRecordFactGenerator sortRecordFactory =
@@ -474,15 +460,15 @@
 
         // Add a new instance variable for each var in closure
         final int nsorts = sortObjects.size();
-        final ArrayList dups = new ArrayList();
+        final ArrayList<VariableRefBase> dups = new ArrayList<>();
 
         for (int j = 0; j < nsorts; j++) {
-            final Sort sort = (Sort) sortObjects.get(j);
+            final Sort sort = sortObjects.get(j);
             final int length = (sort._closureVars == null) ? 0 :
                 sort._closureVars.size();
 
             for (int i = 0; i < length; i++) {
-                final VariableRefBase varRef = (VariableRefBase) sort._closureVars.get(i);
+                final VariableRefBase varRef = sort._closureVars.get(i);
 
                 // Discard duplicate variable references
                 if (dups.contains(varRef)) continue;
@@ -600,10 +586,10 @@
     /**
      * Create a new auxillary class extending NodeSortRecord.
      */
-    private static String compileSortRecord(Vector sortObjects,
+    private static String compileSortRecord(Vector<Sort> sortObjects,
                                             ClassGenerator classGen,
                                             MethodGenerator methodGen) {
-        final XSLTC  xsltc = ((Sort)sortObjects.firstElement()).getXSLTC();
+        final XSLTC  xsltc = sortObjects.firstElement().getXSLTC();
         final String className = xsltc.getHelperClassName();
 
         // This generates a new class for handling this specific sort
@@ -619,10 +605,10 @@
 
         // Add a new instance variable for each var in closure
         final int nsorts = sortObjects.size();
-        final ArrayList dups = new ArrayList();
+        final ArrayList<VariableRefBase> dups = new ArrayList<>();
 
         for (int j = 0; j < nsorts; j++) {
-            final Sort sort = (Sort) sortObjects.get(j);
+            final Sort sort = sortObjects.get(j);
 
             // Set the name of the inner class in this sort object
             sort.setInnerClassName(className);
@@ -644,8 +630,7 @@
             }
         }
 
-        MethodGenerator init = compileInit(sortObjects, sortRecord,
-                                         cpg, className);
+        MethodGenerator init = compileInit(sortRecord, cpg, className);
         MethodGenerator extract = compileExtract(sortObjects, sortRecord,
                                         cpg, className);
         sortRecord.addMethod(init);
@@ -660,8 +645,7 @@
      * collator in the super calls only when the stylesheet specifies a new
      * language in xsl:sort.
      */
-    private static MethodGenerator compileInit(Vector sortObjects,
-                                           NodeSortRecordGenerator sortRecord,
+    private static MethodGenerator compileInit(NodeSortRecordGenerator sortRecord,
                                            ConstantPoolGen cpg,
                                            String className)
     {
@@ -688,7 +672,7 @@
     /**
      * Compiles a method that overloads NodeSortRecord.extractValueFromDOM()
      */
-    private static MethodGenerator compileExtract(Vector sortObjects,
+    private static MethodGenerator compileExtract(Vector<Sort> sortObjects,
                                          NodeSortRecordGenerator sortRecord,
                                          ConstantPoolGen cpg,
                                          String className) {
@@ -730,7 +714,7 @@
         // Append all the cases for the switch statment
         for (int level = 0; level < levels; level++) {
             match[level] = level;
-            final Sort sort = (Sort)sortObjects.elementAt(level);
+            final Sort sort = sortObjects.elementAt(level);
             target[level] = il.append(NOP);
             sort.translateSelect(sortRecord, extractMethod);
             il.append(ARETURN);
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/SyntaxTreeNode.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/SyntaxTreeNode.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -17,9 +17,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * $Id: SyntaxTreeNode.java,v 1.6 2006/06/06 22:34:33 spericas Exp $
- */
 
 package com.sun.org.apache.xalan.internal.xsltc.compiler;
 
@@ -519,9 +516,9 @@
         // references falling out-of-scope inside the for-each element.
         // (the cause of which being 'lazy' register allocation for references)
         for (int i = 0; i < n; i++) {
-            if( _contents.get(i) instanceof VariableBase) {
+            if ( _contents.get(i) instanceof VariableBase) {
                 final VariableBase var = (VariableBase)_contents.get(i);
-                var.unmapRegister(methodGen);
+                var.unmapRegister(classGen, methodGen);
             }
         }
     }
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Template.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Template.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -17,9 +17,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * $Id: Template.java,v 1.2.4.1 2005/09/12 11:30:11 pvedula Exp $
- */
 
 package com.sun.org.apache.xalan.internal.xsltc.compiler;
 
@@ -63,7 +60,7 @@
 
     // The list of parameters in this template. This is only used
     // for simple named templates.
-    private Vector  _parameters = new Vector();
+    private Vector<Param> _parameters = new Vector<>();
 
     public boolean hasParams() {
         return _parameters.size() > 0;
@@ -85,7 +82,7 @@
         _parameters.addElement(param);
     }
 
-    public Vector getParameters() {
+    public Vector<Param> getParameters() {
         return _parameters;
     }
 
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/VariableBase.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/VariableBase.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Copyright 2001-2004 The Apache Software Foundation.
@@ -17,18 +16,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * $Id: VariableBase.java,v 1.5 2005/09/28 13:48:18 pvedula Exp $
- */
 
 package com.sun.org.apache.xalan.internal.xsltc.compiler;
 
 import java.util.Vector;
 
+import com.sun.org.apache.bcel.internal.generic.CHECKCAST;
 import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen;
 import com.sun.org.apache.bcel.internal.generic.Instruction;
 import com.sun.org.apache.bcel.internal.generic.InstructionList;
+import com.sun.org.apache.bcel.internal.generic.INVOKEINTERFACE;
 import com.sun.org.apache.bcel.internal.generic.INVOKESPECIAL;
+import com.sun.org.apache.bcel.internal.generic.INVOKEVIRTUAL;
 import com.sun.org.apache.bcel.internal.generic.LocalVariableGen;
 import com.sun.org.apache.bcel.internal.generic.NEW;
 import com.sun.org.apache.bcel.internal.generic.PUSH;
@@ -36,6 +35,7 @@
 import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
 import com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator;
 import com.sun.org.apache.xalan.internal.xsltc.compiler.util.NodeSetType;
+import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ResultTreeType;
 import com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type;
 import com.sun.org.apache.xalan.internal.xsltc.compiler.util.Util;
 import com.sun.org.apache.xml.internal.utils.XML11Char;
@@ -49,21 +49,18 @@
  */
 class VariableBase extends TopLevelElement {
 
-    protected QName       _name;            // The name of the variable.
-    protected String      _escapedName;        // The escaped qname of the variable.
-    protected Type        _type;            // The type of this variable.
-    protected boolean     _isLocal;         // True if the variable is local.
-    protected LocalVariableGen _local;      // Reference to JVM variable
-    protected Instruction _loadInstruction; // Instruction to load JVM variable
+    protected QName       _name;             // The name of the variable.
+    protected String      _escapedName;      // The escaped qname of the variable.
+    protected Type        _type;             // The type of this variable.
+    protected boolean     _isLocal;          // True if the variable is local.
+    protected LocalVariableGen _local;       // Reference to JVM variable
+    protected Instruction _loadInstruction;  // Instruction to load JVM variable
     protected Instruction _storeInstruction; // Instruction to load JVM variable
-    protected Expression  _select;          // Reference to variable expression
-    protected String      select;           // Textual repr. of variable expr.
+    protected Expression  _select;           // Reference to variable expression
+    protected String      select;            // Textual repr. of variable expr.
 
     // References to this variable (when local)
-    protected Vector      _refs = new Vector(2);
-
-    // Dependencies to other variables/parameters (for globals only)
-    protected Vector      _dependencies = null;
+    protected Vector<VariableRefBase> _refs = new Vector<>(2);
 
     // Used to make sure parameter field is not added twice
     protected boolean    _ignore = false;
@@ -92,7 +89,7 @@
     public void copyReferences(VariableBase var) {
         final int size = _refs.size();
         for (int i = 0; i < size; i++) {
-            var.addReference((VariableRefBase) _refs.get(i));
+            var.addReference(_refs.get(i));
         }
     }
 
@@ -112,8 +109,24 @@
      * Remove the mapping of this variable to a register.
      * Called when we leave the AST scope of the variable's declaration
      */
-    public void unmapRegister(MethodGenerator methodGen) {
+    public void unmapRegister(ClassGenerator classGen, MethodGenerator methodGen) {
         if (_local != null) {
+            if (_type instanceof ResultTreeType) {
+                final ConstantPoolGen cpg = classGen.getConstantPool();
+                final InstructionList il = methodGen.getInstructionList();
+                if (classGen.getStylesheet().callsNodeset() && classGen.getDOMClass().equals(MULTI_DOM_CLASS)) {
+                    final int removeDA = cpg.addMethodref(MULTI_DOM_CLASS, "removeDOMAdapter", "(" + DOM_ADAPTER_SIG + ")V");
+                    il.append(methodGen.loadDOM());
+                    il.append(new CHECKCAST(cpg.addClass(MULTI_DOM_CLASS)));
+                    il.append(loadInstruction());
+                    il.append(new CHECKCAST(cpg.addClass(DOM_ADAPTER_CLASS)));
+                    il.append(new INVOKEVIRTUAL(removeDA));
+                }
+                final int release = cpg.addInterfaceMethodref(DOM_IMPL_CLASS, "release", "()V");
+                il.append(loadInstruction());
+                il.append(new INVOKEINTERFACE(release, 1));
+            }
+
             _local.setEnd(methodGen.getInstructionList().getEnd());
             methodGen.removeLocalVariable(_local);
             _refs = null;
@@ -126,7 +139,6 @@
      * the JVM stack.
      */
     public Instruction loadInstruction() {
-        final Instruction instr = _loadInstruction;
         if (_loadInstruction == null) {
             _loadInstruction = _type.LOAD(_local.getIndex());
         }
@@ -138,7 +150,6 @@
      * into this variable.
      */
     public Instruction storeInstruction() {
-        final Instruction instr = _storeInstruction;
         if (_storeInstruction == null) {
             _storeInstruction = _type.STORE(_local.getIndex());
         }
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/WithParam.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/WithParam.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Copyright 2001-2004 The Apache Software Foundation.
@@ -17,15 +16,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * $Id: WithParam.java,v 1.2.4.1 2005/09/12 11:38:01 pvedula Exp $
- */
 
 package com.sun.org.apache.xalan.internal.xsltc.compiler;
 
+import com.sun.org.apache.bcel.internal.generic.ALOAD;
+import com.sun.org.apache.bcel.internal.generic.ASTORE;
+import com.sun.org.apache.bcel.internal.generic.CHECKCAST;
 import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen;
+import com.sun.org.apache.bcel.internal.generic.INVOKEINTERFACE;
 import com.sun.org.apache.bcel.internal.generic.INVOKEVIRTUAL;
 import com.sun.org.apache.bcel.internal.generic.InstructionList;
+import com.sun.org.apache.bcel.internal.generic.LocalVariableGen;
 import com.sun.org.apache.bcel.internal.generic.PUSH;
 import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator;
 import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
@@ -60,6 +61,11 @@
     private Expression _select;
 
     /**
+     * Reference to JVM variable holding temporary result tree.
+     */
+    private LocalVariableGen _domAdapter;
+
+    /**
      * %OPT% This is set to true when the WithParam is used in a CallTemplate
      * for a simple named template. If this is true, the parameters are
      * passed to the named template through method arguments rather than
@@ -164,8 +170,13 @@
             _select.startIterator(classGen, methodGen);
         }
         // If not, compile result tree from parameter body if present.
+        // Store result tree into local variable for releasing it later
         else if (hasContents()) {
+            final InstructionList il = methodGen.getInstructionList();
             compileResultTree(classGen, methodGen);
+            _domAdapter = methodGen.addLocalVariable2("@" + _escapedName, Type.ResultTree.toJCType(), il.getEnd());
+            il.append(DUP);
+            il.append(new ASTORE(_domAdapter.getIndex()));
         }
         // If neither are present then store empty string in parameter slot
         else {
@@ -208,4 +219,26 @@
                                                      ADD_PARAMETER_SIG)));
         il.append(POP); // cleanup stack
     }
+
+    /**
+     * Release the compiled result tree.
+     */
+    public void releaseResultTree(ClassGenerator classGen, MethodGenerator methodGen) {
+        if (_domAdapter != null) {
+            final ConstantPoolGen cpg = classGen.getConstantPool();
+            final InstructionList il = methodGen.getInstructionList();
+            if (classGen.getStylesheet().callsNodeset() && classGen.getDOMClass().equals(MULTI_DOM_CLASS)) {
+                final int removeDA = cpg.addMethodref(MULTI_DOM_CLASS, "removeDOMAdapter", "(" + DOM_ADAPTER_SIG + ")V");
+                il.append(methodGen.loadDOM());
+                il.append(new CHECKCAST(cpg.addClass(MULTI_DOM_CLASS)));
+                il.append(new ALOAD(_domAdapter.getIndex()));
+                il.append(new CHECKCAST(cpg.addClass(DOM_ADAPTER_CLASS)));
+                il.append(new INVOKEVIRTUAL(removeDA));
+            }
+            final int release = cpg.addInterfaceMethodref(DOM_IMPL_CLASS, "release", "()V");
+            il.append(new ALOAD(_domAdapter.getIndex()));
+            il.append(new INVOKEINTERFACE(release, 1));
+            _domAdapter = null;
+         }
+     }
 }
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/AdaptiveResultTreeImpl.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/AdaptiveResultTreeImpl.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -17,9 +17,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * $Id: AdaptiveResultTreeImpl.java,v 1.2.4.1 2005/09/06 05:52:18 pvedula Exp $
- */
+
 package com.sun.org.apache.xalan.internal.xsltc.dom;
 
 import com.sun.org.apache.xalan.internal.xsltc.DOM;
@@ -1338,4 +1336,11 @@
         }
     }
 
+    public void release() {
+        if (_dom != null) {
+            _dom.release();
+            _dom = null;
+        }
+        super.release();
+    }
 }
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/DOMAdapter.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/DOMAdapter.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -17,9 +17,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * $Id: DOMAdapter.java,v 1.2.4.1 2005/09/06 06:07:28 pvedula Exp $
- */
 
 package com.sun.org.apache.xalan.internal.xsltc.dom;
 
@@ -56,8 +53,6 @@
     private short[] _NSmapping = null;
     private short[] _NSreverse = null;
 
-    private StripFilter _filter = null;
-
     private int _multiDOMMask;
 
     public DOMAdapter(DOM dom,
@@ -165,9 +160,7 @@
         }
     }
 
-    public void setFilter(StripFilter filter) {
-        _filter = filter;
-    }
+    public void setFilter(StripFilter filter) {}
 
     public DTMAxisIterator getTypedChildren(final int type) {
         final int[] reverse = getReverse();
@@ -464,4 +457,8 @@
     public Map<String, Integer> getElementsWithIDs() {
         return _dom.getElementsWithIDs();
     }
+
+    public void release() {
+        _dom.release();
+    }
 }
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/MultiDOM.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/MultiDOM.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,7 +1,6 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  */
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -30,8 +29,8 @@
 import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator;
 import com.sun.org.apache.xml.internal.dtm.DTMManager;
 import com.sun.org.apache.xml.internal.dtm.ref.DTMAxisIteratorBase;
+import com.sun.org.apache.xml.internal.dtm.ref.DTMAxisIterNodeList;
 import com.sun.org.apache.xml.internal.dtm.ref.DTMDefaultBase;
-import com.sun.org.apache.xml.internal.dtm.ref.DTMAxisIterNodeList;
 import com.sun.org.apache.xml.internal.serializer.SerializationHandler;
 import com.sun.org.apache.xml.internal.utils.SuballocatedIntVector;
 import java.util.HashMap;
@@ -671,4 +670,51 @@
     public Map<String, Integer> getElementsWithIDs() {
         return _main.getElementsWithIDs();
     }
+
+    public void release() {
+        _main.release();
+    }
+
+    private boolean isMatchingAdapterEntry(DOM entry, DOMAdapter adapter) {
+        DOM dom = adapter.getDOMImpl();
+
+        return (entry == adapter) || (
+            /*
+             * Method addDOMAdapter overwrites for AdaptiveResultTreeImpl
+             * objects the usual entry with an adapter to the nested
+             * DOM, so we must check this here. See last 'if' statement
+             * of addDOMAdapter.
+             */
+            (dom instanceof AdaptiveResultTreeImpl) &&
+            (entry instanceof DOMAdapter) &&
+            (((AdaptiveResultTreeImpl)dom).getNestedDOM() == ((DOMAdapter)entry).getDOMImpl())
+        );
+    }
+
+    public void removeDOMAdapter(DOMAdapter adapter) {
+        _documents.remove(adapter.getDocumentURI(0));
+        DOM dom = adapter.getDOMImpl();
+
+        if (dom instanceof DTMDefaultBase) {
+            SuballocatedIntVector ids = ((DTMDefaultBase) dom).getDTMIDs();
+            int idsSize = ids.size();
+            for (int i = 0; i < idsSize; i++) {
+                _adapters[ids.elementAt(i) >>> DTMManager.IDENT_DTM_NODE_BITS] = null;
+            }
+        } else {
+            int id = dom.getDocument() >>> DTMManager.IDENT_DTM_NODE_BITS;
+            if ((id > 0) && (id < _adapters.length) && isMatchingAdapterEntry(_adapters[id], adapter)) {
+                _adapters[id] = null;
+            } else {
+                boolean found = false;
+                for (int i = 0; i < _adapters.length; i++) {
+                    if (isMatchingAdapterEntry(_adapters[id], adapter)) {
+                        _adapters[i] = null;
+                        found = true;
+                        break;
+                    }
+                }
+            }
+        }
+    }
 }
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SAXImpl.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SAXImpl.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -17,9 +17,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * $Id: SAXImpl.java,v 1.5 2005/09/28 13:48:37 pvedula Exp $
- */
 
 package com.sun.org.apache.xalan.internal.xsltc.dom;
 
@@ -82,7 +79,7 @@
 
     // Namespace prefix-to-uri mapping stuff
     private int       _uriCount     = 0;
-    private int       _prefixCount  = 0;
+    // private int       _prefixCount  = 0;
 
     // Stack used to keep track of what whitespace text nodes are protected
     // by xml:space="preserve" attributes and which nodes that are not.
@@ -90,11 +87,11 @@
     private int     _idx = 1;
     private boolean _preserve = false;
 
-    private static final String XML_STRING = "xml:";
+    // private static final String XML_STRING = "xml:";
     private static final String XML_PREFIX   = "xml";
     private static final String XMLSPACE_STRING = "xml:space";
     private static final String PRESERVE_STRING = "preserve";
-    private static final String XMLNS_PREFIX = "xmlns";
+    // private static final String XMLNS_PREFIX = "xmlns";
     private static final String XML_URI = "http://www.w3.org/XML/1998/namespace";
 
     private boolean _escaping = true;
@@ -123,7 +120,7 @@
     private BitArray  _dontEscape = null;
 
     // The URI to this document
-    private String    _documentURI = null;
+    // private String _documentURI = null;
     static private int _documentURIIndex = 0;
 
     // The owner Document when the input source is DOMSource.
@@ -143,8 +140,7 @@
     // Support for access/navigation through org.w3c.dom API
     private Node[] _nodes;
     private NodeList[] _nodeLists;
-    private final static String XML_LANG_ATTRIBUTE =
-        "http://www.w3.org/XML/1998/namespace:@lang";
+    // private final static String XML_LANG_ATTRIBUTE = "http://www.w3.org/XML/1998/namespace:@lang";
 
     /**
      * Define the origin of the document from which the tree was built
@@ -491,6 +487,7 @@
     /**
      * Sets up a translet-to-dom type mapping table
      */
+    /*
     private int[] setupMapping(String[] names, String[] uris, int[] types, int nNames) {
         // Padding with number of names, because they
         // may need to be added, i.e for RTFs. See copy03
@@ -502,6 +499,7 @@
         }
         return result;
     }
+    */
 
     /**
      * Returns the internal type associated with an expanded QName
@@ -1230,9 +1228,6 @@
      */
     public DTMAxisIterator getNamespaceAxisIterator(int axis, int ns)
     {
-
-        DTMAxisIterator iterator = null;
-
         if (ns == NO_TYPE) {
             return EMPTYITERATOR;
         }
@@ -1546,7 +1541,6 @@
      */
     public DTMAxisIterator getNthDescendant(int type, int n, boolean includeself)
     {
-        DTMAxisIterator source = (DTMAxisIterator) new TypedDescendantIterator(type);
         return new NthDescendantIterator(n);
     }
 
@@ -1882,4 +1876,7 @@
         }
     }
 
+    public void release() {
+        _dtmManager.release(this, true);
+    }
 }
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SimpleResultTreeImpl.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SimpleResultTreeImpl.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,6 +1,5 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * Copyright 1999-2004 The Apache Software Foundation.
@@ -17,15 +16,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * $Id: SimpleResultTreeImpl.java,v 1.2.4.1 2005/09/06 10:09:25 pvedula Exp $
- */
+
 package com.sun.org.apache.xalan.internal.xsltc.dom;
 
 import com.sun.org.apache.xalan.internal.xsltc.DOM;
 import com.sun.org.apache.xalan.internal.xsltc.StripFilter;
 import com.sun.org.apache.xalan.internal.xsltc.TransletException;
-
 import com.sun.org.apache.xml.internal.dtm.Axis;
 import com.sun.org.apache.xml.internal.dtm.DTM;
 import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator;
@@ -1014,4 +1010,12 @@
     public void migrateTo(DTMManager manager)
     {
     }
+
+    public void release()
+    {
+        if (_documentID != 0) {
+            _dtmManager.release(this, true);
+            _documentID = 0;
+        }
+    }
 }
--- a/jaxp/test/javax/xml/jaxp/unittest/transform/Bug4693341.out	Mon Mar 14 12:35:52 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE SupplierOrder SYSTEM "Bug4693341.dtd">
-<SupplierOrder>
-<OrderId>10016</OrderId>
-<OrderDate>Wed May 29 12:45:00 PDT 2002</OrderDate>
-<ShippingAddress>
-<FirstName>ABC</FirstName>
-<LastName>XYZ</LastName>
-<Street>1234 Anywhere Street</Street>
-<City>Palo Alto</City>
-<State>California</State>
-<Country>USA</Country>
-<ZipCode>94303</ZipCode>
-<Email>NULL</Email>
-<Phone>NULL</Phone>
-</ShippingAddress>
-<LineItems>
-<LineItem categoryId="BIRDS" itemId="EST-18" lineNo="0" productId="AV-CB-01" quantity="1" unitPrice="193.5"/>
-</LineItems>
-</SupplierOrder>
\ No newline at end of file
--- a/jaxp/test/javax/xml/jaxp/unittest/transform/Bug4693341Test.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jaxp/test/javax/xml/jaxp/unittest/transform/Bug4693341Test.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,7 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
+import java.io.IOException;
 import java.net.URL;
 
 import javax.xml.parsers.SAXParser;
@@ -45,16 +46,27 @@
  * @summary Test transform with external dtd.
  */
 public class Bug4693341Test {
+    // save dtd file to current working directory to avoid writing into source repository
+    public void copyDTDtoWorkDir() throws IOException {
+        try (FileInputStream dtdres = new FileInputStream(getClass().getResource("Bug4693341.dtd").getPath());
+             FileOutputStream dtdwork = new FileOutputStream("Bug4693341.dtd");) {
+            int n;
+            byte[] buffer = new byte[1024];
+            while((n = dtdres.read(buffer)) > -1) {
+                dtdwork.write(buffer, 0, n);
+            }
+        }
+    }
 
     @Test
     public void test() {
-        boolean status = false;
-
         try {
             Transformer transformer = TransformerFactory.newInstance().newTransformer();
 
-            String out = getClass().getResource("Bug4693341.out").getPath();
-            StreamResult result = new StreamResult(new FileOutputStream(out));
+            copyDTDtoWorkDir();
+
+            File outf = new File("Bug4693341.out");
+            StreamResult result = new StreamResult(new FileOutputStream(outf));
 
             String in = getClass().getResource("Bug4693341.xml").getPath();
             File file = new File(in);
@@ -63,7 +75,7 @@
             transformer.transform(source, result);
 
             //URL inputsource = new URL("file", "", golden);
-            URL output = new URL("file", "", out);
+            URL output = new URL("file", "", outf.getPath());
 
             // error happens when trying to parse output
             String systemId = output.toExternalForm();
@@ -71,10 +83,8 @@
             InputSource is = new InputSource(systemId);
             SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
             parser.parse(is, new DefaultHandler());
-
         } catch (Exception ex) {
             Assert.fail(ex.getMessage());
         }
     }
-
 }
--- a/jaxp/test/javax/xml/jaxp/unittest/transform/Bug4693341_golden.dtd	Mon Mar 14 12:35:52 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-<!ELEMENT SupplierOrder (OrderId, OrderDate, ShippingAddress, LineItems)>
-
-<!ELEMENT OrderId (#PCDATA)>
-
-<!ELEMENT OrderDate (#PCDATA)>
-
-<!ELEMENT ShippingAddress (FirstName, LastName, Street, City, State, Country, ZipCode, Email, Phone)>
-
-<!ELEMENT FirstName (#PCDATA)>
-
-<!ELEMENT LastName (#PCDATA)>
-
-<!ELEMENT Street (#PCDATA)>
-
-<!ELEMENT City (#PCDATA)>
-
-<!ELEMENT State (#PCDATA)>
-
-<!ELEMENT Country (#PCDATA)>
-
-<!ELEMENT ZipCode (#PCDATA)>
-
-<!ELEMENT Email (#PCDATA)>
-
-<!ELEMENT Phone (#PCDATA)>
-
-<!ELEMENT LineItems (LineItem+)>
-
-<!ELEMENT LineItem EMPTY>
-
-<!ATTLIST LineItem
-     categoryId CDATA #REQUIRED
-     productId CDATA #REQUIRED
-     itemId CDATA #REQUIRED
-     lineNo CDATA #REQUIRED
-     quantity CDATA #REQUIRED
-     unitPrice CDATA #REQUIRED
->
-
--- a/jaxp/test/javax/xml/jaxp/unittest/transform/Bug4693341_golden.xml	Mon Mar 14 12:35:52 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE SupplierOrder SYSTEM "Bug4693341_golden.dtd" >
-<SupplierOrder>
-<OrderId>10016</OrderId>
-<OrderDate>Wed May 29 12:45:00 PDT 2002</OrderDate>
-<ShippingAddress>
-<FirstName>ABC</FirstName>
-<LastName>XYZ</LastName>
-<Street>1234 Anywhere Street</Street>
-<City>Palo Alto</City>
-<State>California</State>
-<Country>USA</Country>
-<ZipCode>94303</ZipCode>
-<Email>NULL</Email>
-<Phone>NULL</Phone>
-</ShippingAddress>
-<LineItems>
-<LineItem categoryId="BIRDS" itemId="EST-18" lineNo="0" productId="AV-CB-01" quantity="1" unitPrice="193.5"/>
-</LineItems>
-</SupplierOrder>
--- a/jaxp/test/javax/xml/jaxp/unittest/transform/Bug6505031.java	Mon Mar 14 12:35:52 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code 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 General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package transform;
-
-import java.io.StringWriter;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-/*
- * @bug 6505031
- * @summary Test transformer parses keys and their values coming from different xml documents.
- */
-public class Bug6505031 {
-
-    private String getResource(String s) {
-        return getClass().getResource(s).toString();
-
-    }
-
-    @Test
-    public void test() {
-        Map params = new HashMap();
-
-        params.put("config", getResource("config.xml"));
-        params.put("mapsFile", getResource("maps.xml"));
-        generate(getResource("template.xml"), getResource("transform.xsl"), params);
-    }
-
-    private void generate(String in, String xsl, Map params) {
-        try {
-            Transformer transformer = getTransformer(xsl);
-
-            for (Iterator i = params.entrySet().iterator(); i.hasNext();) {
-                Map.Entry entry = (Map.Entry) i.next();
-
-                transformer.setParameter((String) entry.getKey(), entry.getValue());
-            }
-            transform(in, transformer);
-        } catch (Exception e) {
-            Assert.fail(e.getMessage());
-        }
-    }
-
-    private Transformer getTransformer(String transform) throws Exception {
-        TransformerFactory tfactory = TransformerFactory.newInstance();
-
-        try {
-            // tfactory.setAttribute("generate-translet", Boolean.TRUE);
-        } catch (Exception e) {
-            // Ignore
-        }
-
-        Transformer transformer = tfactory.newTransformer(new StreamSource(transform));
-        return (transformer);
-    }
-
-    private void transform(String in, Transformer transformer) throws Exception {
-        StringWriter sw = new StringWriter();
-        transformer.transform(new StreamSource(in), new StreamResult(sw));
-        String s = sw.toString();
-        Assert.assertTrue(s.contains("map1key1value") && s.contains("map2key1value"));
-    }
-
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jaxp/test/javax/xml/jaxp/unittest/transform/Bug8150704-1.ref	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,1 @@
+................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jaxp/test/javax/xml/jaxp/unittest/transform/Bug8150704-1.xml	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<element>
+  <text>.</text>
+</element>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jaxp/test/javax/xml/jaxp/unittest/transform/Bug8150704-1.xsl	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+  <xsl:output method="text"/>
+
+  <xsl:template match="/">
+    <xsl:call-template name="recurse1">
+      <xsl:with-param name="num">
+        <xsl:value-of select="0"/>
+      </xsl:with-param>
+    </xsl:call-template>
+    <xsl:text>&#xa;</xsl:text>
+  </xsl:template>
+
+  <xsl:template name="recurse1">
+    <xsl:param name="num"/>
+    <xsl:call-template name="recurse2">
+      <xsl:with-param name="num" select="0"/>
+    </xsl:call-template>
+    <xsl:if test="not($num = 19)">
+      <xsl:variable name="tmpnumber"><xsl:value-of select="$num + 1"/></xsl:variable>
+      <xsl:call-template name="recurse1">
+        <xsl:with-param name="num">
+          <xsl:value-of select="$tmpnumber"/>
+        </xsl:with-param>
+      </xsl:call-template>
+    </xsl:if>
+  </xsl:template>
+
+  <xsl:template name="recurse2">
+    <xsl:param name="num"/>
+    <xsl:call-template name="recursefinal">
+      <xsl:with-param name="num" select="0"/>
+    </xsl:call-template>
+    <xsl:if test="not($num = 19)">
+      <xsl:variable name="tmpnumber"><xsl:value-of select="$num + 1"/></xsl:variable>
+      <xsl:call-template name="recurse2">
+        <xsl:with-param name="num" select="$tmpnumber"/>
+      </xsl:call-template>
+    </xsl:if>
+  </xsl:template>
+
+  <xsl:template name="recursefinal">
+    <xsl:param name="num"/>
+    <xsl:call-template name="dodot"/>
+    <xsl:call-template name="dodot"/>
+    <xsl:call-template name="dodot"/>
+    <xsl:call-template name="dodot"/>
+    <xsl:call-template name="dodot"/>
+    <xsl:call-template name="dodot"/>
+    <xsl:call-template name="dodot"/>
+    <xsl:call-template name="dodot"/>
+    <xsl:call-template name="dodot"/>
+    <xsl:call-template name="dodot"/>
+    <xsl:call-template name="dodot"/>
+    <xsl:call-template name="dodot"/>
+    <xsl:call-template name="dodot"/>
+    <xsl:call-template name="dodot"/>
+    <xsl:call-template name="dodot"/>
+    <xsl:if test="not($num = 10)">
+      <xsl:variable name="tmpnumber"><xsl:value-of select="$num + 1"/></xsl:variable>
+      <xsl:call-template name="recursefinal">
+        <xsl:with-param name="num" select="$tmpnumber"/>
+      </xsl:call-template>
+    </xsl:if>
+  </xsl:template>
+
+  <xsl:template name="dodot">
+    <xsl:variable name="ElementTexts">
+      <xsl:for-each select="element">
+        <xsl:value-of select="text"/>
+      </xsl:for-each>
+    </xsl:variable>
+    <xsl:value-of select="$ElementTexts"/>
+  </xsl:template>
+</xsl:stylesheet>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jaxp/test/javax/xml/jaxp/unittest/transform/Bug8150704-2.ref	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,83 @@
+0fto-erech   200amos-batch  00000000X/
+1FB01                20150709  EWF 2016021207USD  0000,9302122026623  ////////91284422        ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000007366,71////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////D8OOoOOooooOoooooO////15/07 P0480715                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40090597         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150630  EWF 2016021206USD  0000,9302122026624  ////////1500006837      ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000003844,00////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////b3oooooooooooooooo////15/07 R1683315                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40127254         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150709  EWF 2016021207CHF  0001,0000022026625  ////////94043801        ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000438,50////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0CooOooooooooooOOo////15/07 P0472115                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////30092874         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150702  EWF 2016021207EUR  0001,0468822026626  ////////TL152062        ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000661,30////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3coooooooooooooooo////15/07 P0431815                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40099751         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150617  EWF 2016021206EUR  0001,0468822026627  ////////TKL100216       ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000699,92////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////55oooooOoOooooOoOo////15/07 L0032815                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////2014686          ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150702  EWF 2016021207EUR  0001,0468822026628  ////////TL152063        ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000001983,00////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9boooooooooooooooo////15/07 P0431815                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40099751         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150713  EWF 2016021207EUR  0001,0468822026629  ////////000359084       ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000002230,76////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////51oOoOoOoOoooooOOO////15/07 R1735915                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40128088         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150708  EWF 2016021207CHF  0001,0000022026630  ////////90864081        ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000001893,20////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////acoooooooooooooooo////15/07 P0470615                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////30090668         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150708  EWF 2016021207USD  0000,9302122026631  ////////123939          ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000007896,34////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////09oooooooooooooooo////15/07 P0400015                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40128846         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150707  EWF 2016021207USD  0000,9302122026633  ////////000358117       ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000006810,00////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////f5oooooooooooooooo////15/07 P0462815                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40128088         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150713  EWF 2016021207CHF  0001,0000022026635  ////////M90257500       ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000016300,50////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////C3oOOOooOoOooOOOoo////15/07 R1488615                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////30124373         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150713  EWF 2016021207USD  0000,9302122026637  ////////M90257457       ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000831,90////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////60ooooOooOOOoOoOoo////15/07 P0463815                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////30124373         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         40///////////////0000000000055,22////////////////////////////////////////////////  /////////////////////////////////////7000      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////P0463815          ////15/07                                             //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////400158           ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150713  EWF 2016021207USD  0000,9302122026638  ////////M90257509       ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000002218,00////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////60OoooooOOooooOooo////15/07 P0491115                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////30124373         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         40///////////////0000000000055,22////////////////////////////////////////////////  /////////////////////////////////////7000      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////P0491115          ////15/07                                             //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////400158           ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150713  EWF 2016021207CHF  0001,0000022026639  ////////M90257515       ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000005833,20////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////A6OOooOoOoOooOoooo////15/07 R1575215                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////30124373         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150701  EWF 2016021207USD  0000,9302122026642  ////////C/5 335835      ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000515,00////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////16OooooOooOOoOoooo////15/07 R1612715                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40126141         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150701  EWF 2016021207USD  0000,9302122026643  ////////C/5 335833      ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000835,00////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////58OOoOOooooOooOOoo////15/07 R1441715                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40126141         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150706  EWF 2016021207USD  0000,9302122026644  ////////C/5 336036      ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000515,00////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////6BooooOOoooOooOooo////15/07 R1659015                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40126141         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150701  EWF 2016021207USD  0000,9302122026645  ////////C/5 335836      ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000515,00////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////6DoOoooOooOOoOooOo////15/07 R1613415                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40126141         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150708  EWF 2016021207USD  0000,9302122026646  ////////C/5 336201      ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000515,00////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////74ooOoOooooooooOoO////15/07 R1728915                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40126141         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150706  EWF 2016021207USD  0000,9302122026647  ////////C/5 336035      ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000515,00////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////86OoooOOoooOoooOOo////15/07 R1612615                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40126141         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150706  EWF 2016021207USD  0000,9302122026648  ////////C/5 336034      ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000835,00////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////99OOooooooOooOoooo////15/07 R1445115                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40126141         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150701  EWF 2016021207USD  0000,9302122026649  ////////C/5 335834      ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000835,00////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////D8OOoooOOOooooOOoo////15/07 R1445315                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40126141         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150706  EWF 2016021207CHF  0001,0000022026650  ////////351732          ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000192,80////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////4BooOooooOOOoOOOOo////15/07 P0448015                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////30090682         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150706  EWF 2016021207CHF  0001,0000022026651  ////////351730          ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000057,25////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////69ooOoOooooooooooO////15/07 P0451715                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////30090682         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         40///////////////0000000000007,02////////////////////////////////////////////////  /////////////////////////////////////7000      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////P0451715          ////15/07                                             //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////400122           ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150706  EWF 2016021207CHF  0001,0000022026652  ////////351731          ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000100,05////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////A9oooooooOoOooOOOo////15/07 P0448015                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////30090682         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150707  EWF 2016021207EUR  0001,0468822026653  ////////05/91014407     ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000225,00////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////22oooOooooOooOooOO////15/07 R1727915                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40096899         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150707  EWF 2016021207EUR  0001,0468822026654  ////////05/91015508     ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000225,00////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////24OooooOOoOooOoOoO////15/07 R1728015                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40096899         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150701  EWF 2016021207EUR  0001,0468822026655  ////////05/91015531     ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000768,45////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////76oOOOOooOoOooooOO////15/07 W0054415                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40096899         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150708  EWF 2016021207USD  0000,9302122026656  ////////SI156008034     ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000261,79////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////96OooooOoOoooOOOoo////15/07 P0479215                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40126601         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150709  EWF 2016021207EUR  0001,0468822026657  ////////05/91015509     ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000705,35////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////99ooOoOOoooooOoooo////15/07 R1625015                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40096899         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150713  EWF 2016021207EUR  0001,0468822026662  ////////55941607        ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000725,60////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////4BOoooOOOoOoooooOo////15/07 P0486115                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40091085         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150708  EWF 2016021207CHF  0001,0000022026663  ////////100-120606      ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000004229,50////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0boooooooooooooooo////15/07 P0474115                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////30094003         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         40///////////////0000000000430,56////////////////////////////////////////////////  /////////////////////////////////////7000      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////P0474115          ////15/07                                             //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////400158           ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         40///////////////0000000000054,38////////////////////////////////////////////////  /////////////////////////////////////7000      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////P0474115          ////15/07                                             //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////400122           ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150707  EWF 2016021207CHF  0001,0000022026664  ////////13143106        ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000318,65////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////6eoooooooooooooooo////15/07 P0468115                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////30092269         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         40///////////////0000000000014,04////////////////////////////////////////////////  /////////////////////////////////////7000      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////P0468115          ////15/07                                             //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////400122           ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150709  EWF 2016021207EUR  0001,0468822026665  ////////TL152315        ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000001983,90////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////74oooooooooooooooo////15/07 P0431815                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40099751         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150710  EWF 2016021207EUR  0001,0468822026667  ////////11321           ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000000840,00////////////////////////////////////////////////  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////caoooooooooooooooo////15/07 P0471915                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////950//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////40129316         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20150401  EWF 2016021204EUR  0001,0553176278995  ////////76278995        ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000007833,33////////////////////////////////////////////////  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////15/04 S0026415                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////566//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////VERB05001        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20110209  EWF 2016021202CHF  0001,0000090149059  ////////M90149059       ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000001077,30////////////////////////////////////////////////  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////11/03 S0080410                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////566//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////30124373         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+1FB01                20110209  EWF 2016021202USD  0000,9570290149062  ////////90149062        ///////////////////////////////////////////////////////////X///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+2BBSEG                         31///////////////0000000002185,78////////////////////////////////////////////////  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////11/03 S0125011                                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////566//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////30124374         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jaxp/test/javax/xml/jaxp/unittest/transform/Bug8150704-2.xml	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,2438 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<transferInvoice version="0.32"> 
+  <invoice> 
+    <invoiceNumber>22026623</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0409</vendor> 
+      <vendorCAGECode>CAGE1</vendorCAGECode> 
+      <vendorAccountNumber>40090597</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>91284422</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-09</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-15</bookingDate> 
+      <createdDate>2015-07-15</createdDate> 
+      <invoiceText>D8OOoOOooooOoooooOOOOooOoooOoOoo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="USD">7366.71</totalAmount> 
+        <nettoAmount internationalCurrencyCode="USD">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="USD">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="USD">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>P</orderType> 
+        <orderNumber>P0480715</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-08</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>USD</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>0.93021</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026624</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0307</vendor> 
+      <vendorCAGECode>CAGE2</vendorCAGECode> 
+      <vendorAccountNumber>40127254</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>1500006837</creditorInvoiceNumber> 
+      <invoiceDate>2015-06-30</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>b3oooooooooooooooooooooooooooooo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="USD">3844.0</totalAmount> 
+        <nettoAmount internationalCurrencyCode="USD">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="USD">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="USD">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>R</orderType> 
+        <orderNumber>R1683315</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-07-30</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>USD</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>0.93021</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026625</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>CLOSED</invoiceState> 
+      <type>I</type> 
+      <vendor>V0568</vendor> 
+      <vendorAccountNumber>30092874</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>94043801</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-09</invoiceDate> 
+      <closingDate>2015-07-16</closingDate> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>0CooOooooooooooOOoooOooOoOOoooOo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="CHF">438.5</totalAmount> 
+        <nettoAmount internationalCurrencyCode="CHF">190.008</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="CHF">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>4V</taxCode> 
+          <taxAmount internationalCurrencyCode="CHF">32.48</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>P</orderType> 
+        <orderNumber>P0472115</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-08</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>CHF</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.0</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026626</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0316</vendor> 
+      <vendorCAGECode>CAGE3</vendorCAGECode> 
+      <vendorAccountNumber>40099751</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>TL152062</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-02</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>3coooooooooooooooooooooooooooooo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="EUR">661.3</totalAmount> 
+        <nettoAmount internationalCurrencyCode="EUR">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="EUR">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="EUR">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>P</orderType> 
+        <orderNumber>P0431815</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-01</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>EUR</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.04688</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026627</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0440</vendor> 
+      <vendorAccountNumber>2014686</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>TKL100216</creditorInvoiceNumber> 
+      <invoiceDate>2015-06-17</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>55oooooOoOooooOoOoOOOoOOOoooOOoo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="EUR">699.92</totalAmount> 
+        <nettoAmount internationalCurrencyCode="EUR">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="EUR">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="EUR">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>L</orderType> 
+        <orderNumber>L0032815</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-07-17</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>EUR</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.04688</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026628</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0316</vendor> 
+      <vendorCAGECode>CAGE4</vendorCAGECode> 
+      <vendorAccountNumber>40099751</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>TL152063</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-02</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>9boooooooooooooooooooooooooooooo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="EUR">1983.0</totalAmount> 
+        <nettoAmount internationalCurrencyCode="EUR">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="EUR">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="EUR">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>P</orderType> 
+        <orderNumber>P0431815</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-01</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>EUR</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.04688</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026629</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0506</vendor> 
+      <vendorAccountNumber>40128088</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>000359084</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-13</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>51oOoOoOoOoooooOOOoOooooOOoooOoO</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="EUR">2230.76</totalAmount> 
+        <nettoAmount internationalCurrencyCode="EUR">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="EUR">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="EUR">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>R</orderType> 
+        <orderNumber>R1735915</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-12</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>EUR</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.04688</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026630</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0497</vendor> 
+      <vendorAccountNumber>30090668</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>90864081</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-08</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>acoooooooooooooooooooooooooooooo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="CHF">1893.2</totalAmount> 
+        <nettoAmount internationalCurrencyCode="CHF">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="CHF">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>4V</taxCode> 
+          <taxAmount internationalCurrencyCode="CHF">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>P</orderType> 
+        <orderNumber>P0470615</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-07</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>CHF</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.0</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026631</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0512</vendor> 
+      <vendorAccountNumber>40128846</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>123939</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-08</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>09oooooooooooooooooooooooooooooo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="USD">7896.34</totalAmount> 
+        <nettoAmount internationalCurrencyCode="USD">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="USD">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>TAX</taxCode> 
+          <taxAmount internationalCurrencyCode="USD">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>P</orderType> 
+        <orderNumber>P0400015</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-07</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>USD</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>0.93021</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026633</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>CLOSED</invoiceState> 
+      <type>I</type> 
+      <vendor>V0202</vendor> 
+      <vendorAccountNumber>40128088</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>000358117</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-07</invoiceDate> 
+      <closingDate>2015-07-16</closingDate> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>f5oooooooooooooooooooooooooooooo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="USD">6810.0</totalAmount> 
+        <nettoAmount internationalCurrencyCode="USD">3187.08</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="USD">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="USD">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>P</orderType> 
+        <orderNumber>P0462815</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-06</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>USD</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>0.93021</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026635</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0011</vendor> 
+      <vendorAccountNumber>30124373</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>M90257500</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-13</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>C3oOOOooOoOooOOOoooOOOoOOoooOoOO</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="CHF">16300.5</totalAmount> 
+        <nettoAmount internationalCurrencyCode="CHF">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="CHF">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="CHF">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>R</orderType> 
+        <orderNumber>R1488615</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-12</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>CHF</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.0</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026637</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>CLOSED</invoiceState> 
+      <type>I</type> 
+      <vendor>V0139</vendor> 
+      <vendorAccountNumber>30124373</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>M90257457</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-13</invoiceDate> 
+      <closingDate>2015-07-16</closingDate> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>60ooooOooOOOoOoOoooooooOOOOoooOO</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="USD">831.9</totalAmount> 
+        <nettoAmount internationalCurrencyCode="USD">334.1052</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="USD">118.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="USD">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>P</orderType> 
+        <orderNumber>P0463815</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-12</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>USD</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>0.93021</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+    <invoiceCharges> 
+      <chargeType> 
+        <chargeCode>H</chargeCode> 
+        <description>HANDLING CHARGE</description> 
+        <isTax>N</isTax> 
+        <affectsAveragePrice>N</affectsAveragePrice> 
+      </chargeType> 
+      <accountNumber>400158</accountNumber> 
+      <costType/> 
+      <costcenter>7000</costcenter> 
+      <financialCostcenter>7000</financialCostcenter> 
+      <costcenter2/> 
+      <chargeAmount> 
+        <totalAmount internationalCurrencyCode="USD">55.224</totalAmount> 
+        <nettoAmount internationalCurrencyCode="USD">55.224</nettoAmount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <financialTaxCode>V0</financialTaxCode> 
+          <taxAmount internationalCurrencyCode="USD">0.0</taxAmount> 
+        </taxation> 
+      </chargeAmount> 
+      <bookingType>D</bookingType> 
+    </invoiceCharges> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026638</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>CLOSED</invoiceState> 
+      <type>I</type> 
+      <vendor>V0139</vendor> 
+      <vendorAccountNumber>30124373</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>M90257509</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-13</invoiceDate> 
+      <closingDate>2015-07-16</closingDate> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>60OoooooOOooooOoooooooooOOooOOOO</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="USD">2218.0</totalAmount> 
+        <nettoAmount internationalCurrencyCode="USD">982.8</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="USD">118.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="USD">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>P</orderType> 
+        <orderNumber>P0491115</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-12</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>USD</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>0.93021</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+    <invoiceCharges> 
+      <chargeType> 
+        <chargeCode>H</chargeCode> 
+        <description>HANDLING CHARGE</description> 
+        <isTax>N</isTax> 
+        <affectsAveragePrice>N</affectsAveragePrice> 
+      </chargeType> 
+      <accountNumber>400158</accountNumber> 
+      <costType/> 
+      <costcenter>7000</costcenter> 
+      <financialCostcenter>7000</financialCostcenter> 
+      <costcenter2/> 
+      <chargeAmount> 
+        <totalAmount internationalCurrencyCode="USD">55.224</totalAmount> 
+        <nettoAmount internationalCurrencyCode="USD">55.224</nettoAmount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <financialTaxCode>V0</financialTaxCode> 
+          <taxAmount internationalCurrencyCode="USD">0.0</taxAmount> 
+        </taxation> 
+      </chargeAmount> 
+      <bookingType>D</bookingType> 
+    </invoiceCharges> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026639</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0162</vendor> 
+      <vendorAccountNumber>30124373</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>M90257515</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-13</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>A6OOooOoOoOooOoooooooooOooooOOoo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="CHF">5833.2</totalAmount> 
+        <nettoAmount internationalCurrencyCode="CHF">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="CHF">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="CHF">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>R</orderType> 
+        <orderNumber>R1575215</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-12</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>CHF</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.0</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026642</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0400</vendor> 
+      <vendorCAGECode>CAGE5</vendorCAGECode> 
+      <vendorAccountNumber>40126141</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>C/5 335835</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-01</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>16OooooOooOOoOooooOoooooooooooOO</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="USD">515.0</totalAmount> 
+        <nettoAmount internationalCurrencyCode="USD">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="USD">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="USD">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>R</orderType> 
+        <orderNumber>R1612715</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-07-31</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>USD</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>0.93021</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026643</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0400</vendor> 
+      <vendorCAGECode>CAGE6</vendorCAGECode> 
+      <vendorAccountNumber>40126141</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>C/5 335833</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-01</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>58OOoOOooooOooOOooOoooOooooOOoOo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="USD">835.0</totalAmount> 
+        <nettoAmount internationalCurrencyCode="USD">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="USD">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="USD">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>R</orderType> 
+        <orderNumber>R1441715</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-07-31</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>USD</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>0.93021</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026644</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0400</vendor> 
+      <vendorCAGECode>CAGE7</vendorCAGECode> 
+      <vendorAccountNumber>40126141</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>C/5 336036</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-06</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>6BooooOOoooOooOooooOooooOoOOoooo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="USD">515.0</totalAmount> 
+        <nettoAmount internationalCurrencyCode="USD">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="USD">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="USD">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>R</orderType> 
+        <orderNumber>R1659015</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-05</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>USD</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>0.93021</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026645</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0400</vendor> 
+      <vendorCAGECode>CAGE8</vendorCAGECode> 
+      <vendorAccountNumber>40126141</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>C/5 335836</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-01</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>6DoOoooOooOOoOooOoOoOoOOOoOoOooo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="USD">515.0</totalAmount> 
+        <nettoAmount internationalCurrencyCode="USD">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="USD">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="USD">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>R</orderType> 
+        <orderNumber>R1613415</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-07-31</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>USD</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>0.93021</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026646</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0400</vendor> 
+      <vendorCAGECode>CAGE9</vendorCAGECode> 
+      <vendorAccountNumber>40126141</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>C/5 336201</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-08</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>74ooOoOooooooooOoOOOoOoOooOoooOO</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="USD">515.0</totalAmount> 
+        <nettoAmount internationalCurrencyCode="USD">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="USD">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="USD">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>R</orderType> 
+        <orderNumber>R1728915</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-07</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>USD</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>0.93021</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026647</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0400</vendor> 
+      <vendorCAGECode>CAGEA</vendorCAGECode> 
+      <vendorAccountNumber>40126141</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>C/5 336035</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-06</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>86OoooOOoooOoooOOoOooOoooOOoOoOo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="USD">515.0</totalAmount> 
+        <nettoAmount internationalCurrencyCode="USD">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="USD">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="USD">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>R</orderType> 
+        <orderNumber>R1612615</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-05</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>USD</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>0.93021</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026648</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0400</vendor> 
+      <vendorCAGECode>CAGEB</vendorCAGECode> 
+      <vendorAccountNumber>40126141</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>C/5 336034</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-06</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>99OOooooooOooOooooOooOooOoOOoOoo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="USD">835.0</totalAmount> 
+        <nettoAmount internationalCurrencyCode="USD">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="USD">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="USD">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>R</orderType> 
+        <orderNumber>R1445115</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-05</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>USD</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>0.93021</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026649</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0400</vendor> 
+      <vendorCAGECode>CAGEC</vendorCAGECode> 
+      <vendorAccountNumber>40126141</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>C/5 335834</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-01</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>D8OOoooOOOooooOOoooOOoOoooOoOOOO</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="USD">835.0</totalAmount> 
+        <nettoAmount internationalCurrencyCode="USD">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="USD">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="USD">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>R</orderType> 
+        <orderNumber>R1445315</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-07-31</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>USD</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>0.93021</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026650</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0429</vendor> 
+      <vendorAccountNumber>30090682</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>351732</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-06</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>4BooOooooOOOoOOOOooo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="CHF">192.8</totalAmount> 
+        <nettoAmount internationalCurrencyCode="CHF">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="CHF">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>4V</taxCode> 
+          <taxAmount internationalCurrencyCode="CHF">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>P</orderType> 
+        <orderNumber>P0448015</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-05</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>CHF</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.0</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026651</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>CLOSED</invoiceState> 
+      <type>I</type> 
+      <vendor>V0429</vendor> 
+      <vendorAccountNumber>30090682</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>351730</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-06</invoiceDate> 
+      <closingDate>2015-07-16</closingDate> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>69ooOoOooooooooooOoOooOOOOoooOoO</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="CHF">57.25</totalAmount> 
+        <nettoAmount internationalCurrencyCode="CHF">17.784</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="CHF">15.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>4V</taxCode> 
+          <taxAmount internationalCurrencyCode="CHF">4.24</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>P</orderType> 
+        <orderNumber>P0451715</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-05</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>CHF</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.0</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+    <invoiceCharges> 
+      <chargeType> 
+        <chargeCode>F</chargeCode> 
+        <description>FREIGHT</description> 
+        <isTax>N</isTax> 
+        <affectsAveragePrice>N</affectsAveragePrice> 
+      </chargeType> 
+      <accountNumber>400122</accountNumber> 
+      <costType/> 
+      <costcenter>7000</costcenter> 
+      <financialCostcenter>7000</financialCostcenter> 
+      <costcenter2/> 
+      <chargeAmount> 
+        <totalAmount internationalCurrencyCode="CHF">7.02</totalAmount> 
+        <nettoAmount internationalCurrencyCode="CHF">7.02</nettoAmount> 
+        <taxation> 
+          <taxCode>4V</taxCode> 
+          <financialTaxCode>4V</financialTaxCode> 
+          <taxAmount internationalCurrencyCode="CHF">0.5616</taxAmount> 
+        </taxation> 
+      </chargeAmount> 
+      <bookingType>D</bookingType> 
+    </invoiceCharges> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026652</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0429</vendor> 
+      <vendorAccountNumber>30090682</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>351731</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-06</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>A9oooooooOoOooOOOoOO</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="CHF">100.05</totalAmount> 
+        <nettoAmount internationalCurrencyCode="CHF">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="CHF">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>4V</taxCode> 
+          <taxAmount internationalCurrencyCode="CHF">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>P</orderType> 
+        <orderNumber>P0448015</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-05</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>CHF</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.0</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026653</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0028</vendor> 
+      <vendorCAGECode>CAGED</vendorCAGECode> 
+      <vendorAccountNumber>40096899</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>05/91014407</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-07</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>22oooOooooOooOooOOoOooOoooooOooO</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="EUR">225.0</totalAmount> 
+        <nettoAmount internationalCurrencyCode="EUR">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="EUR">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="EUR">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>R</orderType> 
+        <orderNumber>R1727915</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-06</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>EUR</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.04688</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026654</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0028</vendor> 
+      <vendorCAGECode>CAGEE</vendorCAGECode> 
+      <vendorAccountNumber>40096899</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>05/91015508</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-07</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>24OooooOOoOooOoOoOoOoooOOoOOooOo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="EUR">225.0</totalAmount> 
+        <nettoAmount internationalCurrencyCode="EUR">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="EUR">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="EUR">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>R</orderType> 
+        <orderNumber>R1728015</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-06</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>EUR</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.04688</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026655</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>CLOSED</invoiceState> 
+      <type>I</type> 
+      <vendor>V0028</vendor> 
+      <vendorCAGECode>CAGEF</vendorCAGECode> 
+      <vendorAccountNumber>40096899</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>05/91015531</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-01</invoiceDate> 
+      <closingDate>2015-07-16</closingDate> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>76oOOOOooOoOooooOOoOoOOooOooOoOO</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="EUR">768.45</totalAmount> 
+        <nettoAmount internationalCurrencyCode="EUR">359.6346</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="EUR">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="EUR">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>W</orderType> 
+        <orderNumber>W0054415</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-07-31</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>EUR</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.04688</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026656</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0651</vendor> 
+      <vendorAccountNumber>40126601</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>SI156008034</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-08</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>96OooooOoOoooOOOoooOOoooOoOOOOoO</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="USD">261.79</totalAmount> 
+        <nettoAmount internationalCurrencyCode="USD">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="USD">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="USD">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>P</orderType> 
+        <orderNumber>P0479215</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-07</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>USD</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>0.93021</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026657</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>CLOSED</invoiceState> 
+      <type>I</type> 
+      <vendor>V0028</vendor> 
+      <vendorCAGECode>CAGEG</vendorCAGECode> 
+      <vendorAccountNumber>40096899</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>05/91015509</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-09</invoiceDate> 
+      <closingDate>2015-07-16</closingDate> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>99ooOoOOoooooOooooOOOOoooOOoOOoO</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="EUR">705.35</totalAmount> 
+        <nettoAmount internationalCurrencyCode="EUR">330.1038</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="EUR">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="EUR">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>R</orderType> 
+        <orderNumber>R1625015</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-08</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>EUR</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.04688</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026662</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0495</vendor> 
+      <vendorCAGECode>CAGEH</vendorCAGECode> 
+      <vendorAccountNumber>40091085</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>55941607</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-13</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>4BOoooOOOoOoooooOoOOooOooooOoOoo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="EUR">725.6</totalAmount> 
+        <nettoAmount internationalCurrencyCode="EUR">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="EUR">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="EUR">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>P</orderType> 
+        <orderNumber>P0486115</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-12</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>EUR</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.04688</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026663</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>CLOSED</invoiceState> 
+      <type>I</type> 
+      <vendor>V0604</vendor> 
+      <vendorAccountNumber>30094003</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>100-120606</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-08</invoiceDate> 
+      <closingDate>2015-07-16</closingDate> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>0boooooooooooooooooooooooooooooo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="CHF">4229.5</totalAmount> 
+        <nettoAmount internationalCurrencyCode="CHF">1347.84</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="CHF">1036.2</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>TAX</taxCode> 
+          <taxAmount internationalCurrencyCode="CHF">313.3</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>P</orderType> 
+        <orderNumber>P0474115</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-07</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>CHF</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.0</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+    <invoiceCharges> 
+      <chargeType> 
+        <chargeCode>H</chargeCode> 
+        <description>HANDLING CHARGE</description> 
+        <isTax>N</isTax> 
+        <affectsAveragePrice>N</affectsAveragePrice> 
+      </chargeType> 
+      <accountNumber>400158</accountNumber> 
+      <costType/> 
+      <costcenter>7000</costcenter> 
+      <financialCostcenter>7000</financialCostcenter> 
+      <costcenter2/> 
+      <chargeAmount> 
+        <totalAmount internationalCurrencyCode="CHF">430.56</totalAmount> 
+        <nettoAmount internationalCurrencyCode="CHF">430.56</nettoAmount> 
+        <taxation> 
+          <taxCode>4V</taxCode> 
+          <financialTaxCode>4V</financialTaxCode> 
+          <taxAmount internationalCurrencyCode="CHF">34.4448</taxAmount> 
+        </taxation> 
+      </chargeAmount> 
+      <bookingType>D</bookingType> 
+    </invoiceCharges> 
+    <invoiceCharges> 
+      <chargeType> 
+        <chargeCode>F</chargeCode> 
+        <description>FREIGHT</description> 
+        <isTax>N</isTax> 
+        <affectsAveragePrice>N</affectsAveragePrice> 
+      </chargeType> 
+      <accountNumber>400122</accountNumber> 
+      <costType/> 
+      <costcenter>7000</costcenter> 
+      <financialCostcenter>7000</financialCostcenter> 
+      <costcenter2/> 
+      <chargeAmount> 
+        <totalAmount internationalCurrencyCode="CHF">54.3816</totalAmount> 
+        <nettoAmount internationalCurrencyCode="CHF">54.3816</nettoAmount> 
+        <taxation> 
+          <taxCode>4V</taxCode> 
+          <financialTaxCode>4V</financialTaxCode> 
+          <taxAmount internationalCurrencyCode="CHF">4.3524</taxAmount> 
+        </taxation> 
+      </chargeAmount> 
+      <bookingType>D</bookingType> 
+    </invoiceCharges> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026664</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>CLOSED</invoiceState> 
+      <type>I</type> 
+      <vendor>V0634</vendor> 
+      <vendorAccountNumber>30092269</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>13143106</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-07</invoiceDate> 
+      <closingDate>2015-07-16</closingDate> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>6eoooooooooooooooooooooooooooooo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="CHF">318.65</totalAmount> 
+        <nettoAmount internationalCurrencyCode="CHF">124.0434</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="CHF">30.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>4V</taxCode> 
+          <taxAmount internationalCurrencyCode="CHF">23.599999999999998</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>P</orderType> 
+        <orderNumber>P0468115</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-06</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>CHF</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.0</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+    <invoiceCharges> 
+      <chargeType> 
+        <chargeCode>F</chargeCode> 
+        <description>FREIGHT</description> 
+        <isTax>N</isTax> 
+        <affectsAveragePrice>N</affectsAveragePrice> 
+      </chargeType> 
+      <accountNumber>400122</accountNumber> 
+      <costType/> 
+      <costcenter>7000</costcenter> 
+      <financialCostcenter>7000</financialCostcenter> 
+      <costcenter2/> 
+      <chargeAmount> 
+        <totalAmount internationalCurrencyCode="CHF">14.04</totalAmount> 
+        <nettoAmount internationalCurrencyCode="CHF">14.04</nettoAmount> 
+        <taxation> 
+          <taxCode>4V</taxCode> 
+          <financialTaxCode>4V</financialTaxCode> 
+          <taxAmount internationalCurrencyCode="CHF">1.1232</taxAmount> 
+        </taxation> 
+      </chargeAmount> 
+      <bookingType>D</bookingType> 
+    </invoiceCharges> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026665</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0316</vendor> 
+      <vendorCAGECode>CAGEI</vendorCAGECode> 
+      <vendorAccountNumber>40099751</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>TL152315</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-09</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>74oooooooooooooooooooooooooooooo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="EUR">1983.9</totalAmount> 
+        <nettoAmount internationalCurrencyCode="EUR">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="EUR">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="EUR">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>P</orderType> 
+        <orderNumber>P0431815</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-08</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>EUR</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.04688</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>22026667</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>OPEN</invoiceState> 
+      <type>I</type> 
+      <vendor>V0642</vendor> 
+      <vendorAccountNumber>40129316</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>11321</creditorInvoiceNumber> 
+      <invoiceDate>2015-07-10</invoiceDate> 
+      <closingDate/> 
+      <bookingDate>2015-07-16</bookingDate> 
+      <createdDate>2015-07-16</createdDate> 
+      <invoiceText>caoooooooooooooooooooooooooooooo</invoiceText> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="EUR">840.0</totalAmount> 
+        <nettoAmount internationalCurrencyCode="EUR">0.0</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="EUR">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="EUR">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>P</orderType> 
+        <orderNumber>P0471915</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>30D</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-08-09</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>07</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>EUR</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.04688</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>76278995</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>CLOSED</invoiceState> 
+      <type>I</type> 
+      <vendor>V0166</vendor> 
+      <vendorCAGECode>CAGEJ</vendorCAGECode> 
+      <vendorAccountNumber>VERB05001</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>76278995</creditorInvoiceNumber> 
+      <invoiceDate>2015-04-01</invoiceDate> 
+      <closingDate>2015-04-17</closingDate> 
+      <bookingDate>2015-04-17</bookingDate> 
+      <createdDate>2015-04-17</createdDate> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="EUR">7833.33</totalAmount> 
+        <nettoAmount internationalCurrencyCode="EUR">3394.4414</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="EUR">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>V0</taxCode> 
+          <taxAmount internationalCurrencyCode="EUR">580.25</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>S</orderType> 
+        <orderNumber>S0026415</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>Y</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code/> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2015-04-01</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>Y</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>04</financialPeriodMonth> 
+        <financialPeriodYear>2015</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>EUR</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.05531</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>90149059</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>CLOSED</invoiceState> 
+      <type>I</type> 
+      <vendor>V0016</vendor> 
+      <vendorAccountNumber>30124373</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>M90149059</creditorInvoiceNumber> 
+      <invoiceDate>2011-02-09</invoiceDate> 
+      <closingDate>2011-02-18</closingDate> 
+      <bookingDate>2011-02-18</bookingDate> 
+      <createdDate>2011-02-18</createdDate> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="CHF">1077.3</totalAmount> 
+        <nettoAmount internationalCurrencyCode="CHF">504.1764</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="CHF">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>TAX</taxCode> 
+          <taxAmount internationalCurrencyCode="CHF">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>S</orderType> 
+        <orderNumber>S0080410</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>N</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>5</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2011-02-09</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>N</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>03</financialPeriodMonth> 
+        <financialPeriodYear>2011</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>CHF</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 
+        <conversionRate>1.0</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+  <invoice> 
+    <invoiceNumber>90149062</invoiceNumber> 
+    <invoiceHeader> 
+      <entityInformation> 
+        <entityCode>CRX</entityCode> 
+        <currency>CHF</currency> 
+      </entityInformation> 
+      <invoiceState>CLOSED</invoiceState> 
+      <type>I</type> 
+      <vendor>V0016</vendor> 
+      <vendorAccountNumber>30124374</vendorAccountNumber> 
+      <mandator/> 
+      <creditorInvoiceNumber>90149062</creditorInvoiceNumber> 
+      <invoiceDate>2011-02-09</invoiceDate> 
+      <closingDate>2011-02-21</closingDate> 
+      <bookingDate>2011-02-21</bookingDate> 
+      <createdDate>2011-02-21</createdDate> 
+      <invoiceAmount> 
+        <totalAmount internationalCurrencyCode="USD">2185.78</totalAmount> 
+        <nettoAmount internationalCurrencyCode="USD">1022.945</nettoAmount> 
+        <handlingAmount internationalCurrencyCode="USD">0.0</handlingAmount> 
+        <discount>0.0</discount> 
+        <taxation> 
+          <taxCode>TAX</taxCode> 
+          <taxAmount internationalCurrencyCode="USD">0.0</taxAmount> 
+        </taxation> 
+      </invoiceAmount> 
+      <orderInformation> 
+        <orderType>S</orderType> 
+        <orderNumber>S0125011</orderNumber> 
+      </orderInformation> 
+      <invoiceTransferInformation> 
+        <transferDate>2016-02-12</transferDate> 
+        <preTransferDate/> 
+        <transferRelease>N</transferRelease> 
+      </invoiceTransferInformation> 
+      <paymentInformation> 
+        <paymentCondition> 
+          <code>6</code> 
+        </paymentCondition> 
+        <paymentMode> 
+          <code/> 
+        </paymentMode> 
+        <paymentDate/> 
+        <paymentDueDate>2011-02-09</paymentDueDate> 
+        <paymentReminderCount>0</paymentReminderCount> 
+        <paymentRelease>N</paymentRelease> 
+      </paymentInformation> 
+      <financialPeriodInformation> 
+        <financialPeriodMonth>03</financialPeriodMonth> 
+        <financialPeriodYear>2011</financialPeriodYear> 
+      </financialPeriodInformation> 
+      <currencyConversionInformation> 
+        <targetCurrency>USD</targetCurrency> 
+        <sourceCurrency>CHF</sourceCurrency> 	
+        <conversionRate>0.95702</conversionRate> 
+      </currencyConversionInformation> 
+    </invoiceHeader> 
+  </invoice> 
+</transferInvoice> 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jaxp/test/javax/xml/jaxp/unittest/transform/Bug8150704-2.xsl	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,1935 @@
+<?xml version="1.0" encoding="UTF-8"?> 
+<!-- 
+Invoice Transfer XSLT 
+--> 
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exslt="http://exslt.org/common" exclude-result-prefixes="exslt" version="1.0"> 
+
+<!--<xsl:output method="xml" indent="yes"/>--> 
+<xsl:output method="text" encoding="iso-8859-1"/> 
+<xsl:decimal-format name="european" decimal-separator="," grouping-separator="'"/> 
+
+<!-- Definition of global constants --> 
+<xsl:variable name="batchSTYPE">0</xsl:variable> 
+<xsl:variable name="batchGROUP">fto-erech</xsl:variable>	
+<xsl:variable name="batchMANDT">200</xsl:variable> 
+<xsl:variable name="batchUSNAM">amos-batch</xsl:variable> 
+<xsl:variable name="batchSTART">00000000</xsl:variable> 
+<xsl:variable name="batchXKEEP">X</xsl:variable> 
+
+<!-- KREDI constants --> 
+<xsl:variable name="constTCODE">FB01</xsl:variable>	
+<xsl:variable name="constBLART">TP</xsl:variable>	
+<xsl:variable name="constBUKRS">EWF</xsl:variable>	
+
+<!-- LZBKZ constants 
+"566" for S-Orders and "950" for all the rest --> 
+<xsl:variable name="constLZBZK_S_ORDER">566</xsl:variable> 
+<xsl:variable name="constLZBZK_OTHER">950</xsl:variable> 
+
+<!-- Tax code uised for charges flagged as "TAX" --> 
+<xsl:variable name="taxCodeConst">2w</xsl:variable> 
+<!-- Tax code used for all other occurences in file --> 
+<xsl:variable name="taxCodeDefaultConst">V0</xsl:variable>	
+
+<!-- entry point --> 
+<xsl:template match="/"> 
+
+<xsl:variable name="transformation_1"> 
+<xsl:call-template name="transformation_1_elements"/> 
+</xsl:variable> 
+
+<xsl:variable name="transformation_2"> 
+<transformation_2_elements> 
+<batchInformation> 
+<xsl:call-template name="batchInformation"/> 
+</batchInformation> 
+<xsl:for-each select="exslt:node-set($transformation_1)"> 
+<xsl:apply-templates select="transformation_1_elements"/> 
+</xsl:for-each> 
+</transformation_2_elements> 
+</xsl:variable> 
+
+<xsl:variable name="transformation_3"> 
+<transformation_3_elements> 
+<xsl:for-each select="exslt:node-set($transformation_2)"> 
+<xsl:apply-templates select="transformation_2_elements"/> 
+</xsl:for-each> 
+</transformation_3_elements> 
+</xsl:variable> 
+
+<!-- text output --> 
+<xsl:for-each select="exslt:node-set($transformation_3)"> 
+<xsl:apply-templates select="transformation_3_elements" /> 
+</xsl:for-each> 
+
+<!-- xml output 
+<xsl:for-each select="exslt:node-set($transformation_3)"> 
+<xsl:copy-of select="."/> 
+</xsl:for-each>--> 
+
+</xsl:template> 
+
+<xsl:template match="transformation_3_elements"> 
+<xsl:for-each select="*"> 
+<xsl:call-template name="Fill_Up" /> 
+</xsl:for-each> 
+</xsl:template> 
+
+<xsl:template name="Fill_Up"> 
+<xsl:for-each select="*"> 
+<xsl:variable name="align"> 
+<xsl:value-of select="@Alignment" /> 
+</xsl:variable> 
+<xsl:variable name="filler"> 
+<xsl:value-of select="@Filler" /> 
+</xsl:variable> 
+<xsl:variable name="length"> 
+<xsl:value-of select="@Length" /> 
+</xsl:variable> 
+<xsl:variable name="tagValue"> 
+<xsl:value-of select="." /> 
+</xsl:variable> 
+
+<xsl:variable name="defaultFiller"> 
+<xsl:choose> 
+<xsl:when test="$filler = 'blank'"> 
+<!-- make empty fields to be filled with '/' --> 
+<xsl:choose> 
+<xsl:when test="$tagValue = '/'"> 
+<xsl:value-of select="'/'" /> 
+</xsl:when> 
+<xsl:otherwise> 
+<xsl:value-of select="' '" /> 
+</xsl:otherwise> 
+</xsl:choose> 
+</xsl:when> 
+<xsl:otherwise> 
+<xsl:value-of select="$filler" /> 
+</xsl:otherwise> 
+</xsl:choose> 
+</xsl:variable> 
+
+<xsl:call-template name="justify"> 
+<xsl:with-param name="align" select="$align" /> 
+<xsl:with-param name="filler" select="$defaultFiller" /> 
+<xsl:with-param name="value" select="$tagValue" /> 
+<xsl:with-param name="width" select="$length" /> 
+</xsl:call-template> 
+</xsl:for-each> 
+<xsl:text>&#xa;</xsl:text> 
+</xsl:template> 
+
+<!-- start transformation_3 --> 
+<xsl:template match="transformation_2_elements"> 
+<xsl:apply-templates select="batchInformation" /> 
+<xsl:apply-templates select="invoice_elements" mode="transformation_3" /> 
+</xsl:template> 
+
+<xsl:template match="invoice_elements" mode="transformation_3"> 
+<xsl:for-each select="*"> 
+<xsl:if test="contains(name(),'header_elements')"> 
+<xsl:call-template name="header_elements_copy" /> 
+</xsl:if> 
+<xsl:if test="contains(name(),'header_1_elements')"> 
+<xsl:call-template name="header_1_elements_copy" /> 
+</xsl:if> 
+<xsl:if test="contains(name(),'invoiceCharges_1_elements')"> 
+<xsl:call-template name="invoiceCharges_1_elements_copy" /> 
+</xsl:if> 
+<xsl:if test="contains(name(),'invoiceDetails_1_elements')"> 
+<xsl:call-template name="invoiceDetails_1_elements_copy" /> 
+</xsl:if> 
+<xsl:if test="contains(name(),'invoiceDetails_DetailCharges_1_elements')"> 
+<xsl:call-template name="invoiceDetails_DetailCharges_1_elements_copy" /> 
+</xsl:if> 
+
+</xsl:for-each> 
+</xsl:template> 
+
+<xsl:template match="batchInformation"> 
+<xsl:copy-of select="." /> 
+</xsl:template> 
+<xsl:template name="header_elements_copy"> 
+<xsl:copy-of select="." /> 
+</xsl:template> 
+<xsl:template name="header_1_elements_copy"> 
+<xsl:copy-of select="." /> 
+</xsl:template> 
+<xsl:template name="invoiceCharges_1_elements_copy"> 
+<xsl:copy-of select="." /> 
+</xsl:template> 
+<xsl:template name="invoiceDetails_1_elements_copy"> 
+<xsl:copy-of select="." /> 
+</xsl:template> 
+<xsl:template name="invoiceDetails_DetailCharges_1_elements_copy"> 
+<xsl:copy-of select="." /> 
+</xsl:template> 
+<!-- end transformation_3 --> 
+
+<!-- start transformation_2 --> 
+<xsl:template name="batchInformation"> 
+<STYPE ID="1" Length="1" Alignment="left" Filler="blank"> 
+<xsl:value-of select="$batchSTYPE" /> 
+</STYPE> 
+<GROUP ID="2" Length="12" Alignment="left" Filler="blank"> 
+<xsl:value-of select="$batchGROUP" /> 
+</GROUP> 
+<MANDT ID="3" Length="3" Alignment="left" Filler="blank"> 
+<xsl:value-of select="$batchMANDT" /> 
+</MANDT> 
+<USNAM ID="4" Length="12" Alignment="left" Filler="blank"> 
+<xsl:value-of select="$batchUSNAM" /> 
+</USNAM> 
+<START ID="5" Length="8" Alignment="left" Filler="blank"> 
+<xsl:value-of select="$batchSTART" /> 
+</START> 
+<XKEEP ID="6" Length="1" Alignment="left" Filler="blank"> 
+<xsl:value-of select="$batchXKEEP" /> 
+</XKEEP> 
+<NODATA ID="7" Length="1" Alignment="left" Filler="blank">/</NODATA> 
+</xsl:template> 
+
+<xsl:template match="transformation_1_elements"> 
+<xsl:apply-templates select="invoice_elements" mode="transformation_2"/> 
+</xsl:template> 
+
+<xsl:template match="invoice_elements" mode="transformation_2"> 
+<invoice_elements> 
+<xsl:for-each select="@*"> 
+<xsl:attribute name="{local-name(.)}"> 
+<xsl:value-of select="."/> 
+</xsl:attribute> 
+</xsl:for-each> 
+<xsl:call-template name="header_elements"/> 
+<xsl:call-template name="header_1_elements"/> 
+<xsl:for-each select="*[count(./*) &gt; 0]"> 
+<xsl:if test="contains(name(),'invoiceCharges_elements')"> 
+<xsl:call-template name="invoiceCharges_1_elements"/> 
+</xsl:if> 
+<xsl:if test="contains(name(),'invoiceDetails_elements')"> 
+<xsl:call-template name="invoiceDetails_1_elements"/> 
+</xsl:if> 
+<xsl:if test="contains(name(),'invoiceDetails_DetailCharges_elements')"> 
+<xsl:call-template name="invoiceDetails_DetailCharges_1_elements"/> 
+</xsl:if> 
+</xsl:for-each> 
+</invoice_elements> 
+</xsl:template> 
+
+<xsl:template name="header_elements"> 
+<header_elements> 
+<STYPE ID="1" Length="1" Alignment="left" Filler="blank">1</STYPE> 
+<TCODE ID="2" Length="20" Alignment="left" Filler="blank"> 
+<xsl:value-of select="$constTCODE" /> 
+</TCODE> 
+<!-- create invoice date --> 
+<xsl:variable name="invoiceDate"> 
+<xsl:call-template name="getFormatedDate"> 
+<xsl:with-param name="date2format" select="invoiceDate"/> 
+</xsl:call-template> 
+</xsl:variable> 
+<!-- create invoice date month --> 
+<xsl:variable name="invoiceMonth"> 
+<xsl:call-template name="getMonthOfDate"> 
+<xsl:with-param name="date2format" select="invoiceDate"/> 
+</xsl:call-template> 
+</xsl:variable> 
+<BLDAT ID="3" Length="8" Alignment="left" Filler="blank"> 
+<xsl:value-of select="$invoiceDate" /> 
+</BLDAT> 
+<BLART ID="4" Length="2" Alignment="left" Filler="blank"> 
+<xsl:choose> 
+<xsl:when test="(invoiceNumber &gt; 0051053500) and (invoiceNumber &lt; 0051999999)">KA</xsl:when> 
+<xsl:when test="(invoiceNumber &gt; 0054012000) and (invoiceNumber &lt; 0054999999)">EA</xsl:when> 
+<xsl:otherwise> </xsl:otherwise> 
+</xsl:choose> 
+</BLART> 
+<BUKRS ID="5" Length="4" Alignment="left" Filler="blank"> 
+<xsl:value-of select="$constBUKRS" /> 
+</BUKRS> 
+<!-- create transfer date --> 
+<xsl:variable name="transferDate"> 
+<xsl:call-template name="getFormatedDate"> 
+<xsl:with-param name="date2format" select="transferDate"/> 
+</xsl:call-template> 
+</xsl:variable> 
+<BUDAT ID="6" Length="8" Alignment="left" Filler="blank"> 
+<xsl:value-of select="$transferDate" /> 
+</BUDAT> 
+<MONAT ID="7" Length="2" Alignment="left" Filler="blank"> 
+<xsl:value-of select="$invoiceMonth" /> 
+</MONAT> 
+
+<WAERS ID="8" Length="5" Alignment="left" Filler="blank"> 
+<xsl:value-of select="targetCurrency" /> 
+</WAERS> 
+
+<KURSF ID="9" Length="10" Alignment="left" Filler="blank"> 
+<xsl:value-of select="format-number(conversionRate, '0000,00000', 'european')"/>	
+</KURSF> 
+<!--<BELNR ID="10" Length="10" Alignment="left" Filler="blank">/</BELNR>--> 
+<BELNR ID="10" Length="10" Alignment="left" Filler="blank"> 
+<xsl:value-of select="invoiceNumber" /> 
+</BELNR> 
+<WWERT ID="11" Length="8" Alignment="left" Filler="blank">/</WWERT> 
+<XBLNR ID="12" Length="16" Alignment="left" Filler="blank"> 
+<xsl:value-of select="creditorInvoiceNumber" /> 
+</XBLNR> 
+<BVORG ID="13" Length="16" Alignment="left" Filler="blank">/</BVORG> 
+<BKTXT ID="14" Length="25" Alignment="left" Filler="blank">/</BKTXT> 
+<PARGB ID="15" Length="4" Alignment="left" Filler="blank">/</PARGB> 
+<AUGLV ID="16" Length="8" Alignment="left" Filler="blank">/</AUGLV> 
+<VBUND ID="17" Length="6" Alignment="left" Filler="blank">/</VBUND> 
+<XMWST ID="18" Length="1" Alignment="left" Filler="blank">X</XMWST> 
+<DOCID ID="19" Length="10" Alignment="left" Filler="blank">/</DOCID> 
+<BARCD ID="20" Length="40" Alignment="left" Filler="blank">/</BARCD> 
+<STODT ID="21" Length="8" Alignment="left" Filler="blank">/</STODT> 
+<BRNCH ID="22" Length="4" Alignment="left" Filler="blank">/</BRNCH> 
+<NUMPG ID="23" Length="3" Alignment="left" Filler="blank">/</NUMPG> 
+<STGRD ID="24" Length="2" Alignment="left" Filler="blank">/</STGRD> 
+<KURSF_M ID="25" Length="10" Alignment="left" Filler="blank">/</KURSF_M> 
+<AUGTX ID="26" Length="50" Alignment="left" Filler="blank">/</AUGTX> 
+<XPRFG ID="27" Length="1" Alignment="left" Filler="blank">/</XPRFG> 
+<XBWAE ID="28" Length="1" Alignment="left" Filler="blank">/</XBWAE> 
+<LDGRP ID="29" Length="4" Alignment="left" Filler="blank">/</LDGRP> 
+<PROPMANO ID="30" Length="13" Alignment="left" Filler="blank">/</PROPMANO> 
+<VATDATE ID="31" Length="8" Alignment="left" Filler="blank">/</VATDATE> 
+<SENDE ID="32" Length="1" Alignment="left" Filler="blank">/</SENDE> 
+</header_elements> 
+</xsl:template> 
+
+<xsl:template name="header_1_elements"> 
+<!-- KREDITOR SECTION --> 
+<header_1_elements> 
+<STYPE ID="1"	Length="1"	Alignment="left" Filler="blank">2</STYPE> 
+<TBNAM ID="2"	Length="30"	Alignment="left" Filler="blank">BBSEG</TBNAM> 
+<NEWBS ID="3"	Length="2"	Alignment="left" Filler="blank"> 
+<xsl:if test="type='I'">31</xsl:if> 
+<xsl:if test="type='C'">21</xsl:if> 
+</NEWBS> 
+<DUMMYX	ID="4"	Length="10"	Alignment="left" Filler="blank">/</DUMMYX> 
+<NEWUM	ID="5"	Length="1"	Alignment="left" Filler="blank">/</NEWUM> 
+<NEWBK	ID="6"	Length="4"	Alignment="left" Filler="blank">/</NEWBK> 
+<WRBTR	ID="7"	Length="16"	Alignment="left" Filler="blank"> 
+<!--	<xsl:value-of select="format-number(totalAmount, '#0.00', 'european')"/>	--> 
+<xsl:value-of select="format-number(totalAmount, '0000000000000,00', 'european')"/>	
+</WRBTR> 
+<DMBTR	ID="8"	Length="16"	Alignment="left" Filler="blank">/</DMBTR> 
+<WMWST	ID="9"	Length="16"	Alignment="left" Filler="blank">/</WMWST> 
+<MWSTS	ID="10"	Length="16"	Alignment="left" Filler="blank">/</MWSTS> 
+<MWSKZ	ID="11"	Length="2"	Alignment="left" Filler="blank"> 
+<xsl:value-of select="financialTaxCode" /> 
+</MWSKZ> 
+<XSKRL	ID="12"	Length="1"	Alignment="left" Filler="blank">/</XSKRL> 
+<FWZUZ	ID="13"	Length="16"	Alignment="left" Filler="blank">/</FWZUZ> 
+<HWZUZ	ID="14"	Length="16"	Alignment="left" Filler="blank">/</HWZUZ> 
+<GSBER	ID="15"	Length="4"	Alignment="left" Filler="blank">/</GSBER> 
+<KOSTL	ID="16"	Length="10"	Alignment="left" Filler="blank">/</KOSTL> 
+<DUMMY4	ID="17"	Length="4"	Alignment="left" Filler="blank">/</DUMMY4> 
+<AUFNR	ID="18"	Length="12"	Alignment="left" Filler="blank">/</AUFNR> 
+<EBELN	ID="19"	Length="10"	Alignment="left" Filler="blank">/</EBELN> 
+<EBELP	ID="20"	Length="5"	Alignment="left" Filler="blank">/</EBELP> 
+<PROJN	ID="21"	Length="16"	Alignment="left" Filler="blank">/</PROJN> 
+<MATNR	ID="22"	Length="18"	Alignment="left" Filler="blank">/</MATNR> 
+<WERKS	ID="23"	Length="4"	Alignment="left" Filler="blank">/</WERKS> 
+<MENGE	ID="24"	Length="17"	Alignment="left" Filler="blank">/</MENGE> 
+<MEINS	ID="25"	Length="3"	Alignment="left" Filler="blank">/</MEINS> 
+<VBEL2	ID="26"	Length="10"	Alignment="left" Filler="blank">/</VBEL2> 
+<POSN2	ID="27"	Length="6"	Alignment="left" Filler="blank">/</POSN2> 
+<ETEN2	ID="28"	Length="4"	Alignment="left" Filler="blank">/</ETEN2> 
+<PERNR	ID="29"	Length="8"	Alignment="left" Filler="blank">/</PERNR> 
+<BEWAR	ID="30"	Length="3"	Alignment="left" Filler="blank">/</BEWAR> 
+<VALUT	ID="31"	Length="8"	Alignment="left" Filler="blank">/</VALUT> 
+<ZFBDT	ID="32"	Length="8"	Alignment="left" Filler="blank">/</ZFBDT> 
+<ZINKZ	ID="33"	Length="2"	Alignment="left" Filler="blank">/</ZINKZ> 
+<ZUONR	ID="34"	Length="18"	Alignment="left" Filler="blank"> 
+<xsl:choose> 
+<xsl:when test="invoiceText and string-length(invoiceText) &gt; 0"> 
+<!-- <xsl:value-of select="invoiceText" /> --> 
+<xsl:value-of select="normalize-space(invoiceText)"/> 
+</xsl:when> 
+<xsl:otherwise> 
+<xsl:value-of select="'/'" /> 
+</xsl:otherwise> 
+</xsl:choose> 
+</ZUONR> 
+<FKONT	ID="35"	Length="3"	Alignment="left" Filler="blank">/</FKONT> 
+<XAABG	ID="36"	Length="1"	Alignment="left" Filler="blank">/</XAABG> 
+<SGTXT	ID="37"	Length="50"	Alignment="left" Filler="blank"> 
+<!-- fa_period Month/fa_period Year Orderno projectno cost_type --> 
+<xsl:variable name="twoDigitYear"> 
+<xsl:value-of select="substring(financialPeriodYear, 3, 4)"/> 
+</xsl:variable> 
+<xsl:value-of select="$twoDigitYear" /> 
+<xsl:value-of select="'/'" /> 
+<xsl:value-of select="financialPeriodMonth" />	
+<xsl:value-of select="' '" /> 
+<xsl:value-of select="orderNumber" />	
+</SGTXT> 
+<BLNKZ	ID="38"	Length="2"	Alignment="left" Filler="blank">/</BLNKZ> 
+<BLNBT	ID="39" Alignment="left" Filler="blank" Length="16">/</BLNBT> 
+<BLNPZ	ID="40" Alignment="left" Filler="blank" Length="8">/</BLNPZ> 
+<MABER	ID="41" Alignment="left" Filler="blank" Length="2">/</MABER> 
+<SKFBT	ID="42" Alignment="left" Filler="blank" Length="16">/</SKFBT> 
+<WSKTO	ID="43" Alignment="left" Filler="blank" Length="16">/</WSKTO> 
+<ZTERM	ID="44" Alignment="left" Filler="blank" Length="4">/</ZTERM> 
+<ZBD1T	ID="45" Alignment="left" Filler="blank" Length="3">/</ZBD1T> 
+<ZBD1P	ID="46" Alignment="left" Filler="blank" Length="6">/</ZBD1P> 
+<ZBD2T	ID="47" Alignment="left" Filler="blank" Length="3">/</ZBD2T> 
+<ZBD2P	ID="48" Alignment="left" Filler="blank" Length="6">/</ZBD2P> 
+<ZBD3T	ID="49" Alignment="left" Filler="blank" Length="3">/</ZBD3T> 
+<ZLSPR	ID="50" Alignment="left" Filler="blank" Length="1">/</ZLSPR> 
+<REBZG	ID="51" Alignment="left" Filler="blank" Length="10">/</REBZG> 
+<REBZJ	ID="52" Alignment="left" Filler="blank" Length="4">/</REBZJ> 
+<REBZZ	ID="53" Alignment="left" Filler="blank" Length="3">/</REBZZ> 
+<ZLSCH	ID="54" Alignment="left" Filler="blank" Length="1">/</ZLSCH> 
+<SAMNR	ID="55" Alignment="left" Filler="blank" Length="8">/</SAMNR> 
+<ZBFIX	ID="56" Alignment="left" Filler="blank" Length="1">/</ZBFIX> 
+<QSSKZ	ID="57" Alignment="left" Filler="blank" Length="2">/</QSSKZ> 
+<QSSHB	ID="58" Alignment="left" Filler="blank" Length="16">/</QSSHB> 
+<QSFBT	ID="59" Alignment="left" Filler="blank" Length="16">/</QSFBT> 
+<ESRNR	ID="60" Alignment="left" Filler="blank" Length="11">/</ESRNR> 
+<ESRPZ	ID="61" Alignment="left" Filler="blank" Length="2">/</ESRPZ> 
+<ESRRE	ID="62" Alignment="left" Filler="blank" Length="27">/</ESRRE> 
+<FDTAG	ID="63" Alignment="left" Filler="blank" Length="8">/</FDTAG> 
+<FDLEV	ID="64" Alignment="left" Filler="blank" Length="2">/</FDLEV> 
+<ANLN1	ID="65" Alignment="left" Filler="blank" Length="12">/</ANLN1> 
+<ANLN2	ID="66" Alignment="left" Filler="blank" Length="4">/</ANLN2> 
+<BZDAT	ID="67" Alignment="left" Filler="blank" Length="8">/</BZDAT> 
+<ANBWA	ID="68" Alignment="left" Filler="blank" Length="3">/</ANBWA> 
+<ABPER	ID="69" Alignment="left" Filler="blank" Length="7">/</ABPER> 
+<GBETR	ID="70" Alignment="left" Filler="blank" Length="16">/</GBETR> 
+<KURSR	ID="71" Alignment="left" Filler="blank" Length="10">/</KURSR> 
+<MANSP	ID="72" Alignment="left" Filler="blank" Length="1">/</MANSP> 
+<MSCHL	ID="73" Alignment="left" Filler="blank" Length="1">/</MSCHL> 
+<HBKID	ID="74" Alignment="left" Filler="blank" Length="5">/</HBKID> 
+<BVTYP	ID="75" Alignment="left" Filler="blank" Length="4">/</BVTYP> 
+<ANFBN	ID="76" Alignment="left" Filler="blank" Length="10">/</ANFBN> 
+<ANFBU	ID="77" Alignment="left" Filler="blank" Length="4">/</ANFBU> 
+<ANFBJ	ID="78" Alignment="left" Filler="blank" Length="4">/</ANFBJ> 
+<LZBKZ	ID="79" Alignment="left" Filler="blank" Length="3"> 
+<xsl:choose> 
+<xsl:when test="orderType='S'"> 
+<xsl:value-of select="$constLZBZK_S_ORDER" /> 
+</xsl:when> 
+<xsl:otherwise> 
+<xsl:value-of select="$constLZBZK_OTHER" /> 
+</xsl:otherwise> 
+</xsl:choose> 
+</LZBKZ> 
+<LANDL	ID="80" Alignment="left" Filler="blank" Length="3">/</LANDL> 
+<DIEKZ	ID="81" Alignment="left" Filler="blank" Length="1">/</DIEKZ> 
+<ZOLLD	ID="82" Alignment="left" Filler="blank" Length="8">/</ZOLLD> 
+<ZOLLT	ID="83" Alignment="left" Filler="blank" Length="8">/</ZOLLT> 
+<VRSDT	ID="84" Alignment="left" Filler="blank" Length="8">/</VRSDT> 
+<VRSKZ	ID="85" Alignment="left" Filler="blank" Length="1">/</VRSKZ> 
+<HZUON	ID="86" Alignment="left" Filler="blank" Length="18">/</HZUON> 
+<REGUL	ID="87" Alignment="left" Filler="blank" Length="1">/</REGUL> 
+<NAME1	ID="88" Alignment="left" Filler="blank" Length="35">/</NAME1> 
+<NAME2	ID="89" Alignment="left" Filler="blank" Length="35">/</NAME2> 
+<NAME3	ID="90" Alignment="left" Filler="blank" Length="35">/</NAME3> 
+<NAME4	ID="91" Alignment="left" Filler="blank" Length="35">/</NAME4> 
+<STRAS	ID="92" Alignment="left" Filler="blank" Length="35">/</STRAS> 
+<ORT01	ID="93" Alignment="left" Filler="blank" Length="35">/</ORT01> 
+<PSTLZ	ID="94" Alignment="left" Filler="blank" Length="10">/</PSTLZ> 
+<LAND1	ID="95" Alignment="left" Filler="blank" Length="3">/</LAND1> 
+<REGIO	ID="96" Alignment="left" Filler="blank" Length="3">/</REGIO> 
+<BANKL	ID="97" Alignment="left" Filler="blank" Length="15">/</BANKL> 
+<BANKS	ID="98" Alignment="left" Filler="blank" Length="3">/</BANKS> 
+<BANKN	ID="99" Alignment="left" Filler="blank" Length="18">/</BANKN> 
+<BKONT	ID="100" Alignment="left" Filler="blank" Length="2">/</BKONT> 
+<STCD1	ID="101" Alignment="left" Filler="blank" Length="16">/</STCD1> 
+<STCD2	ID="102" Alignment="left" Filler="blank" Length="11">/</STCD2> 
+<MADAT	ID="103" Alignment="left" Filler="blank" Length="8">/</MADAT> 
+<MANST	ID="104" Alignment="left" Filler="blank" Length="1">/</MANST> 
+<EGMLD	ID="105" Alignment="left" Filler="blank" Length="3">/</EGMLD> 
+<DUMMY2	ID="106" Alignment="left" Filler="blank" Length="3">/</DUMMY2> 
+<STCEG	ID="107" Alignment="left" Filler="blank" Length="20">/</STCEG> 
+<STKZA	ID="108" Alignment="left" Filler="blank" Length="1">/</STKZA> 
+<STKZU	ID="109" Alignment="left" Filler="blank" Length="1">/</STKZU> 
+<PFACH	ID="110" Alignment="left" Filler="blank" Length="10">/</PFACH> 
+<PSTL2	ID="111" Alignment="left" Filler="blank" Length="10">/</PSTL2> 
+<SPRAS	ID="112" Alignment="left" Filler="blank" Length="1">/</SPRAS> 
+<XINVE	ID="113" Alignment="left" Filler="blank" Length="1">/</XINVE> 
+<NEWKO ID="114" Alignment="left" Filler="blank" Length="17"> 
+<xsl:value-of select="vendorAccountNumber" /> 
+</NEWKO> 
+<NEWBW	Length="3"	Alignment="left" Filler="blank" ID="115">/</NEWBW> 
+<KNRZE	Length="17"	Alignment="left" Filler="blank" ID="116">/</KNRZE> 
+<HKONT	Length="10"	Alignment="left" Filler="blank" ID="117">/</HKONT> 
+<PRCTR	Length="10"	Alignment="left" Filler="blank" ID="118">/</PRCTR> 
+<VERTN	Length="13"	Alignment="left" Filler="blank" ID="119">/</VERTN> 
+<VERTT	Length="1"	Alignment="left" Filler="blank" ID="120">/</VERTT> 
+<VBEWA	Length="4"	Alignment="left" Filler="blank" ID="121">/</VBEWA> 
+<HWBAS	Length="16"	Alignment="left" Filler="blank" ID="122">/</HWBAS> 
+<FWBAS	Length="16"	Alignment="left" Filler="blank" ID="123">/</FWBAS> 
+<FIPOS	Length="14"	Alignment="left" Filler="blank" ID="124">/</FIPOS> 
+<VNAME	Length="6"	Alignment="left" Filler="blank" ID="125">/</VNAME> 
+<EGRUP	Length="3"	Alignment="left" Filler="blank" ID="126">/</EGRUP> 
+<BTYPE	Length="2"	Alignment="left" Filler="blank" ID="127">/</BTYPE> 
+<PAOBJNR	Length="10"	Alignment="left" Filler="blank" ID="128">/</PAOBJNR> 
+<KSTRG	Length="12"	Alignment="left" Filler="blank" ID="129">/</KSTRG> 
+<IMKEY	Length="8"	Alignment="left" Filler="blank" ID="130">/</IMKEY> 
+<DUMMY3	Length="8"	Alignment="left" Filler="blank" ID="131">/</DUMMY3> 
+<VPTNR	Length="10"	Alignment="left" Filler="blank" ID="132">/</VPTNR> 
+<NPLNR	Length="12"	Alignment="left" Filler="blank" ID="133">/</NPLNR> 
+<VORNR	Length="4"	Alignment="left" Filler="blank" ID="134">/</VORNR> 
+<XEGDR	Length="1"	Alignment="left" Filler="blank" ID="135">/</XEGDR> 
+<RECID	Length="2"	Alignment="left" Filler="blank" ID="136">/</RECID> 
+<PPRCT	Length="10"	Alignment="left" Filler="blank" ID="137">/</PPRCT> 
+<PROJK	Length="24"	Alignment="left" Filler="blank" ID="138">/</PROJK> 
+<UZAWE	Length="2"	Alignment="left" Filler="blank" ID="139">/</UZAWE> 
+<TXJCD	Length="15"	Alignment="left" Filler="blank" ID="140">/</TXJCD> 
+<FISTL	Length="16"	Alignment="left" Filler="blank" ID="141">/</FISTL> 
+<GEBER	Length="10"	Alignment="left" Filler="blank" ID="142">/</GEBER> 
+<DMBE2	Length="16"	Alignment="left" Filler="blank" ID="143">/</DMBE2> 
+<DMBE3	Length="16"	Alignment="left" Filler="blank" ID="144">/</DMBE3> 
+<PARGB	Length="4"	Alignment="left" Filler="blank" ID="145">/</PARGB> 
+<XREF1	Length="12"	Alignment="left" Filler="blank" ID="146">/</XREF1> 
+<XREF2	Length="12"	Alignment="left" Filler="blank" ID="147">/</XREF2> 
+<KBLNR	Length="10"	Alignment="left" Filler="blank" ID="149">/</KBLNR> 
+<KBLPOS	Length="3"	Alignment="left" Filler="blank" ID="150">/</KBLPOS> 
+<WDATE	Length="8"	Alignment="left" Filler="blank" ID="151">/</WDATE> 
+<WGBKZ	Length="1"	Alignment="left" Filler="blank" ID="152">/</WGBKZ> 
+<XAKTZ	Length="1"	Alignment="left" Filler="blank" ID="153">/</XAKTZ> 
+<WNAME	Length="30"	Alignment="left" Filler="blank" ID="154">/</WNAME> 
+<WORT1	Length="30"	Alignment="left" Filler="blank" ID="155">/</WORT1> 
+<WBZOG	Length="30"	Alignment="left" Filler="blank" ID="156">/</WBZOG> 
+<WORT2	Length="30"	Alignment="left" Filler="blank" ID="157">/</WORT2> 
+<WBANK	Length="60"	Alignment="left" Filler="blank" ID="158">/</WBANK> 
+<WLZBP	Length="60"	Alignment="left" Filler="blank" ID="159">/</WLZBP> 
+<DISKP	Length="8"	Alignment="left" Filler="blank" ID="160">/</DISKP> 
+<DISKT	Length="3"	Alignment="left" Filler="blank" ID="161">/</DISKT> 
+<WINFW	Length="16"	Alignment="left" Filler="blank" ID="162">/</WINFW> 
+<WINHW	Length="16"	Alignment="left" Filler="blank" ID="163">/</WINHW> 
+<WEVWV	Length="1"	Alignment="left" Filler="blank" ID="164">/</WEVWV> 
+<WSTAT	Length="1"	Alignment="left" Filler="blank" ID="165">/</WSTAT> 
+<WMWKZ	Length="2"	Alignment="left" Filler="blank" ID="166">/</WMWKZ> 
+<WSTKZ	Length="1"	Alignment="left" Filler="blank" ID="167">/</WSTKZ> 
+<RKE_ARTNR	Length="18"	Alignment="left" Filler="blank" ID="169">/</RKE_ARTNR> 
+<RKE_BONUS	Length="2"	Alignment="left" Filler="blank" ID="170">/</RKE_BONUS> 
+<RKE_BRSCH	Length="4"	Alignment="left" Filler="blank" ID="171">/</RKE_BRSCH> 
+<RKE_BUKRS	Length="4"	Alignment="left" Filler="blank" ID="172">/</RKE_BUKRS> 
+<RKE_BZIRK	Length="6"	Alignment="left" Filler="blank" ID="173">/</RKE_BZIRK> 
+<RKE_EFORM	Length="5"	Alignment="left" Filler="blank" ID="174">/</RKE_EFORM> 
+<RKE_FKART	Length="4"	Alignment="left" Filler="blank" ID="175">/</RKE_FKART> 
+<RKE_GEBIE	Length="4"	Alignment="left" Filler="blank" ID="176">/</RKE_GEBIE> 
+<RKE_GSBER	Length="4"	Alignment="left" Filler="blank" ID="177">/</RKE_GSBER> 
+<RKE_KAUFN	Length="10"	Alignment="left" Filler="blank" ID="178">/</RKE_KAUFN> 
+<RKE_KDGRP	Length="2"	Alignment="left" Filler="blank" ID="179">/</RKE_KDGRP> 
+<RKE_KDPOS	Length="6"	Alignment="left" Filler="blank" ID="180">/</RKE_KDPOS> 
+<RKE_KNDNR	Length="10"	Alignment="left" Filler="blank" ID="181">/</RKE_KNDNR> 
+<RKE_KOKRS	Length="4"	Alignment="left" Filler="blank" ID="182">/</RKE_KOKRS> 
+<RKE_KSTRG	Length="12"	Alignment="left" Filler="blank" ID="183">/</RKE_KSTRG> 
+<RKE_LAND1	Length="3"	Alignment="left" Filler="blank" ID="184">/</RKE_LAND1> 
+<RKE_MAABC	Length="1"	Alignment="left" Filler="blank" ID="185">/</RKE_MAABC> 
+<RKE_MATKL	Length="9"	Alignment="left" Filler="blank" ID="186">/</RKE_MATKL> 
+<RKE_PRCTR	Length="10"	Alignment="left" Filler="blank" ID="187">/</RKE_PRCTR> 
+<RKE_PSPNR	Length="24"	Alignment="left" Filler="blank" ID="188">/</RKE_PSPNR> 
+<RKE_RKAUFNR	Length="12"	Alignment="left" Filler="blank" ID="189">/</RKE_RKAUFNR> 
+<RKE_SPART	Length="2"	Alignment="left" Filler="blank" ID="190">/</RKE_SPART> 
+<RKE_VKBUR	Length="4"	Alignment="left" Filler="blank" ID="191">/</RKE_VKBUR> 
+<RKE_VKGRP	Length="3"	Alignment="left" Filler="blank" ID="192">/</RKE_VKGRP> 
+<RKE_VKORG	Length="4"	Alignment="left" Filler="blank" ID="193">/</RKE_VKORG> 
+<RKE_VTWEG	Length="2"	Alignment="left" Filler="blank" ID="194">/</RKE_VTWEG> 
+<RKE_WERKS	Length="4"	Alignment="left" Filler="blank" ID="195">/</RKE_WERKS> 
+<RKE_KMBRND	Length="2"	Alignment="left" Filler="blank" ID="196">/</RKE_KMBRND> 
+<RKE_KMCATG	Length="2"	Alignment="left" Filler="blank" ID="197">/</RKE_KMCATG> 
+<RKE_KMHI01	Length="10"	Alignment="left" Filler="blank" ID="198">/</RKE_KMHI01> 
+<RKE_KMHI02	Length="10"	Alignment="left" Filler="blank" ID="199">/</RKE_KMHI02> 
+<RKE_KMHI03	Length="10"	Alignment="left" Filler="blank" ID="200">/</RKE_KMHI03> 
+<RKE_KMKDGR	Length="2"	Alignment="left" Filler="blank" ID="201">/</RKE_KMKDGR> 
+<RKE_KMLAND	Length="3"	Alignment="left" Filler="blank" ID="202">/</RKE_KMLAND> 
+<RKE_KMMAKL	Length="9"	Alignment="left" Filler="blank" ID="203">/</RKE_KMMAKL> 
+<RKE_KMNIEL	Length="2"	Alignment="left" Filler="blank" ID="204">/</RKE_KMNIEL> 
+<RKE_KMSTGE	Length="2"	Alignment="left" Filler="blank" ID="205">/</RKE_KMSTGE> 
+<RKE_KMVKBU	Length="4"	Alignment="left" Filler="blank" ID="206">/</RKE_KMVKBU> 
+<RKE_KMVKGR	Length="3"	Alignment="left" Filler="blank" ID="207">/</RKE_KMVKGR> 
+<RKE_KMVTNR	Length="8"	Alignment="left" Filler="blank" ID="208">/</RKE_KMVTNR> 
+<RKE_PPRCTR	Length="10"	Alignment="left" Filler="blank" ID="209">/</RKE_PPRCTR> 
+
+<!-- START new RKE-elements --> 
+<RKE_WW005	Length="5"	Alignment="left" Filler="blank" ID="276">/</RKE_WW005> 
+<RKE_WW006	Length="5"	Alignment="left" Filler="blank" ID="277">/</RKE_WW006> 
+<RKE_WW007	Length="3"	Alignment="left" Filler="blank" ID="278">/</RKE_WW007> 
+<RKE_WW008	Length="3"	Alignment="left" Filler="blank" ID="279">/</RKE_WW008> 
+<RKE_WW009	Length="1"	Alignment="left" Filler="blank" ID="280">/</RKE_WW009> 
+<RKE_WW010	Length="3"	Alignment="left" Filler="blank" ID="281">/</RKE_WW010> 
+<RKE_WW011	Length="2"	Alignment="left" Filler="blank" ID="282">/</RKE_WW011> 
+<RKE_WW012	Length="6"	Alignment="left" Filler="blank" ID="283">/</RKE_WW012> 
+<RKE_WW013	Length="10"	Alignment="left" Filler="blank" ID="284">/</RKE_WW013> 
+<RKE_WW015	Length="1"	Alignment="left" Filler="blank" ID="285">/</RKE_WW015> 
+<RKE_WW016	Length="2"	Alignment="left" Filler="blank" ID="286">/</RKE_WW016> 
+<RKE_WW017	Length="7"	Alignment="left" Filler="blank" ID="287">/</RKE_WW017> 
+<RKE_WW019	Length="6"	Alignment="left" Filler="blank" ID="289">/</RKE_WW019> 
+<!-- END new RKE-elements --> 
+
+<VBUND	Length="6"	Alignment="left" Filler="blank" ID="210">/</VBUND> 
+<FKBER	Length="4"	Alignment="left" Filler="blank" ID="211">/</FKBER> 
+<DABRZ	Length="8"	Alignment="left" Filler="blank" ID="212">/</DABRZ> 
+<XSTBA	Length="1"	Alignment="left" Filler="blank" ID="213">/</XSTBA> 
+
+<!-- START Additional (empty) tags --> 
+<RSTGR	Length="3" Alignment="left" Filler="blank" ID="214">/</RSTGR> 
+<FIPEX	Length="24" Alignment="left" Filler="blank" ID="215">/</FIPEX> 
+<XNEGP	Length="1" Alignment="left" Filler="blank" ID="216">/</XNEGP> 
+<GRICD	Length="2" Alignment="left" Filler="blank" ID="217">/</GRICD> 
+<GRIRG	Length="3" Alignment="left" Filler="blank" ID="218">/</GRIRG> 
+<GITYP	Length="2" Alignment="left" Filler="blank" ID="219">/</GITYP> 
+<FITYP	Length="2" Alignment="left" Filler="blank" ID="220">/</FITYP> 
+<STCDT	Length="2" Alignment="left" Filler="blank" ID="221">/</STCDT> 
+<STKZN	Length="1" Alignment="left" Filler="blank" ID="222">/</STKZN> 
+<STCD3	Length="18" Alignment="left" Filler="blank" ID="223">/</STCD3> 
+<STCD4	Length="18" Alignment="left" Filler="blank" ID="224">/</STCD4> 
+<XREF3	Length="20" Alignment="left" Filler="blank" ID="225">/</XREF3> 
+<KIDNO	Length="30" Alignment="left" Filler="blank" ID="226">/</KIDNO> 
+<DTWS1	Length="2" Alignment="left" Filler="blank" ID="227">/</DTWS1> 
+<DTWS2	Length="2" Alignment="left" Filler="blank" ID="228">/</DTWS2> 
+<DTWS3	Length="2" Alignment="left" Filler="blank" ID="229">/</DTWS3> 
+<DTWS4	Length="2" Alignment="left" Filler="blank" ID="230">/</DTWS4> 
+<DTAWS	Length="2" Alignment="left" Filler="blank" ID="231">/</DTAWS> 
+<PYCUR	Length="5" Alignment="left" Filler="blank" ID="232">/</PYCUR> 
+<PYAMT	Length="16" Alignment="left" Filler="blank" ID="233">/</PYAMT> 
+<BUPLA	Length="4" Alignment="left" Filler="blank" ID="234">/</BUPLA> 
+<SECCO	Length="4" Alignment="left" Filler="blank" ID="235">/</SECCO> 
+<LSTAR	Length="6" Alignment="left" Filler="blank" ID="236">/</LSTAR> 
+<EGDEB	Length="10" Alignment="left" Filler="blank" ID="237">/</EGDEB> 
+<WENR	Length="8" Alignment="left" Filler="blank" ID="238">/</WENR> 
+<GENR	Length="8" Alignment="left" Filler="blank" ID="239">/</GENR> 
+<GRNR	Length="8" Alignment="left" Filler="blank" ID="240">/</GRNR> 
+<MENR	Length="8" Alignment="left" Filler="blank" ID="241">/</MENR> 
+<MIVE	Length="13" Alignment="left" Filler="blank" ID="242">/</MIVE> 
+<NKSL	Length="4" Alignment="left" Filler="blank" ID="243">/</NKSL> 
+<EMPSL	Length="5" Alignment="left" Filler="blank" ID="244">/</EMPSL> 
+<SVWNR	Length="13" Alignment="left" Filler="blank" ID="245">/</SVWNR> 
+<SBERI	Length="10" Alignment="left" Filler="blank" ID="246">/</SBERI> 
+<KKBER	Length="4" Alignment="left" Filler="blank" ID="247">/</KKBER> 
+<EMPFB	Length="10" Alignment="left" Filler="blank" ID="248">/</EMPFB> 
+<KURSR_M	Length="10" Alignment="left" Filler="blank" ID="249">/</KURSR_M> 
+<J_1KFREPRE	Length="10" Alignment="left" Filler="blank" ID="250">/</J_1KFREPRE> 
+<J_1KFTBUS	Length="30" Alignment="left" Filler="blank" ID="251">/</J_1KFTBUS> 
+<J_1KFTIND	Length="30" Alignment="left" Filler="blank" ID="252">/</J_1KFTIND> 
+<IDXSP	Length="5" Alignment="left" Filler="blank" ID="253">/</IDXSP> 
+<ANRED	Length="15" Alignment="left" Filler="blank" ID="254">/</ANRED> 
+<RECNNR	Length="13" Alignment="left" Filler="blank" ID="255">/</RECNNR> 
+<E_MIVE	Length="13" Alignment="left" Filler="blank" ID="256">/</E_MIVE> 
+<BKREF	Length="20" Alignment="left" Filler="blank" ID="257">/</BKREF> 
+<DTAMS	Length="1" Alignment="left" Filler="blank" ID="258">/</DTAMS> 
+<CESSION_KZ	Length="2" Alignment="left" Filler="blank" ID="259">/</CESSION_KZ> 
+<GRANT_NBR	Length="20" Alignment="left" Filler="blank" ID="260">/</GRANT_NBR> 
+<FKBER_LONG	Length="16" Alignment="left" Filler="blank" ID="261">/</FKBER_LONG> 
+<ERLKZ	Length="1" Alignment="left" Filler="blank" ID="262">/</ERLKZ> 
+<IBAN	Length="34" Alignment="left" Filler="blank" ID="263">/</IBAN> 
+<VALID_FROM	Length="8" Alignment="left" Filler="blank" ID="264">/</VALID_FROM> 
+<SEGMENT	Length="10" Alignment="left" Filler="blank" ID="265">/</SEGMENT> 
+<PSEGMENT	Length="10" Alignment="left" Filler="blank" ID="266">/</PSEGMENT> 
+<HKTID	Length="5" Alignment="left" Filler="blank" ID="267">/</HKTID> 
+<XSIWE	Length="1" Alignment="left" Filler="blank" ID="268">/</XSIWE> 
+<TCNO	Length="16" Alignment="left" Filler="blank" ID="269">/</TCNO> 
+<DATEOFSERVICE	Length="8" Alignment="left" Filler="blank" ID="270">/</DATEOFSERVICE> 
+<NOTAXCORR	Length="1" Alignment="left" Filler="blank" ID="271">/</NOTAXCORR> 
+<DIFFOPTRATE	Length="10" Alignment="left" Filler="blank" ID="272">/</DIFFOPTRATE> 
+<HASDIFFOPTRATE	Length="1" Alignment="left" Filler="blank" ID="273">/</HASDIFFOPTRATE> 
+<SENDE	Length="1" Alignment="left" Filler="blank" ID="274">/</SENDE> 
+<PRODPER	Length="8" Alignment="left" Filler="blank" ID="275">/</PRODPER> 
+<!-- END Additional tags --> 
+
+</header_1_elements> 
+</xsl:template> 
+
+<xsl:template name="invoiceCharges_1_elements"> 
+<invoiceCharges_1_elements> 
+<STYPE ID="1"	Length="1"	Alignment="left" Filler="blank">2</STYPE> 
+<TBNAM ID="2"	Length="30"	Alignment="left" Filler="blank">BBSEG</TBNAM> 
+<NEWBS ID="3"	Length="2"	Alignment="left" Filler="blank"> 
+<xsl:if test="parent::node()/type='I'">40</xsl:if> 
+<xsl:if test="parent::node()/type='C'">50</xsl:if> 
+</NEWBS> 
+<DUMMYX	ID="4"	Length="10"	Alignment="left" Filler="blank">/</DUMMYX> 
+<NEWUM	ID="5"	Length="1"	Alignment="left" Filler="blank">/</NEWUM> 
+<NEWBK	ID="6"	Length="4"	Alignment="left" Filler="blank">/</NEWBK> 
+<WRBTR	ID="7"	Length="16"	Alignment="left" Filler="blank"> 
+<!--	<xsl:value-of select="format-number(totalAmount, '#0.00', 'european')"/>	--> 
+<xsl:value-of select="format-number(totalAmount, '0000000000000,00', 'european')"/>	
+</WRBTR> 
+<DMBTR	ID="8"	Length="16"	Alignment="left" Filler="blank">/</DMBTR> 
+<WMWST	ID="9"	Length="16"	Alignment="left" Filler="blank">/</WMWST> 
+<MWSTS	ID="10"	Length="16"	Alignment="left" Filler="blank">/</MWSTS> 
+<MWSKZ	ID="11"	Length="2"	Alignment="left" Filler="blank"> 
+<xsl:value-of select="parent::node()/financialTaxCode" /> 
+</MWSKZ> 
+<XSKRL	ID="12"	Length="1"	Alignment="left" Filler="blank">/</XSKRL> 
+<FWZUZ	ID="13"	Length="16"	Alignment="left" Filler="blank">/</FWZUZ> 
+<HWZUZ	ID="14"	Length="16"	Alignment="left" Filler="blank">/</HWZUZ> 
+<GSBER	ID="15"	Length="4"	Alignment="left" Filler="blank">/</GSBER> 
+<KOSTL	ID="16"	Length="10"	Alignment="left" Filler="blank"> 
+<xsl:choose> 
+<xsl:when test="financialCostcenter and string-length(financialCostcenter) &gt; 0"> 
+<xsl:value-of select="financialCostcenter" /> 
+</xsl:when> 
+<xsl:otherwise> 
+<xsl:value-of select="'/'" /> 
+</xsl:otherwise> 
+</xsl:choose> 
+</KOSTL> 
+<DUMMY4	ID="17"	Length="4"	Alignment="left" Filler="blank">/</DUMMY4> 
+<AUFNR	ID="18"	Length="12"	Alignment="left" Filler="blank"> 
+<xsl:choose> 
+<xsl:when test="costcenter2 and string-length(costcenter2) &gt; 0"> 
+<xsl:value-of select="costcenter2" /> 
+</xsl:when> 
+<xsl:otherwise> 
+<xsl:value-of select="'/'" /> 
+</xsl:otherwise> 
+</xsl:choose> 
+</AUFNR> 
+<EBELN	ID="19"	Length="10"	Alignment="left" Filler="blank">/</EBELN> 
+<EBELP	ID="20"	Length="5"	Alignment="left" Filler="blank">/</EBELP> 
+<PROJN	ID="21"	Length="16"	Alignment="left" Filler="blank">/</PROJN> 
+<MATNR	ID="22"	Length="18"	Alignment="left" Filler="blank">/</MATNR> 
+<WERKS	ID="23"	Length="4"	Alignment="left" Filler="blank">/</WERKS> 
+<MENGE	ID="24"	Length="17"	Alignment="left" Filler="blank">/</MENGE> 
+<MEINS	ID="25"	Length="3"	Alignment="left" Filler="blank">/</MEINS> 
+<VBEL2	ID="26"	Length="10"	Alignment="left" Filler="blank">/</VBEL2> 
+<POSN2	ID="27"	Length="6"	Alignment="left" Filler="blank">/</POSN2> 
+<ETEN2	ID="28"	Length="4"	Alignment="left" Filler="blank">/</ETEN2> 
+<PERNR	ID="29"	Length="8"	Alignment="left" Filler="blank">/</PERNR> 
+<BEWAR	ID="30"	Length="3"	Alignment="left" Filler="blank">/</BEWAR> 
+<VALUT	ID="31"	Length="8"	Alignment="left" Filler="blank">/</VALUT> 
+<ZFBDT	ID="32"	Length="8"	Alignment="left" Filler="blank">/</ZFBDT> 
+<ZINKZ	ID="33"	Length="2"	Alignment="left" Filler="blank">/</ZINKZ> 
+<ZUONR	ID="34"	Length="18"	Alignment="left" Filler="blank"> 
+<xsl:value-of select="orderNumber" /> 
+</ZUONR> 
+<FKONT	ID="35"	Length="3"	Alignment="left" Filler="blank">/</FKONT> 
+<XAABG	ID="36"	Length="1"	Alignment="left" Filler="blank">/</XAABG> 
+<SGTXT	ID="37"	Length="50"	Alignment="left" Filler="blank"> 
+<xsl:variable name="twoDigitYear"> 
+<xsl:value-of select="substring(parent::node()/financialPeriodYear, 3, 4)"/> 
+</xsl:variable> 
+<xsl:value-of select="$twoDigitYear" /> 
+<xsl:value-of select="'/'" /> 
+<xsl:value-of select="parent::node()/financialPeriodMonth" /> 
+</SGTXT> 
+<BLNKZ	ID="38"	Length="2"	Alignment="left" Filler="blank">/</BLNKZ> 
+<BLNBT	ID="39" Alignment="left" Filler="blank" Length="16">/</BLNBT> 
+<BLNPZ	ID="40" Alignment="left" Filler="blank" Length="8">/</BLNPZ> 
+<MABER	ID="41" Alignment="left" Filler="blank" Length="2">/</MABER> 
+<SKFBT	ID="42" Alignment="left" Filler="blank" Length="16">/</SKFBT> 
+<WSKTO	ID="43" Alignment="left" Filler="blank" Length="16">/</WSKTO> 
+<ZTERM	ID="44" Alignment="left" Filler="blank" Length="4">/</ZTERM> 
+<ZBD1T	ID="45" Alignment="left" Filler="blank" Length="3">/</ZBD1T> 
+<ZBD1P	ID="46" Alignment="left" Filler="blank" Length="6">/</ZBD1P> 
+<ZBD2T	ID="47" Alignment="left" Filler="blank" Length="3">/</ZBD2T> 
+<ZBD2P	ID="48" Alignment="left" Filler="blank" Length="6">/</ZBD2P> 
+<ZBD3T	ID="49" Alignment="left" Filler="blank" Length="3">/</ZBD3T> 
+<ZLSPR	ID="50" Alignment="left" Filler="blank" Length="1">/</ZLSPR> 
+<REBZG	ID="51" Alignment="left" Filler="blank" Length="10">/</REBZG> 
+<REBZJ	ID="52" Alignment="left" Filler="blank" Length="4">/</REBZJ> 
+<REBZZ	ID="53" Alignment="left" Filler="blank" Length="3">/</REBZZ> 
+<ZLSCH	ID="54" Alignment="left" Filler="blank" Length="1">/</ZLSCH> 
+<SAMNR	ID="55" Alignment="left" Filler="blank" Length="8">/</SAMNR> 
+<ZBFIX	ID="56" Alignment="left" Filler="blank" Length="1">/</ZBFIX> 
+<QSSKZ	ID="57" Alignment="left" Filler="blank" Length="2">/</QSSKZ> 
+<QSSHB	ID="58" Alignment="left" Filler="blank" Length="16">/</QSSHB> 
+<QSFBT	ID="59" Alignment="left" Filler="blank" Length="16">/</QSFBT> 
+<ESRNR	ID="60" Alignment="left" Filler="blank" Length="11">/</ESRNR> 
+<ESRPZ	ID="61" Alignment="left" Filler="blank" Length="2">/</ESRPZ> 
+<ESRRE	ID="62" Alignment="left" Filler="blank" Length="27">/</ESRRE> 
+<FDTAG	ID="63" Alignment="left" Filler="blank" Length="8">/</FDTAG> 
+<FDLEV	ID="64" Alignment="left" Filler="blank" Length="2">/</FDLEV> 
+<ANLN1	ID="65" Alignment="left" Filler="blank" Length="12">/</ANLN1> 
+<ANLN2	ID="66" Alignment="left" Filler="blank" Length="4">/</ANLN2> 
+<BZDAT	ID="67" Alignment="left" Filler="blank" Length="8">/</BZDAT> 
+<ANBWA	ID="68" Alignment="left" Filler="blank" Length="3">/</ANBWA> 
+<ABPER	ID="69" Alignment="left" Filler="blank" Length="7">/</ABPER> 
+<GBETR	ID="70" Alignment="left" Filler="blank" Length="16">/</GBETR> 
+<KURSR	ID="71" Alignment="left" Filler="blank" Length="10">/</KURSR> 
+<MANSP	ID="72" Alignment="left" Filler="blank" Length="1">/</MANSP> 
+<MSCHL	ID="73" Alignment="left" Filler="blank" Length="1">/</MSCHL> 
+<HBKID	ID="74" Alignment="left" Filler="blank" Length="5">/</HBKID> 
+<BVTYP	ID="75" Alignment="left" Filler="blank" Length="4">/</BVTYP> 
+<ANFBN	ID="76" Alignment="left" Filler="blank" Length="10">/</ANFBN> 
+<ANFBU	ID="77" Alignment="left" Filler="blank" Length="4">/</ANFBU> 
+<ANFBJ	ID="78" Alignment="left" Filler="blank" Length="4">/</ANFBJ> 
+<LZBKZ	ID="79" Alignment="left" Filler="blank" Length="3"> 
+<xsl:choose> 
+<xsl:when test="parent::node()/orderType='S'"> 
+<xsl:value-of select="$constLZBZK_S_ORDER" /> 
+</xsl:when> 
+<xsl:otherwise> 
+<xsl:value-of select="$constLZBZK_OTHER" /> 
+</xsl:otherwise> 
+</xsl:choose> 
+</LZBKZ> 
+<LANDL	ID="80" Alignment="left" Filler="blank" Length="3">/</LANDL> 
+<DIEKZ	ID="81" Alignment="left" Filler="blank" Length="1">/</DIEKZ> 
+<ZOLLD	ID="82" Alignment="left" Filler="blank" Length="8">/</ZOLLD> 
+<ZOLLT	ID="83" Alignment="left" Filler="blank" Length="8">/</ZOLLT> 
+<VRSDT	ID="84" Alignment="left" Filler="blank" Length="8">/</VRSDT> 
+<VRSKZ	ID="85" Alignment="left" Filler="blank" Length="1">/</VRSKZ> 
+<HZUON	ID="86" Alignment="left" Filler="blank" Length="18">/</HZUON> 
+<REGUL	ID="87" Alignment="left" Filler="blank" Length="1">/</REGUL> 
+<NAME1	ID="88" Alignment="left" Filler="blank" Length="35">/</NAME1> 
+<NAME2	ID="89" Alignment="left" Filler="blank" Length="35">/</NAME2> 
+<NAME3	ID="90" Alignment="left" Filler="blank" Length="35">/</NAME3> 
+<NAME4	ID="91" Alignment="left" Filler="blank" Length="35">/</NAME4> 
+<STRAS	ID="92" Alignment="left" Filler="blank" Length="35">/</STRAS> 
+<ORT01	ID="93" Alignment="left" Filler="blank" Length="35">/</ORT01> 
+<PSTLZ	ID="94" Alignment="left" Filler="blank" Length="10">/</PSTLZ> 
+<LAND1	ID="95" Alignment="left" Filler="blank" Length="3">/</LAND1> 
+<REGIO	ID="96" Alignment="left" Filler="blank" Length="3">/</REGIO> 
+<BANKL	ID="97" Alignment="left" Filler="blank" Length="15">/</BANKL> 
+<BANKS	ID="98" Alignment="left" Filler="blank" Length="3">/</BANKS> 
+<BANKN	ID="99" Alignment="left" Filler="blank" Length="18">/</BANKN> 
+<BKONT	ID="100" Alignment="left" Filler="blank" Length="2">/</BKONT> 
+<STCD1	ID="101" Alignment="left" Filler="blank" Length="16">/</STCD1> 
+<STCD2	ID="102" Alignment="left" Filler="blank" Length="11">/</STCD2> 
+<MADAT	ID="103" Alignment="left" Filler="blank" Length="8">/</MADAT> 
+<MANST	ID="104" Alignment="left" Filler="blank" Length="1">/</MANST> 
+<EGMLD	ID="105" Alignment="left" Filler="blank" Length="3">/</EGMLD> 
+<DUMMY2	ID="106" Alignment="left" Filler="blank" Length="3">/</DUMMY2> 
+<STCEG	ID="107" Alignment="left" Filler="blank" Length="20">/</STCEG> 
+<STKZA	ID="108" Alignment="left" Filler="blank" Length="1">/</STKZA> 
+<STKZU	ID="109" Alignment="left" Filler="blank" Length="1">/</STKZU> 
+<PFACH	ID="110" Alignment="left" Filler="blank" Length="10">/</PFACH> 
+<PSTL2	ID="111" Alignment="left" Filler="blank" Length="10">/</PSTL2> 
+<SPRAS	ID="112" Alignment="left" Filler="blank" Length="1">/</SPRAS> 
+<XINVE	ID="113" Alignment="left" Filler="blank" Length="1">/</XINVE> 
+<NEWKO ID="114" Length="17" Alignment="left" Filler="blank"> 
+<xsl:value-of select="accountNumber" /> 
+</NEWKO> 
+<NEWBW	Length="3"	Alignment="left" Filler="blank" ID="115">/</NEWBW> 
+<KNRZE	Length="17"	Alignment="left" Filler="blank" ID="116">/</KNRZE> 
+<HKONT	Length="10"	Alignment="left" Filler="blank" ID="117">/</HKONT> 
+<PRCTR	Length="10"	Alignment="left" Filler="blank" ID="118">/</PRCTR> 
+<VERTN	Length="13"	Alignment="left" Filler="blank" ID="119">/</VERTN> 
+<VERTT	Length="1"	Alignment="left" Filler="blank" ID="120">/</VERTT> 
+<VBEWA	Length="4"	Alignment="left" Filler="blank" ID="121">/</VBEWA> 
+<HWBAS	Length="16"	Alignment="left" Filler="blank" ID="122">/</HWBAS> 
+<FWBAS	Length="16"	Alignment="left" Filler="blank" ID="123">/</FWBAS> 
+<FIPOS	Length="14"	Alignment="left" Filler="blank" ID="124">/</FIPOS> 
+<VNAME	Length="6"	Alignment="left" Filler="blank" ID="125">/</VNAME> 
+<EGRUP	Length="3"	Alignment="left" Filler="blank" ID="126">/</EGRUP> 
+<BTYPE	Length="2"	Alignment="left" Filler="blank" ID="127">/</BTYPE> 
+<PAOBJNR	Length="10"	Alignment="left" Filler="blank" ID="128">/</PAOBJNR> 
+<KSTRG	Length="12"	Alignment="left" Filler="blank" ID="129">/</KSTRG> 
+<IMKEY	Length="8"	Alignment="left" Filler="blank" ID="130">/</IMKEY> 
+<DUMMY3	Length="8"	Alignment="left" Filler="blank" ID="131">/</DUMMY3> 
+<VPTNR	Length="10"	Alignment="left" Filler="blank" ID="132">/</VPTNR> 
+<NPLNR	Length="12"	Alignment="left" Filler="blank" ID="133">/</NPLNR> 
+<VORNR	Length="4"	Alignment="left" Filler="blank" ID="134">/</VORNR> 
+<XEGDR	Length="1"	Alignment="left" Filler="blank" ID="135">/</XEGDR> 
+<RECID	Length="2"	Alignment="left" Filler="blank" ID="136">/</RECID> 
+<PPRCT	Length="10"	Alignment="left" Filler="blank" ID="137">/</PPRCT> 
+<PROJK	Length="24"	Alignment="left" Filler="blank" ID="138">/</PROJK> 
+<UZAWE	Length="2"	Alignment="left" Filler="blank" ID="139">/</UZAWE> 
+<TXJCD	Length="15"	Alignment="left" Filler="blank" ID="140">/</TXJCD> 
+<FISTL	Length="16"	Alignment="left" Filler="blank" ID="141">/</FISTL> 
+<GEBER	Length="10"	Alignment="left" Filler="blank" ID="142">/</GEBER> 
+<DMBE2	Length="16"	Alignment="left" Filler="blank" ID="143">/</DMBE2> 
+<DMBE3	Length="16"	Alignment="left" Filler="blank" ID="144">/</DMBE3> 
+<PARGB	Length="4"	Alignment="left" Filler="blank" ID="145">/</PARGB> 
+<XREF1	Length="12"	Alignment="left" Filler="blank" ID="146">/</XREF1> 
+<XREF2	Length="12"	Alignment="left" Filler="blank" ID="147">/</XREF2> 
+<KBLNR	Length="10"	Alignment="left" Filler="blank" ID="149">/</KBLNR> 
+<KBLPOS	Length="3"	Alignment="left" Filler="blank" ID="150">/</KBLPOS> 
+<WDATE	Length="8"	Alignment="left" Filler="blank" ID="151">/</WDATE> 
+<WGBKZ	Length="1"	Alignment="left" Filler="blank" ID="152">/</WGBKZ> 
+<XAKTZ	Length="1"	Alignment="left" Filler="blank" ID="153">/</XAKTZ> 
+<WNAME	Length="30"	Alignment="left" Filler="blank" ID="154">/</WNAME> 
+<WORT1	Length="30"	Alignment="left" Filler="blank" ID="155">/</WORT1> 
+<WBZOG	Length="30"	Alignment="left" Filler="blank" ID="156">/</WBZOG> 
+<WORT2	Length="30"	Alignment="left" Filler="blank" ID="157">/</WORT2> 
+<WBANK	Length="60"	Alignment="left" Filler="blank" ID="158">/</WBANK> 
+<WLZBP	Length="60"	Alignment="left" Filler="blank" ID="159">/</WLZBP> 
+<DISKP	Length="8"	Alignment="left" Filler="blank" ID="160">/</DISKP> 
+<DISKT	Length="3"	Alignment="left" Filler="blank" ID="161">/</DISKT> 
+<WINFW	Length="16"	Alignment="left" Filler="blank" ID="162">/</WINFW> 
+<WINHW	Length="16"	Alignment="left" Filler="blank" ID="163">/</WINHW> 
+<WEVWV	Length="1"	Alignment="left" Filler="blank" ID="164">/</WEVWV> 
+<WSTAT	Length="1"	Alignment="left" Filler="blank" ID="165">/</WSTAT> 
+<WMWKZ	Length="2"	Alignment="left" Filler="blank" ID="166">/</WMWKZ> 
+<WSTKZ	Length="1"	Alignment="left" Filler="blank" ID="167">/</WSTKZ> 
+<RKE_ARTNR	Length="18"	Alignment="left" Filler="blank" ID="169">/</RKE_ARTNR> 
+<RKE_BONUS	Length="2"	Alignment="left" Filler="blank" ID="170">/</RKE_BONUS> 
+<RKE_BRSCH	Length="4"	Alignment="left" Filler="blank" ID="171">/</RKE_BRSCH> 
+<RKE_BUKRS	Length="4"	Alignment="left" Filler="blank" ID="172">/</RKE_BUKRS> 
+<RKE_BZIRK	Length="6"	Alignment="left" Filler="blank" ID="173">/</RKE_BZIRK> 
+<RKE_EFORM	Length="5"	Alignment="left" Filler="blank" ID="174">/</RKE_EFORM> 
+<RKE_FKART	Length="4"	Alignment="left" Filler="blank" ID="175">/</RKE_FKART> 
+<RKE_GEBIE	Length="4"	Alignment="left" Filler="blank" ID="176">/</RKE_GEBIE> 
+<RKE_GSBER	Length="4"	Alignment="left" Filler="blank" ID="177">/</RKE_GSBER> 
+<RKE_KAUFN	Length="10"	Alignment="left" Filler="blank" ID="178">/</RKE_KAUFN> 
+<RKE_KDGRP	Length="2"	Alignment="left" Filler="blank" ID="179">/</RKE_KDGRP> 
+<RKE_KDPOS	Length="6"	Alignment="left" Filler="blank" ID="180">/</RKE_KDPOS> 
+<RKE_KNDNR	Length="10"	Alignment="left" Filler="blank" ID="181">/</RKE_KNDNR> 
+<RKE_KOKRS	Length="4"	Alignment="left" Filler="blank" ID="182">/</RKE_KOKRS> 
+<RKE_KSTRG	Length="12"	Alignment="left" Filler="blank" ID="183">/</RKE_KSTRG> 
+<RKE_LAND1	Length="3"	Alignment="left" Filler="blank" ID="184">/</RKE_LAND1> 
+<RKE_MAABC	Length="1"	Alignment="left" Filler="blank" ID="185">/</RKE_MAABC> 
+<RKE_MATKL	Length="9"	Alignment="left" Filler="blank" ID="186">/</RKE_MATKL> 
+<RKE_PRCTR	Length="10"	Alignment="left" Filler="blank" ID="187">/</RKE_PRCTR> 
+<RKE_PSPNR	Length="24"	Alignment="left" Filler="blank" ID="188">/</RKE_PSPNR> 
+<RKE_RKAUFNR	Length="12"	Alignment="left" Filler="blank" ID="189">/</RKE_RKAUFNR> 
+<RKE_SPART	Length="2"	Alignment="left" Filler="blank" ID="190">/</RKE_SPART> 
+<RKE_VKBUR	Length="4"	Alignment="left" Filler="blank" ID="191">/</RKE_VKBUR> 
+<RKE_VKGRP	Length="3"	Alignment="left" Filler="blank" ID="192">/</RKE_VKGRP> 
+<RKE_VKORG	Length="4"	Alignment="left" Filler="blank" ID="193">/</RKE_VKORG> 
+<RKE_VTWEG	Length="2"	Alignment="left" Filler="blank" ID="194">/</RKE_VTWEG> 
+<RKE_WERKS	Length="4"	Alignment="left" Filler="blank" ID="195">/</RKE_WERKS> 
+<RKE_KMBRND	Length="2"	Alignment="left" Filler="blank" ID="196">/</RKE_KMBRND> 
+<RKE_KMCATG	Length="2"	Alignment="left" Filler="blank" ID="197">/</RKE_KMCATG> 
+<RKE_KMHI01	Length="10"	Alignment="left" Filler="blank" ID="198">/</RKE_KMHI01> 
+<RKE_KMHI02	Length="10"	Alignment="left" Filler="blank" ID="199">/</RKE_KMHI02> 
+<RKE_KMHI03	Length="10"	Alignment="left" Filler="blank" ID="200">/</RKE_KMHI03> 
+<RKE_KMKDGR	Length="2"	Alignment="left" Filler="blank" ID="201">/</RKE_KMKDGR> 
+<RKE_KMLAND	Length="3"	Alignment="left" Filler="blank" ID="202">/</RKE_KMLAND> 
+<RKE_KMMAKL	Length="9"	Alignment="left" Filler="blank" ID="203">/</RKE_KMMAKL> 
+<RKE_KMNIEL	Length="2"	Alignment="left" Filler="blank" ID="204">/</RKE_KMNIEL> 
+<RKE_KMSTGE	Length="2"	Alignment="left" Filler="blank" ID="205">/</RKE_KMSTGE> 
+<RKE_KMVKBU	Length="4"	Alignment="left" Filler="blank" ID="206">/</RKE_KMVKBU> 
+<RKE_KMVKGR	Length="3"	Alignment="left" Filler="blank" ID="207">/</RKE_KMVKGR> 
+<RKE_KMVTNR	Length="8"	Alignment="left" Filler="blank" ID="208">/</RKE_KMVTNR> 
+<RKE_PPRCTR	Length="10"	Alignment="left" Filler="blank" ID="209">/</RKE_PPRCTR> 
+
+<!-- START new RKE-elements --> 
+<RKE_WW005	Length="5"	Alignment="left" Filler="blank" ID="276">/</RKE_WW005> 
+<RKE_WW006	Length="5"	Alignment="left" Filler="blank" ID="277">/</RKE_WW006> 
+<RKE_WW007	Length="3"	Alignment="left" Filler="blank" ID="278">/</RKE_WW007> 
+<RKE_WW008	Length="3"	Alignment="left" Filler="blank" ID="279">/</RKE_WW008> 
+<RKE_WW009	Length="1"	Alignment="left" Filler="blank" ID="280">/</RKE_WW009> 
+<RKE_WW010	Length="3"	Alignment="left" Filler="blank" ID="281">/</RKE_WW010> 
+<RKE_WW011	Length="2"	Alignment="left" Filler="blank" ID="282">/</RKE_WW011> 
+<RKE_WW012	Length="6"	Alignment="left" Filler="blank" ID="283">/</RKE_WW012> 
+<RKE_WW013	Length="10"	Alignment="left" Filler="blank" ID="284">/</RKE_WW013> 
+<RKE_WW015	Length="1"	Alignment="left" Filler="blank" ID="285">/</RKE_WW015> 
+<RKE_WW016	Length="2"	Alignment="left" Filler="blank" ID="286">/</RKE_WW016> 
+<RKE_WW017	Length="7"	Alignment="left" Filler="blank" ID="287">/</RKE_WW017> 
+<RKE_WW019	Length="6"	Alignment="left" Filler="blank" ID="289">/</RKE_WW019> 
+<!-- END new RKE-elements --> 
+
+<VBUND	Length="6"	Alignment="left" Filler="blank" ID="210">/</VBUND> 
+<FKBER	Length="4"	Alignment="left" Filler="blank" ID="211">/</FKBER> 
+<DABRZ	Length="8"	Alignment="left" Filler="blank" ID="212">/</DABRZ> 
+<XSTBA	Length="1"	Alignment="left" Filler="blank" ID="213">/</XSTBA> 
+
+<!-- Additional (empty) tags start --> 
+<RSTGR	Length="3" Alignment="left" Filler="blank" ID="214">/</RSTGR> 
+<FIPEX	Length="24" Alignment="left" Filler="blank" ID="215">/</FIPEX> 
+<XNEGP	Length="1" Alignment="left" Filler="blank" ID="216">/</XNEGP> 
+<GRICD	Length="2" Alignment="left" Filler="blank" ID="217">/</GRICD> 
+<GRIRG	Length="3" Alignment="left" Filler="blank" ID="218">/</GRIRG> 
+<GITYP	Length="2" Alignment="left" Filler="blank" ID="219">/</GITYP> 
+<FITYP	Length="2" Alignment="left" Filler="blank" ID="220">/</FITYP> 
+<STCDT	Length="2" Alignment="left" Filler="blank" ID="221">/</STCDT> 
+<STKZN	Length="1" Alignment="left" Filler="blank" ID="222">/</STKZN> 
+<STCD3	Length="18" Alignment="left" Filler="blank" ID="223">/</STCD3> 
+<STCD4	Length="18" Alignment="left" Filler="blank" ID="224">/</STCD4> 
+<XREF3	Length="20" Alignment="left" Filler="blank" ID="225">/</XREF3> 
+<KIDNO	Length="30" Alignment="left" Filler="blank" ID="226">/</KIDNO> 
+<DTWS1	Length="2" Alignment="left" Filler="blank" ID="227">/</DTWS1> 
+<DTWS2	Length="2" Alignment="left" Filler="blank" ID="228">/</DTWS2> 
+<DTWS3	Length="2" Alignment="left" Filler="blank" ID="229">/</DTWS3> 
+<DTWS4	Length="2" Alignment="left" Filler="blank" ID="230">/</DTWS4> 
+<DTAWS	Length="2" Alignment="left" Filler="blank" ID="231">/</DTAWS> 
+<PYCUR	Length="5" Alignment="left" Filler="blank" ID="232">/</PYCUR> 
+<PYAMT	Length="16" Alignment="left" Filler="blank" ID="233">/</PYAMT> 
+<BUPLA	Length="4" Alignment="left" Filler="blank" ID="234">/</BUPLA> 
+<SECCO	Length="4" Alignment="left" Filler="blank" ID="235">/</SECCO> 
+<LSTAR	Length="6" Alignment="left" Filler="blank" ID="236">/</LSTAR> 
+<EGDEB	Length="10" Alignment="left" Filler="blank" ID="237">/</EGDEB> 
+<WENR	Length="8" Alignment="left" Filler="blank" ID="238">/</WENR> 
+<GENR	Length="8" Alignment="left" Filler="blank" ID="239">/</GENR> 
+<GRNR	Length="8" Alignment="left" Filler="blank" ID="240">/</GRNR> 
+<MENR	Length="8" Alignment="left" Filler="blank" ID="241">/</MENR> 
+<MIVE	Length="13" Alignment="left" Filler="blank" ID="242">/</MIVE> 
+<NKSL	Length="4" Alignment="left" Filler="blank" ID="243">/</NKSL> 
+<EMPSL	Length="5" Alignment="left" Filler="blank" ID="244">/</EMPSL> 
+<SVWNR	Length="13" Alignment="left" Filler="blank" ID="245">/</SVWNR> 
+<SBERI	Length="10" Alignment="left" Filler="blank" ID="246">/</SBERI> 
+<KKBER	Length="4" Alignment="left" Filler="blank" ID="247">/</KKBER> 
+<EMPFB	Length="10" Alignment="left" Filler="blank" ID="248">/</EMPFB> 
+<KURSR_M	Length="10" Alignment="left" Filler="blank" ID="249">/</KURSR_M> 
+<J_1KFREPRE	Length="10" Alignment="left" Filler="blank" ID="250">/</J_1KFREPRE> 
+<J_1KFTBUS	Length="30" Alignment="left" Filler="blank" ID="251">/</J_1KFTBUS> 
+<J_1KFTIND	Length="30" Alignment="left" Filler="blank" ID="252">/</J_1KFTIND> 
+<IDXSP	Length="5" Alignment="left" Filler="blank" ID="253">/</IDXSP> 
+<ANRED	Length="15" Alignment="left" Filler="blank" ID="254">/</ANRED> 
+<RECNNR	Length="13" Alignment="left" Filler="blank" ID="255">/</RECNNR> 
+<E_MIVE	Length="13" Alignment="left" Filler="blank" ID="256">/</E_MIVE> 
+<BKREF	Length="20" Alignment="left" Filler="blank" ID="257">/</BKREF> 
+<DTAMS	Length="1" Alignment="left" Filler="blank" ID="258">/</DTAMS> 
+<CESSION_KZ	Length="2" Alignment="left" Filler="blank" ID="259">/</CESSION_KZ> 
+<GRANT_NBR	Length="20" Alignment="left" Filler="blank" ID="260">/</GRANT_NBR> 
+<FKBER_LONG	Length="16" Alignment="left" Filler="blank" ID="261">/</FKBER_LONG> 
+<ERLKZ	Length="1" Alignment="left" Filler="blank" ID="262">/</ERLKZ> 
+<IBAN	Length="34" Alignment="left" Filler="blank" ID="263">/</IBAN> 
+<VALID_FROM	Length="8" Alignment="left" Filler="blank" ID="264">/</VALID_FROM> 
+<SEGMENT	Length="10" Alignment="left" Filler="blank" ID="265">/</SEGMENT> 
+<PSEGMENT	Length="10" Alignment="left" Filler="blank" ID="266">/</PSEGMENT> 
+<HKTID	Length="5" Alignment="left" Filler="blank" ID="267">/</HKTID> 
+<XSIWE	Length="1" Alignment="left" Filler="blank" ID="268">/</XSIWE> 
+<TCNO	Length="16" Alignment="left" Filler="blank" ID="269">/</TCNO> 
+<DATEOFSERVICE	Length="8" Alignment="left" Filler="blank" ID="270">/</DATEOFSERVICE> 
+<NOTAXCORR	Length="1" Alignment="left" Filler="blank" ID="271">/</NOTAXCORR> 
+<DIFFOPTRATE	Length="10" Alignment="left" Filler="blank" ID="272">/</DIFFOPTRATE> 
+<HASDIFFOPTRATE	Length="1" Alignment="left" Filler="blank" ID="273">/</HASDIFFOPTRATE> 
+<SENDE	Length="1" Alignment="left" Filler="blank" ID="274">/</SENDE> 
+<PRODPER	Length="8" Alignment="left" Filler="blank" ID="275">/</PRODPER> 
+<!-- Additional tags end --> 
+
+</invoiceCharges_1_elements> 
+</xsl:template> 
+
+<xsl:template name="invoiceDetails_1_elements"> 
+<invoiceDetails_1_elements> 
+<STYPE ID="1"	Length="1"	Alignment="left" Filler="blank">2</STYPE> 
+<TBNAM ID="2"	Length="30"	Alignment="left" Filler="blank">BBSEG</TBNAM> 
+<NEWBS ID="3"	Length="2"	Alignment="left" Filler="blank"> 
+<xsl:if test="parent::node()/type='I'">40</xsl:if> 
+<xsl:if test="parent::node()/type='C'">50</xsl:if> 
+</NEWBS> 
+<DUMMYX	ID="4"	Length="10"	Alignment="left" Filler="blank">/</DUMMYX> 
+<NEWUM	ID="5"	Length="1"	Alignment="left" Filler="blank">/</NEWUM> 
+<NEWBK	ID="6"	Length="4"	Alignment="left" Filler="blank">/</NEWBK> 
+<WRBTR	ID="7"	Length="16"	Alignment="left" Filler="blank"> 
+<xsl:value-of select="format-number(totalAmount, '0000000000000,00', 'european')"/>	
+</WRBTR> 
+<DMBTR	ID="8"	Length="16"	Alignment="left" Filler="blank">/</DMBTR> 
+<WMWST	ID="9"	Length="16"	Alignment="left" Filler="blank">/</WMWST> 
+<MWSTS	ID="10"	Length="16"	Alignment="left" Filler="blank">/</MWSTS> 
+<MWSKZ	ID="11"	Length="2"	Alignment="left" Filler="blank"> 
+<xsl:value-of select="parent::node()/financialTaxCode" /> 
+</MWSKZ> 
+<XSKRL	ID="12"	Length="1"	Alignment="left" Filler="blank">/</XSKRL> 
+<FWZUZ	ID="13"	Length="16"	Alignment="left" Filler="blank">/</FWZUZ> 
+<HWZUZ	ID="14"	Length="16"	Alignment="left" Filler="blank">/</HWZUZ> 
+<GSBER	ID="15"	Length="4"	Alignment="left" Filler="blank">/</GSBER> 
+<KOSTL	ID="16"	Length="10"	Alignment="left" Filler="blank"> 
+<xsl:choose> 
+<xsl:when test="financialCostcenter and string-length(financialCostcenter) &gt; 0"> 
+<xsl:value-of select="financialCostcenter" /> 
+</xsl:when> 
+<xsl:otherwise> 
+<xsl:value-of select="'/'" /> 
+</xsl:otherwise> 
+</xsl:choose> 
+</KOSTL> 
+<DUMMY4	ID="17"	Length="4"	Alignment="left" Filler="blank">/</DUMMY4> 
+<AUFNR	ID="18"	Length="12"	Alignment="left" Filler="blank"> 
+<xsl:choose> 
+<xsl:when test="costcenter2 and string-length(costcenter2) &gt; 0"> 
+<xsl:value-of select="costcenter2" /> 
+</xsl:when> 
+<xsl:otherwise> 
+<xsl:value-of select="'/'" /> 
+</xsl:otherwise> 
+</xsl:choose> 
+</AUFNR> 
+<EBELN	ID="19"	Length="10"	Alignment="left" Filler="blank">/</EBELN> 
+<EBELP	ID="20"	Length="5"	Alignment="left" Filler="blank">/</EBELP> 
+<PROJN	ID="21"	Length="16"	Alignment="left" Filler="blank">/</PROJN> 
+<MATNR	ID="22"	Length="18"	Alignment="left" Filler="blank">/</MATNR> 
+<WERKS	ID="23"	Length="4"	Alignment="left" Filler="blank">/</WERKS> 
+<MENGE	ID="24"	Length="17"	Alignment="left" Filler="blank">/</MENGE> 
+<MEINS	ID="25"	Length="3"	Alignment="left" Filler="blank">/</MEINS> 
+<VBEL2	ID="26"	Length="10"	Alignment="left" Filler="blank">/</VBEL2> 
+<POSN2	ID="27"	Length="6"	Alignment="left" Filler="blank">/</POSN2> 
+<ETEN2	ID="28"	Length="4"	Alignment="left" Filler="blank">/</ETEN2> 
+<PERNR	ID="29"	Length="8"	Alignment="left" Filler="blank">/</PERNR> 
+<BEWAR	ID="30"	Length="3"	Alignment="left" Filler="blank">/</BEWAR> 
+<VALUT	ID="31"	Length="8"	Alignment="left" Filler="blank">/</VALUT> 
+<ZFBDT	ID="32"	Length="8"	Alignment="left" Filler="blank">/</ZFBDT> 
+<ZINKZ	ID="33"	Length="2"	Alignment="left" Filler="blank">/</ZINKZ> 
+<ZUONR	ID="34"	Length="18"	Alignment="left" Filler="blank"> 
+<xsl:value-of select="orderNumber" /> 
+<xsl:value-of select="'-'" /> 
+<xsl:value-of select="itemNumber" /> 
+</ZUONR> 
+<FKONT	ID="35"	Length="3"	Alignment="left" Filler="blank">/</FKONT> 
+<XAABG	ID="36"	Length="1"	Alignment="left" Filler="blank">/</XAABG> 
+<SGTXT	ID="37"	Length="50"	Alignment="left" Filler="blank"> 
+<xsl:variable name="twoDigitYear"> 
+<xsl:value-of select="substring(parent::node()/financialPeriodYear, 3, 4)"/> 
+</xsl:variable> 
+<xsl:value-of select="$twoDigitYear" /> 
+<xsl:value-of select="'/'" /> 
+<xsl:value-of select="parent::node()/financialPeriodMonth" /> 
+</SGTXT> 
+<BLNKZ	ID="38"	Length="2"	Alignment="left" Filler="blank">/</BLNKZ> 
+<BLNBT	ID="39" Alignment="left" Filler="blank" Length="16">/</BLNBT> 
+<BLNPZ	ID="40" Alignment="left" Filler="blank" Length="8">/</BLNPZ> 
+<MABER	ID="41" Alignment="left" Filler="blank" Length="2">/</MABER> 
+<SKFBT	ID="42" Alignment="left" Filler="blank" Length="16">/</SKFBT> 
+<WSKTO	ID="43" Alignment="left" Filler="blank" Length="16">/</WSKTO> 
+<ZTERM	ID="44" Alignment="left" Filler="blank" Length="4">/</ZTERM> 
+<ZBD1T	ID="45" Alignment="left" Filler="blank" Length="3">/</ZBD1T> 
+<ZBD1P	ID="46" Alignment="left" Filler="blank" Length="6">/</ZBD1P> 
+<ZBD2T	ID="47" Alignment="left" Filler="blank" Length="3">/</ZBD2T> 
+<ZBD2P	ID="48" Alignment="left" Filler="blank" Length="6">/</ZBD2P> 
+<ZBD3T	ID="49" Alignment="left" Filler="blank" Length="3">/</ZBD3T> 
+<ZLSPR	ID="50" Alignment="left" Filler="blank" Length="1">/</ZLSPR> 
+<REBZG	ID="51" Alignment="left" Filler="blank" Length="10">/</REBZG> 
+<REBZJ	ID="52" Alignment="left" Filler="blank" Length="4">/</REBZJ> 
+<REBZZ	ID="53" Alignment="left" Filler="blank" Length="3">/</REBZZ> 
+<ZLSCH	ID="54" Alignment="left" Filler="blank" Length="1">/</ZLSCH> 
+<SAMNR	ID="55" Alignment="left" Filler="blank" Length="8">/</SAMNR> 
+<ZBFIX	ID="56" Alignment="left" Filler="blank" Length="1">/</ZBFIX> 
+<QSSKZ	ID="57" Alignment="left" Filler="blank" Length="2">/</QSSKZ> 
+<QSSHB	ID="58" Alignment="left" Filler="blank" Length="16">/</QSSHB> 
+<QSFBT	ID="59" Alignment="left" Filler="blank" Length="16">/</QSFBT> 
+<ESRNR	ID="60" Alignment="left" Filler="blank" Length="11">/</ESRNR> 
+<ESRPZ	ID="61" Alignment="left" Filler="blank" Length="2">/</ESRPZ> 
+<ESRRE	ID="62" Alignment="left" Filler="blank" Length="27">/</ESRRE> 
+<FDTAG	ID="63" Alignment="left" Filler="blank" Length="8">/</FDTAG> 
+<FDLEV	ID="64" Alignment="left" Filler="blank" Length="2">/</FDLEV> 
+<ANLN1	ID="65" Alignment="left" Filler="blank" Length="12">/</ANLN1> 
+<ANLN2	ID="66" Alignment="left" Filler="blank" Length="4">/</ANLN2> 
+<BZDAT	ID="67" Alignment="left" Filler="blank" Length="8">/</BZDAT> 
+<ANBWA	ID="68" Alignment="left" Filler="blank" Length="3">/</ANBWA> 
+<ABPER	ID="69" Alignment="left" Filler="blank" Length="7">/</ABPER> 
+<GBETR	ID="70" Alignment="left" Filler="blank" Length="16">/</GBETR> 
+<KURSR	ID="71" Alignment="left" Filler="blank" Length="10">/</KURSR> 
+<MANSP	ID="72" Alignment="left" Filler="blank" Length="1">/</MANSP> 
+<MSCHL	ID="73" Alignment="left" Filler="blank" Length="1">/</MSCHL> 
+<HBKID	ID="74" Alignment="left" Filler="blank" Length="5">/</HBKID> 
+<BVTYP	ID="75" Alignment="left" Filler="blank" Length="4">/</BVTYP> 
+<ANFBN	ID="76" Alignment="left" Filler="blank" Length="10">/</ANFBN> 
+<ANFBU	ID="77" Alignment="left" Filler="blank" Length="4">/</ANFBU> 
+<ANFBJ	ID="78" Alignment="left" Filler="blank" Length="4">/</ANFBJ> 
+<LZBKZ	ID="79" Alignment="left" Filler="blank" Length="3"> 
+<xsl:choose> 
+<xsl:when test="orderType='S'"> 
+<xsl:value-of select="$constLZBZK_S_ORDER" /> 
+</xsl:when> 
+<xsl:otherwise> 
+<xsl:value-of select="$constLZBZK_OTHER" /> 
+</xsl:otherwise> 
+</xsl:choose>	
+</LZBKZ> 
+<LANDL	ID="80" Alignment="left" Filler="blank" Length="3">/</LANDL> 
+<DIEKZ	ID="81" Alignment="left" Filler="blank" Length="1">/</DIEKZ> 
+<ZOLLD	ID="82" Alignment="left" Filler="blank" Length="8">/</ZOLLD> 
+<ZOLLT	ID="83" Alignment="left" Filler="blank" Length="8">/</ZOLLT> 
+<VRSDT	ID="84" Alignment="left" Filler="blank" Length="8">/</VRSDT> 
+<VRSKZ	ID="85" Alignment="left" Filler="blank" Length="1">/</VRSKZ> 
+<HZUON	ID="86" Alignment="left" Filler="blank" Length="18">/</HZUON> 
+<REGUL	ID="87" Alignment="left" Filler="blank" Length="1">/</REGUL> 
+<NAME1	ID="88" Alignment="left" Filler="blank" Length="35">/</NAME1> 
+<NAME2	ID="89" Alignment="left" Filler="blank" Length="35">/</NAME2> 
+<NAME3	ID="90" Alignment="left" Filler="blank" Length="35">/</NAME3> 
+<NAME4	ID="91" Alignment="left" Filler="blank" Length="35">/</NAME4> 
+<STRAS	ID="92" Alignment="left" Filler="blank" Length="35">/</STRAS> 
+<ORT01	ID="93" Alignment="left" Filler="blank" Length="35">/</ORT01> 
+<PSTLZ	ID="94" Alignment="left" Filler="blank" Length="10">/</PSTLZ> 
+<LAND1	ID="95" Alignment="left" Filler="blank" Length="3">/</LAND1> 
+<REGIO	ID="96" Alignment="left" Filler="blank" Length="3">/</REGIO> 
+<BANKL	ID="97" Alignment="left" Filler="blank" Length="15">/</BANKL> 
+<BANKS	ID="98" Alignment="left" Filler="blank" Length="3">/</BANKS> 
+<BANKN	ID="99" Alignment="left" Filler="blank" Length="18">/</BANKN> 
+<BKONT	ID="100" Alignment="left" Filler="blank" Length="2">/</BKONT> 
+<STCD1	ID="101" Alignment="left" Filler="blank" Length="16">/</STCD1> 
+<STCD2	ID="102" Alignment="left" Filler="blank" Length="11">/</STCD2> 
+<MADAT	ID="103" Alignment="left" Filler="blank" Length="8">/</MADAT> 
+<MANST	ID="104" Alignment="left" Filler="blank" Length="1">/</MANST> 
+<EGMLD	ID="105" Alignment="left" Filler="blank" Length="3">/</EGMLD> 
+<DUMMY2	ID="106" Alignment="left" Filler="blank" Length="3">/</DUMMY2> 
+<STCEG	ID="107" Alignment="left" Filler="blank" Length="20">/</STCEG> 
+<STKZA	ID="108" Alignment="left" Filler="blank" Length="1">/</STKZA> 
+<STKZU	ID="109" Alignment="left" Filler="blank" Length="1">/</STKZU> 
+<PFACH	ID="110" Alignment="left" Filler="blank" Length="10">/</PFACH> 
+<PSTL2	ID="111" Alignment="left" Filler="blank" Length="10">/</PSTL2> 
+<SPRAS	ID="112" Alignment="left" Filler="blank" Length="1">/</SPRAS> 
+<XINVE	ID="113" Alignment="left" Filler="blank" Length="1">/</XINVE> 
+
+<NEWKO ID="114" Length="17" Alignment="left" Filler="blank"> 
+<xsl:value-of select="accountNumber" /> 
+</NEWKO> 
+
+<NEWBW	Length="3"	Alignment="left" Filler="blank" ID="115">/</NEWBW> 
+<KNRZE	Length="17"	Alignment="left" Filler="blank" ID="116">/</KNRZE> 
+<HKONT	Length="10"	Alignment="left" Filler="blank" ID="117">/</HKONT> 
+<PRCTR	Length="10"	Alignment="left" Filler="blank" ID="118">/</PRCTR> 
+<VERTN	Length="13"	Alignment="left" Filler="blank" ID="119">/</VERTN> 
+<VERTT	Length="1"	Alignment="left" Filler="blank" ID="120">/</VERTT> 
+<VBEWA	Length="4"	Alignment="left" Filler="blank" ID="121">/</VBEWA> 
+<HWBAS	Length="16"	Alignment="left" Filler="blank" ID="122">/</HWBAS> 
+<FWBAS	Length="16"	Alignment="left" Filler="blank" ID="123">/</FWBAS> 
+<FIPOS	Length="14"	Alignment="left" Filler="blank" ID="124">/</FIPOS> 
+<VNAME	Length="6"	Alignment="left" Filler="blank" ID="125">/</VNAME> 
+<EGRUP	Length="3"	Alignment="left" Filler="blank" ID="126">/</EGRUP> 
+<BTYPE	Length="2"	Alignment="left" Filler="blank" ID="127">/</BTYPE> 
+<PAOBJNR	Length="10"	Alignment="left" Filler="blank" ID="128">/</PAOBJNR> 
+<KSTRG	Length="12"	Alignment="left" Filler="blank" ID="129">/</KSTRG> 
+<IMKEY	Length="8"	Alignment="left" Filler="blank" ID="130">/</IMKEY> 
+<DUMMY3	Length="8"	Alignment="left" Filler="blank" ID="131">/</DUMMY3> 
+<VPTNR	Length="10"	Alignment="left" Filler="blank" ID="132">/</VPTNR> 
+<NPLNR	Length="12"	Alignment="left" Filler="blank" ID="133">/</NPLNR> 
+<VORNR	Length="4"	Alignment="left" Filler="blank" ID="134">/</VORNR> 
+<XEGDR	Length="1"	Alignment="left" Filler="blank" ID="135">/</XEGDR> 
+<RECID	Length="2"	Alignment="left" Filler="blank" ID="136">/</RECID> 
+<PPRCT	Length="10"	Alignment="left" Filler="blank" ID="137">/</PPRCT> 
+<PROJK	Length="24"	Alignment="left" Filler="blank" ID="138">/</PROJK> 
+<UZAWE	Length="2"	Alignment="left" Filler="blank" ID="139">/</UZAWE> 
+<TXJCD	Length="15"	Alignment="left" Filler="blank" ID="140">/</TXJCD> 
+<FISTL	Length="16"	Alignment="left" Filler="blank" ID="141">/</FISTL> 
+<GEBER	Length="10"	Alignment="left" Filler="blank" ID="142">/</GEBER> 
+<DMBE2	Length="16"	Alignment="left" Filler="blank" ID="143">/</DMBE2> 
+<DMBE3	Length="16"	Alignment="left" Filler="blank" ID="144">/</DMBE3> 
+<PARGB	Length="4"	Alignment="left" Filler="blank" ID="145">/</PARGB> 
+<XREF1	Length="12"	Alignment="left" Filler="blank" ID="146">/</XREF1> 
+<XREF2	Length="12"	Alignment="left" Filler="blank" ID="147">/</XREF2> 
+<KBLNR	Length="10"	Alignment="left" Filler="blank" ID="149">/</KBLNR> 
+<KBLPOS	Length="3"	Alignment="left" Filler="blank" ID="150">/</KBLPOS> 
+<WDATE	Length="8"	Alignment="left" Filler="blank" ID="151">/</WDATE> 
+<WGBKZ	Length="1"	Alignment="left" Filler="blank" ID="152">/</WGBKZ> 
+<XAKTZ	Length="1"	Alignment="left" Filler="blank" ID="153">/</XAKTZ> 
+<WNAME	Length="30"	Alignment="left" Filler="blank" ID="154">/</WNAME> 
+<WORT1	Length="30"	Alignment="left" Filler="blank" ID="155">/</WORT1> 
+<WBZOG	Length="30"	Alignment="left" Filler="blank" ID="156">/</WBZOG> 
+<WORT2	Length="30"	Alignment="left" Filler="blank" ID="157">/</WORT2> 
+<WBANK	Length="60"	Alignment="left" Filler="blank" ID="158">/</WBANK> 
+<WLZBP	Length="60"	Alignment="left" Filler="blank" ID="159">/</WLZBP> 
+<DISKP	Length="8"	Alignment="left" Filler="blank" ID="160">/</DISKP> 
+<DISKT	Length="3"	Alignment="left" Filler="blank" ID="161">/</DISKT> 
+<WINFW	Length="16"	Alignment="left" Filler="blank" ID="162">/</WINFW> 
+<WINHW	Length="16"	Alignment="left" Filler="blank" ID="163">/</WINHW> 
+<WEVWV	Length="1"	Alignment="left" Filler="blank" ID="164">/</WEVWV> 
+<WSTAT	Length="1"	Alignment="left" Filler="blank" ID="165">/</WSTAT> 
+<WMWKZ	Length="2"	Alignment="left" Filler="blank" ID="166">/</WMWKZ> 
+<WSTKZ	Length="1"	Alignment="left" Filler="blank" ID="167">/</WSTKZ> 
+<RKE_ARTNR	Length="18"	Alignment="left" Filler="blank" ID="169">/</RKE_ARTNR> 
+<RKE_BONUS	Length="2"	Alignment="left" Filler="blank" ID="170">/</RKE_BONUS> 
+<RKE_BRSCH	Length="4"	Alignment="left" Filler="blank" ID="171">/</RKE_BRSCH> 
+<RKE_BUKRS	Length="4"	Alignment="left" Filler="blank" ID="172">/</RKE_BUKRS> 
+<RKE_BZIRK	Length="6"	Alignment="left" Filler="blank" ID="173">/</RKE_BZIRK> 
+<RKE_EFORM	Length="5"	Alignment="left" Filler="blank" ID="174">/</RKE_EFORM> 
+<RKE_FKART	Length="4"	Alignment="left" Filler="blank" ID="175">/</RKE_FKART> 
+<RKE_GEBIE	Length="4"	Alignment="left" Filler="blank" ID="176">/</RKE_GEBIE> 
+<RKE_GSBER	Length="4"	Alignment="left" Filler="blank" ID="177">/</RKE_GSBER> 
+<RKE_KAUFN	Length="10"	Alignment="left" Filler="blank" ID="178">/</RKE_KAUFN> 
+<RKE_KDGRP	Length="2"	Alignment="left" Filler="blank" ID="179">/</RKE_KDGRP> 
+<RKE_KDPOS	Length="6"	Alignment="left" Filler="blank" ID="180">/</RKE_KDPOS> 
+<RKE_KNDNR	Length="10"	Alignment="left" Filler="blank" ID="181">/</RKE_KNDNR> 
+<RKE_KOKRS	Length="4"	Alignment="left" Filler="blank" ID="182">/</RKE_KOKRS> 
+<RKE_KSTRG	Length="12"	Alignment="left" Filler="blank" ID="183">/</RKE_KSTRG> 
+<RKE_LAND1	Length="3"	Alignment="left" Filler="blank" ID="184">/</RKE_LAND1> 
+<RKE_MAABC	Length="1"	Alignment="left" Filler="blank" ID="185">/</RKE_MAABC> 
+<RKE_MATKL	Length="9"	Alignment="left" Filler="blank" ID="186">/</RKE_MATKL> 
+<RKE_PRCTR	Length="10"	Alignment="left" Filler="blank" ID="187">/</RKE_PRCTR> 
+<RKE_PSPNR	Length="24"	Alignment="left" Filler="blank" ID="188">/</RKE_PSPNR> 
+<RKE_RKAUFNR	Length="12"	Alignment="left" Filler="blank" ID="189">/</RKE_RKAUFNR> 
+<RKE_SPART	Length="2"	Alignment="left" Filler="blank" ID="190">/</RKE_SPART> 
+<RKE_VKBUR	Length="4"	Alignment="left" Filler="blank" ID="191">/</RKE_VKBUR> 
+<RKE_VKGRP	Length="3"	Alignment="left" Filler="blank" ID="192">/</RKE_VKGRP> 
+<RKE_VKORG	Length="4"	Alignment="left" Filler="blank" ID="193">/</RKE_VKORG> 
+<RKE_VTWEG	Length="2"	Alignment="left" Filler="blank" ID="194">/</RKE_VTWEG> 
+<RKE_WERKS	Length="4"	Alignment="left" Filler="blank" ID="195">/</RKE_WERKS> 
+<RKE_KMBRND	Length="2"	Alignment="left" Filler="blank" ID="196">/</RKE_KMBRND> 
+<RKE_KMCATG	Length="2"	Alignment="left" Filler="blank" ID="197">/</RKE_KMCATG> 
+<RKE_KMHI01	Length="10"	Alignment="left" Filler="blank" ID="198">/</RKE_KMHI01> 
+<RKE_KMHI02	Length="10"	Alignment="left" Filler="blank" ID="199">/</RKE_KMHI02> 
+<RKE_KMHI03	Length="10"	Alignment="left" Filler="blank" ID="200">/</RKE_KMHI03> 
+<RKE_KMKDGR	Length="2"	Alignment="left" Filler="blank" ID="201">/</RKE_KMKDGR> 
+<RKE_KMLAND	Length="3"	Alignment="left" Filler="blank" ID="202">/</RKE_KMLAND> 
+<RKE_KMMAKL	Length="9"	Alignment="left" Filler="blank" ID="203">/</RKE_KMMAKL> 
+<RKE_KMNIEL	Length="2"	Alignment="left" Filler="blank" ID="204">/</RKE_KMNIEL> 
+<RKE_KMSTGE	Length="2"	Alignment="left" Filler="blank" ID="205">/</RKE_KMSTGE> 
+<RKE_KMVKBU	Length="4"	Alignment="left" Filler="blank" ID="206">/</RKE_KMVKBU> 
+<RKE_KMVKGR	Length="3"	Alignment="left" Filler="blank" ID="207">/</RKE_KMVKGR> 
+<RKE_KMVTNR	Length="8"	Alignment="left" Filler="blank" ID="208">/</RKE_KMVTNR> 
+<RKE_PPRCTR	Length="10"	Alignment="left" Filler="blank" ID="209">/</RKE_PPRCTR> 
+
+<!-- START new RKE-elements --> 
+<RKE_WW005	Length="5"	Alignment="left" Filler="blank" ID="276">/</RKE_WW005> 
+<RKE_WW006	Length="5"	Alignment="left" Filler="blank" ID="277">/</RKE_WW006> 
+<RKE_WW007	Length="3"	Alignment="left" Filler="blank" ID="278">/</RKE_WW007> 
+<RKE_WW008	Length="3"	Alignment="left" Filler="blank" ID="279">/</RKE_WW008> 
+<RKE_WW009	Length="1"	Alignment="left" Filler="blank" ID="280">/</RKE_WW009> 
+<RKE_WW010	Length="3"	Alignment="left" Filler="blank" ID="281">/</RKE_WW010> 
+<RKE_WW011	Length="2"	Alignment="left" Filler="blank" ID="282">/</RKE_WW011> 
+<RKE_WW012	Length="6"	Alignment="left" Filler="blank" ID="283">/</RKE_WW012> 
+<RKE_WW013	Length="10"	Alignment="left" Filler="blank" ID="284">/</RKE_WW013> 
+<RKE_WW015	Length="1"	Alignment="left" Filler="blank" ID="285">/</RKE_WW015> 
+<RKE_WW016	Length="2"	Alignment="left" Filler="blank" ID="286">/</RKE_WW016> 
+<RKE_WW017	Length="7"	Alignment="left" Filler="blank" ID="287">/</RKE_WW017> 
+<RKE_WW019	Length="6"	Alignment="left" Filler="blank" ID="289">/</RKE_WW019> 
+<!-- END new RKE-elements --> 
+
+<VBUND	Length="6"	Alignment="left" Filler="blank" ID="210">/</VBUND> 
+<FKBER	Length="4"	Alignment="left" Filler="blank" ID="211">/</FKBER> 
+<DABRZ	Length="8"	Alignment="left" Filler="blank" ID="212">/</DABRZ> 
+<XSTBA	Length="1"	Alignment="left" Filler="blank" ID="213">/</XSTBA> 
+
+<!-- START Additional (empty) tags start --> 
+<RSTGR	Length="3" Alignment="left" Filler="blank" ID="214">/</RSTGR> 
+<FIPEX	Length="24" Alignment="left" Filler="blank" ID="215">/</FIPEX> 
+<XNEGP	Length="1" Alignment="left" Filler="blank" ID="216">/</XNEGP> 
+<GRICD	Length="2" Alignment="left" Filler="blank" ID="217">/</GRICD> 
+<GRIRG	Length="3" Alignment="left" Filler="blank" ID="218">/</GRIRG> 
+<GITYP	Length="2" Alignment="left" Filler="blank" ID="219">/</GITYP> 
+<FITYP	Length="2" Alignment="left" Filler="blank" ID="220">/</FITYP> 
+<STCDT	Length="2" Alignment="left" Filler="blank" ID="221">/</STCDT> 
+<STKZN	Length="1" Alignment="left" Filler="blank" ID="222">/</STKZN> 
+<STCD3	Length="18" Alignment="left" Filler="blank" ID="223">/</STCD3> 
+<STCD4	Length="18" Alignment="left" Filler="blank" ID="224">/</STCD4> 
+<XREF3	Length="20" Alignment="left" Filler="blank" ID="225">/</XREF3> 
+<KIDNO	Length="30" Alignment="left" Filler="blank" ID="226">/</KIDNO> 
+<DTWS1	Length="2" Alignment="left" Filler="blank" ID="227">/</DTWS1> 
+<DTWS2	Length="2" Alignment="left" Filler="blank" ID="228">/</DTWS2> 
+<DTWS3	Length="2" Alignment="left" Filler="blank" ID="229">/</DTWS3> 
+<DTWS4	Length="2" Alignment="left" Filler="blank" ID="230">/</DTWS4> 
+<DTAWS	Length="2" Alignment="left" Filler="blank" ID="231">/</DTAWS> 
+<PYCUR	Length="5" Alignment="left" Filler="blank" ID="232">/</PYCUR> 
+<PYAMT	Length="16" Alignment="left" Filler="blank" ID="233">/</PYAMT> 
+<BUPLA	Length="4" Alignment="left" Filler="blank" ID="234">/</BUPLA> 
+<SECCO	Length="4" Alignment="left" Filler="blank" ID="235">/</SECCO> 
+<LSTAR	Length="6" Alignment="left" Filler="blank" ID="236">/</LSTAR> 
+<EGDEB	Length="10" Alignment="left" Filler="blank" ID="237">/</EGDEB> 
+<WENR	Length="8" Alignment="left" Filler="blank" ID="238">/</WENR> 
+<GENR	Length="8" Alignment="left" Filler="blank" ID="239">/</GENR> 
+<GRNR	Length="8" Alignment="left" Filler="blank" ID="240">/</GRNR> 
+<MENR	Length="8" Alignment="left" Filler="blank" ID="241">/</MENR> 
+<MIVE	Length="13" Alignment="left" Filler="blank" ID="242">/</MIVE> 
+<NKSL	Length="4" Alignment="left" Filler="blank" ID="243">/</NKSL> 
+<EMPSL	Length="5" Alignment="left" Filler="blank" ID="244">/</EMPSL> 
+<SVWNR	Length="13" Alignment="left" Filler="blank" ID="245">/</SVWNR> 
+<SBERI	Length="10" Alignment="left" Filler="blank" ID="246">/</SBERI> 
+<KKBER	Length="4" Alignment="left" Filler="blank" ID="247">/</KKBER> 
+<EMPFB	Length="10" Alignment="left" Filler="blank" ID="248">/</EMPFB> 
+<KURSR_M	Length="10" Alignment="left" Filler="blank" ID="249">/</KURSR_M> 
+<J_1KFREPRE	Length="10" Alignment="left" Filler="blank" ID="250">/</J_1KFREPRE> 
+<J_1KFTBUS	Length="30" Alignment="left" Filler="blank" ID="251">/</J_1KFTBUS> 
+<J_1KFTIND	Length="30" Alignment="left" Filler="blank" ID="252">/</J_1KFTIND> 
+<IDXSP	Length="5" Alignment="left" Filler="blank" ID="253">/</IDXSP> 
+<ANRED	Length="15" Alignment="left" Filler="blank" ID="254">/</ANRED> 
+<RECNNR	Length="13" Alignment="left" Filler="blank" ID="255">/</RECNNR> 
+<E_MIVE	Length="13" Alignment="left" Filler="blank" ID="256">/</E_MIVE> 
+<BKREF	Length="20" Alignment="left" Filler="blank" ID="257">/</BKREF> 
+<DTAMS	Length="1" Alignment="left" Filler="blank" ID="258">/</DTAMS> 
+<CESSION_KZ	Length="2" Alignment="left" Filler="blank" ID="259">/</CESSION_KZ> 
+<GRANT_NBR	Length="20" Alignment="left" Filler="blank" ID="260">/</GRANT_NBR> 
+<FKBER_LONG	Length="16" Alignment="left" Filler="blank" ID="261">/</FKBER_LONG> 
+<ERLKZ	Length="1" Alignment="left" Filler="blank" ID="262">/</ERLKZ> 
+<IBAN	Length="34" Alignment="left" Filler="blank" ID="263">/</IBAN> 
+<VALID_FROM	Length="8" Alignment="left" Filler="blank" ID="264">/</VALID_FROM> 
+<SEGMENT	Length="10" Alignment="left" Filler="blank" ID="265">/</SEGMENT> 
+<PSEGMENT	Length="10" Alignment="left" Filler="blank" ID="266">/</PSEGMENT> 
+<HKTID	Length="5" Alignment="left" Filler="blank" ID="267">/</HKTID> 
+<XSIWE	Length="1" Alignment="left" Filler="blank" ID="268">/</XSIWE> 
+<TCNO	Length="16" Alignment="left" Filler="blank" ID="269">/</TCNO> 
+<DATEOFSERVICE	Length="8" Alignment="left" Filler="blank" ID="270">/</DATEOFSERVICE> 
+<NOTAXCORR	Length="1" Alignment="left" Filler="blank" ID="271">/</NOTAXCORR> 
+<DIFFOPTRATE	Length="10" Alignment="left" Filler="blank" ID="272">/</DIFFOPTRATE> 
+<HASDIFFOPTRATE	Length="1" Alignment="left" Filler="blank" ID="273">/</HASDIFFOPTRATE> 
+<SENDE	Length="1" Alignment="left" Filler="blank" ID="274">/</SENDE> 
+<PRODPER	Length="8" Alignment="left" Filler="blank" ID="275">/</PRODPER> 
+<!-- END Additional tags -->	
+
+</invoiceDetails_1_elements> 
+</xsl:template> 
+
+<xsl:template name="invoiceDetails_DetailCharges_1_elements"> 
+<invoiceDetails_DetailCharges_1_elements> 
+<STYPE ID="1"	Length="1"	Alignment="left" Filler="blank">2</STYPE> 
+<TBNAM ID="2"	Length="30"	Alignment="left" Filler="blank">BBSEG</TBNAM> 
+<NEWBS ID="3"	Length="2"	Alignment="left" Filler="blank"> 
+<xsl:if test="parent::node()/type='I'">40</xsl:if> 
+<xsl:if test="parent::node()/type='C'">50</xsl:if> 
+</NEWBS> 
+<DUMMYX	ID="4"	Length="10"	Alignment="left" Filler="blank">/</DUMMYX> 
+<NEWUM	ID="5"	Length="1"	Alignment="left" Filler="blank">/</NEWUM> 
+<NEWBK	ID="6"	Length="4"	Alignment="left" Filler="blank">/</NEWBK> 
+<WRBTR	ID="7"	Length="16"	Alignment="left" Filler="blank"> 
+<!--	<xsl:value-of select="format-number(totalAmount, '#0.00', 'european')"/>	--> 
+<xsl:value-of select="format-number(totalAmount, '0000000000000,00', 'european')"/>	
+</WRBTR> 
+<DMBTR	ID="8"	Length="16"	Alignment="left" Filler="blank">/</DMBTR> 
+<WMWST	ID="9"	Length="16"	Alignment="left" Filler="blank">/</WMWST> 
+<MWSTS	ID="10"	Length="16"	Alignment="left" Filler="blank">/</MWSTS> 
+<MWSKZ	ID="11"	Length="2"	Alignment="left" Filler="blank"> 
+<xsl:value-of select="parent::node()/financialTaxCode" /> 
+</MWSKZ> 
+<XSKRL	ID="12"	Length="1"	Alignment="left" Filler="blank">/</XSKRL> 
+<FWZUZ	ID="13"	Length="16"	Alignment="left" Filler="blank">/</FWZUZ> 
+<HWZUZ	ID="14"	Length="16"	Alignment="left" Filler="blank">/</HWZUZ> 
+<GSBER	ID="15"	Length="4"	Alignment="left" Filler="blank">/</GSBER> 
+<KOSTL	ID="16"	Length="10"	Alignment="left" Filler="blank"> 
+<xsl:choose> 
+<xsl:when test="financialCostcenter and string-length(financialCostcenter) &gt; 0"> 
+<xsl:value-of select="financialCostcenter" /> 
+</xsl:when> 
+<xsl:otherwise> 
+<xsl:value-of select="'/'" /> 
+</xsl:otherwise> 
+</xsl:choose> 
+</KOSTL> 
+<DUMMY4	ID="17"	Length="4"	Alignment="left" Filler="blank">/</DUMMY4> 
+<AUFNR	ID="18"	Length="12"	Alignment="left" Filler="blank"> 
+<xsl:choose> 
+<xsl:when test="costcenter2 and string-length(costcenter2) &gt; 0"> 
+<xsl:value-of select="costcenter2" /> 
+</xsl:when> 
+<xsl:otherwise> 
+<xsl:value-of select="'/'" /> 
+</xsl:otherwise> 
+</xsl:choose> 
+</AUFNR> 
+<EBELN	ID="19"	Length="10"	Alignment="left" Filler="blank">/</EBELN> 
+<EBELP	ID="20"	Length="5"	Alignment="left" Filler="blank">/</EBELP> 
+<PROJN	ID="21"	Length="16"	Alignment="left" Filler="blank">/</PROJN> 
+<MATNR	ID="22"	Length="18"	Alignment="left" Filler="blank">/</MATNR> 
+<WERKS	ID="23"	Length="4"	Alignment="left" Filler="blank">/</WERKS> 
+<MENGE	ID="24"	Length="17"	Alignment="left" Filler="blank">/</MENGE> 
+<MEINS	ID="25"	Length="3"	Alignment="left" Filler="blank">/</MEINS> 
+<VBEL2	ID="26"	Length="10"	Alignment="left" Filler="blank">/</VBEL2> 
+<POSN2	ID="27"	Length="6"	Alignment="left" Filler="blank">/</POSN2> 
+<ETEN2	ID="28"	Length="4"	Alignment="left" Filler="blank">/</ETEN2> 
+<PERNR	ID="29"	Length="8"	Alignment="left" Filler="blank">/</PERNR> 
+<BEWAR	ID="30"	Length="3"	Alignment="left" Filler="blank">/</BEWAR> 
+<VALUT	ID="31"	Length="8"	Alignment="left" Filler="blank">/</VALUT> 
+<ZFBDT	ID="32"	Length="8"	Alignment="left" Filler="blank">/</ZFBDT> 
+<ZINKZ	ID="33"	Length="2"	Alignment="left" Filler="blank">/</ZINKZ> 
+<ZUONR	ID="34"	Length="18"	Alignment="left" Filler="blank"> 
+<xsl:value-of select="orderNumber" /> 
+<xsl:value-of select="'-'" /> 
+<xsl:value-of select="itemNumber" /> 
+</ZUONR> 
+<FKONT	ID="35"	Length="3"	Alignment="left" Filler="blank">/</FKONT> 
+<XAABG	ID="36"	Length="1"	Alignment="left" Filler="blank">/</XAABG> 
+<SGTXT	ID="37"	Length="50"	Alignment="left" Filler="blank"> 
+<xsl:variable name="twoDigitYear"> 
+<xsl:value-of select="substring(parent::node()/financialPeriodYear, 3, 4)"/> 
+</xsl:variable> 
+<xsl:value-of select="$twoDigitYear" /> 
+<xsl:value-of select="'/'" /> 
+<xsl:value-of select="parent::node()/financialPeriodMonth" /> 
+</SGTXT> 
+<BLNKZ	ID="38"	Alignment="left" Filler="blank" Length="2">/</BLNKZ> 
+<BLNBT	ID="39" Alignment="left" Filler="blank" Length="16">/</BLNBT> 
+<BLNPZ	ID="40" Alignment="left" Filler="blank" Length="8">/</BLNPZ> 
+<MABER	ID="41" Alignment="left" Filler="blank" Length="2">/</MABER> 
+<SKFBT	ID="42" Alignment="left" Filler="blank" Length="16">/</SKFBT> 
+<WSKTO	ID="43" Alignment="left" Filler="blank" Length="16">/</WSKTO> 
+<ZTERM	ID="44" Alignment="left" Filler="blank" Length="4">/</ZTERM> 
+<ZBD1T	ID="45" Alignment="left" Filler="blank" Length="3">/</ZBD1T> 
+<ZBD1P	ID="46" Alignment="left" Filler="blank" Length="6">/</ZBD1P> 
+<ZBD2T	ID="47" Alignment="left" Filler="blank" Length="3">/</ZBD2T> 
+<ZBD2P	ID="48" Alignment="left" Filler="blank" Length="6">/</ZBD2P> 
+<ZBD3T	ID="49" Alignment="left" Filler="blank" Length="3">/</ZBD3T> 
+<ZLSPR	ID="50" Alignment="left" Filler="blank" Length="1">/</ZLSPR> 
+<REBZG	ID="51" Alignment="left" Filler="blank" Length="10">/</REBZG> 
+<REBZJ	ID="52" Alignment="left" Filler="blank" Length="4">/</REBZJ> 
+<REBZZ	ID="53" Alignment="left" Filler="blank" Length="3">/</REBZZ> 
+<ZLSCH	ID="54" Alignment="left" Filler="blank" Length="1">/</ZLSCH> 
+<SAMNR	ID="55" Alignment="left" Filler="blank" Length="8">/</SAMNR> 
+<ZBFIX	ID="56" Alignment="left" Filler="blank" Length="1">/</ZBFIX> 
+<QSSKZ	ID="57" Alignment="left" Filler="blank" Length="2">/</QSSKZ> 
+<QSSHB	ID="58" Alignment="left" Filler="blank" Length="16">/</QSSHB> 
+<QSFBT	ID="59" Alignment="left" Filler="blank" Length="16">/</QSFBT> 
+<ESRNR	ID="60" Alignment="left" Filler="blank" Length="11">/</ESRNR> 
+<ESRPZ	ID="61" Alignment="left" Filler="blank" Length="2">/</ESRPZ> 
+<ESRRE	ID="62" Alignment="left" Filler="blank" Length="27">/</ESRRE> 
+<FDTAG	ID="63" Alignment="left" Filler="blank" Length="8">/</FDTAG> 
+<FDLEV	ID="64" Alignment="left" Filler="blank" Length="2">/</FDLEV> 
+<ANLN1	ID="65" Alignment="left" Filler="blank" Length="12">/</ANLN1> 
+<ANLN2	ID="66" Alignment="left" Filler="blank" Length="4">/</ANLN2> 
+<BZDAT	ID="67" Alignment="left" Filler="blank" Length="8">/</BZDAT> 
+<ANBWA	ID="68" Alignment="left" Filler="blank" Length="3">/</ANBWA> 
+<ABPER	ID="69" Alignment="left" Filler="blank" Length="7">/</ABPER> 
+<GBETR	ID="70" Alignment="left" Filler="blank" Length="16">/</GBETR> 
+<KURSR	ID="71" Alignment="left" Filler="blank" Length="10">/</KURSR> 
+<MANSP	ID="72" Alignment="left" Filler="blank" Length="1">/</MANSP> 
+<MSCHL	ID="73" Alignment="left" Filler="blank" Length="1">/</MSCHL> 
+<HBKID	ID="74" Alignment="left" Filler="blank" Length="5">/</HBKID> 
+<BVTYP	ID="75" Alignment="left" Filler="blank" Length="4">/</BVTYP> 
+<ANFBN	ID="76" Alignment="left" Filler="blank" Length="10">/</ANFBN> 
+<ANFBU	ID="77" Alignment="left" Filler="blank" Length="4">/</ANFBU> 
+<ANFBJ	ID="78" Alignment="left" Filler="blank" Length="4">/</ANFBJ> 
+<LZBKZ	ID="79" Alignment="left" Filler="blank" Length="3"> 
+<xsl:choose> 
+<xsl:when test="orderType='S'"> 
+<xsl:value-of select="$constLZBZK_S_ORDER" /> 
+</xsl:when> 
+<xsl:otherwise> 
+<xsl:value-of select="$constLZBZK_OTHER" /> 
+</xsl:otherwise> 
+</xsl:choose>	
+</LZBKZ> 
+<LANDL	ID="80" Alignment="left" Filler="blank" Length="3">/</LANDL> 
+<DIEKZ	ID="81" Alignment="left" Filler="blank" Length="1">/</DIEKZ> 
+<ZOLLD	ID="82" Alignment="left" Filler="blank" Length="8">/</ZOLLD> 
+<ZOLLT	ID="83" Alignment="left" Filler="blank" Length="8">/</ZOLLT> 
+<VRSDT	ID="84" Alignment="left" Filler="blank" Length="8">/</VRSDT> 
+<VRSKZ	ID="85" Alignment="left" Filler="blank" Length="1">/</VRSKZ> 
+<HZUON	ID="86" Alignment="left" Filler="blank" Length="18">/</HZUON> 
+<REGUL	ID="87" Alignment="left" Filler="blank" Length="1">/</REGUL> 
+<NAME1	ID="88" Alignment="left" Filler="blank" Length="35">/</NAME1> 
+<NAME2	ID="89" Alignment="left" Filler="blank" Length="35">/</NAME2> 
+<NAME3	ID="90" Alignment="left" Filler="blank" Length="35">/</NAME3> 
+<NAME4	ID="91" Alignment="left" Filler="blank" Length="35">/</NAME4> 
+<STRAS	ID="92" Alignment="left" Filler="blank" Length="35">/</STRAS> 
+<ORT01	ID="93" Alignment="left" Filler="blank" Length="35">/</ORT01> 
+<PSTLZ	ID="94" Alignment="left" Filler="blank" Length="10">/</PSTLZ> 
+<LAND1	ID="95" Alignment="left" Filler="blank" Length="3">/</LAND1> 
+<REGIO	ID="96" Alignment="left" Filler="blank" Length="3">/</REGIO> 
+<BANKL	ID="97" Alignment="left" Filler="blank" Length="15">/</BANKL> 
+<BANKS	ID="98" Alignment="left" Filler="blank" Length="3">/</BANKS> 
+<BANKN	ID="99" Alignment="left" Filler="blank" Length="18">/</BANKN> 
+<BKONT	ID="100" Alignment="left" Filler="blank" Length="2">/</BKONT> 
+<STCD1	ID="101" Alignment="left" Filler="blank" Length="16">/</STCD1> 
+<STCD2	ID="102" Alignment="left" Filler="blank" Length="11">/</STCD2> 
+<MADAT	ID="103" Alignment="left" Filler="blank" Length="8">/</MADAT> 
+<MANST	ID="104" Alignment="left" Filler="blank" Length="1">/</MANST> 
+<EGMLD	ID="105" Alignment="left" Filler="blank" Length="3">/</EGMLD> 
+<DUMMY2	ID="106" Alignment="left" Filler="blank" Length="3">/</DUMMY2> 
+<STCEG	ID="107" Alignment="left" Filler="blank" Length="20">/</STCEG> 
+<STKZA	ID="108" Alignment="left" Filler="blank" Length="1">/</STKZA> 
+<STKZU	ID="109" Alignment="left" Filler="blank" Length="1">/</STKZU> 
+<PFACH	ID="110" Alignment="left" Filler="blank" Length="10">/</PFACH> 
+<PSTL2	ID="111" Alignment="left" Filler="blank" Length="10">/</PSTL2> 
+<SPRAS	ID="112" Alignment="left" Filler="blank" Length="1">/</SPRAS> 
+<XINVE	ID="113" Alignment="left" Filler="blank" Length="1">/</XINVE> 
+
+<NEWKO ID="114" Length="17" Alignment="left" Filler="blank"> 
+<xsl:value-of select="accountNumber" /> 
+</NEWKO> 
+
+<NEWBW	Length="3"	Alignment="left" Filler="blank" ID="115">/</NEWBW> 
+<KNRZE	Length="17"	Alignment="left" Filler="blank" ID="116">/</KNRZE> 
+<HKONT	Length="10"	Alignment="left" Filler="blank" ID="117">/</HKONT> 
+<PRCTR	Length="10"	Alignment="left" Filler="blank" ID="118">/</PRCTR> 
+<VERTN	Length="13"	Alignment="left" Filler="blank" ID="119">/</VERTN> 
+<VERTT	Length="1"	Alignment="left" Filler="blank" ID="120">/</VERTT> 
+<VBEWA	Length="4"	Alignment="left" Filler="blank" ID="121">/</VBEWA> 
+<HWBAS	Length="16"	Alignment="left" Filler="blank" ID="122">/</HWBAS> 
+<FWBAS	Length="16"	Alignment="left" Filler="blank" ID="123">/</FWBAS> 
+<FIPOS	Length="14"	Alignment="left" Filler="blank" ID="124">/</FIPOS> 
+<VNAME	Length="6"	Alignment="left" Filler="blank" ID="125">/</VNAME> 
+<EGRUP	Length="3"	Alignment="left" Filler="blank" ID="126">/</EGRUP> 
+<BTYPE	Length="2"	Alignment="left" Filler="blank" ID="127">/</BTYPE> 
+<PAOBJNR	Length="10"	Alignment="left" Filler="blank" ID="128">/</PAOBJNR> 
+<KSTRG	Length="12"	Alignment="left" Filler="blank" ID="129">/</KSTRG> 
+<IMKEY	Length="8"	Alignment="left" Filler="blank" ID="130">/</IMKEY> 
+<DUMMY3	Length="8"	Alignment="left" Filler="blank" ID="131">/</DUMMY3> 
+<VPTNR	Length="10"	Alignment="left" Filler="blank" ID="132">/</VPTNR> 
+<NPLNR	Length="12"	Alignment="left" Filler="blank" ID="133">/</NPLNR> 
+<VORNR	Length="4"	Alignment="left" Filler="blank" ID="134">/</VORNR> 
+<XEGDR	Length="1"	Alignment="left" Filler="blank" ID="135">/</XEGDR> 
+<RECID	Length="2"	Alignment="left" Filler="blank" ID="136">/</RECID> 
+<PPRCT	Length="10"	Alignment="left" Filler="blank" ID="137">/</PPRCT> 
+<PROJK	Length="24"	Alignment="left" Filler="blank" ID="138">/</PROJK> 
+<UZAWE	Length="2"	Alignment="left" Filler="blank" ID="139">/</UZAWE> 
+<TXJCD	Length="15"	Alignment="left" Filler="blank" ID="140">/</TXJCD> 
+<FISTL	Length="16"	Alignment="left" Filler="blank" ID="141">/</FISTL> 
+<GEBER	Length="10"	Alignment="left" Filler="blank" ID="142">/</GEBER> 
+<DMBE2	Length="16"	Alignment="left" Filler="blank" ID="143">/</DMBE2> 
+<DMBE3	Length="16"	Alignment="left" Filler="blank" ID="144">/</DMBE3> 
+<PARGB	Length="4"	Alignment="left" Filler="blank" ID="145">/</PARGB> 
+<XREF1	Length="12"	Alignment="left" Filler="blank" ID="146">/</XREF1> 
+<XREF2	Length="12"	Alignment="left" Filler="blank" ID="147">/</XREF2> 
+<KBLNR	Length="10"	Alignment="left" Filler="blank" ID="149">/</KBLNR> 
+<KBLPOS	Length="3"	Alignment="left" Filler="blank" ID="150">/</KBLPOS> 
+<WDATE	Length="8"	Alignment="left" Filler="blank" ID="151">/</WDATE> 
+<WGBKZ	Length="1"	Alignment="left" Filler="blank" ID="152">/</WGBKZ> 
+<XAKTZ	Length="1"	Alignment="left" Filler="blank" ID="153">/</XAKTZ> 
+<WNAME	Length="30"	Alignment="left" Filler="blank" ID="154">/</WNAME> 
+<WORT1	Length="30"	Alignment="left" Filler="blank" ID="155">/</WORT1> 
+<WBZOG	Length="30"	Alignment="left" Filler="blank" ID="156">/</WBZOG> 
+<WORT2	Length="30"	Alignment="left" Filler="blank" ID="157">/</WORT2> 
+<WBANK	Length="60"	Alignment="left" Filler="blank" ID="158">/</WBANK> 
+<WLZBP	Length="60"	Alignment="left" Filler="blank" ID="159">/</WLZBP> 
+<DISKP	Length="8"	Alignment="left" Filler="blank" ID="160">/</DISKP> 
+<DISKT	Length="3"	Alignment="left" Filler="blank" ID="161">/</DISKT> 
+<WINFW	Length="16"	Alignment="left" Filler="blank" ID="162">/</WINFW> 
+<WINHW	Length="16"	Alignment="left" Filler="blank" ID="163">/</WINHW> 
+<WEVWV	Length="1"	Alignment="left" Filler="blank" ID="164">/</WEVWV> 
+<WSTAT	Length="1"	Alignment="left" Filler="blank" ID="165">/</WSTAT> 
+<WMWKZ	Length="2"	Alignment="left" Filler="blank" ID="166">/</WMWKZ> 
+<WSTKZ	Length="1"	Alignment="left" Filler="blank" ID="167">/</WSTKZ> 
+<RKE_ARTNR	Length="18"	Alignment="left" Filler="blank" ID="169">/</RKE_ARTNR> 
+<RKE_BONUS	Length="2"	Alignment="left" Filler="blank" ID="170">/</RKE_BONUS> 
+<RKE_BRSCH	Length="4"	Alignment="left" Filler="blank" ID="171">/</RKE_BRSCH> 
+<RKE_BUKRS	Length="4"	Alignment="left" Filler="blank" ID="172">/</RKE_BUKRS> 
+<RKE_BZIRK	Length="6"	Alignment="left" Filler="blank" ID="173">/</RKE_BZIRK> 
+<RKE_EFORM	Length="5"	Alignment="left" Filler="blank" ID="174">/</RKE_EFORM> 
+<RKE_FKART	Length="4"	Alignment="left" Filler="blank" ID="175">/</RKE_FKART> 
+<RKE_GEBIE	Length="4"	Alignment="left" Filler="blank" ID="176">/</RKE_GEBIE> 
+<RKE_GSBER	Length="4"	Alignment="left" Filler="blank" ID="177">/</RKE_GSBER> 
+<RKE_KAUFN	Length="10"	Alignment="left" Filler="blank" ID="178">/</RKE_KAUFN> 
+<RKE_KDGRP	Length="2"	Alignment="left" Filler="blank" ID="179">/</RKE_KDGRP> 
+<RKE_KDPOS	Length="6"	Alignment="left" Filler="blank" ID="180">/</RKE_KDPOS> 
+<RKE_KNDNR	Length="10"	Alignment="left" Filler="blank" ID="181">/</RKE_KNDNR> 
+<RKE_KOKRS	Length="4"	Alignment="left" Filler="blank" ID="182">/</RKE_KOKRS> 
+<RKE_KSTRG	Length="12"	Alignment="left" Filler="blank" ID="183">/</RKE_KSTRG> 
+<RKE_LAND1	Length="3"	Alignment="left" Filler="blank" ID="184">/</RKE_LAND1> 
+<RKE_MAABC	Length="1"	Alignment="left" Filler="blank" ID="185">/</RKE_MAABC> 
+<RKE_MATKL	Length="9"	Alignment="left" Filler="blank" ID="186">/</RKE_MATKL> 
+<RKE_PRCTR	Length="10"	Alignment="left" Filler="blank" ID="187">/</RKE_PRCTR> 
+<RKE_PSPNR	Length="24"	Alignment="left" Filler="blank" ID="188">/</RKE_PSPNR> 
+<RKE_RKAUFNR	Length="12"	Alignment="left" Filler="blank" ID="189">/</RKE_RKAUFNR> 
+<RKE_SPART	Length="2"	Alignment="left" Filler="blank" ID="190">/</RKE_SPART> 
+<RKE_VKBUR	Length="4"	Alignment="left" Filler="blank" ID="191">/</RKE_VKBUR> 
+<RKE_VKGRP	Length="3"	Alignment="left" Filler="blank" ID="192">/</RKE_VKGRP> 
+<RKE_VKORG	Length="4"	Alignment="left" Filler="blank" ID="193">/</RKE_VKORG> 
+<RKE_VTWEG	Length="2"	Alignment="left" Filler="blank" ID="194">/</RKE_VTWEG> 
+<RKE_WERKS	Length="4"	Alignment="left" Filler="blank" ID="195">/</RKE_WERKS> 
+<RKE_KMBRND	Length="2"	Alignment="left" Filler="blank" ID="196">/</RKE_KMBRND> 
+<RKE_KMCATG	Length="2"	Alignment="left" Filler="blank" ID="197">/</RKE_KMCATG> 
+<RKE_KMHI01	Length="10"	Alignment="left" Filler="blank" ID="198">/</RKE_KMHI01> 
+<RKE_KMHI02	Length="10"	Alignment="left" Filler="blank" ID="199">/</RKE_KMHI02> 
+<RKE_KMHI03	Length="10"	Alignment="left" Filler="blank" ID="200">/</RKE_KMHI03> 
+<RKE_KMKDGR	Length="2"	Alignment="left" Filler="blank" ID="201">/</RKE_KMKDGR> 
+<RKE_KMLAND	Length="3"	Alignment="left" Filler="blank" ID="202">/</RKE_KMLAND> 
+<RKE_KMMAKL	Length="9"	Alignment="left" Filler="blank" ID="203">/</RKE_KMMAKL> 
+<RKE_KMNIEL	Length="2"	Alignment="left" Filler="blank" ID="204">/</RKE_KMNIEL> 
+<RKE_KMSTGE	Length="2"	Alignment="left" Filler="blank" ID="205">/</RKE_KMSTGE> 
+<RKE_KMVKBU	Length="4"	Alignment="left" Filler="blank" ID="206">/</RKE_KMVKBU> 
+<RKE_KMVKGR	Length="3"	Alignment="left" Filler="blank" ID="207">/</RKE_KMVKGR> 
+<RKE_KMVTNR	Length="8"	Alignment="left" Filler="blank" ID="208">/</RKE_KMVTNR> 
+<RKE_PPRCTR	Length="10"	Alignment="left" Filler="blank" ID="209">/</RKE_PPRCTR> 
+
+<!-- START new RKE-elements --> 
+<RKE_WW005	Length="5"	Alignment="left" Filler="blank" ID="276">/</RKE_WW005> 
+<RKE_WW006	Length="5"	Alignment="left" Filler="blank" ID="277">/</RKE_WW006> 
+<RKE_WW007	Length="3"	Alignment="left" Filler="blank" ID="278">/</RKE_WW007> 
+<RKE_WW008	Length="3"	Alignment="left" Filler="blank" ID="279">/</RKE_WW008> 
+<RKE_WW009	Length="1"	Alignment="left" Filler="blank" ID="280">/</RKE_WW009> 
+<RKE_WW010	Length="3"	Alignment="left" Filler="blank" ID="281">/</RKE_WW010> 
+<RKE_WW011	Length="2"	Alignment="left" Filler="blank" ID="282">/</RKE_WW011> 
+<RKE_WW012	Length="6"	Alignment="left" Filler="blank" ID="283">/</RKE_WW012> 
+<RKE_WW013	Length="10"	Alignment="left" Filler="blank" ID="284">/</RKE_WW013> 
+<RKE_WW015	Length="1"	Alignment="left" Filler="blank" ID="285">/</RKE_WW015> 
+<RKE_WW016	Length="2"	Alignment="left" Filler="blank" ID="286">/</RKE_WW016> 
+<RKE_WW017	Length="7"	Alignment="left" Filler="blank" ID="287">/</RKE_WW017> 
+<RKE_WW019	Length="6"	Alignment="left" Filler="blank" ID="289">/</RKE_WW019> 
+<!-- END new RKE-elements --> 
+
+<VBUND	Length="6"	Alignment="left" Filler="blank" ID="210">/</VBUND> 
+<FKBER	Length="4"	Alignment="left" Filler="blank" ID="211">/</FKBER> 
+<DABRZ	Length="8"	Alignment="left" Filler="blank" ID="212">/</DABRZ> 
+<XSTBA	Length="1"	Alignment="left" Filler="blank" ID="213">/</XSTBA> 
+
+<!-- Additional (empty) tags start --> 
+<RSTGR	Length="3" Alignment="left" Filler="blank" ID="214">/</RSTGR> 
+<FIPEX	Length="24" Alignment="left" Filler="blank" ID="215">/</FIPEX> 
+<XNEGP	Length="1" Alignment="left" Filler="blank" ID="216">/</XNEGP> 
+<GRICD	Length="2" Alignment="left" Filler="blank" ID="217">/</GRICD> 
+<GRIRG	Length="3" Alignment="left" Filler="blank" ID="218">/</GRIRG> 
+<GITYP	Length="2" Alignment="left" Filler="blank" ID="219">/</GITYP> 
+<FITYP	Length="2" Alignment="left" Filler="blank" ID="220">/</FITYP> 
+<STCDT	Length="2" Alignment="left" Filler="blank" ID="221">/</STCDT> 
+<STKZN	Length="1" Alignment="left" Filler="blank" ID="222">/</STKZN> 
+<STCD3	Length="18" Alignment="left" Filler="blank" ID="223">/</STCD3> 
+<STCD4	Length="18" Alignment="left" Filler="blank" ID="224">/</STCD4> 
+<XREF3	Length="20" Alignment="left" Filler="blank" ID="225">/</XREF3> 
+<KIDNO	Length="30" Alignment="left" Filler="blank" ID="226">/</KIDNO> 
+<DTWS1	Length="2" Alignment="left" Filler="blank" ID="227">/</DTWS1> 
+<DTWS2	Length="2" Alignment="left" Filler="blank" ID="228">/</DTWS2> 
+<DTWS3	Length="2" Alignment="left" Filler="blank" ID="229">/</DTWS3> 
+<DTWS4	Length="2" Alignment="left" Filler="blank" ID="230">/</DTWS4> 
+<DTAWS	Length="2" Alignment="left" Filler="blank" ID="231">/</DTAWS> 
+<PYCUR	Length="5" Alignment="left" Filler="blank" ID="232">/</PYCUR> 
+<PYAMT	Length="16" Alignment="left" Filler="blank" ID="233">/</PYAMT> 
+<BUPLA	Length="4" Alignment="left" Filler="blank" ID="234">/</BUPLA> 
+<SECCO	Length="4" Alignment="left" Filler="blank" ID="235">/</SECCO> 
+<LSTAR	Length="6" Alignment="left" Filler="blank" ID="236">/</LSTAR> 
+<EGDEB	Length="10" Alignment="left" Filler="blank" ID="237">/</EGDEB> 
+<WENR	Length="8" Alignment="left" Filler="blank" ID="238">/</WENR> 
+<GENR	Length="8" Alignment="left" Filler="blank" ID="239">/</GENR> 
+<GRNR	Length="8" Alignment="left" Filler="blank" ID="240">/</GRNR> 
+<MENR	Length="8" Alignment="left" Filler="blank" ID="241">/</MENR> 
+<MIVE	Length="13" Alignment="left" Filler="blank" ID="242">/</MIVE> 
+<NKSL	Length="4" Alignment="left" Filler="blank" ID="243">/</NKSL> 
+<EMPSL	Length="5" Alignment="left" Filler="blank" ID="244">/</EMPSL> 
+<SVWNR	Length="13" Alignment="left" Filler="blank" ID="245">/</SVWNR> 
+<SBERI	Length="10" Alignment="left" Filler="blank" ID="246">/</SBERI> 
+<KKBER	Length="4" Alignment="left" Filler="blank" ID="247">/</KKBER> 
+<EMPFB	Length="10" Alignment="left" Filler="blank" ID="248">/</EMPFB> 
+<KURSR_M	Length="10" Alignment="left" Filler="blank" ID="249">/</KURSR_M> 
+<J_1KFREPRE	Length="10" Alignment="left" Filler="blank" ID="250">/</J_1KFREPRE> 
+<J_1KFTBUS	Length="30" Alignment="left" Filler="blank" ID="251">/</J_1KFTBUS> 
+<J_1KFTIND	Length="30" Alignment="left" Filler="blank" ID="252">/</J_1KFTIND> 
+<IDXSP	Length="5" Alignment="left" Filler="blank" ID="253">/</IDXSP> 
+<ANRED	Length="15" Alignment="left" Filler="blank" ID="254">/</ANRED> 
+<RECNNR	Length="13" Alignment="left" Filler="blank" ID="255">/</RECNNR> 
+<E_MIVE	Length="13" Alignment="left" Filler="blank" ID="256">/</E_MIVE> 
+<BKREF	Length="20" Alignment="left" Filler="blank" ID="257">/</BKREF> 
+<DTAMS	Length="1" Alignment="left" Filler="blank" ID="258">/</DTAMS> 
+<CESSION_KZ	Length="2" Alignment="left" Filler="blank" ID="259">/</CESSION_KZ> 
+<GRANT_NBR	Length="20" Alignment="left" Filler="blank" ID="260">/</GRANT_NBR> 
+<FKBER_LONG	Length="16" Alignment="left" Filler="blank" ID="261">/</FKBER_LONG> 
+<ERLKZ	Length="1" Alignment="left" Filler="blank" ID="262">/</ERLKZ> 
+<IBAN	Length="34" Alignment="left" Filler="blank" ID="263">/</IBAN> 
+<VALID_FROM	Length="8" Alignment="left" Filler="blank" ID="264">/</VALID_FROM> 
+<SEGMENT	Length="10" Alignment="left" Filler="blank" ID="265">/</SEGMENT> 
+<PSEGMENT	Length="10" Alignment="left" Filler="blank" ID="266">/</PSEGMENT> 
+<HKTID	Length="5" Alignment="left" Filler="blank" ID="267">/</HKTID> 
+<XSIWE	Length="1" Alignment="left" Filler="blank" ID="268">/</XSIWE> 
+<TCNO	Length="16" Alignment="left" Filler="blank" ID="269">/</TCNO> 
+<DATEOFSERVICE	Length="8" Alignment="left" Filler="blank" ID="270">/</DATEOFSERVICE> 
+<NOTAXCORR	Length="1" Alignment="left" Filler="blank" ID="271">/</NOTAXCORR> 
+<DIFFOPTRATE	Length="10" Alignment="left" Filler="blank" ID="272">/</DIFFOPTRATE> 
+<HASDIFFOPTRATE	Length="1" Alignment="left" Filler="blank" ID="273">/</HASDIFFOPTRATE> 
+<SENDE	Length="1" Alignment="left" Filler="blank" ID="274">/</SENDE> 
+<PRODPER	Length="8" Alignment="left" Filler="blank" ID="275">/</PRODPER> 
+<!-- Additional tags end --> 
+
+</invoiceDetails_DetailCharges_1_elements> 
+</xsl:template> 
+<!-- end transformation_2 --> 
+
+<!-- start transformation_1 --> 
+<xsl:template name="transformation_1_elements"> 
+<xsl:apply-templates select="transferInvoice"/> 
+</xsl:template> 
+
+<xsl:template match="transferInvoice"> 
+<transformation_1_elements> 
+<xsl:apply-templates select="invoice"/> 
+</transformation_1_elements> 
+</xsl:template> 
+<!-- end transformation_1 --> 
+
+<xsl:template match="invoice"> 
+<invoice_elements> 
+<xsl:attribute name="invoiceNumber"> 
+<xsl:value-of select="invoiceNumber"/> 
+</xsl:attribute> 
+<xsl:for-each select="*[count(./*) = 0]"> 
+<xsl:copy-of select="."/> 
+</xsl:for-each> 
+<xsl:apply-templates select="invoiceHeader"/> 
+<xsl:apply-templates select="invoiceCharges"/> 
+<xsl:apply-templates select="invoiceDetails"/> 
+</invoice_elements> 
+</xsl:template> 
+
+<!-- start invoiceHeader transformation_1 --> 
+<xsl:template match="invoiceHeader"> 
+<xsl:for-each select="*[count(./*) = 0]"> 
+<xsl:copy-of select="."/> 
+</xsl:for-each> 
+<xsl:apply-templates select="invoiceAmount"/> 
+<xsl:apply-templates select="orderInformation"/> 
+<xsl:apply-templates select="invoiceReversal"/> 
+<xsl:apply-templates select="invoiceTransferInformation"/> 
+<xsl:apply-templates select="paymentInformation"/> 
+<xsl:apply-templates select="financialPeriodInformation"/> 
+<xsl:apply-templates select="currencyConversionInformation"/> 
+</xsl:template> 
+
+<xsl:template match="invoiceAmount"> 
+<internationalCurrencyCode> 
+<xsl:value-of select="*[position() = 1]/@internationalCurrencyCode"/> 
+</internationalCurrencyCode> 
+<xsl:for-each select="*[count(./*) = 0]"> 
+<xsl:copy-of select="."/> 
+</xsl:for-each> 
+<xsl:apply-templates select="taxation"/> 
+</xsl:template> 
+
+<xsl:template match="taxation"> 
+<xsl:for-each select="*[count(./*) = 0]"> 
+<xsl:copy-of select="."/> 
+</xsl:for-each> 
+</xsl:template> 
+
+<xsl:template match="orderInformation"> 
+<xsl:for-each select="*[count(./*) = 0]"> 
+<xsl:copy-of select="."/> 
+</xsl:for-each> 
+</xsl:template> 
+
+<xsl:template match="invoiceReversal"> 
+<xsl:for-each select="*[count(./*) = 0]"> 
+<xsl:copy-of select="."/> 
+</xsl:for-each> 
+</xsl:template> 
+
+<xsl:template match="invoiceTransferInformation"> 
+<xsl:for-each select="*[count(./*) = 0]"> 
+<xsl:copy-of select="."/> 
+</xsl:for-each> 
+</xsl:template> 
+
+<xsl:template match="paymentInformation"> 
+<xsl:for-each select="*[count(./*) = 0]"> 
+<xsl:copy-of select="."/> 
+</xsl:for-each> 
+</xsl:template> 
+
+<xsl:template match="financialPeriodInformation"> 
+<xsl:for-each select="*[count(./*) = 0]"> 
+<xsl:copy-of select="."/> 
+</xsl:for-each> 
+</xsl:template> 
+
+<xsl:template match="currencyConversionInformation"> 
+<xsl:for-each select="*[count(./*) = 0]"> 
+<xsl:copy-of select="."/> 
+</xsl:for-each> 
+</xsl:template> 
+<!-- end invoiceHeader transformation_1 --> 
+
+<!-- start invoiceDetails transformation_1 --> 
+<xsl:template match="invoiceDetails"> 
+<invoiceDetails_elements> 
+<xsl:for-each select="*[count(./*) = 0]"> 
+<xsl:copy-of select="."/> 
+</xsl:for-each> 
+<xsl:apply-templates select="partInformation"/> 
+<xsl:apply-templates select="detailAmount"/> 
+<xsl:apply-templates select="orderInformation"/> 
+</invoiceDetails_elements> 
+<xsl:apply-templates select="detailCharges" mode="invoiceDetails"/> 
+</xsl:template> 
+
+<xsl:template match="orderInformation"> 
+<xsl:for-each select="*[count(./*) = 0]"> 
+<xsl:copy-of select="."/> 
+</xsl:for-each> 
+</xsl:template> 
+
+<xsl:template match="partInformation"> 
+<xsl:for-each select="*[count(./*) = 0]"> 
+<xsl:copy-of select="."/> 
+</xsl:for-each> 
+</xsl:template> 
+
+<xsl:template match="detailAmount"> 
+<xsl:for-each select="*[count(./*) = 0]"> 
+<xsl:copy-of select="."/> 
+</xsl:for-each> 
+<xsl:apply-templates select="taxation" /> 
+</xsl:template> 
+
+<xsl:template match="chargeAmount"> 
+<xsl:for-each select="*[count(./*) = 0]"> 
+<xsl:copy-of select="."/> 
+</xsl:for-each> 
+<xsl:apply-templates select="taxation" /> 
+</xsl:template> 
+
+<xsl:template match="detailCharges" mode="invoiceDetails"> 
+<invoiceDetails_DetailCharges_elements> 
+<xsl:apply-templates select="chargeType"/> 
+<xsl:for-each select="*[count(./*) = 0]"> 
+<xsl:copy-of select="."/> 
+</xsl:for-each> 
+<xsl:apply-templates select="chargeAmount"/> 
+<xsl:apply-templates select="parent::node()/orderInformation"/> 
+</invoiceDetails_DetailCharges_elements> 
+</xsl:template> 
+
+<xsl:template match="chargeType"> 
+<xsl:for-each select="*[count(./*) = 0]"> 
+<xsl:copy-of select="."/> 
+</xsl:for-each> 
+</xsl:template> 
+<!-- end invoiceDetails transformation_1 --> 
+
+<!-- start invoiceCharges transformation_1 --> 
+<xsl:template match="invoiceCharges"> 
+<invoiceCharges_elements> 
+<xsl:for-each select="*[count(./*) = 0]"> 
+<xsl:copy-of select="."/> 
+</xsl:for-each> 
+<xsl:apply-templates select="chargeType" mode="invoiceCharges"/> 
+<xsl:apply-templates select="chargeAmount"/> 
+<xsl:apply-templates select="parent::node()/invoiceHeader/orderInformation"/>	
+</invoiceCharges_elements> 
+</xsl:template> 
+
+<xsl:template match="chargeType" mode="invoiceCharges"> 
+<xsl:for-each select="*[count(./*) = 0]"> 
+<xsl:copy-of select="."/> 
+</xsl:for-each> 
+</xsl:template> 
+<!-- end invoiceCharges transformation_1 --> 
+
+<xsl:template name="getFormatedDate"> 
+<xsl:param name="date2format"/> 
+<xsl:variable name="y" select="substring($date2format, 1, 4)"/> 
+<xsl:variable name="m" select="substring($date2format, 6, 2)"/> 
+<xsl:variable name="d" select="substring($date2format, 9, 2)"/> 
+<xsl:value-of select="concat($y,$m,$d)"/> 
+</xsl:template> 
+
+<xsl:template name="getMonthOfDate"> 
+<xsl:param name="date2format"/> 
+<xsl:variable name="y" select="substring($date2format, 1, 4)"/> 
+<xsl:variable name="m" select="substring($date2format, 6, 2)"/> 
+<xsl:variable name="d" select="substring($date2format, 9, 2)"/> 
+<xsl:value-of select="$m"/> 
+</xsl:template> 
+
+<xsl:template name="getYearOfDate"> 
+<xsl:param name="date2format"/> 
+<xsl:variable name="y" select="substring($date2format, 1, 4)"/> 
+<xsl:variable name="m" select="substring($date2format, 6, 2)"/> 
+<xsl:variable name="d" select="substring($date2format, 9, 2)"/> 
+<xsl:value-of select="$y"/> 
+</xsl:template> 
+
+<xsl:template name="dup"> 
+<xsl:param name="input"/> 
+<xsl:param name="count" select="2"/> 
+<xsl:choose> 
+<xsl:when test="not($count) or not($input)"/> 
+<xsl:when test="$count = 1"> 
+<xsl:value-of select="$input"/> 
+</xsl:when> 
+<xsl:otherwise> 
+<!-- If $count is odd append an extra copy of input --> 
+<xsl:if test="$count mod 2"> 
+<xsl:value-of select="$input"/> 
+</xsl:if> 
+<!-- Recursively apply template after doubling input and halving count --> 
+<xsl:call-template name="dup"> 
+<xsl:with-param name="input" select="concat($input,$input)"/> 
+<xsl:with-param name="count" select="floor($count div 2)"/> 
+</xsl:call-template> 
+</xsl:otherwise> 
+</xsl:choose> 
+</xsl:template> 
+
+<xsl:template name="justify"> 
+<xsl:param name="value"/> 
+<xsl:param name="filler" select="' '"/> 
+<xsl:param name="width" select="10"/> 
+<xsl:param name="align" select=" 'left' "/> 
+<!-- Truncate if too long --> 
+<xsl:variable name="output" select="substring($value,1,$width)"/> 
+<xsl:choose> 
+<xsl:when test="$align = 'left' "> 
+<xsl:value-of select="$output"/> 
+<xsl:call-template name="dup"> 
+<xsl:with-param name="input" select="$filler"/> 
+<xsl:with-param name="count" select="$width - string-length($output)"/> 
+</xsl:call-template> 
+</xsl:when> 
+<xsl:when test="$align = 'right' "> 
+<xsl:call-template name="dup"> 
+<xsl:with-param name="input" select="$filler"/> 
+<xsl:with-param name="count" select="$width - string-length($output)"/> 
+</xsl:call-template> 
+<xsl:value-of select="$output"/> 
+</xsl:when> 
+<xsl:when test="$align = 'center' "> 
+<xsl:call-template name="dup"> 
+<xsl:with-param name="input" select="$filler"/> 
+<xsl:with-param name="count" select="floor(($width - string-length($output)) div 2)"/> 
+</xsl:call-template> 
+<xsl:value-of select="$output"/> 
+<xsl:call-template name="dup"> 
+<xsl:with-param name="input" select="$filler"/> 
+<xsl:with-param name="count" select="ceiling(($width - string-length($output)) div 2)"/> 
+</xsl:call-template> 
+</xsl:when> 
+<xsl:otherwise>INVALID ALIGN</xsl:otherwise> 
+</xsl:choose> 
+</xsl:template> 
+
+</xsl:stylesheet> 
\ No newline at end of file
--- a/jaxp/test/javax/xml/jaxp/unittest/transform/TransformerTest.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jaxp/test/javax/xml/jaxp/unittest/transform/TransformerTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,13 @@
 
 package transform;
 
+import com.sun.org.apache.xml.internal.serialize.OutputFormat;
+import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
+
+import java.io.BufferedReader;
 import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.StringReader;
@@ -55,56 +61,67 @@
 import org.xml.sax.helpers.AttributesImpl;
 
 /*
- * @summary Test Transformer.
+ * @summary Transformer Tests
+ * @bug 6272879 6305029 6505031 8150704
  */
 public class TransformerTest {
-
-    private static final String LINE_SEPARATOR = System.getProperty("line.separator");
-
-    private static final String XML_DOCUMENT = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<prefix:localName xmlns:prefix=\"namespaceUri\"/>";
+    private Transformer createTransformer() throws TransformerException {
+        return TransformerFactory.newInstance().newTransformer();
+    }
 
-    //Test for JDK-6305029
-    @Test
-    public final void testTransform() throws TransformerException {
-
-        // test SAXSource
-        SAXSource saxSource = new SAXSource(new MyXMLReader(), new InputSource());
+    private Transformer createTransformerFromInputstream(InputStream xslStream) throws TransformerException {
+        return TransformerFactory.newInstance().newTransformer(new StreamSource(xslStream));
+    }
 
-        StringWriter builder = new StringWriter();
-        TransformerFactory.newInstance().newTransformer().transform(saxSource, new StreamResult(builder));
-
-        AssertJUnit.assertEquals("Identity transform of SAXSource", XML_DOCUMENT, builder.toString());
+    private Transformer createTransformerFromResource(String xslResource) throws TransformerException {
+        return TransformerFactory.newInstance().newTransformer(new StreamSource(getClass().getResource(xslResource).toString()));
+    }
 
-        // test StreamSource
-        StreamSource streamSource = new StreamSource(new StringReader(XML_DOCUMENT));
+    private Document transformInputStreamToDocument(Transformer transformer, InputStream sourceStream) throws TransformerException {
+        DOMResult response = new DOMResult();
+        transformer.transform(new StreamSource(sourceStream), response);
+        return (Document)response.getNode();
+    }
 
-        StringWriter streamResult = new StringWriter();
-
-        TransformerFactory.newInstance().newTransformer().transform(streamSource, new StreamResult(streamResult));
-
-        AssertJUnit.assertEquals("Identity transform of StreamSource", XML_DOCUMENT, streamResult.toString());
+    private StringWriter transformResourceToStringWriter(Transformer transformer, String xmlResource) throws TransformerException {
+        StringWriter sw = new StringWriter();
+        transformer.transform(new StreamSource(getClass().getResource(xmlResource).toString()), new StreamResult(sw));
+        return sw;
     }
 
-    private static class MyXMLReader implements XMLReader {
-
-        private static final String NAMESPACES = "http://xml.org/sax/features/namespaces";
-
-        private static final String NAMESPACE_PREFIXES = "http://xml.org/sax/features/namespace-prefixes";
-
-        private boolean namespaces = true;
+    /**
+     * Reads the contents of the given file into a string.
+     * WARNING: this method adds a final line feed even if the last line of the file doesn't contain one.
+     *
+     * @param f
+     * The file to read
+     * @return The content of the file as a string, with line terminators as \"n"
+     * for all platforms
+     * @throws IOException
+     * If there was an error reading
+     */
+    private String getFileContentAsString(File f) throws IOException {
+        try (BufferedReader reader = new BufferedReader(new FileReader(f))) {
+            String line;
+            StringBuilder sb = new StringBuilder();
+            while ((line = reader.readLine()) != null) {
+                sb.append(line).append("\n");
+            }
+            return sb.toString();
+        }
+    }
 
+    private class XMLReaderFor6305029 implements XMLReader {
+        private static final String NAMESPACES = "http://xml.org/sax/features/namespaces";
+        private static final String NAMESPACE_PREFIXES = "http://xml.org/sax/features/namespace-prefixes";
+        private boolean namespaces = true;
         private boolean namespacePrefixes = false;
-
         private EntityResolver resolver;
-
         private DTDHandler dtdHandler;
-
         private ContentHandler contentHandler;
-
         private ErrorHandler errorHandler;
 
         public boolean getFeature(final String name) throws SAXNotRecognizedException, SAXNotSupportedException {
-
             if (name.equals(NAMESPACES)) {
                 return namespaces;
             } else if (name.equals(NAMESPACE_PREFIXES)) {
@@ -115,7 +132,6 @@
         }
 
         public void setFeature(final String name, final boolean value) throws SAXNotRecognizedException, SAXNotSupportedException {
-
             if (name.equals(NAMESPACES)) {
                 namespaces = value;
             } else if (name.equals(NAMESPACE_PREFIXES)) {
@@ -165,12 +181,10 @@
         }
 
         public void parse(final InputSource input) throws IOException, SAXException {
-
             parse();
         }
 
         public void parse(final String systemId) throws IOException, SAXException {
-
             parse();
         }
 
@@ -190,30 +204,50 @@
         }
     }
 
+    /*
+     * @bug 6272879
+     * @summary Test for JDK-6272879
+     */
     @Test
-    public final void testCR6272879() {
+    public final void testBug6272879() throws IOException, TransformerException {
+        final String LINE_SEPARATOR = System.getProperty("line.separator");
 
-        final String xsl = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" + LINE_SEPARATOR
-                + "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">" + LINE_SEPARATOR
-                + "<xsl:output method=\"xml\" indent=\"no\" encoding=\"ISO-8859-1\"/>" + LINE_SEPARATOR + "<xsl:template match=\"/\">" + LINE_SEPARATOR
-                + "<xsl:element name=\"TransformateurXML\">" + LINE_SEPARATOR + "  <xsl:for-each select=\"XMLUtils/test\">" + LINE_SEPARATOR
-                + "  <xsl:element name=\"test2\">" + LINE_SEPARATOR + "    <xsl:element name=\"valeur2\">" + LINE_SEPARATOR
-                + "      <xsl:attribute name=\"attribut2\">" + LINE_SEPARATOR + "        <xsl:value-of select=\"valeur/@attribut\"/>" + LINE_SEPARATOR
-                + "      </xsl:attribute>" + LINE_SEPARATOR + "      <xsl:value-of select=\"valeur\"/>" + LINE_SEPARATOR + "    </xsl:element>"
-                + LINE_SEPARATOR + "  </xsl:element>" + LINE_SEPARATOR + "  </xsl:for-each>" + LINE_SEPARATOR + "</xsl:element>" + LINE_SEPARATOR
-                + "</xsl:template>" + LINE_SEPARATOR + "</xsl:stylesheet>";
+        final String xsl =
+                "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" + LINE_SEPARATOR +
+                "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">" + LINE_SEPARATOR +
+                "<xsl:output method=\"xml\" indent=\"no\" encoding=\"ISO-8859-1\"/>" + LINE_SEPARATOR +
+                "<xsl:template match=\"/\">" + LINE_SEPARATOR +
+                "<xsl:element name=\"TransformateurXML\">" + LINE_SEPARATOR +
+                "  <xsl:for-each select=\"XMLUtils/test\">" + LINE_SEPARATOR +
+                "  <xsl:element name=\"test2\">" + LINE_SEPARATOR +
+                "    <xsl:element name=\"valeur2\">" + LINE_SEPARATOR +
+                "      <xsl:attribute name=\"attribut2\">" + LINE_SEPARATOR +
+                "        <xsl:value-of select=\"valeur/@attribut\"/>" + LINE_SEPARATOR +
+                "      </xsl:attribute>" + LINE_SEPARATOR +
+                "      <xsl:value-of select=\"valeur\"/>" + LINE_SEPARATOR +
+                "    </xsl:element>" + LINE_SEPARATOR +
+                "  </xsl:element>" + LINE_SEPARATOR +
+                "  </xsl:for-each>" + LINE_SEPARATOR +
+                "</xsl:element>" + LINE_SEPARATOR +
+                "</xsl:template>" + LINE_SEPARATOR +
+                "</xsl:stylesheet>";
 
-        final String sourceXml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>"
-                + LINE_SEPARATOR
+        final String sourceXml =
+                "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" + LINE_SEPARATOR +
                 // "<!DOCTYPE XMLUtils [" + LINE_SEPARATOR +
                 // "<!ELEMENT XMLUtils (test*)>" + LINE_SEPARATOR +
                 // "<!ELEMENT test (valeur*)>" + LINE_SEPARATOR +
                 // "<!ELEMENT valeur (#PCDATA)>" + LINE_SEPARATOR +
                 // "<!ATTLIST valeur attribut CDATA #REQUIRED>]>" +
                 // LINE_SEPARATOR +
-                + "<XMLUtils>" + LINE_SEPARATOR + "  <test>" + LINE_SEPARATOR + "    <valeur attribut=\"Attribut 1\">Valeur 1</valeur>" + LINE_SEPARATOR
-                + "  </test>" + LINE_SEPARATOR + "  <test>" + LINE_SEPARATOR + "    <valeur attribut=\"Attribut 2\">Valeur 2</valeur>" + LINE_SEPARATOR
-                + "  </test>" + LINE_SEPARATOR + "</XMLUtils>";
+                "<XMLUtils>" + LINE_SEPARATOR +
+                "  <test>" + LINE_SEPARATOR +
+                "    <valeur attribut=\"Attribut 1\">Valeur 1</valeur>" + LINE_SEPARATOR +
+                "  </test>" + LINE_SEPARATOR +
+                "  <test>" + LINE_SEPARATOR +
+                "    <valeur attribut=\"Attribut 2\">Valeur 2</valeur>" + LINE_SEPARATOR +
+                "  </test>" + LINE_SEPARATOR +
+                "</XMLUtils>";
 
         Document document;
         Node node;
@@ -230,9 +264,12 @@
 
         System.out.println("Source file after transformation:");
         System.out.println("=================================");
-        document = getTransformation(xsl, sourceXml);
-
-        System.out.println(document);
+        document = transformInputStreamToDocument(createTransformerFromInputstream(new ByteArrayInputStream(xsl.getBytes())),
+            new ByteArrayInputStream(sourceXml.getBytes()));
+        OutputFormat format = new OutputFormat();
+        format.setIndenting(true);
+        new XMLSerializer(System.out, format).serialize(document);
+        System.out.println();
 
         System.out.println("Node content for element valeur2:");
         System.out.println("=================================");
@@ -248,25 +285,60 @@
         }
     }
 
-    private static Document getTransformation(final String xsl, final String sourceXml) {
+    /*
+     * @bug 6305029
+     * @summary Test for JDK-6305029
+     */
+    @Test
+    public final void testBug6305029() throws TransformerException {
+        final String XML_DOCUMENT = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<prefix:localName xmlns:prefix=\"namespaceUri\"/>";
 
-        Transformer transformer;
-        DOMResult reponse;
-        Document document = null;
+        // test SAXSource
+        SAXSource saxSource = new SAXSource(new XMLReaderFor6305029(), new InputSource());
+        StringWriter resultWriter = new StringWriter();
+        createTransformer().transform(saxSource, new StreamResult(resultWriter));
+        AssertJUnit.assertEquals("Identity transform of SAXSource", XML_DOCUMENT, resultWriter.toString());
 
-        try {
-            InputStream in = new ByteArrayInputStream(xsl.getBytes());
-            transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(in));
+        // test StreamSource
+        StreamSource streamSource = new StreamSource(new StringReader(XML_DOCUMENT));
+        resultWriter = new StringWriter();
+        createTransformer().transform(streamSource, new StreamResult(resultWriter));
+        AssertJUnit.assertEquals("Identity transform of StreamSource", XML_DOCUMENT, resultWriter.toString());
+    }
 
-            reponse = new DOMResult();
-            transformer.transform(new StreamSource(new ByteArrayInputStream(sourceXml.getBytes())), reponse);
-            document = (Document) reponse.getNode();
-        } catch (Exception e) {
-            String msg = "Exception in getTransformation: " + e;
-            System.err.println(msg);
-            Assert.fail(msg);
-        }
+    /*
+     * @bug 6505031
+     * @summary Test transformer parses keys and their values coming from different xml documents.
+     */
+    @Test
+    public final void testBug6505031() throws TransformerException {
+        Transformer transformer = createTransformerFromResource("transform.xsl");
+        transformer.setParameter("config", getClass().getResource("config.xml").toString());
+        transformer.setParameter("mapsFile", getClass().getResource("maps.xml").toString());
+        String s = transformResourceToStringWriter(transformer, "template.xml").toString();
+        Assert.assertTrue(s.contains("map1key1value") && s.contains("map2key1value"));
+    }
 
-        return (document);
+    /*
+     * @bug 8150704
+     * @summary Test that XSL transformation with lots of temporary result trees will not run out of DTM IDs.
+     */
+    @Test
+    public final void testBug8150704() throws TransformerException, IOException {
+        System.out.println("Testing transformation of Bug8150704-1.xml...");
+        Transformer transformer = createTransformerFromResource("Bug8150704-1.xsl");
+        StringWriter result = transformResourceToStringWriter(transformer, "Bug8150704-1.xml");
+        String resultstring = result.toString().replaceAll("\\r\\n", "\n").replaceAll("\\r", "\n");
+        String reference = getFileContentAsString(new File(getClass().getResource("Bug8150704-1.ref").getPath()));
+        Assert.assertEquals(resultstring, reference, "Output of transformation of Bug8150704-1.xml does not match reference");
+        System.out.println("Passed.");
+
+        System.out.println("Testing transformation of Bug8150704-2.xml...");
+        transformer = createTransformerFromResource("Bug8150704-2.xsl");
+        result = transformResourceToStringWriter(transformer, "Bug8150704-2.xml");
+        resultstring = result.toString().replaceAll("\\r\\n", "\n").replaceAll("\\r", "\n");
+        reference = getFileContentAsString(new File(getClass().getResource("Bug8150704-2.ref").getPath()));
+        Assert.assertEquals(resultstring, reference, "Output of transformation of Bug8150704-2.xml does not match reference");
+        System.out.println("Passed.");
     }
 }
--- a/jaxws/.hgtags	Mon Mar 14 12:35:52 2016 +0300
+++ b/jaxws/.hgtags	Mon Mar 14 17:51:25 2016 +0100
@@ -354,3 +354,4 @@
 c072c572d14948563ef5d86e1921699b3a2396ab jdk-9+106
 fafd694e801f0f5a7c737fb08630ced3ca8f772c jdk-9+107
 513eb2e432f64f85992442da9acdfcfbb36555d9 jdk-9+108
+4b0697e4ce8940b1599af274ff02296d7f59aded jdk-9+109
--- a/jdk/.hgtags	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/.hgtags	Mon Mar 14 17:51:25 2016 +0100
@@ -351,3 +351,4 @@
 6e9ecae50b4e0d37483fb2719202eea5dca026a4 jdk-9+106
 8701b2bb1d2e1b9abc2a9be0933993c7150a9dbe jdk-9+107
 42794e648cfe9fd67461dcbe8b7594241a84bcff jdk-9+108
+1c7bad0798900fe58f4db01ae7ffdc84f5baee8c jdk-9+109
--- a/jdk/make/lib/Lib-java.desktop.gmk	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/make/lib/Lib-java.desktop.gmk	Mon Mar 14 17:51:25 2016 +0100
@@ -29,6 +29,7 @@
 $(eval $(call FillCacheFind, $(wildcard $(JDK_TOPDIR)/src/java.desktop/*/native \
     $(JDK_TOPDIR)/src/*/java.desktop/*/native)))
 
+include LibosxLibraries.gmk
 include PlatformLibraries.gmk
 include Awt2dLibraries.gmk
 include SoundLibraries.gmk
--- a/jdk/make/lib/Lib-jdk.deploy.osx.gmk	Mon Mar 14 12:35:52 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-#
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.  Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code 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 General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-include LibCommon.gmk
-
-ifeq ($(OPENJDK_TARGET_OS), macosx)
-
-  ################################################################################
-
-  LIBOSX_DIRS := $(JDK_TOPDIR)/src/jdk.deploy.osx/macosx/native/libosx
-  LIBOSX_CFLAGS := -I$(LIBOSX_DIRS) \
-      -I$(JDK_TOPDIR)/src/java.desktop/macosx/native/libosxapp \
-      $(LIBJAVA_HEADER_FLAGS) \
-      -I$(SUPPORT_OUTPUTDIR)/headers/java.desktop \
-      -I$(SUPPORT_OUTPUTDIR)/headers/jdk.deploy.osx \
-      #
-
-  $(eval $(call SetupNativeCompilation,BUILD_LIBOSX, \
-      LIBRARY := osx, \
-      OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
-      SRC := $(LIBOSX_DIRS), \
-      OPTIMIZATION := LOW, \
-      CFLAGS := $(CFLAGS_JDKLIB) \
-          $(LIBOSX_CFLAGS), \
-      DISABLED_WARNINGS_clang := deprecated-declarations, \
-      LDFLAGS := $(LDFLAGS_JDKLIB) \
-          -L$(SUPPORT_OUTPUTDIR)/modules_libs/java.desktop \
-          $(call SET_SHARED_LIBRARY_ORIGIN), \
-      LIBS := \
-          -losxapp \
-          -framework Cocoa \
-          -framework ApplicationServices \
-          -framework JavaNativeFoundation \
-          -framework JavaRuntimeSupport \
-          -framework SystemConfiguration \
-          $(JDKLIB_LIBS), \
-      OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libosx, \
-  ))
-
-  TARGETS += $(BUILD_LIBOSX)
-
-  $(BUILD_LIBOSX): $(call FindLib, java.desktop, osxapp)
-
-  $(BUILD_LIBOSX): $(call FindLib, java.base, java)
-
-  ################################################################################
-
-endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/lib/LibosxLibraries.gmk	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,67 @@
+#
+# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.  Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code 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 General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+ifeq ($(OPENJDK_TARGET_OS), macosx)
+
+  ################################################################################
+
+  LIBOSX_DIRS := $(JDK_TOPDIR)/src/java.desktop/macosx/native/libosx
+  LIBOSX_CFLAGS := -I$(LIBOSX_DIRS) \
+      -I$(JDK_TOPDIR)/src/java.desktop/macosx/native/libosxapp \
+      $(LIBJAVA_HEADER_FLAGS) \
+      -I$(SUPPORT_OUTPUTDIR)/headers/java.desktop \
+      #
+
+  $(eval $(call SetupNativeCompilation,BUILD_LIBOSX, \
+      LIBRARY := osx, \
+      OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
+      SRC := $(LIBOSX_DIRS), \
+      OPTIMIZATION := LOW, \
+      CFLAGS := $(CFLAGS_JDKLIB) \
+          $(LIBOSX_CFLAGS), \
+      DISABLED_WARNINGS_clang := deprecated-declarations, \
+      LDFLAGS := $(LDFLAGS_JDKLIB) \
+          -L$(SUPPORT_OUTPUTDIR)/modules_libs/java.desktop \
+          $(call SET_SHARED_LIBRARY_ORIGIN), \
+      LIBS := \
+          -losxapp \
+          -framework Cocoa \
+          -framework ApplicationServices \
+          -framework JavaNativeFoundation \
+          -framework JavaRuntimeSupport \
+          -framework SystemConfiguration \
+          $(JDKLIB_LIBS), \
+      OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libosx, \
+  ))
+
+  TARGETS += $(BUILD_LIBOSX)
+
+  $(BUILD_LIBOSX): $(call FindLib, java.desktop, osxapp)
+
+  $(BUILD_LIBOSX): $(call FindLib, java.base, java)
+
+  ################################################################################
+
+endif
--- a/jdk/make/mapfiles/libawt/mapfile-mawt-vers	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/make/mapfiles/libawt/mapfile-mawt-vers	Mon Mar 14 17:51:25 2016 +0100
@@ -200,6 +200,7 @@
                 Java_sun_print_CUPSPrinter_initIDs;
                 Java_sun_print_CUPSPrinter_getCupsServer;
                 Java_sun_print_CUPSPrinter_getCupsPort;
+                Java_sun_print_CUPSPrinter_getCupsDefaultPrinter;
                 Java_sun_print_CUPSPrinter_canConnect;
                 Java_sun_print_CUPSPrinter_getMedia;
                 Java_sun_print_CUPSPrinter_getPageSizes;
--- a/jdk/make/mapfiles/libawt_headless/mapfile-vers	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/make/mapfiles/libawt_headless/mapfile-vers	Mon Mar 14 17:51:25 2016 +0100
@@ -73,6 +73,7 @@
 		Java_sun_print_CUPSPrinter_initIDs;
 		Java_sun_print_CUPSPrinter_getCupsServer;
 		Java_sun_print_CUPSPrinter_getCupsPort;
+		Java_sun_print_CUPSPrinter_getCupsDefaultPrinter;
 		Java_sun_print_CUPSPrinter_canConnect;
 		Java_sun_print_CUPSPrinter_getMedia;
 		Java_sun_print_CUPSPrinter_getPageSizes;
--- a/jdk/make/mapfiles/libawt_xawt/mapfile-vers	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/make/mapfiles/libawt_xawt/mapfile-vers	Mon Mar 14 17:51:25 2016 +0100
@@ -439,6 +439,7 @@
 	Java_sun_print_CUPSPrinter_initIDs;
 	Java_sun_print_CUPSPrinter_getCupsServer;
 	Java_sun_print_CUPSPrinter_getCupsPort;
+	Java_sun_print_CUPSPrinter_getCupsDefaultPrinter;
 	Java_sun_print_CUPSPrinter_canConnect;
 	Java_sun_print_CUPSPrinter_getMedia;
 	Java_sun_print_CUPSPrinter_getPageSizes;
--- a/jdk/make/mapfiles/libjfr/mapfile-vers	Mon Mar 14 12:35:52 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-#
-# Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
-# ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
-#
-
-# Define library interface.
-
-SUNWprivate_1.1 {
-  global:
-      Java_oracle_jrockit_jfr_Process_getpid;
-      Java_oracle_jrockit_jfr_Timing_counterTime;
-      Java_oracle_jrockit_jfr_Timing_init;
-      Java_oracle_jrockit_jfr_Logger_output0;
-      Java_oracle_jrockit_jfr_JFR_isCommercialFeaturesUnlocked;
-      Java_oracle_jrockit_jfr_JFR_isStarted;
-      Java_oracle_jrockit_jfr_JFR_isSupportedInVM;
-      Java_oracle_jrockit_jfr_JFR_startFlightRecorder;
-      Java_oracle_jrockit_jfr_JFR_isDisabledOnCommandLine;
-      Java_oracle_jrockit_jfr_JFR_isEnabled;
-      Java_oracle_jrockit_jfr_VMJFR_options;
-      Java_oracle_jrockit_jfr_VMJFR_init;
-      Java_oracle_jrockit_jfr_VMJFR_addConstPool;
-      Java_oracle_jrockit_jfr_VMJFR_removeConstPool;
-      Java_oracle_jrockit_jfr_VMJFR_storeConstPool;
-      Java_oracle_jrockit_jfr_VMJFR_classID0;
-      Java_oracle_jrockit_jfr_VMJFR_stackTraceID;
-      Java_oracle_jrockit_jfr_VMJFR_threadID;
-      Java_oracle_jrockit_jfr_VMJFR_rotate;
-      Java_oracle_jrockit_jfr_VMJFR_shutdown;
-      Java_oracle_jrockit_jfr_VMJFR_start;
-      Java_oracle_jrockit_jfr_VMJFR_stop;
-      Java_oracle_jrockit_jfr_VMJFR_buffer;
-      Java_oracle_jrockit_jfr_VMJFR_flush;
-      Java_oracle_jrockit_jfr_VMJFR_write;
-      Java_oracle_jrockit_jfr_VMJFR_add;
-      Java_oracle_jrockit_jfr_VMJFR_remove;
-      Java_oracle_jrockit_jfr_VMJFR_setThreshold;
-      Java_oracle_jrockit_jfr_VMJFR_setPeriod;
-      Java_oracle_jrockit_jfr_VMJFR_getPeriod;
-      Java_oracle_jrockit_jfr_VMJFR_descriptors;
-      Java_oracle_jrockit_jfr_VMJFR_retransformClasses0;
-      JNI_OnLoad;
-  local:
-      *;
-};
--- a/jdk/make/src/classes/build/tools/module/boot.modules	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/make/src/classes/build/tools/module/boot.modules	Mon Mar 14 17:51:25 2016 +0100
@@ -19,7 +19,6 @@
 java.xml.crypto
 jdk.charsets
 jdk.deploy
-jdk.deploy.osx
 jdk.httpserver
 jdk.jfr
 jdk.jsobject
@@ -28,6 +27,7 @@
 jdk.vm.ci
 jdk.management
 jdk.management.cmm
+jdk.management.jfr
 jdk.management.resource
 jdk.naming.rmi
 jdk.sctp
--- a/jdk/src/java.base/share/classes/java/lang/ProcessHandleImpl.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/ProcessHandleImpl.java	Mon Mar 14 17:51:25 2016 +0100
@@ -81,9 +81,8 @@
                 ThreadGroup systemThreadGroup = tg;
 
                 ThreadFactory threadFactory = grimReaper -> {
-                    // Our thread stack requirement is quite modest.
-                    Thread t = new Thread(systemThreadGroup, grimReaper,
-                            "process reaper", 32768);
+                    long stackSize = Boolean.getBoolean("jdk.lang.processReaperUseDefaultStackSize") ? 0 : 32768;
+                    Thread t = new Thread(systemThreadGroup, grimReaper, "process reaper", stackSize);
                     t.setDaemon(true);
                     // A small attempt (probably futile) to avoid priority inversion
                     t.setPriority(Thread.MAX_PRIORITY);
--- a/jdk/src/java.base/share/classes/java/lang/String.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/String.java	Mon Mar 14 17:51:25 2016 +0100
@@ -42,6 +42,7 @@
 import java.util.stream.IntStream;
 import java.util.stream.StreamSupport;
 import jdk.internal.HotSpotIntrinsicCandidate;
+import jdk.internal.vm.annotation.Stable;
 
 /**
  * The {@code String} class represents character strings. All
@@ -119,7 +120,18 @@
 public final class String
     implements java.io.Serializable, Comparable<String>, CharSequence {
 
-    /** The value is used for character storage. */
+    /**
+     * The value is used for character storage.
+     *
+     * @implNote This field is trusted by the VM, and is a subject to
+     * constant folding if String instance is constant. Overwriting this
+     * field after construction will cause problems.
+     *
+     * Additionally, it is marked with {@link Stable} to trust the contents
+     * of the array. No other facility in JDK provides this functionality (yet).
+     * {@link Stable} is safe here, because value is never null.
+     */
+    @Stable
     private final byte[] value;
 
     /**
@@ -129,6 +141,9 @@
      * LATIN1
      * UTF16
      *
+     * @implNote This field is trusted by the VM, and is a subject to
+     * constant folding if String instance is constant. Overwriting this
+     * field after construction will cause problems.
      */
     private final byte coder;
 
@@ -1222,30 +1237,12 @@
         public int compare(String s1, String s2) {
             byte v1[] = s1.value;
             byte v2[] = s2.value;
-            int n1 = s1.length();
-            int n2 = s2.length();
-            boolean s1IsLatin1 = s1.isLatin1();
-            boolean s2IsLatin1 = s2.isLatin1();
-            int min = Math.min(n1, n2);
-            for (int i = 0; i < min; i++) {
-                char c1 = s1IsLatin1 ? StringLatin1.getChar(v1, i)
-                                     : StringUTF16.getChar(v1, i);
-                char c2 = s2IsLatin1 ? StringLatin1.getChar(v2, i)
-                                     : StringUTF16.getChar(v2, i);
-                if (c1 != c2) {
-                    c1 = Character.toUpperCase(c1);
-                    c2 = Character.toUpperCase(c2);
-                    if (c1 != c2) {
-                        c1 = Character.toLowerCase(c1);
-                        c2 = Character.toLowerCase(c2);
-                        if (c1 != c2) {
-                            // No overflow because of numeric promotion
-                            return c1 - c2;
-                        }
-                    }
-                }
+            if (s1.coder() == s2.coder()) {
+                return s1.isLatin1() ? StringLatin1.compareToCI(v1, v2)
+                                     : StringUTF16.compareToCI(v1, v2);
             }
-            return n1 - n2;
+            return s1.isLatin1() ? StringLatin1.compareToCI_UTF16(v1, v2)
+                                 : StringUTF16.compareToCI_Latin1(v1, v2);
         }
 
         /** Replaces the de-serialized object. */
--- a/jdk/src/java.base/share/classes/java/lang/StringLatin1.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/StringLatin1.java	Mon Mar 14 17:51:25 2016 +0100
@@ -128,6 +128,48 @@
         return len1 - len2;
     }
 
+    public static int compareToCI(byte[] value, byte[] other) {
+        int len1 = value.length;
+        int len2 = other.length;
+        int lim = Math.min(len1, len2);
+        for (int k = 0; k < lim; k++) {
+            if (value[k] != other[k]) {
+                char c1 = (char) CharacterDataLatin1.instance.toUpperCase(getChar(value, k));
+                char c2 = (char) CharacterDataLatin1.instance.toUpperCase(getChar(other, k));
+                if (c1 != c2) {
+                    c1 = (char) CharacterDataLatin1.instance.toLowerCase(c1);
+                    c2 = (char) CharacterDataLatin1.instance.toLowerCase(c2);
+                    if (c1 != c2) {
+                        return c1 - c2;
+                    }
+                }
+            }
+        }
+        return len1 - len2;
+    }
+
+    public static int compareToCI_UTF16(byte[] value, byte[] other) {
+        int len1 = length(value);
+        int len2 = StringUTF16.length(other);
+        int lim = Math.min(len1, len2);
+        for (int k = 0; k < lim; k++) {
+            char c1 = getChar(value, k);
+            char c2 = StringUTF16.getChar(other, k);
+            if (c1 != c2) {
+                c1 = Character.toUpperCase(c1);
+                c2 = Character.toUpperCase(c2);
+                if (c1 != c2) {
+                    c1 = Character.toLowerCase(c1);
+                    c2 = Character.toLowerCase(c2);
+                    if (c1 != c2) {
+                        return c1 - c2;
+                    }
+                }
+            }
+        }
+        return len1 - len2;
+    }
+
     public static int hashCode(byte[] value) {
         int h = 0;
         for (byte v : value) {
--- a/jdk/src/java.base/share/classes/java/lang/StringUTF16.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/StringUTF16.java	Mon Mar 14 17:51:25 2016 +0100
@@ -270,6 +270,50 @@
         return len1 - len2;
     }
 
+    public static int compareToCI(byte[] value, byte[] other) {
+        int len1 = length(value);
+        int len2 = length(other);
+        int lim = Math.min(len1, len2);
+        for (int k = 0; k < lim; k++) {
+            char c1 = getChar(value, k);
+            char c2 = getChar(other, k);
+            if (c1 != c2) {
+                c1 = Character.toUpperCase(c1);
+                c2 = Character.toUpperCase(c2);
+                if (c1 != c2) {
+                    c1 = Character.toLowerCase(c1);
+                    c2 = Character.toLowerCase(c2);
+                    if (c1 != c2) {
+                        return c1 - c2;
+                    }
+                }
+            }
+        }
+        return len1 - len2;
+    }
+
+    public static int compareToCI_Latin1(byte[] value, byte[] other) {
+        int len1 = length(value);
+        int len2 = StringLatin1.length(other);
+        int lim = Math.min(len1, len2);
+        for (int k = 0; k < lim; k++) {
+            char c1 = getChar(value, k);
+            char c2 = StringLatin1.getChar(other, k);
+            if (c1 != c2) {
+                c1 = Character.toUpperCase(c1);
+                c2 = Character.toUpperCase(c2);
+                if (c1 != c2) {
+                    c1 = Character.toLowerCase(c1);
+                    c2 = Character.toLowerCase(c2);
+                    if (c1 != c2) {
+                        return c1 - c2;
+                    }
+                }
+            }
+        }
+        return len1 - len2;
+    }
+
     public static int hashCode(byte[] value) {
         int h = 0;
         int length = value.length >> 1;
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleNatives.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleNatives.java	Mon Mar 14 17:51:25 2016 +0100
@@ -30,7 +30,7 @@
 import static java.lang.invoke.MethodHandleNatives.Constants.*;
 import static java.lang.invoke.MethodHandleStatics.*;
 import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
-import jdk.internal.ref.Cleaner;
+import jdk.internal.ref.CleanerFactory;
 
 /**
  * The JVM interface for the method handles package is all here.
@@ -68,10 +68,12 @@
 
         static CallSiteContext make(CallSite cs) {
             final CallSiteContext newContext = new CallSiteContext();
-            // Cleaner is attached to CallSite instance and it clears native structures allocated for CallSite context.
-            // Though the CallSite can become unreachable, its Context is retained by the Cleaner instance (which is
-            // referenced from Cleaner class) until cleanup is performed.
-            Cleaner.create(cs, newContext);
+            // CallSite instance is tracked by a Cleanable which clears native
+            // structures allocated for CallSite context. Though the CallSite can
+            // become unreachable, its Context is retained by the Cleanable instance
+            // (which is referenced from Cleaner instance which is referenced from
+            // CleanerFactory class) until cleanup is performed.
+            CleanerFactory.cleaner().register(cs, newContext);
             return newContext;
         }
 
--- a/jdk/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java	Mon Mar 14 17:51:25 2016 +0100
@@ -91,7 +91,7 @@
  * can call with more than 255 slots. This limits the number of static and
  * dynamic arguments one can pass to bootstrap method. Since there are potential
  * concatenation strategies that use {@code MethodHandle} combinators, we need
- * to reserve a few empty slots on the parameter lists to to capture the
+ * to reserve a few empty slots on the parameter lists to capture the
  * temporal results. This is why bootstrap methods in this factory do not accept
  * more than 200 argument slots. Users requiring more than 200 argument slots in
  * concatenation are expected to split the large concatenation in smaller
--- a/jdk/src/java.base/share/classes/java/lang/ref/Cleaner.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/ref/Cleaner.java	Mon Mar 14 17:51:25 2016 +0100
@@ -25,10 +25,11 @@
 
 package java.lang.ref;
 
+import jdk.internal.ref.CleanerImpl;
+
 import java.util.Objects;
 import java.util.concurrent.ThreadFactory;
-
-import jdk.internal.ref.CleanerImpl;
+import java.util.function.Function;
 
 /**
  * {@code Cleaner} manages a set of object references and corresponding cleaning actions.
@@ -135,7 +136,12 @@
     final CleanerImpl impl;
 
     static {
-        CleanerImpl.setCleanerImplAccess((Cleaner c) -> c.impl);
+        CleanerImpl.setCleanerImplAccess(new Function<Cleaner, CleanerImpl>() {
+            @Override
+            public CleanerImpl apply(Cleaner cleaner) {
+                return cleaner.impl;
+            }
+        });
     }
 
     /**
--- a/jdk/src/java.base/share/classes/java/nio/charset/Charset.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/nio/charset/Charset.java	Mon Mar 14 17:51:25 2016 +0100
@@ -44,7 +44,6 @@
 import java.util.SortedMap;
 import java.util.TreeMap;
 import jdk.internal.misc.VM;
-import sun.misc.ASCIICaseInsensitiveComparator;
 import sun.nio.cs.StandardCharsets;
 import sun.nio.cs.ThreadLocalCoders;
 import sun.security.action.GetPropertyAction;
@@ -579,7 +578,7 @@
                 public SortedMap<String,Charset> run() {
                     TreeMap<String,Charset> m =
                         new TreeMap<>(
-                            ASCIICaseInsensitiveComparator.CASE_INSENSITIVE_ORDER);
+                            String.CASE_INSENSITIVE_ORDER);
                     put(standardProvider.charsets(), m);
                     CharsetProvider[] ecps = ExtendedProviderHolder.extendedProviders;
                     for (CharsetProvider ecp :ecps) {
--- a/jdk/src/java.base/share/classes/java/util/Collections.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/util/Collections.java	Mon Mar 14 17:51:25 2016 +0100
@@ -2728,7 +2728,7 @@
      *  Set s2 = m2.keySet();  // Needn't be in synchronized block
      *      ...
      *  synchronized (m) {  // Synchronizing on m, not m2 or s2!
-     *      Iterator i = s.iterator(); // Must be in synchronized block
+     *      Iterator i = s2.iterator(); // Must be in synchronized block
      *      while (i.hasNext())
      *          foo(i.next());
      *  }
--- a/jdk/src/java.base/share/classes/java/util/jar/Attributes.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/util/jar/Attributes.java	Mon Mar 14 17:51:25 2016 +0100
@@ -34,9 +34,9 @@
 import java.util.Collection;
 import java.util.AbstractSet;
 import java.util.Iterator;
+import java.util.Locale;
 import sun.util.logging.PlatformLogger;
 import java.util.Comparator;
-import sun.misc.ASCIICaseInsensitiveComparator;
 
 /**
  * The Attributes class maps Manifest attribute names to associated string
@@ -501,7 +501,7 @@
          */
         public boolean equals(Object o) {
             if (o instanceof Name) {
-                Comparator<String> c = ASCIICaseInsensitiveComparator.CASE_INSENSITIVE_ORDER;
+                Comparator<String> c = String.CASE_INSENSITIVE_ORDER;
                 return c.compare(name, ((Name)o).name) == 0;
             } else {
                 return false;
@@ -513,7 +513,7 @@
          */
         public int hashCode() {
             if (hashCode == -1) {
-                hashCode = ASCIICaseInsensitiveComparator.lowerCaseHashCode(name);
+                hashCode = name.toLowerCase(Locale.ROOT).hashCode();
             }
             return hashCode;
         }
--- a/jdk/src/java.base/share/classes/jdk/internal/math/FormattedFloatingDecimal.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/classes/jdk/internal/math/FormattedFloatingDecimal.java	Mon Mar 14 17:51:25 2016 +0100
@@ -106,10 +106,28 @@
         return decExponentRounded - 1;
     }
 
+    /**
+     * Returns the mantissa as a {@code char[]}.  Note that the returned value
+     * is a reference to the internal {@code char[]} containing the mantissa,
+     * therefore code invoking this method should not pass the return value to
+     * external code but should in that case make a copy.
+     *
+     * @return a reference to the internal {@code char[]} representing the
+     *         mantissa.
+     */
     public char[] getMantissa(){
         return mantissa;
     }
 
+    /**
+     * Returns the exponent as a {@code char[]}.  Note that the returned value
+     * is a reference to the internal {@code char[]} containing the exponent,
+     * therefore code invoking this method should not pass the return value to
+     * external code but should in that case make a copy.
+     *
+     * @return a reference to the internal {@code char[]} representing the
+     *         exponent.
+     */
     public char[] getExponent(){
         return exponent;
     }
--- a/jdk/src/java.base/share/classes/jdk/internal/misc/InnocuousThread.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/classes/jdk/internal/misc/InnocuousThread.java	Mon Mar 14 17:51:25 2016 +0100
@@ -128,8 +128,12 @@
             }
             final ThreadGroup root = group;
             INNOCUOUSTHREADGROUP = AccessController.doPrivileged(
-                (PrivilegedAction<ThreadGroup>) () ->
-                    { return new ThreadGroup(root, "InnocuousThreadGroup"); });
+                new PrivilegedAction<ThreadGroup>() {
+                    @Override
+                    public ThreadGroup run() {
+                        return new ThreadGroup(root, "InnocuousThreadGroup");
+                    }
+                });
         } catch (Exception e) {
             throw new Error(e);
         }
--- a/jdk/src/java.base/share/classes/jdk/internal/misc/Unsafe.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/classes/jdk/internal/misc/Unsafe.java	Mon Mar 14 17:51:25 2016 +0100
@@ -782,6 +782,46 @@
                                                      Object expected,
                                                      Object x);
 
+    @HotSpotIntrinsicCandidate
+    public final native Object compareAndExchangeObjectVolatile(Object o, long offset,
+                                                                Object expected,
+                                                                Object x);
+
+    @HotSpotIntrinsicCandidate
+    public final Object compareAndExchangeObjectAcquire(Object o, long offset,
+                                                               Object expected,
+                                                               Object x) {
+        return compareAndExchangeObjectVolatile(o, offset, expected, x);
+    }
+
+    @HotSpotIntrinsicCandidate
+    public final Object compareAndExchangeObjectRelease(Object o, long offset,
+                                                               Object expected,
+                                                               Object x) {
+        return compareAndExchangeObjectVolatile(o, offset, expected, x);
+    }
+
+    @HotSpotIntrinsicCandidate
+    public final boolean weakCompareAndSwapObject(Object o, long offset,
+                                                         Object expected,
+                                                         Object x) {
+        return compareAndSwapObject(o, offset, expected, x);
+    }
+
+    @HotSpotIntrinsicCandidate
+    public final boolean weakCompareAndSwapObjectAcquire(Object o, long offset,
+                                                                Object expected,
+                                                                Object x) {
+        return compareAndSwapObject(o, offset, expected, x);
+    }
+
+    @HotSpotIntrinsicCandidate
+    public final boolean weakCompareAndSwapObjectRelease(Object o, long offset,
+                                                                Object expected,
+                                                                Object x) {
+        return compareAndSwapObject(o, offset, expected, x);
+    }
+
     /**
      * Atomically updates Java variable to {@code x} if it is currently
      * holding {@code expected}.
@@ -796,6 +836,46 @@
                                                   int expected,
                                                   int x);
 
+    @HotSpotIntrinsicCandidate
+    public final native int compareAndExchangeIntVolatile(Object o, long offset,
+                                                          int expected,
+                                                          int x);
+
+    @HotSpotIntrinsicCandidate
+    public final int compareAndExchangeIntAcquire(Object o, long offset,
+                                                         int expected,
+                                                         int x) {
+        return compareAndExchangeIntVolatile(o, offset, expected, x);
+    }
+
+    @HotSpotIntrinsicCandidate
+    public final int compareAndExchangeIntRelease(Object o, long offset,
+                                                         int expected,
+                                                         int x) {
+        return compareAndExchangeIntVolatile(o, offset, expected, x);
+    }
+
+    @HotSpotIntrinsicCandidate
+    public final boolean weakCompareAndSwapInt(Object o, long offset,
+                                                      int expected,
+                                                      int x) {
+        return compareAndSwapInt(o, offset, expected, x);
+    }
+
+    @HotSpotIntrinsicCandidate
+    public final boolean weakCompareAndSwapIntAcquire(Object o, long offset,
+                                                             int expected,
+                                                             int x) {
+        return compareAndSwapInt(o, offset, expected, x);
+    }
+
+    @HotSpotIntrinsicCandidate
+    public final boolean weakCompareAndSwapIntRelease(Object o, long offset,
+                                                             int expected,
+                                                             int x) {
+        return compareAndSwapInt(o, offset, expected, x);
+    }
+
     /**
      * Atomically updates Java variable to {@code x} if it is currently
      * holding {@code expected}.
@@ -810,6 +890,46 @@
                                                    long expected,
                                                    long x);
 
+    @HotSpotIntrinsicCandidate
+    public final native long compareAndExchangeLongVolatile(Object o, long offset,
+                                                            long expected,
+                                                            long x);
+
+    @HotSpotIntrinsicCandidate
+    public final long compareAndExchangeLongAcquire(Object o, long offset,
+                                                           long expected,
+                                                           long x) {
+        return compareAndExchangeLongVolatile(o, offset, expected, x);
+    }
+
+    @HotSpotIntrinsicCandidate
+    public final long compareAndExchangeLongRelease(Object o, long offset,
+                                                           long expected,
+                                                           long x) {
+        return compareAndExchangeLongVolatile(o, offset, expected, x);
+    }
+
+    @HotSpotIntrinsicCandidate
+    public final boolean weakCompareAndSwapLong(Object o, long offset,
+                                                       long expected,
+                                                       long x) {
+        return compareAndSwapLong(o, offset, expected, x);
+    }
+
+    @HotSpotIntrinsicCandidate
+    public final boolean weakCompareAndSwapLongAcquire(Object o, long offset,
+                                                              long expected,
+                                                              long x) {
+        return compareAndSwapLong(o, offset, expected, x);
+    }
+
+    @HotSpotIntrinsicCandidate
+    public final boolean weakCompareAndSwapLongRelease(Object o, long offset,
+                                                              long expected,
+                                                              long x) {
+        return compareAndSwapLong(o, offset, expected, x);
+    }
+
     /**
      * Fetches a reference value from a given Java variable, with volatile
      * load semantics. Otherwise identical to {@link #getObject(Object, long)}
@@ -908,6 +1028,224 @@
     @HotSpotIntrinsicCandidate
     public native void    putOrderedLong(Object o, long offset, long x);
 
+    /** Acquire version of {@link #getObjectVolatile(Object, long)} */
+    @HotSpotIntrinsicCandidate
+    public final Object getObjectAcquire(Object o, long offset) {
+        return getObjectVolatile(o, offset);
+    }
+
+    /** Acquire version of {@link #getBooleanVolatile(Object, long)} */
+    @HotSpotIntrinsicCandidate
+    public final boolean getBooleanAcquire(Object o, long offset) {
+        return getBooleanVolatile(o, offset);
+    }
+
+    /** Acquire version of {@link #getByteVolatile(Object, long)} */
+    @HotSpotIntrinsicCandidate
+    public final byte getByteAcquire(Object o, long offset) {
+        return getByteVolatile(o, offset);
+    }
+
+    /** Acquire version of {@link #getShortVolatile(Object, long)} */
+    @HotSpotIntrinsicCandidate
+    public final short getShortAcquire(Object o, long offset) {
+        return getShortVolatile(o, offset);
+    }
+
+    /** Acquire version of {@link #getCharVolatile(Object, long)} */
+    @HotSpotIntrinsicCandidate
+    public final char getCharAcquire(Object o, long offset) {
+        return getCharVolatile(o, offset);
+    }
+
+    /** Acquire version of {@link #getIntVolatile(Object, long)} */
+    @HotSpotIntrinsicCandidate
+    public final int getIntAcquire(Object o, long offset) {
+        return getIntVolatile(o, offset);
+    }
+
+    /** Acquire version of {@link #getFloatVolatile(Object, long)} */
+    @HotSpotIntrinsicCandidate
+    public final float getFloatAcquire(Object o, long offset) {
+        return getFloatVolatile(o, offset);
+    }
+
+    /** Acquire version of {@link #getLongVolatile(Object, long)} */
+    @HotSpotIntrinsicCandidate
+    public final long getLongAcquire(Object o, long offset) {
+        return getLongVolatile(o, offset);
+    }
+
+    /** Acquire version of {@link #getDoubleVolatile(Object, long)} */
+    @HotSpotIntrinsicCandidate
+    public final double getDoubleAcquire(Object o, long offset) {
+        return getDoubleVolatile(o, offset);
+    }
+
+    /** Release version of {@link #putObjectVolatile(Object, long, Object)} */
+    @HotSpotIntrinsicCandidate
+    public final void putObjectRelease(Object o, long offset, Object x) {
+        putObjectVolatile(o, offset, x);
+    }
+
+    /** Release version of {@link #putBooleanVolatile(Object, long, boolean)} */
+    @HotSpotIntrinsicCandidate
+    public final void putBooleanRelease(Object o, long offset, boolean x) {
+        putBooleanVolatile(o, offset, x);
+    }
+
+    /** Release version of {@link #putByteVolatile(Object, long, byte)} */
+    @HotSpotIntrinsicCandidate
+    public final void putByteRelease(Object o, long offset, byte x) {
+        putByteVolatile(o, offset, x);
+    }
+
+    /** Release version of {@link #putShortVolatile(Object, long, short)} */
+    @HotSpotIntrinsicCandidate
+    public final void putShortRelease(Object o, long offset, short x) {
+        putShortVolatile(o, offset, x);
+    }
+
+    /** Release version of {@link #putCharVolatile(Object, long, char)} */
+    @HotSpotIntrinsicCandidate
+    public final void putCharRelease(Object o, long offset, char x) {
+        putCharVolatile(o, offset, x);
+    }
+
+    /** Release version of {@link #putIntVolatile(Object, long, int)} */
+    @HotSpotIntrinsicCandidate
+    public final void putIntRelease(Object o, long offset, int x) {
+        putIntVolatile(o, offset, x);
+    }
+
+    /** Release version of {@link #putFloatVolatile(Object, long, float)} */
+    @HotSpotIntrinsicCandidate
+    public final void putFloatRelease(Object o, long offset, float x) {
+        putFloatVolatile(o, offset, x);
+    }
+
+    /** Release version of {@link #putLongVolatile(Object, long, long)} */
+    @HotSpotIntrinsicCandidate
+    public final void putLongRelease(Object o, long offset, long x) {
+        putLongVolatile(o, offset, x);
+    }
+
+    /** Release version of {@link #putDoubleVolatile(Object, long, double)} */
+    @HotSpotIntrinsicCandidate
+    public final void putDoubleRelease(Object o, long offset, double x) {
+        putDoubleVolatile(o, offset, x);
+    }
+
+    // ------------------------------ Opaque --------------------------------------
+
+    /** Opaque version of {@link #getObjectVolatile(Object, long)} */
+    @HotSpotIntrinsicCandidate
+    public final Object getObjectOpaque(Object o, long offset) {
+        return getObjectVolatile(o, offset);
+    }
+
+    /** Opaque version of {@link #getBooleanVolatile(Object, long)} */
+    @HotSpotIntrinsicCandidate
+    public final boolean getBooleanOpaque(Object o, long offset) {
+        return getBooleanVolatile(o, offset);
+    }
+
+    /** Opaque version of {@link #getByteVolatile(Object, long)} */
+    @HotSpotIntrinsicCandidate
+    public final byte getByteOpaque(Object o, long offset) {
+        return getByteVolatile(o, offset);
+    }
+
+    /** Opaque version of {@link #getShortVolatile(Object, long)} */
+    @HotSpotIntrinsicCandidate
+    public final short getShortOpaque(Object o, long offset) {
+        return getShortVolatile(o, offset);
+    }
+
+    /** Opaque version of {@link #getCharVolatile(Object, long)} */
+    @HotSpotIntrinsicCandidate
+    public final char getCharOpaque(Object o, long offset) {
+        return getCharVolatile(o, offset);
+    }
+
+    /** Opaque version of {@link #getIntVolatile(Object, long)} */
+    @HotSpotIntrinsicCandidate
+    public final int getIntOpaque(Object o, long offset) {
+        return getIntVolatile(o, offset);
+    }
+
+    /** Opaque version of {@link #getFloatVolatile(Object, long)} */
+    @HotSpotIntrinsicCandidate
+    public final float getFloatOpaque(Object o, long offset) {
+        return getFloatVolatile(o, offset);
+    }
+
+    /** Opaque version of {@link #getLongVolatile(Object, long)} */
+    @HotSpotIntrinsicCandidate
+    public final long getLongOpaque(Object o, long offset) {
+        return getLongVolatile(o, offset);
+    }
+
+    /** Opaque version of {@link #getDoubleVolatile(Object, long)} */
+    @HotSpotIntrinsicCandidate
+    public final double getDoubleOpaque(Object o, long offset) {
+        return getDoubleVolatile(o, offset);
+    }
+
+    /** Opaque version of {@link #putObjectVolatile(Object, long, Object)} */
+    @HotSpotIntrinsicCandidate
+    public final void putObjectOpaque(Object o, long offset, Object x) {
+        putObjectVolatile(o, offset, x);
+    }
+
+    /** Opaque version of {@link #putBooleanVolatile(Object, long, boolean)} */
+    @HotSpotIntrinsicCandidate
+    public final void putBooleanOpaque(Object o, long offset, boolean x) {
+        putBooleanVolatile(o, offset, x);
+    }
+
+    /** Opaque version of {@link #putByteVolatile(Object, long, byte)} */
+    @HotSpotIntrinsicCandidate
+    public final void putByteOpaque(Object o, long offset, byte x) {
+        putByteVolatile(o, offset, x);
+    }
+
+    /** Opaque version of {@link #putShortVolatile(Object, long, short)} */
+    @HotSpotIntrinsicCandidate
+    public final void putShortOpaque(Object o, long offset, short x) {
+        putShortVolatile(o, offset, x);
+    }
+
+    /** Opaque version of {@link #putCharVolatile(Object, long, char)} */
+    @HotSpotIntrinsicCandidate
+    public final void putCharOpaque(Object o, long offset, char x) {
+        putCharVolatile(o, offset, x);
+    }
+
+    /** Opaque version of {@link #putIntVolatile(Object, long, int)} */
+    @HotSpotIntrinsicCandidate
+    public final void putIntOpaque(Object o, long offset, int x) {
+        putIntVolatile(o, offset, x);
+    }
+
+    /** Opaque version of {@link #putFloatVolatile(Object, long, float)} */
+    @HotSpotIntrinsicCandidate
+    public final void putFloatOpaque(Object o, long offset, float x) {
+        putFloatVolatile(o, offset, x);
+    }
+
+    /** Opaque version of {@link #putLongVolatile(Object, long, long)} */
+    @HotSpotIntrinsicCandidate
+    public final void putLongOpaque(Object o, long offset, long x) {
+        putLongVolatile(o, offset, x);
+    }
+
+    /** Opaque version of {@link #putDoubleVolatile(Object, long, double)} */
+    @HotSpotIntrinsicCandidate
+    public final void putDoubleOpaque(Object o, long offset, double x) {
+        putDoubleVolatile(o, offset, x);
+    }
+
     /**
      * Unblocks the given thread blocked on {@code park}, or, if it is
      * not blocked, causes the subsequent call to {@code park} not to
@@ -1101,6 +1439,23 @@
     public native void fullFence();
 
     /**
+     * Ensures that loads before the fence will not be reordered with
+     * loads after the fence.
+     */
+    public final void loadLoadFence() {
+        loadFence();
+    }
+
+    /**
+     * Ensures that stores before the fence will not be reordered with
+     * stores after the fence.
+     */
+    public final void storeStoreFence() {
+        storeFence();
+    }
+
+
+    /**
      * Throws IllegalAccessError; for use by the VM for access control
      * error support.
      * @since 1.8
--- a/jdk/src/java.base/share/classes/jdk/internal/ref/CleanerImpl.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/classes/jdk/internal/ref/CleanerImpl.java	Mon Mar 14 17:51:25 2016 +0100
@@ -31,6 +31,7 @@
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Function;
 
 import jdk.internal.misc.InnocuousThread;
@@ -39,7 +40,7 @@
  * CleanerImpl manages a set of object references and corresponding cleaning actions.
  * CleanerImpl provides the functionality of {@link java.lang.ref.Cleaner}.
  */
-public final class CleanerImpl {
+public final class CleanerImpl implements Runnable {
 
     /**
      * An object to access the CleanerImpl from a Cleaner; set by Cleaner init.
@@ -103,7 +104,7 @@
         }
         // schedule a nop cleaning action for the cleaner, so the associated thread
         // will continue to run at least until the cleaner is reclaimable.
-        new PhantomCleanableRef(cleaner, cleaner, () -> {});
+        new CleanerCleanable(cleaner);
 
         if (threadFactory == null) {
             threadFactory = CleanerImpl.InnocuousThreadFactory.factory();
@@ -112,7 +113,7 @@
         // now that there's at least one cleaning action, for the cleaner,
         // we can start the associated thread, which runs until
         // all cleaning actions have been run.
-        Thread thread = threadFactory.newThread(this::run);
+        Thread thread = threadFactory.newThread(this);
         thread.setDaemon(true);
         thread.start();
     }
@@ -128,7 +129,8 @@
      * If the thread is a ManagedLocalsThread, the threadlocals
      * are erased before each cleanup
      */
-    private void run() {
+    @Override
+    public void run() {
         Thread t = Thread.currentThread();
         InnocuousThread mlThread = (t instanceof InnocuousThread)
                 ? (InnocuousThread) t
@@ -147,10 +149,9 @@
                 if (ref != null) {
                     ref.clean();
                 }
-            } catch (InterruptedException i) {
-                continue;   // ignore the interruption
             } catch (Throwable e) {
                 // ignore exceptions from the cleanup action
+                // (including interruption of cleanup thread)
             }
         }
     }
@@ -320,14 +321,32 @@
             return factory;
         }
 
+        final AtomicInteger cleanerThreadNumber = new AtomicInteger();
+
         public Thread newThread(Runnable r) {
-            return AccessController.doPrivileged((PrivilegedAction<Thread>) () -> {
-                Thread t = new InnocuousThread(r);
-                t.setPriority(Thread.MAX_PRIORITY - 2);
-                t.setName("Cleaner-" + t.getId());
-                return t;
+            return AccessController.doPrivileged(new PrivilegedAction<Thread>() {
+                @Override
+                public Thread run() {
+                    Thread t = new InnocuousThread(r);
+                    t.setPriority(Thread.MAX_PRIORITY - 2);
+                    t.setName("Cleaner-" + cleanerThreadNumber.getAndIncrement());
+                    return t;
+                }
             });
         }
     }
 
+    /**
+     * A PhantomCleanable implementation for tracking the Cleaner itself.
+     */
+    static final class CleanerCleanable extends PhantomCleanable<Cleaner> {
+        CleanerCleanable(Cleaner cleaner) {
+            super(cleaner, cleaner);
+        }
+
+        @Override
+        protected void performCleanup() {
+            // no action
+        }
+    }
 }
--- a/jdk/src/java.base/share/classes/sun/misc/ASCIICaseInsensitiveComparator.java	Mon Mar 14 12:35:52 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 2002, 2004, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code 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 General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.misc;
-
-import java.util.Comparator;
-
-/** Implements a locale and case insensitive comparator suitable for
-    strings that are known to only contain ASCII characters. Some
-    tables internal to the JDK contain only ASCII data and are using
-    the "generalized" java.lang.String case-insensitive comparator
-    which converts each character to both upper and lower case. */
-
-public class ASCIICaseInsensitiveComparator implements Comparator<String> {
-    public static final Comparator<String> CASE_INSENSITIVE_ORDER =
-        new ASCIICaseInsensitiveComparator();
-
-    public int compare(String s1, String s2) {
-        int n1=s1.length(), n2=s2.length();
-        int minLen = n1 < n2 ? n1 : n2;
-        for (int i=0; i < minLen; i++) {
-            char c1 = s1.charAt(i);
-            char c2 = s2.charAt(i);
-            assert c1 <= '\u007F' && c2 <= '\u007F';
-            if (c1 != c2) {
-                c1 = (char)toLower(c1);
-                c2 = (char)toLower(c2);
-                if (c1 != c2) {
-                    return c1 - c2;
-                }
-            }
-        }
-        return n1 - n2;
-    }
-
-    /**
-     * A case insensitive hash code method to go with the case insensitive
-     * compare() method.
-     *
-     * Returns a hash code for this ASCII string as if it were lower case.
-     *
-     * returns same answer as:<p>
-     * <code>s.toLowerCase(Locale.US).hashCode();</code><p>
-     * but does not allocate memory (it does NOT have the special
-     * case Turkish rules).
-     *
-     * @param s a String to compute the hashcode on.
-     * @return  a hash code value for this object.
-     */
-    public static int lowerCaseHashCode(String s) {
-        int h = 0;
-        int len = s.length();
-
-        for (int i = 0; i < len; i++) {
-            h = 31*h + toLower(s.charAt(i));
-        }
-
-        return h;
-    }
-
-    /* If java.util.regex.ASCII ever becomes public or sun.*, use its code instead:*/
-    static boolean isLower(int ch) {
-        return ((ch-'a')|('z'-ch)) >= 0;
-    }
-
-    static boolean isUpper(int ch) {
-        return ((ch-'A')|('Z'-ch)) >= 0;
-    }
-
-    static int toLower(int ch) {
-        return isUpper(ch) ? (ch + 0x20) : ch;
-    }
-
-    static int toUpper(int ch) {
-        return isLower(ch) ? (ch - 0x20) : ch;
-    }
-}
--- a/jdk/src/java.base/share/classes/sun/nio/ch/IOVecWrapper.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/classes/sun/nio/ch/IOVecWrapper.java	Mon Mar 14 17:51:25 2016 +0100
@@ -26,7 +26,7 @@
 package sun.nio.ch;
 
 import java.nio.ByteBuffer;
-import jdk.internal.ref.Cleaner;
+import jdk.internal.ref.CleanerFactory;
 
 
 /**
@@ -101,7 +101,7 @@
         }
         if (wrapper == null) {
             wrapper = new IOVecWrapper(size);
-            Cleaner.create(wrapper, new Deallocator(wrapper.vecArray));
+            CleanerFactory.cleaner().register(wrapper, new Deallocator(wrapper.vecArray));
             cached.set(wrapper);
         }
         return wrapper;
--- a/jdk/src/java.base/share/classes/sun/nio/ch/Util.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/classes/sun/nio/ch/Util.java	Mon Mar 14 17:51:25 2016 +0100
@@ -33,7 +33,6 @@
 import java.security.PrivilegedAction;
 import java.util.*;
 import jdk.internal.misc.Unsafe;
-import jdk.internal.ref.Cleaner;
 import sun.security.action.GetPropertyAction;
 
 
--- a/jdk/src/java.base/share/classes/sun/nio/fs/NativeBuffer.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/classes/sun/nio/fs/NativeBuffer.java	Mon Mar 14 17:51:25 2016 +0100
@@ -71,8 +71,8 @@
         return size;
     }
 
-    Cleaner cleaner() {
-        return cleaner;
+    void free() {
+        cleaner.clean();
     }
 
     // not synchronized; only safe for use by thread-local caches
--- a/jdk/src/java.base/share/classes/sun/nio/fs/NativeBuffers.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/classes/sun/nio/fs/NativeBuffers.java	Mon Mar 14 17:51:25 2016 +0100
@@ -107,14 +107,14 @@
         for (int i=0; i<TEMP_BUF_POOL_SIZE; i++) {
             NativeBuffer existing = buffers[i];
             if (existing.size() < buffer.size()) {
-                existing.cleaner().clean();
+                existing.free();
                 buffers[i] = buffer;
                 return;
             }
         }
 
         // free it
-        buffer.cleaner().clean();
+        buffer.free();
     }
 
     /**
--- a/jdk/src/java.base/share/classes/sun/security/ssl/HandshakeMessage.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/classes/sun/security/ssl/HandshakeMessage.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -700,7 +700,7 @@
      *      OCSP response data is provided.
      */
     CertificateStatus(StatusRequestType type, X509Certificate[] chain,
-            Map<X509Certificate, byte[]> responses) throws SSLException {
+            Map<X509Certificate, byte[]> responses) {
         statusType = type;
         encodedResponsesLen = 0;
         encodedResponses = new ArrayList<>(chain.length);
@@ -715,7 +715,7 @@
                 encodedResponses.add(respDER);
                 encodedResponsesLen = 3 + respDER.length;
             } else {
-                throw new SSLHandshakeException("Zero-length or null " +
+                throw new IllegalArgumentException("Zero-length or null " +
                         "OCSP Response");
             }
         } else if (statusType == StatusRequestType.OCSP_MULTI) {
@@ -732,8 +732,8 @@
                 }
             }
         } else {
-            throw new SSLHandshakeException("Unsupported StatusResponseType: " +
-                    statusType);
+            throw new IllegalArgumentException(
+                    "Unsupported StatusResponseType: " + statusType);
         }
     }
 
--- a/jdk/src/java.base/share/classes/sun/security/ssl/ServerHandshaker.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/classes/sun/security/ssl/ServerHandshaker.java	Mon Mar 14 17:51:25 2016 +0100
@@ -36,7 +36,6 @@
 import java.math.BigInteger;
 
 import javax.crypto.SecretKey;
-import javax.crypto.spec.SecretKeySpec;
 import javax.net.ssl.*;
 
 import sun.security.action.GetLongAction;
@@ -67,7 +66,6 @@
 
     // our authentication info
     private X509Certificate[]   certs;
-    private Map<X509Certificate, byte[]> responseMap;
     private PrivateKey          privateKey;
 
     private Object              serviceCreds;
@@ -118,7 +116,6 @@
                     LegacyAlgorithmConstraints.PROPERTY_TLS_LEGACY_ALGS,
                     new SSLAlgorithmDecomposer());
 
-    private boolean staplingActive = false;
     private long statusRespTimeout;
 
     static {
@@ -578,16 +575,6 @@
             }
         }
 
-        // Check if the client has asserted the status_request[_v2] extension(s)
-        CertStatusReqExtension statReqExt = (CertStatusReqExtension)
-                    mesg.extensions.get(ExtensionType.EXT_STATUS_REQUEST);
-        CertStatusReqListV2Extension statReqExtV2 =
-                (CertStatusReqListV2Extension)mesg.extensions.get(
-                        ExtensionType.EXT_STATUS_REQUEST_V2);
-        // Keep stapling active if at least one of the extensions has been set
-        staplingActive = sslContext.isStaplingEnabled(false) &&
-                (statReqExt != null || statReqExtV2 != null);
-
         /*
          * FIRST, construct the ServerHello using the options and priorities
          * from the ClientHello.  Update the (pending) cipher spec as we do
@@ -883,79 +870,17 @@
             m1.extensions.add(maxFragLenExt);
         }
 
-        StatusRequestType statReqType = null;
-        StatusRequest statReqData = null;
-        if (staplingActive && !resumingSession) {
-            ExtensionType statusRespExt = ExtensionType.EXT_STATUS_REQUEST;
-
-            // Determine which type of stapling we are doing and assert the
-            // proper extension in the server hello.
-            // Favor status_request_v2 over status_request and ocsp_multi
-            // over ocsp.
-            // If multiple ocsp or ocsp_multi types exist, select the first
-            // instance of a given type
-            if (statReqExtV2 != null) {             // RFC 6961 stapling
-                statusRespExt = ExtensionType.EXT_STATUS_REQUEST_V2;
-                List<CertStatusReqItemV2> reqItems =
-                        statReqExtV2.getRequestItems();
-                int ocspIdx = -1;
-                int ocspMultiIdx = -1;
-                for (int pos = 0; pos < reqItems.size(); pos++) {
-                    CertStatusReqItemV2 item = reqItems.get(pos);
-                    if (ocspIdx < 0 && item.getType() ==
-                            StatusRequestType.OCSP) {
-                        ocspIdx = pos;
-                    } else if (ocspMultiIdx < 0 && item.getType() ==
-                            StatusRequestType.OCSP_MULTI) {
-                        ocspMultiIdx = pos;
-                    }
-                }
-                if (ocspMultiIdx >= 0) {
-                    statReqType = reqItems.get(ocspMultiIdx).getType();
-                    statReqData = reqItems.get(ocspMultiIdx).getRequest();
-                } else if (ocspIdx >= 0) {
-                    statReqType = reqItems.get(ocspIdx).getType();
-                    statReqData = reqItems.get(ocspIdx).getRequest();
-                } else {
-                    // Some unknown type.  We will not do stapling for
-                    // this connection since we cannot understand the
-                    // requested type.
-                    staplingActive = false;
-                }
-            } else {                                // RFC 6066 stapling
-                statReqType = StatusRequestType.OCSP;
-                statReqData = statReqExt.getRequest();
-            }
-
-            if (statReqType != null && statReqData != null) {
-                StatusResponseManager statRespMgr =
-                        sslContext.getStatusResponseManager();
-                if (statRespMgr != null) {
-                    responseMap = statRespMgr.get(statReqType, statReqData,
-                            certs, statusRespTimeout, TimeUnit.MILLISECONDS);
-                    if (!responseMap.isEmpty()) {
-                        // We now can safely assert status_request[_v2] in our
-                        // ServerHello, and know for certain that we can provide
-                        // responses back to this client for this connection.
-                        if (statusRespExt == ExtensionType.EXT_STATUS_REQUEST) {
-                            m1.extensions.add(new CertStatusReqExtension());
-                        } else if (statusRespExt ==
-                                ExtensionType.EXT_STATUS_REQUEST_V2) {
-                            m1.extensions.add(
-                                    new CertStatusReqListV2Extension());
-                        }
-                    }
-                } else {
-                    // This should not happen if stapling is active, but
-                    // if lazy initialization of the StatusResponseManager
-                    // doesn't occur we should turn off stapling.
-                    if (debug != null && Debug.isOn("handshake")) {
-                        System.out.println("Warning: lazy initialization " +
-                                "of the StatusResponseManager failed.  " +
-                                "Stapling has been disabled.");
-                        staplingActive = false;
-                    }
-                }
+        StaplingParameters staplingParams = processStapling(mesg);
+        if (staplingParams != null) {
+            // We now can safely assert status_request[_v2] in our
+            // ServerHello, and know for certain that we can provide
+            // responses back to this client for this connection.
+            if (staplingParams.statusRespExt ==
+                    ExtensionType.EXT_STATUS_REQUEST) {
+                m1.extensions.add(new CertStatusReqExtension());
+            } else if (staplingParams.statusRespExt ==
+                    ExtensionType.EXT_STATUS_REQUEST_V2) {
+                m1.extensions.add(new CertStatusReqListV2Extension());
             }
         }
 
@@ -1031,24 +956,15 @@
          * supports status stapling and there is at least one response to
          * return to the client.
          */
-        if (staplingActive && !responseMap.isEmpty()) {
-            try {
-                CertificateStatus csMsg = new CertificateStatus(statReqType,
-                        certs, responseMap);
-                if (debug != null && Debug.isOn("handshake")) {
-                    csMsg.print(System.out);
-                }
-                csMsg.write(output);
-                handshakeState.update(csMsg, resumingSession);
-                responseMap = null;
-            } catch (SSLException ssle) {
-                // We don't want the exception to be fatal, we just won't
-                // send the message if we fail on construction.
-                if (debug != null && Debug.isOn("handshake")) {
-                    System.out.println("Failed during CertificateStatus " +
-                            "construction: " + ssle);
-                }
+        if (staplingParams != null) {
+            CertificateStatus csMsg = new CertificateStatus(
+                    staplingParams.statReqType, certs,
+                    staplingParams.responseMap);
+            if (debug != null && Debug.isOn("handshake")) {
+                csMsg.print(System.out);
             }
+            csMsg.write(output);
+            handshakeState.update(csMsg, resumingSession);
         }
 
         /*
@@ -2078,4 +1994,121 @@
 
         session.setPeerCertificates(peerCerts);
     }
+
+    private StaplingParameters processStapling(ClientHello mesg) {
+        StaplingParameters params = null;
+        ExtensionType ext;
+        StatusRequestType type = null;
+        StatusRequest req = null;
+        Map<X509Certificate, byte[]> responses;
+
+        // If this feature has not been enabled, then no more processing
+        // is necessary.  Also we will only staple if we're doing a full
+        // handshake.
+        if (!sslContext.isStaplingEnabled(false) || resumingSession) {
+            return null;
+        }
+
+        // Check if the client has asserted the status_request[_v2] extension(s)
+        CertStatusReqExtension statReqExt = (CertStatusReqExtension)
+                    mesg.extensions.get(ExtensionType.EXT_STATUS_REQUEST);
+        CertStatusReqListV2Extension statReqExtV2 =
+                (CertStatusReqListV2Extension)mesg.extensions.get(
+                        ExtensionType.EXT_STATUS_REQUEST_V2);
+        // Keep processing only if either status_request or status_request_v2
+        // has been sent in the ClientHello.
+        if (statReqExt == null && statReqExtV2 == null) {
+            return null;
+        }
+
+        // Determine which type of stapling we are doing and assert the
+        // proper extension in the server hello.
+        // Favor status_request_v2 over status_request and ocsp_multi
+        // over ocsp.
+        // If multiple ocsp or ocsp_multi types exist, select the first
+        // instance of a given type
+        ext = ExtensionType.EXT_STATUS_REQUEST;
+        if (statReqExtV2 != null) {             // RFC 6961 stapling
+            ext = ExtensionType.EXT_STATUS_REQUEST_V2;
+            List<CertStatusReqItemV2> reqItems =
+                    statReqExtV2.getRequestItems();
+            int ocspIdx = -1;
+            int ocspMultiIdx = -1;
+            for (int pos = 0; pos < reqItems.size(); pos++) {
+                CertStatusReqItemV2 item = reqItems.get(pos);
+                if (ocspIdx < 0 && item.getType() ==
+                        StatusRequestType.OCSP) {
+                    ocspIdx = pos;
+                } else if (ocspMultiIdx < 0 && item.getType() ==
+                        StatusRequestType.OCSP_MULTI) {
+                    ocspMultiIdx = pos;
+                }
+            }
+            if (ocspMultiIdx >= 0) {
+                type = reqItems.get(ocspMultiIdx).getType();
+                req = reqItems.get(ocspMultiIdx).getRequest();
+            } else if (ocspIdx >= 0) {
+                type = reqItems.get(ocspIdx).getType();
+                req = reqItems.get(ocspIdx).getRequest();
+            }
+        } else {                                // RFC 6066 stapling
+            type = StatusRequestType.OCSP;
+            req = statReqExt.getRequest();
+        }
+
+        // If, after walking through the extensions we were unable to
+        // find a suitable StatusRequest, then stapling is disabled.
+        // Both statReqType and statReqData must have been set to continue.
+        if (type == null || req == null) {
+            return null;
+        }
+
+        // Get the OCSP responses from the StatusResponseManager
+        StatusResponseManager statRespMgr =
+                sslContext.getStatusResponseManager();
+        if (statRespMgr != null) {
+            responses = statRespMgr.get(type, req, certs, statusRespTimeout,
+                    TimeUnit.MILLISECONDS);
+            if (!responses.isEmpty()) {
+                // If this RFC 6066-style stapling (SSL cert only) then the
+                // response cannot be zero length
+                if (type == StatusRequestType.OCSP) {
+                    byte[] respDER = responses.get(certs[0]);
+                    if (respDER == null || respDER.length <= 0) {
+                        return null;
+                    }
+                }
+                params = new StaplingParameters(ext, type, req, responses);
+            }
+        } else {
+            // This should not happen, but if lazy initialization of the
+            // StatusResponseManager doesn't occur we should turn off stapling.
+            if (debug != null && Debug.isOn("handshake")) {
+                System.out.println("Warning: lazy initialization " +
+                        "of the StatusResponseManager failed.  " +
+                        "Stapling has been disabled.");
+            }
+        }
+
+        return params;
+    }
+
+    /**
+     * Inner class used to hold stapling parameters needed by the handshaker
+     * when stapling is active.
+     */
+    private class StaplingParameters {
+        private final ExtensionType statusRespExt;
+        private final StatusRequestType statReqType;
+        private final StatusRequest statReqData;
+        private final Map<X509Certificate, byte[]> responseMap;
+
+        StaplingParameters(ExtensionType ext, StatusRequestType type,
+                StatusRequest req, Map<X509Certificate, byte[]> responses) {
+            statusRespExt = ext;
+            statReqType = type;
+            statReqData = req;
+            responseMap = responses;
+        }
+    }
 }
--- a/jdk/src/java.base/share/native/include/jni.h	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/share/native/include/jni.h	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1952,6 +1952,7 @@
 #define JNI_VERSION_1_4 0x00010004
 #define JNI_VERSION_1_6 0x00010006
 #define JNI_VERSION_1_8 0x00010008
+#define JNI_VERSION_9   0x00090000
 
 #ifdef __cplusplus
 } /* extern "C" */
--- a/jdk/src/java.base/windows/classes/sun/nio/fs/WindowsWatchService.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/windows/classes/sun/nio/fs/WindowsWatchService.java	Mon Mar 14 17:51:25 2016 +0100
@@ -463,7 +463,7 @@
             }
             CloseHandle(key.handle());
             closeAttachedEvent(key.overlappedAddress());
-            key.buffer().cleaner().clean();
+            key.buffer().free();
         }
 
         /**
--- a/jdk/src/java.base/windows/native/libjava/java_props_md.c	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.base/windows/native/libjava/java_props_md.c	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -469,7 +469,9 @@
          * Windows Server 2008 R2       6               1  (!VER_NT_WORKSTATION)
          * Windows 8                    6               2  (VER_NT_WORKSTATION)
          * Windows Server 2012          6               2  (!VER_NT_WORKSTATION)
+         * Windows Server 2012 R2       6               3  (!VER_NT_WORKSTATION)
          * Windows 10                   10              0  (VER_NT_WORKSTATION)
+         * Windows Server 2016          10              0  (!VER_NT_WORKSTATION)
          *
          * This mapping will presumably be augmented as new Windows
          * versions are released.
@@ -543,6 +545,7 @@
                     }
                 } else {
                     switch (minorVersion) {
+                    case  0: sprops.os_name = "Windows Server 2016";           break;
                     default: sprops.os_name = "Windows NT (unknown)";
                     }
                 }
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaInternalFrameBorder.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaInternalFrameBorder.java	Mon Mar 14 17:51:25 2016 +0100
@@ -40,6 +40,7 @@
 
 import com.apple.laf.AquaUtils.RecyclableSingleton;
 import com.apple.laf.AquaInternalFrameBorderMetrics;
+import java.awt.geom.AffineTransform;
 
 public class AquaInternalFrameBorder implements Border, UIResource {
     private static final int kCloseButton = 0;
@@ -309,18 +310,40 @@
         return isInsideYButtonArea(i, y) && x >= startX && x <= endX;
     }
 
-    protected void paintTitleIcon(final Graphics g, final JInternalFrame frame, final int x, final int y) {
-        Icon icon = frame.getFrameIcon();
-        if (icon == null) icon = UIManager.getIcon("InternalFrame.icon");
-        if (icon == null) return;
+    protected void paintTitleIcon(final Graphics g, final JInternalFrame frame,
+            final int x, final int y) {
 
-        // Resize to 16x16 if necessary.
-        if (icon instanceof ImageIcon && (icon.getIconWidth() > sMaxIconWidth || icon.getIconHeight() > sMaxIconHeight)) {
-            final Image img = ((ImageIcon)icon).getImage();
-            ((ImageIcon)icon).setImage(img.getScaledInstance(sMaxIconWidth, sMaxIconHeight, Image.SCALE_SMOOTH));
+        Icon icon = frame.getFrameIcon();
+        if (icon == null) {
+            icon = UIManager.getIcon("InternalFrame.icon");
+        }
+
+        if (icon == null) {
+            return;
         }
 
-        icon.paintIcon(frame, g, x, y);
+        if (icon.getIconWidth() > sMaxIconWidth
+                || icon.getIconHeight() > sMaxIconHeight) {
+            final Graphics2D g2 = (Graphics2D) g;
+            final AffineTransform savedAT = g2.getTransform();
+            double xScaleFactor = (double) sMaxIconWidth / icon.getIconWidth();
+            double yScaleFactor = (double) sMaxIconHeight / icon.getIconHeight();
+
+            //Coordinates are after a translation hence relative origin shifts
+            g2.translate(x, y);
+
+            //scaling factor is needed to scale while maintaining aspect ratio
+            double scaleMaintainAspectRatio = Math.min(xScaleFactor, yScaleFactor);
+
+            //minimum value is taken to set to a maximum Icon Dimension
+            g2.scale(scaleMaintainAspectRatio, scaleMaintainAspectRatio);
+
+            icon.paintIcon(frame, g2, 0, 0);
+            g2.setTransform(savedAT);
+
+        } else {
+            icon.paintIcon(frame, g, x, y);
+        }
     }
 
     protected int getIconWidth(final JInternalFrame frame) {
@@ -330,9 +353,7 @@
         if (icon == null) {
             icon = UIManager.getIcon("InternalFrame.icon");
         }
-
-        if (icon != null && icon instanceof ImageIcon) {
-            // Resize to 16x16 if necessary.
+        if (icon != null) {
             width = Math.min(icon.getIconWidth(), sMaxIconWidth);
         }
 
@@ -346,9 +367,7 @@
         if (icon == null) {
             icon = UIManager.getIcon("InternalFrame.icon");
         }
-
-        if (icon != null && icon instanceof ImageIcon) {
-            // Resize to 16x16 if necessary.
+        if (icon != null) {
             height = Math.min(icon.getIconHeight(), sMaxIconHeight);
         }
 
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaTableHeaderUI.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaTableHeaderUI.java	Mon Mar 14 17:51:25 2016 +0100
@@ -128,14 +128,17 @@
             // Modify the table "border" to draw smaller, and with the titles in the right position
             // and sort indicators, just like an NSSave/Open panel.
             final AquaTableHeaderBorder cellBorder = AquaTableHeaderBorder.getListHeaderBorder();
-            final boolean thisColumnSelected = localTable.getColumnModel().getColumn(column).getModelIndex() == sortColumn;
+            cellBorder.setSortOrder(AquaTableHeaderBorder.SORT_NONE);
+
+            if (localTable != null) {
+                final boolean thisColumnSelected = localTable.getColumnModel().getColumn(column).getModelIndex() == sortColumn;
 
-            cellBorder.setSelected(thisColumnSelected);
-            if (thisColumnSelected) {
-                cellBorder.setSortOrder(sortOrder);
-            } else {
-                cellBorder.setSortOrder(AquaTableHeaderBorder.SORT_NONE);
+                cellBorder.setSelected(thisColumnSelected);
+                if (thisColumnSelected) {
+                    cellBorder.setSortOrder(sortOrder);
+               }
             }
+
             setBorder(cellBorder);
             return this;
         }
--- a/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m	Mon Mar 14 17:51:25 2016 +0100
@@ -134,7 +134,7 @@
     {0x3D, NO,  KL_UNKNOWN,  java_awt_event_KeyEvent_VK_UNDEFINED},
     {0x3E, NO,  KL_UNKNOWN,  java_awt_event_KeyEvent_VK_UNDEFINED},
     {0x3F, NO,  KL_UNKNOWN,  java_awt_event_KeyEvent_VK_UNDEFINED}, // the 'fn' key on PowerBooks
-    {0x40, NO,  KL_UNKNOWN,  java_awt_event_KeyEvent_VK_UNDEFINED},
+    {0x40, NO,  KL_STANDARD, java_awt_event_KeyEvent_VK_F17},
     {0x41, YES, KL_NUMPAD,   java_awt_event_KeyEvent_VK_DECIMAL},
     {0x42, NO,  KL_UNKNOWN,  java_awt_event_KeyEvent_VK_UNDEFINED},
     {0x43, YES, KL_NUMPAD,   java_awt_event_KeyEvent_VK_MULTIPLY},
@@ -149,8 +149,8 @@
     {0x4C, YES, KL_NUMPAD,   java_awt_event_KeyEvent_VK_ENTER},
     {0x4D, NO,  KL_UNKNOWN,  java_awt_event_KeyEvent_VK_UNDEFINED},
     {0x4E, YES, KL_NUMPAD,   java_awt_event_KeyEvent_VK_SUBTRACT},
-    {0x4F, NO,  KL_UNKNOWN,  java_awt_event_KeyEvent_VK_UNDEFINED},
-    {0x50, NO,  KL_UNKNOWN,  java_awt_event_KeyEvent_VK_UNDEFINED},
+    {0x4F, NO,  KL_STANDARD, java_awt_event_KeyEvent_VK_F18},
+    {0x50, NO,  KL_STANDARD, java_awt_event_KeyEvent_VK_F19},
     {0x51, YES, KL_NUMPAD,   java_awt_event_KeyEvent_VK_EQUALS},
     {0x52, YES, KL_NUMPAD,   java_awt_event_KeyEvent_VK_NUMPAD0},
     {0x53, YES, KL_NUMPAD,   java_awt_event_KeyEvent_VK_NUMPAD1},
@@ -160,7 +160,7 @@
     {0x57, YES, KL_NUMPAD,   java_awt_event_KeyEvent_VK_NUMPAD5},
     {0x58, YES, KL_NUMPAD,   java_awt_event_KeyEvent_VK_NUMPAD6},
     {0x59, YES, KL_NUMPAD,   java_awt_event_KeyEvent_VK_NUMPAD7},
-    {0x5A, NO,  KL_UNKNOWN,  java_awt_event_KeyEvent_VK_UNDEFINED},
+    {0x5A, NO,  KL_STANDARD, java_awt_event_KeyEvent_VK_F20},
     {0x5B, YES, KL_NUMPAD,   java_awt_event_KeyEvent_VK_NUMPAD8},
     {0x5C, YES, KL_NUMPAD,   java_awt_event_KeyEvent_VK_NUMPAD9},
     {0x5D, YES, KL_STANDARD, java_awt_event_KeyEvent_VK_BACK_SLASH}, // This is a combo yen/backslash on JIS keyboards.
--- a/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.m	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.m	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -624,7 +624,8 @@
 {
     NSString *selectedText = [self accessibleSelectedText];
     NSAttributedString *styledText = [[NSAttributedString alloc] initWithString:selectedText];
-    NSData *rtfdData = [styledText RTFDFromRange:NSMakeRange(0, [styledText length]) documentAttributes:nil];
+    NSData *rtfdData = [styledText RTFDFromRange:NSMakeRange(0, [styledText length])
+                              documentAttributes:@{NSDocumentTypeDocumentAttribute: NSRTFTextDocumentType}];
     [styledText release];
     return rtfdData;
 }
@@ -681,7 +682,7 @@
     if ([[pboard types] containsObject:NSRTFDPboardType])
     {
         NSData *rtfdData = [pboard dataForType:NSRTFDPboardType];
-        NSAttributedString *styledText = [[NSAttributedString alloc] initWithRTFD:rtfdData documentAttributes:nil];
+        NSAttributedString *styledText = [[NSAttributedString alloc] initWithRTFD:rtfdData documentAttributes:NULL];
         NSString *text = [styledText string];
         [styledText release];
 
--- a/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/LWCToolkit.m	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/LWCToolkit.m	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -743,9 +743,10 @@
 JNIEXPORT jint JNICALL DEF_JNI_OnLoad(JavaVM *vm, void *reserved) {
     OSXAPP_SetJavaVM(vm);
 
-    // We need to let Foundation know that this is a multithreaded application, if it isn't already.
+    // We need to let Foundation know that this is a multithreaded application,
+    // if it isn't already.
     if (![NSThread isMultiThreaded]) {
-        [NSThread detachNewThreadSelector:nil toTarget:nil withObject:nil];
+        [[[[NSThread alloc] init] autorelease] start];
     }
 
     return JNI_VERSION_1_4;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/macosx/native/libosx/CFileManager.m	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,255 @@
+/*
+ * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#import "com_apple_eio_FileManager.h"
+
+#import <Cocoa/Cocoa.h>
+#import <JavaNativeFoundation/JavaNativeFoundation.h>
+
+#import "ThreadUtilities.h"
+
+
+/*
+ * Class:     com_apple_eio_FileManager
+ * Method:    _setFileTypeAndCreator
+ * Signature: (Ljava/lang/String;II)V
+ */
+JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1setFileTypeAndCreator
+(JNIEnv *env, jclass clz, jstring javaFilename, jint type, jint creator)
+{
+JNF_COCOA_ENTER(env);
+        NSString *filename = JNFNormalizedNSStringForPath(env, javaFilename);
+        NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys:
+                                                        [NSNumber numberWithInt:type], NSFileHFSTypeCode,
+                                                        [NSNumber numberWithInt:creator], NSFileHFSCreatorCode, nil];
+    [[NSFileManager defaultManager] changeFileAttributes:attr atPath:filename];
+JNF_COCOA_EXIT(env);
+}
+
+/*
+ * Class:     com_apple_eio_FileManager
+ * Method:    _setFileType
+ * Signature: (Ljava/lang/String;I)V
+ */
+JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1setFileType
+(JNIEnv *env, jclass ckz, jstring javaFilename, jint type)
+{
+JNF_COCOA_ENTER(env);
+        NSString *filename = JNFNormalizedNSStringForPath(env, javaFilename);
+        NSDictionary *attr = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:type] forKey:NSFileHFSTypeCode];
+    [[NSFileManager defaultManager] changeFileAttributes:attr atPath:filename];
+JNF_COCOA_EXIT(env);
+}
+
+/*
+ * Class:     com_apple_eio_FileManager
+ * Method:    _setFileCreator
+ * Signature: (Ljava/lang/String;I)V
+ */
+JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1setFileCreator
+(JNIEnv *env, jclass clz, jstring javaFilename, jint creator)
+{
+JNF_COCOA_ENTER(env);
+        NSString *filename = JNFNormalizedNSStringForPath(env, javaFilename);
+        NSDictionary *attr = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:creator] forKey:NSFileHFSCreatorCode];
+    [[NSFileManager defaultManager] changeFileAttributes:attr atPath:filename];
+JNF_COCOA_EXIT(env);
+}
+
+/*
+ * Class:     com_apple_eio_FileManager
+ * Method:    _getFileType
+ * Signature: (Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_com_apple_eio_FileManager__1getFileType
+(JNIEnv *env, jclass clz, jstring javaFilename)
+{
+    jint type = 0;
+JNF_COCOA_ENTER(env);
+        NSString *filename = JNFNormalizedNSStringForPath(env, javaFilename);
+    NSDictionary *attributes = [[NSFileManager defaultManager] fileAttributesAtPath:filename traverseLink:YES];
+    NSNumber *val = [attributes objectForKey:NSFileHFSTypeCode];
+    type = [val intValue];
+JNF_COCOA_EXIT(env);
+    return type;
+}
+
+/*
+ * Class:     com_apple_eio_FileManager
+ * Method:    _getFileCreator
+ * Signature: (Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_com_apple_eio_FileManager__1getFileCreator
+  (JNIEnv *env, jclass clz, jstring javaFilename)
+{
+    jint creator = 0;
+JNF_COCOA_ENTER(env);
+        NSString *filename = JNFNormalizedNSStringForPath(env, javaFilename);
+    NSDictionary *attributes = [[NSFileManager defaultManager] fileAttributesAtPath:filename traverseLink:YES];
+    NSNumber *val = [attributes objectForKey:NSFileHFSCreatorCode];
+    creator = [val intValue];
+JNF_COCOA_EXIT(env);
+    return creator;
+}
+
+/*
+ * Class:     com_apple_eio_FileManager
+ * Method:    _findFolder
+ * Signature: (SIZ)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_com_apple_eio_FileManager__1findFolder__SIZ
+(JNIEnv *env, jclass clz, jshort domain, jint folderType, jboolean createIfNeeded)
+{
+    jstring filename = nil;
+JNF_COCOA_ENTER(env);
+
+    FSRef foundRef;
+    createIfNeeded = createIfNeeded || (folderType == kTemporaryFolderType) || (folderType == kChewableItemsFolderType);
+    if (FSFindFolder((SInt16)domain, (OSType)folderType, (Boolean)createIfNeeded, &foundRef) == noErr) {
+        char path[PATH_MAX];
+        if (FSRefMakePath(&foundRef, (UInt8 *)path, sizeof(path)) == noErr) {
+            NSString *filenameString = [[NSFileManager defaultManager] stringWithFileSystemRepresentation:path length:strlen(path)];
+            filename = JNFNormalizedJavaStringForPath(env, filenameString);
+        }
+    }
+
+JNF_COCOA_EXIT(env);
+    return filename;
+}
+
+
+/*
+ * Class:     com_apple_eio_FileManager
+ * Method:    _openURL
+ * Signature: (Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1openURL
+(JNIEnv *env, jclass clz, jstring urlString)
+{
+JNF_COCOA_ENTER(env);
+
+    NSURL *url = [NSURL URLWithString:JNFNormalizedNSStringForPath(env, urlString)];
+
+        // Radar 3208005: Run this on the main thread; file:// style URLs will hang otherwise.
+    [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
+        [[NSWorkspace sharedWorkspace] openURL:url];
+    }];
+
+JNF_COCOA_EXIT(env);
+}
+
+
+/*
+ * Class:     com_apple_eio_FileManager
+ * Method:    getNativeResourceFromBundle
+ * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_com_apple_eio_FileManager_getNativeResourceFromBundle
+(JNIEnv *env, jclass clz, jstring javaResourceName, jstring javaSubDirName, jstring javaTypeName)
+{
+    jstring filename = NULL;
+JNF_COCOA_ENTER(env);
+
+    NSString *resourceName = JNFNormalizedNSStringForPath(env, javaResourceName);
+        NSString *subDirectory = JNFNormalizedNSStringForPath(env, javaSubDirName);
+        NSString *typeName = JNFNormalizedNSStringForPath(env, javaTypeName);
+
+    NSString *path = [[NSBundle mainBundle] pathForResource:resourceName
+                                                     ofType:typeName
+                                                inDirectory:subDirectory];
+
+    filename = JNFNormalizedJavaStringForPath(env, path);
+
+JNF_COCOA_EXIT(env);
+    return filename;
+}
+
+
+/*
+ * Class:     com_apple_eio_FileManager
+ * Method:    getNativePathToApplicationBundle
+ * Signature: ()Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_com_apple_eio_FileManager_getNativePathToApplicationBundle
+(JNIEnv *env, jclass clazz)
+{
+        jstring filename = nil;
+JNF_COCOA_ENTER(env);
+
+        NSBundle *mainBundle = [NSBundle mainBundle];
+        filename = JNFNormalizedJavaStringForPath(env, [mainBundle bundlePath]);
+
+JNF_COCOA_EXIT(env);
+        return filename;
+}
+
+
+/*
+ * Class:     com_apple_eio_FileManager
+ * Method:    __moveToTrash
+ * Signature: (Ljava/lang/String;)V
+ */
+
+JNIEXPORT jboolean JNICALL Java_com_apple_eio_FileManager__1moveToTrash
+(JNIEnv *env, jclass clz, jstring fileName)
+{
+    __block BOOL returnValue = NO;
+JNF_COCOA_ENTER(env);
+
+    NSString * path = JNFNormalizedNSStringForPath(env, fileName);
+    NSURL *url = [NSURL fileURLWithPath:path];
+    [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){
+
+        returnValue  = [[NSFileManager defaultManager] trashItemAtURL:url
+                                                     resultingItemURL:nil
+                                                                error:nil];
+    }];
+
+JNF_COCOA_EXIT(env);
+
+        return returnValue ? JNI_TRUE: JNI_FALSE;
+}
+
+/*
+ * Class:     com_apple_eio_FileManager
+ * Method:    __revealInFinder
+ * Signature: (Ljava/lang/String;)V
+ */
+
+JNIEXPORT jboolean JNICALL Java_com_apple_eio_FileManager__1revealInFinder
+(JNIEnv *env, jclass clz, jstring url)
+{
+        __block jboolean returnValue = JNI_FALSE;
+JNF_COCOA_ENTER(env);
+
+    NSString *path = JNFNormalizedNSStringForPath(env, url);
+    [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){
+        returnValue = [[NSWorkspace sharedWorkspace] selectFile:path inFileViewerRootedAtPath:@""];
+    }];
+
+JNF_COCOA_EXIT(env);
+
+        return returnValue;
+}
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFBaseJPEGCompressor.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFBaseJPEGCompressor.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -86,16 +86,16 @@
 
     /**
      * Whether to write abbreviated JPEG streams (default == false).
-     * A subclass which sets this to <code>true</code> should also
+     * A subclass which sets this to {@code true} should also
      * initialized {@link #JPEGStreamMetadata}.
      */
     protected boolean writeAbbreviatedStream = false;
 
     /**
      * Stream metadata equivalent to a tables-only stream such as in
-     * the <code>JPEGTables</code>. Default value is <code>null</code>.
+     * the {@code JPEGTables}. Default value is {@code null}.
      * This should be set by any subclass which sets
-     * {@link writeAbbreviatedStream} to <code>true</code>.
+     * {@link writeAbbreviatedStream} to {@code true}.
      */
     protected IIOMetadata JPEGStreamMetadata = null;
 
@@ -108,15 +108,15 @@
     /**
      * Removes nonessential nodes from a JPEG native image metadata tree.
      * All nodes derived from JPEG marker segments other than DHT, DQT,
-     * SOF, SOS segments are removed unless <code>pruneTables</code> is
-     * <code>true</code> in which case the nodes derived from the DHT and
+     * SOF, SOS segments are removed unless {@code pruneTables} is
+     * {@code true} in which case the nodes derived from the DHT and
      * DQT marker segments are also removed.
      *
      * @param tree A <tt>javax_imageio_jpeg_image_1.0</tt> tree.
      * @param pruneTables Whether to prune Huffman and quantization tables.
-     * @throws NullPointerException if <code>tree</code> is
-     * <code>null</code>.
-     * @throws IllegalArgumentException if <code>tree</code> is not the root
+     * @throws NullPointerException if {@code tree} is
+     * {@code null}.
+     * @throws IllegalArgumentException if {@code tree} is not the root
      * of a JPEG native image metadata tree.
      */
     private static void pruneNodes(Node tree, boolean pruneTables) {
@@ -182,8 +182,8 @@
     }
 
     /**
-     * A <code>ByteArrayOutputStream</code> which allows writing to an
-     * <code>ImageOutputStream</code>.
+     * A {@code ByteArrayOutputStream} which allows writing to an
+     * {@code ImageOutputStream}.
      */
     private static class IIOByteArrayOutputStream extends ByteArrayOutputStream {
         IIOByteArrayOutputStream() {
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFColorConverter.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFColorConverter.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,39 +31,39 @@
 public abstract class TIFFColorConverter {
 
     /**
-     * Constructs an instance of a <code>TIFFColorConverter</code>.
+     * Constructs an instance of a {@code TIFFColorConverter}.
      */
     public TIFFColorConverter() {}
 
     /**
      * Converts an RGB triple into the native color space of this
      * TIFFColorConverter, and stores the result in the first three
-     * entries of the <code>result</code> array.
+     * entries of the {@code result} array.
      *
      * @param r the red value.
      * @param g the green value.
      * @param b the blue value.
-     * @param result an array of <code>float</code>s containing three elements.
-     * @throws NullPointerException if <code>result</code> is
-     * <code>null</code>.
+     * @param result an array of {@code float}s containing three elements.
+     * @throws NullPointerException if {@code result} is
+     * {@code null}.
      * @throws ArrayIndexOutOfBoundsException if
-     * <code>result.length&nbsp;&lt;&nbsp;3</code>.
+     * {@code result.length&nbsp;&lt;&nbsp;3}.
      */
     public abstract void fromRGB(float r, float g, float b, float[] result);
 
     /**
      * Converts  a   triple  in  the   native  color  space   of  this
      * TIFFColorConverter into an RGB triple, and stores the result in
-     * the first three entries of the <code>rgb</code> array.
+     * the first three entries of the {@code rgb} array.
      *
      * @param x0 the value of channel 0.
      * @param x1 the value of channel 1.
      * @param x2 the value of channel 2.
-     * @param rgb an array of <code>float</code>s containing three elements.
-     * @throws NullPointerException if <code>rgb</code> is
-     * <code>null</code>.
+     * @param rgb an array of {@code float}s containing three elements.
+     * @throws NullPointerException if {@code rgb} is
+     * {@code null}.
      * @throws ArrayIndexOutOfBoundsException if
-     * <code>rgb.length&nbsp;&lt;&nbsp;3</code>.
+     * {@code rgb.length&nbsp;&lt;&nbsp;3}.
      */
     public abstract void toRGB(float x0, float x1, float x2, float[] rgb);
 }
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFCompressor.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFCompressor.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,13 +35,13 @@
 public abstract class TIFFCompressor {
 
     /**
-     * The <code>ImageWriter</code> calling this
-     * <code>TIFFCompressor</code>.
+     * The {@code ImageWriter} calling this
+     * {@code TIFFCompressor}.
      */
     protected ImageWriter writer;
 
     /**
-     * The <code>IIOMetadata</code> object containing metadata for the
+     * The {@code IIOMetadata} object containing metadata for the
      * current image.
      */
     protected IIOMetadata metadata;
@@ -63,7 +63,7 @@
     protected boolean isCompressionLossless;
 
     /**
-     * The <code>ImageOutputStream</code> to be written.
+     * The {@code ImageOutputStream} to be written.
      */
     protected ImageOutputStream stream;
 
@@ -75,26 +75,26 @@
      * to provide the implementation of the compression algorithm of an
      * unsupported compression type.
      *
-     * <p>The parameters <code>compressionTagValue</code> and
-     * <code>isCompressionLossless</code> are provided to accomodate
+     * <p>The parameters {@code compressionTagValue} and
+     * {@code isCompressionLossless} are provided to accomodate
      * compression types which are unknown. A compression type is
      * "known" if it is either among those already supported by the
      * TIFF writer (see {@link TIFFImageWriteParam}), or is listed in
      * the TIFF 6.0 specification but not supported. If the compression
-     * type is unknown, the <code>compressionTagValue</code> and
-     * <code>isCompressionLossless</code> parameters are ignored.</p>
+     * type is unknown, the {@code compressionTagValue} and
+     * {@code isCompressionLossless} parameters are ignored.</p>
      *
      * @param compressionType The name of the compression type.
      * @param compressionTagValue The value to be assigned to the TIFF
      * <i>Compression</i> tag in the TIFF image metadata; ignored if
-     * <code>compressionType</code> is a known type.
+     * {@code compressionType} is a known type.
      * @param isCompressionLossless Whether the compression is lossless;
-     * ignored if <code>compressionType</code> is a known type.
+     * ignored if {@code compressionType} is a known type.
      *
-     * @throws NullPointerException if <code>compressionType</code> is
-     * <code>null</code>.
-     * @throws IllegalArgumentException if <code>compressionTagValue</code> is
-     * less <code>1</code>.
+     * @throws NullPointerException if {@code compressionType} is
+     * {@code null}.
+     * @throws IllegalArgumentException if {@code compressionTagValue} is
+     * less {@code 1}.
      */
     public TIFFCompressor(String compressionType,
                           int compressionTagValue,
@@ -163,9 +163,9 @@
     }
 
     /**
-     * Sets the <code>ImageOutputStream</code> to be written.
+     * Sets the {@code ImageOutputStream} to be written.
      *
-     * @param stream an <code>ImageOutputStream</code> to be written.
+     * @param stream an {@code ImageOutputStream} to be written.
      *
      * @see #getStream
      */
@@ -174,9 +174,9 @@
     }
 
     /**
-     * Returns the <code>ImageOutputStream</code> that will be written.
+     * Returns the {@code ImageOutputStream} that will be written.
      *
-     * @return an <code>ImageOutputStream</code>.
+     * @return an {@code ImageOutputStream}.
      *
      * @see #setStream(ImageOutputStream)
      */
@@ -185,9 +185,9 @@
     }
 
     /**
-     * Sets the value of the <code>writer</code> field.
+     * Sets the value of the {@code writer} field.
      *
-     * @param writer the current <code>ImageWriter</code>.
+     * @param writer the current {@code ImageWriter}.
      *
      * @see #getWriter()
      */
@@ -196,9 +196,9 @@
     }
 
     /**
-     * Returns the current <code>ImageWriter</code>.
+     * Returns the current {@code ImageWriter}.
      *
-     * @return an <code>ImageWriter</code>.
+     * @return an {@code ImageWriter}.
      *
      * @see #setWriter(ImageWriter)
      */
@@ -207,9 +207,9 @@
     }
 
     /**
-     * Sets the value of the <code>metadata</code> field.
+     * Sets the value of the {@code metadata} field.
      *
-     * @param metadata the <code>IIOMetadata</code> object for the
+     * @param metadata the {@code IIOMetadata} object for the
      * image being written.
      *
      * @see #getMetadata()
@@ -219,9 +219,9 @@
     }
 
     /**
-     * Returns the current <code>IIOMetadata</code> object.
+     * Returns the current {@code IIOMetadata} object.
      *
-     * @return the <code>IIOMetadata</code> object for the image being
+     * @return the {@code IIOMetadata} object for the image being
      * written.
      *
      * @see #setMetadata(IIOMetadata)
@@ -232,15 +232,15 @@
 
     /**
      * Encodes the supplied image data, writing to the currently set
-     * <code>ImageOutputStream</code>.
+     * {@code ImageOutputStream}.
      *
-     * @param b an array of <code>byte</code>s containing the packed
+     * @param b an array of {@code byte}s containing the packed
      * but uncompressed image data.
      * @param off the starting offset of the data to be written in the
-     * array <code>b</code>.
+     * array {@code b}.
      * @param width the width of the rectangle of pixels to be written.
      * @param height the height of the rectangle of pixels to be written.
-     * @param bitsPerSample an array of <code>int</code>s indicting
+     * @param bitsPerSample an array of {@code int}s indicting
      * the number of bits used to represent each image sample within
      * a pixel.
      * @param scanlineStride the number of bytes separating each
@@ -249,7 +249,7 @@
      * @return the number of bytes written.
      *
      * @throws IOException if the supplied data cannot be encoded by
-     * this <code>TIFFCompressor</code>, or if any I/O error occurs
+     * this {@code TIFFCompressor}, or if any I/O error occurs
      * during writing.
      */
     public abstract int encode(byte[] b, int off,
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFDecompressor.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFDecompressor.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -81,7 +81,7 @@
  *
  * <p> Decompressors may be written with various levels of complexity.
  * The most complex decompressors will override the
- * <code>decode</code> method, and will perform all the work of
+ * {@code decode} method, and will perform all the work of
  * decoding, subsampling, offsetting, clipping, and format conversion.
  * This approach may be the most efficient, since it is possible to
  * avoid the use of extra image buffers, and it may be possible to
@@ -89,35 +89,35 @@
  * the destination.
  *
  * <p> Less ambitious decompressors may override the
- * <code>decodeRaw</code> method, which is responsible for
+ * {@code decodeRaw} method, which is responsible for
  * decompressing the entire tile or strip into a byte array (or other
  * appropriate datatype).  The default implementation of
- * <code>decode</code> will perform all necessary setup of buffers,
- * call <code>decodeRaw</code> to perform the actual decoding, perform
+ * {@code decode} will perform all necessary setup of buffers,
+ * call {@code decodeRaw} to perform the actual decoding, perform
  * subsampling, and copy the results into the final destination image.
  * Where possible, it will pass the real image buffer to
- * <code>decodeRaw</code> in order to avoid making an extra copy.
+ * {@code decodeRaw} in order to avoid making an extra copy.
  *
  * <p> Slightly more ambitious decompressors may override
- * <code>decodeRaw</code>, but avoid writing pixels that will be
+ * {@code decodeRaw}, but avoid writing pixels that will be
  * discarded in the subsampling phase.
  */
 public abstract class TIFFDecompressor {
 
     /**
-     * The <code>ImageReader</code> calling this
-     * <code>TIFFDecompressor</code>.
+     * The {@code ImageReader} calling this
+     * {@code TIFFDecompressor}.
      */
     protected ImageReader reader;
 
     /**
-     * The <code>IIOMetadata</code> object containing metadata for the
+     * The {@code IIOMetadata} object containing metadata for the
      * current image.
      */
     protected IIOMetadata metadata;
 
     /**
-     * The value of the <code>PhotometricInterpretation</code> tag.
+     * The value of the {@code PhotometricInterpretation} tag.
      * Legal values are {@link
      * BaselineTIFFTagSet#PHOTOMETRIC_INTERPRETATION_WHITE_IS_ZERO },
      * {@link
@@ -135,7 +135,7 @@
     protected int photometricInterpretation;
 
     /**
-     * The value of the <code>Compression</code> tag. Legal values are
+     * The value of the {@code Compression} tag. Legal values are
      * {@link BaselineTIFFTagSet#COMPRESSION_NONE}, {@link
      * BaselineTIFFTagSet#COMPRESSION_CCITT_RLE}, {@link
      * BaselineTIFFTagSet#COMPRESSION_CCITT_T_4}, {@link
@@ -151,23 +151,23 @@
     protected int compression;
 
     /**
-     * <code>true</code> if the image is encoded using separate planes.
+     * {@code true} if the image is encoded using separate planes.
      */
     protected boolean planar;
 
     /**
-     * The value of the <code>SamplesPerPixel</code> tag.
+     * The value of the {@code SamplesPerPixel} tag.
      */
     protected int samplesPerPixel;
 
     /**
-     * The value of the <code>BitsPerSample</code> tag.
+     * The value of the {@code BitsPerSample} tag.
      *
      */
     protected int[] bitsPerSample;
 
     /**
-     * The value of the <code>SampleFormat</code> tag.  Legal values
+     * The value of the {@code SampleFormat} tag.  Legal values
      * are {@link BaselineTIFFTagSet#SAMPLE_FORMAT_UNSIGNED_INTEGER},
      * {@link BaselineTIFFTagSet#SAMPLE_FORMAT_SIGNED_INTEGER}, {@link
      * BaselineTIFFTagSet#SAMPLE_FORMAT_FLOATING_POINT}, {@link
@@ -178,7 +178,7 @@
         new int[] {BaselineTIFFTagSet.SAMPLE_FORMAT_UNSIGNED_INTEGER};
 
     /**
-     * The value of the <code>ExtraSamples</code> tag.  Legal values
+     * The value of the {@code ExtraSamples} tag.  Legal values
      * are {@link BaselineTIFFTagSet#EXTRA_SAMPLES_UNSPECIFIED},
      * {@link BaselineTIFFTagSet#EXTRA_SAMPLES_ASSOCIATED_ALPHA},
      * {@link BaselineTIFFTagSet#EXTRA_SAMPLES_UNASSOCIATED_ALPHA},
@@ -187,7 +187,7 @@
     protected int[] extraSamples;
 
     /**
-     * The value of the <code>ColorMap</code> tag.
+     * The value of the {@code ColorMap} tag.
      *
      */
     protected char[] colorMap;
@@ -195,20 +195,20 @@
     // Region of input stream containing the data
 
     /**
-     * The <code>ImageInputStream</code> containing the TIFF source
+     * The {@code ImageInputStream} containing the TIFF source
      * data.
      */
     protected ImageInputStream stream;
 
     /**
-     * The offset in the source <code>ImageInputStream</code> of the
+     * The offset in the source {@code ImageInputStream} of the
      * start of the data to be decompressed.
      */
     protected long offset;
 
     /**
      * The number of bytes of data from the source
-     * <code>ImageInputStream</code> to be decompressed.
+     * {@code ImageInputStream} to be decompressed.
      */
     protected int byteCount;
 
@@ -244,15 +244,15 @@
     // Subsampling to be performed
 
     /**
-     * The source X offset used, along with <code>dstXOffset</code>
-     * and <code>subsampleX</code>, to map between horizontal source
+     * The source X offset used, along with {@code dstXOffset}
+     * and {@code subsampleX}, to map between horizontal source
      * and destination pixel coordinates.
      */
     protected int sourceXOffset;
 
     /**
      * The horizontal destination offset used, along with
-     * <code>sourceXOffset</code> and <code>subsampleX</code>, to map
+     * {@code sourceXOffset} and {@code subsampleX}, to map
      * between horizontal source and destination pixel coordinates.
      * See the comment for {@link #sourceXOffset sourceXOffset} for
      * the mapping equations.
@@ -260,15 +260,15 @@
     protected int dstXOffset;
 
     /**
-     * The source Y offset used, along with <code>dstYOffset</code>
-     * and <code>subsampleY</code>, to map between vertical source and
+     * The source Y offset used, along with {@code dstYOffset}
+     * and {@code subsampleY}, to map between vertical source and
      * destination pixel coordinates.
      */
     protected int sourceYOffset;
 
     /**
      * The vertical destination offset used, along with
-     * <code>sourceYOffset</code> and <code>subsampleY</code>, to map
+     * {@code sourceYOffset} and {@code subsampleY}, to map
      * between horizontal source and destination pixel coordinates.
      * See the comment for {@link #sourceYOffset sourceYOffset} for
      * the mapping equations.
@@ -305,7 +305,7 @@
     // Destination for decodeRaw
 
     /**
-     * A <code>BufferedImage</code> for the <code>decodeRaw</code>
+     * A {@code BufferedImage} for the {@code decodeRaw}
      * method to write into.
      */
     protected BufferedImage rawImage;
@@ -345,15 +345,15 @@
      * The X coordinate of the upper-left source pixel that will
      * actually be copied into the destination image, taking into
      * account all subsampling, offsetting, and clipping.  That is,
-     * the pixel at (<code>activeSrcMinX</code>,
-     * <code>activeSrcMinY</code>) is to be copied into the
-     * destination pixel at (<code>dstMinX</code>,
-     * <code>dstMinY</code>).
+     * the pixel at ({@code activeSrcMinX},
+     * {@code activeSrcMinY}) is to be copied into the
+     * destination pixel at ({@code dstMinX},
+     * {@code dstMinY}).
      *
      * <p> The pixels in the source region to be copied are
-     * those with X coordinates of the form <code>activeSrcMinX +
-     * k*subsampleX</code>, where <code>k</code> is an integer such
-     * that <code>0 &le; k &lt; dstWidth</code>.
+     * those with X coordinates of the form {@code activeSrcMinX +
+     * k*subsampleX}, where {@code k} is an integer such
+     * that {@code 0 &le; k &lt; dstWidth}.
      */
     protected int activeSrcMinX;
 
@@ -363,9 +363,9 @@
      * all subsampling, offsetting, and clipping.
      *
      * <p> The pixels in the source region to be copied are
-     * those with Y coordinates of the form <code>activeSrcMinY +
-     * k*subsampleY</code>, where <code>k</code> is an integer such
-     * that <code>0 &le; k &lt; dstHeight</code>.
+     * those with Y coordinates of the form {@code activeSrcMinY +
+     * k*subsampleY}, where {@code k} is an integer such
+     * that {@code 0 &le; k &lt; dstHeight}.
      */
     protected int activeSrcMinY;
 
@@ -375,7 +375,7 @@
      * susbampling, offsetting, and clipping.
      *
      * <p> The active source width will always be equal to
-     * <code>(dstWidth - 1)*subsampleX + 1</code>.
+     * {@code (dstWidth - 1)*subsampleX + 1}.
      */
     protected int activeSrcWidth;
 
@@ -385,13 +385,13 @@
      * susbampling, offsetting, and clipping.
      *
      * <p> The active source height will always be equal to
-     * <code>(dstHeight - 1)*subsampleY + 1</code>.
+     * {@code (dstHeight - 1)*subsampleY + 1}.
      */
     protected int activeSrcHeight;
 
     /**
-     * A <code>TIFFColorConverter</code> object describing the color space of
-     * the encoded pixel data, or <code>null</code>.
+     * A {@code TIFFColorConverter} object describing the color space of
+     * the encoded pixel data, or {@code null}.
      */
     protected TIFFColorConverter colorConverter;
 
@@ -420,13 +420,13 @@
     // to exactly those dest pixels that are present in the source region.
 
     /**
-     * Create a <code>PixelInterleavedSampleModel</code> for use in creating
-     * an <code>ImageTypeSpecifier</code>.  Its dimensions will be 1x1 and
+     * Create a {@code PixelInterleavedSampleModel} for use in creating
+     * an {@code ImageTypeSpecifier}.  Its dimensions will be 1x1 and
      * it will have ascending band offsets as {0, 1, 2, ..., numBands}.
      *
      * @param dataType The data type (DataBuffer.TYPE_*).
      * @param numBands The number of bands.
-     * @return A <code>PixelInterleavedSampleModel</code>.
+     * @return A {@code PixelInterleavedSampleModel}.
      */
     static SampleModel createInterleavedSM(int dataType,
                                            int numBands) {
@@ -443,8 +443,8 @@
     }
 
     /**
-     * Create a <code>ComponentColorModel</code> for use in creating
-     * an <code>ImageTypeSpecifier</code>.
+     * Create a {@code ComponentColorModel} for use in creating
+     * an {@code ImageTypeSpecifier}.
      */
     // This code was copied from javax.imageio.ImageTypeSpecifier.
     static ColorModel createComponentCM(ColorSpace colorSpace,
@@ -518,8 +518,8 @@
     }
 
     /**
-     * Return the number of bits occupied by <code>dataType</code>
-     * which must be one of the <code>DataBuffer</code> <code>TYPE</code>s.
+     * Return the number of bits occupied by {@code dataType}
+     * which must be one of the {@code DataBuffer} {@code TYPE}s.
      */
     private static int getDataTypeSize(int dataType) throws IIOException {
         int dataTypeSize = 0;
@@ -578,7 +578,7 @@
     }
 
     /**
-     * Determines whether the <code>DataBuffer</code> is filled without
+     * Determines whether the {@code DataBuffer} is filled without
      * any interspersed padding bits.
      */
     private static boolean isDataBufferBitContiguous(SampleModel sm)
@@ -678,8 +678,8 @@
     }
 
     /**
-     * Reformats bit-discontiguous data into the <code>DataBuffer</code>
-     * of the supplied <code>WritableRaster</code>.
+     * Reformats bit-discontiguous data into the {@code DataBuffer}
+     * of the supplied {@code WritableRaster}.
      */
     private static void reformatDiscontiguousData(byte[] buf,
                                                   int stride,
@@ -715,21 +715,21 @@
 
     /**
      * A utility method that returns an
-     * <code>ImageTypeSpecifier</code> suitable for decoding an image
+     * {@code ImageTypeSpecifier} suitable for decoding an image
      * with the given parameters.
      *
      * @param photometricInterpretation the value of the
-     * <code>PhotometricInterpretation</code> field.
-     * @param compression the value of the <code>Compression</code> field.
+     * {@code PhotometricInterpretation} field.
+     * @param compression the value of the {@code Compression} field.
      * @param samplesPerPixel the value of the
-     * <code>SamplesPerPixel</code> field.
-     * @param bitsPerSample the value of the <code>BitsPerSample</code> field.
-     * @param sampleFormat the value of the <code>SampleFormat</code> field.
-     * @param extraSamples the value of the <code>ExtraSamples</code> field.
-     * @param colorMap the value of the <code>ColorMap</code> field.
+     * {@code SamplesPerPixel} field.
+     * @param bitsPerSample the value of the {@code BitsPerSample} field.
+     * @param sampleFormat the value of the {@code SampleFormat} field.
+     * @param extraSamples the value of the {@code ExtraSamples} field.
+     * @param colorMap the value of the {@code ColorMap} field.
      *
-     * @return a suitable <code>ImageTypeSpecifier</code>, or
-     * <code>null</code> if it is not possible to create one.
+     * @return a suitable {@code ImageTypeSpecifier}, or
+     * {@code null} if it is not possible to create one.
      */
     public static ImageTypeSpecifier
         getRawImageTypeSpecifier(int photometricInterpretation,
@@ -1216,26 +1216,26 @@
     }
 
     /**
-     * Sets the value of the <code>reader</code> field.
+     * Sets the value of the {@code reader} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
-     * @param reader the current <code>ImageReader</code>.
+     * @param reader the current {@code ImageReader}.
      */
     public void setReader(ImageReader reader) {
         this.reader = reader;
     }
 
     /**
-     * Sets the value of the <code>metadata</code> field.
+     * Sets the value of the {@code metadata} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
-     * @param metadata the <code>IIOMetadata</code> object for the
+     * @param metadata the {@code IIOMetadata} object for the
      * image being read.
      */
     public void setMetadata(IIOMetadata metadata) {
@@ -1243,10 +1243,10 @@
     }
 
     /**
-     * Sets the value of the <code>photometricInterpretation</code>
+     * Sets the value of the {@code photometricInterpretation}
      * field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1258,9 +1258,9 @@
     }
 
     /**
-     * Sets the value of the <code>compression</code> field.
+     * Sets the value of the {@code compression} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1271,13 +1271,13 @@
     }
 
     /**
-     * Sets the value of the <code>planar</code> field.
+     * Sets the value of the {@code planar} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
-     * @param planar <code>true</code> if the image to be decoded is
+     * @param planar {@code true} if the image to be decoded is
      * stored in planar format.
      */
     public void setPlanar(boolean planar) {
@@ -1285,9 +1285,9 @@
     }
 
     /**
-     * Sets the value of the <code>samplesPerPixel</code> field.
+     * Sets the value of the {@code samplesPerPixel} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1299,9 +1299,9 @@
     }
 
     /**
-     * Sets the value of the <code>bitsPerSample</code> field.
+     * Sets the value of the {@code bitsPerSample} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1314,9 +1314,9 @@
     }
 
     /**
-     * Sets the value of the <code>sampleFormat</code> field.
+     * Sets the value of the {@code sampleFormat} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1330,9 +1330,9 @@
     }
 
     /**
-     * Sets the value of the <code>extraSamples</code> field.
+     * Sets the value of the {@code extraSamples} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1346,14 +1346,14 @@
     }
 
     /**
-     * Sets the value of the <code>colorMap</code> field.
+     * Sets the value of the {@code colorMap} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
      * @param colorMap the color map to apply to the source data,
-     * as an array of <code>char</code>s.
+     * as an array of {@code char}s.
      */
     public void setColorMap(char[] colorMap) {
         this.colorMap = colorMap == null ?
@@ -1361,22 +1361,22 @@
     }
 
     /**
-     * Sets the value of the <code>stream</code> field.
+     * Sets the value of the {@code stream} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
-     * @param stream the <code>ImageInputStream</code> to be read.
+     * @param stream the {@code ImageInputStream} to be read.
      */
     public void setStream(ImageInputStream stream) {
         this.stream = stream;
     }
 
     /**
-     * Sets the value of the <code>offset</code> field.
+     * Sets the value of the {@code offset} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1388,9 +1388,9 @@
     }
 
     /**
-     * Sets the value of the <code>byteCount</code> field.
+     * Sets the value of the {@code byteCount} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1403,9 +1403,9 @@
     // Region of the file image represented in the stream
 
     /**
-     * Sets the value of the <code>srcMinX</code> field.
+     * Sets the value of the {@code srcMinX} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1418,9 +1418,9 @@
     }
 
     /**
-     * Sets the value of the <code>srcMinY</code> field.
+     * Sets the value of the {@code srcMinY} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1433,9 +1433,9 @@
     }
 
     /**
-     * Sets the value of the <code>srcWidth</code> field.
+     * Sets the value of the {@code srcWidth} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1447,9 +1447,9 @@
     }
 
     /**
-     * Sets the value of the <code>srcHeight</code> field.
+     * Sets the value of the {@code srcHeight} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1463,9 +1463,9 @@
     // First source pixel to be read
 
     /**
-     * Sets the value of the <code>sourceXOffset</code> field.
+     * Sets the value of the {@code sourceXOffset} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1477,9 +1477,9 @@
     }
 
     /**
-     * Sets the value of the <code>dstXOffset</code> field.
+     * Sets the value of the {@code dstXOffset} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1491,9 +1491,9 @@
     }
 
     /**
-     * Sets the value of the <code>sourceYOffset</code>.
+     * Sets the value of the {@code sourceYOffset}.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1505,9 +1505,9 @@
     }
 
     /**
-     * Sets the value of the <code>dstYOffset</code> field.
+     * Sets the value of the {@code dstYOffset} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1521,15 +1521,15 @@
     // Subsampling to be performed
 
     /**
-     * Sets the value of the <code>subsampleX</code> field.
+     * Sets the value of the {@code subsampleX} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
      * @param subsampleX the horizontal subsampling factor.
      *
-     * @throws IllegalArgumentException if <code>subsampleX</code> is
+     * @throws IllegalArgumentException if {@code subsampleX} is
      * less than or equal to 0.
      */
     public void setSubsampleX(int subsampleX) {
@@ -1540,15 +1540,15 @@
     }
 
     /**
-     * Sets the value of the <code>subsampleY</code> field.
+     * Sets the value of the {@code subsampleY} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
      * @param subsampleY the vertical subsampling factor.
      *
-     * @throws IllegalArgumentException if <code>subsampleY</code> is
+     * @throws IllegalArgumentException if {@code subsampleY} is
      * less than or equal to 0.
      */
     public void setSubsampleY(int subsampleY) {
@@ -1561,13 +1561,13 @@
     // Band subsetting/rearrangement
 
     /**
-     * Sets the value of the <code>sourceBands</code> field.
+     * Sets the value of the {@code sourceBands} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
-     * @param sourceBands an array of <code>int</code>s
+     * @param sourceBands an array of {@code int}s
      * specifying the source bands to be read.
      */
     public void setSourceBands(int[] sourceBands) {
@@ -1576,13 +1576,13 @@
     }
 
     /**
-     * Sets the value of the <code>destinationBands</code> field.
+     * Sets the value of the {@code destinationBands} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
-     * @param destinationBands an array of <code>int</code>s
+     * @param destinationBands an array of {@code int}s
      * specifying the destination bands to be written.
      */
     public void setDestinationBands(int[] destinationBands) {
@@ -1593,22 +1593,22 @@
     // Destination image and region
 
     /**
-     * Sets the value of the <code>image</code> field.
+     * Sets the value of the {@code image} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
-     * @param image the destination <code>BufferedImage</code>.
+     * @param image the destination {@code BufferedImage}.
      */
     public void setImage(BufferedImage image) {
         this.image = image;
     }
 
     /**
-     * Sets the value of the <code>dstMinX</code> field.
+     * Sets the value of the {@code dstMinX} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1620,9 +1620,9 @@
     }
 
     /**
-     * Sets the value of the <code>dstMinY</code> field.
+     * Sets the value of the {@code dstMinY} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1634,9 +1634,9 @@
     }
 
     /**
-     * Sets the value of the <code>dstWidth</code> field.
+     * Sets the value of the {@code dstWidth} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1647,9 +1647,9 @@
     }
 
     /**
-     * Sets the value of the <code>dstHeight</code> field.
+     * Sets the value of the {@code dstHeight} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1662,9 +1662,9 @@
     // Active source region
 
     /**
-     * Sets the value of the <code>activeSrcMinX</code> field.
+     * Sets the value of the {@code activeSrcMinX} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1676,9 +1676,9 @@
     }
 
     /**
-     * Sets the value of the <code>activeSrcMinY</code> field.
+     * Sets the value of the {@code activeSrcMinY} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1690,9 +1690,9 @@
     }
 
     /**
-     * Sets the value of the <code>activeSrcWidth</code> field.
+     * Sets the value of the {@code activeSrcWidth} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1703,9 +1703,9 @@
     }
 
     /**
-     * Sets the value of the <code>activeSrcHeight</code> field.
+     * Sets the value of the {@code activeSrcHeight} field.
      *
-     * <p> If this method is called, the <code>beginDecoding</code>
+     * <p> If this method is called, the {@code beginDecoding}
      * method must be called prior to calling any of the decode
      * methods.
      *
@@ -1716,23 +1716,23 @@
     }
 
     /**
-     * Sets the <code>TIFFColorConverter</code> object describing the color
+     * Sets the {@code TIFFColorConverter} object describing the color
      * space of the encoded data in the input stream.  If no
-     * <code>TIFFColorConverter</code> is set, no conversion will be performed.
+     * {@code TIFFColorConverter} is set, no conversion will be performed.
      *
-     * @param colorConverter a <code>TIFFColorConverter</code> object, or
-     * <code>null</code>.
+     * @param colorConverter a {@code TIFFColorConverter} object, or
+     * {@code null}.
      */
     public void setColorConverter(TIFFColorConverter colorConverter) {
         this.colorConverter = colorConverter;
     }
 
     /**
-     * Returns an <code>ImageTypeSpecifier</code> describing an image
+     * Returns an {@code ImageTypeSpecifier} describing an image
      * whose underlying data array has the same format as the raw
      * source pixel data.
      *
-     * @return an <code>ImageTypeSpecifier</code>.
+     * @return an {@code ImageTypeSpecifier}.
      */
     public ImageTypeSpecifier getRawImageType() {
         ImageTypeSpecifier its =
@@ -1747,18 +1747,18 @@
     }
 
     /**
-     * Creates a <code>BufferedImage</code> whose underlying data
+     * Creates a {@code BufferedImage} whose underlying data
      * array will be suitable for holding the raw decoded output of
-     * the <code>decodeRaw</code> method.
+     * the {@code decodeRaw} method.
      *
      * <p> The default implementation calls
-     * <code>getRawImageType</code>, and calls the resulting
-     * <code>ImageTypeSpecifier</code>'s
-     * <code>createBufferedImage</code> method.
+     * {@code getRawImageType}, and calls the resulting
+     * {@code ImageTypeSpecifier}'s
+     * {@code createBufferedImage} method.
      *
-     * @return a <code>BufferedImage</code> whose underlying data
+     * @return a {@code BufferedImage} whose underlying data
      * array has the same format as the raw source pixel data, or
-     * <code>null</code> if it is not possible to create such an
+     * {@code null} if it is not possible to create such an
      * image.
      */
     public BufferedImage createRawImage() {
@@ -1811,22 +1811,22 @@
     }
 
     /**
-     * Decodes the source data into the provided <code>byte</code>
-     * array <code>b</code>, starting at the offset given by
-     * <code>dstOffset</code>.  Each pixel occupies
-     * <code>bitsPerPixel</code> bits, with no padding between pixels.
-     * Scanlines are separated by <code>scanlineStride</code>
-     * <code>byte</code>s.
+     * Decodes the source data into the provided {@code byte}
+     * array {@code b}, starting at the offset given by
+     * {@code dstOffset}.  Each pixel occupies
+     * {@code bitsPerPixel} bits, with no padding between pixels.
+     * Scanlines are separated by {@code scanlineStride}
+     * {@code byte}s.
      *
-     * @param b a <code>byte</code> array to be written.
-     * @param dstOffset the starting offset in <code>b</code> to be
+     * @param b a {@code byte} array to be written.
+     * @param dstOffset the starting offset in {@code b} to be
      * written.
      * @param bitsPerPixel the number of bits for each pixel.
-     * @param scanlineStride the number of <code>byte</code>s to
+     * @param scanlineStride the number of {@code byte}s to
      * advance between that starting pixels of each scanline.
      *
      * @throws IOException if an error occurs reading from the source
-     * <code>ImageInputStream</code>.
+     * {@code ImageInputStream}.
      */
     public abstract void decodeRaw(byte[] b,
                                    int dstOffset,
@@ -1834,25 +1834,25 @@
                                    int scanlineStride) throws IOException;
 
     /**
-     * Decodes the source data into the provided <code>short</code>
-     * array <code>s</code>, starting at the offset given by
-     * <code>dstOffset</code>.  Each pixel occupies
-     * <code>bitsPerPixel</code> bits, with no padding between pixels.
-     * Scanlines are separated by <code>scanlineStride</code>
-     * <code>short</code>s
+     * Decodes the source data into the provided {@code short}
+     * array {@code s}, starting at the offset given by
+     * {@code dstOffset}.  Each pixel occupies
+     * {@code bitsPerPixel} bits, with no padding between pixels.
+     * Scanlines are separated by {@code scanlineStride}
+     * {@code short}s
      *
-     * <p> The default implementation calls <code>decodeRaw(byte[] b,
-     * ...)</code> and copies the resulting data into <code>s</code>.
+     * <p> The default implementation calls {@code decodeRaw(byte[] b,
+     * ...)} and copies the resulting data into {@code s}.
      *
-     * @param s a <code>short</code> array to be written.
-     * @param dstOffset the starting offset in <code>s</code> to be
+     * @param s a {@code short} array to be written.
+     * @param dstOffset the starting offset in {@code s} to be
      * written.
      * @param bitsPerPixel the number of bits for each pixel.
-     * @param scanlineStride the number of <code>short</code>s to
+     * @param scanlineStride the number of {@code short}s to
      * advance between that starting pixels of each scanline.
      *
      * @throws IOException if an error occurs reading from the source
-     * <code>ImageInputStream</code>.
+     * {@code ImageInputStream}.
      */
     public void decodeRaw(short[] s,
                           int dstOffset,
@@ -1891,25 +1891,25 @@
     }
 
     /**
-     * Decodes the source data into the provided <code>int</code>
-     * array <code>i</code>, starting at the offset given by
-     * <code>dstOffset</code>.  Each pixel occupies
-     * <code>bitsPerPixel</code> bits, with no padding between pixels.
-     * Scanlines are separated by <code>scanlineStride</code>
-     * <code>int</code>s.
+     * Decodes the source data into the provided {@code int}
+     * array {@code i}, starting at the offset given by
+     * {@code dstOffset}.  Each pixel occupies
+     * {@code bitsPerPixel} bits, with no padding between pixels.
+     * Scanlines are separated by {@code scanlineStride}
+     * {@code int}s.
      *
-     * <p> The default implementation calls <code>decodeRaw(byte[] b,
-     * ...)</code> and copies the resulting data into <code>i</code>.
+     * <p> The default implementation calls {@code decodeRaw(byte[] b,
+     * ...)} and copies the resulting data into {@code i}.
      *
-     * @param i an <code>int</code> array to be written.
-     * @param dstOffset the starting offset in <code>i</code> to be
+     * @param i an {@code int} array to be written.
+     * @param dstOffset the starting offset in {@code i} to be
      * written.
      * @param bitsPerPixel the number of bits for each pixel.
-     * @param scanlineStride the number of <code>int</code>s to
+     * @param scanlineStride the number of {@code int}s to
      * advance between that starting pixels of each scanline.
      *
      * @throws IOException if an error occurs reading from the source
-     * <code>ImageInputStream</code>.
+     * {@code ImageInputStream}.
      */
     public void decodeRaw(int[] i,
                           int dstOffset,
@@ -1953,25 +1953,25 @@
     }
 
     /**
-     * Decodes the source data into the provided <code>float</code>
-     * array <code>f</code>, starting at the offset given by
-     * <code>dstOffset</code>.  Each pixel occupies
-     * <code>bitsPerPixel</code> bits, with no padding between pixels.
-     * Scanlines are separated by <code>scanlineStride</code>
-     * <code>float</code>s.
+     * Decodes the source data into the provided {@code float}
+     * array {@code f}, starting at the offset given by
+     * {@code dstOffset}.  Each pixel occupies
+     * {@code bitsPerPixel} bits, with no padding between pixels.
+     * Scanlines are separated by {@code scanlineStride}
+     * {@code float}s.
      *
-     * <p> The default implementation calls <code>decodeRaw(byte[] b,
-     * ...)</code> and copies the resulting data into <code>f</code>.
+     * <p> The default implementation calls {@code decodeRaw(byte[] b,
+     * ...)} and copies the resulting data into {@code f}.
      *
-     * @param f a <code>float</code> array to be written.
-     * @param dstOffset the starting offset in <code>f</code> to be
+     * @param f a {@code float} array to be written.
+     * @param dstOffset the starting offset in {@code f} to be
      * written.
      * @param bitsPerPixel the number of bits for each pixel.
-     * @param scanlineStride the number of <code>float</code>s to
+     * @param scanlineStride the number of {@code float}s to
      * advance between that starting pixels of each scanline.
      *
      * @throws IOException if an error occurs reading from the source
-     * <code>ImageInputStream</code>.
+     * {@code ImageInputStream}.
      */
     public void decodeRaw(float[] f,
                           int dstOffset,
@@ -2017,25 +2017,25 @@
     }
 
     /**
-     * Decodes the source data into the provided <code>double</code>
-     * array <code>f</code>, starting at the offset given by
-     * <code>dstOffset</code>.  Each pixel occupies
-     * <code>bitsPerPixel</code> bits, with no padding between pixels.
-     * Scanlines are separated by <code>scanlineStride</code>
-     * <code>double</code>s.
+     * Decodes the source data into the provided {@code double}
+     * array {@code f}, starting at the offset given by
+     * {@code dstOffset}.  Each pixel occupies
+     * {@code bitsPerPixel} bits, with no padding between pixels.
+     * Scanlines are separated by {@code scanlineStride}
+     * {@code double}s.
      *
-     * <p> The default implementation calls <code>decodeRaw(byte[] b,
-     * ...)</code> and copies the resulting data into <code>f</code>.
+     * <p> The default implementation calls {@code decodeRaw(byte[] b,
+     * ...)} and copies the resulting data into {@code f}.
      *
-     * @param f a <code>double</code> array to be written.
-     * @param dstOffset the starting offset in <code>f</code> to be
+     * @param f a {@code double} array to be written.
+     * @param dstOffset the starting offset in {@code f} to be
      * written.
      * @param bitsPerPixel the number of bits for each pixel.
-     * @param scanlineStride the number of <code>double</code>s to
+     * @param scanlineStride the number of {@code double}s to
      * advance between that starting pixels of each scanline.
      *
      * @throws IOException if an error occurs reading from the source
-     * <code>ImageInputStream</code>.
+     * {@code ImageInputStream}.
      */
     public void decodeRaw(double[] d,
                           int dstOffset,
@@ -2104,16 +2104,16 @@
 
     /**
      * This routine is called prior to a sequence of calls to the
-     * <code>decode</code> method, in order to allow any necessary
+     * {@code decode} method, in order to allow any necessary
      * tables or other structures to be initialized based on metadata
      * values.  This routine is guaranteed to be called any time the
      * metadata values have changed.
      *
      * <p> The default implementation computes tables used by the
-     * <code>decode</code> method to rescale components to different
+     * {@code decode} method to rescale components to different
      * bit depths.  Thus, if this method is overridden, it is
-     * important for the subclass method to call <code>super()</code>,
-     * unless it overrides <code>decode</code> as well.
+     * important for the subclass method to call {@code super()},
+     * unless it overrides {@code decode} as well.
      */
     public void beginDecoding() {
         // Note: This method assumes that sourceBands, destinationBands,
@@ -2242,35 +2242,35 @@
 
     /**
      * Decodes the input bit stream (located in the
-     * <code>ImageInputStream</code> <code>stream</code>, at offset
-     * <code>offset</code>, and continuing for <code>byteCount</code>
-     * bytes) into the output <code>BufferedImage</code>
-     * <code>image</code>.
+     * {@code ImageInputStream} {@code stream}, at offset
+     * {@code offset}, and continuing for {@code byteCount}
+     * bytes) into the output {@code BufferedImage}
+     * {@code image}.
      *
      * <p> The default implementation analyzes the destination image
      * to determine if it is suitable as the destination for the
-     * <code>decodeRaw</code> method.  If not, a suitable image is
-     * created.  Next, <code>decodeRaw</code> is called to perform the
+     * {@code decodeRaw} method.  If not, a suitable image is
+     * created.  Next, {@code decodeRaw} is called to perform the
      * actual decoding, and the results are copied into the
      * destination image if necessary.  Subsampling and offsetting are
      * performed automatically.
      *
      * <p> The precise responsibilities of this routine are as
      * follows.  The input bit stream is defined by the instance
-     * variables <code>stream</code>, <code>offset</code>, and
-     * <code>byteCount</code>.  These bits contain the data for the
-     * region of the source image defined by <code>srcMinX</code>,
-     * <code>srcMinY</code>, <code>srcWidth</code>, and
-     * <code>srcHeight</code>.
+     * variables {@code stream}, {@code offset}, and
+     * {@code byteCount}.  These bits contain the data for the
+     * region of the source image defined by {@code srcMinX},
+     * {@code srcMinY}, {@code srcWidth}, and
+     * {@code srcHeight}.
      *
      * <p> The source data is required to be subsampling, starting at
-     * the <code>sourceXOffset</code>th column and including
-     * every <code>subsampleX</code>th pixel thereafter (and similarly
-     * for <code>sourceYOffset</code> and
-     * <code>subsampleY</code>).
+     * the {@code sourceXOffset}th column and including
+     * every {@code subsampleX}th pixel thereafter (and similarly
+     * for {@code sourceYOffset} and
+     * {@code subsampleY}).
      *
      * <p> Pixels are copied into the destination with an addition shift of
-     * (<code>dstXOffset</code>, <code>dstYOffset</code>).  The complete
+     * ({@code dstXOffset}, {@code dstYOffset}).  The complete
      * set of formulas relating the source and destination coordinate spaces
      * are:
      *
@@ -2279,9 +2279,9 @@
      * dy = (sy - sourceYOffset)/subsampleY + dstYOffset;
      * </pre>
      *
-     * Only source pixels such that <code>(sx - sourceXOffset) %
-     * subsampleX == 0</code> and <code>(sy - sourceYOffset) %
-     * subsampleY == 0</code> are copied.
+     * Only source pixels such that {@code (sx - sourceXOffset) %
+     * subsampleX == 0} and {@code (sy - sourceYOffset) %
+     * subsampleY == 0} are copied.
      *
      * <p> The inverse mapping, from destination to source coordinates,
      * is one-to-one:
@@ -2292,9 +2292,9 @@
      * </pre>
      *
      * <p> The region of the destination image to be updated is given
-     * by the instance variables <code>dstMinX</code>,
-     * <code>dstMinY</code>, <code>dstWidth</code>, and
-     * <code>dstHeight</code>.
+     * by the instance variables {@code dstMinX},
+     * {@code dstMinY}, {@code dstWidth}, and
+     * {@code dstHeight}.
      *
      * <p> It is possible that not all of the source data being read
      * will contribute to the destination image.  For example, the
@@ -2303,32 +2303,32 @@
      * convenience, the bounds of the active source region (that is,
      * the region of the strip or tile being read that actually
      * contributes to the destination image, taking clipping into
-     * account) are available as <code>activeSrcMinX</code>,
-     * <code>activeSrcMinY</code>, <code>activeSrcWidth</code> and
-     * <code>activeSrcHeight</code>.  Thus, the source pixel at
-     * (<code>activeSrcMinX</code>, <code>activeSrcMinY</code>) will
-     * map to the destination pixel (<code>dstMinX</code>,
-     * <code>dstMinY</code>).
+     * account) are available as {@code activeSrcMinX},
+     * {@code activeSrcMinY}, {@code activeSrcWidth} and
+     * {@code activeSrcHeight}.  Thus, the source pixel at
+     * ({@code activeSrcMinX}, {@code activeSrcMinY}) will
+     * map to the destination pixel ({@code dstMinX},
+     * {@code dstMinY}).
      *
      * <p> The sequence of source bands given by
-     * <code>sourceBands</code> are to be copied into the sequence of
+     * {@code sourceBands} are to be copied into the sequence of
      * bands in the destination given by
-     * <code>destinationBands</code>.
+     * {@code destinationBands}.
      *
      * <p> Some standard tag information is provided the instance
-     * variables <code>photometricInterpretation</code>,
-     * <code>compression</code>, <code>samplesPerPixel</code>,
-     * <code>bitsPerSample</code>, <code>sampleFormat</code>,
-     * <code>extraSamples</code>, and <code>colorMap</code>.
+     * variables {@code photometricInterpretation},
+     * {@code compression}, {@code samplesPerPixel},
+     * {@code bitsPerSample}, {@code sampleFormat},
+     * {@code extraSamples}, and {@code colorMap}.
      *
      * <p> In practice, unless there is a significant performance
      * advantage to be gained by overriding this routine, most users
      * will prefer to use the default implementation of this routine,
-     * and instead override the <code>decodeRaw</code> and/or
-     * <code>getRawImageType</code> methods.
+     * and instead override the {@code decodeRaw} and/or
+     * {@code getRawImageType} methods.
      *
      * @exception IOException if an error occurs in
-     * <code>decodeRaw</code>.
+     * {@code decodeRaw}.
      */
     public void decode() throws IOException {
         byte[] byteData = null;
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFExifJPEGCompressor.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFExifJPEGCompressor.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,7 @@
 import javax.imageio.plugins.tiff.BaselineTIFFTagSet;
 
 /**
- * A <code>TIFFCompressor</code> for the JPEG variant of Exif.
+ * A {@code TIFFCompressor} for the JPEG variant of Exif.
  */
 public class TIFFExifJPEGCompressor extends TIFFBaseJPEGCompressor {
     public TIFFExifJPEGCompressor(ImageWriteParam param) {
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFFaxCompressor.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFFaxCompressor.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -232,12 +232,12 @@
     }
 
     /**
-     * Sets the value of the <code>metadata</code> field.
+     * Sets the value of the {@code metadata} field.
      *
      * <p> The implementation in this class also sets local options
      * from the FILL_ORDER field if it exists.</p>
      *
-     * @param metadata the <code>IIOMetadata</code> object for the
+     * @param metadata the {@code IIOMetadata} object for the
      * image being written.
      *
      * @see #getMetadata()
@@ -253,8 +253,8 @@
     }
 
     /**
-     * Return min of <code>maxOffset</code> or offset of first pixel
-     * different from pixel at <code>bitOffset</code>.
+     * Return min of {@code maxOffset} or offset of first pixel
+     * different from pixel at {@code bitOffset}.
      */
     public int nextState(byte[] data,
                           int    base,
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFFieldNode.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFFieldNode.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,12 +34,12 @@
 import javax.imageio.plugins.tiff.TIFFTagSet;
 
 /**
- * The <code>Node</code> representation of a <code>TIFFField</code>
+ * The {@code Node} representation of a {@code TIFFField}
  * wherein the child node is procedural rather than buffered.
  */
 public class TIFFFieldNode extends IIOMetadataNode {
     private static String getNodeName(TIFFField f) {
-        return f.getData() instanceof TIFFDirectory ?
+        return (f.hasDirectory() || f.getData() instanceof TIFFDirectory) ?
             "TIFFIFD" : "TIFFField";
     }
 
@@ -52,7 +52,8 @@
     public TIFFFieldNode(TIFFField field) {
         super(getNodeName(field));
 
-        isIFD = field.getData() instanceof TIFFDirectory;
+        isIFD = field.hasDirectory() ||
+            field.getData() instanceof TIFFDirectory;
 
         this.field = field;
 
@@ -68,7 +69,8 @@
                 setAttribute("parentTagName", tagName);
             }
 
-            TIFFDirectory dir = (TIFFDirectory)field.getData();
+            TIFFDirectory dir = field.hasDirectory() ?
+                field.getDirectory() : (TIFFDirectory)field.getData();
             TIFFTagSet[] tagSets = dir.getTagSets();
             if(tagSets != null) {
                 StringBuilder tagSetNames = new StringBuilder();
@@ -90,7 +92,8 @@
         if(isInitialized) return;
 
         if(isIFD) {
-            TIFFDirectory dir = (TIFFDirectory)field.getData();
+            TIFFDirectory dir = field.hasDirectory() ?
+                field.getDirectory() : (TIFFDirectory)field.getData();
             TIFFField[] fields = dir.getTIFFFields();
             if(fields != null) {
                 TIFFTagSet[] tagSets = dir.getTagSets();
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFIFD.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFIFD.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -153,7 +153,7 @@
     }
 
     /**
-     * Returns an <code>Iterator</code> over the TIFF fields. The
+     * Returns an {@code Iterator} over the TIFF fields. The
      * traversal is in the order of increasing tag number.
      */
     // Note: the sort is guaranteed for low fields by the use of an
@@ -164,7 +164,7 @@
     }
 
     /**
-     * Read the value of a field. The <code>data</code> parameter should be
+     * Read the value of a field. The {@code data} parameter should be
      * an array of length 1 of Object.
      *
      * @param stream the input stream
@@ -762,8 +762,8 @@
     }
 
     /**
-     * Returns a <code>TIFFIFD</code> wherein all fields from the
-     * <code>BaselineTIFFTagSet</code> are copied by value and all other
+     * Returns a {@code TIFFIFD} wherein all fields from the
+     * {@code BaselineTIFFTagSet} are copied by value and all other
      * fields copied by reference.
      */
     public TIFFIFD getShallowClone() {
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFImageMetadata.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFImageMetadata.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1620,8 +1620,8 @@
     }
 
     /**
-     * Returns a <code>TIFFImageMetadata</code> wherein all fields in the
-     * root IFD from the <code>BaselineTIFFTagSet</code> are copied by value
+     * Returns a {@code TIFFImageMetadata} wherein all fields in the
+     * root IFD from the {@code BaselineTIFFTagSet} are copied by value
      * and all other fields copied by reference.
      */
     public TIFFImageMetadata getShallowClone() {
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFImageReader.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFImageReader.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -83,7 +83,7 @@
     // Metadata for image at 'currIndex', or null.
     private TIFFImageMetadata imageMetadata = null;
 
-    // A <code>List</code> of <code>Long</code>s indicating the stream
+    // A {@code List} of {@code Long}s indicating the stream
     // positions of the start of the IFD for each image.  Entries
     // are added as needed.
     private List<Long> imageStartPosition = new ArrayList<Long>();
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFImageWriteParam.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFImageWriteParam.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -122,11 +122,11 @@
  * quality value is passed directly to the JPEG writer plug-in which
  * interprets it in the usual way.</p>
  *
- * <p> The <code>canWriteTiles</code> and
- * <code>canWriteCompressed</code> methods will return
- * <code>true</code>; the <code>canOffsetTiles</code> and
- * <code>canWriteProgressive</code> methods will return
- * <code>false</code>.</p>
+ * <p> The {@code canWriteTiles} and
+ * {@code canWriteCompressed} methods will return
+ * {@code true}; the {@code canOffsetTiles} and
+ * {@code canWriteProgressive} methods will return
+ * {@code false}.</p>
  *
  * <p> If tiles are being written, then each of their dimensions will be
  * rounded to the nearest multiple of 16 per the TIFF specification. If
@@ -140,10 +140,10 @@
 public class TIFFImageWriteParam extends ImageWriteParam {
 
     /**
-     * Constructs a <code>TIFFImageWriteParam</code> instance
-     * for a given <code>Locale</code>.
+     * Constructs a {@code TIFFImageWriteParam} instance
+     * for a given {@code Locale}.
      *
-     * @param locale the <code>Locale</code> for which messages
+     * @param locale the {@code Locale} for which messages
      * should be localized.
      */
     public TIFFImageWriteParam(Locale locale) {
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFImageWriter.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFImageWriter.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -221,11 +221,11 @@
      * relative to a given tile grid layout specified by its X offset
      * and tile width.
      *
-     * <p> If <code>tileWidth < 0</code>, the results of this method
-     * are undefined.  If <code>tileWidth == 0</code>, an
-     * <code>ArithmeticException</code> will be thrown.
+     * <p> If {@code tileWidth < 0}, the results of this method
+     * are undefined.  If {@code tileWidth == 0}, an
+     * {@code ArithmeticException} will be thrown.
      *
-     * @throws ArithmeticException  If <code>tileWidth == 0</code>.
+     * @throws ArithmeticException  If {@code tileWidth == 0}.
      */
     public static int XToTileX(int x, int tileGridXOffset, int tileWidth) {
         x -= tileGridXOffset;
@@ -240,11 +240,11 @@
      * relative to a given tile grid layout specified by its Y offset
      * and tile height.
      *
-     * <p> If <code>tileHeight < 0</code>, the results of this method
-     * are undefined.  If <code>tileHeight == 0</code>, an
-     * <code>ArithmeticException</code> will be thrown.
+     * <p> If {@code tileHeight < 0}, the results of this method
+     * are undefined.  If {@code tileHeight == 0}, an
+     * {@code ArithmeticException} will be thrown.
      *
-     * @throws ArithmeticException  If <code>tileHeight == 0</code>.
+     * @throws ArithmeticException  If {@code tileHeight == 0}.
      */
     public static int YToTileY(int y, int tileGridYOffset, int tileHeight) {
         y -= tileGridYOffset;
@@ -424,17 +424,17 @@
     }
 
     /**
-     * Converts a standard <code>javax_imageio_1.0</code> tree to a
-     * <code>TIFFImageMetadata</code> object.
+     * Converts a standard {@code javax_imageio_1.0} tree to a
+     * {@code TIFFImageMetadata} object.
      *
      * @param inData The metadata object.
-     * @return a <code>TIFFImageMetadata</code> or <code>null</code> if
-     * the standard tree derived from the input object is <code>null</code>.
-     * @throws IllegalArgumentException if <code>inData</code> is
-     * <code>null</code>.
-     * @throws IllegalArgumentException if <code>inData</code> does not support
+     * @return a {@code TIFFImageMetadata} or {@code null} if
+     * the standard tree derived from the input object is {@code null}.
+     * @throws IllegalArgumentException if {@code inData} is
+     * {@code null}.
+     * @throws IllegalArgumentException if {@code inData} does not support
      * the standard metadata format.
-     * @throws IIOInvalidTreeException if <code>inData</code> generates an
+     * @throws IIOInvalidTreeException if {@code inData} generates an
      * invalid standard metadata tree.
      */
     private TIFFImageMetadata convertStandardImageMetadata(IIOMetadata inData)
@@ -463,15 +463,15 @@
 
     /**
      * Converts a native
-     * <code>javax_imageio_tiff_image_1.0</code> tree to a
-     * <code>TIFFImageMetadata</code> object.
+     * {@code javax_imageio_tiff_image_1.0} tree to a
+     * {@code TIFFImageMetadata} object.
      *
      * @param inData The metadata object.
-     * @return a <code>TIFFImageMetadata</code> or <code>null</code> if
-     * the native tree derived from the input object is <code>null</code>.
-     * @throws IllegalArgumentException if <code>inData</code> is
-     * <code>null</code> or does not support the native metadata format.
-     * @throws IIOInvalidTreeException if <code>inData</code> generates an
+     * @return a {@code TIFFImageMetadata} or {@code null} if
+     * the native tree derived from the input object is {@code null}.
+     * @throws IllegalArgumentException if {@code inData} is
+     * {@code null} or does not support the native metadata format.
+     * @throws IIOInvalidTreeException if {@code inData} generates an
      * invalid native metadata tree.
      */
     private TIFFImageMetadata convertNativeImageMetadata(IIOMetadata inData)
@@ -504,8 +504,8 @@
      * as needed. The destination image dimensions are provided as parameters
      * because these might differ from those of the source due to subsampling.
      *
-     * @param cm The <code>ColorModel</code> of the image being written.
-     * @param sm The <code>SampleModel</code> of the image being written.
+     * @param cm The {@code ColorModel} of the image being written.
+     * @param sm The {@code SampleModel} of the image being written.
      * @param destWidth The width of the written image after subsampling.
      * @param destHeight The height of the written image after subsampling.
      */
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFJPEGCompressor.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFJPEGCompressor.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -102,14 +102,14 @@
     }
 
     /**
-     * Sets the value of the <code>metadata</code> field.
+     * Sets the value of the {@code metadata} field.
      *
      * <p>The implementation in this class also adds the TIFF fields
      * JPEGTables, YCbCrSubSampling, YCbCrPositioning, and
      * ReferenceBlackWhite superseding any prior settings of those
      * fields.</p>
      *
-     * @param metadata the <code>IIOMetadata</code> object for the
+     * @param metadata the {@code IIOMetadata} object for the
      * image being written.
      *
      * @see #getMetadata()
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFLZWDecompressor.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFLZWDecompressor.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -245,7 +245,7 @@
     }
 
     /**
-     * Append <code>newString</code> to the end of <code>oldString</code>.
+     * Append {@code newString} to the end of {@code oldString}.
      */
     public byte[] composeString(byte oldString[], byte newString) {
         int length = oldString.length;
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFLZWUtil.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFLZWUtil.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -188,7 +188,7 @@
     }
 
     /**
-     * Append <code>newString</code> to the end of <code>oldString</code>.
+     * Append {@code newString} to the end of {@code oldString}.
      */
     public byte[] composeString(byte oldString[], byte newString) {
         int length = oldString.length;
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFNullDecompressor.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFNullDecompressor.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,16 +34,16 @@
      */
     private boolean isReadActiveOnly = false;
 
-    /** The original value of <code>srcMinX</code>. */
+    /** The original value of {@code srcMinX}. */
     private int originalSrcMinX;
 
-    /** The original value of <code>srcMinY</code>. */
+    /** The original value of {@code srcMinY}. */
     private int originalSrcMinY;
 
-    /** The original value of <code>srcWidth</code>. */
+    /** The original value of {@code srcWidth}. */
     private int originalSrcWidth;
 
-    /** The original value of <code>srcHeight</code>. */
+    /** The original value of {@code srcHeight}. */
     private int originalSrcHeight;
 
     public TIFFNullDecompressor() {}
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFOldJPEGDecompressor.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFOldJPEGDecompressor.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,7 +34,7 @@
 import javax.imageio.plugins.tiff.TIFFField;
 
 /**
- * <code>TIFFDecompressor</code> for "Old JPEG" compression.
+ * {@code TIFFDecompressor} for "Old JPEG" compression.
  */
 public class TIFFOldJPEGDecompressor extends TIFFJPEGDecompressor {
 
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFRLECompressor.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFRLECompressor.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -42,8 +42,8 @@
      * CCITT RLE (Run Lenth Encoding).
      *
      * @param data        The row of data to compress.
-     * @param rowOffset   Starting index in <code>data</code>.
-     * @param colOffset   Bit offset within first <code>data[rowOffset]</code>.
+     * @param rowOffset   Starting index in {@code data}.
+     * @param colOffset   Bit offset within first {@code data[rowOffset]}.
      * @param rowLength   Number of bits in the row.
      * @param compData    The compressed data.
      *
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFRenderedImage.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFRenderedImage.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -85,15 +85,15 @@
     }
 
     /**
-     * Creates a copy of <code>param</code>. The source subsampling and
+     * Creates a copy of {@code param}. The source subsampling and
      * and bands settings and the destination bands and offset settings
-     * are copied. If <code>param</code> is a <code>TIFFImageReadParam</code>
-     * then the <code>TIFFDecompressor</code> and
-     * <code>TIFFColorConverter</code> settings are also copied; otherwise
-     * they are explicitly set to <code>null</code>.
+     * are copied. If {@code param} is a {@code TIFFImageReadParam}
+     * then the {@code TIFFDecompressor} and
+     * {@code TIFFColorConverter} settings are also copied; otherwise
+     * they are explicitly set to {@code null}.
      *
      * @param param the parameters to be copied.
-     * @param copyTagSets whether the <code>TIFFTagSet</code> settings
+     * @param copyTagSets whether the {@code TIFFTagSet} settings
      * should be copied if set.
      * @return copied parameters.
      */
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFT4Compressor.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFT4Compressor.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -41,13 +41,13 @@
     }
 
     /**
-     * Sets the value of the <code>metadata</code> field.
+     * Sets the value of the {@code metadata} field.
      *
      * <p> The implementation in this class also sets local options
      * from the T4_OPTIONS field if it exists, and if it doesn't, adds
      * it with default values.</p>
      *
-     * @param metadata the <code>IIOMetadata</code> object for the
+     * @param metadata the {@code IIOMetadata} object for the
      * image being written.
      *
      * @see #getMetadata()
@@ -86,7 +86,7 @@
      * @param isEOLAligned Whether EOL bit sequences should be padded.
      * @param data         The row of data to compress.
      * @param lineStride   Byte step between the same sample in different rows.
-     * @param colOffset    Bit offset within first <code>data[rowOffset]</code>.
+     * @param colOffset    Bit offset within first {@code data[rowOffset]}.
      * @param width        Number of bits in the row.
      * @param height       Number of rows in the buffer.
      * @param compData     The compressed data.
--- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFT6Compressor.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFT6Compressor.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -42,7 +42,7 @@
      *
      * @param data        The row of data to compress.
      * @param lineStride  Byte step between the same sample in different rows.
-     * @param colOffset   Bit offset within first <code>data[rowOffset]</code>.
+     * @param colOffset   Bit offset within first {@code data[rowOffset]}.
      * @param width       Number of bits in the row.
      * @param height      Number of rows in the buffer.
      * @param compData    The compressed data.
--- a/jdk/src/java.desktop/share/classes/com/sun/media/sound/AiffFileReader.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/media/sound/AiffFileReader.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,11 +26,11 @@
 package com.sun.media.sound;
 
 import java.io.DataInputStream;
-import java.io.DataOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
 import javax.sound.sampled.AudioFileFormat;
+import javax.sound.sampled.AudioFileFormat.Type;
 import javax.sound.sampled.AudioFormat;
 import javax.sound.sampled.AudioSystem;
 import javax.sound.sampled.UnsupportedAudioFileException;
@@ -49,11 +49,6 @@
             throws UnsupportedAudioFileException, IOException {
         DataInputStream dis = new DataInputStream(stream);
 
-        // assumes a stream at the beginning of the file which has already
-        // passed the magic number test...
-        // leaves the input stream at the beginning of the audio data
-        int fileRead = 0;
-        int dataLength = 0;
         AudioFormat format = null;
 
         // Read the magic number
@@ -65,9 +60,9 @@
             throw new UnsupportedAudioFileException("not an AIFF file");
         }
 
+        int frameLength = 0;
         int length = dis.readInt();
         int iffType = dis.readInt();
-        fileRead += 12;
 
         int totallength;
         if(length <= 0 ) {
@@ -91,7 +86,6 @@
             // Read the chunk name
             int chunkName = dis.readInt();
             int chunkLen = dis.readInt();
-            fileRead += 8;
 
             int chunkRead = 0;
 
@@ -112,7 +106,13 @@
                 if (channels <= 0) {
                     throw new UnsupportedAudioFileException("Invalid number of channels");
                 }
-                dis.readInt(); // numSampleFrames
+                frameLength = dis.readInt(); // numSampleFrames
+                if (frameLength < 0) {
+                    // AiffFileFormat uses int, unlike AIS which uses long
+                    //TODO this (negative) value should be passed as long to AIS
+                    frameLength = AudioSystem.NOT_SPECIFIED;
+                }
+
                 int sampleSizeInBits = dis.readUnsignedShort();
                 if (sampleSizeInBits < 1 || sampleSizeInBits > 32) {
                     throw new UnsupportedAudioFileException("Invalid AIFF/COMM sampleSize");
@@ -149,38 +149,17 @@
                 break;
             case AiffFileFormat.SSND_MAGIC:
                 // Data chunk.
-                // we are getting *weird* numbers for chunkLen sometimes;
-                // this really should be the size of the data chunk....
-                int dataOffset = dis.readInt();
-                int blocksize = dis.readInt();
+                int dataOffset = dis.readInt(); // for now unused in javasound
+                int blocksize = dis.readInt();  // for now unused in javasound
                 chunkRead += 8;
-
-                // okay, now we are done reading the header.  we need to set the size
-                // of the data segment.  we know that sometimes the value we get for
-                // the chunksize is absurd.  this is the best i can think of:if the
-                // value seems okay, use it.  otherwise, we get our value of
-                // length by assuming that everything left is the data segment;
-                // its length should be our original length (for all AIFF data chunks)
-                // minus what we've read so far.
-                // $$kk: we should be able to get length for the data chunk right after
-                // we find "SSND."  however, some aiff files give *weird* numbers.  what
-                // is going on??
-
-                if (chunkLen < length) {
-                    dataLength = chunkLen - chunkRead;
-                } else {
-                    // $$kk: 11.03.98: this seems dangerous!
-                    dataLength = length - (fileRead + chunkRead);
-                }
                 ssndFound = true;
                 break;
             } // switch
-            fileRead += chunkRead;
             // skip the remainder of this chunk
             if (!ssndFound) {
                 int toSkip = chunkLen - chunkRead;
                 if (toSkip > 0) {
-                    fileRead += dis.skipBytes(toSkip);
+                    dis.skipBytes(toSkip);
                 }
             }
         } // while
@@ -188,36 +167,12 @@
         if (format == null) {
             throw new UnsupportedAudioFileException("missing COMM chunk");
         }
-        AudioFileFormat.Type type = aifc?AudioFileFormat.Type.AIFC:AudioFileFormat.Type.AIFF;
+        Type type = aifc ? Type.AIFC : Type.AIFF;
 
-        return new AiffFileFormat(type, totallength, format, dataLength / format.getFrameSize());
+        return new AiffFileFormat(type, totallength, format, frameLength);
     }
 
     // HELPER METHODS
-    /** write_ieee_extended(DataOutputStream dos, double f) throws IOException {
-     * Extended precision IEEE floating-point conversion routine.
-     * @argument DataOutputStream
-     * @argument double
-     * @return void
-     * @exception IOException
-     */
-    private void write_ieee_extended(DataOutputStream dos, double f) throws IOException {
-
-        int exponent = 16398;
-        double highMantissa = f;
-
-        // For now write the integer portion of f
-        // $$jb: 03.30.99: stay in synch with JMF on this!!!!
-        while (highMantissa < 44000) {
-            highMantissa *= 2;
-            exponent--;
-        }
-        dos.writeShort(exponent);
-        dos.writeInt( ((int) highMantissa) << 16);
-        dos.writeInt(0); // low Mantissa
-    }
-
-
     /**
      * read_ieee_extended
      * Extended precision IEEE floating-point conversion routine.
--- a/jdk/src/java.desktop/share/classes/com/sun/media/sound/AiffFileWriter.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/media/sound/AiffFileWriter.java	Mon Mar 14 17:51:25 2016 +0100
@@ -59,7 +59,6 @@
         super(new AudioFileFormat.Type[]{AudioFileFormat.Type.AIFF});
     }
 
-
     // METHODS TO IMPLEMENT AudioFileWriter
 
     @Override
@@ -83,7 +82,6 @@
         return new AudioFileFormat.Type[0];
     }
 
-
     @Override
     public int write(AudioInputStream stream, AudioFileFormat.Type fileType, OutputStream out) throws IOException {
         Objects.requireNonNull(stream);
@@ -102,11 +100,9 @@
             throw new IOException("stream length not specified");
         }
 
-        int bytesWritten = writeAiffFile(stream, aiffFileFormat, out);
-        return bytesWritten;
+        return writeAiffFile(stream, aiffFileFormat, out);
     }
 
-
     @Override
     public int write(AudioInputStream stream, AudioFileFormat.Type fileType, File out) throws IOException {
         Objects.requireNonNull(stream);
@@ -129,12 +125,15 @@
 
             // $$kk: 10.22.99: jan: please either implement this or throw an exception!
             // $$fb: 2001-07-13: done. Fixes Bug 4479981
-            int ssndBlockSize           = (aiffFileFormat.getFormat().getChannels() * aiffFileFormat.getFormat().getSampleSizeInBits());
+            int channels = aiffFileFormat.getFormat().getChannels();
+            int sampleSize = aiffFileFormat.getFormat().getSampleSizeInBits();
+            int ssndBlockSize = channels * ((sampleSize + 7) / 8);
 
             int aiffLength=bytesWritten;
             int ssndChunkSize=aiffLength-aiffFileFormat.getHeaderSize()+16;
             long dataSize=ssndChunkSize-16;
-            int numFrames=(int) (dataSize*8/ssndBlockSize);
+            //TODO possibly incorrect round
+            int numFrames = (int) (dataSize / ssndBlockSize);
 
             RandomAccessFile raf=new RandomAccessFile(out, "rw");
             // skip FORM magic
@@ -173,12 +172,7 @@
         AudioFormat streamFormat = stream.getFormat();
         AudioFormat.Encoding streamEncoding = streamFormat.getEncoding();
 
-
-        float sampleRate;
         int sampleSizeInBits;
-        int channels;
-        int frameSize;
-        float frameRate;
         int fileSize;
         boolean convert8to16 = false;
 
@@ -235,7 +229,6 @@
         return fileFormat;
     }
 
-
     private int writeAiffFile(InputStream in, AiffFileFormat aiffFileFormat, OutputStream out) throws IOException {
 
         int bytesRead = 0;
@@ -275,25 +268,20 @@
         AudioFormat.Encoding encoding = null;
 
         //$$fb a little bit nicer handling of constants
-
-        //int headerSize          = 54;
         int headerSize          = aiffFileFormat.getHeaderSize();
-
         //int fverChunkSize       = 0;
         int fverChunkSize       = aiffFileFormat.getFverChunkSize();
-        //int commChunkSize       = 26;
         int commChunkSize       = aiffFileFormat.getCommChunkSize();
         int aiffLength          = -1;
         int ssndChunkSize       = -1;
-        //int ssndOffset                        = headerSize - 16;
         int ssndOffset                  = aiffFileFormat.getSsndChunkOffset();
         short channels = (short) format.getChannels();
         short sampleSize = (short) format.getSampleSizeInBits();
-        int ssndBlockSize               = (channels * sampleSize);
-        int numFrames                   = aiffFileFormat.getFrameLength();
-        long dataSize            = -1;
+        int ssndBlockSize = channels * ((sampleSize + 7) / 8);
+        int numFrames = aiffFileFormat.getFrameLength();
+        long dataSize = -1;
         if( numFrames != AudioSystem.NOT_SPECIFIED) {
-            dataSize = (long) numFrames * ssndBlockSize / 8;
+            dataSize = (long) numFrames * ssndBlockSize;
             ssndChunkSize = (int)dataSize + 16;
             aiffLength = (int)dataSize+headerSize;
         }
@@ -403,9 +391,6 @@
 
     }
 
-
-
-
     // HELPER METHODS
 
     private static final int DOUBLE_MANTISSA_LENGTH = 52;
@@ -452,6 +437,4 @@
         dos.writeShort(extendedBits79To64);
         dos.writeLong(extendedBits63To0);
     }
-
-
 }
--- a/jdk/src/java.desktop/share/classes/com/sun/media/sound/WaveExtensibleFileReader.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/media/sound/WaveExtensibleFileReader.java	Mon Mar 14 17:51:25 2016 +0100
@@ -255,16 +255,17 @@
     public AudioInputStream getAudioInputStream(final InputStream stream)
             throws UnsupportedAudioFileException, IOException {
 
-        AudioFileFormat format = getAudioFileFormat(stream);
+        final AudioFileFormat format = getAudioFileFormat(stream);
         // we've got everything, the stream is supported and it is at the
         // beginning of the header, so find the data chunk again and return an
         // AudioInputStream
-        RIFFReader riffiterator = new RIFFReader(stream);
+        final RIFFReader riffiterator = new RIFFReader(stream);
         while (riffiterator.hasNextChunk()) {
             RIFFReader chunk = riffiterator.nextChunk();
             if (chunk.getFormat().equals("data")) {
-                return new AudioInputStream(chunk, format.getFormat(), chunk
-                        .getSize());
+                final AudioFormat af = format.getFormat();
+                final long length = chunk.getSize() / af.getFrameSize();
+                return new AudioInputStream(chunk, af, length);
             }
         }
         throw new UnsupportedAudioFileException();
--- a/jdk/src/java.desktop/share/classes/com/sun/media/sound/WaveFloatFileReader.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/com/sun/media/sound/WaveFloatFileReader.java	Mon Mar 14 17:51:25 2016 +0100
@@ -95,16 +95,17 @@
     public AudioInputStream getAudioInputStream(final InputStream stream)
             throws UnsupportedAudioFileException, IOException {
 
-        AudioFileFormat format = getAudioFileFormat(stream);
+        final AudioFileFormat format = getAudioFileFormat(stream);
         // we've got everything, the stream is supported and it is at the
         // beginning of the header, so find the data chunk again and return an
         // AudioInputStream
-        RIFFReader riffiterator = new RIFFReader(stream);
+        final RIFFReader riffiterator = new RIFFReader(stream);
         while (riffiterator.hasNextChunk()) {
             RIFFReader chunk = riffiterator.nextChunk();
             if (chunk.getFormat().equals("data")) {
-                return new AudioInputStream(chunk, format.getFormat(),
-                        chunk.getSize());
+                final AudioFormat af = format.getFormat();
+                final long length = chunk.getSize() / af.getFrameSize();
+                return new AudioInputStream(chunk, af, length);
             }
         }
         throw new UnsupportedAudioFileException();
--- a/jdk/src/java.desktop/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java	Mon Mar 14 17:51:25 2016 +0100
@@ -231,7 +231,9 @@
             // Before all the checks below we first see if it's an FTP provider or a focus cycle root.
             // If it's the case just go down cycle (if it's set to "implicit").
             Component comp = getComponentDownCycle(aComponent, FORWARD_TRAVERSAL);
-            if (comp != null) {
+            // Check if aComponent is focus-cycle-root's default Component, i.e.
+            // focus cycle root & focus-cycle-root's default Component is same.
+            if (comp != null && comp != aComponent) {
                 return comp;
             }
 
--- a/jdk/src/java.desktop/share/classes/java/beans/EventHandler.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/java/beans/EventHandler.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -526,8 +526,11 @@
      * @throws NullPointerException if {@code listenerInterface} is null
      * @throws NullPointerException if {@code target} is null
      * @throws NullPointerException if {@code action} is null
-     *
+     * @throws IllegalArgumentException if creating a Proxy for
+     *         {@code listenerInterface} fails for any of the restrictions
+     *         specified by {@link Proxy#newProxyInstance}
      * @see #create(Class, Object, String, String)
+     * @see Proxy#newProxyInstance
      */
     public static <T> T create(Class<T> listenerInterface,
                                Object target, String action)
@@ -584,8 +587,11 @@
      * @throws NullPointerException if {@code listenerInterface} is null
      * @throws NullPointerException if {@code target} is null
      * @throws NullPointerException if {@code action} is null
-     *
+     * @throws IllegalArgumentException if creating a Proxy for
+     *         {@code listenerInterface} fails for any of the restrictions
+     *         specified by {@link Proxy#newProxyInstance}
      * @see #create(Class, Object, String, String, String)
+     * @see Proxy#newProxyInstance
      */
     public static <T> T create(Class<T> listenerInterface,
                                Object target, String action,
@@ -675,8 +681,11 @@
      * @throws NullPointerException if {@code listenerInterface} is null
      * @throws NullPointerException if {@code target} is null
      * @throws NullPointerException if {@code action} is null
-     *
+     * @throws IllegalArgumentException if creating a Proxy for
+     *         {@code listenerInterface} fails for any of the restrictions
+     *         specified by {@link Proxy#newProxyInstance}
      * @see EventHandler
+     * @see Proxy#newProxyInstance
      */
     public static <T> T create(Class<T> listenerInterface,
                                Object target, String action,
--- a/jdk/src/java.desktop/share/classes/java/beans/SimpleBeanInfo.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/java/beans/SimpleBeanInfo.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,7 +27,8 @@
 
 import java.awt.Image;
 import java.awt.Toolkit;
-import java.io.InputStream;
+import java.awt.image.ImageProducer;
+import java.net.URL;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 
@@ -171,19 +172,24 @@
     }
 
     /**
-     * This is a utility method to help in loading icon images.
-     * It takes the name of a resource file associated with the
-     * current object's class file and loads an image object
-     * from that file.  Typically images will be GIFs.
+     * This is a utility method to help in loading icon images. It takes the
+     * name of a resource file associated with the current object's class file
+     * and loads an image object from that file. Typically images will be GIFs.
      *
-     * @param resourceName  A pathname relative to the directory
-     *          holding the class file of the current class.  For example,
-     *          "wombat.gif".
-     * @return  an image object.  May be null if the load failed.
+     * @param  resourceName A pathname relative to the directory holding the
+     *         class file of the current class. For example, "wombat.gif".
+     * @return an image object or null if the resource is not found or the
+     *         resource could not be loaded as an Image
      */
     public Image loadImage(final String resourceName) {
-        try (InputStream in = getClass().getResourceAsStream(resourceName)) {
-            return Toolkit.getDefaultToolkit().createImage(in.readAllBytes());
+        try {
+            final URL url = getClass().getResource(resourceName);
+            if (url != null) {
+                final ImageProducer ip = (ImageProducer) url.getContent();
+                if (ip != null) {
+                    return Toolkit.getDefaultToolkit().createImage(ip);
+                }
+            }
         } catch (final Exception ignored) {
         }
         return null;
--- a/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/BaselineTIFFTagSet.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/BaselineTIFFTagSet.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -2175,9 +2175,9 @@
     }
 
     /**
-     * Returns a shared instance of a <code>BaselineTIFFTagSet</code>.
+     * Returns a shared instance of a {@code BaselineTIFFTagSet}.
      *
-     * @return a <code>BaselineTIFFTagSet</code> instance.
+     * @return a {@code BaselineTIFFTagSet} instance.
      */
     public synchronized static BaselineTIFFTagSet getInstance() {
         if (theInstance == null) {
--- a/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/ExifGPSTagSet.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/ExifGPSTagSet.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -51,7 +51,7 @@
     /**
      * A value to be used with the "GPSVersionID" tag to indicate GPS version
      * 2.2.  The value equals the US-ASCII encoding of the byte array
-     * <code>{'2', '2', '0', '0'}</code>.
+     * {@code {'2', '2', '0', '0'}}.
      *
      * @see #TAG_GPS_VERSION_ID
      */
@@ -711,9 +711,9 @@
     }
 
     /**
-     * Returns a shared instance of an <code>ExifGPSTagSet</code>.
+     * Returns a shared instance of an {@code ExifGPSTagSet}.
      *
-     * @return an <code>ExifGPSTagSet</code> instance.
+     * @return an {@code ExifGPSTagSet} instance.
      */
     public synchronized static ExifGPSTagSet getInstance() {
         if (theInstance == null) {
--- a/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/ExifInteroperabilityTagSet.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/ExifInteroperabilityTagSet.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -88,9 +88,9 @@
 
     /**
      * Returns the shared instance of
-     * <code>ExifInteroperabilityTagSet</code>.
+     * {@code ExifInteroperabilityTagSet}.
      *
-     * @return the <code>ExifInteroperabilityTagSet</code> instance.
+     * @return the {@code ExifInteroperabilityTagSet} instance.
      */
     public synchronized static ExifInteroperabilityTagSet getInstance() {
         if (theInstance == null) {
--- a/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/ExifParentTIFFTagSet.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/ExifParentTIFFTagSet.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -80,9 +80,9 @@
     }
 
     /**
-     * Returns a shared instance of an <code>ExifParentTIFFTagSet</code>.
+     * Returns a shared instance of an {@code ExifParentTIFFTagSet}.
      *
-     * @return an <code>ExifParentTIFFTagSet</code> instance.
+     * @return an {@code ExifParentTIFFTagSet} instance.
      */
     public synchronized static ExifParentTIFFTagSet getInstance() {
         if (theInstance == null) {
--- a/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/ExifTIFFTagSet.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/ExifTIFFTagSet.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,7 +33,7 @@
  * standard for annotating images used by most digital camera
  * manufacturers.  The Exif specification may be found at
  * <a href="http://www.exif.org/Exif2-2.PDF">
- * <code>http://www.exif.org/Exif2-2.PDF</code>
+ * {@code http://www.exif.org/Exif2-2.PDF}
  * </a>.
  *
  * <p> The definitions of the data types referenced by the field
@@ -67,7 +67,7 @@
     /**
      * A value to be used with the "ExifVersion" tag to indicate Exif version
      * 2.1.  The value equals the US-ASCII encoding of the byte array
-     * <code>{'0', '2', '1', '0'}</code>.
+     * {@code {'0', '2', '1', '0'}}.
      *
      * @see #TAG_EXIF_VERSION
      */
@@ -78,7 +78,7 @@
     /**
      * A value to be used with the "ExifVersion" tag to indicate Exif version
      * 2.2.  The value equals the US-ASCII encoding of the byte array
-     * <code>{'0', '2', '2', '0'}</code>.
+     * {@code {'0', '2', '2', '0'}}.
      *
      * @see #TAG_EXIF_VERSION
      */
@@ -94,7 +94,7 @@
 
     /**
      * A tag indicating the color space information (type SHORT).  The
-     * legal values are given by the <code>COLOR_SPACE_*</code>
+     * legal values are given by the {@code COLOR_SPACE_*}
      * constants.
      *
      * @see #COLOR_SPACE_SRGB
@@ -1256,7 +1256,7 @@
     static class ExifVersion extends TIFFTag {
 
         public ExifVersion() {
-            super("Exifversion",
+            super("ExifVersion",
                   TAG_EXIF_VERSION,
                   1 << TIFFTag.TIFF_UNDEFINED,
                   4);
@@ -1992,9 +1992,9 @@
     }
 
     /**
-     * Returns a shared instance of an <code>ExifTIFFTagSet</code>.
+     * Returns a shared instance of an {@code ExifTIFFTagSet}.
      *
-     * @return an <code>ExifTIFFTagSet</code> instance.
+     * @return an {@code ExifTIFFTagSet} instance.
      */
     public synchronized static ExifTIFFTagSet getInstance() {
         if (theInstance == null) {
--- a/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/FaxTIFFTagSet.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/FaxTIFFTagSet.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -131,9 +131,9 @@
     }
 
     /**
-     * Returns a shared instance of a <code>FaxTIFFTagSet</code>.
+     * Returns a shared instance of a {@code FaxTIFFTagSet}.
      *
-     * @return a <code>FaxTIFFTagSet</code> instance.
+     * @return a {@code FaxTIFFTagSet} instance.
      */
     public synchronized static FaxTIFFTagSet getInstance() {
         if (theInstance == null) {
--- a/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/GeoTIFFTagSet.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/GeoTIFFTagSet.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,7 +32,7 @@
  * standard for annotating georeferenced or geocoded raster imagery.
  * The GeoTIFF specification may be found at <a
  * href="http://www.remotesensing.org/geotiff/spec/geotiffhome.html">
- * <code>http://www.remotesensing.org/geotiff/spec/geotiffhome.html</code>
+ * {@code http://www.remotesensing.org/geotiff/spec/geotiffhome.html}
  * </a>. This class does <i>not</i> handle the <i>GeoKey</i>s referenced
  * from a <i>GeoKeyDirectoryTag</i> as those are not TIFF tags per se.
  *
@@ -63,7 +63,7 @@
     /** A tag used to store the <i>GeoKey</i> directory. */
     public static final int TAG_GEO_KEY_DIRECTORY = 34735;
 
-    /** A tag used to store all <code>double</code>-values <i>GeoKey</i>s. */
+    /** A tag used to store all {@code double}-values <i>GeoKey</i>s. */
     public static final int TAG_GEO_DOUBLE_PARAMS = 34736;
 
     /** A tag used to store all ASCII-values <i>GeoKey</i>s. */
@@ -97,7 +97,7 @@
 
     static class GeoKeyDirectory extends TIFFTag {
         public GeoKeyDirectory() {
-            super("GeoKeyDirectory",
+            super("GeoKeyDirectoryTag",
                   TAG_GEO_KEY_DIRECTORY,
                   1 << TIFFTag.TIFF_SHORT);
         }
@@ -105,7 +105,7 @@
 
     static class GeoDoubleParams extends TIFFTag {
         public GeoDoubleParams() {
-            super("GeoDoubleParams",
+            super("GeoDoubleParamsTag",
                   TAG_GEO_DOUBLE_PARAMS,
                   1 << TIFFTag.TIFF_DOUBLE);
         }
@@ -113,7 +113,7 @@
 
     static class GeoAsciiParams extends TIFFTag {
         public GeoAsciiParams() {
-            super("GeoAsciiParams",
+            super("GeoAsciiParamsTag",
                   TAG_GEO_ASCII_PARAMS,
                   1 << TIFFTag.TIFF_ASCII);
         }
@@ -137,9 +137,9 @@
     }
 
     /**
-     * Returns a shared instance of a <code>GeoTIFFTagSet</code>.
+     * Returns a shared instance of a {@code GeoTIFFTagSet}.
      *
-     * @return a <code>GeoTIFFTagSet</code> instance.
+     * @return a {@code GeoTIFFTagSet} instance.
      */
     public synchronized static GeoTIFFTagSet getInstance() {
         if (theInstance == null) {
--- a/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/TIFFDirectory.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/TIFFDirectory.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -41,58 +41,58 @@
  * image metadata. A TIFF image metadata tree represents an Image File
  * Directory (IFD) from a TIFF 6.0 stream. An IFD consists of a number of
  * IFD Entries each of which associates an identifying tag number with
- * a compatible value. A <code>TIFFDirectory</code> instance corresponds
+ * a compatible value. A {@code TIFFDirectory} instance corresponds
  * to an IFD and contains a set of {@link TIFFField}s each of which
  * corresponds to an IFD Entry in the IFD.
  *
- * <p>When reading, a <code>TIFFDirectory</code> may be created by passing
+ * <p>When reading, a {@code TIFFDirectory} may be created by passing
  * the value returned by {@link javax.imageio.ImageReader#getImageMetadata
  * ImageReader.getImageMetadata()} to {@link #createFromMetadata
  * createFromMetadata()}. The {@link TIFFField}s in the directory may then
  * be obtained using the accessor methods provided in this class.</p>
  *
  * <p>When writing, an {@link IIOMetadata} object for use by one of the
- * <code>write()</code> methods of {@link javax.imageio.ImageWriter} may be
- * created from a <code>TIFFDirectory</code> by {@link #getAsMetadata()}.
- * The <code>TIFFDirectory</code> itself may be created by construction or
- * from the <code>IIOMetadata</code> object returned by
+ * {@code write()} methods of {@link javax.imageio.ImageWriter} may be
+ * created from a {@code TIFFDirectory} by {@link #getAsMetadata()}.
+ * The {@code TIFFDirectory} itself may be created by construction or
+ * from the {@code IIOMetadata} object returned by
  * {@link javax.imageio.ImageWriter#getDefaultImageMetadata
- * ImageWriter.getDefaultImageMetadata()}. The <code>TIFFField</code>s in the
+ * ImageWriter.getDefaultImageMetadata()}. The {@code TIFFField}s in the
  * directory may be set using the mutator methods provided in this class.</p>
  *
- * <p>A <code>TIFFDirectory</code> is aware of the tag numbers in the
+ * <p>A {@code TIFFDirectory} is aware of the tag numbers in the
  * group of {@link TIFFTagSet}s associated with it. When
- * a <code>TIFFDirectory</code> is created from a native image metadata
+ * a {@code TIFFDirectory} is created from a native image metadata
  * object, these tag sets are derived from the <tt>tagSets</tt> attribute
  * of the <tt>TIFFIFD</tt> node.</p>
  *
- * <p>A <code>TIFFDirectory</code> might also have a parent {@link TIFFTag}.
+ * <p>A {@code TIFFDirectory} might also have a parent {@link TIFFTag}.
  * This will occur if the directory represents an IFD other than the root
  * IFD of the image. The parent tag is the tag of the IFD Entry which is a
- * pointer to the IFD represented by this <code>TIFFDirectory</code>. The
- * {@link TIFFTag#isIFDPointer} method of this parent <code>TIFFTag</code>
- * must return <code>true</code>.  When a <code>TIFFDirectory</code> is
+ * pointer to the IFD represented by this {@code TIFFDirectory}. The
+ * {@link TIFFTag#isIFDPointer} method of this parent {@code TIFFTag}
+ * must return {@code true}.  When a {@code TIFFDirectory} is
  * created from a native image metadata object, the parent tag set is set
  * from the <tt>parentTagName</tt> attribute of the corresponding
- * <tt>TIFFIFD</tt> node. Note that a <code>TIFFDirectory</code> instance
- * which has a non-<code>null</code> parent tag will be contained in the
- * data field of a <code>TIFFField</code> instance which has a tag field
+ * <tt>TIFFIFD</tt> node. Note that a {@code TIFFDirectory} instance
+ * which has a non-{@code null} parent tag will be contained in the
+ * data field of a {@code TIFFField} instance which has a tag field
  * equal to the contained directory's parent tag.</p>
  *
- * <p>As an example consider an Exif image. The <code>TIFFDirectory</code>
+ * <p>As an example consider an Exif image. The {@code TIFFDirectory}
  * instance corresponding to the Exif IFD in the Exif stream would have parent
  * tag {@link ExifParentTIFFTagSet#TAG_EXIF_IFD_POINTER TAG_EXIF_IFD_POINTER}
  * and would include {@link ExifTIFFTagSet} in its group of known tag sets.
- * The <code>TIFFDirectory</code> corresponding to this Exif IFD will be
- * contained in the data field of a <code>TIFFField</code> which will in turn
- * be contained in the <code>TIFFDirectory</code> corresponding to the primary
- * IFD of the Exif image which will itself have a <code>null</code>-valued
+ * The {@code TIFFDirectory} corresponding to this Exif IFD will be
+ * contained in the data field of a {@code TIFFField} which will in turn
+ * be contained in the {@code TIFFDirectory} corresponding to the primary
+ * IFD of the Exif image which will itself have a {@code null}-valued
  * parent tag.</p>
  *
  * <p><b>Note that this implementation is not synchronized. </b>If multiple
- * threads use a <code>TIFFDirectory</code> instance concurrently, and at
+ * threads use a {@code TIFFDirectory} instance concurrently, and at
  * least one of the threads modifies the directory, for example, by adding
- * or removing <code>TIFFField</code>s or <code>TIFFTagSet</code>s, it
+ * or removing {@code TIFFField}s or {@code TIFFTagSet}s, it
  * <i>must</i> be synchronized externally.</p>
  *
  * @since 9
@@ -107,10 +107,10 @@
     private static final int MAX_LOW_FIELD_TAG_NUM =
         BaselineTIFFTagSet.TAG_REFERENCE_BLACK_WHITE;
 
-    /** The <code>TIFFTagSets</code> associated with this directory. */
+    /** The {@code TIFFTagSets} associated with this directory. */
     private List<TIFFTagSet> tagSets;
 
-    /** The parent <code>TIFFTag</code> of this directory. */
+    /** The parent {@code TIFFTag} of this directory. */
     private TIFFTag parentTag;
 
     /**
@@ -123,13 +123,13 @@
     private int numLowFields = 0;
 
     /**
-     * A mapping of <code>Integer</code> tag numbers to <code>TIFFField</code>s
+     * A mapping of {@code Integer} tag numbers to {@code TIFFField}s
      * for fields which are not low tag numbered.
      */
     private Map<Integer,TIFFField> highFields = new TreeMap<Integer,TIFFField>();
 
     /**
-     * Creates a <code>TIFFDirectory</code> instance from the contents of
+     * Creates a {@code TIFFDirectory} instance from the contents of
      * an image metadata object. The supplied object must support an image
      * metadata format supported by the TIFF {@link javax.imageio.ImageWriter}
      * plug-in. This will usually be either the TIFF native image metadata
@@ -139,12 +139,12 @@
      * @param tiffImageMetadata A metadata object which supports a compatible
      * image metadata format.
      *
-     * @return A <code>TIFFDirectory</code> populated from the contents of
+     * @return A {@code TIFFDirectory} populated from the contents of
      * the supplied metadata object.
      *
-     * @throws NullPointerException if <code>tiffImageMetadata</code>
-     * is <code>null</code>.
-     * @throws IllegalArgumentException if <code>tiffImageMetadata</code>
+     * @throws NullPointerException if {@code tiffImageMetadata}
+     * is {@code null}.
+     * @throws IllegalArgumentException if {@code tiffImageMetadata}
      * does not support a compatible image metadata format.
      * @throws IIOInvalidTreeException if the supplied metadata object
      * cannot be parsed.
@@ -204,7 +204,7 @@
     }
 
     /**
-     * Converts a <code>TIFFDirectory</code> to a <code>TIFFIFD</code>.
+     * Converts a {@code TIFFDirectory} to a {@code TIFFIFD}.
      */
     private static TIFFIFD getDirectoryAsIFD(TIFFDirectory dir) {
         if(dir instanceof TIFFIFD) {
@@ -219,27 +219,39 @@
             TIFFField f = fields[i];
             TIFFTag tag = f.getTag();
             if(tag.isIFDPointer()) {
-                TIFFDirectory subIFD =
-                    getDirectoryAsIFD((TIFFDirectory)f.getData());
-                f = new TIFFField(tag, f.getType(), (long)f.getCount(), subIFD);
+                TIFFDirectory subDir = null;
+                if (f.hasDirectory()) {
+                    subDir = f.getDirectory();
+                } else if (f.getData() instanceof TIFFDirectory) {
+                    subDir = (TIFFDirectory)f.getData();
+                }
+                if (subDir != null) {
+                    TIFFDirectory subIFD = getDirectoryAsIFD(subDir);
+                    f = new TIFFField(tag, f.getType(), (long)f.getCount(),
+                                      subIFD);
+                } else {
+                    f = null;
+                }
             }
-            ifd.addTIFFField(f);
+            if (f != null) {
+                ifd.addTIFFField(f);
+            }
         }
 
         return ifd;
     }
 
     /**
-     * Constructs a <code>TIFFDirectory</code> which is aware of a given
+     * Constructs a {@code TIFFDirectory} which is aware of a given
      * group of {@link TIFFTagSet}s. An optional parent {@link TIFFTag}
      * may also be specified.
      *
-     * @param tagSets The <code>TIFFTagSets</code> associated with this
+     * @param tagSets The {@code TIFFTagSets} associated with this
      * directory.
-     * @param parentTag The parent <code>TIFFTag</code> of this directory;
-     * may be <code>null</code>.
-     * @throws NullPointerException if <code>tagSets</code> is
-     * <code>null</code>.
+     * @param parentTag The parent {@code TIFFTag} of this directory;
+     * may be {@code null}.
+     * @throws NullPointerException if {@code tagSets} is
+     * {@code null}.
      */
     public TIFFDirectory(TIFFTagSet[] tagSets, TIFFTag parentTag) {
         if(tagSets == null) {
@@ -256,8 +268,8 @@
     /**
      * Returns the {@link TIFFTagSet}s of which this directory is aware.
      *
-     * @return The <code>TIFFTagSet</code>s associated with this
-     * <code>TIFFDirectory</code>.
+     * @return The {@code TIFFTagSet}s associated with this
+     * {@code TIFFDirectory}.
      */
     public TIFFTagSet[] getTagSets() {
         return tagSets.toArray(new TIFFTagSet[tagSets.size()]);
@@ -267,9 +279,9 @@
      * Adds an element to the group of {@link TIFFTagSet}s of which this
      * directory is aware.
      *
-     * @param tagSet The <code>TIFFTagSet</code> to add.
-     * @throws NullPointerException if <code>tagSet</code> is
-     * <code>null</code>.
+     * @param tagSet The {@code TIFFTagSet} to add.
+     * @throws NullPointerException if {@code tagSet} is
+     * {@code null}.
      */
     public void addTagSet(TIFFTagSet tagSet) {
         if(tagSet == null) {
@@ -285,9 +297,9 @@
      * Removes an element from the group of {@link TIFFTagSet}s of which this
      * directory is aware.
      *
-     * @param tagSet The <code>TIFFTagSet</code> to remove.
-     * @throws NullPointerException if <code>tagSet</code> is
-     * <code>null</code>.
+     * @param tagSet The {@code TIFFTagSet} to remove.
+     * @throws NullPointerException if {@code tagSet} is
+     * {@code null}.
      */
     public void removeTagSet(TIFFTagSet tagSet) {
         if(tagSet == null) {
@@ -301,10 +313,10 @@
 
     /**
      * Returns the parent {@link TIFFTag} of this directory if one
-     * has been defined or <code>null</code> otherwise.
+     * has been defined or {@code null} otherwise.
      *
-     * @return The parent <code>TIFFTag</code> of this
-     * <code>TIFFDiectory</code> or <code>null</code>.
+     * @return The parent {@code TIFFTag} of this
+     * {@code TIFFDiectory} or {@code null}.
      */
     public TIFFTag getParentTag() {
         return parentTag;
@@ -312,12 +324,12 @@
 
     /**
      * Returns the {@link TIFFTag} which has tag number equal to
-     * <code>tagNumber</code> or <code>null</code> if no such tag
+     * {@code tagNumber} or {@code null} if no such tag
      * exists in the {@link TIFFTagSet}s associated with this
      * directory.
      *
      * @param tagNumber The tag number of interest.
-     * @return The corresponding <code>TIFFTag</code> or <code>null</code>.
+     * @return The corresponding {@code TIFFTag} or {@code null}.
      */
     public TIFFTag getTag(int tagNumber) {
         return TIFFIFD.getTag(tagNumber, tagSets);
@@ -326,8 +338,8 @@
     /**
      * Returns the number of {@link TIFFField}s in this directory.
      *
-     * @return The number of <code>TIFFField</code>s in this
-     * <code>TIFFDirectory</code>.
+     * @return The number of {@code TIFFField}s in this
+     * {@code TIFFDirectory}.
      */
     public int getNumTIFFFields() {
         return numLowFields + highFields.size();
@@ -339,7 +351,7 @@
      *
      * @param tagNumber The tag number.
      * @return Whether a {@link TIFFTag} with tag number equal to
-     * <code>tagNumber</code> is present in this <code>TIFFDirectory</code>.
+     * {@code tagNumber} is present in this {@code TIFFDirectory}.
      */
     public boolean containsTIFFField(int tagNumber) {
         return (tagNumber >= 0 && tagNumber <= MAX_LOW_FIELD_TAG_NUM &&
@@ -351,7 +363,7 @@
      * Adds a TIFF field to the directory.
      *
      * @param f The field to add.
-     * @throws NullPointerException if <code>f</code> is <code>null</code>.
+     * @throws NullPointerException if {@code f} is {@code null}.
      */
     public void addTIFFField(TIFFField f) {
         if(f == null) {
@@ -372,8 +384,8 @@
      * Retrieves a TIFF field from the directory.
      *
      * @param tagNumber The tag number of the tag associated with the field.
-     * @return A <code>TIFFField</code> with the requested tag number of
-     * <code>null</code> if no such field is present.
+     * @return A {@code TIFFField} with the requested tag number of
+     * {@code null} if no such field is present.
      */
     public TIFFField getTIFFField(int tagNumber) {
         TIFFField f;
@@ -444,7 +456,7 @@
      * Converts the directory to a metadata object.
      *
      * @return A metadata instance initialized from the contents of this
-     * <code>TIFFDirectory</code>.
+     * {@code TIFFDirectory}.
      */
     public IIOMetadata getAsMetadata() {
         return new TIFFImageMetadata(getDirectoryAsIFD(this));
@@ -453,7 +465,7 @@
     /**
      * Clones the directory and all the fields contained therein.
      *
-     * @return A clone of this <code>TIFFDirectory</code>.
+     * @return A clone of this {@code TIFFDirectory}.
      * @throws CloneNotSupportedException if the instance cannot be cloned.
      */
     @Override
--- a/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/TIFFField.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/TIFFField.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,7 +35,7 @@
  *
  * <p> A field in a TIFF Image File Directory (IFD) is defined as a
  * tag number accompanied by a sequence of values of identical data type.
- * TIFF 6.0 defines 12 data types; a 13th type <code>IFD</code> is
+ * TIFF 6.0 defines 12 data types; a 13th type {@code IFD} is
  * defined in TIFF Tech Note 1 of TIFF Specification Supplement 1. These
  * TIFF data types are referred to by Java constants and mapped internally
  * onto Java language data types and type names as follows:
@@ -68,10 +68,10 @@
  * {@link TIFFTag#TIFF_BYTE}
  * </td>
  * <td>
- * <code>byte</code>
+ * {@code byte}
  * </td>
  * <td>
- * <code>"Byte"</code>
+ * {@code "Byte"}
  * </td>
  * </tr>
  *
@@ -83,10 +83,10 @@
  * {@link TIFFTag#TIFF_ASCII}
  * </td>
  * <td>
- * <code>String</code>
+ * {@code String}
  * </td>
  * <td>
- * <code>"Ascii"</code>
+ * {@code "Ascii"}
  * </td>
  * </tr>
  *
@@ -98,10 +98,10 @@
  * {@link TIFFTag#TIFF_SHORT}
  * </td>
  * <td>
- * <code>char</code>
+ * {@code char}
  * </td>
  * <td>
- * <code>"Short"</code>
+ * {@code "Short"}
  * </td>
  * </tr>
  *
@@ -113,10 +113,10 @@
  * {@link TIFFTag#TIFF_LONG}
  * </td>
  * <td>
- * <code>long</code>
+ * {@code long}
  * </td>
  * <td>
- * <code>"Long"</code>
+ * {@code "Long"}
  * </td>
  * </tr>
  *
@@ -128,10 +128,10 @@
  * {@link TIFFTag#TIFF_RATIONAL}
  * </td>
  * <td>
- * <code>long[2]</code> {numerator, denominator}
+ * {@code long[2]} {numerator, denominator}
  * </td>
  * <td>
- * <code>"Rational"</code>
+ * {@code "Rational"}
  * </td>
  * </tr>
  *
@@ -143,10 +143,10 @@
  * {@link TIFFTag#TIFF_SBYTE}
  * </td>
  * <td>
- * <code>byte</code>
+ * {@code byte}
  * </td>
  * <td>
- * <code>"SByte"</code>
+ * {@code "SByte"}
  * </td>
  * </tr>
  *
@@ -158,10 +158,10 @@
  * {@link TIFFTag#TIFF_UNDEFINED}
  * </td>
  * <td>
- * <code>byte</code>
+ * {@code byte}
  * </td>
  * <td>
- * <code>"Undefined"</code>
+ * {@code "Undefined"}
  * </td>
  * </tr>
  *
@@ -173,10 +173,10 @@
  * {@link TIFFTag#TIFF_SSHORT}
  * </td>
  * <td>
- * <code>short</code>
+ * {@code short}
  * </td>
  * <td>
- * <code>"SShort"</code>
+ * {@code "SShort"}
  * </td>
  * </tr>
  *
@@ -188,10 +188,10 @@
  * {@link TIFFTag#TIFF_SLONG}
  * </td>
  * <td>
- * <code>int</code>
+ * {@code int}
  * </td>
  * <td>
- * <code>"SLong"</code>
+ * {@code "SLong"}
  * </td>
  * </tr>
  *
@@ -203,10 +203,10 @@
  * {@link TIFFTag#TIFF_SRATIONAL}
  * </td>
  * <td>
- * <code>int[2]</code> {numerator, denominator}
+ * {@code int[2]} {numerator, denominator}
  * </td>
  * <td>
- * <code>"SRational"</code>
+ * {@code "SRational"}
  * </td>
  * </tr>
  *
@@ -218,10 +218,10 @@
  * {@link TIFFTag#TIFF_FLOAT}
  * </td>
  * <td>
- * <code>float</code>
+ * {@code float}
  * </td>
  * <td>
- * <code>"Float"</code>
+ * {@code "Float"}
  * </td>
  * </tr>
  *
@@ -233,10 +233,10 @@
  * {@link TIFFTag#TIFF_DOUBLE}
  * </td>
  * <td>
- * <code>double</code>
+ * {@code double}
  * </td>
  * <td>
- * <code>"Double"</code>
+ * {@code "Double"}
  * </td>
  * </tr>
  *
@@ -248,10 +248,10 @@
  * {@link TIFFTag#TIFF_IFD_POINTER}
  * </td>
  * <td>
- * <code>long</code>
+ * {@code long}
  * </td>
  * <td>
- * <code>"IFDPointer"</code>
+ * {@code "IFDPointer"}
  * </td>
  * </tr>
  *
@@ -411,19 +411,19 @@
     }
 
     /**
-     * Creates a <code>TIFFField</code> from a TIFF native image
+     * Creates a {@code TIFFField} from a TIFF native image
      * metadata node. If the value of the <tt>"tagNumber"</tt> attribute
-     * of the node is not found in <code>tagSet</code> then a new
-     * <code>TIFFTag</code> with name <code>TIFFTag.UNKNOWN_TAG_NAME</code>
+     * of the node is not found in {@code tagSet} then a new
+     * {@code TIFFTag} with name {@code TIFFTag.UNKNOWN_TAG_NAME}
      * will be created and assigned to the field.
      *
-     * @param tagSet The <code>TIFFTagSet</code> to which the
-     * <code>TIFFTag</code> of the field belongs.
-     * @param node A native TIFF image metadata <code>TIFFField</code> node.
-     * @throws NullPointerException if <code>node</code> is
-     * <code>null</code>.
+     * @param tagSet The {@code TIFFTagSet} to which the
+     * {@code TIFFTag} of the field belongs.
+     * @param node A native TIFF image metadata {@code TIFFField} node.
+     * @throws NullPointerException if {@code node} is
+     * {@code null}.
      * @throws IllegalArgumentException if the name of the node is not
-     * <code>"TIFFField"</code>.
+     * {@code "TIFFField"}.
      * @return A new {@code TIFFField}.
      */
     public static TIFFField createFromMetadataNode(TIFFTagSet tagSet,
@@ -487,14 +487,14 @@
     }
 
     /**
-     * Constructs a <code>TIFFField</code> with arbitrary data. The
-     * <code>type</code> parameter must be a value for which
+     * Constructs a {@code TIFFField} with arbitrary data. The
+     * {@code type} parameter must be a value for which
      * {@link TIFFTag#isDataTypeOK tag.isDataTypeOK()}
-     * returns <code>true</code>. The <code>data</code> parameter must
+     * returns {@code true}. The {@code data} parameter must
      * be an array of a Java type appropriate for the type of the TIFF
      * field.
      *
-     * <p>Note that the value (data) of the <code>TIFFField</code>
+     * <p>Note that the value (data) of the {@code TIFFField}
      * will always be the actual field value regardless of the number of
      * bytes required for that value. This is the case despite the fact
      * that the TIFF <i>IFD Entry</i> corresponding to the field may
@@ -503,24 +503,29 @@
      * value fits into 4 bytes). In other words, the value of the
      * field will already have been read from the TIFF stream. (An exception
      * to this case may occur when the field represents the contents of a
-     * non-baseline IFD. In that case the data will be a <code>long[]</code>
-     * containing the offset to the IFD and the <code>TIFFDirectory</code>
+     * non-baseline IFD. In that case the data will be a {@code long[]}
+     * containing the offset to the IFD and the {@code TIFFDirectory}
      * returned by {@link #getDirectory()} will be its contents.)
      *
      * @param tag The tag to associated with this field.
-     * @param type One of the <code>TIFFTag.TIFF_*</code> constants
+     * @param type One of the {@code TIFFTag.TIFF_*} constants
      * indicating the data type of the field as written to the TIFF stream.
      * @param count The number of data values.
      * @param data The actual data content of the field.
      *
-     * @throws NullPointerException if <code>tag&nbsp;==&nbsp;null</code>.
-     * @throws IllegalArgumentException if <code>type</code> is not
-     * one of the <code>TIFFTag.TIFF_*</code> data type constants.
-     * @throws IllegalArgumentException if <code>type</code> is an unacceptable
-     * data type for the supplied <code>TIFFTag</code>.
-     * @throws IllegalArgumentException if <code>count&nbsp;&lt;&nbsp;0</code>.
-     * @throws NullPointerException if <code>data&nbsp;==&nbsp;null</code>.
-     * @throws IllegalArgumentException if <code>data</code> is an instance of
+     * @throws NullPointerException if {@code tag&nbsp;==&nbsp;null}.
+     * @throws IllegalArgumentException if {@code type} is not
+     * one of the {@code TIFFTag.TIFF_*} data type constants.
+     * @throws IllegalArgumentException if {@code type} is an unacceptable
+     * data type for the supplied {@code TIFFTag}.
+     * @throws IllegalArgumentException if {@code count&nbsp;&lt;&nbsp;0}.
+     * @throws IllegalArgumentException if {@code count&nbsp;&lt;&nbsp;1}
+     * and {@code type} is {@code TIFF_RATIONAL} or
+     * {@code TIFF_SRATIONAL}.
+     * @throws IllegalArgumentException if {@code count&nbsp;&ne;&nbsp;1}
+     * and {@code type} is {@code TIFF_IFD_POINTER}.
+     * @throws NullPointerException if {@code data&nbsp;==&nbsp;null}.
+     * @throws IllegalArgumentException if {@code data} is an instance of
      * a class incompatible with the specified type.
      * @throws IllegalArgumentException if the size of the data array is wrong.
      */
@@ -534,6 +539,14 @@
                 + " for " + tag.getName() + " tag");
         } else if(count < 0) {
             throw new IllegalArgumentException("count < 0!");
+        } else if((type == TIFFTag.TIFF_RATIONAL
+                   || type == TIFFTag.TIFF_SRATIONAL)
+                  && count < 1) {
+            throw new IllegalArgumentException
+                ("Type is TIFF_RATIONAL or TIFF_SRATIONAL and count < 1");
+        } else if (type == TIFFTag.TIFF_IFD_POINTER && count != 1) {
+            throw new IllegalArgumentException
+                ("Type is TIFF_IFD_POINTER count != 1");
         } else if(data == null) {
             throw new NullPointerException("data == null!");
         }
@@ -612,15 +625,15 @@
      * parameters and the created array.
      *
      * @param tag The tag to associated with this field.
-     * @param type One of the <code>TIFFTag.TIFF_*</code> constants
+     * @param type One of the {@code TIFFTag.TIFF_*} constants
      * indicating the data type of the field as written to the TIFF stream.
      * @param count The number of data values.
-     * @throws NullPointerException if <code>tag&nbsp;==&nbsp;null</code>.
-     * @throws IllegalArgumentException if <code>type</code> is not
-     * one of the <code>TIFFTag.TIFF_*</code> data type constants.
-     * @throws IllegalArgumentException if <code>type</code> is an unacceptable
-     * data type for the supplied <code>TIFFTag</code>.
-     * @throws IllegalArgumentException if <code>count&nbsp;&lt;&nbsp;0</code>.
+     * @throws NullPointerException if {@code tag&nbsp;==&nbsp;null}.
+     * @throws IllegalArgumentException if {@code type} is not
+     * one of the {@code TIFFTag.TIFF_*} data type constants.
+     * @throws IllegalArgumentException if {@code type} is an unacceptable
+     * data type for the supplied {@code TIFFTag}.
+     * @throws IllegalArgumentException if {@code count&nbsp;&lt;&nbsp;0}.
      * @see #TIFFField(TIFFTag,int,int,Object)
      */
     public TIFFField(TIFFTag tag, int type, int count) {
@@ -628,20 +641,20 @@
     }
 
     /**
-     * Constructs a <code>TIFFField</code> with a single non-negative integral
+     * Constructs a {@code TIFFField} with a single non-negative integral
      * value.
      * The field will have type
      * {@link TIFFTag#TIFF_SHORT  TIFF_SHORT} if
-     * <code>val&nbsp;&lt;&nbsp;65536</code> and type
+     * {@code val&nbsp;&lt;&nbsp;65536} and type
      * {@link TIFFTag#TIFF_LONG TIFF_LONG} otherwise.  The count
      * of the field will be unity.
      *
      * @param tag The tag to associate with this field.
      * @param value The value to associate with this field.
-     * @throws NullPointerException if <code>tag&nbsp;==&nbsp;null</code>.
+     * @throws NullPointerException if {@code tag&nbsp;==&nbsp;null}.
      * @throws IllegalArgumentException if the derived type is unacceptable
-     * for the supplied <code>TIFFTag</code>.
-     * @throws IllegalArgumentException if <code>value&nbsp;&lt;&nbsp;0</code>.
+     * for the supplied {@code TIFFTag}.
+     * @throws IllegalArgumentException if {@code value&nbsp;&lt;&nbsp;0}.
      */
     public TIFFField(TIFFTag tag, int value) {
         if(tag == null) {
@@ -677,24 +690,24 @@
     }
 
     /**
-     * Constructs a <code>TIFFField</code> with an IFD offset and contents.
+     * Constructs a {@code TIFFField} with an IFD offset and contents.
      * The offset will be stored as the data of this field as
-     * <code>long[] {offset}</code>. The directory will not be cloned. The count
+     * {@code long[] {offset}}. The directory will not be cloned. The count
      * of the field will be unity.
      *
      * @param tag The tag to associated with this field.
-     * @param type One of the constants <code>TIFFTag.TIFF_LONG</code> or
-     * <code>TIFFTag.TIFF_IFD_POINTER</code>.
+     * @param type One of the constants {@code TIFFTag.TIFF_LONG} or
+     * {@code TIFFTag.TIFF_IFD_POINTER}.
      * @param offset The IFD offset.
      * @param dir The directory.
      *
-     * @throws NullPointerException if <code>tag&nbsp;==&nbsp;null</code>.
-     * @throws IllegalArgumentException if <code>type</code> is neither
-     * <code>TIFFTag.TIFF_LONG</code> nor <code>TIFFTag.TIFF_IFD_POINTER</code>.
-     * @throws IllegalArgumentException if <code>type</code> is an unacceptable
-     * data type for the supplied <code>TIFFTag</code>.
-     * @throws IllegalArgumentException if <code>offset</code> is non-positive.
-     * @throws NullPointerException if <code>dir&nbsp;==&nbsp;null</code>.
+     * @throws NullPointerException if {@code tag&nbsp;==&nbsp;null}.
+     * @throws IllegalArgumentException if {@code type} is neither
+     * {@code TIFFTag.TIFF_LONG} nor {@code TIFFTag.TIFF_IFD_POINTER}.
+     * @throws IllegalArgumentException if {@code type} is an unacceptable
+     * data type for the supplied {@code TIFFTag}.
+     * @throws IllegalArgumentException if {@code offset} is non-positive.
+     * @throws NullPointerException if {@code dir&nbsp;==&nbsp;null}.
      *
      * @see #TIFFField(TIFFTag,int,int,Object)
      */
@@ -715,14 +728,14 @@
     /**
      * Retrieves the tag associated with this field.
      *
-     * @return The associated <code>TIFFTag</code>.
+     * @return The associated {@code TIFFTag}.
      */
     public TIFFTag getTag() {
         return tag;
     }
 
     /**
-     * Retrieves the tag number in the range <code>[0,&nbsp;65535]</code>.
+     * Retrieves the tag number in the range {@code [0,&nbsp;65535]}.
      *
      * @return The tag number.
      */
@@ -732,7 +745,7 @@
 
     /**
      * Returns the type of the data stored in the field.  For a TIFF 6.0
-     * stream, the value will equal one of the <code>TIFFTag.TIFF_*</code>
+     * stream, the value will equal one of the {@code TIFFTag.TIFF_*}
      * constants. For future revisions of TIFF, higher values are possible.
      *
      * @return The data type of the field value.
@@ -744,11 +757,11 @@
     /**
      * Returns the name of the supplied data type constant.
      *
-     * @param dataType One of the <code>TIFFTag.TIFF_*</code> constants
+     * @param dataType One of the {@code TIFFTag.TIFF_*} constants
      * indicating the data type of the field as written to the TIFF stream.
      * @return The type name corresponding to the supplied type constant.
-     * @throws IllegalArgumentException if <code>dataType</code> is not
-     * one of the <code>TIFFTag.TIFF_*</code> data type constants.
+     * @throws IllegalArgumentException if {@code dataType} is not
+     * one of the {@code TIFFTag.TIFF_*} data type constants.
      */
     public static String getTypeName(int dataType) {
         if (dataType < TIFFTag.MIN_DATATYPE ||
@@ -761,11 +774,11 @@
 
     /**
      * Returns the data type constant corresponding to the supplied data
-     * type name. If the name is unknown <code>-1</code> will be returned.
+     * type name. If the name is unknown {@code -1} will be returned.
      *
      * @param typeName The type name.
-     * @return One of the <code>TIFFTag.TIFF_*</code> constants or
-     * <code>-1</code> if the name is not recognized.
+     * @return One of the {@code TIFFTag.TIFF_*} constants or
+     * {@code -1} if the name is not recognized.
      */
     public static int getTypeByName(String typeName) {
         for (int i = TIFFTag.MIN_DATATYPE; i <= TIFFTag.MAX_DATATYPE; i++) {
@@ -780,14 +793,14 @@
     /**
      * Creates an array appropriate for the indicated data type.
      *
-     * @param dataType One of the <code>TIFFTag.TIFF_*</code> data type
+     * @param dataType One of the {@code TIFFTag.TIFF_*} data type
      * constants.
      * @param count The number of values in the array.
      * @return An array appropriate for the specified data type.
      *
-     * @throws IllegalArgumentException if <code>dataType</code> is not
-     * one of the <code>TIFFTag.TIFF_*</code> data type constants.
-     * @throws IllegalArgumentException if <code>count&nbsp;&lt;&nbsp;0</code>.
+     * @throws IllegalArgumentException if {@code dataType} is not
+     * one of the {@code TIFFTag.TIFF_*} data type constants.
+     * @throws IllegalArgumentException if {@code count&nbsp;&lt;&nbsp;0}.
      */
     public static Object createArrayForType(int dataType, int count) {
         if(count < 0) {
@@ -823,15 +836,15 @@
     }
 
     /**
-     * Returns the <code>TIFFField</code> as a node named either
+     * Returns the {@code TIFFField} as a node named either
      * <tt>"TIFFField"</tt> or <tt>"TIFFIFD"</tt> as described in the
      * TIFF native image metadata specification. The node will be named
      * <tt>"TIFFIFD"</tt> if and only if the field's data object is an
      * instance of {@link TIFFDirectory} or equivalently
      * {@link TIFFTag#isIFDPointer getTag.isIFDPointer()} returns
-     * <code>true</code>.
+     * {@code true}.
      *
-     * @return a <code>Node</code> named <tt>"TIFFField"</tt> or
+     * @return a {@code Node} named <tt>"TIFFField"</tt> or
      * <tt>"TIFFIFD"</tt>.
      */
     public Node getAsNativeNode() {
@@ -850,8 +863,8 @@
 
     /**
      * Returns the number of data items present in the field.  For
-     * <code>TIFFTag.TIFF_ASCII</code> fields, the value returned is the
-     * number of <code>String</code>s, not the total length of the
+     * {@code TIFFTag.TIFF_ASCII} fields, the value returned is the
+     * number of {@code String}s, not the total length of the
      * data as in the file representation.
      *
      * @return The number of data items present in the field.
@@ -871,17 +884,17 @@
 
     /**
      * Returns the data as an uninterpreted array of
-     * <code>byte</code>s.  The type of the field must be one of
-     * <code>TIFFTag.TIFF_BYTE</code>, <code>TIFF_SBYTE</code>, or
-     * <code>TIFF_UNDEFINED</code>.
+     * {@code byte}s.  The type of the field must be one of
+     * {@code TIFFTag.TIFF_BYTE}, {@code TIFF_SBYTE}, or
+     * {@code TIFF_UNDEFINED}.
      *
-     * <p> For data in <code>TIFFTag.TIFF_BYTE</code> format, the application
+     * <p> For data in {@code TIFFTag.TIFF_BYTE} format, the application
      * must take care when promoting the data to longer integral types
      * to avoid sign extension.
      *
      * @throws ClassCastException if the field is not of type
-     * <code>TIFF_BYTE</code>, <code>TIFF_SBYTE</code>, or
-     * <code>TIFF_UNDEFINED</code>.
+     * {@code TIFF_BYTE}, {@code TIFF_SBYTE}, or
+     * {@code TIFF_UNDEFINED}.
      * @return The data as an uninterpreted array of bytes.
      */
     public byte[] getAsBytes() {
@@ -889,11 +902,11 @@
     }
 
     /**
-     * Returns <code>TIFFTag.TIFF_SHORT</code> data as an array of
-     * <code>char</code>s (unsigned 16-bit integers).
+     * Returns {@code TIFFTag.TIFF_SHORT} data as an array of
+     * {@code char}s (unsigned 16-bit integers).
      *
      * @throws ClassCastException if the field is not of type
-     * <code>TIFF_SHORT</code>.
+     * {@code TIFF_SHORT}.
      * @return The data as an array of {@code char}s.
      */
     public char[] getAsChars() {
@@ -901,11 +914,11 @@
     }
 
     /**
-     * Returns <code>TIFFTag.TIFF_SSHORT</code> data as an array of
-     * <code>short</code>s (signed 16-bit integers).
+     * Returns {@code TIFFTag.TIFF_SSHORT} data as an array of
+     * {@code short}s (signed 16-bit integers).
      *
      * @throws ClassCastException if the field is not of type
-     * <code>TIFF_SSHORT</code>.
+     * {@code TIFF_SSHORT}.
      * @return The data as an array of {@code short}s.
      */
     public short[] getAsShorts() {
@@ -913,12 +926,12 @@
     }
 
     /**
-     * Returns <code>TIFFTag.TIFF_SLONG</code> data as an array of
-     * <code>int</code>s (signed 32-bit integers).
+     * Returns {@code TIFFTag.TIFF_SLONG} data as an array of
+     * {@code int}s (signed 32-bit integers).
      *
      * @throws ClassCastException if the field is not of type
-     * <code>TIFF_SHORT</code>, <code>TIFF_SSHORT</code>, or
-     * <code>TIFF_SLONG</code>.
+     * {@code TIFF_SHORT}, {@code TIFF_SSHORT}, or
+     * {@code TIFF_SLONG}.
      * @return The data as an array of {@code int}s.
      */
     public int[] getAsInts() {
@@ -944,12 +957,12 @@
     }
 
     /**
-     * Returns <code>TIFFTag.TIFF_LONG</code> or
-     * <code>TIFF_IFD_POINTER</code> data as an array of
-     * <code>long</code>s (signed 64-bit integers).
+     * Returns {@code TIFFTag.TIFF_LONG} or
+     * {@code TIFF_IFD_POINTER} data as an array of
+     * {@code long}s (signed 64-bit integers).
      *
      * @throws ClassCastException if the field is not of type
-     * <code>TIFF_LONG</code> or <code>TIFF_IFD_POINTER</code>.
+     * {@code TIFF_LONG} or {@code TIFF_IFD_POINTER}.
      * @return The data as an array of {@code long}s.
      */
     public long[] getAsLongs() {
@@ -957,11 +970,11 @@
     }
 
     /**
-     * Returns <code>TIFFTag.TIFF_FLOAT</code> data as an array of
-     * <code>float</code>s (32-bit floating-point values).
+     * Returns {@code TIFFTag.TIFF_FLOAT} data as an array of
+     * {@code float}s (32-bit floating-point values).
      *
      * @throws ClassCastException if the field is not of type
-     * <code>TIFF_FLOAT</code>.
+     * {@code TIFF_FLOAT}.
      * @return The data as an array of {@code float}s.
      */
     public float[] getAsFloats() {
@@ -969,11 +982,11 @@
     }
 
     /**
-     * Returns <code>TIFFTag.TIFF_DOUBLE</code> data as an array of
-     * <code>double</code>s (64-bit floating-point values).
+     * Returns {@code TIFFTag.TIFF_DOUBLE} data as an array of
+     * {@code double}s (64-bit floating-point values).
      *
      * @throws ClassCastException if the field is not of type
-     * <code>TIFF_DOUBLE</code>.
+     * {@code TIFF_DOUBLE}.
      * @return The data as an array of {@code double}s.
      */
     public double[] getAsDoubles() {
@@ -981,11 +994,11 @@
     }
 
     /**
-     * Returns <code>TIFFTag.TIFF_SRATIONAL</code> data as an array of
-     * 2-element arrays of <code>int</code>s.
+     * Returns {@code TIFFTag.TIFF_SRATIONAL} data as an array of
+     * 2-element arrays of {@code int}s.
      *
      * @throws ClassCastException if the field is not of type
-     * <code>TIFF_SRATIONAL</code>.
+     * {@code TIFF_SRATIONAL}.
      * @return The data as an array of signed rationals.
      */
     public int[][] getAsSRationals() {
@@ -993,11 +1006,11 @@
     }
 
     /**
-     * Returns <code>TIFFTag.TIFF_RATIONAL</code> data as an array of
-     * 2-element arrays of <code>long</code>s.
+     * Returns {@code TIFFTag.TIFF_RATIONAL} data as an array of
+     * 2-element arrays of {@code long}s.
      *
      * @throws ClassCastException if the field is not of type
-     * <code>TIFF_RATIONAL</code>.
+     * {@code TIFF_RATIONAL}.
      * @return The data as an array of unsigned rationals.
      */
     public long[][] getAsRationals() {
@@ -1005,30 +1018,30 @@
     }
 
     /**
-     * Returns data in any format as an <code>int</code>.
+     * Returns data in any format as an {@code int}.
      *
-     * <p> <code>TIFFTag.TIFF_BYTE</code> values are treated as unsigned; that
+     * <p> {@code TIFFTag.TIFF_BYTE} values are treated as unsigned; that
      * is, no sign extension will take place and the returned value
-     * will be in the range [0, 255].  <code>TIFF_SBYTE</code> data
+     * will be in the range [0, 255].  {@code TIFF_SBYTE} data
      * will be returned in the range [-128, 127].
      *
-     * <p> A <code>TIFF_UNDEFINED</code> value is treated as though
-     * it were a <code>TIFF_BYTE</code>.
+     * <p> A {@code TIFF_UNDEFINED} value is treated as though
+     * it were a {@code TIFF_BYTE}.
      *
-     * <p> Data in <code>TIFF_SLONG</code>, <code>TIFF_LONG</code>,
-     * <code>TIFF_FLOAT</code>, <code>TIFF_DOUBLE</code> or
-     * <code>TIFF_IFD_POINTER</code> format are simply cast to
-     * <code>int</code> and may suffer from truncation.
+     * <p> Data in {@code TIFF_SLONG}, {@code TIFF_LONG},
+     * {@code TIFF_FLOAT}, {@code TIFF_DOUBLE} or
+     * {@code TIFF_IFD_POINTER} format are simply cast to
+     * {@code int} and may suffer from truncation.
      *
-     * <p> Data in <code>TIFF_SRATIONAL</code> or
-     * <code>TIFF_RATIONAL</code> format are evaluated by dividing the
+     * <p> Data in {@code TIFF_SRATIONAL} or
+     * {@code TIFF_RATIONAL} format are evaluated by dividing the
      * numerator into the denominator using double-precision
-     * arithmetic and then casting to <code>int</code>.  Loss of
+     * arithmetic and then casting to {@code int}.  Loss of
      * precision and truncation may occur.
      *
-     * <p> Data in <code>TIFF_ASCII</code> format will be parsed as by
-     * the <code>Double.parseDouble</code> method, with the result
-     * case to <code>int</code>.
+     * <p> Data in {@code TIFF_ASCII} format will be parsed as by
+     * the {@code Double.parseDouble} method, with the result
+     * case to {@code int}.
      *
      * @param index The index of the data.
      * @return The data at the given index as an {@code int}.
@@ -1068,17 +1081,17 @@
     }
 
     /**
-     * Returns data in any format as a <code>long</code>.
+     * Returns data in any format as a {@code long}.
      *
-     * <p> <code>TIFFTag.TIFF_BYTE</code> and <code>TIFF_UNDEFINED</code> data
+     * <p> {@code TIFFTag.TIFF_BYTE} and {@code TIFF_UNDEFINED} data
      * are treated as unsigned; that is, no sign extension will take
      * place and the returned value will be in the range [0, 255].
-     * <code>TIFF_SBYTE</code> data will be returned in the range
+     * {@code TIFF_SBYTE} data will be returned in the range
      * [-128, 127].
      *
-     * <p> Data in <code>TIFF_ASCII</code> format will be parsed as by
-     * the <code>Double.parseDouble</code> method, with the result
-     * cast to <code>long</code>.
+     * <p> Data in {@code TIFF_ASCII} format will be parsed as by
+     * the {@code Double.parseDouble} method, with the result
+     * cast to {@code long}.
      *
      * @param index The index of the data.
      * @return The data at the given index as a {@code long}.
@@ -1114,27 +1127,27 @@
     }
 
     /**
-     * Returns data in any format as a <code>float</code>.
+     * Returns data in any format as a {@code float}.
      *
-     * <p> <code>TIFFTag.TIFF_BYTE</code> and <code>TIFF_UNDEFINED</code> data
+     * <p> {@code TIFFTag.TIFF_BYTE} and {@code TIFF_UNDEFINED} data
      * are treated as unsigned; that is, no sign extension will take
      * place and the returned value will be in the range [0, 255].
-     * <code>TIFF_SBYTE</code> data will be returned in the range
+     * {@code TIFF_SBYTE} data will be returned in the range
      * [-128, 127].
      *
-     * <p> Data in <code>TIFF_SLONG</code>, <code>TIFF_LONG</code>,
-     * <code>TIFF_DOUBLE</code>, or <code>TIFF_IFD_POINTER</code> format are
-     * simply cast to <code>float</code> and may suffer from
+     * <p> Data in {@code TIFF_SLONG}, {@code TIFF_LONG},
+     * {@code TIFF_DOUBLE}, or {@code TIFF_IFD_POINTER} format are
+     * simply cast to {@code float} and may suffer from
      * truncation.
      *
-     * <p> Data in <code>TIFF_SRATIONAL</code> or
-     * <code>TIFF_RATIONAL</code> format are evaluated by dividing the
+     * <p> Data in {@code TIFF_SRATIONAL} or
+     * {@code TIFF_RATIONAL} format are evaluated by dividing the
      * numerator into the denominator using double-precision
-     * arithmetic and then casting to <code>float</code>.
+     * arithmetic and then casting to {@code float}.
      *
-     * <p> Data in <code>TIFF_ASCII</code> format will be parsed as by
-     * the <code>Double.parseDouble</code> method, with the result
-     * cast to <code>float</code>.
+     * <p> Data in {@code TIFF_ASCII} format will be parsed as by
+     * the {@code Double.parseDouble} method, with the result
+     * cast to {@code float}.
      *
      * @param index The index of the data.
      * @return The data at the given index as a {@code float}.
@@ -1174,21 +1187,21 @@
     }
 
     /**
-     * Returns data in any format as a <code>double</code>.
+     * Returns data in any format as a {@code double}.
      *
-     * <p> <code>TIFFTag.TIFF_BYTE</code> and <code>TIFF_UNDEFINED</code> data
+     * <p> {@code TIFFTag.TIFF_BYTE} and {@code TIFF_UNDEFINED} data
      * are treated as unsigned; that is, no sign extension will take
      * place and the returned value will be in the range [0, 255].
-     * <code>TIFF_SBYTE</code> data will be returned in the range
+     * {@code TIFF_SBYTE} data will be returned in the range
      * [-128, 127].
      *
-     * <p> Data in <code>TIFF_SRATIONAL</code> or
-     * <code>TIFF_RATIONAL</code> format are evaluated by dividing the
+     * <p> Data in {@code TIFF_SRATIONAL} or
+     * {@code TIFF_RATIONAL} format are evaluated by dividing the
      * numerator into the denominator using double-precision
      * arithmetic.
      *
-     * <p> Data in <code>TIFF_ASCII</code> format will be parsed as by
-     * the <code>Double.parseDouble</code> method.
+     * <p> Data in {@code TIFF_ASCII} format will be parsed as by
+     * the {@code Double.parseDouble} method.
      *
      * @param index The index of the data.
      * @return The data at the given index as a {@code double}.
@@ -1228,11 +1241,11 @@
     }
 
     /**
-     * Returns a <code>TIFFTag.TIFF_ASCII</code> value as a
-     * <code>String</code>.
+     * Returns a {@code TIFFTag.TIFF_ASCII} value as a
+     * {@code String}.
      *
      * @throws ClassCastException if the field is not of type
-     * <code>TIFF_ASCII</code>.
+     * {@code TIFF_ASCII}.
      *
      * @param index The index of the data.
      * @return The data at the given index as a {@code String}.
@@ -1242,13 +1255,13 @@
     }
 
     /**
-     * Returns a <code>TIFFTag.TIFF_SRATIONAL</code> data item as a
-     * two-element array of <code>int</code>s.
+     * Returns a {@code TIFFTag.TIFF_SRATIONAL} data item as a
+     * two-element array of {@code int}s.
      *
      * @param index The index of the data.
      * @return The data at the given index as a signed rational.
      * @throws ClassCastException if the field is not of type
-     * <code>TIFF_SRATIONAL</code>.
+     * {@code TIFF_SRATIONAL}.
      */
     public int[] getAsSRational(int index) {
         return ((int[][])data)[index];
@@ -1261,7 +1274,7 @@
      * @param index The index of the data.
      * @return The data at the given index as an unsigned rational.
      * @throws ClassCastException if the field is not of type
-     * <code>TIFF_RATIONAL</code>.
+     * {@code TIFF_RATIONAL}.
      */
     public long[] getAsRational(int index) {
         return ((long[][])data)[index];
@@ -1269,11 +1282,11 @@
 
 
     /**
-     * Returns a <code>String</code> containing a human-readable
+     * Returns a {@code String} containing a human-readable
      * version of the data item.  Data of type
-     * <code>TIFFTag.TIFF_RATIONAL</code> or <code>TIFF_SRATIONAL</code> are
+     * {@code TIFFTag.TIFF_RATIONAL} or {@code TIFF_SRATIONAL} are
      * represented as a pair of integers separated by a
-     * <code>'/'</code> character.
+     * {@code '/'} character.
      *
      * @param index The index of the data.
      * @return The data at the given index as a {@code String}.
@@ -1342,7 +1355,7 @@
     }
 
     /**
-     * Returns whether the field has a <code>TIFFDirectory</code>.
+     * Returns whether the field has a {@code TIFFDirectory}.
      *
      * @return true if and only if getDirectory() returns non-null.
      */
@@ -1351,8 +1364,8 @@
     }
 
     /**
-     * Returns the associated <code>TIFFDirectory</code>, if available. If no
-     * directory is set, then <code>null</code> will be returned.
+     * Returns the associated {@code TIFFDirectory}, if available. If no
+     * directory is set, then {@code null} will be returned.
      *
      * @return the TIFFDirectory instance or null.
      */
@@ -1363,7 +1376,7 @@
     /**
      * Clones the field and all the information contained therein.
      *
-     * @return A clone of this <code>TIFFField</code>.
+     * @return A clone of this {@code TIFFField}.
      * @throws CloneNotSupportedException if the instance cannot be cloned.
      */
     @Override
--- a/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/TIFFImageReadParam.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/TIFFImageReadParam.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -39,11 +39,11 @@
  * be provided by this interface.
  *
  * <p> Additional TIFF tags must be organized into
- * <code>TIFFTagSet</code>s.  A <code>TIFFTagSet</code> may be
+ * {@code TIFFTagSet}s.  A {@code TIFFTagSet} may be
  * provided to the reader by means of the
- * <code>addAllowedTagSet</code> method.  By default, the tag sets
- * <code>BaselineTIFFTagSet</code>, <code>FaxTIFFTagSet</code>,
- * <code>ExifParentTIFFTagSet</code>, and <code>GeoTIFFTagSet</code>
+ * {@code addAllowedTagSet} method.  By default, the tag sets
+ * {@code BaselineTIFFTagSet}, {@code FaxTIFFTagSet},
+ * {@code ExifParentTIFFTagSet}, and {@code GeoTIFFTagSet}
  * are included.
  *
  * @since 9
@@ -53,10 +53,10 @@
     private List<TIFFTagSet> allowedTagSets = new ArrayList<TIFFTagSet>(4);
 
     /**
-     * Constructs a <code>TIFFImageReadParam</code>.  Tags defined by
-     * the <code>TIFFTagSet</code>s <code>BaselineTIFFTagSet</code>,
-     * <code>FaxTIFFTagSet</code>, <code>ExifParentTIFFTagSet</code>, and
-     * <code>GeoTIFFTagSet</code> will be supported.
+     * Constructs a {@code TIFFImageReadParam}.  Tags defined by
+     * the {@code TIFFTagSet}s {@code BaselineTIFFTagSet},
+     * {@code FaxTIFFTagSet}, {@code ExifParentTIFFTagSet}, and
+     * {@code GeoTIFFTagSet} will be supported.
      *
      * @see BaselineTIFFTagSet
      * @see FaxTIFFTagSet
@@ -71,13 +71,13 @@
     }
 
     /**
-     * Adds a <code>TIFFTagSet</code> object to the list of allowed
+     * Adds a {@code TIFFTagSet} object to the list of allowed
      * tag sets.
      *
-     * @param tagSet a <code>TIFFTagSet</code>.
+     * @param tagSet a {@code TIFFTagSet}.
      *
-     * @throws IllegalArgumentException if <code>tagSet</code> is
-     * <code>null</code>.
+     * @throws IllegalArgumentException if {@code tagSet} is
+     * {@code null}.
      */
     public void addAllowedTagSet(TIFFTagSet tagSet) {
         if (tagSet == null) {
@@ -87,15 +87,15 @@
     }
 
     /**
-     * Removes a <code>TIFFTagSet</code> object from the list of
-     * allowed tag sets.  Removal is based on the <code>equals</code>
-     * method of the <code>TIFFTagSet</code>, which is normally
+     * Removes a {@code TIFFTagSet} object from the list of
+     * allowed tag sets.  Removal is based on the {@code equals}
+     * method of the {@code TIFFTagSet}, which is normally
      * defined as reference equality.
      *
-     * @param tagSet a <code>TIFFTagSet</code>.
+     * @param tagSet a {@code TIFFTagSet}.
      *
-     * @throws IllegalArgumentException if <code>tagSet</code> is
-     * <code>null</code>.
+     * @throws IllegalArgumentException if {@code tagSet} is
+     * {@code null}.
      */
     public void removeAllowedTagSet(TIFFTagSet tagSet) {
         if (tagSet == null) {
@@ -105,10 +105,10 @@
     }
 
     /**
-     * Returns a <code>List</code> containing the allowed
-     * <code>TIFFTagSet</code> objects.
+     * Returns a {@code List} containing the allowed
+     * {@code TIFFTagSet} objects.
      *
-     * @return a <code>List</code> of <code>TIFFTagSet</code>s.
+     * @return a {@code List} of {@code TIFFTagSet}s.
      */
     public List<TIFFTagSet> getAllowedTagSets() {
         return allowedTagSets;
--- a/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/TIFFTag.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/TIFFTag.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -105,7 +105,7 @@
      * The name assigned to a tag with an unknown tag number. Such
      * a tag may be created for example when reading an IFD and a
      * tag number is encountered which is not in any of the
-     * <code>TIFFTagSet</code>s known to the reader.
+     * {@code TIFFTagSet}s known to the reader.
      */
     public static final String UNKNOWN_TAG_NAME = "UnknownTag";
 
@@ -141,12 +141,12 @@
     private SortedMap<Integer,String> valueNames = null;
 
     /**
-     * Constructs a <code>TIFFTag</code> with a given name, tag number, set
+     * Constructs a {@code TIFFTag} with a given name, tag number, set
      * of legal data types, and value count. A negative value count signifies
      * that either an arbitrary number of values is legal or the required count
      * is determined by the values of other fields in the IFD. A non-negative
      * count specifies the number of values which an associated field must
-     * contain. The tag will have no associated <code>TIFFTagSet</code>.
+     * contain. The tag will have no associated {@code TIFFTagSet}.
      *
      * <p> If there are mnemonic names to be associated with the legal
      * data values for the tag, {@link #addValueName(int, String)
@@ -183,18 +183,18 @@
     }
 
     /**
-     * Constructs a <code>TIFFTag</code> with a given name, tag number and
-     * <code>TIFFTagSet</code> to which it refers. The legal data types are
+     * Constructs a {@code TIFFTag} with a given name, tag number and
+     * {@code TIFFTagSet} to which it refers. The legal data types are
      * set to include {@link #TIFF_LONG} and {@link #TIFF_IFD_POINTER} and the
-     * value count is unity. The <code>TIFFTagSet</code> will
-     * represent the set of <code>TIFFTag</code>s which appear in the IFD
-     * pointed to. A <code>TIFFTag</code> represents an IFD pointer if and
-     * only if <code>tagSet</code> is non-<code>null</code> or the data
-     * type <code>TIFF_IFD_POINTER</code> is legal.
+     * value count is unity. The {@code TIFFTagSet} will
+     * represent the set of {@code TIFFTag}s which appear in the IFD
+     * pointed to. A {@code TIFFTag} represents an IFD pointer if and
+     * only if {@code tagSet} is non-{@code null} or the data
+     * type {@code TIFF_IFD_POINTER} is legal.
      *
      * @param name the name of the tag.
      * @param number the number used to represent the tag.
-     * @param tagSet the <code>TIFFTagSet</code> to which this tag belongs.
+     * @param tagSet the {@code TIFFTagSet} to which this tag belongs.
      * @throws NullPointerException if name or tagSet is null.
      * @throws IllegalArgumentException if number is negative.
      *
@@ -210,9 +210,9 @@
     }
 
     /**
-     * Constructs  a  <code>TIFFTag</code>  with  a  given  name,  tag number,
+     * Constructs  a  {@code TIFFTag}  with  a  given  name,  tag number,
      * and set  of  legal  data  types.  The value count of the tag will be
-     * undefined and it will  have  no associated <code>TIFFTagSet</code>.
+     * undefined and it will  have  no associated {@code TIFFTagSet}.
      *
      * @param name the name of the tag.
      * @param number the number used to represent the tag.
@@ -236,9 +236,9 @@
      *
      * @return the number of bytes used to store the given data type.
      *
-     * @throws IllegalArgumentException if <code>datatype</code> is
-     * less than <code>MIN_DATATYPE</code> or greater than
-     * <code>MAX_DATATYPE</code>.
+     * @throws IllegalArgumentException if {@code datatype} is
+     * less than {@code MIN_DATATYPE} or greater than
+     * {@code MAX_DATATYPE}.
      */
     public static int getSizeOfType(int dataType) {
         if (dataType < MIN_DATATYPE ||dataType > MAX_DATATYPE) {
@@ -251,7 +251,7 @@
     /**
      * Returns the name of the tag, as it will appear in image metadata.
      *
-     * @return the tag name, as a <code>String</code>.
+     * @return the tag name, as a {@code String}.
      */
     public String getName() {
         return name;
@@ -260,7 +260,7 @@
     /**
      * Returns the integer used to represent the tag.
      *
-     * @return the tag number, as an <code>int</code>.
+     * @return the tag number, as an {@code int}.
      */
     public int getNumber() {
         return number;
@@ -276,7 +276,7 @@
      * (1 &lt;&lt; TIFFTag.TIFF_SHORT) | (1 &lt;&lt; TIFFTag.TIFF_LONG)
      * </pre>
      *
-     * @return an <code>int</code> containing a bitmask encoding the
+     * @return an {@code int} containing a bitmask encoding the
      * set of valid data types.
      */
     public int getDataTypes() {
@@ -285,11 +285,11 @@
 
     /**
      * Returns the value count of this tag. If this value is positive, it
-     * represents the required number of values for a <code>TIFFField</code>
+     * represents the required number of values for a {@code TIFFField}
      * which has this tag. If the value is negative, the count is undefined.
      * In the latter case the count may be derived, e.g., the number of values
-     * of the <code>BitsPerSample</code> field is <code>SamplesPerPixel</code>,
-     * or it may be variable as in the case of most <code>US-ASCII</code>
+     * of the {@code BitsPerSample} field is {@code SamplesPerPixel},
+     * or it may be variable as in the case of most {@code US-ASCII}
      * fields.
      *
      * @return the value count of this tag.
@@ -299,18 +299,18 @@
     }
 
     /**
-     * Returns <code>true</code> if the given data type
+     * Returns {@code true} if the given data type
      * may be used for the data associated with this tag.
      *
      * @param dataType the data type to be queried, one of
-     * <code>TIFF_BYTE</code>, <code>TIFF_SHORT</code>, etc.
+     * {@code TIFF_BYTE}, {@code TIFF_SHORT}, etc.
      *
-     * @return a <code>boolean</code> indicating whether the given
+     * @return a {@code boolean} indicating whether the given
      * data type may be used with this tag.
      *
-     * @throws IllegalArgumentException if <code>datatype</code> is
-     * less than <code>MIN_DATATYPE</code> or greater than
-     * <code>MAX_DATATYPE</code>.
+     * @throws IllegalArgumentException if {@code datatype} is
+     * less than {@code MIN_DATATYPE} or greater than
+     * {@code MAX_DATATYPE}.
      */
     public boolean isDataTypeOK(int dataType) {
         if (dataType < MIN_DATATYPE || dataType > MAX_DATATYPE) {
@@ -320,38 +320,38 @@
     }
 
     /**
-     * Returns the <code>TIFFTagSet</code> of which this tag is a part.
+     * Returns the {@code TIFFTagSet} of which this tag is a part.
      *
-     * @return the containing <code>TIFFTagSet</code>.
+     * @return the containing {@code TIFFTagSet}.
      */
     public TIFFTagSet getTagSet() {
         return tagSet;
     }
 
     /**
-     * Returns <code>true</code> if this tag is used to point to an IFD
-     * structure containing additional tags. A <code>TIFFTag</code> represents
-     * an IFD pointer if and only if its <code>TIFFTagSet</code> is
-     * non-<code>null</code> or the data type <code>TIFF_IFD_POINTER</code> is
+     * Returns {@code true} if this tag is used to point to an IFD
+     * structure containing additional tags. A {@code TIFFTag} represents
+     * an IFD pointer if and only if its {@code TIFFTagSet} is
+     * non-{@code null} or the data type {@code TIFF_IFD_POINTER} is
      * legal. This condition will be satisfied if and only if either
-     * <code>getTagSet()&nbsp;!=&nbsp;null</code> or
-     * <code>isDataTypeOK(TIFF_IFD_POINTER)&nbsp;==&nbsp;true</code>.
+     * {@code getTagSet()&nbsp;!=&nbsp;null} or
+     * {@code isDataTypeOK(TIFF_IFD_POINTER)&nbsp;==&nbsp;true}.
      *
      * <p>Many TIFF extensions use the IFD mechanism in order to limit the
      * number of new tags that may appear in the root IFD.</p>
      *
-     * @return <code>true</code> if this tag points to an IFD.
+     * @return {@code true} if this tag points to an IFD.
      */
     public boolean isIFDPointer() {
         return tagSet != null || isDataTypeOK(TIFF_IFD_POINTER);
     }
 
     /**
-     * Returns <code>true</code> if there are mnemonic names associated with
+     * Returns {@code true} if there are mnemonic names associated with
      * the set of legal values for the data associated with this tag.  Mnemonic
      * names apply only to tags which have integral data type.
      *
-     * @return <code>true</code> if mnemonic value names are available.
+     * @return {@code true} if mnemonic value names are available.
      */
     public boolean hasValueNames() {
         return valueNames != null;
@@ -373,14 +373,14 @@
 
     /**
      * Returns the mnemonic name associated with a particular value
-     * that this tag's data may take on, or <code>null</code> if
+     * that this tag's data may take on, or {@code null} if
      * no name is present.  Mnemonic names apply only to tags which have
      * integral data type.
      *
      * @param value the data value.
      *
      * @return the mnemonic name associated with the value, as a
-     * <code>String</code>.
+     * {@code String}.
      */
     public String getValueName(int value) {
         if (valueNames == null) {
--- a/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/TIFFTagSet.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/TIFFTagSet.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -39,7 +39,7 @@
  * specification itself).
  *
  * <p> This class and its subclasses are responsible for mapping
- * between raw tag numbers and <code>TIFFTag</code> objects, which
+ * between raw tag numbers and {@code TIFFTag} objects, which
  * contain additional information about each tag, such as the tag's
  * name, legal data types, and mnemonic names for some or all of ts
  * data values.
@@ -59,15 +59,15 @@
     private TIFFTagSet() {}
 
     /**
-     * Constructs a <code>TIFFTagSet</code>, given a <code>List</code>
-     * of <code>TIFFTag</code> objects.
+     * Constructs a {@code TIFFTagSet}, given a {@code List}
+     * of {@code TIFFTag} objects.
      *
-     * @param tags a <code>List</code> object containing
-     * <code>TIFFTag</code> objects to be added to this tag set.
+     * @param tags a {@code List} object containing
+     * {@code TIFFTag} objects to be added to this tag set.
      *
-     * @throws IllegalArgumentException if <code>tags</code> is
-     * <code>null</code>, or contains objects that are not instances
-     * of the <code>TIFFTag</code> class.
+     * @throws IllegalArgumentException if {@code tags} is
+     * {@code null}, or contains objects that are not instances
+     * of the {@code TIFFTag} class.
      */
     public TIFFTagSet(List<TIFFTag> tags) {
         if (tags == null) {
@@ -88,29 +88,29 @@
     }
 
     /**
-     * Returns the <code>TIFFTag</code> from this set that is
-     * associated with the given tag number, or <code>null</code> if
+     * Returns the {@code TIFFTag} from this set that is
+     * associated with the given tag number, or {@code null} if
      * no tag exists for that number.
      *
      * @param tagNumber the number of the tag to be retrieved.
      *
-     * @return the numbered <code>TIFFTag</code>, or <code>null</code>.
+     * @return the numbered {@code TIFFTag}, or {@code null}.
      */
     public TIFFTag getTag(int tagNumber) {
         return allowedTagsByNumber.get(Integer.valueOf(tagNumber));
     }
 
     /**
-     * Returns the <code>TIFFTag</code> having the given tag name, or
-     * <code>null</code> if the named tag does not belong to this tag set.
+     * Returns the {@code TIFFTag} having the given tag name, or
+     * {@code null} if the named tag does not belong to this tag set.
      *
      * @param tagName the name of the tag to be retrieved, as a
-     * <code>String</code>.
+     * {@code String}.
      *
-     * @return the named <code>TIFFTag</code>, or <code>null</code>.
+     * @return the named {@code TIFFTag}, or {@code null}.
      *
-     * @throws IllegalArgumentException if <code>tagName</code> is
-     * <code>null</code>.
+     * @throws IllegalArgumentException if {@code tagName} is
+     * {@code null}.
      */
     public TIFFTag getTag(String tagName) {
         if (tagName == null) {
@@ -123,7 +123,7 @@
      * Retrieves an unmodifiable numerically increasing set of tag numbers.
      *
      * <p>The returned object is unmodifiable and contains the tag
-     * numbers of all <code>TIFFTag</code>s in this <code>TIFFTagSet</code>
+     * numbers of all {@code TIFFTag}s in this {@code TIFFTagSet}
      * sorted into ascending order according to
      * {@link Integer#compareTo(Object)}.</p>
      *
@@ -145,7 +145,7 @@
      * Retrieves an unmodifiable lexicographically increasing set of tag names.
      *
      * <p>The returned object is unmodifiable and contains the tag
-     * names of all <code>TIFFTag</code>s in this <code>TIFFTagSet</code>
+     * names of all {@code TIFFTag}s in this {@code TIFFTagSet}
      * sorted into ascending order according to
      * {@link String#compareTo(Object)}.</p>
      *
--- a/jdk/src/java.desktop/share/classes/javax/print/ServiceUI.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/javax/print/ServiceUI.java	Mon Mar 14 17:51:25 2016 +0100
@@ -193,36 +193,48 @@
             getLocalGraphicsEnvironment().getDefaultScreenDevice().
             getDefaultConfiguration().getBounds() : gc.getBounds();
 
+        x += gcBounds.x;
+        y += gcBounds.y;
         ServiceDialog dialog;
         if (owner instanceof Frame) {
             dialog = new ServiceDialog(gc,
-                                       x + gcBounds.x,
-                                       y + gcBounds.y,
+                                       x,
+                                       y,
                                        services, defaultIndex,
                                        flavor, attributes,
                                        (Frame)owner);
         } else {
             dialog = new ServiceDialog(gc,
-                                       x + gcBounds.x,
-                                       y + gcBounds.y,
+                                       x,
+                                       y,
                                        services, defaultIndex,
                                        flavor, attributes,
                                        (Dialog)owner);
         }
         Rectangle dlgBounds = dialog.getBounds();
 
-        // get union of all GC bounds
-        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
-        GraphicsDevice[] gs = ge.getScreenDevices();
-        for (int j=0; j<gs.length; j++) {
-            gcBounds =
-                gcBounds.union(gs[j].getDefaultConfiguration().getBounds());
-        }
-
         // if portion of dialog is not within the gc boundary
         if (!gcBounds.contains(dlgBounds)) {
-            // put in the center relative to parent frame/dialog
-            dialog.setLocationRelativeTo(owner);
+            // check if dialog exceed window bounds at left or bottom
+            // Then position the dialog by moving it by the amount it exceeds
+            // the window bounds
+            // If it results in dialog moving beyond the window bounds at top/left
+            // then position it at window top/left
+            if (dlgBounds.x + dlgBounds.width > gcBounds.x + gcBounds.width) {
+                if ((gcBounds.x + gcBounds.width - dlgBounds.width) > gcBounds.x) {
+                    x = (gcBounds.x + gcBounds.width) - dlgBounds.width;
+                } else {
+                    x = gcBounds.x;
+                }
+            }
+            if (dlgBounds.y + dlgBounds.height > gcBounds.y + gcBounds.height) {
+                if ((gcBounds.y + gcBounds.height - dlgBounds.height) > gcBounds.y) {
+                    y = (gcBounds.y + gcBounds.height) - dlgBounds.height;
+                } else {
+                    y = gcBounds.y;
+                }
+            }
+            dialog.setBounds(x, y, dlgBounds.width, dlgBounds.height);
         }
         dialog.show();
 
--- a/jdk/src/java.desktop/share/classes/javax/swing/DefaultDesktopManager.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/javax/swing/DefaultDesktopManager.java	Mon Mar 14 17:51:25 2016 +0100
@@ -191,12 +191,6 @@
             JLayeredPane.putLayer(desktopIcon, layer);
         }
 
-        // If we are maximized we already have the normal bounds recorded
-        // don't try to re-record them, otherwise we incorrectly set the
-        // normal bounds to maximized state.
-        if (!f.isMaximum()) {
-            f.setNormalBounds(f.getBounds());
-        }
         if (findNext) {
             if (d.selectFrame(true) == null) {
                 // The icon is the last frame.
--- a/jdk/src/java.desktop/share/classes/javax/swing/filechooser/FileSystemView.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/javax/swing/filechooser/FileSystemView.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -584,6 +584,69 @@
     }
 
     /**
+     * Returns an array of files representing the values to show by default in
+     * the file chooser selector.
+     *
+     * @return an array of {@code File} objects.
+     * @throws SecurityException if the caller does not have necessary
+     *                           permissions
+     * @since 9
+     */
+    public File[] getChooserComboBoxFiles() {
+        return (File[]) ShellFolder.get("fileChooserComboBoxFolders");
+    }
+
+    /**
+     * Returns whether the specified file denotes a shell interpreted link which
+     * can be obtained by the {@link #getLinkLocation(File)}.
+     *
+     * @param file a file
+     * @return whether this is a link
+     * @throws NullPointerException if {@code file} equals {@code null}
+     * @throws SecurityException if the caller does not have necessary
+     *                           permissions
+     * @see #getLinkLocation(File)
+     * @since 9
+     */
+    public boolean isLink(File file) {
+        if (file == null) {
+            throw new NullPointerException("file is null");
+        }
+        try {
+            return ShellFolder.getShellFolder(file).isLink();
+        } catch (FileNotFoundException e) {
+            return false;
+        }
+    }
+
+    /**
+     * Returns the regular file referenced by the specified link file if
+     * the specified file is a shell interpreted link.
+     * Returns {@code null} if the specified file is not
+     * a shell interpreted link.
+     *
+     * @param file a file
+     * @return the linked file or {@code null}.
+     * @throws FileNotFoundException if the linked file does not exist
+     * @throws NullPointerException if {@code file} equals {@code null}
+     * @throws SecurityException if the caller does not have necessary
+     *                           permissions
+     * @since 9
+     */
+    public File getLinkLocation(File file) throws FileNotFoundException {
+        if (file == null) {
+            throw new NullPointerException("file is null");
+        }
+        ShellFolder shellFolder;
+        try {
+            shellFolder = ShellFolder.getShellFolder(file);
+        } catch (FileNotFoundException e) {
+            return null;
+        }
+        return shellFolder.isLink() ? shellFolder.getLinkLocation() : null;
+    }
+
+    /**
      * Throws {@code FileNotFoundException} if file not found or current thread was interrupted
      */
     ShellFolder getShellFolder(File f) throws FileNotFoundException {
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicScrollPaneUI.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicScrollPaneUI.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -962,18 +962,13 @@
                 int orientation = SwingConstants.VERTICAL;
 
                 // find which scrollbar to scroll, or return if none
-                if (toScroll == null || !toScroll.isVisible()) {
+                if (toScroll == null || !toScroll.isVisible()
+                        || e.isShiftDown()) {
                     toScroll = scrollpane.getHorizontalScrollBar();
                     if (toScroll == null || !toScroll.isVisible()) {
                         return;
                     }
                     orientation = SwingConstants.HORIZONTAL;
-                } else if(e.isShiftDown()){
-                    JScrollBar hScroll = scrollpane.getHorizontalScrollBar();
-                    if (hScroll != null && hScroll.isVisible()) {
-                        toScroll = hScroll;
-                        orientation = SwingConstants.HORIZONTAL;
-                    }
                 }
 
                 e.consume();
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthDesktopPaneUI.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthDesktopPaneUI.java	Mon Mar 14 17:51:25 2016 +0100
@@ -362,9 +362,6 @@
                 setWasIcon(f, Boolean.TRUE);
             }
 
-            if (!f.isMaximum()) {
-                f.setNormalBounds(f.getBounds());
-            }
             c.remove(f);
             c.repaint(f.getX(), f.getY(), f.getWidth(), f.getHeight());
             try {
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthTableHeaderUI.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthTableHeaderUI.java	Mon Mar 14 17:51:25 2016 +0100
@@ -230,9 +230,10 @@
 
             boolean hasRollover = (column == getRolloverColumn());
             if (isSelected || hasRollover || hasFocus) {
+                boolean enabled = (table == null)? true : table.isEnabled();
                 SynthLookAndFeel.setSelectedUI((SynthLabelUI)SynthLookAndFeel.
                              getUIOfType(getUI(), SynthLabelUI.class),
-                             isSelected, hasFocus, table.isEnabled(),
+                             isSelected, hasFocus, enabled,
                              hasRollover);
             } else {
                 SynthLookAndFeel.resetSelectedUI();
--- a/jdk/src/java.desktop/share/classes/sun/applet/Main.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/sun/applet/Main.java	Mon Mar 14 17:51:25 2016 +0100
@@ -30,8 +30,6 @@
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
 import java.net.URL;
 import java.net.MalformedURLException;
 import java.util.Enumeration;
@@ -75,7 +73,6 @@
     /**
      * Member variables set according to options passed in to AppletViewer.
      */
-    private boolean debugFlag = false;
     private boolean helpFlag  = false;
     private String  encoding  = null;
     private boolean noSecurityFlag  = false;
@@ -136,14 +133,6 @@
             return 1;
         }
 
-        if (debugFlag) {
-            // START A DEBUG SESSION
-            // Given the current architecture, we will end up decoding the
-            // arguments again, but at least we are guaranteed to have
-            // arguments which are valid.
-            return invokeDebugger(args);
-        }
-
         // INSTALL THE SECURITY MANAGER (if necessary)
         if (!noSecurityFlag && (System.getSecurityManager() == null))
             init();
@@ -191,9 +180,6 @@
                 throw new ParseException(lookup("main.err.dupoption", arg));
             encoding = args[++i];
             return 2;
-        } else if ("-debug".equals(arg)) {
-            debugFlag = true;
-            return 1;
         } else if ("-Xnosecurity".equals(arg)) {
             // This is an undocumented (and, in the future, unsupported)
             // flag which prevents AppletViewer from installing its own
@@ -267,68 +253,6 @@
         return u;
     }
 
-    /**
-     * Invoke the debugger with the arguments passed in to appletviewer.
-     *
-     * @param args The arguments passed into the debugger.
-     * @return     {@code 0} if the debugger is invoked successfully,
-     *             {@code 1} otherwise.
-     */
-    private int invokeDebugger(String [] args) {
-        // CONSTRUCT THE COMMAND LINE
-        String [] newArgs = new String[args.length + 1];
-        int current = 0;
-
-        // Add a -classpath argument that prevents
-        // the debugger from launching appletviewer with the default of
-        // ".". appletviewer's classpath should never contain valid
-        // classes since they will result in security exceptions.
-        // Ideally, the classpath should be set to "", but the VM won't
-        // allow an empty classpath, so a phony directory name is used.
-        String phonyDir = System.getProperty("java.home") +
-                          File.separator + "phony";
-        newArgs[current++] = "-Djava.class.path=" + phonyDir;
-
-        // Appletviewer's main class is the debuggee
-        newArgs[current++] = "sun.applet.Main";
-
-        // Append all the of the original appletviewer arguments,
-        // leaving out the "-debug" option.
-        for (int i = 0; i < args.length; i++) {
-            if (!("-debug".equals(args[i]))) {
-                newArgs[current++] = args[i];
-            }
-        }
-
-        // LAUNCH THE DEBUGGER
-        // Reflection is used for two reasons:
-        // 1) The debugger classes are on classpath and thus must be loaded
-        // by the application class loader. (Currently, appletviewer are
-        // loaded through the boot class path out of rt.jar.)
-        // 2) Reflection removes any build dependency between appletviewer
-        // and jdb.
-        try {
-            Class<?> c = Class.forName("com.sun.tools.example.debug.tty.TTY", true,
-                                    ClassLoader.getSystemClassLoader());
-            Method m = c.getDeclaredMethod("main",
-                                           new Class<?>[] { String[].class });
-            m.invoke(null, new Object[] { newArgs });
-        } catch (ClassNotFoundException cnfe) {
-            System.err.println(lookup("main.debug.cantfinddebug"));
-            return 1;
-        } catch (NoSuchMethodException nsme) {
-            System.err.println(lookup("main.debug.cantfindmain"));
-            return 1;
-        } catch (InvocationTargetException ite) {
-            System.err.println(lookup("main.debug.exceptionindebug"));
-            return 1;
-        } catch (IllegalAccessException iae) {
-            System.err.println(lookup("main.debug.cantaccess"));
-            return 1;
-        }
-        return 0;
-    }
-
     private void init() {
         // GET APPLETVIEWER USER-SPECIFIC PROPERTIES
         Properties avProps = getAVProps();
--- a/jdk/src/java.desktop/share/classes/sun/applet/resources/MsgAppletViewer.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/sun/applet/resources/MsgAppletViewer.java	Mon Mar 14 17:51:25 2016 +0100
@@ -74,7 +74,7 @@
             {"appletviewer.parse.warning.embed.requireswidth", "Warning: <embed> tag requires width attribute."},
             {"appletviewer.parse.warning.appnotLongersupported", "Warning: <app> tag no longer supported, use <applet> instead:"},
             {"appletviewer.deprecated", "AppletViewer is deprecated."},
-            {"appletviewer.usage", "Usage: appletviewer <options> url(s)\n\nwhere <options> include:\n  -debug                  Start the applet viewer in the Java debugger\n  -encoding <encoding>    Specify character encoding used by HTML files\n  -J<runtime flag>        Pass argument to the java interpreter\n\nThe -J option is non-standard and subject to change without notice."},
+            {"appletviewer.usage", "Usage: appletviewer <options> url(s)\n\nwhere <options> include:\n  -encoding <encoding>    Specify character encoding used by HTML files\n  -J<runtime flag>        Pass argument to the java interpreter\n\nThe -J option is non-standard and subject to change without notice."},
             {"appletviewer.main.err.unsupportedopt", "Unsupported option: {0}"},
             {"appletviewer.main.err.unrecognizedarg", "Unrecognized argument: {0}"},
             {"appletviewer.main.err.dupoption", "Duplicate use of option: {0}"},
--- a/jdk/src/java.desktop/share/classes/sun/awt/ExtendedKeyCodes.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/sun/awt/ExtendedKeyCodes.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,3 +1,27 @@
+/*
+ * Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
 package sun.awt;
 
 import java.util.Collections;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/share/classes/sun/java2d/ReentrantContext.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package sun.java2d;
+
+import java.lang.ref.Reference;
+
+/**
+ * ReentrantContext is a base class to hold thread-local data supporting
+ * reentrancy in either a ThreadLocal or a ConcurrentLinkedQueue
+ *
+ * @see ReentrantContextProvider
+ */
+public class ReentrantContext {
+    // usage stored as a byte
+    byte usage = ReentrantContextProvider.USAGE_TL_INACTIVE;
+    /*
+     * Reference to this instance (hard, soft or weak).
+     * @see ReentrantContextProvider#refType
+     */
+    Reference<? extends ReentrantContext> reference = null;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/share/classes/sun/java2d/ReentrantContextProvider.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,169 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package sun.java2d;
+
+import java.lang.ref.Reference;
+import java.lang.ref.SoftReference;
+import java.lang.ref.WeakReference;
+
+/**
+ * This abstract ReentrantContextProvider helper class manages the creation,
+ * storage, and retrieval of concrete ReentrantContext instances which can be
+ * subclassed to hold cached contextual data.
+ *
+ * It supports reentrancy as every call to acquire() provides a new unique context
+ * instance that must later be returned for reuse by a call to release(ctx)
+ * (typically in a try/finally block).
+ *
+ * It has a couple of abstract implementations which store references in a queue
+ * and/or thread-local storage.
+ * The Providers can be configured to hold ReentrantContext instances in memory
+ * using hard, soft or weak references.
+ *
+ * The acquire() and release() methods are used to retrieve and return the contexts.
+ *
+ * The {@code newContext()} method remains abstract in all implementations and
+ * must be provided by the module to create a new subclass of ReentrantContext
+ * with the appropriate contextual data in it.
+ *
+ * Sample Usage:
+ * - create a subclass ReentrantContextImpl to hold the thread state:
+ *
+ * static final class ReentrantContextImpl extends ReentrantContext {
+ *     // specific cached data
+ * }
+ *
+ * - create the appropriate ReentrantContextProvider:
+ *
+ * private static final ReentrantContextProvider<ReentrantContextImpl> contextProvider =
+ *     new ReentrantContextProviderTL<ReentrantContextImpl>(ReentrantContextProvider.REF_WEAK)
+ *     {
+ *         @Override
+ *         protected ReentrantContextImpl newContext() {
+ *             return new ReentrantContextImpl();
+ *         }
+ *     };
+ * ...
+ * void someMethod() {
+ *     ReentrantContextImpl ctx = contextProvider.acquire();
+ *     try {
+ *         // use the context
+ *     } finally {
+ *         contextProvider.release(ctx);
+ *     }
+ * }
+ *
+ * @param <K> ReentrantContext subclass
+ *
+ * @see ReentrantContext
+ */
+public abstract class ReentrantContextProvider<K extends ReentrantContext>
+{
+    // thread-local storage: inactive
+    static final byte USAGE_TL_INACTIVE = 0;
+    // thread-local storage: in use
+    static final byte USAGE_TL_IN_USE = 1;
+    // CLQ storage
+    static final byte USAGE_CLQ = 2;
+
+    // hard reference
+    public static final int REF_HARD = 0;
+    // soft reference
+    public static final int REF_SOFT = 1;
+    // weak reference
+    public static final int REF_WEAK = 2;
+
+    /* members */
+    // internal reference type
+    private final int refType;
+
+    /**
+     * Create a new ReentrantContext provider using the given reference type
+     * among hard, soft or weak
+     *
+     * @param refType reference type
+     */
+    protected ReentrantContextProvider(final int refType) {
+        this.refType = refType;
+    }
+
+    /**
+     * Create a new ReentrantContext instance
+     *
+     * @return new ReentrantContext instance
+     */
+    protected abstract K newContext();
+
+    /**
+     * Give a ReentrantContext instance for the current thread
+     *
+     * @return ReentrantContext instance
+     */
+    public abstract K acquire();
+
+    /**
+     * Restore the given ReentrantContext instance for reuse
+     *
+     * @param ctx ReentrantContext instance
+     */
+    public abstract void release(K ctx);
+
+    @SuppressWarnings("unchecked")
+    protected final Reference<K> getOrCreateReference(final K ctx) {
+        if (ctx.reference == null) {
+            // Create the reference:
+            switch (refType) {
+                case REF_HARD:
+                    ctx.reference = new HardReference<K>(ctx);
+                    break;
+                case REF_SOFT:
+                    ctx.reference = new SoftReference<K>(ctx);
+                    break;
+                default:
+                case REF_WEAK:
+                    ctx.reference = new WeakReference<K>(ctx);
+                    break;
+            }
+        }
+        return (Reference<K>) ctx.reference;
+    }
+
+    /* Missing HardReference implementation */
+    static final class HardReference<V> extends WeakReference<V> {
+        // kept strong reference:
+        private final V strongRef;
+
+        HardReference(final V referent) {
+            // no referent needed for the parent WeakReference:
+            super(null);
+            this.strongRef = referent;
+        }
+
+        @Override
+        public V get() {
+            return strongRef;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/share/classes/sun/java2d/ReentrantContextProviderCLQ.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package sun.java2d;
+
+import java.lang.ref.Reference;
+import java.util.concurrent.ConcurrentLinkedQueue;
+
+/**
+ * This ReentrantContextProvider implementation uses one ConcurrentLinkedQueue
+ * to store all ReentrantContext instances (thread and its child contexts)
+ *
+ * Note: this implementation keeps less contexts in memory depending on the
+ * concurrent active threads in contrary to a ThreadLocal provider. However,
+ * it is slower in highly concurrent workloads.
+ *
+ * @param <K> ReentrantContext subclass
+ */
+public abstract class ReentrantContextProviderCLQ<K extends ReentrantContext>
+    extends ReentrantContextProvider<K>
+{
+    // ReentrantContext queue to store all contexts
+    private final ConcurrentLinkedQueue<Reference<K>> ctxQueue
+        = new ConcurrentLinkedQueue<Reference<K>>();
+
+    /**
+     * Create a new ReentrantContext provider using the given reference type
+     * among hard, soft or weak based using a ConcurrentLinkedQueue storage
+     *
+     * @param refType reference type
+     */
+    public ReentrantContextProviderCLQ(final int refType) {
+        super(refType);
+    }
+
+    /**
+     * Give a ReentrantContext instance for the current thread
+     *
+     * @return ReentrantContext instance
+     */
+    @Override
+    public final K acquire() {
+        K ctx = null;
+        // Drain queue if all referent are null:
+        Reference<K> ref = null;
+        while ((ctx == null) && ((ref = ctxQueue.poll()) != null)) {
+            ctx = ref.get();
+        }
+        if (ctx == null) {
+            // create a new ReentrantContext if none is available
+            ctx = newContext();
+            ctx.usage = USAGE_CLQ;
+        }
+        return ctx;
+    }
+
+    /**
+     * Restore the given ReentrantContext instance for reuse
+     *
+     * @param ctx ReentrantContext instance
+     */
+    @Override
+    public final void release(final K ctx) {
+        if (ctx.usage == USAGE_CLQ) {
+            ctxQueue.offer(getOrCreateReference(ctx));
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/share/classes/sun/java2d/ReentrantContextProviderTL.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package sun.java2d;
+
+import java.lang.ref.Reference;
+
+/**
+* This ReentrantContextProvider implementation uses a ThreadLocal to hold
+ * the first ReentrantContext per thread and a ReentrantContextProviderCLQ to
+ * store child ReentrantContext instances needed during recursion.
+ *
+ * Note: this implementation may keep up to one context in memory per thread.
+ * Child contexts for recursive uses are stored in the queue using a WEAK
+ * reference by default unless specified in the 2 argument constructor.
+ *
+ * @param <K> ReentrantContext subclass
+ */
+public abstract class ReentrantContextProviderTL<K extends ReentrantContext>
+    extends ReentrantContextProvider<K>
+{
+    // Thread-local storage:
+    private final ThreadLocal<Reference<K>> ctxTL
+        = new ThreadLocal<Reference<K>>();
+
+    // ReentrantContext CLQ provider for child contexts:
+    private final ReentrantContextProviderCLQ<K> ctxProviderCLQ;
+
+    /**
+     * Create a new ReentrantContext provider using the given reference type
+     * among hard, soft or weak.
+     * It uses weak reference for the child contexts.
+     *
+     * @param refType reference type
+     */
+    public ReentrantContextProviderTL(final int refType) {
+        this(refType, REF_WEAK);
+    }
+
+    /**
+     * Create a new ReentrantContext provider using the given reference types
+     * among hard, soft or weak
+     *
+     * @param refTypeTL reference type used by ThreadLocal
+     * @param refTypeCLQ reference type used by ReentrantContextProviderCLQ
+     */
+    public ReentrantContextProviderTL(final int refTypeTL, final int refTypeCLQ)
+    {
+        super(refTypeTL);
+
+        final ReentrantContextProviderTL<K> parent = this;
+
+        this.ctxProviderCLQ = new ReentrantContextProviderCLQ<K>(refTypeCLQ) {
+            @Override
+            protected K newContext() {
+                return parent.newContext();
+            }
+        };
+    }
+
+    /**
+     * Give a ReentrantContext instance for the current thread
+     *
+     * @return ReentrantContext instance
+     */
+    @Override
+    public final K acquire() {
+        K ctx = null;
+        final Reference<K> ref = ctxTL.get();
+        if (ref != null) {
+            ctx = ref.get();
+        }
+        if (ctx == null) {
+            // create a new ReentrantContext if none is available
+            ctx = newContext();
+            // update thread local reference:
+            ctxTL.set(getOrCreateReference(ctx));
+        }
+        // Check reentrance:
+        if (ctx.usage == USAGE_TL_INACTIVE) {
+           ctx.usage = USAGE_TL_IN_USE;
+        } else {
+            // get or create another ReentrantContext from CLQ provider:
+            ctx = ctxProviderCLQ.acquire();
+        }
+        return ctx;
+    }
+
+    /**
+     * Restore the given ReentrantContext instance for reuse
+     *
+     * @param ctx ReentrantContext instance
+     */
+    @Override
+    public final void release(final K ctx) {
+        if (ctx.usage == USAGE_TL_IN_USE) {
+           ctx.usage = USAGE_TL_INACTIVE;
+        } else {
+            ctxProviderCLQ.release(ctx);
+        }
+    }
+}
--- a/jdk/src/java.desktop/share/classes/sun/java2d/marlin/ByteArrayCache.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/sun/java2d/marlin/ByteArrayCache.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -126,7 +126,7 @@
         }
 
         if (doChecks) {
-            check(array, 0, array.length, value);
+            check(array, fromIndex, toIndex, value);
         }
     }
 
@@ -135,9 +135,10 @@
     {
         if (doChecks) {
             // check zero on full array:
-            for (int i = fromIndex; i < toIndex; i++) {
+            for (int i = 0; i < array.length; i++) {
                 if (array[i] != value) {
-                    logException("Invalid array value at " + i + "\n"
+                    logException("Invalid value at: " + i + " = " + array[i]
+                            + " from: " + fromIndex + " to: " + toIndex + "\n"
                             + Arrays.toString(array), new Throwable());
 
                     // ensure array is correctly filled:
--- a/jdk/src/java.desktop/share/classes/sun/java2d/marlin/FloatArrayCache.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/sun/java2d/marlin/FloatArrayCache.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -127,7 +127,7 @@
         }
 
         if (doChecks) {
-            check(array, 0, array.length, value);
+            check(array, fromIndex, toIndex, value);
         }
     }
 
@@ -136,9 +136,10 @@
     {
         if (doChecks) {
             // check zero on full array:
-            for (int i = fromIndex; i < toIndex; i++) {
+            for (int i = 0; i < array.length; i++) {
                 if (array[i] != value) {
-                    logException("Invalid array value at " + i + "\n"
+                    logException("Invalid value at: " + i + " = " + array[i]
+                            + " from: " + fromIndex + " to: " + toIndex + "\n"
                             + Arrays.toString(array), new Throwable());
 
                     // ensure array is correctly filled:
--- a/jdk/src/java.desktop/share/classes/sun/java2d/marlin/IntArrayCache.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/sun/java2d/marlin/IntArrayCache.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -126,7 +126,7 @@
         }
 
         if (doChecks) {
-            check(array, 0, array.length, value);
+            check(array, fromIndex, toIndex, value);
         }
     }
 
@@ -135,9 +135,10 @@
     {
         if (doChecks) {
             // check zero on full array:
-            for (int i = fromIndex; i < toIndex; i++) {
+            for (int i = 0; i < array.length; i++) {
                 if (array[i] != value) {
-                    logException("Invalid array value at " + i + "\n"
+                    logException("Invalid value at: " + i + " = " + array[i]
+                            + " from: " + fromIndex + " to: " + toIndex + "\n"
                             + Arrays.toString(array), new Throwable());
 
                     // ensure array is correctly filled:
--- a/jdk/src/java.desktop/share/classes/sun/java2d/marlin/MarlinCache.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/sun/java2d/marlin/MarlinCache.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -590,8 +590,8 @@
             alphaRow[to + 1] = 0;
         }
         if (doChecks) {
-            IntArrayCache.check(blkFlags, 0, blkFlags.length, 0);
-            IntArrayCache.check(alphaRow, 0, alphaRow.length, 0);
+            IntArrayCache.check(blkFlags, blkW, blkE, 0);
+            IntArrayCache.check(alphaRow, from, px1 - bboxX0, 0);
         }
 
         if (doMonitors) {
--- a/jdk/src/java.desktop/share/classes/sun/java2d/marlin/MarlinRenderingEngine.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/sun/java2d/marlin/MarlinRenderingEngine.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,11 +30,12 @@
 import java.awt.geom.AffineTransform;
 import java.awt.geom.Path2D;
 import java.awt.geom.PathIterator;
-import java.lang.ref.Reference;
 import java.security.AccessController;
-import java.util.concurrent.ConcurrentLinkedQueue;
 import static sun.java2d.marlin.MarlinUtils.logInfo;
 import sun.awt.geom.PathConsumer2D;
+import sun.java2d.ReentrantContextProvider;
+import sun.java2d.ReentrantContextProviderCLQ;
+import sun.java2d.ReentrantContextProviderTL;
 import sun.java2d.pipe.AATileGenerator;
 import sun.java2d.pipe.Region;
 import sun.java2d.pipe.RenderingEngine;
@@ -882,46 +883,50 @@
     // use ThreadLocal or ConcurrentLinkedQueue to get one RendererContext
     private static final boolean useThreadLocal;
 
-    // hard reference
-    static final int REF_HARD = 0;
-    // soft reference
-    static final int REF_SOFT = 1;
-    // weak reference
-    static final int REF_WEAK = 2;
-
     // reference type stored in either TL or CLQ
     static final int REF_TYPE;
 
     // Per-thread RendererContext
-    private static final ThreadLocal<Object> rdrCtxThreadLocal;
-    // RendererContext queue when ThreadLocal is disabled
-    private static final ConcurrentLinkedQueue<Object> rdrCtxQueue;
+    private static final ReentrantContextProvider<RendererContext> rdrCtxProvider;
 
     // Static initializer to use TL or CLQ mode
     static {
-        // CLQ mode by default:
         useThreadLocal = MarlinProperties.isUseThreadLocal();
-        rdrCtxThreadLocal = (useThreadLocal) ? new ThreadLocal<Object>()
-                                             : null;
-        rdrCtxQueue = (!useThreadLocal) ? new ConcurrentLinkedQueue<Object>()
-                                        : null;
 
         // Soft reference by default:
-        String refType = AccessController.doPrivileged(
+        final String refType = AccessController.doPrivileged(
                             new GetPropertyAction("sun.java2d.renderer.useRef",
                             "soft"));
         switch (refType) {
             default:
             case "soft":
-                REF_TYPE = REF_SOFT;
+                REF_TYPE = ReentrantContextProvider.REF_SOFT;
                 break;
             case "weak":
-                REF_TYPE = REF_WEAK;
+                REF_TYPE = ReentrantContextProvider.REF_WEAK;
                 break;
             case "hard":
-                REF_TYPE = REF_HARD;
+                REF_TYPE = ReentrantContextProvider.REF_HARD;
                 break;
         }
+
+        if (useThreadLocal) {
+            rdrCtxProvider = new ReentrantContextProviderTL<RendererContext>(REF_TYPE)
+                {
+                    @Override
+                    protected RendererContext newContext() {
+                        return RendererContext.createContext();
+                    }
+                };
+        } else {
+            rdrCtxProvider = new ReentrantContextProviderCLQ<RendererContext>(REF_TYPE)
+                {
+                    @Override
+                    protected RendererContext newContext() {
+                        return RendererContext.createContext();
+                    }
+                };
+        }
     }
 
     private static boolean settingsLogged = !enableLogs;
@@ -936,13 +941,13 @@
         String refType;
         switch (REF_TYPE) {
             default:
-            case REF_HARD:
+            case ReentrantContextProvider.REF_HARD:
                 refType = "hard";
                 break;
-            case REF_SOFT:
+            case ReentrantContextProvider.REF_SOFT:
                 refType = "soft";
                 break;
-            case REF_WEAK:
+            case ReentrantContextProvider.REF_WEAK:
                 refType = "weak";
                 break;
         }
@@ -1025,22 +1030,7 @@
      */
     @SuppressWarnings({"unchecked"})
     static RendererContext getRendererContext() {
-        RendererContext rdrCtx = null;
-        final Object ref = (useThreadLocal) ? rdrCtxThreadLocal.get()
-                           : rdrCtxQueue.poll();
-        if (ref != null) {
-            // resolve reference:
-            rdrCtx = (REF_TYPE == REF_HARD) ? ((RendererContext) ref)
-                     : ((Reference<RendererContext>) ref).get();
-        }
-        // create a new RendererContext if none is available
-        if (rdrCtx == null) {
-            rdrCtx = RendererContext.createContext();
-            if (useThreadLocal) {
-                // update thread local reference:
-                rdrCtxThreadLocal.set(rdrCtx.reference);
-            }
-        }
+        final RendererContext rdrCtx = rdrCtxProvider.acquire();
         if (doMonitors) {
             RendererContext.stats.mon_pre_getAATileGenerator.start();
         }
@@ -1057,8 +1047,6 @@
         if (doMonitors) {
             RendererContext.stats.mon_pre_getAATileGenerator.stop();
         }
-        if (!useThreadLocal) {
-            rdrCtxQueue.offer(rdrCtx.reference);
-        }
+        rdrCtxProvider.release(rdrCtx);
     }
 }
--- a/jdk/src/java.desktop/share/classes/sun/java2d/marlin/Renderer.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/sun/java2d/marlin/Renderer.java	Mon Mar 14 17:51:25 2016 +0100
@@ -148,8 +148,8 @@
 //////////////////////////////////////////////////////////////////////////////
 //  EDGE LIST
 //////////////////////////////////////////////////////////////////////////////
-    private float edgeMinY = Float.POSITIVE_INFINITY;
-    private float edgeMaxY = Float.NEGATIVE_INFINITY;
+    private int edgeMinY = Integer.MAX_VALUE;
+    private int edgeMaxY = Integer.MIN_VALUE;
     private float edgeMinX = Float.POSITIVE_INFINITY;
     private float edgeMaxX = Float.NEGATIVE_INFINITY;
 
@@ -357,18 +357,21 @@
             }
             return;
         }
-        // edge min/max X/Y are in subpixel space (inclusive)
-        if (y1 < edgeMinY) {
-            edgeMinY = y1;
+
+        // edge min/max X/Y are in subpixel space (inclusive) within bounds:
+        // note: Use integer crossings to ensure consistent range within
+        // edgeBuckets / edgeBucketCounts arrays in case of NaN values (int = 0)
+        if (firstCrossing < edgeMinY) {
+            edgeMinY = firstCrossing;
         }
-        if (y2 > edgeMaxY) {
-            edgeMaxY = y2;
+        if (lastCrossing > edgeMaxY) {
+            edgeMaxY = lastCrossing;
         }
 
         // Use double-precision for improved accuracy:
         final double x1d   = x1;
         final double y1d   = y1;
-        final double slope = (x2 - x1d) / (y2 - y1d);
+        final double slope = (x1d - x2) / (y1d - y2);
 
         if (slope >= 0.0) { // <==> x1 < x2
             if (x1 < edgeMinX) {
@@ -504,7 +507,7 @@
     private float x0, y0;
 
     // Position of most recent 'moveTo' command
-    private float pix_sx0, pix_sy0;
+    private float sx0, sy0;
 
     // per-thread renderer context
     final RendererContext rdrCtx;
@@ -570,8 +573,8 @@
             edgeBucketCounts = rdrCtx.getIntArray(edgeBucketsLength);
         }
 
-        edgeMinY = Float.POSITIVE_INFINITY;
-        edgeMaxY = Float.NEGATIVE_INFINITY;
+        edgeMinY = Integer.MAX_VALUE;
+        edgeMaxY = Integer.MIN_VALUE;
         edgeMinX = Float.POSITIVE_INFINITY;
         edgeMaxX = Float.NEGATIVE_INFINITY;
 
@@ -628,7 +631,7 @@
             blkFlags = blkFlags_initial;
         }
 
-        if (edgeMinY != Float.POSITIVE_INFINITY) {
+        if (edgeMinY != Integer.MAX_VALUE) {
             // if context is maked as DIRTY:
             if (rdrCtx.dirty) {
                 // may happen if an exception if thrown in the pipeline processing:
@@ -688,16 +691,18 @@
     @Override
     public void moveTo(float pix_x0, float pix_y0) {
         closePath();
-        this.pix_sx0 = pix_x0;
-        this.pix_sy0 = pix_y0;
-        this.y0 = tosubpixy(pix_y0);
-        this.x0 = tosubpixx(pix_x0);
+        final float sx = tosubpixx(pix_x0);
+        final float sy = tosubpixy(pix_y0);
+        this.sx0 = sx;
+        this.sy0 = sy;
+        this.x0 = sx;
+        this.y0 = sy;
     }
 
     @Override
     public void lineTo(float pix_x1, float pix_y1) {
-        float x1 = tosubpixx(pix_x1);
-        float y1 = tosubpixy(pix_y1);
+        final float x1 = tosubpixx(pix_x1);
+        final float y1 = tosubpixy(pix_y1);
         addLine(x0, y0, x1, y1);
         x0 = x1;
         y0 = y1;
@@ -729,8 +734,9 @@
 
     @Override
     public void closePath() {
-        // lineTo expects its input in pixel coordinates.
-        lineTo(pix_sx0, pix_sy0);
+        addLine(x0, y0, sx0, sy0);
+        x0 = sx0;
+        y0 = sy0;
     }
 
     @Override
@@ -1396,7 +1402,7 @@
         if (doMonitors) {
             RendererContext.stats.mon_rdr_endRendering.start();
         }
-        if (edgeMinY == Float.POSITIVE_INFINITY) {
+        if (edgeMinY == Integer.MAX_VALUE) {
             return false; // undefined edges bounds
         }
 
@@ -1407,11 +1413,10 @@
         final int spminX = FloatMath.max(FloatMath.ceil_int(edgeMinX - 0.5f), boundsMinX);
         final int spmaxX = FloatMath.min(FloatMath.ceil_int(edgeMaxX - 0.5f), boundsMaxX - 1);
 
-        // y1 (and y2) are already biased by -0.5 in tosubpixy():
-        final int spminY = FloatMath.max(FloatMath.ceil_int(edgeMinY), _boundsMinY);
-        int maxY = FloatMath.ceil_int(edgeMaxY);
-
+        // edge Min/Max Y are already rounded to subpixels within bounds:
+        final int spminY = edgeMinY;
         final int spmaxY;
+        int maxY = edgeMaxY;
 
         if (maxY <= _boundsMaxY - 1) {
             spmaxY = maxY;
--- a/jdk/src/java.desktop/share/classes/sun/java2d/marlin/RendererContext.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/sun/java2d/marlin/RendererContext.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,9 +26,10 @@
 package sun.java2d.marlin;
 
 import java.awt.geom.Path2D;
-import java.lang.ref.SoftReference;
 import java.lang.ref.WeakReference;
 import java.util.concurrent.atomic.AtomicInteger;
+import sun.java2d.ReentrantContext;
+import sun.java2d.ReentrantContextProvider;
 import static sun.java2d.marlin.ArrayCache.*;
 import sun.java2d.marlin.MarlinRenderingEngine.NormalizingPathIterator;
 import static sun.java2d.marlin.MarlinUtils.logInfo;
@@ -36,7 +37,7 @@
 /**
  * This class is a renderer context dedicated to a single thread
  */
-final class RendererContext implements MarlinConst {
+final class RendererContext extends ReentrantContext implements MarlinConst {
 
     // RendererContext creation counter
     private static final AtomicInteger contextCount = new AtomicInteger(1);
@@ -45,7 +46,7 @@
                                        ? RendererStats.getInstance(): null;
 
     private static final boolean USE_CACHE_HARD_REF = doStats
-        || (MarlinRenderingEngine.REF_TYPE == MarlinRenderingEngine.REF_WEAK);
+        || (MarlinRenderingEngine.REF_TYPE == ReentrantContextProvider.REF_WEAK);
 
     /**
      * Create a new renderer context
@@ -55,6 +56,7 @@
     static RendererContext createContext() {
         final RendererContext newCtx = new RendererContext("ctx"
                     + Integer.toString(contextCount.getAndIncrement()));
+
         if (RendererContext.stats != null) {
             RendererContext.stats.allContexts.add(newCtx);
         }
@@ -63,11 +65,6 @@
 
     // context name (debugging purposes)
     final String name;
-    /*
-     * Reference to this instance (hard, soft or weak).
-     * @see MarlinRenderingEngine#REF_TYPE
-     */
-    final Object reference;
     // Smallest object used as Cleaner's parent reference
     final Object cleanerObj = new Object();
     // dirty flag indicating an exception occured during pipeline in pathTo()
@@ -101,7 +98,7 @@
     /**
      * Constructor
      *
-     * @param name
+     * @param name context name (debugging)
      */
     RendererContext(final String name) {
         if (logCreateContext) {
@@ -124,20 +121,6 @@
 
         stroker = new Stroker(this);
         dasher = new Dasher(this);
-
-        // Create the reference to this instance (hard, soft or weak):
-        switch (MarlinRenderingEngine.REF_TYPE) {
-            default:
-            case MarlinRenderingEngine.REF_HARD:
-                reference = this;
-                break;
-            case MarlinRenderingEngine.REF_SOFT:
-                reference = new SoftReference<RendererContext>(this);
-                break;
-            case MarlinRenderingEngine.REF_WEAK:
-                reference = new WeakReference<RendererContext>(this);
-                break;
-        }
     }
 
     /**
--- a/jdk/src/java.desktop/share/classes/sun/java2d/marlin/Version.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/sun/java2d/marlin/Version.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,7 +27,7 @@
 
 public final class Version {
 
-    private static final String version = "marlin-0.7.3-Unsafe-OpenJDK";
+    private static final String version = "marlin-0.7.3.2-Unsafe-OpenJDK";
 
     public static String getVersion() {
         return version;
--- a/jdk/src/java.desktop/share/classes/sun/java2d/pipe/AAShapePipe.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/sun/java2d/pipe/AAShapePipe.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,7 +28,11 @@
 import java.awt.Rectangle;
 import java.awt.Shape;
 import java.awt.geom.Rectangle2D;
+import java.util.concurrent.ConcurrentLinkedQueue;
 import sun.awt.SunHints;
+import sun.java2d.ReentrantContext;
+import sun.java2d.ReentrantContextProvider;
+import sun.java2d.ReentrantContextProviderTL;
 import sun.java2d.SunGraphics2D;
 
 /**
@@ -38,28 +42,31 @@
  * This class sets up the Generator and computes the alpha tiles
  * and then passes them on to a CompositePipe object for painting.
  */
-public class AAShapePipe
+public final class AAShapePipe
     implements ShapeDrawPipe, ParallelogramPipe
 {
-    static RenderingEngine renderengine = RenderingEngine.getInstance();
+    static final RenderingEngine renderengine = RenderingEngine.getInstance();
 
     // Per-thread TileState (~1K very small so do not use any Weak Reference)
-    private static final ThreadLocal<TileState> tileStateThreadLocal =
-            new ThreadLocal<TileState>() {
-        @Override
-        protected TileState initialValue() {
-            return new TileState();
-        }
-    };
+    private static final ReentrantContextProvider<TileState> tileStateProvider =
+            new ReentrantContextProviderTL<TileState>(
+                    ReentrantContextProvider.REF_HARD)
+            {
+                @Override
+                protected TileState newContext() {
+                    return new TileState();
+                }
+            };
 
-    CompositePipe outpipe;
+    final CompositePipe outpipe;
 
     public AAShapePipe(CompositePipe pipe) {
         outpipe = pipe;
     }
 
+    @Override
     public void draw(SunGraphics2D sg, Shape s) {
-        BasicStroke bs;
+        final BasicStroke bs;
 
         if (sg.stroke instanceof BasicStroke) {
             bs = (BasicStroke) sg.stroke;
@@ -71,10 +78,12 @@
         renderPath(sg, s, bs);
     }
 
+    @Override
     public void fill(SunGraphics2D sg, Shape s) {
         renderPath(sg, s, null);
     }
 
+    @Override
     public void fillParallelogram(SunGraphics2D sg,
                                   double ux1, double uy1,
                                   double ux2, double uy2,
@@ -82,21 +91,23 @@
                                   double dx1, double dy1,
                                   double dx2, double dy2)
     {
-        Region clip = sg.getCompClip();
-        final TileState ts = tileStateThreadLocal.get();
-        final int[] abox = ts.abox;
+        final TileState ts = tileStateProvider.acquire();
+        try {
+            final int[] abox = ts.abox;
 
-        AATileGenerator aatg =
-            renderengine.getAATileGenerator(x, y, dx1, dy1, dx2, dy2, 0, 0,
-                                            clip, abox);
-        if (aatg == null) {
-            // Nothing to render
-            return;
+            final AATileGenerator aatg =
+                renderengine.getAATileGenerator(x, y, dx1, dy1, dx2, dy2, 0, 0,
+                                                sg.getCompClip(), abox);
+            if (aatg != null) {
+                renderTiles(sg, ts.computeBBox(ux1, uy1, ux2, uy2),
+                            aatg, abox, ts);
+            }
+        } finally {
+            tileStateProvider.release(ts);
         }
-
-        renderTiles(sg, ts.computeBBox(ux1, uy1, ux2, uy2), aatg, abox, ts);
     }
 
+    @Override
     public void drawParallelogram(SunGraphics2D sg,
                                   double ux1, double uy1,
                                   double ux2, double uy2,
@@ -105,52 +116,61 @@
                                   double dx2, double dy2,
                                   double lw1, double lw2)
     {
-        Region clip = sg.getCompClip();
-        final TileState ts = tileStateThreadLocal.get();
-        final int[] abox = ts.abox;
+        final TileState ts = tileStateProvider.acquire();
+        try {
+            final int[] abox = ts.abox;
 
-        AATileGenerator aatg =
-            renderengine.getAATileGenerator(x, y, dx1, dy1, dx2, dy2, lw1, lw2,
-                                            clip, abox);
-        if (aatg == null) {
-            // Nothing to render
-            return;
+            final AATileGenerator aatg =
+                renderengine.getAATileGenerator(x, y, dx1, dy1, dx2, dy2, lw1,
+                                                lw2, sg.getCompClip(), abox);
+            if (aatg != null) {
+                // Note that bbox is of the original shape, not the wide path.
+                // This is appropriate for handing to Paint methods...
+                renderTiles(sg, ts.computeBBox(ux1, uy1, ux2, uy2),
+                            aatg, abox, ts);
+            }
+        } finally {
+            tileStateProvider.release(ts);
         }
-
-        // Note that bbox is of the original shape, not the wide path.
-        // This is appropriate for handing to Paint methods...
-        renderTiles(sg, ts.computeBBox(ux1, uy1, ux2, uy2), aatg, abox, ts);
     }
 
     public void renderPath(SunGraphics2D sg, Shape s, BasicStroke bs) {
-        boolean adjust = (bs != null &&
+        final boolean adjust = (bs != null &&
                           sg.strokeHint != SunHints.INTVAL_STROKE_PURE);
-        boolean thin = (sg.strokeState <= SunGraphics2D.STROKE_THINDASHED);
+        final boolean thin = (sg.strokeState <= SunGraphics2D.STROKE_THINDASHED);
 
-        Region clip = sg.getCompClip();
-        final TileState ts = tileStateThreadLocal.get();
-        final int[] abox = ts.abox;
+        final TileState ts = tileStateProvider.acquire();
+        try {
+            final int[] abox = ts.abox;
 
-        AATileGenerator aatg =
-            renderengine.getAATileGenerator(s, sg.transform, clip,
-                                            bs, thin, adjust, abox);
-        if (aatg == null) {
-            // Nothing to render
-            return;
+            final AATileGenerator aatg =
+                renderengine.getAATileGenerator(s, sg.transform, sg.getCompClip(),
+                                                bs, thin, adjust, abox);
+            if (aatg != null) {
+                renderTiles(sg, s, aatg, abox, ts);
+            }
+        } finally {
+            tileStateProvider.release(ts);
         }
-
-        renderTiles(sg, s, aatg, abox, ts);
     }
 
     public void renderTiles(SunGraphics2D sg, Shape s,
-                            AATileGenerator aatg, int abox[], TileState ts)
+                            final AATileGenerator aatg,
+                            final int[] abox, final TileState ts)
     {
         Object context = null;
         try {
+            // reentrance: outpipe may also use AAShapePipe:
             context = outpipe.startSequence(sg, s,
                                             ts.computeDevBox(abox),
                                             abox);
 
+            // copy of int[] abox as local variables for performance:
+            final int x0 = abox[0];
+            final int y0 = abox[1];
+            final int x1 = abox[2];
+            final int y1 = abox[3];
+
             final int tw = aatg.getTileWidth();
             final int th = aatg.getTileHeight();
 
@@ -158,16 +178,15 @@
             final byte[] alpha = ts.getAlphaTile(tw * th);
             byte[] atile;
 
-            for (int y = abox[1]; y < abox[3]; y += th) {
-                int h = Math.min(th, abox[3] - y);
+            for (int y = y0; y < y1; y += th) {
+                final int h = Math.min(th, y1 - y);
 
-                for (int x = abox[0]; x < abox[2]; x += tw) {
-                    int w = Math.min(tw, abox[2] - x);
+                for (int x = x0; x < x1; x += tw) {
+                    final int w = Math.min(tw, x1 - x);
 
-                    int a = aatg.getTypicalAlpha();
-                    if (a == 0x00 ||
-                        outpipe.needTile(context, x, y, w, h) == false)
-                    {
+                    final int a = aatg.getTypicalAlpha();
+
+                    if (a == 0x00 || !outpipe.needTile(context, x, y, w, h)) {
                         aatg.nextTile();
                         outpipe.skipTile(context, x, y);
                         continue;
@@ -180,8 +199,7 @@
                         aatg.getAlpha(alpha, 0, tw);
                     }
 
-                    outpipe.renderPathTile(context, atile, 0, tw,
-                                           x, y, w, h);
+                    outpipe.renderPathTile(context, atile, 0, tw, x, y, w, h);
                 }
             }
         } finally {
@@ -193,7 +211,7 @@
     }
 
     // Tile state used by AAShapePipe
-    static final class TileState {
+    static final class TileState extends ReentrantContext {
         // cached tile (32 x 32 tile by default)
         private byte[] theTile = new byte[32 * 32];
         // dirty aabox array
@@ -240,5 +258,4 @@
             return box;
         }
     }
-
 }
--- a/jdk/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java	Mon Mar 14 17:51:25 2016 +0100
@@ -791,12 +791,15 @@
             return page;
         }
 
-        final GraphicsConfiguration gc =
-            GraphicsEnvironment.getLocalGraphicsEnvironment().
-            getDefaultScreenDevice().getDefaultConfiguration();
-        Rectangle bounds = gc.getBounds();
-        int x = bounds.x+bounds.width/3;
-        int y = bounds.y+bounds.height/3;
+        GraphicsConfiguration grCfg = null;
+        Window w = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
+        if (w != null) {
+            grCfg = w.getGraphicsConfiguration();
+        } else {
+            grCfg = GraphicsEnvironment.getLocalGraphicsEnvironment().
+                        getDefaultScreenDevice().getDefaultConfiguration();
+        }
+        final GraphicsConfiguration gc = grCfg;
 
         PrintService service = java.security.AccessController.doPrivileged(
                                new java.security.PrivilegedAction<PrintService>() {
@@ -814,9 +817,39 @@
             return null;
         }
 
+        // we position the dialog a little beyond the upper-left corner of the window
+        // which is consistent with the NATIVE page dialog
+        Rectangle gcBounds = gc.getBounds();
+        int x = gcBounds.x+50;
+        int y = gcBounds.y+50;
         ServiceDialog pageDialog = new ServiceDialog(gc, x, y, service,
                                        DocFlavor.SERVICE_FORMATTED.PAGEABLE,
                                        attributes, (Frame)null);
+        Rectangle dlgBounds = pageDialog.getBounds();
+
+        // if portion of dialog is not within the gc boundary
+        if (!gcBounds.contains(dlgBounds)) {
+            // check if dialog exceed window bounds at left or bottom
+            // Then position the dialog by moving it by the amount it exceeds
+            // the window bounds
+            // If it results in dialog moving beyond the window bounds at top/left
+            // then position it at window top/left
+            if (dlgBounds.x + dlgBounds.width > gcBounds.x + gcBounds.width) {
+                if ((gcBounds.x + gcBounds.width - dlgBounds.width) > gcBounds.x) {
+                    x = (gcBounds.x + gcBounds.width) - dlgBounds.width;
+                } else {
+                    x = gcBounds.x;
+                }
+            }
+            if (dlgBounds.y + dlgBounds.height > gcBounds.y + gcBounds.height) {
+                if ((gcBounds.y + gcBounds.height - dlgBounds.height) > gcBounds.y) {
+                    y = (gcBounds.y + gcBounds.height) - dlgBounds.height;
+                } else {
+                    y = gcBounds.y;
+                }
+            }
+            pageDialog.setBounds(x, y, dlgBounds.width, dlgBounds.height);
+        }
         pageDialog.show();
 
         if (pageDialog.getStatus() == ServiceDialog.APPROVE) {
@@ -893,9 +926,15 @@
          * We raise privilege when we put up the dialog, to avoid
          * the "warning applet window" banner.
          */
-        final GraphicsConfiguration gc =
-            GraphicsEnvironment.getLocalGraphicsEnvironment().
-            getDefaultScreenDevice().getDefaultConfiguration();
+        GraphicsConfiguration grCfg = null;
+        Window w = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
+        if (w != null) {
+            grCfg = w.getGraphicsConfiguration();
+        } else {
+            grCfg = GraphicsEnvironment.getLocalGraphicsEnvironment().
+                        getDefaultScreenDevice().getDefaultConfiguration();
+        }
+        final GraphicsConfiguration gc = grCfg;
 
         PrintService service = java.security.AccessController.doPrivileged(
                                new java.security.PrivilegedAction<PrintService>() {
@@ -940,9 +979,10 @@
             }
         }
 
-        Rectangle bounds = gc.getBounds();
-        int x = bounds.x+bounds.width/3;
-        int y = bounds.y+bounds.height/3;
+        // we position the dialog a little beyond the upper-left corner of the window
+        // which is consistent with the NATIVE print dialog
+        int x = 50;
+        int y = 50;
         PrintService newService;
         // temporarily add an attribute pointing back to this job.
         PrinterJobWrapper jobWrapper = new PrinterJobWrapper(this);
--- a/jdk/src/java.desktop/unix/classes/sun/java2d/x11/XSurfaceData.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/unix/classes/sun/java2d/x11/XSurfaceData.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,3 +1,27 @@
+/*
+ * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
 package sun.java2d.x11;
 
 import java.awt.image.*;
--- a/jdk/src/java.desktop/unix/classes/sun/print/CUPSPrinter.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/unix/classes/sun/print/CUPSPrinter.java	Mon Mar 14 17:51:25 2016 +0100
@@ -52,6 +52,7 @@
     private boolean initialized;
     private static native String getCupsServer();
     private static native int getCupsPort();
+    private static native String getCupsDefaultPrinter();
     private static native boolean canConnect(String server, int port);
     private static native boolean initIDs();
     // These functions need to be synchronized as
@@ -266,6 +267,15 @@
      * Returns 2 values - index 0 is printer name, index 1 is the uri.
      */
     static String[] getDefaultPrinter() {
+        // Try to get user/lpoptions-defined printer name from CUPS
+        // if not user-set, then go for server default destination
+        String printerInfo[] = new String[2];
+        printerInfo[0] = getCupsDefaultPrinter();
+
+        if (printerInfo[0] != null) {
+            printerInfo[1] = null;
+            return printerInfo.clone();
+        }
         try {
             URL url = new URL("http", getServer(), getPort(), "");
             final HttpURLConnection urlConnection =
@@ -301,7 +311,7 @@
                                         attCl)) {
 
                     HashMap<String, AttributeClass> defaultMap = null;
-                    String[] printerInfo = new String[2];
+
                     InputStream is = urlConnection.getInputStream();
                     HashMap<String, AttributeClass>[] responseMap = IPPPrintService.readIPPResponse(
                                          is);
--- a/jdk/src/java.desktop/unix/native/common/awt/CUPSfuncs.c	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/unix/native/common/awt/CUPSfuncs.c	Mon Mar 14 17:51:25 2016 +0100
@@ -43,6 +43,10 @@
 typedef http_t* (*fn_httpConnect)(const char *, int);
 typedef void (*fn_httpClose)(http_t *);
 typedef char* (*fn_cupsGetPPD)(const char *);
+typedef cups_dest_t* (*fn_cupsGetDest)(const char *name,
+    const char *instance, int num_dests, cups_dest_t *dests);
+typedef int (*fn_cupsGetDests)(cups_dest_t **dests);
+typedef void (*fn_cupsFreeDests)(int num_dests, cups_dest_t *dests);
 typedef ppd_file_t* (*fn_ppdOpenFile)(const char *);
 typedef void (*fn_ppdClose)(ppd_file_t *);
 typedef ppd_option_t* (*fn_ppdFindOption)(ppd_file_t *, const char *);
@@ -53,6 +57,9 @@
 fn_httpConnect j2d_httpConnect;
 fn_httpClose j2d_httpClose;
 fn_cupsGetPPD j2d_cupsGetPPD;
+fn_cupsGetDest j2d_cupsGetDest;
+fn_cupsGetDests j2d_cupsGetDests;
+fn_cupsFreeDests j2d_cupsFreeDests;
 fn_ppdOpenFile j2d_ppdOpenFile;
 fn_ppdClose j2d_ppdClose;
 fn_ppdFindOption j2d_ppdFindOption;
@@ -106,6 +113,24 @@
     return JNI_FALSE;
   }
 
+  j2d_cupsGetDest = (fn_cupsGetDest)dlsym(handle, "cupsGetDest");
+  if (j2d_cupsGetDest == NULL) {
+    dlclose(handle);
+    return JNI_FALSE;
+  }
+
+  j2d_cupsGetDests = (fn_cupsGetDests)dlsym(handle, "cupsGetDests");
+  if (j2d_cupsGetDests == NULL) {
+    dlclose(handle);
+    return JNI_FALSE;
+  }
+
+  j2d_cupsFreeDests = (fn_cupsFreeDests)dlsym(handle, "cupsFreeDests");
+  if (j2d_cupsFreeDests == NULL) {
+    dlclose(handle);
+    return JNI_FALSE;
+  }
+
   j2d_ppdOpenFile = (fn_ppdOpenFile)dlsym(handle, "ppdOpenFile");
   if (j2d_ppdOpenFile == NULL) {
     dlclose(handle);
@@ -170,6 +195,30 @@
 
 
 /*
+ * Gets CUPS default printer name.
+ *
+ */
+JNIEXPORT jstring JNICALL
+Java_sun_print_CUPSPrinter_getCupsDefaultPrinter(JNIEnv *env,
+                                                  jobject printObj)
+{
+    jstring cDefPrinter = NULL;
+    cups_dest_t *dests;
+    char *defaultPrinter = NULL;
+    int num_dests = j2d_cupsGetDests(&dests);
+    int i = 0;
+    cups_dest_t *dest = j2d_cupsGetDest(NULL, NULL, num_dests, dests);
+    if (dest != NULL) {
+        defaultPrinter = dest->name;
+        if (defaultPrinter != NULL) {
+            cDefPrinter = JNU_NewStringPlatform(env, defaultPrinter);
+        }
+    }
+    j2d_cupsFreeDests(num_dests, dests);
+    return cDefPrinter;
+}
+
+/*
  * Checks if connection can be made to the server.
  *
  */
--- a/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DBlitLoops.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DBlitLoops.java	Mon Mar 14 17:51:25 2016 +0100
@@ -500,6 +500,7 @@
 class D3DSurfaceToSwBlit extends Blit {
 
     private int typeval;
+    private WeakReference<SurfaceData> srcTmp;
 
     // REMIND: destination will actually be opaque/premultiplied...
     D3DSurfaceToSwBlit(SurfaceType dstType, int typeval) {
@@ -509,11 +510,97 @@
         this.typeval = typeval;
     }
 
+    /*
+     * Clip value is ignored in D3D SurfaceToSw blit.
+     * Root Cause: The native interfaces to D3D use StretchRect API followed
+     * by custom copy of pixels from Surface to Sysmem. As a result, clipping
+     * in D3DSurfaceToSw works 'only' for Rect clips, provided, proper srcX,
+     * srcY, dstX, dstY, width and height are passed to native interfaces.
+     * Non rect clips (For example: Shape clips) are ignored completely.
+     *
+     * Solution: There are three solutions possible to fix this issue.
+     * 1. Convert the entire Surface to Sysmem and perform regular Blit.
+     *    An optimized version of this is to take up the conversion only
+     *    when Shape clips are needed. Existing native interface will suffice
+     *    for supporting Rect clips.
+     * 2. With help of existing classes we could perform SwToSurface,
+     *    SurfaceToSurface (implements clip) and SurfaceToSw (complete copy)
+     *    in order.
+     * 3. Modify the native D3D interface to accept clip and perform same logic
+     *    as the second approach but at native side.
+     *
+     * Upon multiple experiments, the first approach has been found to be
+     * faster than the others as it deploys 1-draw/copy operation for rect clip
+     * and 2-draw/copy operations for shape clip compared to 3-draws/copy
+     * operations deployed by the remaining approaches.
+     *
+     * complexClipBlit method helps to convert or copy the contents from
+     * D3DSurface onto Sysmem and perform a regular Blit with the clip
+     * information as required. This method is used when non-rectangular
+     * clip is needed.
+     */
+    private synchronized void complexClipBlit(SurfaceData src, SurfaceData dst,
+                                              Composite comp, Region clip,
+                                              int sx, int sy, int dx, int dy,
+                                              int w, int h) {
+        SurfaceData cachedSrc = null;
+        if (srcTmp != null) {
+            // use cached intermediate surface, if available
+            cachedSrc = srcTmp.get();
+        }
+
+        // Type- indicates the pixel format of Sysmem based BufferedImage.
+        // Native d3d interfaces support on the fly conversion of pixels from
+        // d3d surface to destination sysmem memory of type IntARGB only.
+        final int type = BufferedImage.TYPE_INT_ARGB;
+        src = convertFrom(this, src, sx, sy, w, h, cachedSrc, type);
+
+        // copy intermediate SW to destination SW using complex clip
+        final Blit performop = Blit.getFromCache(src.getSurfaceType(),
+                                                 CompositeType.SrcNoEa,
+                                                 dst.getSurfaceType());
+        performop.Blit(src, dst, comp, clip, 0, 0, dx, dy, w, h);
+
+        if (src != cachedSrc) {
+            // cache the intermediate surface
+            srcTmp = new WeakReference<>(src);
+        }
+    }
+
     public void Blit(SurfaceData src, SurfaceData dst,
                      Composite comp, Region clip,
                      int sx, int sy, int dx, int dy,
                      int w, int h)
     {
+        if (clip != null) {
+            clip = clip.getIntersectionXYWH(dx, dy, w, h);
+            // At the end this method will flush the RenderQueue, we should exit
+            // from it as soon as possible.
+            if (clip.isEmpty()) {
+                return;
+            }
+
+            // Adjust final dst(x,y) and src(x,y) based on the clip. The
+            // logic is that, when clip limits drawing on the destination,
+            // corresponding pixels from the src should be skipped.
+            sx += clip.getLoX() - dx;
+            sy += clip.getLoY() - dy;
+            dx = clip.getLoX();
+            dy = clip.getLoY();
+            w = clip.getWidth();
+            h = clip.getHeight();
+
+            // Check if the clip is Rectangular. For non-rectangular clips
+            // complexClipBlit will convert Surface To Sysmem and perform
+            // regular Blit.
+            if (!clip.isRectangular()) {
+                complexClipBlit(src, dst, comp, clip,
+                                sx, sy, dx, dy,
+                                w, h);
+                return;
+            }
+        }
+
         D3DRenderQueue rq = D3DRenderQueue.getInstance();
         rq.lock();
         try {
--- a/jdk/src/java.httpclient/share/classes/java/net/http/Exchange.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/Exchange.java	Mon Mar 14 17:51:25 2016 +0100
@@ -214,21 +214,21 @@
                 .sendHeadersAsync()
                 .thenCompose((Void v) -> {
                     // send body and get response at same time
-                    exchImpl.sendBodyAsync();
-                    return exchImpl.getResponseAsync(null);
+                    return exchImpl.sendBodyAsync()
+                                   .thenCompose(exchImpl::getResponseAsync);
                 })
-                    .thenCompose((HttpResponseImpl r1) -> {
-                        int rcode = r1.statusCode();
-                        CompletableFuture<HttpResponseImpl> cf =
-                                checkForUpgradeAsync(r1, exchImpl);
-                        if (cf != null) {
-                            return cf;
-                        } else {
-                            Exchange.this.response = r1;
-                            logResponse(r1);
-                            return CompletableFuture.completedFuture(r1);
-                        }
-                    })
+                .thenCompose((HttpResponseImpl r1) -> {
+                    int rcode = r1.statusCode();
+                    CompletableFuture<HttpResponseImpl> cf =
+                            checkForUpgradeAsync(r1, exchImpl);
+                    if (cf != null) {
+                        return cf;
+                    } else {
+                        Exchange.this.response = r1;
+                        logResponse(r1);
+                        return CompletableFuture.completedFuture(r1);
+                    }
+                })
                 .thenApply((HttpResponseImpl response) -> {
                     this.response = response;
                     logResponse(response);
--- a/jdk/src/java.httpclient/share/classes/java/net/http/HttpClientImpl.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/HttpClientImpl.java	Mon Mar 14 17:51:25 2016 +0100
@@ -30,19 +30,17 @@
 import java.net.URI;
 import static java.net.http.Utils.BUFSIZE;
 import java.nio.ByteBuffer;
+import java.nio.channels.ClosedChannelException;
 import java.nio.channels.SelectableChannel;
 import java.nio.channels.SelectionKey;
 import static java.nio.channels.SelectionKey.OP_CONNECT;
 import static java.nio.channels.SelectionKey.OP_READ;
 import static java.nio.channels.SelectionKey.OP_WRITE;
 import java.nio.channels.Selector;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
+import java.util.stream.Stream;
 import java.util.concurrent.ExecutorService;
 import java.security.NoSuchAlgorithmException;
-import java.util.ListIterator;
-import java.util.Optional;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ThreadFactory;
 import javax.net.ssl.SSLContext;
@@ -72,12 +70,6 @@
     private static final ThreadFactory defaultFactory = Executors.defaultThreadFactory();
     private final LinkedList<TimeoutEvent> timeouts;
 
-    //@Override
-    void debugPrint() {
-        selmgr.debugPrint();
-        client2.debugPrint();
-    }
-
     public static HttpClientImpl create(HttpClientBuilderImpl builder) {
         HttpClientImpl impl = new HttpClientImpl(builder);
         impl.start();
@@ -173,19 +165,15 @@
     // Main loop for this client's selector
 
     class SelectorManager extends Thread {
-
         final Selector selector;
         boolean closed;
 
         final List<AsyncEvent> readyList;
         final List<AsyncEvent> registrations;
 
-        List<AsyncEvent> debugList;
-
         SelectorManager() throws IOException {
             readyList = new LinkedList<>();
             registrations = new LinkedList<>();
-            debugList = new LinkedList<>();
             selector = Selector.open();
         }
 
@@ -216,13 +204,6 @@
             return c;
         }
 
-        synchronized void debugPrint() {
-            System.err.println("Selecting on:");
-            for (AsyncEvent e : debugList) {
-                System.err.println(opvals(e.interestOps()));
-            }
-        }
-
         String opvals(int i) {
             StringBuilder sb = new StringBuilder();
             if ((i & OP_READ) != 0)
@@ -239,14 +220,18 @@
             try {
                 while (true) {
                     synchronized (this) {
-                        debugList = copy(registrations);
                         for (AsyncEvent exchange : registrations) {
                             SelectableChannel c = exchange.channel();
                             try {
                                 c.configureBlocking(false);
-                                c.register(selector,
-                                           exchange.interestOps(),
-                                           exchange);
+                                SelectionKey key = c.keyFor(selector);
+                                SelectorAttachment sa;
+                                if (key == null) {
+                                    sa = new SelectorAttachment(c, selector);
+                                } else {
+                                    sa = (SelectorAttachment)key.attachment();
+                                }
+                                sa.register(exchange);
                             } catch (IOException e) {
                                 Log.logError("HttpClientImpl: " + e);
                                 c.close();
@@ -266,11 +251,10 @@
                     Set<SelectionKey> keys = selector.selectedKeys();
 
                     for (SelectionKey key : keys) {
-                        if (key.isReadable() || key.isConnectable() || key.isWritable()) {
-                            key.cancel();
-                            AsyncEvent exchange = (AsyncEvent) key.attachment();
-                            readyList.add(exchange);
-                        }
+                        SelectorAttachment sa = (SelectorAttachment)key.attachment();
+                        int eventsOccurred = key.readyOps();
+                        sa.events(eventsOccurred).forEach(readyList::add);
+                        sa.resetInterestOps(eventsOccurred);
                     }
                     selector.selectNow(); // complete cancellation
                     selector.selectedKeys().clear();
@@ -306,6 +290,80 @@
     }
 
     /**
+     * Tracks multiple user level registrations associated with one NIO
+     * registration (SelectionKey). In this implementation, registrations
+     * are one-off and when an event is posted the registration is cancelled
+     * until explicitly registered again.
+     *
+     * <p> No external synchronization required as this class is only used
+     * by the SelectorManager thread. One of these objects required per
+     * connection.
+     */
+    private static class SelectorAttachment {
+        private final SelectableChannel chan;
+        private final Selector selector;
+        private final ArrayList<AsyncEvent> pending;
+        private int interestops;
+
+        SelectorAttachment(SelectableChannel chan, Selector selector) {
+            this.pending = new ArrayList<>();
+            this.chan = chan;
+            this.selector = selector;
+        }
+
+        void register(AsyncEvent e) throws ClosedChannelException {
+            int newops = e.interestOps();
+            boolean reRegister = (interestops & newops) != newops;
+            interestops |= newops;
+            pending.add(e);
+            if (reRegister) {
+                // first time registration happens here also
+                chan.register(selector, interestops, this);
+            }
+        }
+
+        int interestOps() {
+            return interestops;
+        }
+
+        /**
+         * Returns a Stream<AsyncEvents> containing only events that are
+         * registered with the given {@code interestop}.
+         */
+        Stream<AsyncEvent> events(int interestop) {
+            return pending.stream()
+                          .filter(ev -> (ev.interestOps() & interestop) != 0);
+        }
+
+        /**
+         * Removes any events with the given {@code interestop}, and if no
+         * events remaining, cancels the associated SelectionKey.
+         */
+        void resetInterestOps(int interestop) {
+            int newops = 0;
+
+            Iterator<AsyncEvent> itr = pending.iterator();
+            while (itr.hasNext()) {
+                AsyncEvent event = itr.next();
+                int evops = event.interestOps();
+                if ((evops & interestop) != 0) {
+                    itr.remove();
+                } else {
+                    newops |= evops;
+                }
+            }
+
+            interestops = newops;
+            SelectionKey key = chan.keyFor(selector);
+            if (newops == 0) {
+                key.cancel();
+            } else {
+                key.interestOps(newops);
+            }
+        }
+    }
+
+    /**
      * Creates a HttpRequest associated with this group.
      *
      * @throws IllegalStateException if the group has been stopped
@@ -425,18 +483,9 @@
             }
         }
         iter.add(event);
-        //debugPrintList("register");
         selmgr.wakeupSelector();
     }
 
-    void debugPrintList(String s) {
-        System.err.printf("%s: {", s);
-        for (TimeoutEvent e : timeouts) {
-            System.err.printf("(%d,%d) ", e.delta, e.timeval);
-        }
-        System.err.println("}");
-    }
-
     synchronized void signalTimeouts(long then) {
         if (timeouts.isEmpty()) {
             return;
@@ -462,7 +511,6 @@
                 break;
             }
         }
-        //debugPrintList("signalTimeouts");
     }
 
     synchronized void cancelTimer(TimeoutEvent event) {
--- a/jdk/src/java.naming/share/classes/javax/naming/CompoundName.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/java.naming/share/classes/javax/naming/CompoundName.java	Mon Mar 14 17:51:25 2016 +0100
@@ -82,7 +82,7 @@
  *      attribute-value-assertions when specifying multiple attribute/value
  *      pairs. (e.g. ","  in age=65,gender=male).
  *  <dt>jndi.syntax.separator.typeval
- *  <dd>If present, specifies the string that separators attribute
+ *  <dd>If present, specifies the string that separates attribute
  *              from value (e.g. "=" in "age=65")
  *</dl>
  * These properties are interpreted according to the following rules:
--- a/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/Translator.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/Translator.java	Mon Mar 14 17:51:25 2016 +0100
@@ -32,6 +32,7 @@
 import java.awt.*;
 import java.awt.event.*;
 import java.awt.image.*;
+import java.security.AccessControlException;
 // Do not import Swing classes.  This module is intended to work
 // with both Swing and AWT.
 // import javax.swing.*;
@@ -77,7 +78,7 @@
             return null;
         }
         try {
-            t = Class.forName("com.sun.java.accessibility.util.internal"
+            t = Class.forName("com.sun.java.accessibility.util.internal."
                               + c.getSimpleName()
                               + "Translator");
             return t;
@@ -105,6 +106,10 @@
         if (o instanceof Accessible) {
             a = (Accessible)o;
         } else {
+            // About to "newInstance" an object of a class of a restricted package
+            // so ensure the caller is allowed access to that package.
+            String pkg = "com.sun.java.accessibility.util.internal";
+            System.getSecurityManager().checkPackageAccess(pkg);
             Class<?> translatorClass = getTranslatorClass(o.getClass());
             if (translatorClass != null) {
                 try {
--- a/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/AbstractCharsetProvider.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/AbstractCharsetProvider.java	Mon Mar 14 17:51:25 2016 +0100
@@ -33,7 +33,6 @@
 import java.util.Iterator;
 import java.util.Locale;
 import java.util.Map;
-import sun.misc.ASCIICaseInsensitiveComparator;
 
 
 /**
@@ -49,22 +48,22 @@
     /* Maps canonical names to class names
      */
     private Map<String,String> classMap
-        = new TreeMap<>(ASCIICaseInsensitiveComparator.CASE_INSENSITIVE_ORDER);
+        = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
 
     /* Maps alias names to canonical names
      */
     private Map<String,String> aliasMap
-        = new TreeMap<>(ASCIICaseInsensitiveComparator.CASE_INSENSITIVE_ORDER);
+        = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
 
     /* Maps canonical names to alias-name arrays
      */
     private Map<String,String[]> aliasNameMap
-        = new TreeMap<>(ASCIICaseInsensitiveComparator.CASE_INSENSITIVE_ORDER);
+        = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
 
     /* Maps canonical names to soft references that hold cached instances
      */
     private Map<String,SoftReference<Charset>> cache
-        = new TreeMap<>(ASCIICaseInsensitiveComparator.CASE_INSENSITIVE_ORDER);
+        = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
 
     private String packagePrefix;
 
--- a/jdk/src/jdk.deploy.osx/macosx/classes/com/apple/concurrent/Dispatch.java	Mon Mar 14 12:35:52 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code 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 General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.apple.concurrent;
-
-import java.util.concurrent.*;
-
-/**
- * Factory for {@link Executor}s and {@link ExecutorService}s backed by
- * libdispatch.
- *
- * Access is controlled through the Dispatch.getInstance() method, because
- * performed tasks occur on threads owned by libdispatch. These threads are
- * not owned by any particular AppContext or have any specific context
- * classloader installed.
- *
- * @since Java for Mac OS X 10.6 Update 2
- */
-public final class Dispatch {
-        /**
-         * The priorities of the three default asynchronous queues.
-         */
-        public enum Priority {
-                LOW(-2), NORMAL(0), HIGH(2); // values from <dispatch/queue.h>
-
-                final int nativePriority;
-                Priority(final int nativePriority) { this.nativePriority = nativePriority; }
-        };
-
-        final static Dispatch instance = new Dispatch();
-
-        /**
-         * Factory method returns an instnace of Dispatch if supported by the
-         * underlying operating system, and if the caller's security manager
-         * permits "canInvokeInSystemThreadGroup".
-         *
-         * @return a factory instance of Dispatch, or null if not available
-         */
-        public static Dispatch getInstance() {
-                checkSecurity();
-                if (!LibDispatchNative.nativeIsDispatchSupported()) return null;
-
-                return instance;
-        }
-
-        private static void checkSecurity() {
-        final SecurityManager security = System.getSecurityManager();
-        if (security != null) security.checkPermission(new RuntimePermission("canInvokeInSystemThreadGroup"));
-    }
-
-        private Dispatch() { }
-
-        /**
-         * Creates an {@link Executor} that performs tasks asynchronously. The {@link Executor}
-         * cannot be shutdown, and enqueued {@link Runnable}s cannot be canceled. Passing null
-         * returns the {@link Priority.NORMAL} {@link Executor}.
-         *
-         * @param priority - the priority of the returned {@link Executor}
-         * @return an asynchronous {@link Executor}
-         */
-        public Executor getAsyncExecutor(Priority priority) {
-                if (priority == null) priority = Priority.NORMAL;
-                final long nativeQueue = LibDispatchNative.nativeCreateConcurrentQueue(priority.nativePriority);
-                if (nativeQueue == 0L) return null;
-                return new LibDispatchConcurrentQueue(nativeQueue);
-        }
-
-        int queueIndex = 0;
-        /**
-         * Creates an {@link ExecutorService} that performs tasks synchronously in FIFO order.
-         * Useful to protect a resource against concurrent modification, in lieu of a lock.
-         * Passing null returns an {@link ExecutorService} with a uniquely labeled queue.
-         *
-         * @param label - a label to name the queue, shown in several debugging tools
-         * @return a synchronous {@link ExecutorService}
-         */
-        public ExecutorService createSerialExecutor(String label) {
-                if (label == null) label = "";
-                if (label.length() > 256) label = label.substring(0, 256);
-                String queueName = "com.apple.java.concurrent.";
-                if ("".equals(label)) {
-                        synchronized (this) {
-                                queueName += queueIndex++;
-                        }
-                } else {
-                        queueName += label;
-                }
-
-                final long nativeQueue = LibDispatchNative.nativeCreateSerialQueue(queueName);
-                if (nativeQueue == 0) return null;
-                return new LibDispatchSerialQueue(nativeQueue);
-        }
-
-        Executor nonBlockingMainQueue = null;
-        /**
-         * Returns an {@link Executor} that performs the provided Runnables on the main queue of the process.
-         * Runnables submitted to this {@link Executor} will not run until the AWT is started or another native toolkit is running a CFRunLoop or NSRunLoop on the main thread.
-         *
-         * Submitting a Runnable to this {@link Executor} does not wait for the Runnable to complete.
-         * @return an asynchronous {@link Executor} that is backed by the main queue
-         */
-        public synchronized Executor getNonBlockingMainQueueExecutor() {
-                if (nonBlockingMainQueue != null) return nonBlockingMainQueue;
-                return nonBlockingMainQueue = new LibDispatchMainQueue.ASync();
-        }
-
-        Executor blockingMainQueue = null;
-        /**
-         * Returns an {@link Executor} that performs the provided Runnables on the main queue of the process.
-         * Runnables submitted to this {@link Executor} will not run until the AWT is started or another native toolkit is running a CFRunLoop or NSRunLoop on the main thread.
-         *
-         * Submitting a Runnable to this {@link Executor} will block until the Runnable has completed.
-         * @return an {@link Executor} that is backed by the main queue
-         */
-        public synchronized Executor getBlockingMainQueueExecutor() {
-                if (blockingMainQueue != null) return blockingMainQueue;
-                return blockingMainQueue = new LibDispatchMainQueue.Sync();
-        }
-}
--- a/jdk/src/jdk.deploy.osx/macosx/classes/com/apple/concurrent/LibDispatchConcurrentQueue.java	Mon Mar 14 12:35:52 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code 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 General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.apple.concurrent;
-
-import java.util.concurrent.Executor;
-
-class LibDispatchConcurrentQueue extends LibDispatchQueue implements Executor {
-        LibDispatchConcurrentQueue(final long queuePtr) {
-                super(queuePtr);
-        }
-
-        @Override
-        public void execute(final Runnable task) {
-                LibDispatchNative.nativeExecuteAsync(ptr, task);
-        }
-
-        @Override
-        protected synchronized void dispose() {
-                // should not dispose the default concurrent queues
-        }
-}
--- a/jdk/src/jdk.deploy.osx/macosx/classes/com/apple/concurrent/LibDispatchMainQueue.java	Mon Mar 14 12:35:52 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code 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 General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.apple.concurrent;
-
-import java.util.concurrent.Executor;
-
-abstract class LibDispatchMainQueue extends LibDispatchQueue implements Executor {
-        public LibDispatchMainQueue() {
-                super(LibDispatchNative.nativeGetMainQueue());
-        }
-
-        @Override
-        protected synchronized void dispose() {
-                // should not dispose the main queue
-        }
-
-        static class Sync extends LibDispatchMainQueue {
-                @Override
-                public void execute(final Runnable task) {
-                        LibDispatchNative.nativeExecuteSync(ptr, task);
-                }
-        }
-
-        static class ASync extends LibDispatchMainQueue {
-                @Override
-                public void execute(final Runnable task) {
-                        LibDispatchNative.nativeExecuteAsync(ptr, task);
-                }
-        }
-}
--- a/jdk/src/jdk.deploy.osx/macosx/classes/com/apple/concurrent/LibDispatchNative.java	Mon Mar 14 12:35:52 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code 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 General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.apple.concurrent;
-
-final class LibDispatchNative {
-    static {
-        java.security.AccessController.doPrivileged(
-            new java.security.PrivilegedAction<Void>() {
-                public Void run() {
-                    System.loadLibrary("osx");
-                    return null;
-                }
-            });
-    }
-
-    static native boolean nativeIsDispatchSupported();
-    static native long nativeGetMainQueue();
-    static native long nativeCreateConcurrentQueue(int priority);
-    static native long nativeCreateSerialQueue(String name);
-    static native void nativeReleaseQueue(long nativeQueue);
-    static native void nativeExecuteAsync(long nativeQueue, Runnable task);
-    static native void nativeExecuteSync(long nativeQueue, Runnable task);
-
-    private LibDispatchNative() { }
-}
--- a/jdk/src/jdk.deploy.osx/macosx/classes/com/apple/concurrent/LibDispatchQueue.java	Mon Mar 14 12:35:52 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code 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 General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.apple.concurrent;
-
-class LibDispatchQueue extends LibDispatchRetainedResource {
-        LibDispatchQueue(final long queuePtr) {
-                super(queuePtr);
-        }
-}
--- a/jdk/src/jdk.deploy.osx/macosx/classes/com/apple/concurrent/LibDispatchRetainedResource.java	Mon Mar 14 12:35:52 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code 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 General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.apple.concurrent;
-
-class LibDispatchRetainedResource {
-        protected long ptr;
-
-        protected LibDispatchRetainedResource(final long ptr) {
-                this.ptr = ptr;
-        }
-
-        protected synchronized void dispose() {
-                if (ptr != 0) LibDispatchNative.nativeReleaseQueue(ptr);
-                ptr = 0;
-        }
-
-        protected void finalize() throws Throwable {
-                dispose();
-        }
-}
--- a/jdk/src/jdk.deploy.osx/macosx/classes/com/apple/concurrent/LibDispatchSerialQueue.java	Mon Mar 14 12:35:52 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code 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 General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.apple.concurrent;
-
-import java.util.List;
-import java.util.concurrent.*;
-
-class LibDispatchSerialQueue extends AbstractExecutorService {
-        static final int RUNNING    = 0;
-    static final int SHUTDOWN   = 1;
-//  static final int STOP       = 2; // not supported by GCD
-    static final int TERMINATED = 3;
-
-    final Object lock = new Object();
-        LibDispatchQueue nativeQueueWrapper;
-    volatile int runState;
-
-        LibDispatchSerialQueue(final long queuePtr) {
-                nativeQueueWrapper = new LibDispatchQueue(queuePtr);
-        }
-
-        @Override
-        public void execute(final Runnable task) {
-                if (nativeQueueWrapper == null) return;
-                LibDispatchNative.nativeExecuteAsync(nativeQueueWrapper.ptr, task);
-        }
-
-        @Override
-        public boolean isShutdown() {
-                return runState != RUNNING;
-        }
-
-        @Override
-        public boolean isTerminated() {
-                return runState == TERMINATED;
-        }
-
-        @Override
-        public void shutdown() {
-                synchronized (lock) {
-                        if (runState != RUNNING) return;
-
-                        runState = SHUTDOWN;
-                        execute(new Runnable() {
-                                public void run() {
-                                        synchronized (lock) {
-                                                runState = TERMINATED;
-                                                lock.notifyAll(); // for the benefit of awaitTermination()
-                                        }
-                                }
-                        });
-                        nativeQueueWrapper = null;
-                }
-        }
-
-        @Override
-        public List<Runnable> shutdownNow() {
-                shutdown();
-                return null;
-        }
-
-        @Override
-        public boolean awaitTermination(final long timeout, final TimeUnit unit) throws InterruptedException {
-                if (runState == TERMINATED) return true;
-
-                final long millis = unit.toMillis(timeout);
-                if (millis <= 0) return false;
-
-                synchronized (lock) {
-                        if (runState == TERMINATED) return true;
-                        lock.wait(timeout);
-                        if (runState == TERMINATED) return true;
-                }
-
-                return false;
-        }
-}
--- a/jdk/src/jdk.deploy.osx/macosx/classes/com/apple/concurrent/package.html	Mon Mar 14 12:35:52 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-<html>
-<head>
-</head>
-<body bgcolor="white">
-Apple-specific implementations of the java.util.concurrent.* API based on libdispatch.
-</body>
-</html>
--- a/jdk/src/jdk.deploy.osx/macosx/native/libosx/CFileManager.m	Mon Mar 14 12:35:52 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,257 +0,0 @@
-/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code 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 General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-#import "com_apple_eio_FileManager.h"
-
-#import <Cocoa/Cocoa.h>
-#import <JavaNativeFoundation/JavaNativeFoundation.h>
-
-#import "ThreadUtilities.h"
-
-
-/*
- * Class:     com_apple_eio_FileManager
- * Method:    _setFileTypeAndCreator
- * Signature: (Ljava/lang/String;II)V
- */
-JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1setFileTypeAndCreator
-(JNIEnv *env, jclass clz, jstring javaFilename, jint type, jint creator)
-{
-JNF_COCOA_ENTER(env);
-        NSString *filename = JNFNormalizedNSStringForPath(env, javaFilename);
-        NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys:
-                                                        [NSNumber numberWithInt:type], NSFileHFSTypeCode,
-                                                        [NSNumber numberWithInt:creator], NSFileHFSCreatorCode, nil];
-    [[NSFileManager defaultManager] changeFileAttributes:attr atPath:filename];
-JNF_COCOA_EXIT(env);
-}
-
-/*
- * Class:     com_apple_eio_FileManager
- * Method:    _setFileType
- * Signature: (Ljava/lang/String;I)V
- */
-JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1setFileType
-(JNIEnv *env, jclass ckz, jstring javaFilename, jint type)
-{
-JNF_COCOA_ENTER(env);
-        NSString *filename = JNFNormalizedNSStringForPath(env, javaFilename);
-        NSDictionary *attr = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:type] forKey:NSFileHFSTypeCode];
-    [[NSFileManager defaultManager] changeFileAttributes:attr atPath:filename];
-JNF_COCOA_EXIT(env);
-}
-
-/*
- * Class:     com_apple_eio_FileManager
- * Method:    _setFileCreator
- * Signature: (Ljava/lang/String;I)V
- */
-JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1setFileCreator
-(JNIEnv *env, jclass clz, jstring javaFilename, jint creator)
-{
-JNF_COCOA_ENTER(env);
-        NSString *filename = JNFNormalizedNSStringForPath(env, javaFilename);
-        NSDictionary *attr = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:creator] forKey:NSFileHFSCreatorCode];
-    [[NSFileManager defaultManager] changeFileAttributes:attr atPath:filename];
-JNF_COCOA_EXIT(env);
-}
-
-/*
- * Class:     com_apple_eio_FileManager
- * Method:    _getFileType
- * Signature: (Ljava/lang/String;)I
- */
-JNIEXPORT jint JNICALL Java_com_apple_eio_FileManager__1getFileType
-(JNIEnv *env, jclass clz, jstring javaFilename)
-{
-    jint type = 0;
-JNF_COCOA_ENTER(env);
-        NSString *filename = JNFNormalizedNSStringForPath(env, javaFilename);
-    NSDictionary *attributes = [[NSFileManager defaultManager] fileAttributesAtPath:filename traverseLink:YES];
-    NSNumber *val = [attributes objectForKey:NSFileHFSTypeCode];
-    type = [val intValue];
-JNF_COCOA_EXIT(env);
-    return type;
-}
-
-/*
- * Class:     com_apple_eio_FileManager
- * Method:    _getFileCreator
- * Signature: (Ljava/lang/String;)I
- */
-JNIEXPORT jint JNICALL Java_com_apple_eio_FileManager__1getFileCreator
-  (JNIEnv *env, jclass clz, jstring javaFilename)
-{
-    jint creator = 0;
-JNF_COCOA_ENTER(env);
-        NSString *filename = JNFNormalizedNSStringForPath(env, javaFilename);
-    NSDictionary *attributes = [[NSFileManager defaultManager] fileAttributesAtPath:filename traverseLink:YES];
-    NSNumber *val = [attributes objectForKey:NSFileHFSCreatorCode];
-    creator = [val intValue];
-JNF_COCOA_EXIT(env);
-    return creator;
-}
-
-/*
- * Class:     com_apple_eio_FileManager
- * Method:    _findFolder
- * Signature: (SIZ)Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_com_apple_eio_FileManager__1findFolder__SIZ
-(JNIEnv *env, jclass clz, jshort domain, jint folderType, jboolean createIfNeeded)
-{
-    jstring filename = nil;
-JNF_COCOA_ENTER(env);
-
-    FSRef foundRef;
-    createIfNeeded = createIfNeeded || (folderType == kTemporaryFolderType) || (folderType == kChewableItemsFolderType);
-    if (FSFindFolder((SInt16)domain, (OSType)folderType, (Boolean)createIfNeeded, &foundRef) == noErr) {
-        char path[PATH_MAX];
-        if (FSRefMakePath(&foundRef, (UInt8 *)path, sizeof(path)) == noErr) {
-            NSString *filenameString = [[NSFileManager defaultManager] stringWithFileSystemRepresentation:path length:strlen(path)];
-            filename = JNFNormalizedJavaStringForPath(env, filenameString);
-        }
-    }
-
-JNF_COCOA_EXIT(env);
-    return filename;
-}
-
-
-/*
- * Class:     com_apple_eio_FileManager
- * Method:    _openURL
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1openURL
-(JNIEnv *env, jclass clz, jstring urlString)
-{
-JNF_COCOA_ENTER(env);
-
-    NSURL *url = [NSURL URLWithString:JNFNormalizedNSStringForPath(env, urlString)];
-
-        // Radar 3208005: Run this on the main thread; file:// style URLs will hang otherwise.
-    [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
-        [[NSWorkspace sharedWorkspace] openURL:url];
-    }];
-
-JNF_COCOA_EXIT(env);
-}
-
-
-/*
- * Class:     com_apple_eio_FileManager
- * Method:    getNativeResourceFromBundle
- * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_com_apple_eio_FileManager_getNativeResourceFromBundle
-(JNIEnv *env, jclass clz, jstring javaResourceName, jstring javaSubDirName, jstring javaTypeName)
-{
-    jstring filename = NULL;
-JNF_COCOA_ENTER(env);
-
-    NSString *resourceName = JNFNormalizedNSStringForPath(env, javaResourceName);
-        NSString *subDirectory = JNFNormalizedNSStringForPath(env, javaSubDirName);
-        NSString *typeName = JNFNormalizedNSStringForPath(env, javaTypeName);
-
-    NSString *path = [[NSBundle mainBundle] pathForResource:resourceName
-                                                     ofType:typeName
-                                                inDirectory:subDirectory];
-
-    filename = JNFNormalizedJavaStringForPath(env, path);
-
-JNF_COCOA_EXIT(env);
-    return filename;
-}
-
-
-/*
- * Class:     com_apple_eio_FileManager
- * Method:    getNativePathToApplicationBundle
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_com_apple_eio_FileManager_getNativePathToApplicationBundle
-(JNIEnv *env, jclass clazz)
-{
-        jstring filename = nil;
-JNF_COCOA_ENTER(env);
-
-        NSBundle *mainBundle = [NSBundle mainBundle];
-        filename = JNFNormalizedJavaStringForPath(env, [mainBundle bundlePath]);
-
-JNF_COCOA_EXIT(env);
-        return filename;
-}
-
-
-/*
- * Class:     com_apple_eio_FileManager
- * Method:    __moveToTrash
- * Signature: (Ljava/lang/String;)V
- */
-
-JNIEXPORT jboolean JNICALL Java_com_apple_eio_FileManager__1moveToTrash
-(JNIEnv *env, jclass clz, jstring url)
-{
-        __block jboolean returnValue = JNI_FALSE;
-JNF_COCOA_ENTER(env);
-
-    NSString *path = JNFNormalizedNSStringForPath(env, url);
-    [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){
-        NSInteger res = 0;
-        [[NSWorkspace sharedWorkspace] performFileOperation:NSWorkspaceRecycleOperation
-                                                     source:[path stringByDeletingLastPathComponent]
-                                                destination:nil
-                                                      files:[NSArray arrayWithObject:[path lastPathComponent]]
-                                                        tag:&res];
-        returnValue = (res == 0);
-    }];
-
-JNF_COCOA_EXIT(env);
-
-        return returnValue;
-}
-
-/*
- * Class:     com_apple_eio_FileManager
- * Method:    __revealInFinder
- * Signature: (Ljava/lang/String;)V
- */
-
-JNIEXPORT jboolean JNICALL Java_com_apple_eio_FileManager__1revealInFinder
-(JNIEnv *env, jclass clz, jstring url)
-{
-        __block jboolean returnValue = JNI_FALSE;
-JNF_COCOA_ENTER(env);
-
-    NSString *path = JNFNormalizedNSStringForPath(env, url);
-    [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){
-        returnValue = [[NSWorkspace sharedWorkspace] selectFile:path inFileViewerRootedAtPath:@""];
-    }];
-
-JNF_COCOA_EXIT(env);
-
-        return returnValue;
-}
--- a/jdk/src/jdk.deploy.osx/macosx/native/libosx/Dispatch.m	Mon Mar 14 12:35:52 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,174 +0,0 @@
-/*
- * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code 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 General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * Must include this before JavaNativeFoundation.h to get jni.h from build
- */
-#include "jni.h"
-#include "jni_util.h"
-
-#import "com_apple_concurrent_LibDispatchNative.h"
-
-#import <dispatch/dispatch.h>
-#import <JavaNativeFoundation/JavaNativeFoundation.h>
-
-/*
- * Declare library specific JNI_Onload entry if static build
- */
-DEF_STATIC_JNI_OnLoad
-
-/*
- * Class:     com_apple_concurrent_LibDispatchNative
- * Method:    nativeIsDispatchSupported
- * Signature: ()Z
- */
-JNIEXPORT jboolean JNICALL Java_com_apple_concurrent_LibDispatchNative_nativeIsDispatchSupported
-(JNIEnv *env, jclass clazz)
-{
-        return JNI_TRUE;
-}
-
-
-/*
- * Class:     com_apple_concurrent_LibDispatchNative
- * Method:    nativeGetMainQueue
- * Signature: ()J
- */
-JNIEXPORT jlong JNICALL Java_com_apple_concurrent_LibDispatchNative_nativeGetMainQueue
-(JNIEnv *env, jclass clazz)
-{
-        dispatch_queue_t queue = dispatch_get_main_queue();
-        return ptr_to_jlong(queue);
-}
-
-
-/*
- * Class:     com_apple_concurrent_LibDispatchNative
- * Method:    nativeCreateConcurrentQueue
- * Signature: (I)J
- */
-JNIEXPORT jlong JNICALL Java_com_apple_concurrent_LibDispatchNative_nativeCreateConcurrentQueue
-(JNIEnv *env, jclass clazz, jint priority)
-{
-        dispatch_queue_t queue = dispatch_get_global_queue((long)priority, 0);
-        return ptr_to_jlong(queue);
-}
-
-
-/*
- * Class:     com_apple_concurrent_LibDispatchNative
- * Method:    nativeCreateSerialQueue
- * Signature: (Ljava/lang/String;)J
- */
-JNIEXPORT jlong JNICALL Java_com_apple_concurrent_LibDispatchNative_nativeCreateSerialQueue
-(JNIEnv *env, jclass clazz, jstring name)
-{
-        if (name == NULL) return 0L;
-
-        jboolean isCopy;
-        const char *queue_name = (*env)->GetStringUTFChars(env, name, &isCopy);
-        dispatch_queue_t queue = dispatch_queue_create(queue_name, NULL);
-        (*env)->ReleaseStringUTFChars(env, name, queue_name);
-
-        return ptr_to_jlong(queue);
-}
-
-
-/*
- * Class:     com_apple_concurrent_LibDispatchNative
- * Method:    nativeReleaseQueue
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_com_apple_concurrent_LibDispatchNative_nativeReleaseQueue
-(JNIEnv *env, jclass clazz, jlong nativeQueue)
-{
-        if (nativeQueue == 0L) return;
-        dispatch_release((dispatch_queue_t)jlong_to_ptr(nativeQueue));
-}
-
-
-static JNF_CLASS_CACHE(jc_Runnable, "java/lang/Runnable");
-static JNF_MEMBER_CACHE(jm_run, jc_Runnable, "run", "()V");
-
-static void perform_dispatch(JNIEnv *env, jlong nativeQueue, jobject runnable, void (*dispatch_fxn)(dispatch_queue_t, dispatch_block_t))
-{
-JNF_COCOA_ENTER(env);
-        dispatch_queue_t queue = (dispatch_queue_t)jlong_to_ptr(nativeQueue);
-        if (queue == NULL) return; // shouldn't happen
-
-        // create a global-ref around the Runnable, so it can be safely passed to the dispatch thread
-        JNFJObjectWrapper *wrappedRunnable = [[JNFJObjectWrapper alloc] initWithJObject:runnable withEnv:env];
-
-        dispatch_fxn(queue, ^{
-                // attach the dispatch thread to the JVM if necessary, and get an env
-                JNFThreadContext ctx = JNFThreadDetachOnThreadDeath | JNFThreadSetSystemClassLoaderOnAttach | JNFThreadAttachAsDaemon;
-                JNIEnv *blockEnv = JNFObtainEnv(&ctx);
-
-        JNF_COCOA_ENTER(blockEnv);
-
-                // call the user's runnable
-                JNFCallObjectMethod(blockEnv, [wrappedRunnable jObject], jm_run);
-
-                // explicitly clear object while we have an env (it's cheaper that way)
-                [wrappedRunnable setJObject:NULL withEnv:blockEnv];
-
-        JNF_COCOA_EXIT(blockEnv);
-
-                // let the env go, but leave the thread attached as a daemon
-                JNFReleaseEnv(blockEnv, &ctx);
-        });
-
-        // release this thread's interest in the Runnable, the block
-        // will have retained the it's own interest above
-        [wrappedRunnable release];
-
-JNF_COCOA_EXIT(env);
-}
-
-
-/*
- * Class:     com_apple_concurrent_LibDispatchNative
- * Method:    nativeExecuteAsync
- * Signature: (JLjava/lang/Runnable;)V
- */
-JNIEXPORT void JNICALL Java_com_apple_concurrent_LibDispatchNative_nativeExecuteAsync
-(JNIEnv *env, jclass clazz, jlong nativeQueue, jobject runnable)
-{
-        // enqueues and returns
-        perform_dispatch(env, nativeQueue, runnable, dispatch_async);
-}
-
-
-/*
- * Class:     com_apple_concurrent_LibDispatchNative
- * Method:    nativeExecuteSync
- * Signature: (JLjava/lang/Runnable;)V
- */
-JNIEXPORT void JNICALL Java_com_apple_concurrent_LibDispatchNative_nativeExecuteSync
-(JNIEnv *env, jclass clazz, jlong nativeQueue, jobject runnable)
-{
-        // blocks until the Runnable completes
-        perform_dispatch(env, nativeQueue, runnable, dispatch_sync);
-}
--- a/jdk/test/ProblemList.txt	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/test/ProblemList.txt	Mon Mar 14 17:51:25 2016 +0100
@@ -334,9 +334,6 @@
 
 # jdk_time
 
-# 8134979
-java/time/tck/java/time/chrono/TCKJapaneseChronology.java       generic-all
-
 ############################################################################
 
 # jdk_tools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/com/sun/jdi/RedefineAddPrivateMethod.sh	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,79 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code 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 General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+#  @test
+#  @bug 8149743
+#  @summary crash when adding a breakpoint after redefining to add a private static method
+#  @run shell RedefineAddPrivateMethod.sh
+
+compileOptions=-g
+
+createJavaFile()
+{
+    cat <<EOF > $1.java.1
+public class $1 {
+    static public void main(String[] args) {
+        System.out.println("@1 breakpoint");
+        System.out.println("@2 breakpoint");
+    }
+
+    // @1 uncomment private static void test() {}
+}
+EOF
+}
+
+# This is called to feed cmds to jdb.
+dojdbCmds()
+{
+    setBkpts @1
+    runToBkpt @1
+    redefineClass @1
+    setBkpts @2
+    runToBkpt @2
+    cmd exitJdb
+}
+
+
+mysetup()
+{
+    if [ -z "$TESTSRC" ] ; then
+        TESTSRC=.
+    fi
+
+    for ii in . $TESTSRC $TESTSRC/.. ; do
+        if [ -r "$ii/ShellScaffold.sh" ] ; then
+            . $ii/ShellScaffold.sh 
+            break
+        fi
+    done
+}
+
+# You could replace this next line with the contents
+# of ShellScaffold.sh and this script will run just the same.
+mysetup
+
+runit
+debuggeeFailIfPresent "Internal exception:"
+pass
--- a/jdk/test/com/sun/jdi/TestScaffold.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/test/com/sun/jdi/TestScaffold.java	Mon Mar 14 17:51:25 2016 +0100
@@ -752,6 +752,7 @@
         sr.addClassExclusionFilter("com.oracle.*");
         sr.addClassExclusionFilter("oracle.*");
         sr.addClassExclusionFilter("jdk.internal.*");
+        sr.addClassExclusionFilter("jdk.jfr.*");
         sr.addCountFilter(1);
         sr.enable();
         StepEvent retEvent = (StepEvent)waitForRequestedEvent(sr);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Focus/FocusTraversalPolicy/ContainerOrderFTPTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+  @test
+  @bug 8025001
+  @summary Tests java.awt.ContainerOrderFocusTraversalPolicy functionality.
+  @run main ContainerOrderFTPTest
+*/
+
+import java.awt.Frame;
+import java.awt.Button;
+import java.awt.Component;
+import java.awt.FlowLayout;
+import java.awt.ContainerOrderFocusTraversalPolicy;
+
+public class ContainerOrderFTPTest {
+
+    private final ContainerOrderFocusTraversalPolicy coftp;
+    private final Frame frame;
+    private final Button b1;
+    private final Button b2;
+    private final String expectedTraversal;
+
+    public ContainerOrderFTPTest() {
+        expectedTraversal = "B1B2F1";
+        b1 = new Button("B1");
+        b2 = new Button("B2");
+        frame = new Frame("F1");
+
+        frame.setLayout(new FlowLayout());
+        frame.setSize(200, 200);
+        coftp = new ContainerOrderFocusTraversalPolicy();
+        frame.setFocusTraversalPolicy(coftp);
+        frame.add(b1);
+        frame.add(b2);
+        frame.setVisible(true);
+    }
+
+    public static void main(String[] args) throws Exception {
+        ContainerOrderFTPTest test = new ContainerOrderFTPTest();
+        test.performTest();
+        test.dispose();
+    }
+
+    public void performTest() {
+        int count = 0;
+        Component comp = coftp.getFirstComponent(frame);
+        String traversal = "";
+        do {
+            comp = coftp.getComponentAfter(frame, comp);
+            if (comp instanceof Button) {
+                traversal += ((Button)comp).getLabel();
+            } else if (comp instanceof Frame) {
+                traversal += ((Frame)comp).getTitle();
+            }
+            count++;
+        } while(count < 3);
+
+        if (!expectedTraversal.equals(traversal)) {
+            dispose();
+            throw new RuntimeException("Incorrect Traversal. Expected : "
+                + expectedTraversal + "Actual : " + traversal);
+        }
+    }
+
+    public void dispose() {
+        frame.dispose();
+    }
+}
--- a/jdk/test/java/awt/image/DrawImage/IncorrectClipSurface2SW.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/test/java/awt/image/DrawImage/IncorrectClipSurface2SW.java	Mon Mar 14 17:51:25 2016 +0100
@@ -42,11 +42,11 @@
 
 /**
  * @test
- * @bug 8041644
+ * @bug 8041644 8044788
  * @summary Tests drawing volatile image to BI using different clip.
  *          Results of the blit compatibleImage to BI used for comparison.
  * @author Sergey Bylokhov
- * @run main/othervm -Dsun.java2d.d3d=false IncorrectClipSurface2SW
+ * @run main/othervm IncorrectClipSurface2SW
  */
 public final class IncorrectClipSurface2SW {
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/image/multiresolution/MenuMultiresolutionIconTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,185 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8150258
+ * @author a.stepanov
+ * @summary Check that correct resolution variants are chosen for menu icons
+ *          when multiresolution image is used for their construction.
+ *
+ * @library ../../../../lib/testlibrary/
+ * @build ExtendedRobot
+ * @run main/othervm -Dsun.java2d.uiScale=1 MenuMultiresolutionIconTest
+ * @run main/othervm -Dsun.java2d.uiScale=2 MenuMultiresolutionIconTest
+ */
+
+
+import java.awt.*;
+import java.awt.event.*;
+import java.awt.image.*;
+import javax.swing.*;
+
+public class MenuMultiresolutionIconTest extends JPanel {
+
+    private final static int DELAY = 1000;
+    private final static int SZ = 50;
+    private final static String SCALE = "sun.java2d.uiScale";
+    private final static Color C1X = Color.RED, C2X = Color.BLUE;
+    private final ExtendedRobot r;
+
+    private static BufferedImage generateImage(int scale, Color c) {
+
+        int x = SZ * scale;
+        BufferedImage img = new BufferedImage(x, x, BufferedImage.TYPE_INT_RGB);
+        Graphics g = img.getGraphics();
+        g.setColor(c);
+        g.fillRect(0, 0, x, x);
+        return img;
+    }
+
+    private static BaseMultiResolutionImage createIcon() {
+
+        return new BaseMultiResolutionImage(new BufferedImage[] {
+            generateImage(1, C1X), generateImage(2, C2X)});
+    }
+
+    private JFrame     frame;
+    private JPopupMenu popup;
+    private JMenuItem  popupItem;
+    private JMenu      menu;
+
+    public MenuMultiresolutionIconTest() throws Exception {
+
+        r = new ExtendedRobot();
+        SwingUtilities.invokeAndWait(this::createUI);
+    }
+
+    private void createUI() {
+
+        ImageIcon ii = new ImageIcon(createIcon());
+
+        popup = new JPopupMenu();
+        popupItem = new JMenuItem("test", ii);
+        popup.add(popupItem);
+        popupItem.setHorizontalTextPosition(JMenuItem.RIGHT);
+        addMouseListener(new MousePopupListener());
+
+        frame = new JFrame();
+        JMenuBar menuBar = new JMenuBar();
+        menu = new JMenu("test");
+        menuBar.add(menu);
+        menu.add(new JMenuItem("test", ii));
+        menu.add(new JRadioButtonMenuItem("test", ii, true));
+        menu.add(new JCheckBoxMenuItem("test", ii, true));
+
+        frame.setJMenuBar(menuBar);
+        frame.setContentPane(this);
+        frame.setSize(300, 300);
+        frame.setVisible(true);
+    }
+
+    private class MousePopupListener extends MouseAdapter {
+
+        @Override
+        public void mousePressed(MouseEvent e)  { showPopup(e); }
+        @Override
+        public void mouseClicked(MouseEvent e)  { showPopup(e); }
+        @Override
+        public void mouseReleased(MouseEvent e) { showPopup(e); }
+
+        private void showPopup(MouseEvent e) {
+            if (e.isPopupTrigger()) {
+                popup.show(MenuMultiresolutionIconTest.this, e.getX(), e.getY());
+            }
+        }
+    }
+
+    private static boolean is2x() {
+
+        return GraphicsEnvironment.getLocalGraphicsEnvironment().
+            getDefaultScreenDevice().getDefaultConfiguration().
+            getDefaultTransform().getScaleX() > 1.001;
+    }
+
+    private boolean eqColors(Color c1, Color c2) {
+
+        int tol = 15;
+        return (
+            Math.abs(c2.getRed()   - c1.getRed()  ) < tol &&
+            Math.abs(c2.getGreen() - c1.getGreen()) < tol &&
+            Math.abs(c2.getBlue()  - c1.getBlue() ) < tol);
+    }
+
+    private void checkIconColor(Point p, String what) {
+
+        Color expected = is2x() ? C2X : C1X;
+        Color c = r.getPixelColor(p.x + SZ / 2, p.y + SZ / 2);
+        if (!eqColors(c, expected)) {
+            frame.dispose();
+            throw new RuntimeException("invalid " + what + "menu item icon " +
+                "color, expected: " + expected + ", got: " + c);
+        }
+        System.out.println(what + "item icon check passed");
+    }
+
+    private void doTest() {
+
+        r.waitForIdle(2 * DELAY);
+
+        Point p = getLocationOnScreen();
+        r.mouseMove(p.x + getWidth() / 4, p.y + getHeight() / 4);
+        r.waitForIdle(DELAY);
+        r.click(InputEvent.BUTTON3_DOWN_MASK);
+        r.waitForIdle(DELAY);
+        p = popupItem.getLocationOnScreen();
+        checkIconColor(p, "popup ");
+        r.waitForIdle(DELAY);
+
+        p = menu.getLocationOnScreen();
+        r.mouseMove(p.x + menu.getWidth() / 2, p.y + menu.getHeight() / 2);
+        r.waitForIdle(DELAY);
+        r.click();
+        p = menu.getItem(0).getLocationOnScreen();
+        checkIconColor(p, "");
+        r.waitForIdle(DELAY);
+
+        p = menu.getItem(1).getLocationOnScreen();
+        checkIconColor(p, "radiobutton ");
+        r.waitForIdle(DELAY);
+
+        p = menu.getItem(2).getLocationOnScreen();
+        checkIconColor(p, "checkbox ");
+        r.waitForIdle(DELAY);
+
+        frame.dispose();
+    }
+
+    public static void main(String s[]) throws Exception {
+
+        // TODO: remove is2x() after JDK-8150844 fix
+        if (is2x() == "2".equals(System.getProperty(SCALE))) {
+            (new MenuMultiresolutionIconTest()).doTest();
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/image/multiresolution/MultiResolutionTrayIconTest/MultiResolutionTrayIconTest.html	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,41 @@
+<!--
+ Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ This code is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License version 2 only, as
+ published by the Free Software Foundation.
+
+ This code 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 General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
+
+ You should have received a copy of the GNU General Public License version
+ 2 along with this work; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
+<html>
+<head>
+<title> MultiResolutionTrayIconTest </title>
+</head>
+<body>
+<applet code="MultiResolutionTrayIconTest.class" width=100 height=30></applet>
+
+To run test please push "Start" (if system tray is not supported, push "Pass").
+
+Two tray icons will appear (note: sometimes they can go to the tray icons pool).
+
+Please check if both of them have correct size and
+the same colouring (white rectagle in a blue mount). In this case please push "Pass".
+
+Otherwise (if the 2nd red-white small icon appears) please push "Fail".
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/image/multiresolution/MultiResolutionTrayIconTest/MultiResolutionTrayIconTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+  @test
+  @bug 8150176
+  @ignore 8150176
+  @summary Check if correct resolution variant is used for tray icon.
+  @author a.stepanov
+  @run applet/manual=yesno MultiResolutionTrayIconTest.html
+*/
+
+
+import java.applet.Applet;
+import java.awt.*;
+import java.awt.event.*;
+import java.awt.image.*;
+
+
+public class MultiResolutionTrayIconTest extends Applet {
+
+    private SystemTray tray;
+    private TrayIcon   icon, iconMRI;
+
+    public void init() { this.setLayout(new BorderLayout()); }
+
+    public void start() {
+
+        boolean trayIsSupported = SystemTray.isSupported();
+        Button b = new Button("Start");
+        if (trayIsSupported) {
+
+            prepareIcons();
+            b.addActionListener(new ActionListener() {
+                @Override
+                public void actionPerformed(ActionEvent e) { doTest(); }
+            });
+        } else {
+             b.setLabel("not supported");
+             b.setEnabled(false);
+             System.out.println("system tray is not supported");
+        }
+        add(b, BorderLayout.CENTER);
+
+        validate();
+        setVisible(true);
+    }
+
+    private BufferedImage generateImage(int w, int h, Color c) {
+
+        BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
+        Graphics g = img.getGraphics();
+        g.setColor(c);
+        g.fillRect(0, 0, w, h);
+        g.setColor(Color.WHITE);
+        int r = (Math.min(w, h) >= 8) ? 3 : 1;
+        g.fillRect(r, r, w - 2 * r, h - 2 * r);
+        return img;
+    }
+
+    private void prepareIcons() {
+
+        tray = SystemTray.getSystemTray();
+        Dimension d = tray.getTrayIconSize();
+        int w = d.width, h = d.height;
+
+        BufferedImage img = generateImage(w, h, Color.BLUE);
+        // use wrong icon size for "nok"
+        BufferedImage nok = generateImage(w / 2 + 2, h / 2 + 2, Color.RED);
+        BaseMultiResolutionImage mri =
+            new BaseMultiResolutionImage(new BufferedImage[] {nok, img});
+        icon    = new TrayIcon(img);
+        iconMRI = new TrayIcon(mri);
+    }
+
+    private void doTest() {
+
+        if (tray.getTrayIcons().length > 0) { return; } // icons were added already
+        try {
+            tray.add(icon);
+            tray.add(iconMRI);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void stop() {
+
+        // check for null, just in case
+        if (tray != null) {
+            tray.remove(icon);
+            tray.remove(iconMRI);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/print/PrinterJob/MultiMonPrintDlgTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.awt.Button;
+import java.awt.Component;
+import java.awt.Frame;
+import java.awt.GraphicsDevice;
+import java.awt.GraphicsEnvironment;
+import java.awt.KeyboardFocusManager;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+
+/**
+ * @test
+ * @bug 8138749
+ * @summary PrinterJob.printDialog() does not support multi-mon,
+ *           always displayed on primary
+ * @run main/manual MultiMonPrintDlgTest
+ */
+public class MultiMonPrintDlgTest implements ActionListener {
+
+    Frame primaryFrame = null;
+    Frame secFrame = null;
+    GraphicsDevice gd[] = GraphicsEnvironment.getLocalGraphicsEnvironment().
+                            getScreenDevices();
+
+    public MultiMonPrintDlgTest() throws Exception {
+        if (gd.length <= 1) {
+            System.out.println("This test should be run only on dual-monitor systems. Aborted!!");
+            return;
+        }
+
+        String[] instructions =
+            {
+             " This test should be running on a dual-monitor setup.",
+             "A frame will be created on each of the 2 monitor. ",
+             "Click the Print button on the frame displayed in the non-default monitor.",
+             "Please verify that page dialog followed by print dialog ",
+             " is displayed in the same screen",
+             "where the frame is located ie, in the non-default monitor.",
+            };
+
+        SwingUtilities.invokeAndWait(() -> {
+            JOptionPane.showMessageDialog(
+                    (Component) null,
+                    instructions,
+                    "information", JOptionPane.INFORMATION_MESSAGE);
+        });
+        GraphicsDevice defDev = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
+        int x = 0;
+        Frame f = null;
+        for (x = 0; x < gd.length; x ++) {
+            if (gd[x] != defDev) {
+                secFrame = new Frame("Screen " + x + " - secondary", gd[x].getDefaultConfiguration());
+                f = secFrame;
+            } else {
+                primaryFrame = new Frame("Screen " + x + " - primary", gd[x].getDefaultConfiguration());
+                f = primaryFrame;
+            }
+            Button b = new Button("Print");
+            b.addActionListener(this);
+            f.add("South", b);
+            f.addWindowListener (new WindowAdapter() {
+                public void windowClosing(WindowEvent we) {
+                    ((Window) we.getSource()).dispose();
+                }
+            });
+            f.setSize(200, 200);
+            f.setVisible(true);
+        }
+    }
+
+    public void actionPerformed (ActionEvent ae) {
+        try {
+            javax.print.attribute.PrintRequestAttributeSet prSet =
+                  new javax.print.attribute.HashPrintRequestAttributeSet();
+            java.awt.print.PrinterJob.getPrinterJob().pageDialog(prSet);
+            Window w = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
+            int dialogButton = JOptionPane.showConfirmDialog (w,
+                            "Did the pageDialog shown in non-default monitor?",
+                            null, JOptionPane.YES_NO_OPTION);
+            if(dialogButton == JOptionPane.NO_OPTION) {
+                throw new RuntimeException("PageDialog is shown in wrong monitor");
+            }
+            java.awt.print.PrinterJob.getPrinterJob().printDialog(prSet);
+            dialogButton = JOptionPane.showConfirmDialog (w,
+                            "Did the printDialog shown in non-default monitor?",
+                            null, JOptionPane.YES_NO_OPTION);
+            if(dialogButton == JOptionPane.NO_OPTION) {
+                throw new RuntimeException("PrintDialog is shown in wrong monitor");
+            }
+        } finally {
+            primaryFrame.dispose();
+            secFrame.dispose();
+        }
+    }
+
+    public static void main (String args[]) throws Exception {
+        MultiMonPrintDlgTest test = new MultiMonPrintDlgTest();
+    }
+}
--- a/jdk/test/java/lang/instrument/NativeMethodPrefixAgent.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/test/java/lang/instrument/NativeMethodPrefixAgent.java	Mon Mar 14 17:51:25 2016 +0100
@@ -31,7 +31,7 @@
  *          java.management
  *          java.instrument
  * @run shell/timeout=240 MakeJAR2.sh NativeMethodPrefixAgent NativeMethodPrefixApp 'Can-Retransform-Classes: true' 'Can-Set-Native-Method-Prefix: true'
- * @run main/othervm -javaagent:NativeMethodPrefixAgent.jar NativeMethodPrefixApp
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:-CheckIntrinsics -javaagent:NativeMethodPrefixAgent.jar NativeMethodPrefixApp
  */
 
 import java.lang.instrument.*;
--- a/jdk/test/java/lang/ref/FinalizeOverride.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/test/java/lang/ref/FinalizeOverride.java	Mon Mar 14 17:51:25 2016 +0100
@@ -29,7 +29,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 
 /* @test
- * @bug 8027351
+ * @bug 8027351 8148940
  * @summary Basic test of the finalize method
  */
 
@@ -63,6 +63,19 @@
         while (finalizedCount.get() != (count+1)) {
             System.gc();
             System.runFinalization();
+            // Running System.gc() and System.runFinalization() in a
+            // tight loop can trigger frequent safepointing that slows
+            // down the VM and, as a result, the test. (With the
+            // HotSpot VM, the effect of frequent safepointing is
+            // especially noticeable if the test is run with the
+            // -Xcomp flag.)  Sleeping for a second after every
+            // garbage collection and finalization cycle gives the VM
+            // time to make progress.
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                System.out.println("Main thread interrupted, continuing execution.");
+            }
         }
 
         if (privateFinalizeInvoked) {
--- a/jdk/test/java/net/URLPermission/URLTest.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/test/java/net/URLPermission/URLTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,7 @@
  *
  * @test
  * @bug 8010464
+ * @key intermittent
  * @library /lib/testlibrary/
  * @build jdk.testlibrary.SimpleSSLContext
  * @run main/othervm/java.security.policy=policy.1 URLTest one
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/httpclient/ShortRequestBody.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.*;
+import java.net.http.*;
+import java.net.*;
+import java.util.concurrent.*;
+import java.nio.ByteBuffer;
+import java.util.function.LongConsumer;
+
+/**
+ * @test
+ * @bug 8151441
+ * @run main/othervm/timeout=10 ShortRequestBody
+ */
+
+/**
+ * Exception was not being thrown
+ */
+public class ShortRequestBody {
+
+    static Server server;
+    static String reqbody = "Hello world";
+
+    static String response = "HTTP/1.1 200 OK\r\nContent-length: 0\r\n\r\n";
+
+    static class RequestBody implements HttpRequest.BodyProcessor {
+        public long onRequestStart(HttpRequest hr, LongConsumer flowController) {
+            return reqbody.length() + 1; // wrong!
+        }
+
+        public boolean onRequestBodyChunk(ByteBuffer buf) throws IOException {
+            byte[] b = reqbody.getBytes();
+            buf.put(b);
+            return true;
+        }
+    }
+
+    static void close(Closeable c) {
+        try {
+            if (c == null)
+                return;
+            c.close();
+        } catch (IOException e) {}
+    }
+
+    public static void main(String[] args) throws Exception {
+        ServerSocket server = new ServerSocket(0);
+        int port = server.getLocalPort();
+        URI uri = new URI("http://127.0.0.1:" + port + "/");
+
+        HttpRequest request;
+        HttpResponse r;
+        Socket s = null;
+        CompletableFuture<HttpResponse> cf1;
+        try {
+            cf1 = HttpRequest.create(uri)
+                    .body(new RequestBody())
+                    .GET()
+                    .responseAsync();
+
+            s = server.accept();
+            s.getInputStream().readAllBytes();
+            try (OutputStream os = s.getOutputStream()) {
+                os.write(response.getBytes());
+            } catch (IOException ee) {
+            }
+
+            try {
+                r = cf1.get(3, TimeUnit.SECONDS);
+                throw new RuntimeException("Failed");
+            } catch (TimeoutException e0) {
+                throw new RuntimeException("Failed timeout");
+            } catch (ExecutionException e) {
+                System.err.println("OK");
+            }
+        } finally {
+            HttpClient.getDefault().executorService().shutdownNow();
+            close(s);
+            close(server);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/httpclient/whitebox/TEST.properties	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,3 @@
+TestNG.dirs = .
+
+bootclasspath.dirs = /java/net/httpclient
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/httpclient/whitebox/java/net/http/SelectorTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,208 @@
+/*
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 8151299
+ * @summary Http client SelectorManager overwriting read and write events
+ */
+package java.net.http;
+
+import java.net.*;
+import java.io.*;
+import java.nio.channels.*;
+import java.nio.ByteBuffer;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicInteger;
+import static java.lang.System.out;
+import static java.nio.charset.StandardCharsets.US_ASCII;
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+import org.testng.annotations.Test;
+
+/**
+ * Whitebox test of selector mechanics. Currently only a simple test
+ * setting one read and one write event is done. It checks that the
+ * write event occurs first, followed by the read event and then no
+ * further events occur despite the conditions actually still existing.
+ */
+@Test
+public class SelectorTest {
+
+    AtomicInteger counter = new AtomicInteger();
+    volatile boolean error;
+    static final CountDownLatch finishingGate = new CountDownLatch(1);
+
+    String readSomeBytes(RawChannel chan) {
+        try {
+            ByteBuffer buf = ByteBuffer.allocate(1024);
+            int t = chan.read(buf);
+            if (t <= 0) {
+                out.printf("chan read returned %d\n", t);
+                return null;
+            }
+            byte[] bb = new byte[t];
+            buf.get(bb);
+            return new String(bb, US_ASCII);
+        } catch (IOException ioe) {
+            throw new UncheckedIOException(ioe);
+        }
+    }
+
+    @Test(timeOut = 10000)
+    public void test() throws Exception {
+
+        try (ServerSocket server = new ServerSocket(0)) {
+            int port = server.getLocalPort();
+
+            out.println("Listening on port " + server.getLocalPort());
+
+            TestServer t = new TestServer(server);
+            t.start();
+            out.println("Started server thread");
+
+            final RawChannel chan = getARawChannel(port);
+
+            chan.registerEvent(new RawChannel.NonBlockingEvent() {
+                @Override
+                public int interestOps() {
+                    return SelectionKey.OP_READ;
+                }
+
+                @Override
+                public void handle() {
+                    readSomeBytes(chan);
+                    out.printf("OP_READ\n");
+                    if (counter.get() != 1) {
+                        out.printf("OP_READ error counter = %d\n", counter);
+                        error = true;
+                    }
+                }
+            });
+
+            chan.registerEvent(new RawChannel.NonBlockingEvent() {
+                @Override
+                public int interestOps() {
+                    return SelectionKey.OP_WRITE;
+                }
+
+                @Override
+                public void handle() {
+                    out.printf("OP_WRITE\n");
+                    if (counter.get() != 0) {
+                        out.printf("OP_WRITE error counter = %d\n", counter);
+                        error = true;
+                    } else {
+                        ByteBuffer bb = ByteBuffer.wrap(TestServer.INPUT);
+                        counter.incrementAndGet();
+                        try {
+                            chan.write(bb);
+                        } catch (IOException e) {
+                            throw new UncheckedIOException(e);
+                        }
+                    }
+                }
+
+            });
+            out.println("Events registered. Waiting");
+            finishingGate.await(30, SECONDS);
+            if (error)
+                throw new RuntimeException("Error");
+            else
+                out.println("No error");
+        }
+    }
+
+    static RawChannel getARawChannel(int port) throws Exception {
+        URI uri = URI.create("http://127.0.0.1:" + port + "/");
+        out.println("client connecting to " + uri.toString());
+        HttpRequest req = HttpRequest.create(uri).GET();
+        HttpResponse r = req.response();
+        r.body(HttpResponse.ignoreBody());
+        return ((HttpResponseImpl) r).rawChannel();
+    }
+
+    static class TestServer extends Thread {
+        static final byte[] INPUT = "Hello world".getBytes(US_ASCII);
+        static final byte[] OUTPUT = "Goodbye world".getBytes(US_ASCII);
+        static final String FIRST_RESPONSE = "HTTP/1.1 200 OK\r\nContent-length: 0\r\n\r\n";
+        final ServerSocket server;
+
+        TestServer(ServerSocket server) throws IOException {
+            this.server = server;
+        }
+
+        public void run() {
+            try (Socket s = server.accept();
+                 InputStream is = s.getInputStream();
+                 OutputStream os = s.getOutputStream()) {
+
+                out.println("Got connection");
+                readRequest(is);
+                os.write(FIRST_RESPONSE.getBytes());
+                read(is);
+                write(os);
+                Thread.sleep(1000);
+                // send some more data, and make sure WRITE op does not get called
+                write(os);
+                out.println("TestServer exiting");
+                SelectorTest.finishingGate.countDown();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        // consumes the HTTP request
+        static void readRequest(InputStream is) throws IOException {
+            out.println("starting readRequest");
+            byte[] buf = new byte[1024];
+            String s = "";
+            while (true) {
+                int n = is.read(buf);
+                if (n <= 0)
+                    throw new IOException("Error");
+                s = s + new String(buf, 0, n);
+                if (s.indexOf("\r\n\r\n") != -1)
+                    break;
+            }
+            out.println("returning from readRequest");
+        }
+
+        static void read(InputStream is) throws IOException {
+            out.println("starting read");
+            for (int i = 0; i < INPUT.length; i++) {
+                int c = is.read();
+                if (c == -1)
+                    throw new IOException("closed");
+                if (INPUT[i] != (byte) c)
+                    throw new IOException("Error. Expected:" + INPUT[i] + ", got:" + c);
+            }
+            out.println("returning from read");
+        }
+
+        static void write(OutputStream os) throws IOException {
+            out.println("doing write");
+            os.write(OUTPUT);
+        }
+    }
+}
--- a/jdk/test/java/net/ipv6tests/TcpTest.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/test/java/net/ipv6tests/TcpTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -24,6 +24,7 @@
 /*
  * @test
  * @bug 4868820
+ * @key intermittent
  * @summary IPv6 support for Windows XP and 2003 server
  */
 
--- a/jdk/test/java/nio/channels/DatagramChannel/AdaptDatagramSocket.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/test/java/nio/channels/DatagramChannel/AdaptDatagramSocket.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,7 @@
  */
 
 /* @test
- * @bug 4313882 4981129
+ * @bug 4313882 4981129 8143610
  * @summary Unit test for datagram-socket-channel adaptors
  * @library ..
  * @key randomness
@@ -137,7 +137,7 @@
                                         echoServer.getPort());
             test(address, 0, false, false);
             test(address, 0, false, true);
-            test(address, 15000, false, false);
+            test(address, Integer.MAX_VALUE, false, false);
         }
         try (TestServers.UdpDiscardServer discardServer
                 = TestServers.UdpDiscardServer.startNewServer()) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/sound/sampled/AudioInputStream/FrameLengthAfterConversion.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,209 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.sound.sampled.AudioFileFormat;
+import javax.sound.sampled.AudioFormat;
+import javax.sound.sampled.AudioInputStream;
+import javax.sound.sampled.AudioSystem;
+import javax.sound.sampled.UnsupportedAudioFileException;
+import javax.sound.sampled.spi.AudioFileWriter;
+import javax.sound.sampled.spi.FormatConversionProvider;
+
+import static java.util.ServiceLoader.load;
+import static javax.sound.sampled.AudioFileFormat.Type.AIFC;
+import static javax.sound.sampled.AudioFileFormat.Type.AIFF;
+import static javax.sound.sampled.AudioFileFormat.Type.AU;
+import static javax.sound.sampled.AudioFileFormat.Type.SND;
+import static javax.sound.sampled.AudioFileFormat.Type.WAVE;
+import static javax.sound.sampled.AudioSystem.NOT_SPECIFIED;
+
+/**
+ * @test
+ * @bug 8038139
+ */
+public final class FrameLengthAfterConversion {
+
+    /**
+     * We will try to use all formats, in this case all our providers will be
+     * covered by supported/unsupported formats.
+     */
+    private static final List<AudioFormat> formats = new ArrayList<>(23000);
+
+    private static final AudioFormat.Encoding[] encodings = {
+            AudioFormat.Encoding.ALAW, AudioFormat.Encoding.ULAW,
+            AudioFormat.Encoding.PCM_SIGNED, AudioFormat.Encoding.PCM_UNSIGNED,
+            AudioFormat.Encoding.PCM_FLOAT, new AudioFormat.Encoding("Test")
+    };
+
+    private static final int[] sampleBits = {
+            1, 4, 8, 11, 16, 20, 24, 32
+    };
+
+    private static final int[] channels = {
+            1, 2, 3, 4, 5
+    };
+
+    private static final AudioFileFormat.Type[] types = {
+            WAVE, AU, AIFF, AIFC, SND,
+            new AudioFileFormat.Type("TestName", "TestExt")
+    };
+
+    private static final int FRAME_LENGTH = 10;
+
+    static {
+        for (final int sampleSize : sampleBits) {
+            for (final int channel : channels) {
+                for (final AudioFormat.Encoding enc : encodings) {
+                    final int frameSize = ((sampleSize + 7) / 8) * channel;
+                    formats.add(new AudioFormat(enc, 44100, sampleSize, channel,
+                                                frameSize, 44100, true));
+                    formats.add(new AudioFormat(enc, 44100, sampleSize, channel,
+                                                frameSize, 44100, false));
+                }
+            }
+        }
+    }
+
+    public static void main(final String[] args) {
+        for (final FormatConversionProvider fcp : load(
+                FormatConversionProvider.class)) {
+            System.out.println("fcp = " + fcp);
+            for (final AudioFormat from : formats) {
+                for (final AudioFormat to : formats) {
+                    testAfterConversion(fcp, to, getStream(from, true));
+                }
+            }
+        }
+
+        for (final AudioFileWriter afw : load(AudioFileWriter.class)) {
+            System.out.println("afw = " + afw);
+            for (final AudioFileFormat.Type type : types) {
+                for (final AudioFormat from : formats) {
+                    testAfterSaveToStream(afw, type, getStream(from, true));
+                }
+            }
+        }
+
+        for (final AudioFileWriter afw : load(AudioFileWriter.class)) {
+            System.out.println("afw = " + afw);
+            for (final AudioFileFormat.Type type : types) {
+                for (final AudioFormat from : formats) {
+                    testAfterSaveToFile(afw, type, getStream(from, true));
+                }
+            }
+        }
+
+        for (final AudioFileWriter afw : load(AudioFileWriter.class)) {
+            System.out.println("afw = " + afw);
+            for (final AudioFileFormat.Type type : types) {
+                for (final AudioFormat from : formats) {
+                    testAfterSaveToFile(afw, type, getStream(from, false));
+                }
+            }
+        }
+    }
+
+    /**
+     * Verifies the frame length after the stream was saved/read to/from
+     * stream.
+     */
+    private static void testAfterSaveToStream(final AudioFileWriter afw,
+                                              final AudioFileFormat.Type type,
+                                              final AudioInputStream ais) {
+        try {
+            final ByteArrayOutputStream out = new ByteArrayOutputStream();
+            afw.write(ais, type, out);
+            final InputStream input = new ByteArrayInputStream(
+                    out.toByteArray());
+            validate(AudioSystem.getAudioInputStream(input).getFrameLength());
+        } catch (IllegalArgumentException | UnsupportedAudioFileException
+                | IOException ignored) {
+        }
+    }
+
+    /**
+     * Verifies the frame length after the stream was saved/read to/from file.
+     */
+    private static void testAfterSaveToFile(final AudioFileWriter afw,
+                                            final AudioFileFormat.Type type,
+                                            AudioInputStream ais) {
+        try {
+            final File temp = File.createTempFile("sound", ".tmp");
+            temp.deleteOnExit();
+            afw.write(ais, type, temp);
+            ais = AudioSystem.getAudioInputStream(temp);
+            final long frameLength = ais.getFrameLength();
+            ais.close();
+            temp.delete();
+            validate(frameLength);
+        } catch (IllegalArgumentException | UnsupportedAudioFileException
+                | IOException ignored) {
+        }
+    }
+
+    /**
+     * Verifies the frame length after the stream was converted to other
+     * stream.
+     *
+     * @see FormatConversionProvider#getAudioInputStream(AudioFormat,
+     * AudioInputStream)
+     */
+    private static void testAfterConversion(final FormatConversionProvider fcp,
+                                            final AudioFormat to,
+                                            final AudioInputStream ais) {
+        if (fcp.isConversionSupported(to, ais.getFormat())) {
+            validate(fcp.getAudioInputStream(to, ais).getFrameLength());
+        }
+    }
+
+    /**
+     * Throws an exception if the frameLength is specified and is not equal to
+     * the gold value.
+     */
+    private static void validate(final long frameLength) {
+        if (frameLength != FRAME_LENGTH) {
+            System.err.println("Expected: " + FRAME_LENGTH);
+            System.err.println("Actual: " + frameLength);
+            throw new RuntimeException();
+        }
+    }
+
+    private static AudioInputStream getStream(final AudioFormat format,
+                                              final boolean frameLength) {
+        final int dataSize = FRAME_LENGTH * format.getFrameSize();
+        final InputStream in = new ByteArrayInputStream(new byte[dataSize]);
+        if (frameLength) {
+            return new AudioInputStream(in, format, FRAME_LENGTH);
+        } else {
+            return new AudioInputStream(in, format, NOT_SPECIFIED);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JFileChooser/ShellFolderQueries/ShellFolderQueriesTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8081722
+ * @summary Provide public API for file hierarchy provided by
+ * sun.awt.shell.ShellFolder
+ * @author Semyon Sadetsky
+ * @run main ShellFolderQueriesTest
+ */
+
+import sun.awt.OSInfo;
+
+import javax.swing.filechooser.FileSystemView;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+public class ShellFolderQueriesTest {
+    static final String HOME = System.getProperty("user.home");
+    static final FileSystemView fsv = FileSystemView.getFileSystemView();
+
+
+    static String scriptBeg =
+            "set WshShell = WScript.CreateObject(\"WScript.Shell\")\n" +
+            "set oShellLink = WshShell.CreateShortcut(\"shortcut.lnk\")\n" +
+            "oShellLink.TargetPath = \"";
+    static String scriptEnd = "\"\noShellLink.WindowStyle = 1\noShellLink.Save";
+
+    public static void main(String[] args) throws Exception {
+        if(OSInfo.getOSType() == OSInfo.OSType.WINDOWS) {
+            testGet();
+            testLink();
+        } else {
+            testGet();
+        }
+        System.out.println("ok");
+    }
+
+    private static void testLink() throws IOException, InterruptedException {
+        // Create and execute VBS script to create a link
+        File file = createVbsScript(scriptBeg + HOME + scriptEnd);
+        Runtime.getRuntime().exec("cscript " + file.getName(), null,
+                file.getParentFile()).waitFor();
+        file.delete();
+
+        File link = new File(file.getParentFile(), "shortcut.lnk");
+        if (!fsv.isLink(link)) {
+            link.delete();
+            throw new RuntimeException("Link is not detected");
+        }
+
+        File location = fsv.getLinkLocation(link);
+        if (!location.getAbsolutePath().equals(HOME)) {
+            link.delete();
+            throw new RuntimeException("Link location " + location +
+                    " is wrong");
+        }
+        link.delete();
+
+
+        link = File.createTempFile("test", ".tst");
+
+        if (fsv.isLink(link)) {
+            link.delete();
+            throw new RuntimeException("File is not a link");
+        }
+
+        try {
+            location = fsv.getLinkLocation(link);
+            if (location != null) {
+                link.delete();
+                throw new RuntimeException("Not a link, should return null");
+            }
+        }
+        catch (FileNotFoundException e) {
+        }
+        link.delete();
+    }
+
+    private static File createVbsScript(String script) throws IOException {
+        File file = File.createTempFile("test", ".vbs");
+        file.deleteOnExit();
+        FileOutputStream fos = new FileOutputStream(file);
+        fos.write(script.getBytes());
+        fos.close();
+        return file;
+    }
+
+    private static void testGet() {
+        File[] files = fsv.getChooserComboBoxFiles();
+        for (File file : files) {
+            if (fsv.isLink(file)) {
+                throw new RuntimeException(
+                        "Link shouldn't be in FileChooser combobox, "
+                                + file.getPath());
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JInternalFrame/8146321/JInternalFrameIconTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,275 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 8146321
+ * @summary verifies JInternalFrame Icon and ImageIcon
+ * @library ../../regtesthelpers
+ * @build Util
+ * @run main JInternalFrameIconTest
+ */
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.awt.image.BufferedImage;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JDesktopPane;
+import javax.swing.JFrame;
+import javax.swing.JInternalFrame;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.UnsupportedLookAndFeelException;
+
+public class JInternalFrameIconTest {
+
+    private static JFrame frame;
+    private static JDesktopPane desktopPane;
+    private static JInternalFrame internalFrame;
+    private static ImageIcon titleImageIcon;
+    private static Icon titleIcon;
+    private static BufferedImage imageIconImage;
+    private static BufferedImage iconImage;
+
+    private static Robot robot;
+
+    public static void main(String[] args) throws Exception {
+        robot = new Robot();
+        robot.delay(2000);
+        UIManager.LookAndFeelInfo[] lookAndFeelArray
+                = UIManager.getInstalledLookAndFeels();
+        for (UIManager.LookAndFeelInfo lookAndFeelItem : lookAndFeelArray) {
+            executeCase(lookAndFeelItem.getClassName());
+        }
+
+    }
+
+    private static void executeCase(String lookAndFeelString) throws Exception {
+        if (tryLookAndFeel(lookAndFeelString)) {
+            createImageIconUI(lookAndFeelString);
+            robot.delay(1000);
+            getImageIconBufferedImage();
+            robot.waitForIdle();
+            cleanUp();
+            robot.waitForIdle();
+
+            createIconUI(lookAndFeelString);
+            robot.delay(1000);
+            getIconBufferedImage();
+            robot.waitForIdle();
+            cleanUp();
+            robot.waitForIdle();
+            testIfSame();
+            robot.waitForIdle();
+        }
+
+    }
+
+    private static void createImageIconUI(final String lookAndFeelString)
+            throws Exception {
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                desktopPane = new JDesktopPane();
+                internalFrame = new JInternalFrame();
+                frame = new JFrame();
+                internalFrame.setTitle(lookAndFeelString);
+                titleImageIcon = new ImageIcon() {
+                    @Override
+                    public int getIconWidth() {
+                        return 16;
+                    }
+
+                    @Override
+                    public int getIconHeight() {
+                        return 16;
+                    }
+
+                    @Override
+                    public void paintIcon(
+                            Component c, Graphics g, int x, int y) {
+                        g.setColor(java.awt.Color.black);
+                        g.fillRect(x, y, 16, 16);
+                    }
+                };
+                internalFrame.setFrameIcon(titleImageIcon);
+                internalFrame.setSize(500, 200);
+                internalFrame.setVisible(true);
+                desktopPane.add(internalFrame);
+
+                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+                frame.getContentPane().setLayout(new BorderLayout());
+                frame.getContentPane().add(desktopPane, "Center");
+                frame.setSize(500, 500);
+                frame.setLocationRelativeTo(null);
+                frame.setVisible(true);
+                frame.toFront();
+            }
+        });
+    }
+
+    private static void createIconUI(final String lookAndFeelString)
+            throws Exception {
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                desktopPane = new JDesktopPane();
+                internalFrame = new JInternalFrame();
+                frame = new JFrame();
+                internalFrame.setTitle(lookAndFeelString);
+                titleIcon = new Icon() {
+                    @Override
+                    public int getIconWidth() {
+                        return 16;
+                    }
+
+                    @Override
+                    public int getIconHeight() {
+                        return 16;
+                    }
+
+                    @Override
+                    public void paintIcon(
+                            Component c, Graphics g, int x, int y) {
+                        g.setColor(java.awt.Color.black);
+                        g.fillRect(x, y, 16, 16);
+                    }
+                };
+                internalFrame.setFrameIcon(titleIcon);
+                internalFrame.setSize(500, 200);
+                internalFrame.setVisible(true);
+                desktopPane.add(internalFrame);
+
+                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+                frame.getContentPane().setLayout(new BorderLayout());
+                frame.getContentPane().add(desktopPane, "Center");
+                frame.setSize(500, 500);
+                frame.setLocationRelativeTo(null);
+                frame.setVisible(true);
+                frame.toFront();
+            }
+        });
+    }
+
+    private static void getImageIconBufferedImage() throws Exception {
+        Point point = internalFrame.getLocationOnScreen();
+        Rectangle rect = internalFrame.getBounds();
+        Rectangle captureRect = new Rectangle(
+                point.x + internalFrame.getInsets().left,
+                point.y,
+                rect.width,
+                internalFrame.getInsets().top);
+        imageIconImage
+                = robot.createScreenCapture(captureRect);
+    }
+
+    private static void getIconBufferedImage() throws Exception {
+        Point point = internalFrame.getLocationOnScreen();
+        Rectangle rect = internalFrame.getBounds();
+        Rectangle captureRect = new Rectangle(
+                point.x + internalFrame.getInsets().left,
+                point.y,
+                rect.width,
+                internalFrame.getInsets().top);
+        iconImage
+                = robot.createScreenCapture(captureRect);
+    }
+
+    private static void testIfSame() throws Exception {
+        if (!bufferedImagesEqual(imageIconImage, iconImage)) {
+            System.err.println("ERROR: icon and imageIcon not same.");
+        } else {
+            System.out.println("SUCCESS: icon and imageIcon same.");
+        }
+    }
+
+    private static boolean bufferedImagesEqual(
+            BufferedImage bufferedImage1, BufferedImage bufferedImage2) {
+        boolean flag = true;
+
+        if (bufferedImage1.getWidth() == bufferedImage2.getWidth()
+                && bufferedImage1.getHeight() == bufferedImage2.getHeight()) {
+            final int colorTolerance = 25;
+            final int mismatchTolerance = (int) (0.1
+                    * bufferedImage1.getWidth() * bufferedImage1.getHeight());
+            int mismatchCounter = 0;
+            for (int x = 0; x < bufferedImage1.getWidth(); x++) {
+                for (int y = 0; y < bufferedImage1.getHeight(); y++) {
+
+                    int color1 = bufferedImage1.getRGB(x, y);
+                    int red1 = (color1 >> 16) & 0x000000FF;
+                    int green1 = (color1 >> 8) & 0x000000FF;
+                    int blue1 = (color1) & 0x000000FF;
+
+                    int color2 = bufferedImage2.getRGB(x, y);
+                    int red2 = (color2 >> 16) & 0x000000FF;
+                    int green2 = (color2 >> 8) & 0x000000FF;
+                    int blue2 = (color2) & 0x000000FF;
+                    if (red1 != red2 || green1 != green2 || blue1 != blue2) {
+                        ++mismatchCounter;
+                        if ((Math.abs(red1 - red2) > colorTolerance)
+                                || (Math.abs(green1 - green2) > colorTolerance)
+                                || (Math.abs(blue1 - blue2) > colorTolerance)) {
+
+                            flag = false;
+                        }
+                    }
+                }
+            }
+            if (mismatchCounter > mismatchTolerance) {
+                flag = false;
+            }
+        } else {
+            System.err.println("ERROR: size is different");
+            flag = false;
+        }
+        return flag;
+    }
+
+    private static void cleanUp() throws Exception {
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                frame.dispose();
+            }
+        });
+    }
+
+    private static boolean tryLookAndFeel(String lookAndFeelString)
+            throws Exception {
+        try {
+            UIManager.setLookAndFeel(
+                    lookAndFeelString);
+
+        } catch (UnsupportedLookAndFeelException
+                | ClassNotFoundException
+                | InstantiationException
+                | IllegalAccessException e) {
+            return false;
+        }
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JInternalFrame/NormalBoundsTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,301 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+ /*
+ @test
+ @bug 7126823
+ @summary Verify NormalBounds upon iconify/deiconify sequence
+ @run main NormalBoundsTest
+ */
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.awt.event.InputEvent;
+import java.beans.PropertyVetoException;
+import javax.swing.JDesktopPane;
+import javax.swing.JFrame;
+import javax.swing.JInternalFrame;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.UnsupportedLookAndFeelException;
+import javax.swing.WindowConstants;
+
+public class NormalBoundsTest {
+
+    private static JFrame mainFrame;
+    private static JInternalFrame internalFrame;
+    private static Rectangle bounds;
+
+    private static void createUI(String lookAndFeelString) {
+        internalFrame = new JInternalFrame("Internal", true, true, true, true);
+        internalFrame.setDefaultCloseOperation(
+                WindowConstants.DO_NOTHING_ON_CLOSE);
+        internalFrame.setSize(200, 200);
+
+        JDesktopPane desktopPane = new JDesktopPane();
+        desktopPane.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
+        desktopPane.add(internalFrame);
+
+        mainFrame = new JFrame(lookAndFeelString);
+        mainFrame.setSize(640, 480);
+        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        mainFrame.setContentPane(desktopPane);
+
+        mainFrame.setVisible(true);
+        internalFrame.setVisible(true);
+
+    }
+
+    private static int signWOZero(int i) {
+        return (i > 0) ? 1 : -1;
+    }
+
+    private static void mouseMove(Robot robot, Point startPt, Point endPt) {
+        int dx = endPt.x - startPt.x;
+        int dy = endPt.y - startPt.y;
+
+        int ax = Math.abs(dx) * 2;
+        int ay = Math.abs(dy) * 2;
+
+        int sx = signWOZero(dx);
+        int sy = signWOZero(dy);
+
+        int x = startPt.x;
+        int y = startPt.y;
+
+        int d = 0;
+
+        if (ax > ay) {
+            d = ay - ax / 2;
+            while (true) {
+                robot.mouseMove(x, y);
+                robot.delay(50);
+
+                if (x == endPt.x) {
+                    return;
+                }
+                if (d >= 0) {
+                    y = y + sy;
+                    d = d - ax;
+                }
+                x = x + sx;
+                d = d + ay;
+            }
+        } else {
+            d = ax - ay / 2;
+            while (true) {
+                robot.mouseMove(x, y);
+                robot.delay(50);
+
+                if (y == endPt.y) {
+                    return;
+                }
+                if (d >= 0) {
+                    x = x + sx;
+                    d = d - ay;
+                }
+                y = y + sy;
+                d = d + ax;
+            }
+        }
+    }
+
+    private static void drag(Robot r, Point startPt, Point endPt, int button) {
+        if (!(button == InputEvent.BUTTON1_MASK
+                || button == InputEvent.BUTTON2_MASK
+                || button == InputEvent.BUTTON3_MASK)) {
+            throw new IllegalArgumentException("invalid mouse button");
+        }
+
+        r.mouseMove(startPt.x, startPt.y);
+        r.mousePress(button);
+        try {
+            mouseMove(r, startPt, endPt);
+        } finally {
+            r.mouseRelease(button);
+        }
+    }
+
+    private static boolean tryLookAndFeel(String lookAndFeelString) {
+        try {
+            UIManager.setLookAndFeel(lookAndFeelString);
+            return true;
+        } catch (UnsupportedLookAndFeelException | ClassNotFoundException |
+                InstantiationException | IllegalAccessException e) {
+            return false;
+        }
+    }
+
+    public static void executeTest(Robot robot) throws Exception {
+
+        // Iconize JInternalFrame
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    internalFrame.setIcon(true);
+                } catch (PropertyVetoException ex) {
+                    mainFrame.dispose();
+                    throw new RuntimeException("Iconize InternalFrame Failed");
+                }
+            }
+        });
+        robot.waitForIdle();
+
+        // Deiconize JInternalFrame
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    internalFrame.setIcon(false);
+                } catch (PropertyVetoException ex) {
+                    mainFrame.dispose();
+                    throw new RuntimeException("Deiconize InternalFrame"
+                            + " Failed");
+                }
+            }
+        });
+        robot.waitForIdle();
+
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                Point loc = internalFrame.getLocationOnScreen();
+                // Drag Frame
+                drag(robot,
+                        new Point((int) loc.x + 80, (int) loc.y + 12),
+                        new Point((int) loc.x + 100, (int) loc.y + 40),
+                        InputEvent.BUTTON1_MASK);
+            }
+        });
+        robot.waitForIdle();
+
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                bounds = internalFrame.getBounds();
+                if (!internalFrame.getNormalBounds().equals(bounds)) {
+                    mainFrame.dispose();
+                    throw new RuntimeException("Invalid NormalBounds");
+                }
+            }
+        });
+        robot.waitForIdle();
+
+        // Regression Test Bug ID: 4424247
+        // Maximize JInternalFrame
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    internalFrame.setMaximum(true);
+                } catch (PropertyVetoException ex) {
+                    mainFrame.dispose();
+                    throw new RuntimeException("Maximize InternalFrame Failed");
+                }
+            }
+        });
+        robot.waitForIdle();
+
+        // Iconize JInternalFrame
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    internalFrame.setIcon(true);
+                } catch (PropertyVetoException ex) {
+                    mainFrame.dispose();
+                    throw new RuntimeException("Iconize InternalFrame Failed");
+                }
+            }
+        });
+        robot.waitForIdle();
+
+        // DeIconize JInternalFrame
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    internalFrame.setIcon(false);
+                } catch (PropertyVetoException ex) {
+                    mainFrame.dispose();
+                    throw new RuntimeException("DeIcoize InternalFrame "
+                            + " Failed");
+                }
+            }
+        });
+        robot.waitForIdle();
+
+        // Restore/Undo Maximize JInternalFrame
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    internalFrame.setMaximum(false);
+                } catch (PropertyVetoException ex) {
+                    mainFrame.dispose();
+                    throw new RuntimeException("Restore InternalFrame "
+                            + " Failed");
+                }
+            }
+        });
+        robot.waitForIdle();
+
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                if (!internalFrame.getBounds().equals(bounds)) {
+                    mainFrame.dispose();
+                    throw new RuntimeException("Regression Test Failed");
+                }
+            }
+        });
+        robot.waitForIdle();
+
+        mainFrame.dispose();
+    }
+
+    public static void main(String[] args) throws Exception {
+        Robot robot = new Robot();
+        UIManager.LookAndFeelInfo[] lookAndFeelArray
+                = UIManager.getInstalledLookAndFeels();
+        for (UIManager.LookAndFeelInfo lookAndFeelItem : lookAndFeelArray) {
+            String lookAndFeelString = lookAndFeelItem.getClassName();
+            if (tryLookAndFeel(lookAndFeelString)) {
+                // create UI
+                SwingUtilities.invokeAndWait(new Runnable() {
+                    @Override
+                    public void run() {
+                        createUI(lookAndFeelString);
+                    }
+                });
+
+                robot.waitForIdle();
+                executeTest(robot);
+            } else {
+                throw new RuntimeException("Setting Look and Feel Failed");
+            }
+        }
+
+    }
+}
--- a/jdk/test/javax/swing/JScrollPane/8033000/bug8033000.java	Mon Mar 14 12:35:52 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,162 +0,0 @@
-/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code 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 General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-import java.awt.BorderLayout;
-import java.awt.Point;
-import java.awt.Robot;
-import java.awt.event.KeyEvent;
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTextArea;
-import javax.swing.SwingUtilities;
-import javax.swing.UIManager;
-import jdk.testlibrary.OSInfo;
-
-/**
- * @test
- * @bug 8033000
- * @author Alexander Scherbatiy
- * @summary No Horizontal Mouse Wheel Support In BasicScrollPaneUI
- * @library ../../../../lib/testlibrary
- * @build jdk.testlibrary.OSInfo
- * @run main bug8033000
- */
-public class bug8033000 {
-
-    private static JScrollPane scrollPane;
-    private static JTextArea textArea;
-    private static Point point;
-    private static final int delta;
-
-    static {
-        delta = OSInfo.getOSType().equals(OSInfo.OSType.MACOSX) ? -30 : 30;
-    }
-
-    public static void main(String[] args) throws Exception {
-
-        Robot robot = new Robot();
-        robot.setAutoDelay(50);
-
-        SwingUtilities.invokeAndWait(bug8033000::createAndShowGUI);
-        robot.waitForIdle();
-
-        SwingUtilities.invokeAndWait(() -> {
-            Point locationOnScreen = scrollPane.getLocationOnScreen();
-            point = new Point(
-                    locationOnScreen.x + scrollPane.getWidth() / 2,
-                    locationOnScreen.y + scrollPane.getHeight() / 2);
-        });
-
-        robot.mouseMove(point.x, point.y);
-        robot.waitForIdle();
-
-        // vertical scroll bar is enabled
-        initScrollPane(true, false);
-        robot.waitForIdle();
-        robot.mouseWheel(delta);
-        robot.waitForIdle();
-        checkScrollPane(true);
-
-        // vertical scroll bar is enabled + shift
-        initScrollPane(true, false);
-        robot.waitForIdle();
-        robot.keyPress(KeyEvent.VK_SHIFT);
-        robot.mouseWheel(delta);
-        robot.keyRelease(KeyEvent.VK_SHIFT);
-        robot.waitForIdle();
-        checkScrollPane(true);
-
-        // horizontal scroll bar is enabled
-        initScrollPane(false, true);
-        robot.waitForIdle();
-        robot.mouseWheel(delta);
-        robot.waitForIdle();
-        checkScrollPane(false);
-
-        // horizontal scroll bar is enabled + shift
-        initScrollPane(false, true);
-        robot.waitForIdle();
-        robot.keyPress(KeyEvent.VK_SHIFT);
-        robot.mouseWheel(delta);
-        robot.keyRelease(KeyEvent.VK_SHIFT);
-        robot.waitForIdle();
-        checkScrollPane(false);
-
-        // both scroll bars are enabled
-        initScrollPane(true, true);
-        robot.waitForIdle();
-        robot.mouseWheel(delta);
-        robot.waitForIdle();
-        checkScrollPane(true);
-
-        // both scroll bars are enabled + shift
-        initScrollPane(true, true);
-        robot.waitForIdle();
-        robot.keyPress(KeyEvent.VK_SHIFT);
-        robot.mouseWheel(delta);
-        robot.keyRelease(KeyEvent.VK_SHIFT);
-        robot.waitForIdle();
-        checkScrollPane(false);
-    }
-
-    static void initScrollPane(boolean vVisible, boolean hVisible) throws Exception {
-        SwingUtilities.invokeAndWait(() -> {
-            scrollPane.getVerticalScrollBar().setValue(0);
-            scrollPane.getHorizontalScrollBar().setValue(0);
-
-            textArea.setRows(vVisible ? 100 : 1);
-            textArea.setColumns(hVisible ? 100 : 1);
-            scrollPane.getVerticalScrollBar().setVisible(vVisible);
-            scrollPane.getHorizontalScrollBar().setVisible(hVisible);
-        });
-    }
-
-    static void checkScrollPane(boolean verticalScrolled) throws Exception {
-        SwingUtilities.invokeAndWait(() -> {
-
-            if (verticalScrolled) {
-                if (scrollPane.getVerticalScrollBar().getValue() == 0
-                        || scrollPane.getHorizontalScrollBar().getValue() != 0) {
-                    throw new RuntimeException("Wrong vertical scrolling!");
-                }
-            } else {
-                if (scrollPane.getVerticalScrollBar().getValue() != 0
-                        || scrollPane.getHorizontalScrollBar().getValue() == 0) {
-                    throw new RuntimeException("Wrong horizontal scrolling!");
-                }
-            }
-        });
-    }
-
-    static void createAndShowGUI() {
-        JFrame frame = new JFrame();
-        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-        frame.setSize(300, 300);
-        textArea = new JTextArea("Hello World!");
-        scrollPane = new JScrollPane(textArea);
-        JPanel panel = new JPanel(new BorderLayout());
-        panel.add(scrollPane, BorderLayout.CENTER);
-        frame.getContentPane().add(panel);
-        frame.setVisible(true);
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JScrollPane/HorizontalMouseWheelOnShiftPressed/HorizontalMouseWheelOnShiftPressed.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,181 @@
+/*
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Point;
+import java.awt.Robot;
+import java.awt.event.KeyEvent;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
+
+import jdk.testlibrary.OSInfo;
+
+/**
+ * @test
+ * @bug 8033000 8147994
+ * @author Alexander Scherbatiy
+ * @summary No Horizontal Mouse Wheel Support In BasicScrollPaneUI
+ * @library ../../../../lib/testlibrary
+ * @build jdk.testlibrary.OSInfo
+ * @run main HorizontalMouseWheelOnShiftPressed
+ */
+public class HorizontalMouseWheelOnShiftPressed {
+
+    private static JScrollPane scrollPane;
+    private static JTextArea textArea;
+    private static Point point;
+    private static final int delta;
+    private static JFrame frame;
+
+    static {
+        delta = OSInfo.getOSType().equals(OSInfo.OSType.MACOSX) ? -30 : 30;
+    }
+
+    public static void main(String[] args) throws Exception {
+
+        Robot robot = new Robot();
+        robot.setAutoDelay(50);
+
+        SwingUtilities.invokeAndWait(
+                HorizontalMouseWheelOnShiftPressed::createAndShowGUI);
+        robot.waitForIdle();
+        try {
+            test(robot);
+        } finally {
+            frame.dispose();
+        }
+    }
+
+    private static void test(Robot robot) throws Exception {
+        SwingUtilities.invokeAndWait(() -> {
+            Point locationOnScreen = scrollPane.getLocationOnScreen();
+            point = new Point(
+                    locationOnScreen.x + scrollPane.getWidth() / 2,
+                    locationOnScreen.y + scrollPane.getHeight() / 2);
+        });
+
+        robot.mouseMove(point.x, point.y);
+        robot.waitForIdle();
+
+        // vertical scroll bar is enabled
+        initScrollPane(true, false);
+        robot.waitForIdle();
+        robot.mouseWheel(delta);
+        robot.waitForIdle();
+        checkScrollPane(true, false);
+
+        // vertical scroll bar is enabled + shift
+        initScrollPane(true, false);
+        robot.waitForIdle();
+        robot.keyPress(KeyEvent.VK_SHIFT);
+        robot.mouseWheel(delta);
+        robot.keyRelease(KeyEvent.VK_SHIFT);
+        robot.waitForIdle();
+        checkScrollPane(false, false);
+
+        // horizontal scroll bar is enabled
+        initScrollPane(false, true);
+        robot.waitForIdle();
+        robot.mouseWheel(delta);
+        robot.waitForIdle();
+        checkScrollPane(false, true);
+
+        // horizontal scroll bar is enabled + shift
+        initScrollPane(false, true);
+        robot.waitForIdle();
+        robot.keyPress(KeyEvent.VK_SHIFT);
+        robot.mouseWheel(delta);
+        robot.keyRelease(KeyEvent.VK_SHIFT);
+        robot.waitForIdle();
+        checkScrollPane(false, true);
+
+        // both scroll bars are enabled
+        initScrollPane(true, true);
+        robot.waitForIdle();
+        robot.mouseWheel(delta);
+        robot.waitForIdle();
+        checkScrollPane(true, false);
+
+        // both scroll bars are enabled + shift
+        initScrollPane(true, true);
+        robot.waitForIdle();
+        robot.keyPress(KeyEvent.VK_SHIFT);
+        robot.mouseWheel(delta);
+        robot.keyRelease(KeyEvent.VK_SHIFT);
+        robot.waitForIdle();
+        checkScrollPane(false, true);
+    }
+
+    static void initScrollPane(boolean vVisible, boolean hVisible) throws Exception {
+        SwingUtilities.invokeAndWait(() -> {
+            scrollPane.getVerticalScrollBar().setValue(0);
+            scrollPane.getHorizontalScrollBar().setValue(0);
+
+            textArea.setRows(vVisible ? 100 : 1);
+            textArea.setColumns(hVisible ? 100 : 1);
+            scrollPane.getVerticalScrollBar().setVisible(vVisible);
+            scrollPane.getHorizontalScrollBar().setVisible(hVisible);
+        });
+    }
+
+    static void checkScrollPane(boolean verticalScrolled,
+                                boolean horizontalScrolled) throws Exception {
+        SwingUtilities.invokeAndWait(() -> {
+
+            if (verticalScrolled) {
+                if (scrollPane.getVerticalScrollBar().getValue() == 0) {
+                    throw new RuntimeException("Wrong vertical scrolling!");
+                }
+            } else{
+                if (scrollPane.getVerticalScrollBar().getValue() != 0) {
+                    throw new RuntimeException("Wrong vertical scrolling!");
+                }
+            }
+            if (horizontalScrolled) {
+                if (scrollPane.getHorizontalScrollBar().getValue() == 0) {
+                    throw new RuntimeException("Wrong horizontal scrolling!");
+                }
+            } else {
+                if (scrollPane.getHorizontalScrollBar().getValue() != 0) {
+                    throw new RuntimeException("Wrong horizontal scrolling!");
+                }
+            }
+        });
+    }
+
+    static void createAndShowGUI() {
+        frame = new JFrame();
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        frame.setSize(300, 300);
+        frame.setLocationRelativeTo(null);
+        textArea = new JTextArea("Hello World!");
+        scrollPane = new JScrollPane(textArea);
+        JPanel panel = new JPanel(new BorderLayout());
+        panel.add(scrollPane, BorderLayout.CENTER);
+        frame.getContentPane().add(panel);
+        frame.setVisible(true);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JTableHeader/8020039/TableHeaderRendererExceptionTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.swing.UIManager;
+import javax.swing.table.JTableHeader;
+
+/**
+ * @test
+ * @summary Tests whether getTableCellRendererComponent() method handles
+ *          null table parameter
+ * @bug 8020039
+ * @run main TableHeaderRendererExceptionTest
+ */
+public class TableHeaderRendererExceptionTest {
+
+    public static void main(String[] args) throws Throwable {
+        //Execute test for all supported look and feels
+        UIManager.LookAndFeelInfo[] lookAndFeelArray
+                = UIManager.getInstalledLookAndFeels();
+
+        for (UIManager.LookAndFeelInfo lookAndFeelItem : lookAndFeelArray) {
+            String lookAndFeelString = lookAndFeelItem.getClassName();
+
+            UIManager.setLookAndFeel(lookAndFeelString);
+
+            // Test getTableCellRendererComponent method by passing null table
+            JTableHeader header = new JTableHeader();
+
+            header.getDefaultRenderer().getTableCellRendererComponent(null,
+                    " test ", true, true, -1, 0);
+        }
+    }
+}
--- a/jdk/test/javax/swing/plaf/gtk/crash/RenderBadPictureCrash.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/test/javax/swing/plaf/gtk/crash/RenderBadPictureCrash.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,16 +23,15 @@
 
 /*
  @test
- @bug 8056151
+ @bug 8056151 8131751
  @summary Switching to GTK L&F on-the-fly leads to X Window System error RenderBadPicture
  @run main/othervm -Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel -Dsun.java2d.xrender=T RenderBadPictureCrash
  */
-
 import java.awt.Color;
+import java.awt.GraphicsDevice;
 import java.lang.reflect.InvocationTargetException;
 import javax.swing.JFrame;
 import javax.swing.SwingUtilities;
-
 import javax.swing.UIManager;
 
 public class RenderBadPictureCrash {
@@ -41,7 +40,10 @@
         SwingUtilities.invokeAndWait(() -> {
             JFrame f = new JFrame();
             f.setUndecorated(true);
-            f.setBackground(new Color(0, 0, 0, 0));
+            GraphicsDevice gd = f.getGraphicsConfiguration().getDevice();
+            if (gd.isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSLUCENT)) {
+                f.setBackground(new Color(0, 0, 0, 0));
+            }
             f.setSize(200, 300);
             f.setVisible(true);
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sample/TEST.properties	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,1 @@
+external.lib.roots = ../../
--- a/jdk/test/sample/chatserver/ChatTest.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/test/sample/chatserver/ChatTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -25,9 +25,9 @@
 /* @test
  * @summary Test chat server chatserver test
  *
- * @library ../../../src/sample/share/nio/chatserver
+ * @library /src/sample/share/nio/chatserver
  * @build ChatTest ChatServer Client ClientReader DataReader MessageReader NameReader
- * @run main ChatTest
+ * @run testng ChatTest
  */
 
 import java.io.*;
@@ -38,10 +38,13 @@
 import java.util.List;
 import java.util.concurrent.CyclicBarrier;
 
+import org.testng.annotations.Test;
+
 public class ChatTest {
     public static int listeningPort = 0;
 
-    public static void main(String[] args) throws Throwable {
+    @Test
+    public static void doTest() throws Throwable {
         testStartStop();
         testPortOpen();
         testAsksForName();
--- a/jdk/test/sample/mergesort/MergeSortTest.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/test/sample/mergesort/MergeSortTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -25,14 +25,16 @@
 /* @test
  * @summary Test MergeSort
  *
- * @library ../../../src/sample/share/forkjoin/mergesort
+ * @library /src/sample/share/forkjoin/mergesort
  * @build MergeSortTest MergeDemo MergeSort
- * @run main MergeSortTest
+ * @run testng MergeSortTest
  */
 
 import java.util.Arrays;
 import java.util.Random;
 
+import org.testng.annotations.Test;
+
 public class MergeSortTest {
     private Random random;
     private MergeSort target;
@@ -42,7 +44,8 @@
         this.target = target;
     }
 
-    public static void main(String[] args) {
+    @Test
+    public static void doTest() {
         MergeSortTest test = new MergeSortTest(new Random(), new MergeSort(Runtime.getRuntime().availableProcessors() * 4));
         test.run();
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/java2d/marlin/CrashNaNTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.geom.Path2D;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import static java.lang.Double.NaN;
+import java.util.Locale;
+import java.util.logging.Handler;
+import java.util.logging.LogRecord;
+import java.util.logging.Logger;
+import javax.imageio.ImageIO;
+
+/**
+ * @test
+ * @bug 8149338
+ * @summary Verifies that Marlin supports NaN coordinates and no JVM crash happens !
+ * @run main CrashNaNTest
+ */
+public class CrashNaNTest {
+
+    static final boolean SAVE_IMAGE = false;
+
+    public static void main(String argv[]) {
+        Locale.setDefault(Locale.US);
+
+        // initialize j.u.l Looger:
+        final Logger log = Logger.getLogger("sun.java2d.marlin");
+        log.addHandler(new Handler() {
+            @Override
+            public void publish(LogRecord record) {
+                Throwable th = record.getThrown();
+                // detect any Throwable:
+                if (th != null) {
+                    System.out.println("Test failed:\n" + record.getMessage());
+                    th.printStackTrace(System.out);
+
+                    throw new RuntimeException("Test failed: ", th);
+                }
+            }
+
+            @Override
+            public void flush() {
+            }
+
+            @Override
+            public void close() throws SecurityException {
+            }
+        });
+
+        // enable Marlin logging & internal checks:
+        System.setProperty("sun.java2d.renderer.log", "true");
+        System.setProperty("sun.java2d.renderer.useLogger", "true");
+        System.setProperty("sun.java2d.renderer.doChecks", "true");
+
+        final int width = 400;
+        final int height = 400;
+
+        final BufferedImage image = new BufferedImage(width, height,
+                BufferedImage.TYPE_INT_ARGB);
+
+        final Graphics2D g2d = (Graphics2D) image.getGraphics();
+        try {
+            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+                    RenderingHints.VALUE_ANTIALIAS_ON);
+
+            g2d.setBackground(Color.WHITE);
+            g2d.clearRect(0, 0, width, height);
+
+            final Path2D.Double path = new Path2D.Double();
+            path.moveTo(30, 30);
+            path.lineTo(100, 100);
+
+            for (int i = 0; i < 20000; i++) {
+                path.lineTo(110 + 0.01 * i, 110);
+                path.lineTo(111 + 0.01 * i, 100);
+            }
+
+            path.lineTo(NaN, 200);
+            path.lineTo(200, 200);
+            path.lineTo(200, NaN);
+            path.lineTo(300, 300);
+            path.lineTo(NaN, NaN);
+            path.lineTo(100, 100);
+            path.closePath();
+
+            final Path2D.Double path2 = new Path2D.Double();
+            path2.moveTo(0,0);
+            path2.lineTo(width,height);
+            path2.lineTo(10, 10);
+            path2.closePath();
+
+            for (int i = 0; i < 1; i++) {
+                final long start = System.nanoTime();
+                g2d.setColor(Color.BLUE);
+                g2d.fill(path);
+
+                g2d.fill(path2);
+
+                final long time = System.nanoTime() - start;
+                System.out.println("paint: duration= " + (1e-6 * time) + " ms.");
+            }
+
+            if (SAVE_IMAGE) {
+                try {
+                    final File file = new File("CrashNaNTest.png");
+                    System.out.println("Writing file: "
+                            + file.getAbsolutePath());
+                    ImageIO.write(image, "PNG", file);
+                } catch (IOException ex) {
+                    System.out.println("Writing file failure:");
+                    ex.printStackTrace();
+                }
+            }
+        } finally {
+            g2d.dispose();
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/java2d/marlin/CrashPaintTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,205 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Paint;
+import java.awt.PaintContext;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.TexturePaint;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Ellipse2D;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.awt.image.ColorModel;
+import java.awt.image.Raster;
+import java.io.File;
+import java.io.IOException;
+import java.util.Locale;
+import java.util.logging.Handler;
+import java.util.logging.LogRecord;
+import java.util.logging.Logger;
+import javax.imageio.ImageIO;
+
+/**
+ * @test
+ * @bug 8148886
+ * @summary Verifies that Marlin supports reentrant operations (ThreadLocal)
+ * like in custom Paint or custom Composite
+ * @run main CrashPaintTest
+ */
+public class CrashPaintTest {
+
+    static final boolean SAVE_IMAGE = false;
+
+    public static void main(String argv[]) {
+        Locale.setDefault(Locale.US);
+
+        // initialize j.u.l Looger:
+        final Logger log = Logger.getLogger("sun.java2d.marlin");
+        log.addHandler(new Handler() {
+            @Override
+            public void publish(LogRecord record) {
+                Throwable th = record.getThrown();
+                // detect any Throwable:
+                if (th != null) {
+                    System.out.println("Test failed:\n" + record.getMessage());
+                    th.printStackTrace(System.out);
+
+                    throw new RuntimeException("Test failed: ", th);
+                }
+            }
+
+            @Override
+            public void flush() {
+            }
+
+            @Override
+            public void close() throws SecurityException {
+            }
+        });
+
+        // enable Marlin logging & internal checks:
+        System.setProperty("sun.java2d.renderer.log", "true");
+        System.setProperty("sun.java2d.renderer.useLogger", "true");
+        System.setProperty("sun.java2d.renderer.doChecks", "true");
+
+        // Force using thread-local storage:
+        System.setProperty("sun.java2d.renderer.useThreadLocal", "true");
+        // Force smaller pixelsize to force using array caches:
+        System.setProperty("sun.java2d.renderer.pixelsize", "256");
+
+        final int width = 300;
+        final int height = 300;
+
+        final BufferedImage image = new BufferedImage(width, height,
+                BufferedImage.TYPE_INT_ARGB);
+
+        final Graphics2D g2d = (Graphics2D) image.getGraphics();
+        try {
+            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+                    RenderingHints.VALUE_ANTIALIAS_ON);
+
+            g2d.setBackground(Color.WHITE);
+            g2d.clearRect(0, 0, width, height);
+
+            final Ellipse2D.Double ellipse
+                = new Ellipse2D.Double(0, 0, width, height);
+
+            final Paint paint = new CustomPaint(100);
+
+            for (int i = 0; i < 20; i++) {
+                final long start = System.nanoTime();
+                g2d.setPaint(paint);
+                g2d.fill(ellipse);
+
+                g2d.setColor(Color.GREEN);
+                g2d.draw(ellipse);
+
+                final long time = System.nanoTime() - start;
+                System.out.println("paint: duration= " + (1e-6 * time) + " ms.");
+            }
+
+            if (SAVE_IMAGE) {
+                try {
+                    final File file = new File("CrashPaintTest.png");
+                    System.out.println("Writing file: "
+                            + file.getAbsolutePath());
+                    ImageIO.write(image, "PNG", file);
+                } catch (IOException ex) {
+                    System.out.println("Writing file failure:");
+                    ex.printStackTrace();
+                }
+            }
+
+            // Check image on few pixels:
+            final Raster raster = image.getData();
+
+            // 170, 175 = blue
+            checkPixel(raster, 170, 175, Color.BLUE.getRGB());
+            // 50, 50 = blue
+            checkPixel(raster, 50, 50, Color.BLUE.getRGB());
+
+            // 190, 110 = pink
+            checkPixel(raster, 190, 110, Color.PINK.getRGB());
+            // 280, 210 = pink
+            checkPixel(raster, 280, 210, Color.PINK.getRGB());
+
+        } finally {
+            g2d.dispose();
+        }
+    }
+
+    private static void checkPixel(final Raster raster,
+                                   final int x, final int y,
+                                   final int expected) {
+
+        final int[] rgb = (int[]) raster.getDataElements(x, y, null);
+
+        if (rgb[0] != expected) {
+            throw new IllegalStateException("bad pixel at (" + x + ", " + y
+                + ") = " + rgb[0] + " expected: " + expected);
+        }
+    }
+
+    private static class CustomPaint extends TexturePaint {
+        private int size;
+
+        CustomPaint(final int size) {
+            super(new BufferedImage(size, size,
+                    BufferedImage.TYPE_INT_ARGB),
+                    new Rectangle2D.Double(0, 0, size, size)
+            );
+            this.size = size;
+        }
+
+        @Override
+        public PaintContext createContext(ColorModel cm,
+                                          Rectangle deviceBounds,
+                                          Rectangle2D userBounds,
+                                          AffineTransform at,
+                                          RenderingHints hints) {
+
+            // Fill bufferedImage using
+            final Graphics2D g2d = (Graphics2D) getImage().getGraphics();
+            try {
+                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+                        RenderingHints.VALUE_ANTIALIAS_ON);
+                g2d.setBackground(Color.PINK);
+                g2d.clearRect(0, 0, size, size);
+
+                g2d.setColor(Color.BLUE);
+                g2d.drawRect(0, 0, size, size);
+
+                g2d.fillOval(size / 10, size / 10,
+                             size * 8 / 10, size * 8 / 10);
+
+            } finally {
+                g2d.dispose();
+            }
+
+            return super.createContext(cm, deviceBounds, userBounds, at, hints);
+        }
+    }
+}
--- a/jdk/test/sun/java2d/marlin/TextClipErrorTest.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/test/sun/java2d/marlin/TextClipErrorTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -69,24 +69,12 @@
             @Override
             public void publish(LogRecord record) {
                 Throwable th = record.getThrown();
-                // detect potential Throwable thrown by XxxArrayCache.check():
-                if (th != null && th.getClass() == Throwable.class) {
-                    StackTraceElement[] stackElements = th.getStackTrace();
-
-                    for (int i = 0; i < stackElements.length; i++) {
-                        StackTraceElement e = stackElements[i];
+                // detect any Throwable:
+                if (th != null) {
+                    System.out.println("Test failed:\n" + record.getMessage());
+                    th.printStackTrace(System.out);
 
-                        if (e.getClassName().startsWith("sun.java2d.marlin")
-                            && e.getClassName().contains("ArrayCache")
-                            && "check".equals(e.getMethodName()))
-                        {
-                            System.out.println("Test failed:\n"
-                                + record.getMessage());
-                            th.printStackTrace(System.out);
-
-                            throw new RuntimeException("Test failed: ", th);
-                        }
-                    }
+                    throw new RuntimeException("Test failed: ", th);
                 }
             }
 
--- a/jdk/test/sun/security/mscapi/SignatureOffsets.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/jdk/test/sun/security/mscapi/SignatureOffsets.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,7 +28,7 @@
 /*
  * @test
  * @bug 8050374
- * @key randomness
+ * @key randomness intermittent
  * @summary This test validates signature verification
  *          Signature.verify(byte[], int, int). The test uses RandomFactory to
  *          get random set of clear text data to sign. After the signature
--- a/langtools/.hgtags	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/.hgtags	Mon Mar 14 17:51:25 2016 +0100
@@ -351,3 +351,4 @@
 dd05d3761a341143ef4a6b1a245e0960cc125b76 jdk-9+106
 7a0c343551497bd0e38ad69a77cc57d9f396615a jdk-9+107
 fd18a155ad22f62e06a9b74850ab8609d415c752 jdk-9+108
+f5991c73ed73b9a355a090b65c8d7fb9a1901f89 jdk-9+109
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
 package com.sun.tools.javac.code;
 
 import java.io.IOException;
-import java.io.File;
+import java.nio.file.Path;
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.Map;
@@ -45,7 +45,6 @@
 import com.sun.tools.javac.code.Symbol.PackageSymbol;
 import com.sun.tools.javac.code.Symbol.TypeSymbol;
 import com.sun.tools.javac.comp.Annotate;
-import com.sun.tools.javac.comp.Enter;
 import com.sun.tools.javac.file.JRTIndex;
 import com.sun.tools.javac.file.JavacFileManager;
 import com.sun.tools.javac.jvm.ClassReader;
@@ -535,25 +534,25 @@
             if (fileManager instanceof StandardJavaFileManager) {
                 StandardJavaFileManager fm = (StandardJavaFileManager)fileManager;
                 if (haveSourcePath && wantSourceFiles) {
-                    List<File> path = List.nil();
-                    for (File file : fm.getLocation(SOURCE_PATH)) {
-                        path = path.prepend(file);
+                    List<Path> path = List.nil();
+                    for (Path sourcePath : fm.getLocationAsPaths(SOURCE_PATH)) {
+                        path = path.prepend(sourcePath);
                     }
                     log.printVerbose("sourcepath", path.reverse().toString());
                 } else if (wantSourceFiles) {
-                    List<File> path = List.nil();
-                    for (File file : fm.getLocation(CLASS_PATH)) {
-                        path = path.prepend(file);
+                    List<Path> path = List.nil();
+                    for (Path classPath : fm.getLocationAsPaths(CLASS_PATH)) {
+                        path = path.prepend(classPath);
                     }
                     log.printVerbose("sourcepath", path.reverse().toString());
                 }
                 if (wantClassFiles) {
-                    List<File> path = List.nil();
-                    for (File file : fm.getLocation(PLATFORM_CLASS_PATH)) {
-                        path = path.prepend(file);
+                    List<Path> path = List.nil();
+                    for (Path platformPath : fm.getLocationAsPaths(PLATFORM_CLASS_PATH)) {
+                        path = path.prepend(platformPath);
                     }
-                    for (File file : fm.getLocation(CLASS_PATH)) {
-                        path = path.prepend(file);
+                    for (Path classPath : fm.getLocationAsPaths(CLASS_PATH)) {
+                        path = path.prepend(classPath);
                     }
                     log.printVerbose("classpath",  path.reverse().toString());
                 }
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/RelativePath.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/RelativePath.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,7 +25,6 @@
 
 package com.sun.tools.javac.file;
 
-import java.io.File;
 import java.nio.file.FileSystem;
 import java.nio.file.FileSystems;
 import java.nio.file.InvalidPathException;
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/StringConcat.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/StringConcat.java	Mon Mar 14 17:51:25 2016 +0100
@@ -33,8 +33,7 @@
 import com.sun.tools.javac.util.*;
 
 import static com.sun.tools.javac.code.Kinds.Kind.MTH;
-import static com.sun.tools.javac.code.TypeTag.DOUBLE;
-import static com.sun.tools.javac.code.TypeTag.LONG;
+import static com.sun.tools.javac.code.TypeTag.*;
 import static com.sun.tools.javac.jvm.ByteCodes.*;
 import static com.sun.tools.javac.tree.JCTree.Tag.PLUS;
 import com.sun.tools.javac.jvm.Items.*;
@@ -143,6 +142,25 @@
     }
 
     /**
+     * If the type is not accessible from current context, try to figure out the
+     * sharpest accessible supertype.
+     *
+     * @param originalType type to sharpen
+     * @return sharped type
+     */
+    Type sharpestAccessible(Type originalType) {
+        if (originalType.hasTag(ARRAY)) {
+            return types.makeArrayType(sharpestAccessible(types.elemtype(originalType)));
+        }
+
+        Type type = originalType;
+        while (!rs.isAccessible(gen.getAttrEnv(), type.asElement())) {
+            type = types.supertype(type);
+        }
+        return type;
+    }
+
+    /**
      * "Legacy" bytecode flavor: emit the StringBuilder.append chains for string
      * concatenation.
      */
@@ -314,7 +332,7 @@
                     if (arg.type == syms.botType) {
                         dynamicArgs.add(types.boxedClass(syms.voidType).type);
                     } else {
-                        dynamicArgs.add(arg.type);
+                        dynamicArgs.add(sharpestAccessible(arg.type));
                     }
                     gen.genExpr(arg, arg.type).load();
                 }
@@ -415,7 +433,7 @@
                     } else {
                         // Ordinary arguments come through the dynamic arguments.
                         recipe.append(TAG_ARG);
-                        dynamicArgs.add(arg.type);
+                        dynamicArgs.add(sharpestAccessible(arg.type));
                         gen.genExpr(arg, arg.type).load();
                     }
                 }
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java	Mon Mar 14 17:51:25 2016 +0100
@@ -31,6 +31,7 @@
 import java.io.StringWriter;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.nio.file.Path;
 import java.util.*;
 import java.util.regex.*;
 import java.util.stream.Collectors;
@@ -42,6 +43,7 @@
 import javax.tools.JavaFileManager;
 import javax.tools.JavaFileObject;
 import javax.tools.StandardJavaFileManager;
+
 import static javax.tools.StandardLocation.*;
 
 import com.sun.source.util.TaskEvent;
@@ -79,6 +81,7 @@
 import com.sun.tools.javac.util.Names;
 import com.sun.tools.javac.util.Options;
 import com.sun.tools.javac.util.ServiceLoader;
+
 import static com.sun.tools.javac.code.Lint.LintCategory.PROCESSING;
 import static com.sun.tools.javac.code.Kinds.Kind.*;
 import static com.sun.tools.javac.main.Option.*;
@@ -317,9 +320,9 @@
 
         if (fileManager instanceof JavacFileManager) {
             StandardJavaFileManager standardFileManager = (JavacFileManager) fileManager;
-            Iterable<? extends File> workingPath = fileManager.hasLocation(ANNOTATION_PROCESSOR_PATH)
-                ? standardFileManager.getLocation(ANNOTATION_PROCESSOR_PATH)
-                : standardFileManager.getLocation(CLASS_PATH);
+            Iterable<? extends Path> workingPath = fileManager.hasLocation(ANNOTATION_PROCESSOR_PATH)
+                ? standardFileManager.getLocationAsPaths(ANNOTATION_PROCESSOR_PATH)
+                : standardFileManager.getLocationAsPaths(CLASS_PATH);
 
             if (needClassLoader(options.get(PROCESSOR), workingPath) )
                 handleException(key, e);
@@ -1298,14 +1301,14 @@
      * Called retroactively to determine if a class loader was required,
      * after we have failed to create one.
      */
-    private boolean needClassLoader(String procNames, Iterable<? extends File> workingpath) {
+    private boolean needClassLoader(String procNames, Iterable<? extends Path> workingpath) {
         if (procNames != null)
             return true;
 
         URL[] urls = new URL[1];
-        for(File pathElement : workingpath) {
+        for(Path pathElement : workingpath) {
             try {
-                urls[0] = pathElement.toURI().toURL();
+                urls[0] = pathElement.toUri().toURL();
                 if (ServiceProxy.hasService(Processor.class, urls))
                     return true;
             } catch (MalformedURLException ex) {
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/ct.properties	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/ct.properties	Mon Mar 14 17:51:25 2016 +0100
@@ -1,6 +1,5 @@
 apple.laf.*: hidden
 apple.security.*: hidden
-com.apple.concurrent.*: hidden
 com.apple.eawt.*: hidden
 com.apple.eawt.event.*: hidden
 com.apple.eio.*: hidden
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractExecutableMemberWriter.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractExecutableMemberWriter.java	Mon Mar 14 17:51:25 2016 +0100
@@ -104,11 +104,11 @@
         sb.append(utils.getFullyQualifiedName(member));
         if (!utils.isConstructor(member)) {
             sb.append(".");
-            sb.append(member.getSimpleName().toString());
+            sb.append(member.getSimpleName());
         }
         sb.append(utils.flatSignature((ExecutableElement) member));
 
-        return writer.getDocLink(MEMBER, member, sb.toString());
+        return writer.getDocLink(MEMBER, member, sb);
     }
 
     /**
@@ -204,7 +204,7 @@
         htmltree.addContent("(");
         String sep = "";
         List<? extends VariableElement> parameters = member.getParameters();
-        String indent = makeSpace(indentSize + 1);
+        CharSequence indent = makeSpace(indentSize + 1);
         TypeMirror rcvrType = member.getReceiverType();
         if (includeAnnotations && rcvrType != null && utils.isAnnotated(rcvrType)) {
             List<? extends AnnotationMirror> annotationMirrors = rcvrType.getAnnotationMirrors();
@@ -260,7 +260,7 @@
     protected void addExceptions(ExecutableElement member, Content htmltree, int indentSize) {
         List<? extends TypeMirror> exceptions = member.getThrownTypes();
         if (!exceptions.isEmpty()) {
-            String indent = makeSpace(indentSize + 1 - 7);
+            CharSequence indent = makeSpace(indentSize + 1 - 7);
             htmltree.addContent(DocletConstants.NL);
             htmltree.addContent(indent);
             htmltree.addContent("throws ");
@@ -336,7 +336,7 @@
 
                 @Override @DefinedBy(Api.LANGUAGE_MODEL)
                 protected Boolean defaultAction(TypeMirror e, Void p) {
-                    buf.append(e.toString());
+                    buf.append(e);
                     return foundTypeVariable;
                 }
             };
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractMemberWriter.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractMemberWriter.java	Mon Mar 14 17:51:25 2016 +0100
@@ -223,26 +223,6 @@
         htmltree.addContent(name);
     }
 
-    protected String typeString(Element member) {
-        return new SimpleElementVisitor9<String, Void>() {
-
-            @Override @DefinedBy(Api.LANGUAGE_MODEL)
-            public String visitExecutable(ExecutableElement e, Void p) {
-               return utils.isMethod(e) ? e.getReturnType().toString() : "";
-            }
-
-            @Override @DefinedBy(Api.LANGUAGE_MODEL)
-            public String visitVariable(VariableElement e, Void p) {
-                return e.toString();
-            }
-
-            @Override @DefinedBy(Api.LANGUAGE_MODEL)
-            protected String defaultAction(Element e, Void p) {
-                return "";
-            }
-        }.visit(member);
-    }
-
     /**
      * Add the modifier for the member. The modifiers are ordered as specified
      * by <em>The Java Language Specification</em>.
@@ -282,7 +262,7 @@
         }
     }
 
-    protected String makeSpace(int len) {
+    protected CharSequence makeSpace(int len) {
         if (len <= 0) {
             return "";
         }
@@ -290,7 +270,7 @@
         for (int i = 0; i < len; i++) {
             sb.append(' ');
         }
-        return sb.toString();
+        return sb;
     }
 
     /**
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java	Mon Mar 14 17:51:25 2016 +0100
@@ -199,8 +199,7 @@
             Content classPackageLabel = HtmlTree.SPAN(HtmlStyle.packageLabelInClass, packageLabel);
             Content pkgNameDiv = HtmlTree.DIV(HtmlStyle.subTitle, classPackageLabel);
             pkgNameDiv.addContent(getSpace());
-            Content pkgNameContent = getPackageLink(pkg,
-                    new StringContent(pkg.getQualifiedName().toString()));
+            Content pkgNameContent = getPackageLink(pkg, new StringContent(pkg.getQualifiedName()));
             pkgNameDiv.addContent(pkgNameContent);
             div.addContent(pkgNameDiv);
         }
@@ -395,10 +394,10 @@
                     new LinkInfoImpl(configuration, LinkInfoImpl.Kind.TREE,
                     typeElement));
             if (configuration.shouldExcludeQualifier(utils.containingPackage(typeElement).toString())) {
-                li.addContent(utils.asTypeElement(type).getSimpleName().toString());
+                li.addContent(utils.asTypeElement(type).getSimpleName());
                 li.addContent(typeParameters);
             } else {
-                li.addContent(utils.asTypeElement(type).getQualifiedName().toString());
+                li.addContent(utils.asTypeElement(type).getQualifiedName());
                 li.addContent(typeParameters);
             }
         } else {
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ConstantsSummaryWriterImpl.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ConstantsSummaryWriterImpl.java	Mon Mar 14 17:51:25 2016 +0100
@@ -244,7 +244,7 @@
         PackageElement enclosingPackage  = utils.containingPackage(typeElement);
         if (!enclosingPackage.isUnnamed()) {
             Content cb = new ContentBuilder();
-            cb.addContent(enclosingPackage.getQualifiedName().toString());
+            cb.addContent(enclosingPackage.getQualifiedName());
             cb.addContent(".");
             cb.addContent(classlink);
             return getClassName(cb);
@@ -332,7 +332,7 @@
      */
     private Content getNameColumn(VariableElement member) {
         Content nameContent = getDocLink(LinkInfoImpl.Kind.CONSTANT_SUMMARY,
-                member, member.getSimpleName().toString(), false);
+                member, member.getSimpleName(), false);
         Content code = HtmlTree.CODE(nameContent);
         return HtmlTree.TD(code);
     }
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java	Mon Mar 14 17:51:25 2016 +0100
@@ -166,6 +166,8 @@
 
     HtmlTree fixedNavDiv = new HtmlTree(HtmlTag.DIV);
 
+    final static Pattern IMPROPER_HTML_CHARS = Pattern.compile(".*[&<>].*");
+
     /**
      * Constructor to construct the HtmlStandardWriter object.
      *
@@ -945,7 +947,7 @@
     public Content getPackageName(PackageElement packageElement) {
         return packageElement == null || packageElement.isUnnamed()
                 ? defaultPackageLabel
-                : getPackageLabel(packageElement.getQualifiedName().toString());
+                : getPackageLabel(packageElement.getQualifiedName());
     }
 
     /**
@@ -954,7 +956,7 @@
      * @param packageName the package name
      * @return the package name content
      */
-    public Content getPackageLabel(String packageName) {
+    public Content getPackageLabel(CharSequence packageName) {
         return new StringContent(packageName);
     }
 
@@ -1038,7 +1040,7 @@
      * @param label the label for the link.
      * @return a content tree for the package link.
      */
-    public Content getPackageLink(PackageElement packageElement, String label) {
+    public Content getPackageLink(PackageElement packageElement, CharSequence label) {
         return getPackageLink(packageElement, new StringContent(label));
     }
 
@@ -1081,7 +1083,7 @@
 
     public Content interfaceName(TypeElement typeElement, boolean qual) {
         Content name = new StringContent((qual)
-                ? typeElement.getQualifiedName().toString()
+                ? typeElement.getQualifiedName()
                 : utils.getSimpleName(typeElement));
         return (utils.isInterface(typeElement)) ?  HtmlTree.SPAN(HtmlStyle.interfaceName, name) : name;
     }
@@ -1279,7 +1281,7 @@
      * @param label the label for the link
      * @return a content tree for the element link
      */
-    public Content getDocLink(LinkInfoImpl.Kind context, Element element, String label) {
+    public Content getDocLink(LinkInfoImpl.Kind context, Element element, CharSequence label) {
         return getDocLink(context, utils.getEnclosingTypeElement(element), element,
                 new StringContent(label));
     }
@@ -1293,7 +1295,7 @@
      * @param strong true if the link should be strong.
      * @return the link for the given member.
      */
-    public Content getDocLink(LinkInfoImpl.Kind context, Element element, String label,
+    public Content getDocLink(LinkInfoImpl.Kind context, Element element, CharSequence label,
             boolean strong) {
         return getDocLink(context, utils.getEnclosingTypeElement(element), element, label, strong);
     }
@@ -1311,7 +1313,7 @@
      * @return the link for the given member.
      */
     public Content getDocLink(LinkInfoImpl.Kind context, TypeElement typeElement, Element element,
-            String label, boolean strong) {
+            CharSequence label, boolean strong) {
         return getDocLink(context, typeElement, element, label, strong, false);
     }
 
@@ -1334,13 +1336,14 @@
      * @return the link for the given member.
      */
     public Content getDocLink(LinkInfoImpl.Kind context, TypeElement typeElement, Element element,
-            String label, boolean strong, boolean isProperty) {
+            CharSequence label, boolean strong, boolean isProperty) {
         return getDocLink(context, typeElement, element, new StringContent(check(label)), strong, isProperty);
     }
 
-    String check(String s) {
-        if (s.matches(".*[&<>].*")) {
-            throw new IllegalArgumentException(s);
+    CharSequence check(CharSequence s) {
+        Matcher m = IMPROPER_HTML_CHARS.matcher(s);
+        if (m.matches()) {
+            throw new IllegalArgumentException(s.toString());
         }
         return s;
     }
@@ -1426,7 +1429,7 @@
 
         CommentHelper ch = utils.getCommentHelper(element);
         String tagName = ch.getTagName(see);
-        String seetext = replaceDocRootDir(utils.normalizeNewlines(ch.getText(see)));
+        String seetext = replaceDocRootDir(utils.normalizeNewlines(ch.getText(see)).toString());
         // Check if @see is an href or "string"
         if (seetext.startsWith("<") || seetext.startsWith("\"")) {
             return new RawHtml(seetext);
@@ -1452,7 +1455,7 @@
                 //@see is referencing an included package
                 if (label.isEmpty())
                     label = plainOrCode(isLinkPlain,
-                            new StringContent(refPackage.getQualifiedName().toString()));
+                            new StringContent(refPackage.getQualifiedName()));
                 return getPackageLink(refPackage, label);
             } else {
                 // @see is not referencing an included class or package.  Check for cross links.
@@ -1695,7 +1698,7 @@
 
         final Content result = new ContentBuilder() {
             @Override
-            public void addContent(String text) {
+            public void addContent(CharSequence text) {
                 super.addContent(utils.normalizeNewlines(text));
             }
         };
@@ -1741,7 +1744,7 @@
                 public Boolean visitAttribute(AttributeTree node, Content c) {
                     StringBuilder sb = new StringBuilder(SPACER).append(node.getName());
                     if (node.getValueKind() == ValueKind.EMPTY) {
-                        result.addContent(sb.toString());
+                        result.addContent(sb);
                         return false;
                     }
                     sb.append("=");
@@ -1758,7 +1761,7 @@
                             break;
                     }
                     sb.append(quote);
-                    result.addContent(sb.toString());
+                    result.addContent(sb);
                     Content docRootContent = new ContentBuilder();
 
                     for (DocTree dt : node.getValue()) {
@@ -1767,16 +1770,15 @@
                             if (text.startsWith("/..") && !configuration.docrootparent.isEmpty()) {
                                 result.addContent(configuration.docrootparent);
                                 docRootContent = new ContentBuilder();
-                                text = textCleanup(text.substring(3), isLast(node));
+                                result.addContent(textCleanup(text.substring(3), isLast(node)));
                             } else {
                                 if (!docRootContent.isEmpty()) {
                                     docRootContent = copyDocRootContent(docRootContent);
                                 } else {
                                     text = redirectRelativeLinks(element, (TextTree) dt);
                                 }
-                                text = textCleanup(text, isLast(node));
+                                result.addContent(textCleanup(text, isLast(node)));
                             }
-                            result.addContent(text);
                         } else {
                             docRootContent = copyDocRootContent(docRootContent);
                             dt.accept(this, docRootContent);
@@ -1889,8 +1891,7 @@
                 @Override @DefinedBy(Api.COMPILER_TREE)
                 public Boolean visitStartElement(StartElementTree node, Content c) {
                     String text = "<" + node.getName();
-                    text = utils.normalizeNewlines(text);
-                    RawHtml rawHtml = new RawHtml(text);
+                    RawHtml rawHtml = new RawHtml(utils.normalizeNewlines(text));
                     result.addContent(rawHtml);
 
                     for (DocTree dt : node.getAttributes()) {
@@ -1900,11 +1901,11 @@
                     return false;
                 }
 
-                private String textCleanup(String text, boolean isLast) {
+                private CharSequence textCleanup(String text, boolean isLast) {
                     return textCleanup(text, isLast, false);
                 }
 
-                private String textCleanup(String text, boolean isLast, boolean trimLeader) {
+                private CharSequence textCleanup(String text, boolean isLast, boolean trimLeader) {
                     if (trimLeader) {
                         text = removeLeadingWhitespace(text);
                     }
@@ -1912,16 +1913,14 @@
                         text = removeTrailingWhitespace(text);
                     }
                     text = utils.replaceTabs(text);
-                    text = utils.normalizeNewlines(text);
-                    return text;
+                    return utils.normalizeNewlines(text);
                 }
 
                 @Override @DefinedBy(Api.COMPILER_TREE)
                 public Boolean visitText(TextTree node, Content c) {
                     String text = node.getBody();
-                    text = textCleanup(text, isLast(node), commentRemoved);
+                    result.addContent(new RawHtml(textCleanup(text, isLast(node), commentRemoved)));
                     commentRemoved = false;
-                    result.addContent(new RawHtml(text));
                     return false;
                 }
 
@@ -2358,7 +2357,8 @@
     private void addAnnotations(TypeElement annotationDoc, LinkInfoImpl linkInfo,
         ContentBuilder annotation, Map<? extends ExecutableElement,? extends AnnotationValue>map,
         int indent, boolean linkBreak) {
-        linkInfo.label = new StringContent("@" + annotationDoc.getSimpleName().toString());
+        linkInfo.label = new StringContent("@");
+        linkInfo.label.addContent(annotationDoc.getSimpleName());
         annotation.addContent(getLink(linkInfo));
         if (!map.isEmpty()) {
             annotation.addContent("(");
@@ -2372,7 +2372,7 @@
                     annotation.addContent(",");
                     if (linkBreak) {
                         annotation.addContent(DocletConstants.NL);
-                        int spaces = annotationDoc.getSimpleName().toString().length() + 2;
+                        int spaces = annotationDoc.getSimpleName().length() + 2;
                         for (int k = 0; k < (spaces + indent); k++) {
                             annotation.addContent(" ");
                         }
@@ -2496,7 +2496,7 @@
             @Override @DefinedBy(Api.LANGUAGE_MODEL)
             public Content visitEnumConstant(VariableElement c, Void p) {
                 return getDocLink(LinkInfoImpl.Kind.ANNOTATION,
-                        c, c.getSimpleName().toString(), false);
+                        c, c.getSimpleName(), false);
             }
             @Override @DefinedBy(Api.LANGUAGE_MODEL)
             public Content visitArray(List<? extends AnnotationValue> vals, Void p) {
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/LinkInfoImpl.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/LinkInfoImpl.java	Mon Mar 14 17:51:25 2016 +0100
@@ -294,7 +294,7 @@
      * Set the label for the link.
      * @param label plain-text label for the link
      */
-    public LinkInfoImpl label(String label) {
+    public LinkInfoImpl label(CharSequence label) {
         this.label = new StringContent(label);
         return this;
     }
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/MethodWriterImpl.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/MethodWriterImpl.java	Mon Mar 14 17:51:25 2016 +0100
@@ -356,11 +356,10 @@
             Content overriddenTypeLink =
                     writer.getLink(new LinkInfoImpl(writer.configuration, context, overriddenType));
             Content codeOverridenTypeLink = HtmlTree.CODE(overriddenTypeLink);
-            String name = method.getSimpleName().toString();
             Content methlink = writer.getLink(
                     new LinkInfoImpl(writer.configuration, LinkInfoImpl.Kind.MEMBER,
                     holder)
-                    .where(writer.getName(writer.getAnchor(method))).label(name));
+                    .where(writer.getName(writer.getAnchor(method))).label(method.getSimpleName()));
             Content codeMethLink = HtmlTree.CODE(methlink);
             Content dd = HtmlTree.DD(codeMethLink);
             dd.addContent(writer.getSpace());
@@ -395,7 +394,7 @@
             dl.addContent(dt);
             Content methlink = writer.getDocLink(
                     LinkInfoImpl.Kind.MEMBER, implementedMeth,
-                    implementedMeth.getSimpleName().toString(), false);
+                    implementedMeth.getSimpleName(), false);
             Content codeMethLink = HtmlTree.CODE(methlink);
             Content dd = HtmlTree.DD(codeMethLink);
             dd.addContent(writer.getSpace());
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageIndexFrameWriter.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageIndexFrameWriter.java	Mon Mar 14 17:51:25 2016 +0100
@@ -123,7 +123,7 @@
             packageLinkContent = getHyperLink(DocPaths.PACKAGE_FRAME,
                     packageLabel, "", "packageFrame");
         } else {
-            packageLabel = getPackageLabel(pe.getQualifiedName().toString());
+            packageLabel = getPackageLabel(pe.getQualifiedName());
             packageLinkContent = getHyperLink(pathString(pe,
                      DocPaths.PACKAGE_FRAME), packageLabel, "",
                     "packageFrame");
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PropertyWriterImpl.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PropertyWriterImpl.java	Mon Mar 14 17:51:25 2016 +0100
@@ -158,7 +158,7 @@
                         writer.getDocLink(LinkInfoImpl.Kind.PROPERTY_COPY,
                         holder, property,
                         utils.isIncluded(holder)
-                                ? holder.toString() : utils.getFullyQualifiedName(holder),
+                                ? holder.getSimpleName() : holder.getQualifiedName(),
                             false);
                 Content codeLink = HtmlTree.CODE(link);
                 Content descfrmLabel = HtmlTree.SPAN(HtmlStyle.descfrmTypeLabel,
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TagletWriterImpl.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TagletWriterImpl.java	Mon Mar 14 17:51:25 2016 +0100
@@ -91,8 +91,7 @@
      */
     protected Content codeTagOutput(Element element, DocTree tag) {
         CommentHelper ch = utils.getCommentHelper(element);
-        String str = utils.normalizeNewlines(ch.getText(tag));
-        StringContent content = new StringContent(str);
+        StringContent content = new StringContent(utils.normalizeNewlines(ch.getText(tag)));
         Content result = HtmlTree.CODE(content);
         return result;
     }
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/Comment.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/Comment.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -75,7 +75,8 @@
      *                              DocletAbortException because it
      *                              is not supported.
      */
-    public void addContent(String stringContent) {
+    @Override
+    public void addContent(CharSequence stringContent) {
         throw new DocletAbortException("not supported");
     }
 
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/ContentBuilder.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/ContentBuilder.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -50,8 +50,8 @@
     }
 
     @Override
-    public void addContent(String text) {
-        if (text.isEmpty())
+    public void addContent(CharSequence text) {
+        if (text.length() == 0)
             return;
         ensureMutableContents();
         Content c = contents.isEmpty() ? null : contents.get(contents.size() - 1);
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/DocType.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/DocType.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -89,7 +89,8 @@
      *                              DocletAbortException because it
      *                              is not supported.
      */
-    public void addContent(String stringContent) {
+    @Override
+    public void addContent(CharSequence stringContent) {
         throw new DocletAbortException("not supported");
     }
 
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlDocument.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlDocument.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -90,7 +90,8 @@
      *                              DocletAbortException because it
      *                              is not supported.
      */
-    public void addContent(String stringContent) {
+    @Override
+    public void addContent(CharSequence stringContent) {
         throw new DocletAbortException("not supported");
     }
 
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlTree.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlTree.java	Mon Mar 14 17:51:25 2016 +0100
@@ -132,7 +132,8 @@
      *
      * @param stringContent string content that needs to be added
      */
-    public void addContent(String stringContent) {
+    @Override
+    public void addContent(CharSequence stringContent) {
         if (!content.isEmpty()) {
             Content lastContent = content.get(content.size() - 1);
             if (lastContent instanceof StringContent)
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlWriter.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlWriter.java	Mon Mar 14 17:51:25 2016 +0100
@@ -475,7 +475,7 @@
         addStyles(HtmlStyle.rowColor, vars);
         addStyles(HtmlStyle.tableTab, vars);
         addStyles(HtmlStyle.activeTableTab, vars);
-        script.addContent(new RawHtml(vars.toString()));
+        script.addContent(new RawHtml(vars));
     }
 
     /**
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/RawHtml.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/RawHtml.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -53,8 +53,8 @@
      *
      * @param rawHtml raw HTML text to be added
      */
-    public RawHtml(String rawHtml) {
-        rawHtmlContent = nullCheck(rawHtml);
+    public RawHtml(CharSequence rawHtml) {
+        rawHtmlContent = rawHtml.toString();
     }
 
     /**
@@ -77,7 +77,8 @@
      *                              DocletAbortException because it
      *                              is not supported.
      */
-    public void addContent(String stringContent) {
+    @Override
+    public void addContent(CharSequence stringContent) {
         throw new DocletAbortException("not supported");
     }
 
@@ -103,7 +104,7 @@
         return charCount(rawHtmlContent);
     }
 
-    static int charCount(String htmlText) {
+    static int charCount(CharSequence htmlText) {
         State state = State.TEXT;
         int count = 0;
         for (int i = 0; i < htmlText.length(); i++) {
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/StringContent.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/StringContent.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -58,7 +58,7 @@
      *
      * @param initialContent initial content for the object
      */
-    public StringContent(String initialContent) {
+    public StringContent(CharSequence initialContent) {
         stringContent = new StringBuilder();
         appendChars(initialContent);
     }
@@ -83,7 +83,7 @@
      * @param strContent string content to be added
      */
     @Override
-    public void addContent(String strContent) {
+    public void addContent(CharSequence strContent) {
         appendChars(strContent);
     }
 
@@ -118,7 +118,7 @@
         return s.endsWith(DocletConstants.NL);
     }
 
-    private void appendChars(String s) {
+    private void appendChars(CharSequence s) {
         for (int i = 0; i < s.length(); i++) {
             char ch = s.charAt(i);
             switch (ch) {
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Content.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Content.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -74,7 +74,7 @@
      *
      * @param stringContent the string content to be added
      */
-    public abstract void addContent(String stringContent);
+    public abstract void addContent(CharSequence stringContent);
 
     /**
      * Writes content to a writer.
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Utils.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Utils.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1356,7 +1356,7 @@
         return result.toString();
     }
 
-    public String normalizeNewlines(String text) {
+    public CharSequence normalizeNewlines(CharSequence text) {
         StringBuilder sb = new StringBuilder();
         final int textLength = text.length();
         final String NL = DocletConstants.NL;
@@ -1379,7 +1379,7 @@
             }
         }
         sb.append(text, pos, textLength);
-        return sb.toString();
+        return sb;
     }
 
     /**
@@ -1746,6 +1746,8 @@
      * A generic utility which returns the fully qualified names of an entity,
      * if the entity is not qualifiable then its enclosing entity, it is upto
      * the caller to add the elements name as required.
+     * @param e the element to get FQN for.
+     * @return the name
      */
     public String getFullyQualifiedName(Element e) {
         return getFullyQualifiedName(e, true);
--- a/langtools/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/Profile.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/Profile.java	Mon Mar 14 17:51:25 2016 +0100
@@ -38,7 +38,7 @@
                             "jdk.httpserver", "jdk.security.auth",
                             "jdk.naming.dns", "jdk.naming.rmi",
                             "jdk.management"),
-    FULL_JRE("Full JRE", 4, "java.se", "jdk.deploy.osx", "jdk.charsets",
+    FULL_JRE("Full JRE", 4, "java.se", "jdk.charsets",
                             "jdk.crypto.ec", "jdk.crypto.pkcs11",
                             "jdk.crypto.mscapi", "jdk.crypto.ucrypto", "jdk.jvmstat",
                             "jdk.localedata", "jdk.scripting.nashorn", "jdk.zipfs");
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ArgTokenizer.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,271 @@
+/*
+ * Copyright (c) 1995, 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.internal.jshell.tool;
+
+import java.util.Arrays;
+import java.util.stream.Stream;
+
+/**
+ * Parse command arguments, derived from StreamTokenizer by
+ * @author  James Gosling
+ */
+class ArgTokenizer {
+
+    private final String str;
+    private final int length;
+    private int next = 0;
+    private char buf[] = new char[20];
+    private int mark;
+
+    private final byte ctype[] = new byte[256];
+    private static final byte CT_ALPHA = 0;
+    private static final byte CT_WHITESPACE = 1;
+    private static final byte CT_QUOTE = 8;
+
+    private String sval;
+    private boolean isQuoted = false;
+
+    ArgTokenizer(String arg) {
+        this.str = arg;
+        this.length = arg.length();
+        quoteChar('"');
+        quoteChar('\'');
+        whitespaceChars(0x09, 0x0D);
+        whitespaceChars(0x1C, 0x20);
+        whitespaceChars(0x85, 0x85);
+        whitespaceChars(0xA0, 0xA0);
+    }
+
+    String next() {
+        nextToken();
+        return sval;
+    }
+
+    String[] next(String... strings) {
+        return next(Arrays.stream(strings));
+    }
+
+    String[] next(Stream<String> stream) {
+        nextToken();
+        if (sval == null) {
+            return null;
+        }
+        String[] matches = stream
+                .filter(s -> s.startsWith(sval))
+                .toArray(size -> new String[size]);
+        return matches;
+    }
+
+    String val() {
+        return sval;
+    }
+
+    boolean isQuoted() {
+        return isQuoted;
+    }
+
+    String whole() {
+        return str;
+    }
+
+    void mark() {
+        mark = next;
+    }
+
+    void rewind() {
+        next = mark;
+    }
+
+    /**
+     * Reads a single character.
+     *
+     * @return The character read, or -1 if the end of the stream has been
+     * reached
+     */
+    private int read() {
+        if (next >= length) {
+            return -1;
+        }
+        return str.charAt(next++);
+    }
+
+    /**
+     * Specifies that all characters <i>c</i> in the range
+     * <code>low&nbsp;&lt;=&nbsp;<i>c</i>&nbsp;&lt;=&nbsp;high</code>
+     * are white space characters. White space characters serve only to
+     * separate tokens in the input stream.
+     *
+     * <p>Any other attribute settings for the characters in the specified
+     * range are cleared.
+     *
+     * @param   low   the low end of the range.
+     * @param   hi    the high end of the range.
+     */
+    private void whitespaceChars(int low, int hi) {
+        if (low < 0)
+            low = 0;
+        if (hi >= ctype.length)
+            hi = ctype.length - 1;
+        while (low <= hi)
+            ctype[low++] = CT_WHITESPACE;
+    }
+
+    /**
+     * Specifies that matching pairs of this character delimit string
+     * constants in this tokenizer.
+     * <p>
+     * If a string quote character is encountered, then a string is
+     * recognized, consisting of all characters after (but not including)
+     * the string quote character, up to (but not including) the next
+     * occurrence of that same string quote character, or a line
+     * terminator, or end of file. The usual escape sequences such as
+     * {@code "\u005Cn"} and {@code "\u005Ct"} are recognized and
+     * converted to single characters as the string is parsed.
+     *
+     * <p>Any other attribute settings for the specified character are cleared.
+     *
+     * @param   ch   the character.
+     */
+    private void quoteChar(int ch) {
+        if (ch >= 0 && ch < ctype.length)
+            ctype[ch] = CT_QUOTE;
+    }
+
+    private int unicode2ctype(int c) {
+        switch (c) {
+            case 0x1680:
+            case 0x180E:
+            case 0x200A:
+            case 0x202F:
+            case 0x205F:
+            case 0x3000:
+                return CT_WHITESPACE;
+            default:
+                return CT_ALPHA;
+        }
+    }
+
+    /**
+     * Parses the next token of this tokenizer.
+     */
+    public void nextToken() {
+        byte ct[] = ctype;
+        int c;
+        int lctype;
+        sval = null;
+        isQuoted = false;
+
+        do {
+            c = read();
+            if (c < 0) {
+                return;
+            }
+            lctype = (c < 256) ? ct[c] : unicode2ctype(c);
+        } while (lctype == CT_WHITESPACE);
+
+        if (lctype == CT_ALPHA) {
+            int i = 0;
+            do {
+                if (i >= buf.length) {
+                    buf = Arrays.copyOf(buf, buf.length * 2);
+                }
+                buf[i++] = (char) c;
+                c = read();
+                lctype = c < 0 ? CT_WHITESPACE : (c < 256)? ct[c] : unicode2ctype(c);
+            } while (lctype == CT_ALPHA);
+            if (c >= 0) --next; // push last back
+            sval = String.copyValueOf(buf, 0, i);
+            return;
+        }
+
+        if (lctype == CT_QUOTE) {
+            int quote = c;
+            int i = 0;
+            /* Invariants (because \Octal needs a lookahead):
+             *   (i)  c contains char value
+             *   (ii) d contains the lookahead
+             */
+            int d = read();
+            while (d >= 0 && d != quote) {
+                if (d == '\\') {
+                    c = read();
+                    int first = c;   /* To allow \377, but not \477 */
+                    if (c >= '0' && c <= '7') {
+                        c = c - '0';
+                        int c2 = read();
+                        if ('0' <= c2 && c2 <= '7') {
+                            c = (c << 3) + (c2 - '0');
+                            c2 = read();
+                            if ('0' <= c2 && c2 <= '7' && first <= '3') {
+                                c = (c << 3) + (c2 - '0');
+                                d = read();
+                            } else
+                                d = c2;
+                        } else
+                          d = c2;
+                    } else {
+                        switch (c) {
+                        case 'a':
+                            c = 0x7;
+                            break;
+                        case 'b':
+                            c = '\b';
+                            break;
+                        case 'f':
+                            c = 0xC;
+                            break;
+                        case 'n':
+                            c = '\n';
+                            break;
+                        case 'r':
+                            c = '\r';
+                            break;
+                        case 't':
+                            c = '\t';
+                            break;
+                        case 'v':
+                            c = 0xB;
+                            break;
+                        }
+                        d = read();
+                    }
+                } else {
+                    c = d;
+                    d = read();
+                }
+                if (i >= buf.length) {
+                    buf = Arrays.copyOf(buf, buf.length * 2);
+                }
+                buf[i++] = (char)c;
+            }
+
+            if (d == quote) {
+                isQuoted = true;
+            }
+            sval = String.copyValueOf(buf, 0, i);
+        }
+    }
+}
--- a/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ConsoleIOContext.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ConsoleIOContext.java	Mon Mar 14 17:51:25 2016 +0100
@@ -48,6 +48,7 @@
 import jdk.internal.jline.NoInterruptUnixTerminal;
 import jdk.internal.jline.Terminal;
 import jdk.internal.jline.TerminalFactory;
+import jdk.internal.jline.UnsupportedTerminal;
 import jdk.internal.jline.WindowsTerminal;
 import jdk.internal.jline.console.ConsoleReader;
 import jdk.internal.jline.console.KeyMap;
@@ -68,7 +69,9 @@
         this.repl = repl;
         this.input = new StopDetectingInputStream(() -> repl.state.stop(), ex -> repl.hard("Error on input: %s", ex));
         Terminal term;
-        if (System.getProperty("os.name").toLowerCase(Locale.US).contains(TerminalFactory.WINDOWS)) {
+        if (System.getProperty("test.jdk") != null) {
+            term = new UnsupportedTerminal();
+        } else if (System.getProperty("os.name").toLowerCase(Locale.US).contains(TerminalFactory.WINDOWS)) {
             term = new JShellWindowsTerminal(input);
         } else {
             term = new JShellUnixTerminal(input);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/Feedback.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,1049 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.internal.jshell.tool;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.EnumMap;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Function;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * Feedback customization support
+ *
+ * @author Robert Field
+ */
+class Feedback {
+
+    // Patern for substituted fields within a customized format string
+    private static final Pattern FIELD_PATTERN = Pattern.compile("\\{(.*?)\\}");
+
+    // Current mode
+    private Mode mode = new Mode("", false); // initial value placeholder during start-up
+
+    // Mapping of mode names to mode modes
+    private final Map<String, Mode> modeMap = new HashMap<>();
+
+    public boolean shouldDisplayCommandFluff() {
+        return mode.commandFluff;
+    }
+
+    public String getPre() {
+        return mode.pre;
+    }
+
+    public String getPost() {
+        return mode.post;
+    }
+
+    public String getErrorPre() {
+        return mode.errorPre;
+    }
+
+    public String getErrorPost() {
+        return mode.errorPost;
+    }
+
+    public String getFormat(FormatCase fc, FormatWhen fw, FormatAction fa, FormatResolve fr,
+            boolean hasName, boolean hasType, boolean hasResult) {
+        return mode.getFormat(fc, fw, fa, fr, hasName, hasType, hasResult);
+    }
+
+    public String getPrompt(String nextId) {
+        return mode.getPrompt(nextId);
+    }
+
+    public String getContinuationPrompt(String nextId) {
+        return mode.getContinuationPrompt(nextId);
+    }
+
+    public boolean setFeedback(JShellTool tool, ArgTokenizer at) {
+        return new FormatSetter(tool, at).setFeedback();
+    }
+
+    public boolean setField(JShellTool tool, ArgTokenizer at) {
+        return new FormatSetter(tool, at).setField();
+    }
+
+    public boolean setFormat(JShellTool tool, ArgTokenizer at) {
+        return new FormatSetter(tool, at).setFormat();
+    }
+
+    public boolean setNewMode(JShellTool tool, ArgTokenizer at) {
+        return new FormatSetter(tool, at).setNewMode();
+    }
+
+    public boolean setPrompt(JShellTool tool, ArgTokenizer at) {
+        return new FormatSetter(tool, at).setPrompt();
+    }
+
+    public void printFeedbackHelp(JShellTool tool) {
+        new FormatSetter(tool, null).printFeedbackHelp();
+    }
+
+    public void printFieldHelp(JShellTool tool) {
+        new FormatSetter(tool, null).printFieldHelp();
+    }
+
+    public void printFormatHelp(JShellTool tool) {
+        new FormatSetter(tool, null).printFormatHelp();
+    }
+
+    public void printNewModeHelp(JShellTool tool) {
+        new FormatSetter(tool, null).printNewModeHelp();
+    }
+
+    public void printPromptHelp(JShellTool tool) {
+        new FormatSetter(tool, null).printPromptHelp();
+    }
+
+    /**
+     * Holds all the context of a mode mode
+     */
+    private class Mode {
+
+        // Use name of mode mode
+
+        final String name;
+
+        // Display command verification/information
+        final boolean commandFluff;
+
+        // event cases: class, method
+        final EnumMap<FormatCase, EnumMap<FormatAction, EnumMap<FormatWhen, String>>> cases;
+
+        // action names: add. modified, replaced, ...
+        final EnumMap<FormatAction, EnumMap<FormatWhen, String>> actions;
+
+        // resolution status description format with %s for unresolved
+        final EnumMap<FormatResolve, EnumMap<FormatWhen, String>> resolves;
+
+        // primary snippet vs update
+        final EnumMap<FormatWhen, String> whens;
+
+        // fixed map of how to get format string for a field, given a specific formatting contet
+        final EnumMap<FormatField, Function<Context, String>> fields;
+
+        // format wrappers for name, type, and result
+        String fname = "%s";
+        String ftype = "%s";
+        String fresult = "%s";
+
+        // start and end, also used by hard-coded output
+        String pre = "|  ";
+        String post = "\n";
+        String errorPre = "|  Error: ";
+        String errorPost = "\n";
+
+        String prompt = "\n-> ";
+        String continuationPrompt = ">> ";
+
+        /**
+         * The context of a specific mode to potentially display.
+         */
+        class Context {
+
+            final FormatCase fc;
+            final FormatAction fa;
+            final FormatResolve fr;
+            final FormatWhen fw;
+            final boolean hasName;
+            final boolean hasType;
+            final boolean hasResult;
+
+            Context(FormatCase fc, FormatWhen fw, FormatAction fa, FormatResolve fr,
+                    boolean hasName, boolean hasType, boolean hasResult) {
+                this.fc = fc;
+                this.fa = fa;
+                this.fr = fr;
+                this.fw = fw;
+                this.hasName = hasName;
+                this.hasType = hasType;
+                this.hasResult = hasResult;
+            }
+
+            String when() {
+                return whens.get(fw);
+            }
+
+            String action() {
+                return actions.get(fa).get(fw);
+            }
+
+            String resolve() {
+                return String.format(resolves.get(fr).get(fw), FormatField.RESOLVE.form);
+            }
+
+            String name() {
+                return hasName
+                        ? String.format(fname, FormatField.NAME.form)
+                        : "";
+            }
+
+            String type() {
+                return hasType
+                        ? String.format(ftype, FormatField.TYPE.form)
+                        : "";
+            }
+
+            String result() {
+                return hasResult
+                        ? String.format(fresult, FormatField.RESULT.form)
+                        : "";
+            }
+
+            /**
+             * Lookup format based on case, action, and whether it update.
+             * Replace fields with context specific formats.
+             *
+             * @return format string
+             */
+            String format() {
+                String format = cases.get(fc).get(fa).get(fw);
+                if (format == null) {
+                    return "";
+                }
+                Matcher m = FIELD_PATTERN.matcher(format);
+                StringBuffer sb = new StringBuffer(format.length());
+                while (m.find()) {
+                    String fieldName = m.group(1).toUpperCase(Locale.US);
+                    String sub = null;
+                    for (FormatField f : FormatField.values()) {
+                        if (f.name().startsWith(fieldName)) {
+                            sub = fields.get(f).apply(this);
+                            break;
+                        }
+                    }
+                    if (sub != null) {
+                        m.appendReplacement(sb, Matcher.quoteReplacement(sub));
+                    }
+                }
+                m.appendTail(sb);
+                return sb.toString();
+            }
+        }
+
+        {
+            // set fixed mappings of fields
+            fields = new EnumMap<>(FormatField.class);
+            fields.put(FormatField.WHEN, c -> c.when());
+            fields.put(FormatField.ACTION, c -> c.action());
+            fields.put(FormatField.RESOLVE, c -> c.resolve());
+            fields.put(FormatField.NAME, c -> c.name());
+            fields.put(FormatField.TYPE, c -> c.type());
+            fields.put(FormatField.RESULT, c -> c.result());
+            fields.put(FormatField.PRE, c -> pre);
+            fields.put(FormatField.POST, c -> post);
+            fields.put(FormatField.ERRORPRE, c -> errorPre);
+            fields.put(FormatField.ERRORPOST, c -> errorPost);
+        }
+
+        /**
+         * Set up an empty mode.
+         *
+         * @param name
+         * @param commandFluff True if should display command fluff messages
+         */
+        Mode(String name, boolean commandFluff) {
+            this.name = name;
+            this.commandFluff = commandFluff;
+            cases = new EnumMap<>(FormatCase.class);
+            for (FormatCase fc : FormatCase.values()) {
+                EnumMap<FormatAction, EnumMap<FormatWhen, String>> ac = new EnumMap<>(FormatAction.class);
+                cases.put(fc, ac);
+                for (FormatAction fa : FormatAction.values()) {
+                    EnumMap<FormatWhen, String> aw = new EnumMap<>(FormatWhen.class);
+                    ac.put(fa, aw);
+                    for (FormatWhen fw : FormatWhen.values()) {
+                        aw.put(fw, "");
+                    }
+                }
+            }
+
+            actions = new EnumMap<>(FormatAction.class);
+            for (FormatAction fa : FormatAction.values()) {
+                EnumMap<FormatWhen, String> afw = new EnumMap<>(FormatWhen.class);
+                actions.put(fa, afw);
+                for (FormatWhen fw : FormatWhen.values()) {
+                    afw.put(fw, fa.name() + "-" + fw.name());
+                }
+            }
+
+            resolves = new EnumMap<>(FormatResolve.class);
+            for (FormatResolve fr : FormatResolve.values()) {
+                EnumMap<FormatWhen, String> arw = new EnumMap<>(FormatWhen.class);
+                resolves.put(fr, arw);
+                for (FormatWhen fw : FormatWhen.values()) {
+                    arw.put(fw, fr.name() + "-" + fw.name() + ": %s");
+                }
+            }
+
+            whens = new EnumMap<>(FormatWhen.class);
+            for (FormatWhen fw : FormatWhen.values()) {
+                whens.put(fw, fw.name());
+            }
+        }
+
+        /**
+         * Set up a copied mode.
+         *
+         * @param name
+         * @param commandFluff True if should display command fluff messages
+         * @param m Mode to copy
+         */
+        Mode(String name, boolean commandFluff, Mode m) {
+            this.name = name;
+            this.commandFluff = commandFluff;
+            cases = new EnumMap<>(FormatCase.class);
+            for (FormatCase fc : FormatCase.values()) {
+                EnumMap<FormatAction, EnumMap<FormatWhen, String>> ac = new EnumMap<>(FormatAction.class);
+                EnumMap<FormatAction, EnumMap<FormatWhen, String>> mc = m.cases.get(fc);
+                cases.put(fc, ac);
+                for (FormatAction fa : FormatAction.values()) {
+                    EnumMap<FormatWhen, String> aw = new EnumMap<>(mc.get(fa));
+                    ac.put(fa, aw);
+                }
+            }
+
+            actions = new EnumMap<>(FormatAction.class);
+            for (FormatAction fa : FormatAction.values()) {
+                EnumMap<FormatWhen, String> afw = new EnumMap<>(m.actions.get(fa));
+                actions.put(fa, afw);
+            }
+
+            resolves = new EnumMap<>(FormatResolve.class);
+            for (FormatResolve fr : FormatResolve.values()) {
+                EnumMap<FormatWhen, String> arw = new EnumMap<>(m.resolves.get(fr));
+                resolves.put(fr, arw);
+            }
+
+            whens = new EnumMap<>(m.whens);
+
+            this.fname = m.fname;
+            this.ftype = m.ftype;
+            this.fresult = m.fresult;
+            this.pre = m.pre;
+            this.post = m.post;
+            this.errorPre = m.errorPre;
+            this.errorPost = m.errorPost;
+            this.prompt = m.prompt;
+            this.continuationPrompt = m.continuationPrompt;
+        }
+
+        String getFormat(FormatCase fc, FormatWhen fw, FormatAction fa, FormatResolve fr,
+                boolean hasName, boolean hasType, boolean hasResult) {
+            Context context = new Context(fc, fw, fa, fr,
+                    hasName, hasType, hasResult);
+            return context.format();
+        }
+
+        void setCases(String format, Collection<FormatCase> cc, Collection<FormatAction> ca, Collection<FormatWhen> cw) {
+            for (FormatCase fc : cc) {
+                EnumMap<FormatAction, EnumMap<FormatWhen, String>> ma = cases.get(fc);
+                for (FormatAction fa : ca) {
+                    EnumMap<FormatWhen, String> mw = ma.get(fa);
+                    for (FormatWhen fw : cw) {
+                        mw.put(fw, format);
+                    }
+                }
+            }
+        }
+
+        void setActions(String format, Collection<FormatAction> ca, Collection<FormatWhen> cw) {
+            for (FormatAction fa : ca) {
+                EnumMap<FormatWhen, String> mw = actions.get(fa);
+                for (FormatWhen fw : cw) {
+                    mw.put(fw, format);
+                }
+            }
+        }
+
+        void setResolves(String format, Collection<FormatResolve> cr, Collection<FormatWhen> cw) {
+            for (FormatResolve fr : cr) {
+                EnumMap<FormatWhen, String> mw = resolves.get(fr);
+                for (FormatWhen fw : cw) {
+                    mw.put(fw, format);
+                }
+            }
+        }
+
+        void setWhens(String format, Collection<FormatWhen> cw) {
+            for (FormatWhen fw : cw) {
+                whens.put(fw, format);
+            }
+        }
+
+        void setName(String s) {
+            fname = s;
+        }
+
+        void setType(String s) {
+            ftype = s;
+        }
+
+        void setResult(String s) {
+            fresult = s;
+        }
+
+        void setPre(String s) {
+            pre = s;
+        }
+
+        void setPost(String s) {
+            post = s;
+        }
+
+        void setErrorPre(String s) {
+            errorPre = s;
+        }
+
+        void setErrorPost(String s) {
+            errorPost = s;
+        }
+
+        String getPre() {
+            return pre;
+        }
+
+        String getPost() {
+            return post;
+        }
+
+        String getErrorPre() {
+            return errorPre;
+        }
+
+        String getErrorPost() {
+            return errorPost;
+        }
+
+        void setPrompts(String prompt, String continuationPrompt) {
+            this.prompt = prompt;
+            this.continuationPrompt = continuationPrompt;
+        }
+
+        String getPrompt(String nextId) {
+            return String.format(prompt, nextId);
+        }
+
+        String getContinuationPrompt(String nextId) {
+            return String.format(continuationPrompt, nextId);
+        }
+    }
+
+    /**
+     * The brace delimited substitutions
+     */
+    public enum FormatField {
+        WHEN,
+        ACTION,
+        RESOLVE("%1$s"),
+        NAME("%2$s"),
+        TYPE("%3$s"),
+        RESULT("%4$s"),
+        PRE,
+        POST,
+        ERRORPRE,
+        ERRORPOST;
+        String form;
+
+        FormatField(String s) {
+            this.form = s;
+        }
+
+        FormatField() {
+            this.form = null;
+        }
+    }
+
+    /**
+     * The event cases
+     */
+    public enum FormatCase {
+        IMPORT("import declaration: {action} {name}"),
+        CLASS("class, interface, enum, or annotation declaration: {action} {name} {resolve}"),
+        INTERFACE("class, interface, enum, or annotation declaration: {action} {name} {resolve}"),
+        ENUM("class, interface, enum, or annotation declaration: {action} {name} {resolve}"),
+        ANNOTATION("annotation interface declaration: {action} {name} {resolve}"),
+        METHOD("method declaration: {action} {name} {type}==parameter-types {resolve}"),
+        VARDECL("variable declaration: {action} {name} {type} {resolve}"),
+        VARDECLRECOVERABLE("recoverably failed variable declaration: {action} {name} {resolve}"),
+        VARINIT("variable declaration with init: {action} {name} {type} {resolve} {result}"),
+        VARRESET("variable reset on update: {action} {name}"),
+        EXPRESSION("expression: {action}=='Saved to scratch variable' {name} {type} {result}"),
+        VARVALUE("variable value expression: {action} {name} {type} {result}"),
+        ASSIGNMENT("assign variable: {action} {name} {type} {result}"),
+        STATEMENT("statement: {action}");
+        String doc;
+
+        private FormatCase(String doc) {
+            this.doc = doc;
+        }
+    }
+
+    /**
+     * The event actions
+     */
+    public enum FormatAction {
+        ADDED("snippet has been added"),
+        MODIFIED("an existing snippet has been modified"),
+        REPLACED("an existing snippet has been replaced with a new snippet"),
+        OVERWROTE("an existing snippet has been overwritten"),
+        DROPPED("snippet has been dropped"),
+        REJECTED("snippet has failed and been rejected");
+        String doc;
+
+        private FormatAction(String doc) {
+            this.doc = doc;
+        }
+    }
+
+    /**
+     * When the event occurs: primary or update
+     */
+    public enum FormatWhen {
+        PRIMARY("the entered snippet"),
+        UPDATE("an update to a dependent snippet");
+        String doc;
+
+        private FormatWhen(String doc) {
+            this.doc = doc;
+        }
+    }
+
+    /**
+     * Resolution problems with event
+     */
+    public enum FormatResolve {
+        OK("resolved correctly"),
+        DEFINED("defined despite recoverably unresolved references"),
+        NOTDEFINED("not defined because of recoverably unresolved references");
+        String doc;
+
+        private FormatResolve(String doc) {
+            this.doc = doc;
+        }
+    }
+
+    // Class used to set custom eval output formats
+    // For both /set format  and /set field -- Parse arguments, setting custom format, or printing error
+    private class FormatSetter {
+
+        private final ArgTokenizer at;
+        private final JShellTool tool;
+        boolean valid = true;
+
+        class Case<E1 extends Enum<E1>, E2 extends Enum<E2>, E3 extends Enum<E3>> {
+
+            Set<E1> e1;
+            Set<E2> e2;
+            Set<E3> e3;
+
+            Case(Set<E1> e1, Set<E2> e2, Set<E3> e3) {
+                this.e1 = e1;
+                this.e2 = e2;
+                this.e3 = e3;
+            }
+
+            Case(Set<E1> e1, Set<E2> e2) {
+                this.e1 = e1;
+                this.e2 = e2;
+            }
+        }
+
+        FormatSetter(JShellTool tool, ArgTokenizer at) {
+            this.tool = tool;
+            this.at = at;
+        }
+
+        void hard(String format, Object... args) {
+            tool.hard(format, args);
+        }
+
+        <E extends Enum<E>> void hardEnums(EnumSet<E> es, Function<E, String> e2s) {
+            hardPairs(es.stream(), ev -> ev.name().toLowerCase(Locale.US), e2s);
+        }
+
+        <T> void hardPairs(Stream<T> stream, Function<T, String> a, Function<T, String> b) {
+            tool.hardPairs(stream, a, b);
+        }
+
+        void fluff(String format, Object... args) {
+            tool.fluff(format, args);
+        }
+
+        void error(String format, Object... args) {
+            tool.error(format, args);
+        }
+
+        void errorat(String format, Object... args) {
+            Object[] a2 = Arrays.copyOf(args, args.length + 1);
+            a2[args.length] = at.whole();
+            tool.error(format + " -- /set %s", a2);
+        }
+
+        void fluffRaw(String format, Object... args) {
+            tool.fluffRaw(format, args);
+        }
+
+        // For /set prompt <mode> "<prompt>" "<continuation-prompt>"
+        boolean setPrompt() {
+            Mode m = nextMode();
+            String prompt = nextFormat();
+            String continuationPrompt = nextFormat();
+            if (valid) {
+                m.setPrompts(prompt, continuationPrompt);
+            } else {
+                fluff("See '/help /set prompt' for help");
+            }
+            return valid;
+        }
+
+        // For /set newmode <new-mode> [command|quiet [<old-mode>]]
+        boolean setNewMode() {
+            String umode = at.next();
+            if (umode == null) {
+                errorat("Expected new feedback mode");
+                valid = false;
+            }
+            if (modeMap.containsKey(umode)) {
+                errorat("Expected a new feedback mode name. %s is a known feedback mode", umode);
+                valid = false;
+            }
+            String[] fluffOpt = at.next("command", "quiet");
+            boolean fluff = fluffOpt == null || fluffOpt.length != 1 || "command".equals(fluffOpt[0]);
+            if (fluffOpt != null && fluffOpt.length != 1) {
+                errorat("Specify either 'command' or 'quiet'");
+                valid = false;
+            }
+            Mode om = null;
+            String omode = at.next();
+            if (omode != null) {
+                om = toMode(omode);
+            }
+            if (valid) {
+                Mode nm = (om != null)
+                        ? new Mode(umode, fluff, om)
+                        : new Mode(umode, fluff);
+                modeMap.put(umode, nm);
+                fluff("Created new feedback mode: %s", nm.name);
+            } else {
+                fluff("See '/help /set newmode' for help");
+            }
+            return valid;
+        }
+
+        // For /set feedback <mode>
+        boolean setFeedback() {
+            Mode m = nextMode();
+            if (valid && m != null) {
+                mode = m;
+                fluff("Feedback mode: %s", mode.name);
+            } else {
+                fluff("See '/help /set feedback' for help");
+            }
+            return valid;
+        }
+
+        // For /set format <mode> "<format>" <selector>...
+        boolean setFormat() {
+            Mode m = nextMode();
+            String format = nextFormat();
+            if (valid) {
+                List<Case<FormatCase, FormatAction, FormatWhen>> specs = new ArrayList<>();
+                String s;
+                while ((s = at.next()) != null) {
+                    String[] d = s.split("-");
+                    specs.add(new Case<>(
+                            parseFormatCase(d, 0),
+                            parseFormatAction(d, 1),
+                            parseFormatWhen(d, 2)
+                    ));
+                }
+                if (valid && specs.isEmpty()) {
+                    errorat("At least one selector required");
+                    valid = false;
+                }
+                if (valid) {
+                    // set the format in the specified cases
+                    specs.stream()
+                            .forEach(c -> m.setCases(format, c.e1, c.e2, c.e3));
+                }
+            }
+            if (!valid) {
+                fluff("See '/help /set format' for help");
+            }
+            return valid;
+        }
+
+        // For /set field mode <field> "<format>" <selector>...
+        boolean setField() {
+            Mode m = nextMode();
+            String fieldName = at.next();
+            FormatField field = parseFormatSelector(fieldName, EnumSet.allOf(FormatField.class), "field");
+            String format = nextFormat();
+            if (valid) {
+                switch (field) {
+                    case ACTION: {
+                        List<Case<FormatAction, FormatWhen, FormatWhen>> specs = new ArrayList<>();
+                        String s;
+                        while ((s = at.next()) != null) {
+                            String[] d = s.split("-");
+                            specs.add(new Case<>(
+                                    parseFormatAction(d, 0),
+                                    parseFormatWhen(d, 1)
+                            ));
+                        }
+                        if (valid && specs.isEmpty()) {
+                            errorat("At least one selector required");
+                            valid = false;
+                        }
+                        if (valid) {
+                            // set the format of the specified actions
+                            specs.stream()
+                                    .forEach(c -> m.setActions(format, c.e1, c.e2));
+                        }
+                        break;
+                    }
+                    case RESOLVE: {
+                        List<Case<FormatResolve, FormatWhen, FormatWhen>> specs = new ArrayList<>();
+                        String s;
+                        while ((s = at.next()) != null) {
+                            String[] d = s.split("-");
+                            specs.add(new Case<>(
+                                    parseFormatResolve(d, 0),
+                                    parseFormatWhen(d, 1)
+                            ));
+                        }
+                        if (valid && specs.isEmpty()) {
+                            errorat("At least one selector required");
+                            valid = false;
+                        }
+                        if (valid) {
+                            // set the format of the specified resolves
+                            specs.stream()
+                                    .forEach(c -> m.setResolves(format, c.e1, c.e2));
+                        }
+                        break;
+                    }
+                    case WHEN: {
+                        List<Case<FormatWhen, FormatWhen, FormatWhen>> specs = new ArrayList<>();
+                        String s;
+                        while ((s = at.next()) != null) {
+                            String[] d = s.split("-");
+                            specs.add(new Case<>(
+                                    parseFormatWhen(d, 1),
+                                    null
+                            ));
+                        }
+                        if (valid && specs.isEmpty()) {
+                            errorat("At least one selector required");
+                            valid = false;
+                        }
+                        if (valid) {
+                            // set the format of the specified whens
+                            specs.stream()
+                                    .forEach(c -> m.setWhens(format, c.e1));
+                        }
+                        break;
+                    }
+                    case NAME: {
+                        m.setName(format);
+                        break;
+                    }
+                    case TYPE: {
+                        m.setType(format);
+                        break;
+                    }
+                    case RESULT: {
+                        m.setResult(format);
+                        break;
+                    }
+                    case PRE: {
+                        m.setPre(format);
+                        break;
+                    }
+                    case POST: {
+                        m.setPost(format);
+                        break;
+                    }
+                    case ERRORPRE: {
+                        m.setErrorPre(format);
+                        break;
+                    }
+                    case ERRORPOST: {
+                        m.setErrorPost(format);
+                        break;
+                    }
+                }
+            }
+            if (!valid) {
+                fluff("See '/help /set field' for help");
+            }
+            return valid;
+        }
+
+        Mode nextMode() {
+            String umode = at.next();
+            return toMode(umode);
+        }
+
+        Mode toMode(String umode) {
+            if (umode == null) {
+                errorat("Expected a feedback mode");
+                valid = false;
+                return null;
+            }
+            Mode m = modeMap.get(umode);
+            if (m != null) {
+                return m;
+            }
+            // Failing an exact match, go searching
+            Mode[] matches = modeMap.entrySet().stream()
+                    .filter(e -> e.getKey().startsWith(umode))
+                    .map(e -> e.getValue())
+                    .toArray(size -> new Mode[size]);
+            if (matches.length == 1) {
+                return matches[0];
+            } else {
+                valid = false;
+                if (matches.length == 0) {
+                    errorat("Does not match any current feedback mode: %s", umode);
+                } else {
+                    errorat("Matchs more then one current feedback mode: %s", umode);
+                }
+                fluff("The feedback mode should be one of the following:");
+                modeMap.keySet().stream()
+                        .forEach(mk -> fluff("   %s", mk));
+                fluff("You may also use just enough letters to make it unique.");
+                return null;
+            }
+        }
+
+        // Test if the format string is correctly
+        final String nextFormat() {
+            String format = at.next();
+            if (format == null) {
+                errorat("Expected format missing");
+                valid = false;
+                return null;
+            }
+            if (!at.isQuoted()) {
+                errorat("Format '%s' must be quoted", format);
+                valid = false;
+                return null;
+            }
+            return format;
+        }
+
+        final Set<FormatCase> parseFormatCase(String[] s, int i) {
+            return parseFormatSelectorStar(s, i, FormatCase.class, EnumSet.allOf(FormatCase.class), "case");
+        }
+
+        final Set<FormatAction> parseFormatAction(String[] s, int i) {
+            return parseFormatSelectorStar(s, i, FormatAction.class,
+                    EnumSet.of(FormatAction.ADDED, FormatAction.MODIFIED, FormatAction.REPLACED), "action");
+        }
+
+        final Set<FormatResolve> parseFormatResolve(String[] s, int i) {
+            return parseFormatSelectorStar(s, i, FormatResolve.class,
+                    EnumSet.of(FormatResolve.DEFINED, FormatResolve.NOTDEFINED), "resolve");
+        }
+
+        final Set<FormatWhen> parseFormatWhen(String[] s, int i) {
+            return parseFormatSelectorStar(s, i, FormatWhen.class, EnumSet.of(FormatWhen.PRIMARY), "when");
+        }
+
+        /**
+         * In a selector x-y-z , parse x, y, or z -- whether they are missing,
+         * or a comma separated list of identifiers and stars.
+         *
+         * @param <E> The enum this selector should belong to
+         * @param sa The array of selector strings
+         * @param i The index of which selector string to use
+         * @param klass The class of the enum that should be used
+         * @param defaults The set of enum values to use if the selector is
+         * missing
+         * @return The set of enum values specified by this selector
+         */
+        final <E extends Enum<E>> Set<E> parseFormatSelectorStar(String[] sa, int i, Class<E> klass, EnumSet<E> defaults, String label) {
+            String s = sa.length > i
+                    ? sa[i]
+                    : null;
+            if (s == null || s.isEmpty()) {
+                return defaults;
+            }
+            Set<E> set = EnumSet.noneOf(klass);
+            EnumSet<E> values = EnumSet.allOf(klass);
+            for (String as : s.split(",")) {
+                if (as.equals("*")) {
+                    set.addAll(values);
+                } else if (!as.isEmpty()) {
+                    set.add(parseFormatSelector(as, values, label));
+                }
+            }
+            return set;
+        }
+
+        /**
+         * In a x-y-a,b selector, parse an x, y, a, or b -- that is an
+         * identifier
+         *
+         * @param <E> The enum this selector should belong to
+         * @param s The string to parse: x, y, or z
+         * @param values The allowed of this enum
+         * @return The enum value
+         */
+        final <E extends Enum<E>> E parseFormatSelector(String s, EnumSet<E> values, String label) {
+            if (s == null) {
+                valid = false;
+                return null;
+            }
+            String u = s.toUpperCase(Locale.US);
+            for (E c : values) {
+                if (c.name().startsWith(u)) {
+                    return c;
+                }
+            }
+
+            errorat("Not a valid %s: %s, must be one of: %s", label, s,
+                    values.stream().map(v -> v.name().toLowerCase(Locale.US)).collect(Collectors.joining(" ")));
+            valid = false;
+            return values.iterator().next();
+        }
+
+        final void printFormatHelp() {
+            hard("Set the format for reporting a snippet event.");
+            hard("");
+            hard("/set format <mode> \"<format>\" <selector>...");
+            hard("");
+            hard("Where <mode> is the name of a previously defined feedback mode -- see '/help /set newmode'.");
+            hard("Where <format> is a quoted string which will have these field substitutions:");
+            hard("   {action}    == The action, e.g.: Added, Modified, Assigned, ...");
+            hard("   {name}      == The name, e.g.: the variable name, ...");
+            hard("   {type}      == The type name");
+            hard("   {resolve}   == Unresolved info, e.g.: ', however, it cannot be invoked until'");
+            hard("   {result}    == The result value");
+            hard("   {when}      == The entered snippet or a resultant update");
+            hard("   {pre}       == The feedback prefix");
+            hard("   {post}      == The feedback postfix");
+            hard("   {errorpre}  == The error prefix");
+            hard("   {errorpost} == The error postfix");
+            hard("Use '/set field' to set the format of these substitutions.");
+            hard("Where <selector> is the context in which the format is applied.");
+            hard("The structure of selector is: <case>[-<action>[-<when>]]");
+            hard("Where each field component may be missing (indicating defaults),");
+            hard("star (indicating all), or a comma separated list of field values.");
+            hard("For case, the field values are:");
+            hardEnums(EnumSet.allOf(FormatCase.class), ev -> ev.doc);
+            hard("For action, the field values are:");
+            hardEnums(EnumSet.allOf(FormatAction.class), ev -> ev.doc);
+            hard("For when, the field values are:");
+            hardEnums(EnumSet.allOf(FormatWhen.class), ev -> ev.doc);
+            hard("");
+            hard("Example:");
+            hard("   /set format example '{pre}{action} variable {name}, reset to null{post}' varreset-*-update");
+        }
+
+        final void printFieldHelp() {
+            hard("Set the format of a field substitution as used in '/set format'.");
+            hard("");
+            hard("/set field <mode> <field> \"<format>\" <selector>...");
+            hard("");
+            hard("Where <mode> is the name of a previously defined feedback mode -- see '/set newmode'.");
+            hard("Where <field> is context-specific format to set, each with its own selector structure:");
+            hard("   action    == The action. The selector: <action>-<when>.");
+            hard("   name      == The name.  '%%s' is the name.  No selectors.");
+            hard("   type      == The type name.  '%%s' is the type. No selectors.");
+            hard("   resolve   == Unresolved info.  '%%s' is the unresolved list. The selector: <resolve>-<when>.");
+            hard("   result    == The result value.  '%%s' is the result value. No selectors.");
+            hard("   when      == The entered snippet or a resultant update. The selector: <when>");
+            hard("   pre       == The feedback prefix. No selectors.");
+            hard("   post      == The feedback postfix. No selectors.");
+            hard("   errorpre  == The error prefix. No selectors.");
+            hard("   errorpost == The error postfix. No selectors.");
+            hard("Where <format> is a quoted string -- see the description specific to the field (above).");
+            hard("Where <selector> is the context in which the format is applied (see above).");
+            hard("For action, the field values are:");
+            hardEnums(EnumSet.allOf(FormatAction.class), ev -> ev.doc);
+            hard("For when, the field values are:");
+            hardEnums(EnumSet.allOf(FormatWhen.class), ev -> ev.doc);
+            hard("For resolve, the field values are:");
+            hardEnums(EnumSet.allOf(FormatResolve.class), ev -> ev.doc);
+            hard("");
+            hard("Example:");
+            hard("   /set field example resolve ' which cannot be invoked until%%s is declared' defined-update");
+        }
+
+        final void printFeedbackHelp() {
+            hard("Set the feedback mode describing displayed feedback for entered snippets and commands.");
+            hard("");
+            hard("/set feedback <mode>");
+            hard("");
+            hard("Where <mode> is the name of a previously defined feedback mode.");
+            hard("Currently defined feedback modes:");
+            modeMap.keySet().stream()
+                    .forEach(m -> hard("   %s", m));
+            hard("User-defined modes can be added, see '/help /set newmode'");
+        }
+
+        final void printNewModeHelp() {
+            hard("Create a user-defined feedback mode, optionally copying from an existing mode.");
+            hard("");
+            hard("/set newmode <new-mode> [command|quiet [<old-mode>]]");
+            hard("");
+            hard("Where <new-mode> is the name of a mode you wish to create.");
+            hard("Where <old-mode> is the name of a previously defined feedback mode.");
+            hard("If <old-mode> is present, its settings are copied to the new mode.");
+            hard("'command' vs 'quiet' determines if informative/verifying command feedback is displayed.");
+            hard("");
+            hard("Once the new mode is created, use '/set format', '/set field', and '/set prompt' to configure it.");
+            hard("Use '/set feedback' to use the new mode.");
+        }
+
+        final void printPromptHelp() {
+            hard("Set the prompts.  Both the normal prompt and the continuation-prompt must be set.");
+            hard("");
+            hard("/set prompt <mode> \"<prompt>\" \"<continuation-propmt>\"");
+            hard("");
+            hard("Where <mode> is the name of a previously defined feedback mode.");
+            hard("Where <prompt> and <continuation-propmt> are quoted strings printed as input promptds;");
+            hard("Both may optionally contain '%%s' which will be substituted with the next snippet id --");
+            hard("note that what is entered may not be assigned that id, for example it may be an error or command.");
+            hard("The continuation-prompt is used on the second and subsequent lines of a multi-line snippet.");
+        }
+    }
+}
--- a/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,6 +1,5 @@
-
 /*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,7 +34,6 @@
 import java.io.InputStream;
 import java.io.PrintStream;
 import java.io.Reader;
-import java.io.StreamTokenizer;
 import java.io.StringReader;
 import java.nio.charset.Charset;
 import java.nio.file.AccessDeniedException;
@@ -66,24 +64,25 @@
 
 import jdk.internal.jshell.debug.InternalDebugControl;
 import jdk.internal.jshell.tool.IOContext.InputInterruptedException;
+import jdk.jshell.DeclarationSnippet;
 import jdk.jshell.Diag;
 import jdk.jshell.EvalException;
+import jdk.jshell.ExpressionSnippet;
+import jdk.jshell.ImportSnippet;
 import jdk.jshell.JShell;
-import jdk.jshell.Snippet;
-import jdk.jshell.DeclarationSnippet;
-import jdk.jshell.TypeDeclSnippet;
+import jdk.jshell.JShell.Subscription;
 import jdk.jshell.MethodSnippet;
 import jdk.jshell.PersistentSnippet;
-import jdk.jshell.VarSnippet;
-import jdk.jshell.ExpressionSnippet;
+import jdk.jshell.Snippet;
 import jdk.jshell.Snippet.Status;
+import jdk.jshell.Snippet.SubKind;
+import jdk.jshell.SnippetEvent;
 import jdk.jshell.SourceCodeAnalysis;
 import jdk.jshell.SourceCodeAnalysis.CompletionInfo;
 import jdk.jshell.SourceCodeAnalysis.Suggestion;
-import jdk.jshell.SnippetEvent;
+import jdk.jshell.TypeDeclSnippet;
 import jdk.jshell.UnresolvedReferenceException;
-import jdk.jshell.Snippet.SubKind;
-import jdk.jshell.JShell.Subscription;
+import jdk.jshell.VarSnippet;
 
 import static java.nio.file.StandardOpenOption.CREATE;
 import static java.nio.file.StandardOpenOption.TRUNCATE_EXISTING;
@@ -94,7 +93,13 @@
 import java.util.Spliterators;
 import java.util.function.Function;
 import java.util.function.Supplier;
+import jdk.internal.jshell.tool.Feedback.FormatAction;
+import jdk.internal.jshell.tool.Feedback.FormatCase;
+import jdk.internal.jshell.tool.Feedback.FormatResolve;
+import jdk.internal.jshell.tool.Feedback.FormatWhen;
 import static java.util.stream.Collectors.toList;
+import static jdk.jshell.Snippet.Kind.METHOD;
+import static java.util.stream.Collectors.toMap;
 import static jdk.jshell.Snippet.SubKind.VAR_VALUE_SUBKIND;
 
 /**
@@ -103,6 +108,7 @@
  */
 public class JShellTool {
 
+    private static final String LINE_SEP = System.getProperty("line.separator");
     private static final Pattern LINEBREAK = Pattern.compile("\\R");
     private static final Pattern HISTORY_ALL_START_FILENAME = Pattern.compile(
             "((?<cmd>(all|history|start))(\\z|\\p{javaWhitespace}+))?(?<filename>.*)");
@@ -116,6 +122,8 @@
     final PrintStream userout;
     final PrintStream usererr;
 
+    final Feedback feedback = new Feedback();
+
     /**
      * The constructor for the tool (used by tool launch via main and by test
      * harnesses to capture ins and outs.
@@ -137,6 +145,70 @@
         this.userin = userin;
         this.userout = userout;
         this.usererr = usererr;
+        initializeFeedbackModes();
+    }
+
+    /**
+     * Create the default set of feedback modes
+     */
+    final void initializeFeedbackModes() {
+        // Initialize normal feedback mode
+        cmdSet("newmode normal command");
+        cmdSet("prompt normal '\n-> ' '>> '");
+        cmdSet("field normal pre '|  '");
+        cmdSet("field normal post '%n'");
+        cmdSet("field normal errorpre '|  '");
+        cmdSet("field normal errorpost '%n'");
+        cmdSet("field normal action 'Added' added-primary");
+        cmdSet("field normal action 'Modified' modified-primary");
+        cmdSet("field normal action 'Replaced' replaced-primary");
+        cmdSet("field normal action 'Overwrote' overwrote-primary");
+        cmdSet("field normal action 'Dropped' dropped-primary");
+        cmdSet("field normal action 'Rejected' rejected-primary");
+        cmdSet("field normal action '  Update added' added-update");
+        cmdSet("field normal action '  Update modified' modified-update");
+        cmdSet("field normal action '  Update replaced' replaced-update");
+        cmdSet("field normal action '  Update overwrote' overwrote-update");
+        cmdSet("field normal action '  Update dropped' dropped-update");
+        cmdSet("field normal action '  Update rejected' rejected-update");
+        cmdSet("field normal resolve '' ok-*");
+        cmdSet("field normal resolve ', however, it cannot be invoked until%s is declared' defined-primary");
+        cmdSet("field normal resolve ', however, it cannot be referenced until%s is declared' notdefined-primary");
+        cmdSet("field normal resolve ' which cannot be invoked until%s is declared' defined-update");
+        cmdSet("field normal resolve ' which cannot be referenced until%s is declared' notdefined-update");
+        cmdSet("field normal name '%s'");
+        cmdSet("field normal type '%s'");
+        cmdSet("field normal result '%s'");
+
+        cmdSet("format normal '' *-*-*");
+
+        cmdSet("format normal '{pre}{action} class {name}{resolve}{post}' class");
+        cmdSet("format normal '{pre}{action} interface {name}{resolve}{post}' interface");
+        cmdSet("format normal '{pre}{action} enum {name}{resolve}{post}' enum");
+        cmdSet("format normal '{pre}{action} annotation interface {name}{resolve}{post}' annotation");
+
+        cmdSet("format normal '{pre}{action} method {name}({type}){resolve}{post}' method");
+
+        cmdSet("format normal '{pre}{action} variable {name} of type {type}{resolve}{post}' vardecl");
+        cmdSet("format normal '{pre}{action} variable {name} of type {type} with initial value {result}{resolve}{post}' varinit");
+        cmdSet("format normal '{pre}{action} variable {name}{resolve}{post}' vardeclrecoverable");
+        cmdSet("format normal '{pre}{action} variable {name}, reset to null{post}' varreset-*-update");
+
+        cmdSet("format normal '{pre}Expression value is: {result}{post}" +
+                "{pre}  assigned to temporary variable {name} of type {type}{post}' expression");
+        cmdSet("format normal '{pre}Variable {name} of type {type} has value {result}{post}' varvalue");
+        cmdSet("format normal '{pre}Variable {name} has been assigned the value {result}{post}' assignment");
+
+        cmdSet("feedback normal");
+
+        // Initialize off feedback mode
+        cmdSet("newmode off quiet");
+        cmdSet("prompt off '-> ' '>> '");
+        cmdSet("field off pre '|  '");
+        cmdSet("field off post '%n'");
+        cmdSet("field off errorpre '|  '");
+        cmdSet("field off errorpost '%n'");
+        cmdSet("format off '' *-*-*");
     }
 
     private IOContext input = null;
@@ -150,7 +222,6 @@
     private boolean debug = false;
     private boolean displayPrompt = true;
     public boolean testPrompt = false;
-    private Feedback feedback = Feedback.Default;
     private String cmdlineClasspath = null;
     private String cmdlineStartup = null;
     private String[] editor = null;
@@ -185,6 +256,15 @@
 
     Map<Snippet,SnippetInfo> mapSnippet;
 
+    /**
+     * Is the input/output currently interactive
+     *
+     * @return true if console
+     */
+    boolean interactive() {
+        return input != null && input.interactiveOutput();
+    }
+
     void debug(String format, Object... args) {
         if (debug) {
             cmderr.printf(format + "\n", args);
@@ -192,38 +272,98 @@
     }
 
     /**
-     * For more verbose feedback modes
+     * Base output for command output -- no pre- or post-fix
+     *
+     * @param printf format
+     * @param printf args
+     */
+    void rawout(String format, Object... args) {
+        cmdout.printf(format, args);
+    }
+
+    /**
+     * Must show command output
+     *
+     * @param format printf format
+     * @param args printf args
+     */
+    void hard(String format, Object... args) {
+        rawout(feedback.getPre() + format + feedback.getPost(), args);
+    }
+
+    /**
+     * Error command output
+     *
+     * @param format printf format
+     * @param args printf args
+     */
+    void error(String format, Object... args) {
+        rawout(feedback.getErrorPre() + format + feedback.getErrorPost(), args);
+    }
+
+    /**
+     * Optional output
+     *
      * @param format printf format
      * @param args printf args
      */
     void fluff(String format, Object... args) {
-        if (feedback() != Feedback.Off && feedback() != Feedback.Concise) {
+        if (feedback.shouldDisplayCommandFluff() && interactive()) {
             hard(format, args);
         }
     }
 
     /**
-     * For concise feedback mode only
+     * Optional output -- with embedded per- and post-fix
+     *
      * @param format printf format
      * @param args printf args
      */
-    void concise(String format, Object... args) {
-        if (feedback() == Feedback.Concise) {
-            hard(format, args);
+    void fluffRaw(String format, Object... args) {
+        if (feedback.shouldDisplayCommandFluff() && interactive()) {
+            rawout(format, args);
+        }
+    }
+
+    <T> void hardPairs(Stream<T> stream, Function<T, String> a, Function<T, String> b) {
+        Map<String, String> a2b = stream.collect(toMap(a, b,
+                (m1, m2) -> m1,
+                () -> new LinkedHashMap<>()));
+        int aLen = 0;
+        for (String av : a2b.keySet()) {
+            aLen = Math.max(aLen, av.length());
+        }
+        String format = "   %-" + aLen + "s -- %s";
+        String indentedNewLine = LINE_SEP + feedback.getPre()
+                + String.format("   %-" + (aLen + 4) + "s", "");
+        for (Entry<String, String> e : a2b.entrySet()) {
+            hard(format, e.getKey(), e.getValue().replaceAll("\n", indentedNewLine));
         }
     }
 
     /**
-     * For all feedback modes -- must show
-     * @param format printf format
-     * @param args printf args
+     * User custom feedback mode only
+     *
+     * @param fcase Event to report
+     * @param update Is this an update (rather than primary)
+     * @param fa Action
+     * @param fr Resolution status
+     * @param name Name string
+     * @param type Type string or null
+     * @param result Result value or null
+     * @param unresolved The unresolved symbols
      */
-    void hard(String format, Object... args) {
-        cmdout.printf("|  " + format + "\n", args);
+    void custom(FormatCase fcase, boolean update, FormatAction fa, FormatResolve fr,
+            String name, String type, String unresolved, String result) {
+        String format = feedback.getFormat(fcase,
+                (update ? FormatWhen.UPDATE : FormatWhen.PRIMARY), fa, fr,
+                name != null, type != null, result != null);
+        fluffRaw(format, unresolved, name, type, result);
     }
 
     /**
      * Trim whitespace off end of string
+     *
      * @param s
      * @return
      */
@@ -276,8 +416,8 @@
         }
 
         if (regenerateOnDeath) {
-            fluff("Welcome to JShell -- Version %s", version());
-            fluff("Type /help for help");
+            hard("Welcome to JShell -- Version %s", version());
+            hard("Type /help for help");
         }
 
         try {
@@ -369,14 +509,14 @@
     }
 
     private void printUsage() {
-        cmdout.printf("Usage:   jshell <options> <load files>\n");
-        cmdout.printf("where possible options include:\n");
-        cmdout.printf("  -classpath <path>          Specify where to find user class files\n");
-        cmdout.printf("  -cp <path>                 Specify where to find user class files\n");
-        cmdout.printf("  -startup <file>            One run replacement for the start-up definitions\n");
-        cmdout.printf("  -nostartup                 Do not run the start-up definitions\n");
-        cmdout.printf("  -help                      Print a synopsis of standard options\n");
-        cmdout.printf("  -version                   Version information\n");
+        rawout("Usage:   jshell <options> <load files>\n");
+        rawout("where possible options include:\n");
+        rawout("  -classpath <path>          Specify where to find user class files\n");
+        rawout("  -cp <path>                 Specify where to find user class files\n");
+        rawout("  -startup <file>            One run replacement for the start-up definitions\n");
+        rawout("  -nostartup                 Do not run the start-up definitions\n");
+        rawout("  -help                      Print a synopsis of standard options\n");
+        rawout("  -version                   Version information\n");
     }
 
     private void resetState() {
@@ -460,10 +600,8 @@
                                             ? "\u0005" //ENQ
                                             : "\u0006" //ACK
                                     : incomplete.isEmpty()
-                                            ? feedback() == Feedback.Concise
-                                                    ? "-> "
-                                                    : "\n-> "
-                                            : ">> "
+                                            ? feedback.getPrompt(currentNameSpace.tidNext())
+                                            : feedback.getContinuationPrompt(currentNameSpace.tidNext())
                     ;
                 } else {
                     prompt = "";
@@ -541,7 +679,7 @@
         Command[] candidates = findCommand(cmd, c -> c.kind.isRealCommand);
         if (candidates.length == 0) {
             if (!rerunHistoryEntryById(cmd.substring(1))) {
-                hard("No such command or snippet id: %s", cmd);
+                error("No such command or snippet id: %s", cmd);
                 fluff("Type /help for help.");
             }
         } else if (candidates.length == 1) {
@@ -552,7 +690,7 @@
                 addToReplayHistory((command.command + " " + arg).trim());
             }
         } else {
-            hard("Command: %s is ambiguous: %s", cmd, Arrays.stream(candidates).map(c -> c.command).collect(Collectors.joining(", ")));
+            error("Command: %s is ambiguous: %s", cmd, Arrays.stream(candidates).map(c -> c.command).collect(Collectors.joining(", ")));
             fluff("Type /help for help.");
         }
     }
@@ -635,45 +773,6 @@
         }
     }
 
-    class ArgTokenizer extends StreamTokenizer {
-
-        ArgTokenizer(String arg) {
-            super(new StringReader(arg));
-            resetSyntax();
-            wordChars(0x00, 0xFF);
-            quoteChar('"');
-            quoteChar('\'');
-
-            whitespaceChars(0x09, 0x0D);
-            whitespaceChars(0x1C, 0x20);
-            whitespaceChars(0x85, 0x85);
-            whitespaceChars(0xA0, 0xA0);
-            whitespaceChars(0x1680, 0x1680);
-            whitespaceChars(0x180E, 0x180E);
-            whitespaceChars(0x2000, 0x200A);
-            whitespaceChars(0x202F, 0x202F);
-            whitespaceChars(0x205F, 0x205F);
-            whitespaceChars(0x3000, 0x3000);
-        }
-
-        String next() {
-            try {
-                nextToken();
-            } catch (Throwable t) {
-                return null;
-            }
-            return sval;
-        }
-
-        String val() {
-            return sval;
-        }
-
-        boolean isQuoted() {
-            return ttype == '\'' || ttype == '"';
-        }
-    }
-
     static final class FixedCompletionProvider implements CompletionProvider {
 
         private final String[] alternatives;
@@ -801,16 +900,9 @@
                 "  -- List the snippet with the specified snippet id\n",
                 arg -> cmdList(arg),
                 editKeywordCompletion()));
-        registerCommand(new Command("/seteditor", "<command>", "set the external editor command to use",
-                "Specify the command to launch for the /edit command.\n" +
-                "The command is an operating system dependent string.\n" +
-                "The command may include space-separated arguments (such as flags).\n" +
-                "When /edit is used, temporary file to edit will be appended as the last argument.\n",
-                arg -> cmdSetEditor(arg),
-                EMPTY_COMPLETION_PROVIDER));
         registerCommand(new Command("/edit", "<name or id>", "edit a source entry referenced by name or id",
                 "Edit a snippet or snippets of source in an external editor.\n" +
-                "The editor to use is set with /seteditor.\n" +
+                "The editor to use is set with /set editor.\n" +
                 "If no editor has been set, a simple editor will be launched.\n\n" +
                 "/edit <name>\n" +
                 "  -- Edit the snippet or snippets with the specified name (preference for active snippets)\n" +
@@ -875,7 +967,7 @@
                 "   * Start-up code is re-executed.\n" +
                 "   * The execution state is restarted.\n" +
                 "   * The classpath is cleared.\n" +
-                "Tool settings are maintained: /feedback, /prompt, and /seteditor\n" +
+                "Tool settings are maintained, as set with: /set ...\n" +
                 "Save any work before using this command\n",
                 arg -> cmdReset(),
                 EMPTY_COMPLETION_PROVIDER));
@@ -895,25 +987,6 @@
                 "  -- With the 'quiet' argument the replay is not shown.  Errors will display.\n",
                 arg -> cmdReload(arg),
                 reloadCompletion()));
-        registerCommand(new Command("/feedback", "<level>", "feedback information: off, concise, normal, verbose, default, or ?",
-                "Set the level of feedback describing the effect of commands and snippets.\n\n" +
-                "/feedback off\n" +
-                "  -- Give no feedback\n" +
-                "/feedback concise\n" +
-                "  -- Brief and generally symbolic feedback\n" +
-                "/feedback normal\n" +
-                "  -- Give a natural language description of the actions\n" +
-                "/feedback verbose\n" +
-                "  -- Like normal but with side-effects described\n" +
-                "/feedback default\n" +
-                "  -- Same as normal for user input, off for input from a file\n",
-                arg -> cmdFeedback(arg),
-                new FixedCompletionProvider("off", "concise", "normal", "verbose", "default", "?")));
-        registerCommand(new Command("/prompt", null, "toggle display of a prompt",
-                "Toggle between displaying an input prompt and not displaying a prompt.\n" +
-                "Particularly useful when pasting large amounts of text.\n",
-                arg -> cmdPrompt(),
-                EMPTY_COMPLETION_PROVIDER));
         registerCommand(new Command("/classpath", "<path>", "add a path to the classpath",
                 "Append a additional path to the classpath.\n",
                 arg -> cmdClasspath(arg),
@@ -923,10 +996,6 @@
                 "Display the history of snippet and command input since this jshell was launched.\n",
                 arg -> cmdHistory(),
                 EMPTY_COMPLETION_PROVIDER));
-        registerCommand(new Command("/setstart", "<file>", "read file and set as the new start-up definitions",
-                "The contents of the specified file become the default start-up snippets and commands.\n",
-                arg -> cmdSetStart(arg),
-                FILE_COMPLETION_PROVIDER));
         registerCommand(new Command("/debug", null, "toggle debugging of the jshell",
                 "Display debugging information for the jshelll implementation.\n" +
                 "0: Debugging off\n" +
@@ -951,6 +1020,37 @@
                 "  -- Display information about the specified help subject. Example: /help intro\n",
                 arg -> cmdHelp(arg),
                 EMPTY_COMPLETION_PROVIDER));
+        registerCommand(new Command("/set", "editor|start|feedback|newmode|prompt|format|field ...", "set jshell configuration information",
+                "Set jshell configuration information, including:\n" +
+                "the external editor to use, the start-up definitions to use, a new feedback mode,\n" +
+                "the command prompt, the feedback mode to use, or the format of output.\n" +
+                "\n" +
+                "/set editor <command> <optional-arg>...\n" +
+                "  -- Specify the command to launch for the /edit command.\n" +
+                "     The <command> is an operating system dependent string.\n" +
+                "\n" +
+                "/set start <file>\n" +
+                "  -- The contents of the specified <file> become the default start-up snippets and commands.\n" +
+                "\n" +
+                "/set feedback <mode>\n" +
+                "  -- Set the feedback mode describing displayed feedback for entered snippets and commands.\n" +
+                "\n" +
+                "/set newmode <new-mode> [command|quiet [<old-mode>]]\n" +
+                "  -- Create a user-defined feedback mode, optionally copying from an existing mode.\n" +
+                "\n" +
+                "/set prompt <mode> \"<prompt>\" \"<continuation-prompt>\"\n" +
+                "  -- Set the displayed prompts for a given feedback mode.\n" +
+                "\n" +
+                "/set format <mode> \"<format>\" <selector>...\n" +
+                "  -- Configure a feedback mode by setting the format to use in a specified set of cases.\n" +
+                "\n" +
+                "/set field name|type|result|when|action|resolve|pre|post|errorpre|errorpost \"<format>\"  <format-case>...\n" +
+                "  -- Set the format of a field within the <format-string> of a \"/set format\" command\n" +
+                "\n" +
+                "To get more information about one of these forms, use /help with the form specified.\n" +
+                "For example:   /help /set format\n",
+                arg -> cmdSet(arg),
+                new FixedCompletionProvider("format", "field", "feedback", "prompt", "newmode", "start", "editor")));
         registerCommand(new Command("/?", "", "get information about jshell",
                 "Display information about jshell (abbreviation for /help).\n" +
                 "/?\n" +
@@ -1051,21 +1151,138 @@
 
     // --- Command implementations ---
 
-    boolean cmdSetEditor(String arg) {
-        if (arg.isEmpty()) {
-            hard("/seteditor requires a path argument");
+    private static final String[] setSub = new String[]{
+        "format", "field", "feedback", "newmode", "prompt", "editor", "start"};
+
+    // The /set command.  Currently /set format, /set field and /set feedback.
+    // Other commands will fold here, see: 8148317
+    final boolean cmdSet(String arg) {
+        ArgTokenizer at = new ArgTokenizer(arg.trim());
+        String which = setSubCommand(at);
+        if (which == null) {
             return false;
-        } else {
-            List<String> ed = new ArrayList<>();
-            ArgTokenizer at = new ArgTokenizer(arg);
-            String n;
-            while ((n = at.next()) != null) ed.add(n);
-            editor = ed.toArray(new String[ed.size()]);
-            fluff("Editor set to: %s", arg);
-            return true;
+        }
+        switch (which) {
+            case "format":
+                return feedback.setFormat(this, at);
+            case "field":
+                return feedback.setField(this, at);
+            case "feedback":
+                return feedback.setFeedback(this, at);
+            case "newmode":
+                return feedback.setNewMode(this, at);
+            case "prompt":
+                return feedback.setPrompt(this, at);
+            case "editor": {
+                String prog = at.next();
+                if (prog == null) {
+                    hard("The '/set editor' command requires a path argument");
+                    return false;
+                } else {
+                    List<String> ed = new ArrayList<>();
+                    ed.add(prog);
+                    String n;
+                    while ((n = at.next()) != null) {
+                        ed.add(n);
+                    }
+                    editor = ed.toArray(new String[ed.size()]);
+                    fluff("Editor set to: %s", arg);
+                    return true;
+                }
+            }
+            case "start": {
+                String filename = at.next();
+                if (filename == null) {
+                    hard("The '/set start' command requires a filename argument.");
+                } else {
+                    try {
+                        byte[] encoded = Files.readAllBytes(toPathResolvingUserHome(filename));
+                        String init = new String(encoded);
+                        PREFS.put(STARTUP_KEY, init);
+                    } catch (AccessDeniedException e) {
+                        hard("File '%s' for /set start is not accessible.", filename);
+                        return false;
+                    } catch (NoSuchFileException e) {
+                        hard("File '%s' for /set start is not found.", filename);
+                        return false;
+                    } catch (Exception e) {
+                        hard("Exception while reading start set file: %s", e);
+                        return false;
+                    }
+                }
+                return true;
+            }
+            default:
+                hard("Error: Invalid /set argument: %s", which);
+                return false;
         }
     }
 
+    boolean printSetHelp(ArgTokenizer at) {
+        String which = setSubCommand(at);
+        if (which == null) {
+            return false;
+        }
+        switch (which) {
+            case "format":
+                feedback.printFormatHelp(this);
+                return true;
+            case "field":
+                feedback.printFieldHelp(this);
+                return true;
+            case "feedback":
+                feedback.printFeedbackHelp(this);
+                return true;
+            case "newmode":
+                feedback.printNewModeHelp(this);
+                return true;
+            case "prompt":
+                feedback.printPromptHelp(this);
+                return true;
+            case "editor":
+                hard("Specify the command to launch for the /edit command.");
+                hard("");
+                hard("/set editor <command> <optional-arg>...");
+                hard("");
+                hard("The <command> is an operating system dependent string.");
+                hard("The <command> may include space-separated arguments (such as flags) -- <optional-arg>....");
+                hard("When /edit is used, the temporary file to edit will be appended as the last argument.");
+                return true;
+            case "start":
+                hard("Set the start-up configuration -- a sequence of snippets and commands read at start-up.");
+                hard("");
+                hard("/set start <file>");
+                hard("");
+                hard("The contents of the specified <file> become the default start-up snippets and commands --");
+                hard("which are run when the jshell tool is started or reset.");
+                return true;
+            default:
+                hard("Error: Invalid /set argument: %s", which);
+                return false;
+        }
+    }
+
+    String setSubCommand(ArgTokenizer at) {
+        String[] matches = at.next(setSub);
+        if (matches == null) {
+            error("The /set command requires arguments. See: /help /set");
+            return null;
+        } else if (matches.length == 0) {
+            error("Not a valid argument to /set: %s", at.val());
+            fluff("/set is followed by one of: %s", Arrays.stream(setSub)
+                    .collect(Collectors.joining(", "))
+            );
+            return null;
+        } else if (matches.length > 1) {
+            error("Ambiguous argument to /set: %s", at.val());
+            fluff("Use one of: %s", Arrays.stream(matches)
+                    .collect(Collectors.joining(", "))
+            );
+            return null;
+        }
+        return matches[0];
+    }
+
     boolean cmdClasspath(String arg) {
         if (arg.isEmpty()) {
             hard("/classpath requires a path argument");
@@ -1137,91 +1354,50 @@
         return true;
     }
 
-    private boolean cmdFeedback(String arg) {
-        switch (arg) {
-            case "":
-            case "d":
-            case "default":
-                feedback = Feedback.Default;
-                break;
-            case "o":
-            case "off":
-                feedback = Feedback.Off;
-                break;
-            case "c":
-            case "concise":
-                feedback = Feedback.Concise;
-                break;
-            case "n":
-            case "normal":
-                feedback = Feedback.Normal;
-                break;
-            case "v":
-            case "verbose":
-                feedback = Feedback.Verbose;
-                break;
-            default:
-                hard("Follow /feedback with of the following:");
-                hard("  off       (errors and critical output only)");
-                hard("  concise");
-                hard("  normal");
-                hard("  verbose");
-                hard("  default");
-                hard("You may also use just the first letter, for example: /f c");
-                hard("In interactive mode 'default' is the same as 'normal', from a file it is the same as 'off'");
-                return false;
+    boolean cmdHelp(String arg) {
+        ArgTokenizer at = new ArgTokenizer(arg);
+        String subject = at.next();
+        if (subject != null) {
+            Command[] matches = commands.values().stream()
+                    .filter(c -> c.command.startsWith(subject))
+                    .toArray(size -> new Command[size]);
+            at.mark();
+            String sub = at.next();
+            if (sub != null && matches.length == 1 && matches[0].command.equals("/set")) {
+                at.rewind();
+                return printSetHelp(at);
+            }
+            if (matches.length > 0) {
+                for (Command c : matches) {
+                    hard("");
+                    hard("%s", c.command);
+                    hard("");
+                    hard("%s", c.help.replaceAll("\n", LINE_SEP + feedback.getPre()));
+                }
+                return true;
+            } else {
+                error("No commands or subjects start with the provided argument: %s\n\n", arg);
+            }
         }
-        fluff("Feedback mode: %s", feedback.name().toLowerCase());
-        return true;
-    }
-
-    boolean cmdHelp(String arg) {
-        if (!arg.isEmpty()) {
-            StringBuilder sb = new StringBuilder();
-            commands.values().stream()
-                    .filter(c -> c.command.startsWith(arg))
-                    .forEach(c -> {
-                        sb.append("\n");
-                        sb.append(c.command);
-                        sb.append("\n\n");
-                        sb.append(c.help);
-                        sb.append("\n");
-                    });
-            if (sb.length() > 0) {
-                cmdout.print(sb);
-                return true;
-            }
-            cmdout.printf("No commands or subjects start with the provided argument: %s\n\n", arg);
-        }
-        int synopsisLen = 0;
-        Map<String, String> synopsis2Description = new LinkedHashMap<>();
-        for (Command cmd : new LinkedHashSet<>(commands.values())) {
-            if (!cmd.kind.showInHelp)
-                continue;
-            StringBuilder synopsis = new StringBuilder();
-            synopsis.append(cmd.command);
-            if (cmd.params != null)
-                synopsis.append(" ").append(cmd.params);
-            synopsis2Description.put(synopsis.toString(), cmd.description);
-            synopsisLen = Math.max(synopsisLen, synopsis.length());
-        }
-        cmdout.println("Type a Java language expression, statement, or declaration.");
-        cmdout.println("Or type one of the following commands:\n");
-        for (Entry<String, String> e : synopsis2Description.entrySet()) {
-            cmdout.print(String.format("%-" + synopsisLen + "s", e.getKey()));
-            cmdout.print(" -- ");
-            String indentedNewLine = System.getProperty("line.separator") +
-                                     String.format("%-" + (synopsisLen + 4) + "s", "");
-            cmdout.println(e.getValue().replace("\n", indentedNewLine));
-        }
-        cmdout.println();
-        cmdout.println("For more information type '/help' followed by the name of command or a subject.");
-        cmdout.println("For example '/help /list' or '/help intro'.  Subjects:\n");
-        commands.values().stream()
-                .filter(c -> c.kind == CommandKind.HELP_SUBJECT)
-                .forEach(c -> {
-            cmdout.printf("%-12s -- %s\n", c.command, c.description);
-        });
+        hard("Type a Java language expression, statement, or declaration.");
+        hard("Or type one of the following commands:");
+        hard("");
+        hardPairs(commands.values().stream()
+                .filter(cmd -> cmd.kind.showInHelp),
+                cmd -> (cmd.params != null)
+                            ? cmd.command + " " + cmd.params
+                            : cmd.command,
+                cmd -> cmd.description
+        );
+        hard("");
+        hard("For more information type '/help' followed by the name of command or a subject.");
+        hard("For example '/help /list' or '/help intro'.  Subjects:");
+        hard("");
+        hardPairs(commands.values().stream()
+                .filter(cmd -> cmd.kind == CommandKind.HELP_SUBJECT),
+                cmd -> cmd.command,
+                cmd -> cmd.description
+        );
         return true;
     }
 
@@ -1482,13 +1658,6 @@
         return true;
     }
 
-    private boolean cmdPrompt() {
-        displayPrompt = !displayPrompt;
-        fluff("Prompt will %sdisplay. Use /prompt to toggle.", displayPrompt ? "" : "NOT ");
-        concise("Prompt: %s", displayPrompt ? "on" : "off");
-        return true;
-    }
-
     private boolean cmdReset() {
         live = false;
         fluff("Resetting state.");
@@ -1577,28 +1746,6 @@
         return true;
     }
 
-    private boolean cmdSetStart(String filename) {
-        if (filename.isEmpty()) {
-            hard("The /setstart command requires a filename argument.");
-        } else {
-            try {
-                byte[] encoded = Files.readAllBytes(toPathResolvingUserHome(filename));
-                String init = new String(encoded);
-                PREFS.put(STARTUP_KEY, init);
-            } catch (AccessDeniedException e) {
-                hard("File '%s' for /setstart is not accessible.", filename);
-                return false;
-            } catch (NoSuchFileException e) {
-                hard("File '%s' for /setstart is not found.", filename);
-                return false;
-            } catch (Exception e) {
-                hard("Exception while reading start set file: %s", e);
-                return false;
-            }
-        }
-        return true;
-    }
-
     private boolean cmdVars() {
         for (VarSnippet vk : state.variables()) {
             String val = state.status(vk) == Status.VALID
@@ -1831,14 +1978,10 @@
             printDiagnostics(source, diagnostics, true);
         } else {
             // Update
-            SubKind subkind = sn.subKind();
-            if (sn instanceof DeclarationSnippet
-                    && (feedback() == Feedback.Verbose
-                    || ste.status() == Status.OVERWRITTEN
-                    || subkind == SubKind.VAR_DECLARATION_SUBKIND
-                    || subkind == SubKind.VAR_DECLARATION_WITH_INITIALIZER_SUBKIND)) {
-                // Under the conditions, display update information
-                displayDeclarationAndValue(ste, true, null);
+            if (sn instanceof DeclarationSnippet) {
+                // display update information
+                displayDeclarationAndValue(ste, true, ste.value());
+
                 List<Diag> other = errorsOnly(diagnostics);
                 if (other.size() > 0) {
                     printDiagnostics(source, other, true);
@@ -1851,118 +1994,117 @@
     @SuppressWarnings("fallthrough")
     private void displayDeclarationAndValue(SnippetEvent ste, boolean update, String value) {
         Snippet key = ste.snippet();
-        String declared;
+        FormatAction action;
         Status status = ste.status();
         switch (status) {
             case VALID:
             case RECOVERABLE_DEFINED:
             case RECOVERABLE_NOT_DEFINED:
                 if (ste.previousStatus().isActive) {
-                    declared = ste.isSignatureChange()
-                        ? "Replaced"
-                        : "Modified";
+                    action = ste.isSignatureChange()
+                        ? FormatAction.REPLACED
+                        : FormatAction.MODIFIED;
                 } else {
-                    declared = "Added";
+                    action = FormatAction.ADDED;
                 }
                 break;
             case OVERWRITTEN:
-                declared = "Overwrote";
+                action = FormatAction.OVERWROTE;
                 break;
             case DROPPED:
-                declared = "Dropped";
+                action = FormatAction.DROPPED;
                 break;
             case REJECTED:
-                declared = "Rejected";
+                action = FormatAction.REJECTED;
                 break;
             case NONEXISTENT:
             default:
                 // Should not occur
-                declared = ste.previousStatus().toString() + "=>" + status.toString();
+                error("Unexpected status: " + ste.previousStatus().toString() + "=>" + status.toString());
+                return;
         }
-        if (update) {
-            declared = "  Update " + declared.toLowerCase();
-        }
-        String however;
+        FormatResolve resolution;
+        String unresolved;
         if (key instanceof DeclarationSnippet && (status == Status.RECOVERABLE_DEFINED || status == Status.RECOVERABLE_NOT_DEFINED)) {
-            String cannotUntil = (status == Status.RECOVERABLE_NOT_DEFINED)
-                    ? " cannot be referenced until"
-                    : " cannot be invoked until";
-            however = (update? " which" : ", however, it") + cannotUntil + unresolved((DeclarationSnippet) key);
+            resolution = (status == Status.RECOVERABLE_NOT_DEFINED)
+                    ? FormatResolve.NOTDEFINED
+                    : FormatResolve.DEFINED;
+            unresolved = unresolved((DeclarationSnippet) key);
         } else {
-            however = "";
+            resolution = FormatResolve.OK;
+            unresolved = "";
         }
         switch (key.subKind()) {
             case CLASS_SUBKIND:
-                fluff("%s class %s%s", declared, ((TypeDeclSnippet) key).name(), however);
+                custom(FormatCase.CLASS, update, action, resolution,
+                        ((TypeDeclSnippet) key).name(), null, unresolved, null);
                 break;
             case INTERFACE_SUBKIND:
-                fluff("%s interface %s%s", declared, ((TypeDeclSnippet) key).name(), however);
+                custom(FormatCase.INTERFACE, update, action, resolution,
+                        ((TypeDeclSnippet) key).name(), null, unresolved, null);
                 break;
             case ENUM_SUBKIND:
-                fluff("%s enum %s%s", declared, ((TypeDeclSnippet) key).name(), however);
+                custom(FormatCase.ENUM, update, action, resolution,
+                        ((TypeDeclSnippet) key).name(), null, unresolved, null);
                 break;
             case ANNOTATION_TYPE_SUBKIND:
-                fluff("%s annotation interface %s%s", declared, ((TypeDeclSnippet) key).name(), however);
+                custom(FormatCase.ANNOTATION, update, action, resolution,
+                        ((TypeDeclSnippet) key).name(), null, unresolved, null);
                 break;
             case METHOD_SUBKIND:
-                fluff("%s method %s(%s)%s", declared, ((MethodSnippet) key).name(),
-                        ((MethodSnippet) key).parameterTypes(), however);
+                custom(FormatCase.METHOD, update, action, resolution,
+                        ((MethodSnippet) key).name(), ((MethodSnippet) key).parameterTypes(), unresolved, null);
                 break;
             case VAR_DECLARATION_SUBKIND:
-                if (!update) {
-                    VarSnippet vk = (VarSnippet) key;
-                    if (status == Status.RECOVERABLE_NOT_DEFINED) {
-                        fluff("%s variable %s%s", declared, vk.name(), however);
-                    } else {
-                        fluff("%s variable %s of type %s%s", declared, vk.name(), vk.typeName(), however);
-                    }
-                    break;
-                }
-            // Fall through
             case VAR_DECLARATION_WITH_INITIALIZER_SUBKIND: {
                 VarSnippet vk = (VarSnippet) key;
                 if (status == Status.RECOVERABLE_NOT_DEFINED) {
-                    if (!update) {
-                        fluff("%s variable %s%s", declared, vk.name(), however);
-                        break;
-                    }
-                } else if (update) {
-                    if (ste.isSignatureChange()) {
-                        hard("%s variable %s, reset to null", declared, vk.name());
-                    }
+                    custom(FormatCase.VARDECLRECOVERABLE, update, action, resolution,
+                            vk.name(), null, unresolved, null);
+                } else if (update && ste.isSignatureChange()) {
+                    custom(FormatCase.VARRESET, update, action, resolution,
+                            vk.name(), null, unresolved, value);
+                } else if (key.subKind() == SubKind.VAR_DECLARATION_WITH_INITIALIZER_SUBKIND) {
+                    custom(FormatCase.VARINIT, update, action, resolution,
+                            vk.name(), vk.typeName(), unresolved, value);
                 } else {
-                    fluff("%s variable %s of type %s with initial value %s",
-                            declared, vk.name(), vk.typeName(), value);
-                    concise("%s : %s", vk.name(), value);
+                    custom(FormatCase.VARDECL, update, action, resolution,
+                            vk.name(), vk.typeName(), unresolved, value);
                 }
                 break;
             }
             case TEMP_VAR_EXPRESSION_SUBKIND: {
                 VarSnippet vk = (VarSnippet) key;
-                if (update) {
-                    hard("%s temporary variable %s, reset to null", declared, vk.name());
-                 } else {
-                    fluff("Expression value is: %s", (value));
-                    fluff("  assigned to temporary variable %s of type %s", vk.name(), vk.typeName());
-                    concise("%s : %s", vk.name(), value);
-                }
+                custom(FormatCase.EXPRESSION, update, action, resolution,
+                        vk.name(), vk.typeName(), null, value);
                 break;
             }
             case OTHER_EXPRESSION_SUBKIND:
-                fluff("Expression value is: %s", (value));
+                error("Unexpected expression form -- value is: %s", (value));
                 break;
             case VAR_VALUE_SUBKIND: {
                 ExpressionSnippet ek = (ExpressionSnippet) key;
-                fluff("Variable %s of type %s has value %s", ek.name(), ek.typeName(), (value));
-                concise("%s : %s", ek.name(), value);
+                custom(FormatCase.VARVALUE, update, action, resolution,
+                        ek.name(), ek.typeName(), null, value);
                 break;
             }
             case ASSIGNMENT_SUBKIND: {
                 ExpressionSnippet ek = (ExpressionSnippet) key;
-                fluff("Variable %s has been assigned the value %s", ek.name(), (value));
-                concise("%s : %s", ek.name(), value);
+                custom(FormatCase.ASSIGNMENT, update, action, resolution,
+                        ek.name(), ek.typeName(), null, value);
                 break;
             }
+            case SINGLE_TYPE_IMPORT_SUBKIND:
+            case TYPE_IMPORT_ON_DEMAND_SUBKIND:
+            case SINGLE_STATIC_IMPORT_SUBKIND:
+            case STATIC_IMPORT_ON_DEMAND_SUBKIND:
+                custom(FormatCase.IMPORT, update, action, resolution,
+                        ((ImportSnippet) key).name(), null, null, null);
+                break;
+            case STATEMENT_SUBKIND:
+                custom(FormatCase.STATEMENT, update, action, resolution,
+                        null, null, null, null);
+                break;
         }
     }
     //where
@@ -1998,7 +2140,7 @@
     }
     //where
     void printUnresolved(UnresolvedReferenceException ex) {
-        MethodSnippet corralled =  ex.getMethodSnippet();
+        DeclarationSnippet corralled =  ex.getSnippet();
         List<Diag> otherErrors = errorsOnly(state.diagnostics(corralled));
         StringBuilder sb = new StringBuilder();
         if (otherErrors.size() > 0) {
@@ -2014,7 +2156,10 @@
             sb.append(".");
         }
 
-        hard("Attempted to call %s which cannot be invoked until%s", corralled.name(),
+        String format = corralled.kind() == METHOD
+                ? "Attempted to call %s which cannot be invoked until%s"
+                : "Attempted to use %s which cannot be accessed until%s";
+        hard(format, corralled.name(),
                 unresolved(corralled), sb.toString());
         if (otherErrors.size() > 0) {
             printDiagnostics(corralled.source(), otherErrors, true);
@@ -2048,34 +2193,9 @@
                 sb.append(", ");
             }
         }
-        switch (unr.size()) {
-            case 0:
-                break;
-            case 1:
-                sb.append(" is declared");
-                break;
-            default:
-                sb.append(" are declared");
-                break;
-        }
         return sb.toString();
     }
 
-    enum Feedback {
-        Default,
-        Off,
-        Concise,
-        Normal,
-        Verbose
-    }
-
-    Feedback feedback() {
-        if (feedback == Feedback.Default) {
-            return input == null || input.interactiveOutput() ? Feedback.Normal : Feedback.Off;
-        }
-        return feedback;
-    }
-
     /** The current version number as a string.
      */
     static String version() {
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/CompletenessAnalyzer.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/CompletenessAnalyzer.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -231,7 +231,7 @@
 
         // Declarations and type parameters (thus expressions)
         EXTENDS(TokenKind.EXTENDS, XEXPR|XDECL),  //  extends
-        COMMA(TokenKind.COMMA, XEXPR|XDECL|XSTART),  //  ,
+        COMMA(TokenKind.COMMA, XEXPR|XDECL),  //  ,
         AMP(TokenKind.AMP, XEXPR|XDECL),  //  &
         GT(TokenKind.GT, XEXPR|XDECL),  //  >
         LT(TokenKind.LT, XEXPR|XDECL1),  //  <
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/Corraller.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.jshell;
+
+import java.util.List;
+import com.sun.source.tree.ArrayTypeTree;
+import com.sun.source.tree.ClassTree;
+import com.sun.source.tree.ExpressionTree;
+import com.sun.source.tree.MethodTree;
+import com.sun.source.tree.Tree;
+import com.sun.source.tree.VariableTree;
+import jdk.jshell.Wrap.Range;
+import static java.util.stream.Collectors.toList;
+
+/**
+ * Produce a corralled version of the Wrap for a snippet.
+ *
+ * @author Robert Field
+ */
+class Corraller {
+
+    private final int index;
+    private final String compileSource;
+    private final TreeDissector dis;
+
+    Corraller(int index, String compileSource, TreeDissector dis) {
+        this.index = index;
+        this.compileSource = compileSource;
+        this.dis = dis;
+    }
+
+    Wrap corralTree(Tree tree, String enclosingType, int indent) {
+        switch (tree.getKind()) {
+            case VARIABLE:
+                return corralVariable((VariableTree) tree, indent);
+            case CLASS:
+            case ENUM:
+            case ANNOTATION_TYPE:
+            case INTERFACE:
+                return corralType((ClassTree) tree, indent);
+            case METHOD:
+                return corralMethod((MethodTree) tree, enclosingType, indent);
+            default:
+                return null;
+        }
+    }
+
+    Wrap corralMethod(MethodTree mt) {
+        return corralMethod(mt, null, 1);
+    }
+
+    Wrap corralMethod(MethodTree mt, String enclosingType, int indent) {
+        Range modRange = dis.treeToRange(mt.getModifiers());
+        Range tpRange = dis.treeListToRange(mt.getTypeParameters());
+        Range typeRange = dis.treeToRange(mt.getReturnType());
+        String name = mt.getName().toString();
+        if ("<init>".equals(name)) {
+            name = enclosingType;
+        }
+        Range paramRange = dis.treeListToRange(mt.getParameters());
+        Range throwsRange = dis.treeListToRange(mt.getThrows());
+        return Wrap.corralledMethod(compileSource,
+                modRange, tpRange, typeRange, name, paramRange, throwsRange, index, indent);
+    }
+
+    Wrap corralVariable(VariableTree vt, int indent) {
+        String name = vt.getName().toString();
+        Range modRange = dis.treeToRange(vt.getModifiers());
+        Tree baseType = vt.getType();
+        StringBuilder sbBrackets = new StringBuilder();
+        while (baseType instanceof ArrayTypeTree) {
+            //TODO handle annotations too
+            baseType = ((ArrayTypeTree) baseType).getType();
+            sbBrackets.append("[]");
+        }
+        Range rtype = dis.treeToRange(baseType);
+        Range runit = dis.treeToRange(vt);
+        runit = new Range(runit.begin, runit.end - 1);
+        ExpressionTree it = vt.getInitializer();
+        int nameMax;
+        if (it != null) {
+            Range rinit = dis.treeToRange(it);
+            nameMax = rinit.begin - 1;
+        } else {
+            nameMax = runit.end - 1;
+        }
+        int nameStart = compileSource.lastIndexOf(name, nameMax);
+        if (nameStart < 0) {
+            throw new AssertionError("Name '" + name + "' not found");
+        }
+        int nameEnd = nameStart + name.length();
+        Range rname = new Range(nameStart, nameEnd);
+        return Wrap.corralledVar(compileSource, modRange, rtype, sbBrackets.toString(), rname, indent);
+    }
+
+    Wrap corralType(ClassTree ct, int indent) {
+        boolean isClass;
+        switch (ct.getKind()) {
+            case CLASS:
+                isClass = true;
+                break;
+            case INTERFACE:
+                isClass = false;
+                break;
+            default:
+                return null;
+        }
+        Range modRange = dis.treeToRange(ct.getModifiers());
+        String name = ct.getSimpleName().toString();
+        Range tpRange = dis.treeListToRange(ct.getTypeParameters());
+        Range extendsRange = dis.treeToRange(ct.getExtendsClause());
+        List<Range> implementsRanges = ct.getImplementsClause().stream()
+                .map(ic -> dis.treeToRange(ic))
+                .collect(toList());
+        List<Wrap> members = ct.getMembers().stream()
+                .map(t -> corralTree(t, name, indent + 1))
+                .filter(w -> w != null)
+                .collect(toList());
+        boolean hasConstructor = ct.getMembers().stream()
+                .anyMatch(t -> t.getKind() == Tree.Kind.METHOD && ((MethodTree) t).getName().toString().equals("<init>"));
+        Wrap wrap = Wrap.corralledType(compileSource, modRange, ct.getKind(), name, tpRange,
+                extendsRange, implementsRanges, members, isClass && !hasConstructor, index, indent);
+        return wrap;
+    }
+}
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/Eval.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/Eval.java	Mon Mar 14 17:51:25 2016 +0100
@@ -53,6 +53,7 @@
 import jdk.jshell.ClassTracker.ClassInfo;
 import jdk.jshell.Key.ErroneousKey;
 import jdk.jshell.Key.MethodKey;
+import jdk.jshell.Key.TypeDeclKey;
 import jdk.jshell.Snippet.SubKind;
 import jdk.jshell.TaskFactory.AnalyzeTask;
 import jdk.jshell.TaskFactory.BaseTask;
@@ -300,7 +301,8 @@
         ClassTree klassTree = (ClassTree) unitTree;
         String name = klassTree.getSimpleName().toString();
         Wrap guts = Wrap.classMemberWrap(compileSource);
-        Wrap corralled = null; //TODO
+        TypeDeclKey key = state.keyMap.keyForClass(name);
+        Wrap corralled = new Corraller(key.index(), compileSource, dis).corralType(klassTree, 1);
         Snippet snip = new TypeDeclSnippet(state.keyMap.keyForClass(name), userSource, guts,
                 name, snippetKind,
                 corralled, tds.declareReferences(), tds.bodyReferences());
@@ -362,12 +364,8 @@
         String unitName = mt.getName().toString();
         Wrap guts = Wrap.classMemberWrap(compileSource);
 
-        Range modRange = dis.treeToRange(mt.getModifiers());
-        Range tpRange = dis.treeListToRange(mt.getTypeParameters());
         Range typeRange = dis.treeToRange(mt.getReturnType());
         String name = mt.getName().toString();
-        Range paramRange = dis.treeListToRange(mt.getParameters());
-        Range throwsRange = dis.treeListToRange(mt.getThrows());
 
         String parameterTypes
                 = mt.getParameters()
@@ -378,8 +376,7 @@
 
         MethodKey key = state.keyMap.keyForMethod(name, parameterTypes);
         // rewrap with correct Key index
-        Wrap corralled = Wrap.corralledMethod(compileSource,
-                modRange, tpRange, typeRange, name, paramRange, throwsRange, key.index());
+        Wrap corralled = new Corraller(key.index(), compileSource, dis).corralMethod(mt);
         Snippet snip = new MethodSnippet(key, userSource, guts,
                 unitName, signature,
                 corralled, tds.declareReferences(), tds.bodyReferences());
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/ExecutionControl.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/ExecutionControl.java	Mon Mar 14 17:51:25 2016 +0100
@@ -225,7 +225,7 @@
                 int id = in.readInt();
                 StackTraceElement[] elems = readStackTrace();
                 Snippet si = maps.getSnippet(id);
-                throw new UnresolvedReferenceException((MethodSnippet) si, elems);
+                throw new UnresolvedReferenceException((DeclarationSnippet) si, elems);
             }
             case RESULT_KILLED: {
                 proc.out.println("Killed.");
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/TaskFactory.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/TaskFactory.java	Mon Mar 14 17:51:25 2016 +0100
@@ -61,6 +61,7 @@
 import javax.tools.FileObject;
 import jdk.jshell.MemoryFileManager.SourceMemoryJavaFileObject;
 import jdk.jshell.ClassTracker.ClassInfo;
+import jdk.Version;
 
 /**
  * The primary interface to the compiler API.  Parsing, analysis, and
@@ -73,6 +74,7 @@
     private final MemoryFileManager fileManager;
     private final JShell state;
     private String classpath = System.getProperty("java.class.path");
+    private final static Version INITIAL_SUPPORTED_VER = Version.parse("9");
 
     TaskFactory(JShell state) {
         this.state = state;
@@ -80,7 +82,8 @@
         if (compiler == null) {
             throw new UnsupportedOperationException("Compiler not available, must be run with full JDK 9.");
         }
-        if (!System.getProperty("java.specification.version").equals("9"))  {
+        Version current = Version.parse(System.getProperty("java.specification.version"));
+        if (INITIAL_SUPPORTED_VER.compareToIgnoreOpt(current) > 0)  {
             throw new UnsupportedOperationException("Wrong compiler, must be run with full JDK 9.");
         }
         this.fileManager = new MemoryFileManager(
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/UnresolvedReferenceException.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/UnresolvedReferenceException.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,33 +28,33 @@
 /**
  * Exception reported on attempting to execute a
  * {@link jdk.jshell.Snippet.Status#RECOVERABLE_DEFINED RECOVERABLE_DEFINED}
- * method.
+ * snippet.
  * <p>
  * The stack can be queried by methods on <code>Exception</code>.
  * Note that in stack trace frames representing JShell Snippets,
  * <code>StackTraceElement.getFileName()</code> will return "#" followed by
  * the Snippet id and for snippets without a method name (for example an
- * expression) <code>StackTraceElement.getMethodName()</code> will be the
+ * expression) <code>StackTraceElement.getName()</code> will be the
  * empty string.
  */
 @SuppressWarnings("serial")             // serialVersionUID intentionally omitted
 public class UnresolvedReferenceException extends Exception {
 
-    final MethodSnippet methodSnippet;
+    final DeclarationSnippet snippet;
 
-    UnresolvedReferenceException(MethodSnippet methodSnippet, StackTraceElement[] stackElements) {
-        super("Attempt to invoke method with unresolved references");
-        this.methodSnippet = methodSnippet;
+    UnresolvedReferenceException(DeclarationSnippet snippet, StackTraceElement[] stackElements) {
+        super("Attempt to use definition snippet with unresolved references");
+        this.snippet = snippet;
         this.setStackTrace(stackElements);
     }
 
     /**
-     * Return the method Snippet which has the unresolved reference(s).
-     * @return the <code>MethodSnippet</code> of the
+     * Return the Snippet which has the unresolved reference(s).
+     * @return the <code>Snippet</code> of the
      * {@link jdk.jshell.Snippet.Status#RECOVERABLE_DEFINED RECOVERABLE_DEFINED}
-     * method.
+     * definition snippet.
      */
-    public MethodSnippet getMethodSnippet() {
-        return methodSnippet;
+    public DeclarationSnippet getSnippet() {
+        return snippet;
     }
 }
--- a/langtools/src/jdk.jshell/share/classes/jdk/jshell/Wrap.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/src/jdk.jshell/share/classes/jdk/jshell/Wrap.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import com.sun.source.tree.Tree;
 import static jdk.internal.jshell.remote.RemoteCodes.DOIT_METHOD_NAME;
 
 /**
@@ -58,9 +59,18 @@
         return methodWrap("", source, "");
     }
 
-    public static Wrap corralledMethod(String source, Range modRange, Range tpRange, Range typeRange, String name, Range paramRange, Range throwsRange, int id) {
+    private static String indent(int n) {
+        return "                              ".substring(0, n * 4);
+    }
+
+    private static String nlindent(int n) {
+        return "\n" + indent(n);
+    }
+
+    public static Wrap corralledMethod(String source, Range modRange, Range tpRange,
+            Range typeRange, String name, Range paramRange, Range throwsRange, int id, int indent) {
         List<Object> l = new ArrayList<>();
-        l.add("    public static\n    ");
+        l.add(indent(indent) + ((indent == 1) ? "public static" + nlindent(indent) : ""));
         if (!modRange.isEmpty()) {
             l.add(new RangeWrap(source, modRange));
             l.add(" ");
@@ -70,17 +80,81 @@
             l.add(new RangeWrap(source, tpRange));
             l.add("> ");
         }
-        l.add(new RangeWrap(source, typeRange));
-        l.add(" " + name + "(\n        ");
-        if (paramRange != null) {
+        if (!typeRange.isEmpty()) {
+            l.add(new RangeWrap(source, typeRange));
+            l.add(" ");
+        }
+        l.add(name + "(");
+        if (paramRange != null && !paramRange.isEmpty()) {
+            l.add(nlindent(indent + 1));
             l.add(new RangeWrap(source, paramRange));
         }
-        l.add(") ");
+        l.add(")");
         if (throwsRange != null) {
-            l.add("throws ");
+            l.add(" throws ");
             l.add(new RangeWrap(source, throwsRange));
         }
-        l.add(" {\n        throw new jdk.internal.jshell.remote.RemoteResolutionException(" + id + ");\n}\n");
+        l.add(" {"
+                + nlindent(indent+1)
+                + "throw new jdk.internal.jshell.remote.RemoteResolutionException(" + id + ");"
+                + nlindent(indent)
+                + "}\n");
+        return new CompoundWrap(l.toArray());
+    }
+
+    public static Wrap corralledType(String source, Range modRange, Tree.Kind kind, String name, Range tpRange,
+            Range extendsRange, List<Range> implementsRanges, List<Wrap> members,
+            boolean defaultConstructor, int id, int indent) {
+        boolean isInterface = kind == Tree.Kind.INTERFACE;
+        List<Object> l = new ArrayList<>();
+        l.add(indent(indent) + ((indent == 1) ? "public static" + nlindent(indent) : ""));
+        if (!modRange.isEmpty()) {
+            l.add(new RangeWrap(source, modRange));
+            l.add(" ");
+        }
+        l.add((isInterface ? "interface " : "class ") + name);
+        if (tpRange != null) {
+            l.add("<");
+            l.add(new RangeWrap(source, tpRange));
+            l.add("> ");
+        }
+        if (extendsRange != null && !extendsRange.isEmpty()) {
+            l.add(" extends ");
+            l.add(new RangeWrap(source, extendsRange));
+        }
+        for (int i = 0; i < implementsRanges.size(); ++i) {
+            Range ir = implementsRanges.get(i);
+            l.add(i == 0 ? " implements " : ", ");
+            l.add(new RangeWrap(source, ir));
+        }
+        if (defaultConstructor) {
+            l.add(" {"
+                + nlindent(indent+1)
+                + ((indent == 1)? "public " : "") + name + "()  {"
+                + nlindent(indent+2)
+                + "throw new jdk.internal.jshell.remote.RemoteResolutionException(" + id + ");"
+                + nlindent(indent+1)
+                + "}\n");
+        } else {
+            l.add(" {\n");
+        }
+        l.addAll(members);
+        l.add(indent(indent) + "}\n");
+        return new CompoundWrap(l.toArray());
+    }
+
+    public static Wrap corralledVar(String source, Range modRange, Range typeRange, String brackets, Range nameRange, int indent) {
+        RangeWrap wname = new RangeWrap(source, nameRange);
+        List<Object> l = new ArrayList<>();
+        l.add(indent(indent) + ((indent == 1) ? "public static" + nlindent(indent) : ""));
+        if (!modRange.isEmpty()) {
+            l.add(new RangeWrap(source, modRange));
+            l.add(" ");
+        }
+        l.add(new RangeWrap(source, typeRange));
+        l.add(" ");
+        l.add(wname);
+        l.add(semi(wname));
         return new CompoundWrap(l.toArray());
     }
 
--- a/langtools/test/jdk/jshell/ClassesTest.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/test/jdk/jshell/ClassesTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -43,12 +43,13 @@
 import jdk.jshell.Diag;
 import static jdk.jshell.Snippet.Status.VALID;
 import static jdk.jshell.Snippet.Status.RECOVERABLE_NOT_DEFINED;
+import static jdk.jshell.Snippet.Status.RECOVERABLE_DEFINED;
 import static jdk.jshell.Snippet.Status.DROPPED;
 import static jdk.jshell.Snippet.Status.REJECTED;
+import static jdk.jshell.Snippet.Status.OVERWRITTEN;
 import static jdk.jshell.Snippet.SubKind.*;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
-import static jdk.jshell.Snippet.Status.OVERWRITTEN;
 
 @Test
 public class ClassesTest extends KullaTesting {
@@ -82,10 +83,10 @@
         TypeDeclSnippet c1 = (TypeDeclSnippet) assertDeclareFail("class A { void f() { return g(); } }", "compiler.err.prob.found.req");
         assertTypeDeclSnippet(c1, "A", REJECTED, CLASS_SUBKIND, 0, 2);
         TypeDeclSnippet c2 = classKey(assertEval("class A { int f() { return g(); } }",
-                ste(c1, REJECTED, RECOVERABLE_NOT_DEFINED, false, null)));
-        assertTypeDeclSnippet(c2, "A", RECOVERABLE_NOT_DEFINED, CLASS_SUBKIND, 1, 0);
+                ste(c1, REJECTED, RECOVERABLE_DEFINED, true, null)));
+        assertTypeDeclSnippet(c2, "A", RECOVERABLE_DEFINED, CLASS_SUBKIND, 1, 0);
         assertDrop(c2,
-                ste(c2, RECOVERABLE_NOT_DEFINED, DROPPED, false, null));
+                ste(c2, RECOVERABLE_DEFINED, DROPPED, true, null));
     }
 
     public void classDeclaration() {
--- a/langtools/test/jdk/jshell/CommandCompletionTest.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/test/jdk/jshell/CommandCompletionTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -50,13 +50,9 @@
 public class CommandCompletionTest extends ReplToolTesting {
 
     public void testCommand() {
-        assertCompletion("/f|", false, "/feedback ");
         assertCompletion("/deb|", false);
-        assertCompletion("/feedback v|", false, "verbose");
         assertCompletion("/c|", false, "/classes ", "/classpath ");
         assertCompletion("/h|", false, "/help ", "/history ");
-        assertCompletion("/feedback |", false,
-                "?", "concise", "default", "normal", "off", "verbose");
     }
 
     public void testList() {
@@ -108,7 +104,7 @@
 
     public void testSave() throws IOException {
         Compiler compiler = new Compiler();
-        assertCompletion("/s|", false, "/save ", "/seteditor ", "/setstart ");
+        assertCompletion("/s|", false, "/save ", "/set ");
         List<String> p1 = listFiles(Paths.get(""));
         Collections.addAll(p1, "all ", "history ", "start ");
         FileSystems.getDefault().getRootDirectories().forEach(s -> p1.add(s.toString()));
--- a/langtools/test/jdk/jshell/CompletenessTest.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/test/jdk/jshell/CompletenessTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,7 @@
 
 /*
  * @test
+ * @bug 8149524
  * @summary Test SourceCodeAnalysis
  * @build KullaTesting TestingInputStream
  * @run testng CompletenessTest
@@ -60,6 +61,7 @@
         "try { } finally { }",
         "try (java.util.zip.ZipFile zf = new java.util.zip.ZipFile(zipFileName)) { }",
         "foo: while (true) { printf(\"Innn\"); break foo; }",
+        "class Case<E1 extends Enum<E1>, E2 extends Enum<E2>, E3 extends Enum<E3>> {}",
         ";",
     };
 
--- a/langtools/test/jdk/jshell/DropTest.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/test/jdk/jshell/DropTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8081431
+ * @bug 8081431 8080069
  * @summary Test of JShell#drop().
  * @build KullaTesting TestingInputStream
  * @run testng DropTest
@@ -31,6 +31,7 @@
 
 import jdk.jshell.DeclarationSnippet;
 import jdk.jshell.PersistentSnippet;
+import jdk.jshell.VarSnippet;
 import org.testng.annotations.Test;
 
 import static jdk.jshell.Snippet.Status.*;
@@ -45,21 +46,27 @@
         assertDrop(var,
                 ste(var, VALID, DROPPED, true, null),
                 ste(method, VALID, RECOVERABLE_DEFINED, false, var));
-        //assertDrop(method,
-        //        ste(method, RECOVERABLE_DEFINED, DROPPED, false, null),
-        //        ste(clazz, RECOVERABLE_NOT_DEFINED, RECOVERABLE_NOT_DEFINED, false, method));
-        //assertDeclareFail("new C();", "compiler.err.cant.resolve.location");
+        assertDrop(method,
+                ste(method, RECOVERABLE_DEFINED, DROPPED, true, null),
+                ste(clazz, VALID, RECOVERABLE_DEFINED, false, method));
+        VarSnippet cc = varKey(assertEval("C c;"));
+        assertEvalUnresolvedException("new C();", "C", 1, 0);
         assertVariables();
         assertMethods();
         assertClasses();
         assertActiveKeys();
 
+        method = methodKey(assertEval("int mu() { return x * 4; }",
+                ste(MAIN_SNIPPET, DROPPED, RECOVERABLE_DEFINED, true, null),
+                ste(clazz, RECOVERABLE_DEFINED, VALID, false, MAIN_SNIPPET)));
         assertEval("int x = 10;", "10",
-                ste(var, DROPPED, VALID, true, null),
+                ste(MAIN_SNIPPET, DROPPED, VALID, true, null),
                 ste(method, RECOVERABLE_DEFINED, VALID, false, MAIN_SNIPPET));
         PersistentSnippet c0 = varKey(assertEval("C c0 = new C();"));
         assertEval("c0.v();", "\"#40\"");
-        assertEval("C c = new C();");
+        assertEval("C c = new C();",
+                ste(MAIN_SNIPPET, VALID, VALID, false, null),
+                ste(cc, VALID, OVERWRITTEN, false, MAIN_SNIPPET));
         assertEval("c.v();", "\"#40\"");
         assertEval("int mu() { return x * 3; }",
                 ste(MAIN_SNIPPET, VALID, VALID, false, null),
@@ -144,9 +151,10 @@
                 DiagCheck.DIAG_OK,
                 DiagCheck.DIAG_ERROR,
                 ste(x, VALID, DROPPED, true, null),
-                ste(a, VALID, RECOVERABLE_NOT_DEFINED, true, x));
-        assertUnresolvedDependencies1(a, RECOVERABLE_NOT_DEFINED, "variable x");
-        assertDeclareFail("new A().a;", "compiler.err.cant.resolve.location");
+                ste(a, VALID, RECOVERABLE_DEFINED, false, x));
+        assertEval("A foo() { return null; }");
+        assertUnresolvedDependencies1(a, RECOVERABLE_DEFINED, "variable x");
+        assertEvalUnresolvedException("new A();", "A", 1, 0);
         assertVariables();
         assertActiveKeys();
     }
@@ -158,9 +166,9 @@
                 DiagCheck.DIAG_OK,
                 DiagCheck.DIAG_ERROR,
                 ste(x, VALID, DROPPED, true, null),
-                ste(a, VALID, RECOVERABLE_NOT_DEFINED, true, x));
-        assertUnresolvedDependencies1(a, RECOVERABLE_NOT_DEFINED, "method x()");
-        assertDeclareFail("new A().a;", "compiler.err.cant.resolve.location");
+                ste(a, VALID, RECOVERABLE_DEFINED, false, x));
+        assertUnresolvedDependencies1(a, RECOVERABLE_DEFINED, "method x()");
+        assertEvalUnresolvedException("new A();", "A", 1, 0);
         assertMethods();
         assertActiveKeys();
     }
--- a/langtools/test/jdk/jshell/ExternalEditorTest.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/test/jdk/jshell/ExternalEditorTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -113,7 +113,7 @@
     @Override
     public void testEditor(boolean defaultStartup, String[] args, ReplTest... tests) {
         ReplTest[] t = new ReplTest[tests.length + 1];
-        t[0] = a -> assertCommandCheckOutput(a, "/seteditor " + executionScript,
+        t[0] = a -> assertCommandCheckOutput(a, "/set editor " + executionScript,
                 assertStartsWith("|  Editor set to: " + executionScript));
         System.arraycopy(tests, 0, t, 1, tests.length);
         super.testEditor(defaultStartup, args, t);
@@ -193,8 +193,8 @@
     @Test
     public void setUnknownEditor() {
         test(
-                a -> assertCommand(a, "/seteditor", "|  /seteditor requires a path argument\n"),
-                a -> assertCommand(a, "/seteditor UNKNOWN", "|  Editor set to: UNKNOWN\n"),
+                a -> assertCommand(a, "/set editor", "|  /set editor requires a path argument\n"),
+                a -> assertCommand(a, "/set editor UNKNOWN", "|  Editor set to: UNKNOWN\n"),
                 a -> assertCommand(a, "int a;", null),
                 a -> assertCommand(a, "/e 1",
                         "|  Edit Error: process IO failure: Cannot run program \"UNKNOWN\": error=2, No such file or directory\n")
@@ -204,7 +204,7 @@
     @Test(enabled = false)
     public void testRemoveTempFile() {
         test(new String[]{"-nostartup"},
-                a -> assertCommandCheckOutput(a, "/seteditor " + executionScript,
+                a -> assertCommandCheckOutput(a, "/set editor " + executionScript,
                         assertStartsWith("|  Editor set to: " + executionScript)),
                 a -> assertVariable(a, "int", "a", "0", "0"),
                 a -> assertEditOutput(a, "/e 1", assertStartsWith("|  Edit Error: Failure read edit file:"), () -> {
--- a/langtools/test/jdk/jshell/KullaTesting.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/test/jdk/jshell/KullaTesting.java	Mon Mar 14 17:51:25 2016 +0100
@@ -191,14 +191,14 @@
         return key;
     }
 
-    public MethodSnippet assertEvalUnresolvedException(String input, String name, int unresolvedSize, int diagnosticsSize) {
+    public DeclarationSnippet assertEvalUnresolvedException(String input, String name, int unresolvedSize, int diagnosticsSize) {
         List<SnippetEvent> events = assertEval(input, null, UnresolvedReferenceException.class, DiagCheck.DIAG_OK, DiagCheck.DIAG_OK, null);
         SnippetEvent ste = events.get(0);
-        MethodSnippet methodKey = ((UnresolvedReferenceException) ste.exception()).getMethodSnippet();
-        assertEquals(methodKey.name(), name, "Given input: " + input + ", checking name");
-        assertEquals(getState().unresolvedDependencies(methodKey).size(), unresolvedSize, "Given input: " + input + ", checking unresolved");
-        assertEquals(getState().diagnostics(methodKey).size(), diagnosticsSize, "Given input: " + input + ", checking diagnostics");
-        return methodKey;
+        DeclarationSnippet sn = ((UnresolvedReferenceException) ste.exception()).getSnippet();
+        assertEquals(sn.name(), name, "Given input: " + input + ", checking name");
+        assertEquals(getState().unresolvedDependencies(sn).size(), unresolvedSize, "Given input: " + input + ", checking unresolved");
+        assertEquals(getState().diagnostics(sn).size(), diagnosticsSize, "Given input: " + input + ", checking diagnostics");
+        return sn;
     }
 
     public Snippet assertKeyMatch(String input, boolean isExecutable, SubKind expectedSubKind, STEInfo mainInfo, STEInfo... updates) {
--- a/langtools/test/jdk/jshell/ReplToolTesting.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/test/jdk/jshell/ReplToolTesting.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -397,6 +397,15 @@
         assertCommand(after, cmd, out, "", null, "", "");
     }
 
+    public void assertCommandOutputContains(boolean after, String cmd, String has) {
+        assertCommandCheckOutput(after, cmd, (s) ->
+                        assertTrue(s.contains(has), "Output: \'" + s + "' does not contain: " + has));
+    }
+
+    public void assertCommandOutputStartsWith(boolean after, String cmd, String starts) {
+        assertCommandCheckOutput(after, cmd, assertStartsWith(starts));
+    }
+
     public void assertCommandCheckOutput(boolean after, String cmd, Consumer<String> check) {
         if (!after) {
             assertCommand(false, cmd, null);
@@ -437,13 +446,13 @@
     }
 
     private List<String> computeCompletions(String code, boolean isSmart) {
-        JShellTool repl = this.repl != null ? this.repl
+        JShellTool js = this.repl != null ? this.repl
                                       : new JShellTool(null, null, null, null, null, null, null);
         int cursor =  code.indexOf('|');
         code = code.replace("|", "");
         assertTrue(cursor > -1, "'|' not found: " + code);
         List<Suggestion> completions =
-                repl.commandCompletionSuggestions(code, cursor, new int[1]); //XXX: ignoring anchor for now
+                js.commandCompletionSuggestions(code, cursor, new int[1]); //XXX: ignoring anchor for now
         return completions.stream()
                           .filter(s -> isSmart == s.isSmart)
                           .map(s -> s.continuation)
@@ -481,6 +490,15 @@
             return name.hashCode();
         }
 
+        @Override
+        public boolean equals(Object o) {
+            if (o instanceof MemberInfo) {
+                MemberInfo mi = (MemberInfo) o;
+                return name.equals(mi.name);
+            }
+            return false;
+        }
+
         public abstract Consumer<String> checkOutput();
 
         public String getSource() {
@@ -537,6 +555,11 @@
         }
 
         @Override
+        public int hashCode() {
+            return name.hashCode();
+        }
+
+        @Override
         public boolean equals(Object o) {
             if (o instanceof VariableInfo) {
                 VariableInfo v = (VariableInfo) o;
@@ -585,6 +608,10 @@
             return s -> assertTrue(checkOutput.test(s), "Expected: '" + expectedOutput + "', actual: " + s);
         }
 
+        @Override
+        public int hashCode() {
+            return (name.hashCode() << 2) ^ type.hashCode() ;
+        }
 
         @Override
         public boolean equals(Object o) {
@@ -616,6 +643,11 @@
         }
 
         @Override
+        public int hashCode() {
+            return name.hashCode() ;
+        }
+
+        @Override
         public boolean equals(Object o) {
             if (o instanceof ClassInfo) {
                 ClassInfo c = (ClassInfo) o;
@@ -641,6 +673,11 @@
         }
 
         @Override
+        public int hashCode() {
+            return (name.hashCode() << 2) ^ type.hashCode() ;
+        }
+
+        @Override
         public boolean equals(Object o) {
             if (o instanceof ImportInfo) {
                 ImportInfo i = (ImportInfo) o;
--- a/langtools/test/jdk/jshell/ReplaceTest.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/test/jdk/jshell/ReplaceTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,7 @@
  */
 
 /*
- * @test
+ * @test 8080069
  * @summary Test of Snippet redefinition and replacement.
  * @build KullaTesting TestingInputStream
  * @run testng ReplaceTest
@@ -30,6 +30,7 @@
 
 import java.util.Collection;
 
+import java.util.List;
 import jdk.jshell.Snippet;
 import jdk.jshell.MethodSnippet;
 import jdk.jshell.PersistentSnippet;
@@ -38,9 +39,11 @@
 import jdk.jshell.DeclarationSnippet;
 import org.testng.annotations.Test;
 
+import jdk.jshell.SnippetEvent;
+import jdk.jshell.UnresolvedReferenceException;
+import static org.testng.Assert.assertEquals;
 import static jdk.jshell.Snippet.Status.*;
 import static jdk.jshell.Snippet.SubKind.*;
-import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
 
 @Test
@@ -259,7 +262,7 @@
                 ste(MAIN_SNIPPET, VALID, VALID, true, null),
                 ste(g, VALID, OVERWRITTEN, false, MAIN_SNIPPET),
                 ste(f, VALID, RECOVERABLE_DEFINED, false, MAIN_SNIPPET));
-        MethodSnippet exsn = assertEvalUnresolvedException("t();", "f", 0, 1);
+        DeclarationSnippet exsn = assertEvalUnresolvedException("t();", "f", 0, 1);
         assertTrue(exsn == f, "Identity must not change");
         assertActiveKeys();
     }
@@ -289,13 +292,95 @@
     }
 
     public void testForwardVarToClass() {
-        DeclarationSnippet a = classKey(assertEval("class A { int f() { return g; } }", added(RECOVERABLE_NOT_DEFINED)));
-        assertUnresolvedDependencies1(a, RECOVERABLE_NOT_DEFINED, "variable g");
+        DeclarationSnippet a = classKey(assertEval("class A { int f() { return g; } }", added(RECOVERABLE_DEFINED)));
+        assertUnresolvedDependencies1(a, RECOVERABLE_DEFINED, "variable g");
+        Snippet g = varKey(assertEval("int g = 10;", "10",
+                added(VALID),
+                ste(a, RECOVERABLE_DEFINED, VALID, false, null)));
+        assertEval("new A().f();", "10");
+        assertEval("double g = 10;", "10.0", null,
+                DiagCheck.DIAG_OK,
+                DiagCheck.DIAG_ERROR,
+                ste(MAIN_SNIPPET, VALID, VALID, true, null),
+                ste(g, VALID, OVERWRITTEN, false, MAIN_SNIPPET),
+                ste(a, VALID, RECOVERABLE_DEFINED, false, MAIN_SNIPPET));
+        assertUnresolvedDependencies(a, 0);
+        assertActiveKeys();
+    }
+
+    public void testForwardVarToClassGeneric() {
+        DeclarationSnippet a = classKey(assertEval("class A<T> { final T x; A(T v) { this.x = v; } ; T get() { return x; } int core() { return g; } }", added(RECOVERABLE_DEFINED)));
+        assertUnresolvedDependencies1(a, RECOVERABLE_DEFINED, "variable g");
+
+        List<SnippetEvent> events = assertEval("A<String> as = new A<>(\"hi\");", null,
+                UnresolvedReferenceException.class, DiagCheck.DIAG_OK, DiagCheck.DIAG_OK, null);
+        SnippetEvent ste = events.get(0);
+        Snippet assn = ste.snippet();
+        DeclarationSnippet unsn = ((UnresolvedReferenceException) ste.exception()).getSnippet();
+        assertEquals(unsn.name(), "A", "Wrong with unresolved");
+        assertEquals(getState().unresolvedDependencies(unsn).size(), 1, "Wrong size unresolved");
+        assertEquals(getState().diagnostics(unsn).size(), 0, "Expected no diagnostics");
+
         Snippet g = varKey(assertEval("int g = 10;", "10",
                 added(VALID),
+                ste(a, RECOVERABLE_DEFINED, VALID, false, MAIN_SNIPPET)));
+        assertEval("A<String> as = new A<>(\"low\");",
+                ste(MAIN_SNIPPET, VALID, VALID, false, null),
+                ste(assn, VALID, OVERWRITTEN, false, MAIN_SNIPPET));
+        assertEval("as.get();", "\"low\"");
+        assertUnresolvedDependencies(a, 0);
+        assertActiveKeys();
+    }
+
+   public void testForwardVarToClassExtendsImplements() {
+        DeclarationSnippet ik = classKey(assertEval("interface I { default int ii() { return 1; } }", added(VALID)));
+        DeclarationSnippet jk = classKey(assertEval("interface J { default int jj() { return 2; } }", added(VALID)));
+        DeclarationSnippet ck = classKey(assertEval("class C { int cc() { return 3; } }", added(VALID)));
+        DeclarationSnippet dk = classKey(assertEval("class D extends C implements I,J { int dd() { return g; } }", added(RECOVERABLE_DEFINED)));
+        DeclarationSnippet ek = classKey(assertEval("class E extends D { int ee() { return 5; } }", added(VALID)));
+        assertUnresolvedDependencies1(dk, RECOVERABLE_DEFINED, "variable g");
+        assertEvalUnresolvedException("new D();", "D", 1, 0);
+        assertEvalUnresolvedException("new E();", "D", 1, 0);
+        VarSnippet g = varKey(assertEval("int g = 10;", "10",
+                added(VALID),
+                ste(dk, RECOVERABLE_DEFINED, VALID, false, MAIN_SNIPPET)));
+        assertEval("E e = new E();");
+        assertDrop(g,
+                ste(g, VALID, DROPPED, true, null),
+                ste(dk, VALID, RECOVERABLE_DEFINED, false, g));
+        assertEvalUnresolvedException("new D();", "D", 1, 0);
+        assertEvalUnresolvedException("new E();", "D", 1, 0);
+        assertEval("e.ee();", "5");
+        assertEvalUnresolvedException("e.dd();", "D", 1, 0);
+        assertEval("e.cc();", "3");
+        assertEval("e.jj();", "2");
+        assertEval("e.ii();", "1");
+        assertActiveKeys();
+    }
+
+    public void testForwardVarToInterface() {
+        DeclarationSnippet i = classKey(assertEval("interface I { default int f() { return x; } }", added(RECOVERABLE_DEFINED)));
+        assertUnresolvedDependencies1(i, RECOVERABLE_DEFINED, "variable x");
+        DeclarationSnippet c = classKey(assertEval("class C implements I { int z() { return 2; } }", added(VALID)));
+        assertEval("C c = new C();");
+        assertEval("c.z();", "2");
+        assertEvalUnresolvedException("c.f()", "I", 1, 0);
+        Snippet g = varKey(assertEval("int x = 55;", "55",
+                added(VALID),
+                ste(i, RECOVERABLE_DEFINED, VALID, false, null)));
+        assertEval("c.f();", "55");
+        assertUnresolvedDependencies(i, 0);
+        assertActiveKeys();
+    }
+
+    public void testForwardVarToEnum() {
+        DeclarationSnippet a = classKey(assertEval("enum E { Q, W, E; float ff() { return fff; } }", added(RECOVERABLE_NOT_DEFINED)));
+        assertUnresolvedDependencies1(a, RECOVERABLE_NOT_DEFINED, "variable fff");
+        Snippet g = varKey(assertEval("float fff = 4.5f;", "4.5",
+                added(VALID),
                 ste(a, RECOVERABLE_NOT_DEFINED, VALID, true, null)));
-        assertEval("new A().f();", "10");
-        assertEval("double g = 10;", "10.0", null,
+        assertEval("E.Q.ff();", "4.5");
+        assertEval("double fff = 3.3;", "3.3", null,
                 DiagCheck.DIAG_OK,
                 DiagCheck.DIAG_ERROR,
                 ste(MAIN_SNIPPET, VALID, VALID, true, null),
@@ -305,20 +390,21 @@
         assertActiveKeys();
     }
 
-
     public void testForwardMethodToClass() {
-        DeclarationSnippet a = classKey(assertEval("class A { int f() { return g(); } }", added(RECOVERABLE_NOT_DEFINED)));
-        assertUnresolvedDependencies1(a, RECOVERABLE_NOT_DEFINED, "method g()");
+        DeclarationSnippet a = classKey(assertEval("class A { int f() { return g(); } }", added(RECOVERABLE_DEFINED)));
+        assertUnresolvedDependencies1(a, RECOVERABLE_DEFINED, "method g()");
+        assertEval("A foo() { return null; }");
+        assertEvalUnresolvedException("new A();", "A", 1, 0);
         Snippet g = methodKey(assertEval("int g() { return 10; }",
                 added(VALID),
-                ste(a, RECOVERABLE_NOT_DEFINED, VALID, true, null)));
+                ste(a, RECOVERABLE_DEFINED, VALID, false, null)));
         assertEval("new A().f();", "10");
         assertEval("double g() { return 10; }",
                 DiagCheck.DIAG_OK,
                 DiagCheck.DIAG_ERROR,
                 ste(MAIN_SNIPPET, VALID, VALID, true, null),
                 ste(g, VALID, OVERWRITTEN, false, MAIN_SNIPPET),
-                ste(a, VALID, RECOVERABLE_NOT_DEFINED, true, MAIN_SNIPPET));
+                ste(a, VALID, RECOVERABLE_DEFINED, false, MAIN_SNIPPET));
         assertUnresolvedDependencies(a, 0);
         assertActiveKeys();
     }
@@ -336,8 +422,8 @@
                 DiagCheck.DIAG_ERROR,
                 ste(MAIN_SNIPPET, VALID, VALID, true, null),
                 ste(b, VALID, OVERWRITTEN, false, MAIN_SNIPPET),
-                ste(a, VALID, RECOVERABLE_NOT_DEFINED, true, MAIN_SNIPPET));
-        assertDeclareFail("new A().b;", "compiler.err.cant.resolve.location");
+                ste(a, VALID, RECOVERABLE_DEFINED, true, MAIN_SNIPPET));
+        assertEvalUnresolvedException("new A().b;", "A", 0, 1);
         assertActiveKeys();
     }
 
@@ -503,42 +589,42 @@
 
     public void testForwardSingleImportMethodToClass1() {
         PersistentSnippet a = classKey(assertEval("class A { String s = format(\"%d\", 10); }",
-                added(RECOVERABLE_NOT_DEFINED)));
-        assertDeclareFail("new A();", "compiler.err.cant.resolve.location");
+                added(RECOVERABLE_DEFINED)));
+        assertEvalUnresolvedException("new A();", "A", 1, 0);
         assertEval("import static java.lang.String.format;",
                 added(VALID),
-                ste(a, RECOVERABLE_NOT_DEFINED, VALID, true, null));
+                ste(a, RECOVERABLE_DEFINED, VALID, false, null));
         assertEval("new A().s;", "\"10\"");
         PersistentSnippet format = methodKey(assertEval("void format(String s, int d) { }",
                 DiagCheck.DIAG_OK,
                 DiagCheck.DIAG_ERROR,
                 added(VALID),
-                ste(a, VALID, RECOVERABLE_NOT_DEFINED, true, MAIN_SNIPPET)));
-        assertDeclareFail("new A().s;", "compiler.err.cant.resolve.location");
+                ste(a, VALID, RECOVERABLE_DEFINED, false, MAIN_SNIPPET)));
+        assertEvalUnresolvedException("new A();", "A", 0, 1);
         assertActiveKeys();
         assertDrop(format,
                 ste(format, VALID, DROPPED, true, null),
-                ste(a, RECOVERABLE_NOT_DEFINED, VALID, true, format));
+                ste(a, RECOVERABLE_DEFINED, VALID, false, format));
     }
 
     public void testForwardSingleImportMethodToClass2() {
         PersistentSnippet a = classKey(assertEval("class A { String s() { return format(\"%d\", 10); } }",
-                added(RECOVERABLE_NOT_DEFINED)));
-        assertDeclareFail("new A();", "compiler.err.cant.resolve.location");
+                added(RECOVERABLE_DEFINED)));
+        assertEvalUnresolvedException("new A();", "A", 1, 0);
         assertEval("import static java.lang.String.format;",
                 added(VALID),
-                ste(a, RECOVERABLE_NOT_DEFINED, VALID, true, null));
+                ste(a, RECOVERABLE_DEFINED, VALID, false, null));
         assertEval("new A().s();", "\"10\"");
         PersistentSnippet format = methodKey(assertEval("void format(String s, int d) { }",
                 DiagCheck.DIAG_OK,
                 DiagCheck.DIAG_ERROR,
                 added(VALID),
-                ste(a, VALID, RECOVERABLE_NOT_DEFINED, true, null)));
-        assertDeclareFail("new A().s();", "compiler.err.cant.resolve.location");
+                ste(a, VALID, RECOVERABLE_DEFINED, false, null)));
+        assertEvalUnresolvedException("new A();", "A", 0, 1);
         assertActiveKeys();
         assertDrop(format,
                 ste(format, VALID, DROPPED, true, null),
-                ste(a, RECOVERABLE_NOT_DEFINED, VALID, true, format));
+                ste(a, RECOVERABLE_DEFINED, VALID, false, format));
     }
 
     public void testForwardSingleImportClassToClass1() {
@@ -589,42 +675,44 @@
 
     public void testForwardImportOnDemandMethodToClass1() {
         PersistentSnippet a = classKey(assertEval("class A { String s = format(\"%d\", 10); }",
-                added(RECOVERABLE_NOT_DEFINED)));
-        assertDeclareFail("new A();", "compiler.err.cant.resolve.location");
+                added(RECOVERABLE_DEFINED)));
+        assertEvalUnresolvedException("new A();", "A", 1, 0);
         assertEval("import static java.lang.String.*;",
                 added(VALID),
-                ste(a, RECOVERABLE_NOT_DEFINED, VALID, true, null));
-        assertEval("new A().s;", "\"10\"");
+                ste(a, RECOVERABLE_DEFINED, VALID, false, null));
+        assertEval("A x = new A();");
+        assertEval("x.s;", "\"10\"");
         PersistentSnippet format = methodKey(assertEval("void format(String s, int d) { }",
                 DiagCheck.DIAG_OK,
                 DiagCheck.DIAG_ERROR,
                 added(VALID),
-                ste(a, VALID, RECOVERABLE_NOT_DEFINED, true, null)));
-        assertDeclareFail("new A().s;", "compiler.err.cant.resolve.location");
+                ste(a, VALID, RECOVERABLE_DEFINED, false, null)));
+        assertEvalUnresolvedException("new A();", "A", 0, 1);
         assertActiveKeys();
         assertDrop(format,
                 ste(format, VALID, DROPPED, true, null),
-                ste(a, RECOVERABLE_NOT_DEFINED, VALID, true, format));
+                ste(a, RECOVERABLE_DEFINED, VALID, false, format));
+        assertEval("x.s;", "\"10\"");
     }
 
     public void testForwardImportOnDemandMethodToClass2() {
         PersistentSnippet a = classKey(assertEval("class A { String s() { return format(\"%d\", 10); } }",
-                added(RECOVERABLE_NOT_DEFINED)));
-        assertDeclareFail("new A();", "compiler.err.cant.resolve.location");
+                added(RECOVERABLE_DEFINED)));
+        assertEvalUnresolvedException("new A();", "A", 1, 0);
         assertEval("import static java.lang.String.*;",
                 added(VALID),
-                ste(a, RECOVERABLE_NOT_DEFINED, VALID, true, null));
+                ste(a, RECOVERABLE_DEFINED, VALID, false, null));
         assertEval("new A().s();", "\"10\"");
         PersistentSnippet format = methodKey(assertEval("void format(String s, int d) { }",
                 DiagCheck.DIAG_OK,
                 DiagCheck.DIAG_ERROR,
                 added(VALID),
-                ste(a, VALID, RECOVERABLE_NOT_DEFINED, true, null)));
-        assertDeclareFail("new A().s();", "compiler.err.cant.resolve.location");
+                ste(a, VALID, RECOVERABLE_DEFINED, false, null)));
+        assertEvalUnresolvedException("new A();", "A", 0, 1);
         assertActiveKeys();
         assertDrop(format,
                 ste(format, VALID, DROPPED, true, null),
-                ste(a, RECOVERABLE_NOT_DEFINED, VALID, true, format));
+                ste(a, RECOVERABLE_DEFINED, VALID, false, format));
     }
 
     public void testForwardImportOnDemandClassToClass1() {
@@ -673,86 +761,87 @@
 
     public void testForwardSingleImportFieldToClass1() {
         PersistentSnippet a = classKey(assertEval("class A { static double pi() { return PI; } }",
-                added(RECOVERABLE_NOT_DEFINED)));
-        assertDeclareFail("new A();", "compiler.err.cant.resolve.location");
+                added(RECOVERABLE_DEFINED)));
+        assertEvalUnresolvedException("new A();", "A", 1, 0);
         assertEval("import static java.lang.Math.PI;",
                 added(VALID),
-                ste(a, RECOVERABLE_NOT_DEFINED, VALID, true, null));
+                ste(a, RECOVERABLE_DEFINED, VALID, false, null));
         assertEval("Math.abs(A.pi() - 3.1415) < 0.001;", "true");
 
         PersistentSnippet list = varKey(assertEval("String PI;",
                 DiagCheck.DIAG_OK,
                 DiagCheck.DIAG_ERROR,
                 added(VALID),
-                ste(a, VALID, RECOVERABLE_NOT_DEFINED, true, null)));
-        assertDeclareFail("new A();", "compiler.err.cant.resolve.location");
+                ste(a, VALID, RECOVERABLE_DEFINED, false, null)));
+        assertEvalUnresolvedException("new A();", "A", 0, 1);
         assertActiveKeys();
         assertDrop(list,
                 ste(list, VALID, DROPPED, true, null),
-                ste(a, RECOVERABLE_NOT_DEFINED, VALID, true, list));
+                ste(a, RECOVERABLE_DEFINED, VALID, false, list));
     }
 
     public void testForwardSingleImportFieldToClass2() {
         PersistentSnippet a = classKey(assertEval("class A { static double pi = PI; }",
-                added(RECOVERABLE_NOT_DEFINED)));
-        assertDeclareFail("new A();", "compiler.err.cant.resolve.location");
+                added(RECOVERABLE_DEFINED)));
+        assertEvalUnresolvedException("new A();", "A", 1, 0);
         assertEval("import static java.lang.Math.PI;",
                 added(VALID),
-                ste(a, RECOVERABLE_NOT_DEFINED, VALID, true, null));
+                ste(a, RECOVERABLE_DEFINED, VALID, true, null));
         assertEval("Math.abs(A.pi - 3.1415) < 0.001;", "true");
 
         PersistentSnippet list = varKey(assertEval("String PI;",
                 DiagCheck.DIAG_OK,
                 DiagCheck.DIAG_ERROR,
                 added(VALID),
-                ste(a, VALID, RECOVERABLE_NOT_DEFINED, true, null)));
-        assertDeclareFail("new A();", "compiler.err.cant.resolve.location");
+                ste(a, VALID, RECOVERABLE_DEFINED, true, null)));
+        assertEvalUnresolvedException("new A();", "A", 0, 1);
         assertActiveKeys();
         assertDrop(list,
                 ste(list, VALID, DROPPED, true, null),
-                ste(a, RECOVERABLE_NOT_DEFINED, VALID, true, list));
+                ste(a, RECOVERABLE_DEFINED, VALID, true, list));
     }
 
     public void testForwardImportOnDemandFieldToClass1() {
         PersistentSnippet a = classKey(assertEval("class A { static double pi() { return PI; } }",
-                added(RECOVERABLE_NOT_DEFINED)));
-        assertDeclareFail("new A();", "compiler.err.cant.resolve.location");
+                added(RECOVERABLE_DEFINED)));
+        assertEvalUnresolvedException("new A();", "A", 1, 0);
         assertEval("import static java.lang.Math.*;",
                 added(VALID),
-                ste(a, RECOVERABLE_NOT_DEFINED, VALID, true, null));
+                ste(a, RECOVERABLE_DEFINED, VALID, false, null));
         assertEval("Math.abs(A.pi() - 3.1415) < 0.001;", "true");
 
         PersistentSnippet list = varKey(assertEval("String PI;",
                 DiagCheck.DIAG_OK,
                 DiagCheck.DIAG_ERROR,
                 added(VALID),
-                ste(a, VALID, RECOVERABLE_NOT_DEFINED, true, null)));
-        assertDeclareFail("new A();", "compiler.err.cant.resolve.location");
+                ste(a, VALID, RECOVERABLE_DEFINED, false, null)));
+        assertEvalUnresolvedException("new A();", "A", 0, 1);
         assertActiveKeys();
         assertDrop(list,
                 ste(list, VALID, DROPPED, true, null),
-                ste(a, RECOVERABLE_NOT_DEFINED, VALID, true, list));
+                ste(a, RECOVERABLE_DEFINED, VALID, false, list));
     }
 
     public void testForwardImportOnDemandFieldToClass2() {
         PersistentSnippet a = classKey(assertEval("class A { static double pi = PI; }",
-                added(RECOVERABLE_NOT_DEFINED)));
-        assertDeclareFail("new A();", "compiler.err.cant.resolve.location");
+                added(RECOVERABLE_DEFINED)));
+        assertEvalUnresolvedException("new A();", "A", 1, 0);
         assertEval("import static java.lang.Math.*;",
                 added(VALID),
-                ste(a, RECOVERABLE_NOT_DEFINED, VALID, true, null));
+                ste(a, RECOVERABLE_DEFINED, VALID, true, null));
         assertEval("Math.abs(A.pi - 3.1415) < 0.001;", "true");
 
         PersistentSnippet list = varKey(assertEval("String PI;",
                 DiagCheck.DIAG_OK,
                 DiagCheck.DIAG_ERROR,
                 added(VALID),
-                ste(a, VALID, RECOVERABLE_NOT_DEFINED, true, null)));
-        assertDeclareFail("new A();", "compiler.err.cant.resolve.location");
+                ste(a, VALID, RECOVERABLE_DEFINED, true, null)));
+        assertEvalUnresolvedException("new A();", "A", 0, 1);
         assertActiveKeys();
         assertDrop(list,
                 ste(list, VALID, DROPPED, true, null),
-                ste(a, RECOVERABLE_NOT_DEFINED, VALID, true, list));
+                ste(a, RECOVERABLE_DEFINED, VALID, true, list));
+        assertEval("Math.abs(A.pi - 3.1415) < 0.001;", "true");
     }
 
     public void testReplaceCausesMethodReferenceError() {
--- a/langtools/test/jdk/jshell/ToolBasicTest.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/langtools/test/jdk/jshell/ToolBasicTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8143037 8142447 8144095 8140265 8144906 8146138 8147887 8147886
+ * @bug 8143037 8142447 8144095 8140265 8144906 8146138 8147887 8147886 8148316 8148317
  * @requires os.family != "solaris"
  * @summary Tests for Basic tests for REPL tool
  * @library /tools/lib
@@ -90,8 +90,7 @@
 
     public void elideStartUpFromList() {
         test(
-                (a) -> assertCommandCheckOutput(a, "123", (s) ->
-                        assertTrue(s.contains("type int"), s)),
+                (a) -> assertCommandOutputContains(a, "123", "type int"),
                 (a) -> assertCommandCheckOutput(a, "/list", (s) -> {
                     int cnt;
                     try (Scanner scanner = new Scanner(s)) {
@@ -112,8 +111,7 @@
         Compiler compiler = new Compiler();
         Path path = compiler.getPath("myfile");
         test(
-                (a) -> assertCommandCheckOutput(a, "123",
-                        (s) -> assertTrue(s.contains("type int"), s)),
+                (a) -> assertCommandOutputContains(a, "123", "type int"),
                 (a) -> assertCommand(a, "/save " + path.toString(), "")
         );
         try (Stream<String> lines = Files.lines(path)) {
@@ -594,12 +592,12 @@
                     (a) -> assertMethod(a, "void f() {}", "()V", "f"),
                     (a) -> assertImport(a, "import java.util.stream.*;", "", "java.util.stream.*"),
                     (a) -> assertCommand(a, "/save " + startUpFile.toString(), null),
-                    (a) -> assertCommand(a, "/setstart " + startUpFile.toString(), null)
+                    (a) -> assertCommand(a, "/set start " + startUpFile.toString(), null)
             );
             Path unknown = compiler.getPath("UNKNOWN");
             test(
-                    (a) -> assertCommand(a, "/setstart " + unknown.toString(),
-                            "|  File '" + unknown + "' for /setstart is not found.\n")
+                    (a) -> assertCommand(a, "/set start " + unknown.toString(),
+                            "|  File '" + unknown + "' for /set start is not found.\n")
             );
             test(false, new String[0],
                     (a) -> {
@@ -619,7 +617,7 @@
     }
 
     private void removeStartup() {
-        Preferences preferences = Preferences.userRoot().node("tool/REPL");
+        Preferences preferences = Preferences.userRoot().node("tool/JShell");
         if (preferences != null) {
             preferences.remove("STARTUP");
         }
@@ -636,7 +634,7 @@
     }
 
     public void testNoArgument() {
-        String[] commands = {"/save", "/open", "/setstart"};
+        String[] commands = {"/save", "/open", "/set start"};
         test(Stream.of(commands)
                 .map(cmd -> {
                     String c = cmd;
@@ -670,8 +668,7 @@
         test(
                 a -> assertVariable(a, "int", "x"),
                 a -> assertCommandCheckOutput(a, "/vars", assertVariables()),
-                a -> assertCommandCheckOutput(a, "System.exit(5);",  s ->
-                        assertTrue(s.contains("terminated"), s)),
+                a -> assertCommandOutputContains(a, "System.exit(5);", "terminated"),
                 a -> assertCommandCheckOutput(a, "/vars", s ->
                         assertTrue(s.trim().isEmpty(), s)),
                 a -> assertMethod(a, "void f() { }", "()void", "f"),
@@ -699,8 +696,7 @@
                         s -> assertEquals(s, "|  No definition or id named " + arg +
                                 " found.  There are no active definitions.\n")),
                 a -> assertVariable(a, "int", "aardvark"),
-                a -> assertCommandCheckOutput(a, "/list aardvark",
-                        s -> assertTrue(s.contains("aardvark"))),
+                a -> assertCommandOutputContains(a, "/list aardvark", "aardvark"),
                 a -> assertCommandCheckOutput(a, "/list start",
                         s -> checkLineToList(s, START_UP)),
                 a -> assertCommandCheckOutput(a, "/list all",
@@ -714,14 +710,14 @@
     }
 
     public void testFeedbackNegative() {
-        test(a -> assertCommandCheckOutput(a, "/feedback aaaa",
-                assertStartsWith("|  Follow /feedback with of the following")));
+        test(a -> assertCommandCheckOutput(a, "/set feedback aaaa",
+                assertStartsWith("|  Does not match any current feedback mode")));
     }
 
     public void testFeedbackOff() {
         for (String off : new String[]{"o", "off"}) {
             test(
-                    a -> assertCommand(a, "/feedback " + off, ""),
+                    a -> assertCommand(a, "/set feedback " + off, ""),
                     a -> assertCommand(a, "int a", ""),
                     a -> assertCommand(a, "void f() {}", ""),
                     a -> assertCommandCheckOutput(a, "aaaa", assertStartsWith("|  Error:")),
@@ -730,23 +726,6 @@
         }
     }
 
-    public void testFeedbackConcise() {
-        Compiler compiler = new Compiler();
-        Path testConciseFile = compiler.getPath("testConciseFeedback");
-        String[] sources = new String[] {"int a", "void f() {}", "class A {}", "a = 10"};
-        compiler.writeToFile(testConciseFile, sources);
-        for (String concise : new String[]{"c", "concise"}) {
-            test(
-                    a -> assertCommand(a, "/feedback " + concise, ""),
-                    a -> assertCommand(a, sources[0], ""),
-                    a -> assertCommand(a, sources[1], ""),
-                    a -> assertCommand(a, sources[2], ""),
-                    a -> assertCommand(a, sources[3], "|  a : 10\n"),
-                    a -> assertCommand(a, "/o " + testConciseFile.toString(), "|  a : 10\n")
-            );
-        }
-    }
-
     public void testFeedbackNormal() {
         Compiler compiler = new Compiler();
         Path testNormalFile = compiler.getPath("testConciseNormal");
@@ -759,58 +738,20 @@
                 "|  Variable a has been assigned the value 10\n"
         };
         compiler.writeToFile(testNormalFile, sources2);
-        for (String feedback : new String[]{"/f", "/feedback"}) {
-            for (String feedbackState : new String[]{"n", "normal", "v", "verbose"}) {
-                String f = null;
-                if (feedbackState.startsWith("n")) {
-                    f = "normal";
-                } else if (feedbackState.startsWith("v")) {
-                    f = "verbose";
-                }
-                final String finalF = f;
+        for (String feedback : new String[]{"/set f", "/set feedback"}) {
+            for (String feedbackState : new String[]{"n", "normal", "o", "off"}) {
                 test(
-                        a -> assertCommand(a, feedback + " " + feedbackState, "|  Feedback mode: " + finalF +"\n"),
+                        a -> assertCommand(a, feedback + " " + feedbackState, "|  Feedback mode: normal\n"),
                         a -> assertCommand(a, sources[0], output[0]),
                         a -> assertCommand(a, sources[1], output[1]),
                         a -> assertCommand(a, sources[2], output[2]),
                         a -> assertCommand(a, sources[3], output[3]),
-                        a -> assertCommand(a, "/o " + testNormalFile.toString(),
-                                "|  Modified variable a of type int\n" +
-                                "|  Modified method f()\n" +
-                                "|    Update overwrote method f()\n" +
-                                "|  Modified class A\n" +
-                                "|    Update overwrote class A\n" +
-                                "|  Variable a has been assigned the value 10\n")
+                        a -> assertCommand(a, "/o " + testNormalFile.toString(), "")
                 );
             }
         }
     }
 
-    public void testFeedbackDefault() {
-        Compiler compiler = new Compiler();
-        Path testDefaultFile = compiler.getPath("testDefaultFeedback");
-        String[] sources = new String[] {"int a", "void f() {}", "class A {}", "a = 10"};
-        String[] output = new String[] {
-                "|  Added variable a of type int\n",
-                "|  Added method f()\n",
-                "|  Added class A\n",
-                "|  Variable a has been assigned the value 10\n"
-        };
-        compiler.writeToFile(testDefaultFile, sources);
-        for (String defaultFeedback : new String[]{"", "d", "default"}) {
-            test(
-                    a -> assertCommand(a, "/feedback o", ""),
-                    a -> assertCommand(a, "int x", ""),
-                    a -> assertCommand(a, "/feedback " + defaultFeedback, "|  Feedback mode: default\n"),
-                    a -> assertCommand(a, sources[0], output[0]),
-                    a -> assertCommand(a, sources[1], output[1]),
-                    a -> assertCommand(a, sources[2], output[2]),
-                    a -> assertCommand(a, sources[3], output[3]),
-                    a -> assertCommand(a, "/o " + testDefaultFile.toString(), "")
-            );
-        }
-    }
-
     public void testDrop() {
         test(false, new String[]{"-nostartup"},
                 a -> assertVariable(a, "int", "a"),
@@ -906,7 +847,7 @@
 
     public void testCommandPrefix() {
         test(a -> assertCommandCheckOutput(a, "/s",
-                      assertStartsWith("|  Command: /s is ambiguous: /seteditor, /save, /setstart")),
+                      assertStartsWith("|  Command: /s is ambiguous: /save, /set")),
              a -> assertCommand(a, "int var", "|  Added variable var of type int\n"),
              a -> assertCommandCheckOutput(a, "/va",
                       assertStartsWith("|    int var = 0")),
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/jdk/jshell/ToolFormatTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8148316 8148317
+ * @summary Tests for output customization
+ * @library /tools/lib
+ * @build KullaTesting TestingInputStream ToolBox Compiler
+ * @run testng ToolFormatTest
+ */
+import org.testng.annotations.Test;
+
+@Test
+public class ToolFormatTest extends ReplToolTesting {
+
+    public void testSetFormat() {
+        try {
+            test(
+                    (a) -> assertCommandOutputStartsWith(a, "/set newmode test command", "|  Created new feedback mode: test"),
+                    (a) -> assertCommand(a, "/set field test pre '$ '", ""),
+                    (a) -> assertCommand(a, "/set field test post ''", ""),
+                    (a) -> assertCommand(a, "/set field test action 'ADD ' added-primary", ""),
+                    (a) -> assertCommand(a, "/set field test action 'MOD ' modified-primary", ""),
+                    (a) -> assertCommand(a, "/set field test action 'REP ' replaced-primary", ""),
+                    (a) -> assertCommand(a, "/set field test action 'UP-ADD ' added-update", ""),
+                    (a) -> assertCommand(a, "/set field test action 'UP-MOD ' modified-update", ""),
+                    (a) -> assertCommand(a, "/set field test action 'UP-REP ' replaced-update", ""),
+                    (a) -> assertCommand(a, "/set field test resolve 'OK' ok-*", ""),
+                    (a) -> assertCommand(a, "/set field test resolve 'DEF' defined-*", ""),
+                    (a) -> assertCommand(a, "/set field test resolve 'NODEF' notdefined-*", ""),
+                    (a) -> assertCommand(a, "/set field test name ':%s ' ", ""),
+                    (a) -> assertCommand(a, "/set field test type '[%s]' ", ""),
+                    (a) -> assertCommand(a, "/set field test result '=%s ' ", ""),
+                    (a) -> assertCommand(a, "/set format test '{pre}{action}{type}{name}{result}{resolve}' *-*-*", ""),
+                    (a) -> assertCommand(a, "/set format test '{pre}HI this is enum' enum", ""),
+                    (a) -> assertCommand(a, "/set feedback test", "$ Feedback mode: test"),
+                    (a) -> assertCommand(a, "class D {}", "$ ADD :D OK"),
+                    (a) -> assertCommand(a, "void m() {}", "$ ADD []:m OK"),
+                    (a) -> assertCommand(a, "interface EX extends EEX {}", "$ ADD :EX NODEF"),
+                    (a) -> assertCommand(a, "56", "$ ADD [int]:$4 =56 OK"),
+                    (a) -> assertCommand(a, "class D { int hh; }", "$ REP :D OK$ OVERWROTE-UPDATE:D OK"),
+                    (a) -> assertCommandOutputStartsWith(a, "/set feedback normal", "|  Feedback mode: normal")
+            );
+        } finally {
+            assertCommandCheckOutput(false, "/set feedback normal", s -> {
+            });
+        }
+    }
+
+    public void testNewModeQuiet() {
+        try {
+            test(
+                    (a) -> assertCommandOutputStartsWith(a, "/set newmode nmq quiet normal", "|  Created new feedback mode: nmq"),
+                    (a) -> assertCommand(a, "/set feedback nmq", ""),
+                    (a) -> assertCommand(a, "/se ne nmq2 q nor", ""),
+                    (a) -> assertCommand(a, "/se fee nmq2", ""),
+                    (a) -> assertCommand(a, "/set newmode nmc command normal", ""),
+                    (a) -> assertCommandOutputStartsWith(a, "/set feedback nmc", "|  Feedback mode: nmc"),
+                    (a) -> assertCommandOutputStartsWith(a, "/set newmode nm", "|  Created new feedback mode: nm"),
+                    (a) -> assertCommandOutputStartsWith(a, "/set feedback nm", "|  Feedback mode: nm")
+            );
+        } finally {
+            assertCommandCheckOutput(false, "/set feedback normal", s -> {
+            });
+        }
+    }
+
+    public void testSetError() {
+        try {
+            test(
+                    (a) -> assertCommandOutputStartsWith(a, "/set newmode te command normal", "|  Created new feedback mode: te"),
+                    (a) -> assertCommand(a, "/set field te errorpre 'ERROR: '", ""),
+                    (a) -> assertCommandOutputStartsWith(a, "/set feedback te", ""),
+                    (a) -> assertCommandCheckOutput(a, "/set ", assertStartsWith("ERROR: The /set command requires arguments")),
+                    (a) -> assertCommandCheckOutput(a, "/set xyz", assertStartsWith("ERROR: Not a valid argument to /set")),
+                    (a) -> assertCommandCheckOutput(a, "/set f", assertStartsWith("ERROR: Ambiguous argument to /set")),
+                    (a) -> assertCommandCheckOutput(a, "/set feedback", assertStartsWith("ERROR: Expected a feedback mode")),
+                    (a) -> assertCommandCheckOutput(a, "/set feedback xyz", assertStartsWith("ERROR: Does not match any current feedback mode")),
+                    (a) -> assertCommandCheckOutput(a, "/set format", assertStartsWith("ERROR: Expected a feedback mode")),
+                    (a) -> assertCommandCheckOutput(a, "/set format xyz", assertStartsWith("ERROR: Does not match any current feedback mode")),
+                    (a) -> assertCommandCheckOutput(a, "/set format te", assertStartsWith("ERROR: Expected format missing")),
+                    (a) -> assertCommandCheckOutput(a, "/set format te aaa", assertStartsWith("ERROR: Format 'aaa' must be quoted")),
+                    (a) -> assertCommandCheckOutput(a, "/set format te 'aaa'", assertStartsWith("ERROR: At least one selector required")),
+                    (a) -> assertCommandCheckOutput(a, "/set format te 'aaa' frog", assertStartsWith("ERROR: Not a valid case")),
+                    (a) -> assertCommandCheckOutput(a, "/set format te 'aaa' import-frog", assertStartsWith("ERROR: Not a valid action")),
+                    (a) -> assertCommandCheckOutput(a, "/set newmode", assertStartsWith("ERROR: Expected new feedback mode")),
+                    (a) -> assertCommandCheckOutput(a, "/set newmode te", assertStartsWith("ERROR: Expected a new feedback mode name")),
+                    (a) -> assertCommandCheckOutput(a, "/set newmode x xyz", assertStartsWith("ERROR: Specify either 'command' or 'quiet'")),
+                    (a) -> assertCommandCheckOutput(a, "/set newmode x quiet y", assertStartsWith("ERROR: Does not match any current feedback mode")),
+                    (a) -> assertCommandCheckOutput(a, "/set prompt", assertStartsWith("ERROR: Expected a feedback mode")),
+                    (a) -> assertCommandCheckOutput(a, "/set prompt te", assertStartsWith("ERROR: Expected format missing")),
+                    (a) -> assertCommandCheckOutput(a, "/set prompt te aaa xyz", assertStartsWith("ERROR: Format 'aaa' must be quoted")),
+                    (a) -> assertCommandCheckOutput(a, "/set prompt te 'aaa' xyz", assertStartsWith("ERROR: Format 'xyz' must be quoted")),
+                    (a) -> assertCommandCheckOutput(a, "/set prompt", assertStartsWith("ERROR: Expected a feedback mode")),
+                    (a) -> assertCommandCheckOutput(a, "/set prompt te", assertStartsWith("ERROR: Expected format missing")),
+                    (a) -> assertCommandCheckOutput(a, "/set prompt te aaa", assertStartsWith("ERROR: Format 'aaa' must be quoted")),
+                    (a) -> assertCommandCheckOutput(a, "/set prompt te 'aaa'", assertStartsWith("ERROR: Expected format missing")),
+                    (a) -> assertCommandCheckOutput(a, "/set field", assertStartsWith("ERROR: Expected a feedback mode")),
+                    (a) -> assertCommandCheckOutput(a, "/set field xyz", assertStartsWith("ERROR: Does not match any current feedback mode: xyz")),
+                    (a) -> assertCommandCheckOutput(a, "/set field te xyz", assertStartsWith("ERROR: Not a valid field: xyz, must be one of: when")),
+                    (a) -> assertCommandCheckOutput(a, "/set field te action", assertStartsWith("ERROR: Expected format missing")),
+                    (a) -> assertCommandCheckOutput(a, "/set field te action 'act'", assertStartsWith("ERROR: At least one selector required"))
+            );
+        } finally {
+            assertCommandCheckOutput(false, "/set feedback normal", s -> {
+            });
+        }
+    }
+
+    public void testSetHelp() {
+        try {
+            test(
+                    (a) -> assertCommandOutputContains(a, "/help /set", "command to launch"),
+                    (a) -> assertCommandOutputContains(a, "/help /set format", "vardecl"),
+                    (a) -> assertCommandOutputContains(a, "/hel /se for", "vardecl"),
+                    (a) -> assertCommandOutputContains(a, "/help /set editor", "temporary file")
+            );
+        } finally {
+            assertCommandCheckOutput(false, "/set feedback normal", s -> {
+            });
+        }
+    }
+
+    public void testSetHelpError() {
+        try {
+            test(
+                    (a) -> assertCommandOutputStartsWith(a, "/set newmode te command normal", "|  Created new feedback mode: te"),
+                    (a) -> assertCommand(a, "/set field te errorpre 'ERROR: '", ""),
+                    (a) -> assertCommandOutputStartsWith(a, "/set feedback te", "|  Feedback mode: te"),
+                    (a) -> assertCommandOutputContains(a, "/help /set xyz", "ERROR: Not a valid argument to /set: xyz"),
+                    (a) -> assertCommandOutputContains(a, "/help /set f", "ERROR: Ambiguous argument to /set: f")
+            );
+        } finally {
+            assertCommandCheckOutput(false, "/set feedback normal", s -> {
+            });
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/StringConcat/TestIndyStringConcat.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import com.sun.tools.classfile.*;
+import com.sun.tools.classfile.BootstrapMethods_attribute.BootstrapMethodSpecifier;
+import com.sun.tools.classfile.ConstantPool.CONSTANT_InvokeDynamic_info;
+import com.sun.tools.classfile.ConstantPool.CONSTANT_MethodHandle_info;
+
+import java.io.File;
+
+/*
+ * @test
+ * @bug     8148483 8151516 8151223
+ * @summary Test that StringConcat is working for JDK >= 9
+ * @modules jdk.jdeps/com.sun.tools.classfile
+ *
+ * @clean TestIndyStringConcat*
+ * @compile -source 6 -target 6 TestIndyStringConcat.java
+ * @run main TestIndyStringConcat false
+ *
+ * @clean TestIndyStringConcat*
+ * @compile -source 7 -target 7 TestIndyStringConcat.java
+ * @run main TestIndyStringConcat false
+ *
+ * @clean TestIndyStringConcat*
+ * @compile -source 8 -target 8 TestIndyStringConcat.java
+ * @run main TestIndyStringConcat false
+ *
+ * @clean TestIndyStringConcat*
+ * @compile -XDstringConcat=inline -source 9 -target 9 TestIndyStringConcat.java
+ * @run main TestIndyStringConcat false
+ *
+ * @clean TestIndyStringConcat*
+ * @compile -XDstringConcat=indy -source 9 -target 9 TestIndyStringConcat.java
+ * @run main TestIndyStringConcat true
+ *
+ * @clean TestIndyStringConcat*
+ * @compile -XDstringConcat=indyWithConstants -source 9 -target 9 TestIndyStringConcat.java
+ * @run main TestIndyStringConcat true
+ */
+public class TestIndyStringConcat {
+
+    static String other;
+
+    public static String test() {
+        return "Foo" + other;
+    }
+
+    public static void main(String[] args) throws Exception {
+        boolean expected = Boolean.valueOf(args[0]);
+        boolean actual = hasStringConcatFactoryCall("test");
+        if (expected != actual) {
+            throw new AssertionError("expected = " + expected + ", actual = " + actual);
+        }
+    }
+
+    public static boolean hasStringConcatFactoryCall(String methodName) throws Exception {
+        ClassFile classFile = ClassFile.read(new File(System.getProperty("test.classes", "."),
+                TestIndyStringConcat.class.getName() + ".class"));
+        ConstantPool constantPool = classFile.constant_pool;
+
+        BootstrapMethods_attribute bsm_attr =
+                (BootstrapMethods_attribute)classFile
+                        .getAttribute(Attribute.BootstrapMethods);
+
+        for (Method method : classFile.methods) {
+            if (method.getName(constantPool).equals(methodName)) {
+                Code_attribute code = (Code_attribute) method.attributes
+                        .get(Attribute.Code);
+                for (Instruction i : code.getInstructions()) {
+                    if (i.getOpcode() == Opcode.INVOKEDYNAMIC) {
+                        CONSTANT_InvokeDynamic_info indyInfo =
+                                (CONSTANT_InvokeDynamic_info) constantPool.get(i.getUnsignedShort(1));
+
+                        BootstrapMethodSpecifier bsmSpec =
+                                bsm_attr.bootstrap_method_specifiers[indyInfo.bootstrap_method_attr_index];
+
+                        CONSTANT_MethodHandle_info bsmInfo =
+                                (CONSTANT_MethodHandle_info) constantPool.get(bsmSpec.bootstrap_method_ref);
+
+                        if (bsmInfo.getCPRefInfo().getClassName().equals("java/lang/invoke/StringConcatFactory")) {
+                            return true;
+                        }
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/StringConcat/access/Holder.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package p1;
+
+public class Holder {
+    public Private_PublicClass             c1 = new Private_PublicClass();
+    public Private_PublicInterface         c2 = new Private_PublicInterface();
+    public Private_PrivateInterface1       c3 = new Private_PrivateInterface1();
+    public Private_PrivateInterface2       c4 = new Private_PrivateInterface2();
+
+    public Public_PublicClass              c5 = new Public_PublicClass();
+    public Public_PublicInterface          c6 = new Public_PublicInterface();
+    public Public_PrivateInterface1        c7 = new Public_PrivateInterface1();
+    public Public_PrivateInterface2        c8 = new Public_PrivateInterface2();
+
+    public Private_PublicClass[]          ac1 = new Private_PublicClass[0];
+    public Private_PublicInterface[]      ac2 = new Private_PublicInterface[0];
+    public Private_PrivateInterface1[]    ac3 = new Private_PrivateInterface1[0];
+    public Private_PrivateInterface2[]    ac4 = new Private_PrivateInterface2[0];
+
+    public Public_PublicClass[]           ac5 = new Public_PublicClass[0];
+    public Public_PublicInterface[]       ac6 = new Public_PublicInterface[0];
+    public Public_PrivateInterface1[]     ac7 = new Public_PrivateInterface1[0];
+    public Public_PrivateInterface2[]     ac8 = new Public_PrivateInterface2[0];
+
+    public Private_PublicClass[][]       aac1 = new Private_PublicClass[0][];
+    public Private_PublicInterface[][]   aac2 = new Private_PublicInterface[0][];
+    public Private_PrivateInterface1[][] aac3 = new Private_PrivateInterface1[0][];
+    public Private_PrivateInterface2[][] aac4 = new Private_PrivateInterface2[0][];
+
+    public Public_PublicClass[][]        aac5 = new Public_PublicClass[0][];
+    public Public_PublicInterface[][]    aac6 = new Public_PublicInterface[0][];
+    public Public_PrivateInterface1[][]  aac7 = new Public_PrivateInterface1[0][];
+    public Public_PrivateInterface2[][]  aac8 = new Public_PrivateInterface2[0][];
+
+    public PublicInterface                 i1 = new Private_PublicInterface();
+    public PrivateInterface1               i2 = new Private_PrivateInterface1();
+    public PrivateInterface2               i3 = new Private_PrivateInterface2();
+
+    public PublicInterface[]              ai1 = new Private_PublicInterface[0];
+    public PrivateInterface1[]            ai2 = new Private_PrivateInterface1[0];
+    public PrivateInterface2[]            ai3 = new Private_PrivateInterface2[0];
+
+    public PublicInterface[][]           aai1 = new Private_PublicInterface[0][];
+    public PrivateInterface1[][]         aai2 = new Private_PrivateInterface1[0][];
+    public PrivateInterface2[][]         aai3 = new Private_PrivateInterface2[0][];
+}
+
+interface PrivateInterface1 {
+}
+
+interface PrivateInterface2 extends PublicInterface {
+}
+
+class Private_PublicClass extends PublicClass {
+    public String toString() {
+        return "passed";
+    }
+}
+
+class Private_PublicInterface implements PublicInterface {
+    public String toString() {
+        return "passed";
+    }
+}
+
+class Private_PrivateInterface1 implements PrivateInterface1 {
+    public String toString() {
+        return "passed";
+    }
+}
+
+class Private_PrivateInterface2 implements PrivateInterface2 {
+    public String toString() {
+        return "passed";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/StringConcat/access/PublicClass.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package p1;
+
+public class PublicClass {
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/StringConcat/access/PublicInterface.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package p1;
+
+public interface PublicInterface {
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/StringConcat/access/Public_PrivateInterface1.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package p1;
+
+public class Public_PrivateInterface1 implements PrivateInterface1 {
+    public String toString() {
+        return "passed";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/StringConcat/access/Public_PrivateInterface2.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package p1;
+
+public class Public_PrivateInterface2 implements PrivateInterface2 {
+    public String toString() {
+        return "passed";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/StringConcat/access/Public_PublicClass.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package p1;
+
+public class Public_PublicClass {
+    public String toString() {
+        return "passed";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/StringConcat/access/Public_PublicInterface.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package p1;
+
+public class Public_PublicInterface implements PublicInterface {
+    public String toString() {
+        return "passed";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/StringConcat/access/Test.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,196 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import com.sun.tools.classfile.*;
+import com.sun.tools.classfile.ConstantPool.*;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/*
+ * @test
+ * @bug     8151223
+ * @summary String concatenation fails with implicit toString() on package-private class
+ * @modules jdk.jdeps/com.sun.tools.classfile
+ *
+ * @clean *
+ * @compile -XDstringConcat=indy              Holder.java PublicClass.java PublicInterface.java Public_PublicClass.java Public_PublicInterface.java Public_PrivateInterface1.java Public_PrivateInterface2.java Test.java
+ * @run main Test
+ *
+ * @clean *
+ * @compile -XDstringConcat=indyWithConstants Holder.java PublicClass.java PublicInterface.java Public_PublicClass.java Public_PublicInterface.java Public_PrivateInterface1.java Public_PrivateInterface2.java Test.java
+ * @run main Test
+ */
+
+public class Test {
+    static List<String> actualTypes;
+
+    public static void main(String[] argv) throws Exception {
+        readIndyTypes();
+
+        p1.Holder holder = new p1.Holder();
+
+        int idx = 0;
+
+        // ----------------------------------------------------------------------------
+
+        // public Private_PublicClass            c1 = new Private_PublicClass();
+        test("" + holder.c1, idx++, "(Lp1/PublicClass;)Ljava/lang/String;");
+
+        // public Private_PublicInterface        c2 = new Private_PublicInterface();
+        test("" + holder.c2, idx++, "(Ljava/lang/Object;)Ljava/lang/String;");
+
+        // public Private_PrivateInterface1      c3 = new Private_PrivateInterface1();
+        test("" + holder.c3, idx++, "(Ljava/lang/Object;)Ljava/lang/String;");
+
+        // public Private_PrivateInterface2      c4 = new Private_PrivateInterface2();
+        test("" + holder.c4, idx++, "(Ljava/lang/Object;)Ljava/lang/String;");
+
+        // public Public_PublicClass             c5 = new Public_PublicClass();
+        test("" + holder.c5, idx++, "(Lp1/Public_PublicClass;)Ljava/lang/String;");
+
+        // public Public_PublicInterface         c6 = new Public_PublicInterface();
+        test("" + holder.c6, idx++, "(Lp1/Public_PublicInterface;)Ljava/lang/String;");
+
+        // public Public_PrivateInterface1       c7 = new Public_PrivateInterface1();
+        test("" + holder.c7, idx++, "(Lp1/Public_PrivateInterface1;)Ljava/lang/String;");
+
+        // public Public_PrivateInterface2       c8 = new Public_PrivateInterface2();
+        test("" + holder.c8, idx++, "(Lp1/Public_PrivateInterface2;)Ljava/lang/String;");
+
+        // ----------------------------------------------------------------------------
+
+        // public Private_PublicClass[]          ac1 = new Private_PublicClass[0];
+        test("" + holder.ac1, idx++, "([Lp1/PublicClass;)Ljava/lang/String;");
+
+        // public Private_PublicInterface[]      ac2 = new Private_PublicInterface[0];
+        test("" + holder.ac2, idx++, "([Ljava/lang/Object;)Ljava/lang/String;");
+
+        // public Private_PrivateInterface1[]    ac3 = new Private_PrivateInterface1[0];
+        test("" + holder.ac3, idx++, "([Ljava/lang/Object;)Ljava/lang/String;");
+
+        // public Private_PrivateInterface2[]    ac4 = new Private_PrivateInterface2[0];
+        test("" + holder.ac4, idx++, "([Ljava/lang/Object;)Ljava/lang/String;");
+
+        // public Public_PublicClass[]           ac5 = new Public_PublicClass[0];
+        test("" + holder.ac5, idx++, "([Lp1/Public_PublicClass;)Ljava/lang/String;");
+
+        // public Public_PublicInterface[]       ac6 = new Public_PublicInterface[0];
+        test("" + holder.ac6, idx++, "([Lp1/Public_PublicInterface;)Ljava/lang/String;");
+
+        // public Public_PrivateInterface1[]     ac7 = new Public_PrivateInterface1[0];
+        test("" + holder.ac7, idx++, "([Lp1/Public_PrivateInterface1;)Ljava/lang/String;");
+
+        // public Public_PrivateInterface2[]     ac8 = new Public_PrivateInterface2[0];
+        test("" + holder.ac8, idx++, "([Lp1/Public_PrivateInterface2;)Ljava/lang/String;");
+
+        // ----------------------------------------------------------------------------
+
+        // public Private_PublicClass[][]       aac1 = new Private_PublicClass[0][];
+        test("" + holder.aac1, idx++, "([[Lp1/PublicClass;)Ljava/lang/String;");
+
+        // public Private_PublicInterface[][]   aac2 = new Private_PublicInterface[0][];
+        test("" + holder.aac2, idx++, "([[Ljava/lang/Object;)Ljava/lang/String;");
+
+        // public Private_PrivateInterface1[][] aac3 = new Private_PrivateInterface1[0][];
+        test("" + holder.aac3, idx++, "([[Ljava/lang/Object;)Ljava/lang/String;");
+
+        // public Private_PrivateInterface2[][] aac4 = new Private_PrivateInterface2[0][];
+        test("" + holder.aac4, idx++, "([[Ljava/lang/Object;)Ljava/lang/String;");
+
+        // public Public_PublicClass[][]        aac5 = new Public_PublicClass[0][];
+        test("" + holder.aac5, idx++, "([[Lp1/Public_PublicClass;)Ljava/lang/String;");
+
+        // public Public_PublicInterface[][]    aac6 = new Public_PublicInterface[0][];
+        test("" + holder.aac6, idx++, "([[Lp1/Public_PublicInterface;)Ljava/lang/String;");
+
+        // public Public_PrivateInterface1[][]  aac7 = new Public_PrivateInterface1[0][];
+        test("" + holder.aac7, idx++, "([[Lp1/Public_PrivateInterface1;)Ljava/lang/String;");
+
+        // public Public_PrivateInterface2[][]  aac8 = new Public_PrivateInterface2[0][];
+        test("" + holder.aac8, idx++, "([[Lp1/Public_PrivateInterface2;)Ljava/lang/String;");
+
+        // ----------------------------------------------------------------------------
+
+        // public PublicInterface                i1 = new Private_PublicInterface();
+        test("" + holder.i1, idx++, "(Lp1/PublicInterface;)Ljava/lang/String;");
+
+        // public PrivateInterface1              i2 = new Private_PrivateInterface1();
+        test("" + holder.i2, idx++, "(Ljava/lang/Object;)Ljava/lang/String;");
+
+        // public PrivateInterface2              i3 = new Private_PrivateInterface2();
+        test("" + holder.i3, idx++, "(Ljava/lang/Object;)Ljava/lang/String;");
+
+        // public PublicInterface[]              ai1 = new Private_PublicInterface[0];
+        test("" + holder.ai1, idx++, "([Lp1/PublicInterface;)Ljava/lang/String;");
+
+        // public PrivateInterface1[]            ai2 = new Private_PrivateInterface1[0];
+        test("" + holder.ai2, idx++, "([Ljava/lang/Object;)Ljava/lang/String;");
+
+        // public PrivateInterface2[]            ai3 = new Private_PrivateInterface2[0];
+        test("" + holder.ai3, idx++, "([Ljava/lang/Object;)Ljava/lang/String;");
+
+        // public PublicInterface[][]           aai1 = new Private_PublicInterface[0][];
+        test("" + holder.aai1, idx++, "([[Lp1/PublicInterface;)Ljava/lang/String;");
+
+        // public PrivateInterface1[][]         aai2 = new Private_PrivateInterface1[0][];
+        test("" + holder.aai2, idx++, "([[Ljava/lang/Object;)Ljava/lang/String;");
+
+        // public PrivateInterface2[][]         aai3 = new Private_PrivateInterface2[0][];
+        test("" + holder.aai3, idx++, "([[Ljava/lang/Object;)Ljava/lang/String;");
+
+    }
+
+    public static void test(String actual, int index, String expectedType) {
+        if (!"passed".equals(actual) && !actual.startsWith("[")) {
+            throw new IllegalStateException("Unexpected result: " + actual);
+        }
+        String actualType = actualTypes.get(index);
+        if (!actualType.equals(expectedType)) {
+            throw new IllegalStateException("Unexpected type: expected = " + expectedType + ", actual = " + actualType);
+        }
+    }
+
+    public static void readIndyTypes() throws Exception {
+        actualTypes = new ArrayList<String>();
+
+        ClassFile classFile = ClassFile.read(new File(System.getProperty("test.classes", "."),
+                    Test.class.getName() + ".class"));
+        ConstantPool constantPool = classFile.constant_pool;
+
+        for (Method method : classFile.methods) {
+            if (method.getName(constantPool).equals("main")) {
+                Code_attribute code = (Code_attribute) method.attributes
+                        .get(Attribute.Code);
+                for (Instruction i : code.getInstructions()) {
+                    if (i.getOpcode() == Opcode.INVOKEDYNAMIC) {
+                        CONSTANT_InvokeDynamic_info indyInfo = (CONSTANT_InvokeDynamic_info) constantPool.get(i.getUnsignedShort(1));
+                        CONSTANT_NameAndType_info natInfo = indyInfo.getNameAndTypeInfo();
+                        actualTypes.add(natInfo.getType());
+                    }
+                }
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/T8139474/DashRelease7DashVerboseTest.java	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * bug 8139474
+ * @summary -release 7 -verbose causes Javac exception
+ * @compile -release 7 -verbose DashRelease7DashVerboseTest.java
+*/
+
+public class DashRelease7DashVerboseTest {}
--- a/langtools/test/tools/javac/TestIndyStringConcat.java	Mon Mar 14 12:35:52 2016 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code 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 General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @summary Test that StringConcat is working for JDK >= 9
- * @compile -source 6 -target 6 TestIndyStringConcat.java
- * @run main TestIndyStringConcat false
- * @clean TestIndyStringConcat*
- * @compile -source 7 -target 7 TestIndyStringConcat.java
- * @run main TestIndyStringConcat false
- * @clean TestIndyStringConcat*
- * @compile -source 8 -target 8 TestIndyStringConcat.java
- * @run main TestIndyStringConcat false
- * @clean TestIndyStringConcat*
- * @compile -XDstringConcat=inline -source 9 -target 9 TestIndyStringConcat.java
- * @run main TestIndyStringConcat false
- * @clean TestIndyStringConcat*
- * @compile -XDstringConcat=indy -source 9 -target 9 TestIndyStringConcat.java
- * @run main TestIndyStringConcat true
- * @clean TestIndyStringConcat*
- * @compile -XDstringConcat=indyWithConstants -source 9 -target 9 TestIndyStringConcat.java
- * @run main TestIndyStringConcat true
- */
-public class TestIndyStringConcat {
-
-    private static class MyObject {
-        public String toString() {
-            throw new RuntimeException("Boyyaa");
-        }
-    }
-
-    class Inner { }
-
-    public static void main(String[] args) {
-        boolean useIndyConcat = Boolean.valueOf(args[0]);
-        try {
-            String s = "Foo" + new MyObject();
-        } catch (RuntimeException ex) {
-            boolean indifiedStringConcat = false;
-            ex.printStackTrace();
-            for (StackTraceElement e : ex.getStackTrace()) {
-                if (e.getClassName().contains("$$StringConcat") &&
-                        e.getMethodName().equals("concat")) {
-                    indifiedStringConcat = true;
-                    break;
-                }
-            }
-            if (indifiedStringConcat != useIndyConcat) {
-                throw new AssertionError();
-            }
-        }
-    }
-}
--- a/make/CompileJavaModules.gmk	Mon Mar 14 12:35:52 2016 +0300
+++ b/make/CompileJavaModules.gmk	Mon Mar 14 17:51:25 2016 +0100
@@ -368,21 +368,7 @@
 ################################################################################
 
 jdk.hotspot.agent_ADD_JAVAC_FLAGS := $(DISABLE_WARNINGS),-overrides
-jdk.hotspot.agent_COPY := .png sa.js .properties
-
-ifeq ($(MODULE), jdk.hotspot.agent)
-  ### Copy gif files
-  # Special handling to copy gif files in images/toolbarButtonGraphics \
-  #   -> classes/toolbarButtonGraphics.
-  # These can't be handled by COPY to SetupJavaCompilation since they chop off
-  # one directory level.
-  $(eval $(call SetupCopyFiles, COPY_SA_IMAGES, \
-      SRC := $(HOTSPOT_TOPDIR)/src/jdk.hotspot.agent/share/classes/images, \
-      DEST := $(JDK_OUTPUTDIR)/modules/$(MODULE), \
-      FILES := $(wildcard $(HOTSPOT_TOPDIR)/src/jdk.hotspot.agent/share/classes/images/*/*/*.gif), \
-  ))
-  jdk.hotspot.agent: $(COPY_SA_IMAGES)
-endif
+jdk.hotspot.agent_COPY := .gif .png sa.js .properties
 
 ################################################################################
 
--- a/make/Images.gmk	Mon Mar 14 12:35:52 2016 +0300
+++ b/make/Images.gmk	Mon Mar 14 17:51:25 2016 +0100
@@ -62,10 +62,6 @@
   PROVIDER_MODULES += jdk.crypto.ucrypto
 endif
 
-ifeq ($(OPENJDK_TARGET_OS), macosx)
-  MAIN_MODULES += jdk.deploy.osx
-endif
-
 JRE_MODULES := $(filter-out $(MODULES_FILTER), $(MAIN_MODULES) $(PROVIDER_MODULES))
 JDK_MODULES := $(filter-out $(MODULES_FILTER), $(JRE_MODULES) $(TOOLS_MODULES))
 
--- a/make/Main.gmk	Mon Mar 14 12:35:52 2016 +0300
+++ b/make/Main.gmk	Mon Mar 14 17:51:25 2016 +0100
@@ -413,9 +413,6 @@
   # Declare dependencies from all other <module>-lib to java.base-lib
   $(foreach t, $(filter-out java.base-libs, $(LIBS_TARGETS)), \
       $(eval $t: java.base-libs))
-  # Declare the special case dependency for jdk.deploy.osx where libosx
-  # links against libosxapp.
-  jdk.deploy.osx-libs: java.desktop-libs
 
   # jdk.accessibility depends on java.desktop
   jdk.accessibility-libs: java.desktop-libs
--- a/make/common/NON_CORE_PKGS.gmk	Mon Mar 14 12:35:52 2016 +0300
+++ b/make/common/NON_CORE_PKGS.gmk	Mon Mar 14 17:51:25 2016 +0100
@@ -98,8 +98,7 @@
 SCTPAPI_PKGS = com.sun.nio.sctp
 
 ifeq ($(PLATFORM), macosx)
-  APPLE_EXT_PKGS = com.apple.concurrent \
-      com.apple.eawt \
+  APPLE_EXT_PKGS = com.apple.eawt \
       com.apple.eawt.event \
       com.apple.eio
 endif
--- a/make/devkit/createWindowsDevkit.sh	Mon Mar 14 12:35:52 2016 +0300
+++ b/make/devkit/createWindowsDevkit.sh	Mon Mar 14 17:51:25 2016 +0100
@@ -74,6 +74,10 @@
     cp $DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/
     cp $DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/amd64/
     cp $DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/amd64/
+    # The msvcdis dll is needed to run some of the tools in VC/bin but is not
+    # shipped in that directory. Copy it from the common dir.
+    cp "$VS_INSTALL_DIR/Common7/IDE/msvcdis${VS_VERSION_NUM_NODOT}.dll" \
+        $DEVKIT_ROOT/VC/bin/
 fi
 
 ################################################################################
--- a/modules.xml	Mon Mar 14 12:35:52 2016 +0300
+++ b/modules.xml	Mon Mar 14 17:51:25 2016 +0100
@@ -239,6 +239,7 @@
       <to>java.xml</to>
       <to>jdk.charsets</to>
       <to>jdk.management.resource</to>
+      <to>jdk.jfr</to>
       <to>jdk.net</to>
       <to>jdk.scripting.nashorn</to>
       <to>jdk.vm.ci</to>
@@ -250,6 +251,22 @@
       <to>jdk.jvmstat</to>
     </export>
     <export>
+      <name>jdk.internal.org.xml.sax</name>
+      <to>jdk.jfr</to>
+    </export>
+    <export>
+      <name>jdk.internal.org.xml.sax.helpers</name>
+      <to>jdk.jfr</to>
+    </export>
+    <export>
+      <name>jdk.internal.util.xml</name>
+      <to>jdk.jfr</to>
+    </export>
+    <export>
+      <name>jdk.internal.util.xml.impl</name>
+      <to>jdk.jfr</to>
+    </export>
+    <export>
       <name>jdk.internal.org.objectweb.asm</name>
       <to>java.instrument</to>
       <to>jdk.jfr</to>
@@ -300,7 +317,6 @@
       <to>java.xml</to>
       <to>jdk.charsets</to>
       <to>jdk.crypto.pkcs11</to>
-      <to>jdk.deploy.osx</to>
       <to>jdk.httpserver</to>
       <to>jdk.jartool</to>
       <to>jdk.jconsole</to>
@@ -314,6 +330,7 @@
       <to>jdk.vm.ci</to>
       <to>jdk.zipfs</to>
       <to>java.instrument</to>
+      <to>jdk.jfr</to>
     </export>
     <export>
       <name>sun.net</name>
@@ -421,7 +438,6 @@
     <export>
       <name>sun.security.pkcs</name>
       <to>jdk.crypto.ec</to>
-      <to>jdk.deploy.osx</to>
       <to>jdk.jartool</to>
     </export>
     <export>
@@ -462,7 +478,6 @@
       <to>jdk.crypto.mscapi</to>
       <to>jdk.crypto.pkcs11</to>
       <to>jdk.crypto.ucrypto</to>
-      <to>jdk.deploy.osx</to>
       <to>jdk.jartool</to>
       <to>jdk.policytool</to>
       <to>jdk.security.auth</to>
@@ -473,7 +488,6 @@
       <to>java.naming</to>
       <to>jdk.crypto.ec</to>
       <to>jdk.crypto.pkcs11</to>
-      <to>jdk.deploy.osx</to>
       <to>jdk.jartool</to>
       <to>jdk.security.auth</to>
     </export>
@@ -926,6 +940,7 @@
       <name>sun.management.spi</name>
       <to>jdk.management</to>
       <to>jdk.management.cmm</to>
+      <to>jdk.management.jfr</to>
     </export>
   </module>
   <module>
@@ -1707,11 +1722,6 @@
     <depend>java.base</depend>
   </module>
   <module>
-    <name>jdk.deploy.osx</name>
-    <depend>java.base</depend>
-    <depend>java.desktop</depend>
-  </module>
-  <module>
     <name>jdk.dev</name>
     <depend>java.base</depend>
   </module>
--- a/nashorn/.hgignore	Mon Mar 14 12:35:52 2016 +0300
+++ b/nashorn/.hgignore	Mon Mar 14 17:51:25 2016 +0100
@@ -28,3 +28,4 @@
 .project
 .externalToolBuilders/*
 .settings/*
+NashornProfile.txt
--- a/nashorn/.hgtags	Mon Mar 14 12:35:52 2016 +0300
+++ b/nashorn/.hgtags	Mon Mar 14 17:51:25 2016 +0100
@@ -342,3 +342,4 @@
 cfb3167456932b14c16a6d4cffd5fe295fbe01ff jdk-9+106
 8042e81b530e480dfdad41fd53a7a26f69ebba26 jdk-9+107
 58409eff7e3e0c07f12f543341769964619c0acf jdk-9+108
+70f0c397021116d7dbd79b01c6711c5d2e68dab4 jdk-9+109
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/Global.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/Global.java	Mon Mar 14 17:51:25 2016 +0100
@@ -2724,12 +2724,9 @@
             // Retrieve current state of ENV variables.
             env.putAll(System.getenv(), scriptEnv._strict);
 
-            // Some platforms, e.g., Windows, do not define the PWD environment
-            // variable, so that the $ENV.PWD property needs to be explicitly
-            // set.
-            if (!env.containsKey(ScriptingFunctions.PWD_NAME)) {
-                env.put(ScriptingFunctions.PWD_NAME, System.getProperty("user.dir"), scriptEnv._strict);
-            }
+            // Set the PWD variable to a value that is guaranteed to be understood
+            // by the underlying platform.
+            env.put(ScriptingFunctions.PWD_NAME, System.getProperty("user.dir"), scriptEnv._strict);
         }
         addOwnProperty(ScriptingFunctions.ENV_NAME, Attribute.NOT_ENUMERABLE, env);
 
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/CommandExecutor.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/CommandExecutor.java	Mon Mar 14 17:51:25 2016 +0100
@@ -64,6 +64,9 @@
         return System.getProperty("os.name").contains("Windows");
     });
 
+    // Cygwin drive alias prefix.
+    private static final String CYGDRIVE = "/cygdrive/";
+
     // User's home directory
     private static final String HOME_DIRECTORY =
         AccessController.doPrivileged((PrivilegedAction<String>)() -> {
@@ -246,18 +249,22 @@
         // Stream to copy to.
         private final OutputStream output;
 
+        private final Thread thread;
+
         Piper(final InputStream input, final OutputStream output) {
             this.input = input;
             this.output = output;
+            this.thread = new Thread(this, "$EXEC Piper");
         }
 
         /**
          * start - start the Piper in a new daemon thread
+         * @return this Piper
          */
-        void start() {
-            Thread thread = new Thread(this, "$EXEC Piper");
+        Piper start() {
             thread.setDaemon(true);
             thread.start();
+            return this;
         }
 
         /**
@@ -292,6 +299,10 @@
             }
         }
 
+        public void join() throws InterruptedException {
+            thread.join();
+        }
+
         // Exit thread.
     }
 
@@ -388,7 +399,7 @@
      * @return resolved Path to file
      */
     private static Path resolvePath(final String cwd, final String fileName) {
-        return Paths.get(cwd).resolve(fileName).normalize();
+        return Paths.get(sanitizePath(cwd)).resolve(fileName).normalize();
     }
 
     /**
@@ -402,7 +413,8 @@
         switch (cmd.get(0)) {
             // Set current working directory.
             case "cd":
-                // If zero args then use home dirrectory as cwd else use first arg.
+                final boolean cygpath = IS_WINDOWS && cwd.startsWith(CYGDRIVE);
+                // If zero args then use home directory as cwd else use first arg.
                 final String newCWD = cmd.size() < 2 ? HOME_DIRECTORY : cmd.get(1);
                 // Normalize the cwd
                 final Path cwdPath = resolvePath(cwd, newCWD);
@@ -418,7 +430,13 @@
                 }
 
                 // Set PWD environment variable to be picked up as cwd.
-                environment.put("PWD", cwdPath.toString());
+                // Make sure Cygwin paths look like Unix paths.
+                String scwd = cwdPath.toString();
+                if (cygpath && scwd.length() >= 2 &&
+                        Character.isLetter(scwd.charAt(0)) && scwd.charAt(1) == ':') {
+                    scwd = CYGDRIVE + Character.toLowerCase(scwd.charAt(0)) + "/" + scwd.substring(2);
+                }
+                environment.put("PWD", scwd);
                 return true;
 
             // Set an environment variable.
@@ -445,7 +463,8 @@
     }
 
     /**
-     * preprocessCommand - scan the command for redirects
+     * preprocessCommand - scan the command for redirects, and sanitize the
+     * executable path
      * @param tokens       command tokens
      * @param cwd          current working directory
      * @param redirectInfo redirection information
@@ -471,10 +490,39 @@
             command.add(stripQuotes(token));
         }
 
+        if (command.size() > 0) {
+            command.set(0, sanitizePath(command.get(0)));
+        }
+
         return command;
     }
 
     /**
+     * Sanitize a path in case the underlying platform is Cygwin. In that case,
+     * convert from the {@code /cygdrive/x} drive specification to the usual
+     * Windows {@code X:} format.
+     *
+     * @param d a String representing a path
+     * @return a String representing the same path in a form that can be
+     *         processed by the underlying platform
+     */
+    private static String sanitizePath(final String d) {
+        if (!IS_WINDOWS || (IS_WINDOWS && !d.startsWith(CYGDRIVE))) {
+            return d;
+        }
+        final String pd = d.substring(CYGDRIVE.length());
+        if (pd.length() >= 2 && pd.charAt(1) == '/') {
+            // drive letter plus / -> convert /cygdrive/x/... to X:/...
+            return pd.charAt(0) + ":" + pd.substring(1);
+        } else if (pd.length() == 1) {
+            // just drive letter -> convert /cygdrive/x to X:
+            return pd.charAt(0) + ":";
+        }
+        // remaining case: /cygdrive/ -> can't convert
+        return d;
+    }
+
+    /**
      * createProcessBuilder - create a ProcessBuilder for the command.
      * @param command      command tokens
      * @param cwd          current working directory
@@ -485,7 +533,7 @@
         // Create new ProcessBuilder.
         final ProcessBuilder pb = new ProcessBuilder(command);
         // Set current working directory.
-        pb.directory(new File(cwd));
+        pb.directory(new File(sanitizePath(cwd)));
 
         // Map environment variables.
         final Map<String, String> processEnvironment = pb.environment();
@@ -523,7 +571,7 @@
         // Create ProcessBuilder with cwd and redirects set.
         createProcessBuilder(command, cwd, redirectInfo);
 
-        // If piped the wait for the next command.
+        // If piped, wait for the next command.
         if (isPiped) {
             return;
         }
@@ -581,15 +629,17 @@
         ByteArrayOutputStream byteOutputStream = null;
         ByteArrayOutputStream byteErrorStream = null;
 
+        final List<Piper> piperThreads = new ArrayList<>();
+
         // If input is not redirected.
         if (inputIsPipe) {
             // If inputStream other than System.in is provided.
             if (inputStream != null) {
                 // Pipe inputStream to first process output stream.
-                new Piper(inputStream, firstProcess.getOutputStream()).start();
+                piperThreads.add(new Piper(inputStream, firstProcess.getOutputStream()).start());
             } else {
                 // Otherwise assume an input string has been provided.
-                new Piper(new ByteArrayInputStream(inputString.getBytes()), firstProcess.getOutputStream()).start();
+                piperThreads.add(new Piper(new ByteArrayInputStream(inputString.getBytes()), firstProcess.getOutputStream()).start());
             }
         }
 
@@ -598,11 +648,11 @@
             // If outputStream other than System.out is provided.
             if (outputStream != null ) {
                 // Pipe outputStream from last process input stream.
-                new Piper(lastProcess.getInputStream(), outputStream).start();
+                piperThreads.add(new Piper(lastProcess.getInputStream(), outputStream).start());
             } else {
                 // Otherwise assume an output string needs to be prepared.
                 byteOutputStream = new ByteArrayOutputStream(BUFFER_SIZE);
-                new Piper(lastProcess.getInputStream(), byteOutputStream).start();
+                piperThreads.add(new Piper(lastProcess.getInputStream(), byteOutputStream).start());
             }
         }
 
@@ -610,11 +660,11 @@
         if (errorIsPipe) {
             // If errorStream other than System.err is provided.
             if (errorStream != null) {
-                new Piper(lastProcess.getErrorStream(), errorStream).start();
+                piperThreads.add(new Piper(lastProcess.getErrorStream(), errorStream).start());
             } else {
                 // Otherwise assume an error string needs to be prepared.
                 byteErrorStream = new ByteArrayOutputStream(BUFFER_SIZE);
-                new Piper(lastProcess.getErrorStream(), byteErrorStream).start();
+                piperThreads.add(new Piper(lastProcess.getErrorStream(), byteErrorStream).start());
             }
         }
 
@@ -622,13 +672,13 @@
         for (int i = 0, n = processes.size() - 1; i < n; i++) {
             final Process prev = processes.get(i);
             final Process next = processes.get(i + 1);
-            new Piper(prev.getInputStream(), next.getOutputStream()).start();
+            piperThreads.add(new Piper(prev.getInputStream(), next.getOutputStream()).start());
         }
 
         // Wind up processes.
         try {
             // Get the user specified timeout.
-            long timeout = envVarLongValue("JJS_TIMEOUT");
+            final long timeout = envVarLongValue("JJS_TIMEOUT");
 
             // If user specified timeout (milliseconds.)
             if (timeout != 0) {
@@ -643,6 +693,10 @@
                 // Wait for last process and get exit code.
                 exitCode = lastProcess.waitFor();
             }
+            // Wait for all piper threads to terminate
+            for (final Piper piper : piperThreads) {
+                piper.join();
+            }
 
             // Accumulate the output and error streams.
             outputString += byteOutputStream != null ? byteOutputStream.toString() : "";
@@ -765,7 +819,7 @@
 
     /**
      * process - process a command array of strings
-     * @param script command script to be processed
+     * @param tokens command script to be processed
      */
     void process(final List<String> tokens) {
         // Prepare to accumulate command tokens.
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptingFunctions.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptingFunctions.java	Mon Mar 14 17:51:25 2016 +0100
@@ -72,7 +72,7 @@
     public static final String EXIT_NAME = "$EXIT";
 
     /** Names of special properties used by $ENV API. */
-    public  static final String ENV_NAME  = "$ENV";
+    public static final String ENV_NAME  = "$ENV";
 
     /** Name of the environment variable for the current working directory. */
     public static final String PWD_NAME  = "PWD";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/nosecurity/JDK-8151291.js	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * Test $EXEC and $ENV.PWD handling across platforms.
+ * There must be a java executable in the PATH.
+ *
+ * @test
+ * @option -scripting
+ * @run
+ */
+
+$EXEC(["java", "-version"])
+if ($EXIT != 0) {
+    throw 'java executable problem: ' + $ERR
+}
+
+function eq(p, q, e) {
+    if (p != q) {
+        throw e
+    }
+}
+
+function neq(p, q, e) {
+    if (p == q) {
+        throw e
+    }
+}
+
+var File    = Java.type("java.io.File"),
+    System  = Java.type("java.lang.System"),
+    win     = System.getProperty("os.name").startsWith("Windows"),
+    sep     = File.separator,
+    startwd = $ENV.PWD,
+    upwd    = startwd.substring(0, startwd.lastIndexOf(sep))
+
+$EXEC("ls")
+var ls_startwd = $OUT
+$EXEC("cd ..; ls")
+var ls_cdupwd = $OUT
+eq($ENV.PWD, startwd, 'PWD changed during $EXEC cd')
+neq(ls_startwd, ls_cdupwd, 'same ls result for startwd and upwd with $EXEC cd')
+
+$ENV.PWD = upwd
+eq($ENV.PWD, upwd, '$ENV.PWD change had no effect')
+$EXEC("ls")
+var ls_epupwd = $OUT
+neq(ls_startwd, ls_epupwd, 'same ls result for startwd and upwd with $ENV.PWD cd')
--- a/nashorn/test/script/trusted/JDK-8087292.js	Mon Mar 14 12:35:52 2016 +0300
+++ b/nashorn/test/script/trusted/JDK-8087292.js	Mon Mar 14 17:51:25 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,26 +29,58 @@
  * @run
  */
 
+load(__DIR__ + "JDK-util.js")
+
+var jHomePath = System.getenv("JAVA_HOME")
+var jLauncher = "${jHomePath}/bin/java"
+var altjLauncher = which('java')
+
+if (windows) {
+    if(winCyg) {
+        jLauncher = "${jHomePath}" + "/bin/java.exe"
+        jLauncher = cygpath(jLauncher,outPath.windows) 
+    }
+    else {
+        jLauncher = "${jHomePath}" + "\\bin\\java.exe"
+        altjLauncher = which('java.exe')
+        altjLauncher = cygpath(altjLauncher,outPath.windows)
+    }
+}
+
+function exists(f) {
+    return Files.exists(Paths.get(f))
+}
+
+var javaLauncher = exists(jLauncher) ? jLauncher : altjLauncher
+
+
+if (!exists(javaLauncher)) {
+    throw "no java launcher found; tried ${jLauncher} and ${altjLauncher}"
+}
+
 function tryExec() {
     try {
-        `java`
+	$EXEC("${javaLauncher}")
     } catch (e) {
-        print(e);
+      print(e)
     }
 
     // make sure we got non-zero ("failure") exit code!
     if ($EXIT == 0) {
-        print("Error: expected $EXIT code to be non-zero");
+        print("Error: expected $EXIT code to be non-zero")
     }
 }
+//convert windows paths to cygwin
+if (windows)
+    javaLauncher = (winCyg) ? cygpath(javaLauncher,outPath.mixed).trim() : cygpath(javaLauncher,outPath.windows).trim()
 
 // no exception now!
-tryExec();
+tryExec()
 
 // turn on error with non-zero exit code
-$ENV.JJS_THROW_ON_EXIT = "1";
-tryExec();
+$ENV.JJS_THROW_ON_EXIT = "1"
+tryExec()
 
 // no exception after this
-$ENV.JJS_THROW_ON_EXIT = "0";
-tryExec();
+$ENV.JJS_THROW_ON_EXIT = "0"
+tryExec()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/trusted/JDK-util.js	Mon Mar 14 17:51:25 2016 +0100
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * This file contains utility functions used by other tests.
+ * @subtest
+ */
+
+var Files = Java.type('java.nio.file.Files'),
+    Paths = Java.type('java.nio.file.Paths'),
+    System = Java.type('java.lang.System')
+
+var File = java.io.File
+var windows = System.getProperty("os.name").startsWith("Windows")
+var winCyg = false
+
+var outPath = {
+    windows:0, //C:\dir
+    mixed:1    //C:/dir
+}
+
+if (windows) {
+    //Is there any better way to diffrentiate between cygwin/command prompt on windows
+    var term = System.getenv("TERM")
+    winCyg = term ? true:false
+}
+
+/**
+ * Returns which command is selected from PATH
+ * @param cmd name of the command searched from PATH
+ */
+function which(cmd) {
+    var path = System.getenv("PATH")
+    var st = new java.util.StringTokenizer(path, File.pathSeparator)
+    while (st.hasMoreTokens()) {
+        var file = new File(st.nextToken(), cmd)
+        if (file.exists()) {
+            return (file.getAbsolutePath())
+        }
+    }
+}
+
+/**
+ * Unix cygpath implementation
+ * Supports only two outputs,windows(C:\dir\) and mixed(C:/dir/)
+ */
+function cygpath(path,mode) {
+   
+    var newpath = path
+    if(path.startsWith("/cygdrive/")){
+        var str = path.substring(10)
+        var index = str.indexOf('/',0)
+        var drv = str.substring(0,index)
+        var rstr = drv.toUpperCase() + ":"
+        newpath = str.replaceFirst(drv,rstr)
+    }
+    if (mode == outPath.windows)
+        return Paths.get(newpath).toString()
+    else {
+        newpath = newpath.replaceAll('\\\\','/')
+        return newpath
+    }                   
+
+}
+
--- a/test/lib/sun/hotspot/WhiteBox.java	Mon Mar 14 12:35:52 2016 +0300
+++ b/test/lib/sun/hotspot/WhiteBox.java	Mon Mar 14 17:51:25 2016 +0100
@@ -119,6 +119,28 @@
     return getConstantPool0(aClass);
   }
 
+  private native int getConstantPoolCacheIndexTag0();
+  public         int getConstantPoolCacheIndexTag() {
+    return getConstantPoolCacheIndexTag0();
+  }
+
+  private native int getConstantPoolCacheLength0(Class<?> aClass);
+  public         int getConstantPoolCacheLength(Class<?> aClass) {
+    Objects.requireNonNull(aClass);
+    return getConstantPoolCacheLength0(aClass);
+  }
+
+  private native int remapInstructionOperandFromCPCache0(Class<?> aClass, int index);
+  public         int remapInstructionOperandFromCPCache(Class<?> aClass, int index) {
+    Objects.requireNonNull(aClass);
+    return remapInstructionOperandFromCPCache0(aClass, index);
+  }
+
+  private native int encodeConstantPoolIndyIndex0(int index);
+  public         int encodeConstantPoolIndyIndex(int index) {
+    return encodeConstantPoolIndyIndex0(index);
+  }
+
   // JVMTI
   private native void addToBootstrapClassLoaderSearch0(String segment);
   public         void addToBootstrapClassLoaderSearch(String segment){
@@ -185,7 +207,7 @@
   // Compiler
   public native int     matchesMethod(Executable method, String pattern);
   public native int     matchesInline(Executable method, String pattern);
-  public native boolean shouldPrintAssembly(Executable method);
+  public native boolean shouldPrintAssembly(Executable method, int comp_level);
   public native int     deoptimizeFrames(boolean makeNotEntrant);
   public native void    deoptimizeAll();