diff --git a/.hgtags b/.hgtags
index a92b890..0c2443e 100644
--- a/.hgtags
+++ b/.hgtags
@@ -985,3 +985,20 @@
 83dce201f51fcaf5e20518d2d8f843a267587680 jdk8u201-b25
 a55558a5e910f2336b24784592f77f4fa848fdb2 jdk8u201-b26
 0bd4dbc4d66ff1a8ed6cc2095c19f9339283d274 jdk8u201-ga
+5c4f2cff396cb24e33e18dbc0e9b7f5b757c299c jdk8u202-b01
+c6d5e32c8ce2e363f74b892f0b2f8a1f834d3396 jdk8u202-b02
+d492c0449092f847c0cd5ac54f6cae87285c50aa jdk8u202-b03
+521708c35dd0b9f59db8312da512193a66bbb462 jdk8u202-b04
+d61ae55f24a97aa0b11ca3ec16082488cc487c13 jdk8u202-b05
+9f0f2cf7a03d12ce7c7797e073022ec8b0306e2e jdk8u202-b06
+f9ce9e9e966acd4b057e7fdd024f032c6501cec8 jdk8u202-b07
+6c6166477778069fbb8bddda0b2bd490c5165fe4 jdk8u202-b08
+2e575d455cacab1117667d73f81bc2774c0408af jdk8u202-b25
+a14b334da6a14ff6c800888b31a621671ddedcd4 jdk8u202-b26
+6c6166477778069fbb8bddda0b2bd490c5165fe4 jdk8u202-ga
+58a54ab25e5201d29fea1ed1e165c95ce479f5cf jdk8u212-b00
+22d26c0a8eb7ddfdbebf835c59b07e8b8da47359 jdk8u212-b01
+8b263aef666d72459ac637e3ff19554c9fb4e7ca jdk8u212-b02
+7dca173f654edf0720e62b72ef750c673bc6ebfe jdk8u212-b03
+90f8352e7f0642918735d66c38b3c6c44473691a jdk8u212-b04
+7dca173f654edf0720e62b72ef750c673bc6ebfe jdk8u212-ga
diff --git a/THIRD_PARTY_README b/THIRD_PARTY_README
index f9268ad..2247356 100644
--- a/THIRD_PARTY_README
+++ b/THIRD_PARTY_README
@@ -1096,33 +1096,6 @@
 OF SUCH DAMAGE.
 --- end of LICENSE ---
 
-%% This notice is provided with respect to FontConfig 2.5, which may be 
-included with JRE 8, JDK 8, and OpenJDK 8 source distributions on
-Linux and Solaris.
-
---- begin of LICENSE ---
-
-Copyright ?? 2001,2003 Keith Packard
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that the
-above copyright notice appear in all copies and that both that copyright
-notice and this permission notice appear in supporting documentation, and that
-the name of Keith Packard not be used in advertising or publicity pertaining
-to distribution of the software without specific, written prior permission.
-Keith Packard makes no representations about the suitability of this software
-for any purpose.  It is provided "as is" without express or implied warranty.
-
-KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL KEITH
-PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
-DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-
---- end of LICENSE ---
-
 -------------------------------------------------------------------------------
 
 %% This notice is provided with respect to freebXML Registry 3.0 & 3.1,
diff --git a/src/com/sun/xml/internal/stream/util/ThreadLocalBufferAllocator.java b/src/com/sun/xml/internal/stream/util/ThreadLocalBufferAllocator.java
index 25bdf6b..5f4243d 100644
--- a/src/com/sun/xml/internal/stream/util/ThreadLocalBufferAllocator.java
+++ b/src/com/sun/xml/internal/stream/util/ThreadLocalBufferAllocator.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2018, 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,15 +39,19 @@
  * @author Santiago.PericasGeertsen@sun.com
  */
 public class ThreadLocalBufferAllocator {
-   private static ThreadLocal tlba = new ThreadLocal();
+    private static final ThreadLocal<SoftReference<BufferAllocator>> TL = new ThreadLocal<>();
 
-   public static BufferAllocator getBufferAllocator() {
-        SoftReference bAllocatorRef = (SoftReference) tlba.get();
-        if (bAllocatorRef == null || bAllocatorRef.get() == null) {
-            bAllocatorRef = new SoftReference(new BufferAllocator());
-            tlba.set(bAllocatorRef);
+    public static BufferAllocator getBufferAllocator() {
+        BufferAllocator ba = null;
+        SoftReference<BufferAllocator> sr = TL.get();
+        if (sr != null) {
+            ba = sr.get();
         }
-
-        return (BufferAllocator) bAllocatorRef.get();
-   }
+        if (ba == null) {
+            ba = new BufferAllocator();
+            sr = new SoftReference<>(ba);
+            TL.set(sr);
+        }
+        return ba;
+    }
 }
